Ticket #2657 (closed defect: fixed)

Opened 2 years ago

Last modified 2 years ago

nevow.testutil.JavaScriptTestCase.run raises exceptions in violation of the interface it is meant to implement

Reported by: exarkun Assigned to: exarkun
Priority: high Milestone:
Component: Nevow Severity: normal
Keywords: Cc:
Estimated Completion (YYYY/MM/DD): Branch: branches/run-errors-2657
Author:

Description

TestCase.run isn't allowed to raise exceptions, but JavaScriptTestCase will do so if a required JavaScript module cannot be found for some reason (ie, the plugin defining it was not installed).

This has consequences:

nevow.test.test_i18n.UNGettext.test_simple_flat_one ... [OK]
Traceback (most recent call last):
  File "/usr/bin/trial", line 24, in ?
    run()
  File "/usr/lib/python2.4/site-packages/twisted/scripts/trial.py", line 345, in run
    test_result = trialRunner.run(suite)
  File "/usr/lib/python2.4/site-packages/twisted/trial/runner.py", line 794, in run
    suite.run(result)
  File "/usr/lib/python2.4/site-packages/twisted/trial/runner.py", line 285, in run
    TestSuite.run(self, result)
  File "/usr/lib/python2.4/site-packages/twisted/trial/runner.py", line 149, in run
    test(result)
  File "/usr/lib/python2.4/site-packages/twisted/trial/runner.py", line 138, in __call__
    return self.run(result)
  File "/usr/lib/python2.4/site-packages/twisted/trial/runner.py", line 176, in run
    super(LoggedSuite, self).run(result)
  File "/usr/lib/python2.4/site-packages/twisted/trial/runner.py", line 149, in run
    test(result)
  File "/usr/lib/python2.4/site-packages/twisted/trial/runner.py", line 138, in __call__
    return self.run(result)
  File "/usr/lib/python2.4/site-packages/twisted/trial/runner.py", line 149, in run
    test(result)
  File "/usr/lib/python2.4/site-packages/twisted/trial/runner.py", line 138, in __call__
    return self.run(result)
  File "/usr/lib/python2.4/site-packages/twisted/trial/runner.py", line 149, in run
    test(result)
  File "/usr/lib/python2.4/site-packages/twisted/trial/runner.py", line 138, in __call__
    return self.run(result)
  File "/usr/lib/python2.4/site-packages/twisted/trial/runner.py", line 149, in run
    test(result)
  File "/usr/lib/python2.4/site-packages/twisted/trial/runner.py", line 138, in __call__
    return self.run(result)
  File "/usr/lib/python2.4/site-packages/twisted/trial/runner.py", line 149, in run
    test(result)
  File "/usr/lib/python2.4/site-packages/twisted/trial/unittest.py", line 537, in __call__
    return self.run(*args, **kwargs)
  File "/home/buildbot/q-exponent/q-nevowinstall/build/installdir/lib/python2.4/site-packages/Nevow-0.9.31_r16232-py2.4.egg/nevow/testutil.py", line 492, in run
    script = self.makeScript(self.testMethod())
  File "/home/buildbot/q-exponent/q-nevowinstall/build/installdir/lib/python2.4/site-packages/Nevow-0.9.31_r16232-py2.4.egg/nevow/testutil.py", line 468, in makeScript
    scriptFile = self._writeToTemp(generateTestScript(jsfile))
  File "/home/buildbot/q-exponent/q-nevowinstall/build/installdir/lib/python2.4/site-packages/Nevow-0.9.31_r16232-py2.4.egg/nevow/jsutil.py", line 98, in generateTestScript
    dependencies = getDependencies(fname)
  File "/home/buildbot/q-exponent/q-nevowinstall/build/installdir/lib/python2.4/site-packages/Nevow-0.9.31_r16232-py2.4.egg/nevow/jsutil.py", line 46, in getDependencies
    bootstrapModules = [JSModule.getOrCreate(m, packages)
  File "/home/buildbot/q-exponent/q-nevowinstall/build/installdir/lib/python2.4/site-packages/Nevow-0.9.31_r16232-py2.4.egg/nevow/athena.py", line 155, in getOrCreate
    mod = cls._modules[name] = cls(name, mapping)
  File "/home/buildbot/q-exponent/q-nevowinstall/build/installdir/lib/python2.4/site-packages/Nevow-0.9.31_r16232-py2.4.egg/nevow/athena.py", line 168, in __init__
    self._cache = CachedFile(self.mapping[self.name], self._getDeps)
KeyError: 'Divmod'
program finished with exit code 1

Instead of raising an exception, it should add an error to the result.

Change History

07/14/08 10:06:22 changed by exarkun

  • branch set to branches/run-errors-2657.
  • author set to exarkun.

(In [16233]) Branching to 'run-errors-2657'

07/14/08 10:06:55 changed by exarkun

(In [16234]) handle errors from makeScript

refs #2657

07/14/08 10:08:46 changed by exarkun

  • keywords set to review.
  • owner changed from exarkun to washort.

07/14/08 18:27:38 changed by washort

  • owner changed from washort to exarkun.
  • author deleted.

Looks good -- definitely makes the q-nevowinstall output more reasonable. Merge.

07/14/08 18:33:50 changed by washort

  • keywords deleted.

07/15/08 13:48:32 changed by exarkun

  • status changed from new to closed.
  • resolution set to fixed.

(In [16240]) Merge run-errors-2657

Author: exarkun Reviewer: washort Fixes: #2657

Change the JavaScriptTestCase.run method so that it handles errors from its own makeScript method and turns them into errors given to the pyunit result object rather than allowing them to be raised to the caller of run (which is not allowed and will probably result in the test run aborting prematurely).

jethro@divmod.org