def main(): parser = argparse.ArgumentParser(description='Trace Python code.') parser.add_argument('-c', '--canvas', action='store_true', help='Should canvas commands be printed?') parser.add_argument('-x', '--width', type=int, default=800, help='width of the canvas in pixels') parser.add_argument('-y', '--height', type=int, default=600, help='height of the canvas in pixels') parser.add_argument('-m', '--module', help='install traced code as a module with this name') args = parser.parse_args() code = sys.stdin.read() canvas = Canvas(args.width, args.height) tracer = CodeTracer(canvas) tracer.max_width = 200000 code_report = tracer.trace_code(code, module_name=args.module) turtle_report = MockTurtle.get_all_reports() if turtle_report and args.canvas: print('start_canvas') print('\n'.join(turtle_report)) print('end_canvas') print('.') print(code_report)
def test_monkey_patch_anonymous_turtle(self): MockTurtle.monkey_patch() expected_report = """\ create_line 0 0 100 0 fill='black' pensize=1 """ turtle.fd(100) # @UndefinedVariable report = MockTurtle.get_all_reports() self.assertEqual(expected_report.splitlines(), report)
def test_monkey_patch_anonymous_turtle(self): MockTurtle.monkey_patch() expected_report = """\ create_line 0 0 100 0 fill='black' pensize=1 """ turtle.fd(100) report = MockTurtle.get_all_reports() self.assertEqual(expected_report.splitlines(), report)
def test_monkey_patch_multiple_turtles(self): MockTurtle.monkey_patch() expected_report = """\ create_line 0 0 100 0 fill='black' pensize=1 create_line 100 0 100 100 fill='black' pensize=1 create_line 0 0 100 0 fill='black' pensize=1 create_line 100 0 100 -100 fill='black' pensize=1 """ t1 = turtle.Turtle() t1.begin_fill() t1.fd(100) t1.right(90) t1.fd(100) t2 = turtle.Turtle() t2.begin_fill() t2.fd(100) t2.left(90) t2.fd(100) report = MockTurtle.get_all_reports() self.maxDiff = None self.assertEqual(expected_report.splitlines(), report)
def test_monkey_patch_multiple_turtles(self): MockTurtle.monkey_patch() expected_report = """\ create_line 0 0 100 0 fill='black' pensize=1 create_line 100 0 100 100 fill='black' pensize=1 create_line 0 0 100 0 fill='black' pensize=1 create_line 100 0 100 -100 fill='black' pensize=1 """ t1 = turtle.Turtle() t1.begin_fill() t1.fd(100) t1.right(90) t1.fd(100) t2 = turtle.Turtle() t2.begin_fill() t2.fd(100) t2.left(90) t2.fd(100) report = MockTurtle.get_all_reports() self.maxDiff = None self.assertEqual(expected_report.splitlines(), report)
def test_monkey_patch_new_turtle(self): MockTurtle.monkey_patch() expected_report = """\ create_line 0 0 100 0 fill='black' pensize=1 """ t = turtle.Turtle() t.fd(100) report = MockTurtle.get_all_reports() self.assertEqual(expected_report.splitlines(), report)
def trace_turtle(self, source): self.trace_code(source) return '\n'.join(MockTurtle.get_all_reports())
def main(): parser = argparse.ArgumentParser( description='Trace Python code.', formatter_class=argparse.ArgumentDefaultsHelpFormatter) parser.add_argument('-c', '--canvas', action='store_true', help='Should canvas commands be printed?') parser.add_argument('-x', '--width', type=int, default=800, help='width of the canvas in pixels') parser.add_argument('-y', '--height', type=int, default=600, help='height of the canvas in pixels') parser.add_argument('-d', '--dump', action='store_true', help='dump source code with report') parser.add_argument('-f', '--filename', help='file name to save in __file__') parser.add_argument( '-b', '--bad_driver', help="message to display if driver doesn't call module") parser.add_argument('-m', '--module', action='store_true', help='driver is an importable module, not a script') parser.add_argument('source', nargs=argparse.OPTIONAL, default='-', help='source file to trace, or - for stdin') parser.add_argument('load_as', nargs=argparse.OPTIONAL, default=SCOPE_NAME, help='load traced code as a module with this name') parser.add_argument('driver', nargs=argparse.REMAINDER, help='script to call traced code, plus any arguments') args = parser.parse_args() if args.driver and args.driver[0] in ('-m', '--module'): args.module = True args.driver = args.driver[1:] if args.source == '-': code = sys.stdin.read() else: with open(args.source, 'r') as source: code = source.read() canvas = Canvas(args.width, args.height) tracer = CodeTracer(canvas) tracer.max_width = 200000 code_report = tracer.trace_code(code, dump=args.dump, load_as=args.load_as, is_module=args.module, driver=args.driver, filename=args.filename, bad_driver=args.bad_driver) turtle_report = MockTurtle.get_all_reports() if turtle_report and args.canvas: print('start_canvas') print('\n'.join(turtle_report)) print('end_canvas') print('.') print(code_report) if tracer.return_code: exit(tracer.return_code)
def trace_turtle(self, source): exec(source, self.environment, self.environment) return '\n'.join(MockTurtle.get_all_reports())
def trace_turtle(self, source): exec(source, self.environment, self.environment) return '\n'.join(MockTurtle.get_all_reports())
parser.add_argument('-y', '--height', type=int, default=600, help='height of the canvas in pixels') parser.add_argument('-m', '--module', help='install traced code as a module with this name') args = parser.parse_args() code = sys.stdin.read() canvas = Canvas(args.width, args.height) tracer = CodeTracer(canvas) tracer.max_width = 200000 code_report = tracer.trace_code(code, module_name=args.module) turtle_report = MockTurtle.get_all_reports() if turtle_report and args.canvas: print('start_canvas') print('\n'.join(turtle_report)) print('end_canvas') print('.') print(code_report) elif __name__ == '__live_coding__': import unittest def test_something(self): # SETUP code = """\ a = [1, 2, [3, 4]] a[0] += 1