コード例 #1
0
    def test_exception(self):
        # SETUP
        source = """\
try:
    raise RuntimeError('foo')
except:
    builder.exception()"""
        expected_report = """\

RuntimeError: foo 
"""
        
        # EXEC
        builder = ReportBuilder()
        environment = dict(builder=builder)
        exec_code(source, environment, environment)
        report = builder.report()
        
        # VERIFY
        self.assertEqual(expected_report.splitlines(), report.splitlines())
コード例 #2
0
    def trace_code(self, source):
        builder = ReportBuilder(self.message_limit)
        builder.max_width = self.max_width

        try:
            tree = parse(source)
    
            visitor = TraceAssignments()
            new_tree = visitor.visit(tree)
            fix_missing_locations(new_tree)
#            from ast import dump
#            print(dump(new_tree, include_attributes=True))
            code = compile(new_tree, PSEUDO_FILENAME, 'exec')
            
            self.environment[CONTEXT_NAME] = builder
            exec_code(code, self.environment, self.environment)
        except SyntaxError:
            ex = sys.exc_info()[1]
            messages = traceback.format_exception_only(type(ex), ex)
            builder.add_message(messages[-1].strip() + ' ', ex.lineno)
        except:
            etype, value, tb = sys.exc_info()
            is_reported = False
            builder.message_limit = None # make sure we don't hit limit
            builder.max_width = None # make sure we don't hit limit
            messages = traceback.format_exception_only(etype, value)
            message = messages[-1].strip() + ' '
            entries = traceback.extract_tb(tb)
            for filename, line_number, _, _ in entries:
                if filename == PSEUDO_FILENAME:
                    builder.add_extra_message(message, line_number)
                    is_reported = True
            if not is_reported:
                builder.add_message(message, 1)
#                print('=== Unexpected Exception in tracing code ===')
#                traceback.print_exception(etype, value, tb)
                
        return builder.report()
コード例 #3
0
 def trace_turtle(self, source):
     exec_code(source, self.environment, self.environment)
     
     return '\n'.join(self.turtle.report)
コード例 #4
0
 def trace_canvas(self, source):
     exec_code(source, self.environment, self.environment)
     
     return '\n'.join(self.turtle.screen.cv.report)