source: trunk/QA/error_note_wf.py @ 449

Last change on this file since 449 was 449, checked in by lindanl, 9 years ago

script for well-formness checking (no DTD and only for ASCII and UTF8)

File size: 2.8 KB
RevLine 
[449]1import libxml2
2from subprocess import *
3import os
4import shutil
5import fnmatch                 
6import xml.parsers.expat
7from string import *
8
9parabix_home = "/home/linda/workspace/xerces-c-3.1.1/installdir/bin"
10xmlconf_home = "/home/linda/workspace/xmlconf"
11output_home = "/home/linda/workspace/xmlwf_rslt"
12output_files = output_home+"/Files"
13output_messages = output_home+"/Messages"
14
15
16subdir_prefix = ''
17unsolved = []
18file_type = ''
19All_files = []
20appendreason = False
21
22def load(filename):
23    xml_conf = libxml2.createFileParserCtxt(filename)
24    xml_conf.replaceEntities(1)
25    xml_conf.parseDocument()
26    doc = xml_conf.doc()
27    return doc
28
29def start_element(name, attrs):
30        global subdir_prefix
31        if name == 'TESTCASES':
32                for a in attrs:
33                        if a == 'xml:base':
34                                subdir_prefix = '/'+attrs[a]
35                               
36        elif name == 'TEST':
37                for a in attrs:
38                        if a == 'TYPE':
39                                if attrs[a] == file_type:
40                                        for a in attrs:
41                                                if a == 'URI':
42                                                        addr = attrs[a].split('/')
43                                                        filename = addr[len(addr)-1]
44                                                        subdir = attrs[a][:attrs[a].find(filename)]
45                                                        do_file(subdir, filename)
46
47
48def parser(xml_file):
49        p = xml.parsers.expat.ParserCreate()
50        p.StartElementHandler = start_element
51        p.CharacterDataHandler = character_data
52        p.EndElementHandler = end_element
53        p.Parse(xml_file, 1)
54               
55def do_file(subdir,filename):
56        global appendreason
57        file_name = xmlconf_home +subdir_prefix+ subdir + filename
58        exe_f = open(file_name, 'r')
59        filedata = exe_f.read()
60        if filedata.find('DOCTYPE')==-1:
61          encoding = filedata[:2].encode("hex")
62          if encoding != '0000' and encoding != 'feff' and encoding != 'fffe' and encoding != '003c' and encoding != '3c00' and encoding != '4c6f':         
63            mes_f = open(output_messages+subdir_prefix+ subdir + filename,'r')
64            All_files.append(file_name)
65            if file_type == 'valid':
66                    if len(mes_f.read()) != 0:
67                            unsolved.append(file_name)
68                            appendreason = True           
69            elif len(mes_f.read()) == 0:
70                    unsolved.append(file_name)
71                    appendreason = True
72            mes_f.close()
73
74
75def character_data(data):
76        if appendreason == True:
77          unsolved.append(data+'\n')
78         
79def end_element(name):
80      global appendreason
81      appendreason = False
82         
83if __name__ == "__main__":
84        wf_f = open("wf_unsolved","w")
85        valid_f = open("valid_unsolved","w")
86        invalid_f = open("invalid_unsolved","w")
87        error_f = open("error_unsolved","w")
88        doc = load('xmlconf.xml')
89        file_type = 'not-wf'
90        parser(str(doc))
91        for e in unsolved:
92                wf_f.write(e)
93        wf_f.close()
94        file_type = 'valid'
95        unsolved = []
96        parser(str(doc))
97        for e in unsolved:
98                valid_f.write(e)
99        valid_f.close()
100        file_type = 'invalid'
101        unsolved = []
102        parser(str(doc))
103        for e in unsolved:
104                invalid_f.write(e)
105        invalid_f.close()
106        file_type = 'error'
107        unsolved = []
108        parser(str(doc))
109        for e in unsolved:
110                error_f.write(e)
111        error_f.close()
112        print len(All_files)
113       
114       
115       
116       
117       
118       
119       
120       
121       
122       
123       
124       
125       
126       
127       
128       
129       
Note: See TracBrowser for help on using the repository browser.