6.13.10.2.17. Python Test

Start python section to interscript/frames/inputf.py[23 /40 ] Next Prev Last
   626: #line 896 "input_frame.ipk"
   627:   def test_python(self,
   628:     hlevel=None,
   629:     descr=None,
   630:     source_filename=None,
   631:     source_terminator=None,
   632:     expect_filename=None,
   633:     expect_terminator=None,
   634:     diff_context=0):
   635: 
   636:     testno = self.pass_frame.get_new_test_number()
   637:     testlabel = 'test_'+str(testno)
   638:     test_record = self.pass_frame.tests[testno]=\
   639:       [descr,testlabel,'python','Aborted']
   640:     expect = expect_filename or expect_terminator
   641: 
   642:     # print heading
   643:     if hlevel: our_hlevel = hlevel
   644:     else: our_hlevel = self.last_head+1
   645:     if descr == None: descr = 'Test'
   646:     self.head(our_hlevel,'Test '+str(testno)+': '+descr)
   647:     self.set_anchor(testlabel)
   648: 
   649:     our_weaver = self.get_weaver()
   650: 
   651:     if source_terminator:
   652:       our_weaver.writeline('On-the-fly python test script follows.')
   653:       source_origin_line = self.original_count
   654:       source_origin_file = self.original_filename
   655:       test_code = self.collect_lines_upto(source_terminator)
   656:       our_weaver.script_head('python',source_origin_file)
   657:       for i in range(len(test_code)):
   658:         our_weaver.echotangle(source_origin_line+i+1,test_code[i])
   659:       our_weaver.script_foot('python',source_origin_file)
   660:     elif source_filename:
   661:       our_weaver.writeline('Python test script from file '+source_filename+'.')
   662: 
   663:     if expect_terminator:
   664:       expected_origin_line = self.original_count
   665:       expected_origin_file = self.original_filename
   666:       expected_output = self.collect_lines_upto(expect_terminator)
   667:     elif expect_filename:
   668:       # FIX to make document relative
   669:       our_weaver.writeline('Expected output from file '+expected_filename+'.')
   670:       expected_lines = loadfile(expect_filename)
   671: 
   672:     # execute the test code
   673: 
   674:     if source_filename:
   675:       our_source_filename = source_filename
   676:       description = None
   677:     else:
   678:       our_source_filebase = tempfile.mktemp()
   679:       our_source_filename = our_source_filebase + '_test.py'
   680:       f = open(our_source_filename,'w')
   681:       f.write(string.join(test_code,'\n')+'\n')
   682:       f.close()
   683:       description = 'python <<temporary>>'
   684:     our_weaver.writeline('Actual output follows.')
   685: 
   686:     status, actual_output = self.print_python_output(
   687:       our_source_filename,
   688:       description)
   689:     cmd_ok = status == 0
   690: 
   691:     # delete the file if it was created anonymously
   692:     if not source_filename:
   693:       os.remove(our_source_filename)
   694: 
   695:     if expect:
   696:       try:
   697:         diff_lines = interscript.utilities.diff.diff_lines
   698:         comparison = diff_lines(actual_output, expected_output, context=diff_context)
   699:         equal = len(comparison)==0
   700:         self.pass_frame.tests[testno][2]= 'diff'
   701:         self.pass_frame.tests[testno][3]= ('Fail','Ok')[equal]
   702:         if not equal:
   703:           our_weaver.writeline('On-the-fly expected output follows.')
   704:           our_weaver.expected_head(expected_origin_file)
   705:           for i in range(len(expected_output)):
   706:             our_weaver.echotangle(expected_origin_line+i+1,expected_output[i])
   707:           our_weaver.expected_foot(expected_origin_file)
   708:           self.print_diff_table(comparison)
   709:       except ImportError:
   710:         our_weaver.writeline('Unable to import diff to perform comparison.')
   711:       except KeyboardInterrupt: raise
   712:       except SystemExit: raise
   713:       except:
   714:         traceback.print_exc()
   715:     else:
   716:       self.pass_frame.tests[testno][3]='Inspect'
   717: 
End python section to interscript/frames/inputf.py[23]


6.13.10.2.17.1. Test 15: Python test test
6.13.10.2.17.2. Test 16: Python diff test