[py-dev] py.test error?

anurag uniyal anuraguniyal at yahoo.com
Wed Aug 1 14:30:25 CEST 2007


While running py.test on my unitests I got following error in py.test code?
It occurred when I changed an assert statement so that it fails.
I tried to replicate this in a small sample script but could not replicate it.

Here is the complete output:

______ entrypoint: Test_CollectionPrefs().test_recursive_attribute_access ______

    def runtraced(self, colitem):
        if self.shouldclose():
            raise Exit, "received external close signal"

        outcome = None
        colitem.startcapture()
        try:
            self.start(colitem)
            try:
                try:
                    if colitem._stickyfailure:
                        raise colitem._stickyfailure
>                   outcome = self.run(colitem)

[/usr/lib/python2.4/site-packages/py/test/session.py:83]
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _

    def run(self, colitem):
        if self.config.option.collectonly and isinstance(colitem, py.test.collect.Item):
            return
        if isinstance(colitem, py.test.collect.Item):
            colitem._skipbykeyword(self.config.option.keyword)
>       res = colitem.run()

[/usr/lib/python2.4/site-packages/py/test/session.py:106]
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _

    def run(self):
        """ setup and execute the underlying test function. """
        self._state.prepare(self)
>       self.execute(self.obj, *self._args)

[/usr/lib/python2.4/site-packages/py/test/item.py:67]
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _

    def execute(self, target, *args):
        """ execute the given test function. """
>       target(*args)

[/usr/lib/python2.4/site-packages/py/test/item.py:71]
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _

    def __init__(self, *args):
        BuiltinAssertionError.__init__(self, *args)
        if args:
            self.msg = str(args[0])
        else:
            f = sys._getframe(1)
            try:
                source = py.code.Frame(f).statement
                source = str(source.deindent()).strip()
            except py.error.ENOENT:
                source = None
                # this can also occur during reinterpretation, when the
                # co_filename is set to "<run>".
            if source:
>               self.msg = exprinfo.interpret(source, f, should_fail=True)

[/usr/lib/python2.4/site-packages/py/magic/assertion.py:22]
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _

    def interpret(source, frame, should_fail=False):
        module = Interpretable(parse(source, 'exec').node)
        #print "got module", module
        if isinstance(frame, py.std.types.FrameType):
            frame = py.code.Frame(frame)
        try:
            module.run(frame)
        except Failure, e:
>           return getfailure(e)

[/usr/lib/python2.4/site-packages/py/magic/exprinfo.py:424]
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _

    def getfailure(e):
>       explanation = e.node.nice_explanation()

[/usr/lib/python2.4/site-packages/py/magic/exprinfo.py:450]
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _

    def nice_explanation(self):
        # uck!  See CallFunc for where \n{ and \n} escape sequences are used
        raw_lines = (self.explanation or '').split('\n')
        # escape newlines not followed by { and }
        lines = [raw_lines[0]]
        for l in raw_lines[1:]:
            if l.startswith('{') or l.startswith('}'):
                lines.append(l)
            else:
                lines[-1] += '\\n' + l

        result = lines[:1]
        stack = [0]
        stackcnt = [0]
        for line in lines[1:]:
            if line.startswith('{'):
                if stackcnt[-1]:
                    s = 'and   '
                else:
                    s = 'where '
                stack.append(len(result))
                stackcnt[-1] += 1
                stackcnt.append(0)
                result.append(' +' + '  '*(len(stack)-1) + s + line[1:])
            else:
                assert line.startswith('}')
                stack.pop()
                stackcnt.pop()
E               result[stack[-1]] += line[1:]
>               IndexError: list index out of range

[/usr/lib/python2.4/site-packages/py/magic/exprinfo.py:78]
_______________________________________________________________




       
____________________________________________________________________________________
Be a better Globetrotter. Get better travel answers from someone who knows. Yahoo! Answers - Check it out.
http://answers.yahoo.com/dir/?link=list&sid=396545469



More information about the Pytest-dev mailing list