On Tue, Aug 12, 2008 at 09:17:39PM +0100, Chris Withers wrote:
> I could have sworn I reported this before but couldn't find anything in 
> the archives so apologies if I have posted this before...

I have a feeling of deja vu about this...

> Anyway, running zope.testrunner's trunk's tests on windows seems to have 
> some problems. These don't occur when running them on Linux.

I'm vaguely interested in fixing these, but I don't do Windows.

> File "zope.testing\src\zope\testing\testrunner\testrunner-debugging-
> layer-setup.test", line 45, in testrunner-debugging-layer-setup.test
>        File "zope.testing\src\zope\testing\testrunner\find.py", line
> 103, in find_suites
>          suite = StartUpFailure(

Let's look at this statement closer:

                    module = import_name(module_name)
                except KeyboardInterrupt:
-->                 suite = StartUpFailure(
                        options, module_name,
                        + (sys.exc_info()[2].tb_next.tb_next,),

It would appear that the traceback is shallower than the code expects.  I don't
know why it is trying to strip the first two frames of the stack, either.

>        File "zope.testing\src\zope\testing\testrunner\find.py", line
> 36, in __init__
>          post_mortem(exc_info)
>        File "zope.testing\src\zope\testing\testrunner\runner.py", lin
> e 717, in post_mortem
>          pdb.post_mortem(exc_info[2])
>        File "Python24\lib\pdb.py", line 1016, in post_mortem
>          while t.tb_next is not None:

Apparently the traceback was exactly two frames deep, and with those stripped,
the code passed None to pdb.post_mortem().

It would be good if someone who has Windows and Linux could compare the
tracebacks in question.

I'd also suggest extracting the stack frame stripping into a function
that would be a bit more defensive:

    def strip_tb_frames((exc_type, exc_value, tb), count):
        while tb.tb_next is not None and count > 0:
            tb = tb.tb_next
            count -= 1
        return (exc_type, exc_value, tb)

and call it like this

                    suite = StartUpFailure(
                        options, module_name,
                        strip_tb_frames(sys.exc_info(), 2)

(Why oh why does Guido want to take away my beloved implicit argument
tuple unpacking in Python 3.0?)

>      AttributeError: 'NoneType' object has no attribute 'tb_next'

Next error:

> Failure in test zope.testing\src\zope\testing\testrunner\testrunner-
> coverage-win32.txt
> Failed doctest test for testrunner-coverage-win32.txt
>    File "zope.testing\src\zope\testing\testrunner\testrunner-coverage
> -win32.txt", line 0

The name of this test suggests it's only run under Win32, so any refactoring
done on Linux is likely to break it without anyone noticing.

> ----------------------------------------------------------------------
> File "zope.testing\src\zope\testing\testrunner\testrunner-coverage-w
> in32.txt", line 14, in testrunner-coverage-win32.txt
> Failed example:
>      ignore = testrunner.TestIgnore(WinOptions())
> Exception raised:
>      Traceback (most recent call last):
>        File "zope.testing\src\zope\testing\doctest.py", line 1356, in
>   __run
>          compileflags, 1) in test.globs
>        File "<doctest testrunner-coverage-win32.txt[2]>", line 1, in ?
>      AttributeError: 'module' object has no attribute 'TestIgnore'

TestIgnore moved from zope.testing.testrunner to
zope.testing.testrunner.coverage.  It should be simple to fix the test.

>    Ran 183 tests with 2 failures and 0 errors in 43.094 seconds.
> Tearing down left over layers:
>    Tear down zope.testing.testrunner.layer.UnitTests in 0.000 seconds.

Marius Gedminas
An NT server can be run by an idiot, and usually is.

Attachment: signature.asc
Description: Digital signature

Zope-Dev maillist  -  Zope-Dev@zope.org
**  No cross posts or HTML encoding!  **
(Related lists - 
 http://mail.zope.org/mailman/listinfo/zope )

Reply via email to