OLD | NEW |
1 #!/usr/bin/env python | 1 #!/usr/bin/env python |
2 # Copyright (c) 2011 The Chromium Authors. All rights reserved. | 2 # Copyright (c) 2011 The Chromium Authors. All rights reserved. |
3 # Use of this source code is governed by a BSD-style license that can be | 3 # Use of this source code is governed by a BSD-style license that can be |
4 # found in the LICENSE file. | 4 # found in the LICENSE file. |
5 | 5 |
6 """Auto-generates the WebGL conformance test list header file. | 6 """Auto-generates the WebGL conformance test list header file. |
7 | 7 |
8 Parses the WebGL conformance test *.txt file, which contains a list of URLs | 8 Parses the WebGL conformance test *.txt file, which contains a list of URLs |
9 for individual conformance tests (each on a new line). It recursively parses | 9 for individual conformance tests (each on a new line). It recursively parses |
10 *.txt files. For each test URL, the matching gtest call is created and | 10 *.txt files. For each test URL, the matching gtest call is created and |
(...skipping 27 matching lines...) Expand all Loading... |
38 | 38 |
39 """ | 39 """ |
40 | 40 |
41 # Assume this script is run from the src/chrome/test/gpu directory. | 41 # Assume this script is run from the src/chrome/test/gpu directory. |
42 INPUT_DIR = "../../../third_party/webgl_conformance" | 42 INPUT_DIR = "../../../third_party/webgl_conformance" |
43 INPUT_FILE = "00_test_list.txt" | 43 INPUT_FILE = "00_test_list.txt" |
44 OUTPUT_FILE = "webgl_conformance_test_list_autogen.h" | 44 OUTPUT_FILE = "webgl_conformance_test_list_autogen.h" |
45 EXPECTATION_FILE = "webgl_conformance_test_expectations.txt" | 45 EXPECTATION_FILE = "webgl_conformance_test_expectations.txt" |
46 EXPECTATION_REGEXP = re.compile( | 46 EXPECTATION_REGEXP = re.compile( |
47 r'^(?P<BUG>\S+)\s+' | 47 r'^(?P<BUG>\S+)\s+' |
48 '(?P<OS>(\s*(WIN|MAC|LINUX)\s*)+):' | 48 '(?P<MODIFIER>(\s*(WIN|MAC|LINUX|RELEASE|DEBUG)\s*)+):' |
49 '(?P<TEST>[^=]+)=' | 49 '(?P<TEST>[^=]+)=' |
50 '(?P<OUTCOME>(\s*(PASS|FAIL|TIMEOUT)\s*)+)') | 50 '(?P<OUTCOME>(\s*(PASS|FAIL|TIMEOUT)\s*)+)') |
51 | 51 |
52 def is_matching_os(expected_os_list): | 52 def map_to_macro_conditions(modifier_list): |
53 """Returns true if the current OS is in the given list. | 53 """Returns a string containing macro conditions wrapped in '(*)'. |
54 | 54 |
55 Given a list containing 'WIN', 'MAC' or 'LINUX', return true if the current | 55 Given a list containing 'WIN', 'MAC', 'LINUX', 'RELEASE', or 'DEBUG', |
56 OS, represented as 'win32', 'darwin' or 'linux*', respectively, exists in the | 56 return the corresponding macro conditions. |
57 list. | |
58 """ | 57 """ |
59 if sys.platform.startswith('linux') and 'LINUX' in expected_os_list: | 58 rt = '' |
60 return True; | 59 release = False |
61 if sys.platform == 'darwin' and 'MAC' in expected_os_list: | 60 debug = False |
62 return True; | 61 for modifier in modifier_list: |
63 if sys.platform == 'win32' and 'WIN' in expected_os_list: | 62 if modifier == 'RELEASE': |
64 return True; | 63 release = True |
65 return False; | 64 elif modifier == 'DEBUG': |
| 65 debug = True |
| 66 else: |
| 67 if rt: |
| 68 rt += ' || ' |
| 69 if modifier == 'WIN': |
| 70 rt = rt + 'defined(OS_WIN)' |
| 71 elif modifier == 'MAC': |
| 72 rt = rt + 'defined(OS_MACOSX)' |
| 73 elif modifier == 'LINUX': |
| 74 rt = rt + 'defined(OS_LINUX)' |
| 75 |
| 76 if release == debug: |
| 77 return rt |
| 78 |
| 79 if rt: |
| 80 rt = '(' + rt + ') && ' |
| 81 |
| 82 if debug: |
| 83 rt = rt + '!defined(NDEBUG)' |
| 84 if release: |
| 85 rt = rt + 'defined(NDEBUG)' |
| 86 |
| 87 return rt |
66 | 88 |
67 def main(argv): | 89 def main(argv): |
68 """Main function for the WebGL conformance test list generator. | 90 """Main function for the WebGL conformance test list generator. |
69 """ | 91 """ |
70 | |
71 if not os.path.exists(os.path.join(INPUT_DIR, INPUT_FILE)): | 92 if not os.path.exists(os.path.join(INPUT_DIR, INPUT_FILE)): |
72 print >> sys.stderr, "ERROR: WebGL conformance tests do not exist." | 93 print >> sys.stderr, "ERROR: WebGL conformance tests do not exist." |
73 print >> sys.stderr, "Run the script from the directory containing it." | 94 print >> sys.stderr, "Run the script from the directory containing it." |
74 return 1 | 95 return 1 |
75 if not os.path.exists(EXPECTATION_FILE): | 96 if not os.path.exists(EXPECTATION_FILE): |
76 print >> sys.stderr, "ERROR: test expectations file does not exist." | 97 print >> sys.stderr, "ERROR: test expectations file does not exist." |
77 print >> sys.stderr, "Run the script from the directory containing it." | 98 print >> sys.stderr, "Run the script from the directory containing it." |
78 return 1 | 99 return 1 |
79 | 100 |
| 101 output = open(OUTPUT_FILE, "w") |
| 102 output.write(COPYRIGHT) |
| 103 output.write(WARNING) |
| 104 output.write(HEADER_GUARD) |
| 105 |
80 test_prefix = {} | 106 test_prefix = {} |
81 test_expectations = open(EXPECTATION_FILE) | 107 test_expectations = open(EXPECTATION_FILE) |
82 for line in test_expectations: | 108 for line in test_expectations: |
83 line_match = EXPECTATION_REGEXP.match(line) | 109 line_match = EXPECTATION_REGEXP.match(line) |
84 if line_match: | 110 if line_match: |
85 match_dict = line_match.groupdict() | 111 match_dict = line_match.groupdict() |
86 os_list = match_dict['OS'].strip().split() | 112 modifier_list = match_dict['MODIFIER'].strip().split() |
87 if not is_matching_os(os_list): | 113 macro_conditions = map_to_macro_conditions(modifier_list) |
88 continue | |
89 test = match_dict['TEST'].strip() | 114 test = match_dict['TEST'].strip() |
90 outcome_list = match_dict['OUTCOME'].strip().split() | 115 outcome_list = match_dict['OUTCOME'].strip().split() |
91 if 'TIMEOUT' in outcome_list: | 116 if 'TIMEOUT' in outcome_list: |
92 test_prefix[test] = "DISABLED_" | 117 prefix = "DISABLED_" |
93 elif 'FAIL' in outcome_list: | 118 elif 'FAIL' in outcome_list: |
94 if 'PASS' in outcome_list: | 119 if 'PASS' in outcome_list: |
95 test_prefix[test] = "FLAKY_" | 120 prefix = "FLAKY_" |
96 else: | 121 else: |
97 test_prefix[test] = "FAILS_" | 122 prefix = "FAILS_" |
| 123 if macro_conditions: |
| 124 output.write('#if %s\n' % macro_conditions) |
| 125 output.write('#define MAYBE_%s %s%s\n' % (test, prefix, test)) |
| 126 output.write('#elif !defined(MAYBE_%s)\n' % test) |
| 127 output.write('#define MAYBE_%s %s\n' % (test, test)) |
| 128 output.write('#endif\n') |
| 129 test_prefix[test] = 'MAYBE_' |
| 130 else: |
| 131 test_prefix[test] = prefix |
98 test_expectations.close() | 132 test_expectations.close() |
99 | 133 |
100 output = open(OUTPUT_FILE, "w") | |
101 output.write(COPYRIGHT) | |
102 output.write(WARNING) | |
103 output.write(HEADER_GUARD) | |
104 | |
105 unparsed_files = [INPUT_FILE] | 134 unparsed_files = [INPUT_FILE] |
106 while unparsed_files: | 135 while unparsed_files: |
107 filename = unparsed_files.pop(0) | 136 filename = unparsed_files.pop(0) |
108 try: | 137 try: |
109 input = open(os.path.join(INPUT_DIR, filename)) | 138 input = open(os.path.join(INPUT_DIR, filename)) |
110 except IOError: | 139 except IOError: |
111 print >> sys.stderr, "WARNING: %s does not exist (skipped)." % filename | 140 print >> sys.stderr, "WARNING: %s does not exist (skipped)." % filename |
112 continue | 141 continue |
113 | 142 |
114 for url in input: | 143 for url in input: |
(...skipping 26 matching lines...) Expand all Loading... |
141 else: | 170 else: |
142 print >> sys.stderr, "WARNING: %s does not exist (skipped)." % url | 171 print >> sys.stderr, "WARNING: %s does not exist (skipped)." % url |
143 input.close() | 172 input.close() |
144 | 173 |
145 output.write(HEADER_GUARD_END) | 174 output.write(HEADER_GUARD_END) |
146 output.close() | 175 output.close() |
147 return 0 | 176 return 0 |
148 | 177 |
149 if __name__ == "__main__": | 178 if __name__ == "__main__": |
150 sys.exit(main(sys.argv[1:])) | 179 sys.exit(main(sys.argv[1:])) |
OLD | NEW |