492: #line 750 "input_frame.ipk" 493: def test_python(self, 494: hlevel=None, 495: descr=None, 496: source_filename=None, 497: source_terminator=None, 498: expect_filename=None, 499: expect_terminator=None, 500: diff_context=0): 501: 502: testno = self.pass_frame.get_new_test_number() 503: testlabel = 'test_'+str(testno) 504: test_record = self.pass_frame.tests[testno]=\ 505: [descr,testlabel,'python','Aborted'] 506: expect = expect_filename or expect_terminator 507: 508: # print heading 509: if hlevel: our_hlevel = hlevel 510: else: our_hlevel = self.last_head+1 511: if descr == None: descr = 'Test' 512: self.head(our_hlevel,'Test '+str(testno)+': '+descr) 513: self.set_anchor(testlabel) 514: 515: our_weaver = self.get_weaver() 516: 517: if source_terminator: 518: our_weaver.writeline('On-the-fly python test script follows.') 519: source_origin_line = self.original_count 520: source_origin_file = self.original_filename 521: test_code = self.collect_lines_upto(source_terminator) 522: our_weaver.script_head('python',source_origin_file) 523: for i in range(len(test_code)): 524: our_weaver.echotangle(source_origin_line+i+1,test_code[i]) 525: our_weaver.script_foot('python',source_origin_file) 526: elif source_filename: 527: our_weaver.writeline('Python test script from file '+source_filename+'.') 528: 529: if expect_terminator: 530: expected_origin_line = self.original_count 531: expected_origin_file = self.original_filename 532: expected_output = self.collect_lines_upto(expect_terminator) 533: elif expect_filename: 534: # FIX to make document relative 535: our_weaver.writeline('Expected output from file '+expected_filename+'.') 536: expected_lines = loadfile(expect_filename) 537: 538: # execute the test code 539: 540: if source_filename: 541: our_source_filename = source_filename 542: else: 543: our_source_filebase = tempfile.mktemp() 544: our_source_filename = our_source_filebase + '_test.py' 545: f = open(our_source_filename,'w') 546: f.write(string.join(test_code,'\n')+'\n') 547: f.close() 548: 549: our_weaver.writeline('Actual output follows.') 550: status, actual_output = self.print_python_output(our_source_filename) 551: cmd_ok = status == 0 552: 553: # delete the file if it was created anonymously 554: if not source_filename: 555: os.remove(our_source_filename) 556: 557: if expect: 558: try: 559: diff_lines = interscript.utilities.diff.diff_lines 560: comparison = diff_lines(actual_output, expected_output, context=diff_context) 561: equal = len(comparison)==0 562: self.pass_frame.tests[testno][2]= 'diff' 563: self.pass_frame.tests[testno][3]= ('Fail','Ok')[equal] 564: if not equal: 565: our_weaver.writeline('On-the-fly expected output follows.') 566: our_weaver.expected_head(expected_origin_file) 567: for i in range(len(expected_output)): 568: our_weaver.echotangle(expected_origin_line+i+1,expected_output[i]) 569: our_weaver.expected_foot(expected_origin_file) 570: self.print_diff_table(comparison) 571: except ImportError: 572: our_weaver.writeline('Unable to import diff to perform comparison.') 573: except KeyboardInterrupt: raise 574: except SystemExit: raise 575: except: 576: traceback.print_exc() 577: else: 578: self.pass_frame.tests[testno][3]='Inspect' 579:
6.10.10.2.15.1. Test 2: Python test test
6.10.10.2.15.2. Test 3: Python diff test