source: proto/parabix2/src/run_all.py @ 1057

Last change on this file since 1057 was 814, checked in by ksherdy, 9 years ago

The glass is half full.

File size: 3.3 KB
Line 
1import libxml2
2from subprocess import *
3import os
4import shutil
5import fnmatch                 
6import xml.parsers.expat
7from string import *
8
9
10xmlconf_home = "../../../trunk/QA/xmlconf"
11output_home = "../../../trunk/QA/testoutput"
12correct_message = "../../../trunk/QA/Expectedoutput/Messages"
13output_files = output_home+"/Files"
14output_messages = output_home+"/Messages"
15program_to_test = "xmlwf"
16edition5_program_to_test = 'markup_stats_5e'
17testcases = []
18
19subdir_prefix = ''
20
21def load(filename):
22    xml_conf = libxml2.createFileParserCtxt(filename)
23    xml_conf.replaceEntities(1)
24    xml_conf.parseDocument()
25    doc = xml_conf.doc()
26    return doc
27
28def start_element(name, attrs):
29        global subdir_prefix
30        if name == 'TESTCASES':
31                for a in attrs:
32                        if a == 'xml:base':
33                                subdir_prefix = '/'+attrs[a]           
34        elif name == 'TEST':
35                program = program_to_test
36                #for a in attrs:
37                        #if a == 'EDITION':
38                                #if attrs[a] == '5':
39                                        #program = edition5_program_to_test
40                for a in attrs:
41                        if a == 'RECOMMENDATION':
42                                if attrs[a] == 'XML1.1':
43                                        return
44                for a in attrs:                     
45                        if a == 'URI':
46                                addr = attrs[a].split('/')
47                                filename = addr[len(addr)-1]
48                                subdir = attrs[a][:attrs[a].find(filename)]
49                                do_file(subdir, filename, program_to_test)
50
51def parser(xml_file):
52        p = xml.parsers.expat.ParserCreate()
53        p.StartElementHandler = start_element
54        p.Parse(xml_file, 1)
55               
56def do_file(subdir,filename,program):
57        global testcases
58        fulldir = subdir_prefix + subdir
59        exe_f = open(xmlconf_home + fulldir + filename, 'r')
60        filedata = exe_f.read()
61        if filedata.find('DOCTYPE')==-1:
62          encoding = filedata[:2].encode("hex")
63          if encoding != '0000' and encoding != 'feff' and encoding != 'fffe' and encoding != '003c' and encoding != '3c00' and encoding != '4c6f':
64            testcases.append((fulldir,filename,program))
65       
66         
67def run_test():
68    for testcase in testcases: 
69        messagedir = output_messages + testcase[0]
70        outputdir = output_files  + testcase[0]
71        if os.path.exists(outputdir)==False:
72                os.makedirs(outputdir)
73        if os.path.exists(messagedir)==False:
74                os.makedirs(messagedir)
75        out_f = open(output_files + testcase[0] + testcase[1], 'w')
76        mes_f = open(output_messages + testcase[0] + testcase[1], 'w')
77        call(['./' + testcase[2], xmlconf_home + testcase[0] + testcase[1]], stderr=mes_f, stdout=out_f)
78        out_f.close()
79        mes_f.close()
80       
81               
82if __name__ == "__main__":
83        if os.path.exists(output_home + ".bak" ):
84                shutil.rmtree(output_home + ".bak")
85        if os.path.exists( output_home ):
86                shutil.move(output_home, output_home + ".bak")
87        os.mkdir(output_home)
88        os.mkdir(output_files)
89        os.mkdir(output_messages)
90       
91        doc = load(xmlconf_home+'/xmlconf.xml')
92        parser(str(doc))
93        run_test()
94        count = 0
95        for testcase in testcases:             
96          correct_out_f = open(correct_message + testcase[0] + testcase[1],'r')
97          parabix_out_f = open(output_messages + testcase[0] + testcase[1],'r')
98          correct_out_f_data = correct_out_f.read()
99          parabix_out_f_data = parabix_out_f.read()
100          if(correct_out_f_data != parabix_out_f_data):
101            print 'For file: ' + testcase[0] + testcase[1]
102            print 'Correct message: ' + correct_out_f_data
103            print 'Your message: ' + parabix_out_f_data
104            count = count+1
105         
106        if count == 0:
107          print 'Congratulations! Thank you and good night.'
108        else:
109          print str(count) + ' files did not pass the test.'
110           
111           
112       
113       
114       
115       
116       
117       
118       
119       
120       
121       
122       
123       
124       
125       
Note: See TracBrowser for help on using the repository browser.