|
1 # |
|
2 # Copyright (c) 2010 Nokia Corporation and/or its subsidiary(-ies). |
|
3 # All rights reserved. |
|
4 # This component and the accompanying materials are made available |
|
5 # under the terms of "Eclipse Public License v1.0" |
|
6 # which accompanies this distribution, and is available |
|
7 # at the URL "http://www.eclipse.org/legal/epl-v10.html". |
|
8 # |
|
9 # Initial Contributors: |
|
10 # Nokia Corporation - initial contribution. |
|
11 # |
|
12 # Contributors: |
|
13 # |
|
14 # Description: |
|
15 # |
|
16 #!/user/bin/python |
|
17 import os |
|
18 import sys |
|
19 import shutil |
|
20 import glob |
|
21 import stat |
|
22 |
|
23 print "TraceCompiler Test Bench version 1.1\n" |
|
24 |
|
25 # List of files to be generated. NOTE! Files must be in same order than reference files |
|
26 generated_files = [] |
|
27 # TraceCompilerTester |
|
28 generated_files.append(r".\TraceCompilerTester\traces\BigNumbersTraces.h") |
|
29 generated_files.append(r".\TraceCompilerTester\traces\fixed_id.definitions") |
|
30 generated_files.append(r".\TraceCompilerTester\traces\TraceCompilerTesterBasicTraces.h") |
|
31 generated_files.append(r".\TraceCompilerTester\traces\TraceCompilerTesterCommon1Traces.h") |
|
32 generated_files.append(r".\TraceCompilerTester\traces\TraceCompilerTesterCommon2Traces.h") |
|
33 generated_files.append(r".\TraceCompilerTester\traces_TraceCompilerTesterAdvanced\BigNumbersTraces.h") |
|
34 generated_files.append(r".\TraceCompilerTester\traces_TraceCompilerTesterAdvanced\fixed_id.definitions") |
|
35 generated_files.append(r".\TraceCompilerTester\traces_TraceCompilerTesterAdvanced\TraceCompilerTesterAdvancedTraces.h") |
|
36 generated_files.append(r".\TraceCompilerTester\traces_TraceCompilerTesterAdvanced\TraceCompilerTesterCommon1Traces.h") |
|
37 generated_files.append(r".\TraceCompilerTester\traces_TraceCompilerTesterAdvanced\TraceCompilerTesterCommon2Traces.h") |
|
38 generated_files.append(r".\epoc32\ost_dictionaries\TraceCompilerTesterAdvanced_0x20011111_Dictionary.xml") |
|
39 generated_files.append(r".\epoc32\ost_dictionaries\TraceCompilerTesterBasic_0x20011112_Dictionary.xml") |
|
40 generated_files.append(r".\epoc32\include\platform\symbiantraces\autogen\TraceCompilerTesterAdvanced_0x20011111_TraceDefinitions.h") |
|
41 generated_files.append(r".\epoc32\include\platform\symbiantraces\autogen\TraceCompilerTesterBasic_0x20011112_TraceDefinitions.h") |
|
42 # HelloWorld |
|
43 generated_files.append(r".\HelloWorld\traces\fixed_id.definitions") |
|
44 generated_files.append(r".\HelloWorld\traces\HelloWorldTraces.h") |
|
45 generated_files.append(r".\epoc32\ost_dictionaries\HelloWorld_0xe9fbe6ee_Dictionary.xml") |
|
46 generated_files.append(r".\epoc32\include\platform\symbiantraces\autogen\HelloWorld_0xe9fbe6ee_TraceDefinitions.h") |
|
47 |
|
48 # List of reference files. NOTE! Files must be in same order than generated files |
|
49 reference_files = [] |
|
50 # TraceCompilerTester |
|
51 reference_files.append(r".\TraceCompiler_reference_files\traces\BigNumbersTraces.h") |
|
52 reference_files.append(r".\TraceCompiler_reference_files\traces\fixed_id.definitions") |
|
53 reference_files.append(r".\TraceCompiler_reference_files\traces\TraceCompilerTesterBasicTraces.h") |
|
54 reference_files.append(r".\TraceCompiler_reference_files\traces\TraceCompilerTesterCommon1Traces.h") |
|
55 reference_files.append(r".\TraceCompiler_reference_files\traces\TraceCompilerTesterCommon2Traces.h") |
|
56 reference_files.append(r".\TraceCompiler_reference_files\traces_TraceCompilerTesterAdvanced\BigNumbersTraces.h") |
|
57 reference_files.append(r".\TraceCompiler_reference_files\traces_TraceCompilerTesterAdvanced\fixed_id.definitions") |
|
58 reference_files.append(r".\TraceCompiler_reference_files\traces_TraceCompilerTesterAdvanced\TraceCompilerTesterAdvancedTraces.h") |
|
59 reference_files.append(r".\TraceCompiler_reference_files\traces_TraceCompilerTesterAdvanced\TraceCompilerTesterCommon1Traces.h") |
|
60 reference_files.append(r".\TraceCompiler_reference_files\traces_TraceCompilerTesterAdvanced\TraceCompilerTesterCommon2Traces.h") |
|
61 reference_files.append(r".\TraceCompiler_reference_files\TraceCompilerTesterAdvanced_0x20011111_Dictionary.xml") |
|
62 reference_files.append(r".\TraceCompiler_reference_files\TraceCompilerTesterBasic_0x20011112_Dictionary.xml") |
|
63 reference_files.append(r".\TraceCompiler_reference_files\TraceCompilerTesterAdvanced_0x20011111_TraceDefinitions.h") |
|
64 reference_files.append(r".\TraceCompiler_reference_files\TraceCompilerTesterBasic_0x20011112_TraceDefinitions.h") |
|
65 # HelloWorld |
|
66 reference_files.append(r".\HelloWorld_reference_files\traces\fixed_id.definitions") |
|
67 reference_files.append(r".\HelloWorld_reference_files\traces\HelloWorldTraces.h") |
|
68 reference_files.append(r".\HelloWorld_reference_files\HelloWorld_0xe9fbe6ee_Dictionary.xml") |
|
69 reference_files.append(r".\HelloWorld_reference_files\HelloWorld_0xe9fbe6ee_TraceDefinitions.h") |
|
70 |
|
71 # Name of report file that include differences between generated files and reference files. |
|
72 report_file_name = "diff.txt" |
|
73 |
|
74 def print_instructions(): |
|
75 print "Common usage : TraceCompiler_Test.py <drive> <location_of_TraceCompiler>" |
|
76 print " where <drive> is a letter of virtual drive which you want to assign" |
|
77 print " a path of the TraceCompiler Test Bench." |
|
78 print " where <location_of_TraceCompiler> is a location of the TraceCompiler" |
|
79 print " that wanted to be test. Location should be the location of" |
|
80 print " ""tracecompiler"" folder." |
|
81 print "\nExamples:"; |
|
82 print " TraceCompiler_Test.py W: ."; |
|
83 print " The TraceCompiler Test Bench uses W:\\ as virtual drive and tests" |
|
84 print " the TraceCompiler that has been copied to root of the test bench."; |
|
85 print " TraceCompiler_Test.py Y X:\\epoc32\\tools"; |
|
86 print " The TraceCompiler Test Bench uses Y:\\ as virtual drive and tests" |
|
87 print " the TraceCompiler that can be found from X:\\epoc32\\tools folder."; |
|
88 |
|
89 try: |
|
90 # Get drive name from command line arguments |
|
91 drive = sys.argv[1] |
|
92 |
|
93 # Check that drive name is in valid format |
|
94 if drive[0].isalpha() == False or len(drive) > 2 or (len(drive) == 2 and drive[1] != ":") : |
|
95 raise TypeError |
|
96 elif len(drive) < 2 : |
|
97 drive += ":" |
|
98 |
|
99 # Get location of the TraceCompiler to be tested from command line arguments |
|
100 location_of_tracecompiler = sys.argv[2] |
|
101 |
|
102 # Check if location of the TraceCompiler path valid |
|
103 tracecompiler_script = os.path.join(location_of_tracecompiler, r"tracecompiler.pl") |
|
104 if not os.path.exists(tracecompiler_script) : |
|
105 print "Error: TraceCompiler that should be tested does not exist in defined location" |
|
106 sys.exit() |
|
107 |
|
108 except (IndexError, TypeError) : |
|
109 print_instructions() |
|
110 sys.exit() |
|
111 |
|
112 # Subst TraceCompiler Test Bench as specific drive |
|
113 print "##### Subst " + drive + " drive #####" |
|
114 os.system("subst " + drive + " .") |
|
115 |
|
116 # Go to substed drive |
|
117 os.chdir(drive) |
|
118 |
|
119 # Verify that substed drive includes TraceCompiler Test Bench. Check is needed in case that |
|
120 # drive was already substed. |
|
121 filename = os.path.join(drive, r"\TraceCompiler_Test.py") |
|
122 if not os.path.exists(filename) : |
|
123 print "\nError: Substed drive does not include TraceCompiler test Bench" |
|
124 sys.exit() |
|
125 |
|
126 # Path to folder where TraceCompiler under test will be copied |
|
127 tracecompiler_under_test_path = os.path.abspath(r"\TraceCompiler_under_test") |
|
128 |
|
129 # Remove old TraceCompiler under test if that exist |
|
130 shutil.rmtree(tracecompiler_under_test_path, True) |
|
131 |
|
132 # Copy TraceCompiler that should be tested to TraceCompiler Test Bench |
|
133 os.mkdir(tracecompiler_under_test_path) |
|
134 shutil.copy(tracecompiler_script, os.path.abspath(r"\TraceCompiler_under_test\tracecompiler.pl")) |
|
135 shutil.copy(os.path.join(location_of_tracecompiler, r"tracecompiler.pm"), |
|
136 os.path.abspath(r"\TraceCompiler_under_test\tracecompiler.pm")) |
|
137 shutil.copy(os.path.join(location_of_tracecompiler, r"tracecompiler_parse_mmp.pl"), |
|
138 os.path.abspath(r"\TraceCompiler_under_test\tracecompiler_parse_mmp.pl")) |
|
139 shutil.copytree(os.path.join(location_of_tracecompiler, r"tracecompiler"), |
|
140 os.path.abspath(r"\TraceCompiler_under_test\tracecompiler")) |
|
141 |
|
142 # Just in case remove all read-only attributes |
|
143 for root, dirs, files in os.walk(tracecompiler_under_test_path, topdown=False): |
|
144 for fileName in files: |
|
145 os.chmod (os.path.join(root, fileName), stat.S_IWRITE) |
|
146 for dirName in dirs: |
|
147 os.chmod (os.path.join(root, dirName), stat.S_IWRITE) |
|
148 |
|
149 # Delete generated files |
|
150 print "\n##### Delete all generated files #####" |
|
151 for generated_file in generated_files : |
|
152 try : |
|
153 os.remove(generated_file) |
|
154 except : |
|
155 pass |
|
156 |
|
157 # Delete diff.txt |
|
158 try : |
|
159 os.remove(report_file_name) |
|
160 except : |
|
161 pass |
|
162 |
|
163 # Run TraceCompiler to TraceCompilerTesterBasic component |
|
164 print "\n##### Run TraceCompiler to TraceCompilerTesterBasic component #####" |
|
165 os.chdir("TraceCompilerTester\group") |
|
166 os.system(r"java -classpath ../../TraceCompiler_under_test/tracecompiler com.nokia.tracecompiler.TraceCompiler 20011112 TraceCompilerTesterBasic ../../TraceCompilerTester/group/TraceCompilerTesterBasic.mmp ../../TraceCompilerTester/src/TraceCompilerTesterBasic.cpp ../../TraceCompilerTester/src/TraceCompilerTesterCommon1.cpp ../../TraceCompilerTester/src/TraceCompilerTesterCommon2.cpp") |
|
167 os.chdir("..\..") |
|
168 |
|
169 # Run TraceCompiler to TraceCompilerTesterAdvanced component |
|
170 print "\n##### Run TraceCompiler to TraceCompilerTesterAdvanced component #####" |
|
171 os.chdir("TraceCompilerTester\group") |
|
172 os.system(r"java -classpath ../../TraceCompiler_under_test/tracecompiler com.nokia.tracecompiler.TraceCompiler 20011111 TraceCompilerTesterAdvanced ../../TraceCompilerTester/group/TraceCompilerTesterAdvanced.mmp ../../TraceCompilerTester/src/TraceCompilerTesterAdvanced.cpp ../../TraceCompilerTester/src/TraceCompilerTesterCommon1.cpp ../../TraceCompilerTester/src/TraceCompilerTesterCommon2.cpp") |
|
173 os.chdir("..\..") |
|
174 |
|
175 # Run TraceCompiler to HelloWorld component |
|
176 print "\n##### Run TraceCompiler to HelloWorld component #####" |
|
177 os.chdir("HelloWorld\group") |
|
178 os.system(r"java -classpath ../../TraceCompiler_under_test/tracecompiler com.nokia.tracecompiler.TraceCompiler E9FBE6EE HelloWorld ../../HelloWorld/group/HelloWorld.mmp ../../HelloWorld/src/HelloWorld.cpp") |
|
179 os.chdir("..\..") |
|
180 |
|
181 # Compare generated files to reference files |
|
182 print "\n##### Compare generated files to reference files #####" |
|
183 changed_files = [] |
|
184 changes = [] |
|
185 file_index = 0 |
|
186 for generated_file in generated_files : |
|
187 gfile = open(generated_file, "r") |
|
188 rfile = open(reference_files[file_index], "r") |
|
189 filename_added = False |
|
190 |
|
191 for gline in gfile : |
|
192 rline = rfile.readline() |
|
193 if gline != rline : |
|
194 if not "// Created by TraceCompiler" in gline : |
|
195 valid = True |
|
196 |
|
197 # In case of dictionary file ignore differences in drive letters |
|
198 if generated_file.endswith(".xml") and "<path val=" in gline : |
|
199 if gline[gline.find(r"/"):] == rline[rline.find(r"/"):] : |
|
200 valid = False |
|
201 |
|
202 if valid : |
|
203 if not filename_added : |
|
204 changed_files.append(generated_file) |
|
205 changes.append(50 * "-") |
|
206 changes.append("\n") |
|
207 changes.append(generated_file) |
|
208 changes.append("\n\n") |
|
209 filename_added = True |
|
210 changes.append(gline) |
|
211 changes.append(" <---> ") |
|
212 changes.append("\n") |
|
213 changes.append(rline) |
|
214 changes.append("\n") |
|
215 |
|
216 file_index+=1 |
|
217 |
|
218 # Print results |
|
219 print "\n##### TEST RESULTS #####" |
|
220 if len(changed_files) == 0 : |
|
221 print "\nNO DIFFERENCES\n" |
|
222 else : |
|
223 print "\a" |
|
224 print "DIFFERENCES TO REFERENCE FILES NOTICED!\n" |
|
225 |
|
226 # Write changes to diff.txt |
|
227 report = open(report_file_name, "w") |
|
228 report.writelines(changes) |
|
229 |
|
230 print "There are differences in following files:" |
|
231 for changed_file in changed_files : |
|
232 print changed_file |
|
233 print "\nFor more information, please see the diff.txt." |
|
234 print "\nNOTE: If differences are ok, remember to update reference files." |
|
235 |
|
236 |