Chromium Code Reviews| Index: chrome/test/gpu/generate_webgl_conformance_test_list.py |
| =================================================================== |
| --- chrome/test/gpu/generate_webgl_conformance_test_list.py (revision 113476) |
| +++ chrome/test/gpu/generate_webgl_conformance_test_list.py (working copy) |
| @@ -45,29 +45,50 @@ |
| EXPECTATION_FILE = "webgl_conformance_test_expectations.txt" |
| EXPECTATION_REGEXP = re.compile( |
| r'^(?P<BUG>\S+)\s+' |
| - '(?P<OS>(\s*(WIN|MAC|LINUX)\s*)+):' |
| + '(?P<MODIFIER>(\s*(WIN|MAC|LINUX|RELEASE|DEBUG)\s*)+):' |
| '(?P<TEST>[^=]+)=' |
| '(?P<OUTCOME>(\s*(PASS|FAIL|TIMEOUT)\s*)+)') |
| -def is_matching_os(expected_os_list): |
| - """Returns true if the current OS is in the given list. |
| +def map_to_macro_conditions(modifier_list): |
| + """Returns a string containing macro conditions wrapped in '(*)'. |
| - Given a list containing 'WIN', 'MAC' or 'LINUX', return true if the current |
| - OS, represented as 'win32', 'darwin' or 'linux*', respectively, exists in the |
| - list. |
| + Given a list containing 'WIN', 'MAC', 'LINUX', 'RELEASE', or 'DEBUG', |
| + return the corresponding macro conditions. |
| """ |
| - if sys.platform.startswith('linux') and 'LINUX' in expected_os_list: |
| - return True; |
| - if sys.platform == 'darwin' and 'MAC' in expected_os_list: |
| - return True; |
| - if sys.platform == 'win32' and 'WIN' in expected_os_list: |
| - return True; |
| - return False; |
| + rt = '' |
| + release = False |
| + debug = False |
| + for modifier in modifier_list: |
| + if modifier == 'RELEASE': |
| + release = True |
| + elif modifier == 'DEBUG': |
| + debug = True |
| + else: |
| + if rt: |
| + rt += ' || ' |
| + if modifier == 'WIN': |
| + rt = rt + 'defined(OS_WIN)' |
| + elif modifier == 'MAC': |
| + rt = rt + 'defined(OS_MACOSX)' |
| + elif modifier == 'LINUX': |
| + rt = rt + 'defined(OS_LINUX)' |
| + if release == debug: |
| + return rt |
| + |
| + if rt: |
| + rt = '(' + rt + ') and ' |
|
Ken Russell (switch to Gerrit)
2011/12/08 23:36:25
Shouldn't "and" be "&&"?
If so is it possible to
Zhenyao Mo
2011/12/09 19:21:39
Thanks for catching this. I manually added a LINUX
|
| + |
| + if debug: |
| + rt = rt + '!defined(NDEBUG)' |
| + if release: |
| + rt = rt + 'defined(NDEBUG)' |
| + |
| + return rt |
| + |
| def main(argv): |
| """Main function for the WebGL conformance test list generator. |
| """ |
| - |
| if not os.path.exists(os.path.join(INPUT_DIR, INPUT_FILE)): |
| print >> sys.stderr, "ERROR: WebGL conformance tests do not exist." |
| print >> sys.stderr, "Run the script from the directory containing it." |
| @@ -77,31 +98,39 @@ |
| print >> sys.stderr, "Run the script from the directory containing it." |
| return 1 |
| + output = open(OUTPUT_FILE, "w") |
| + output.write(COPYRIGHT) |
| + output.write(WARNING) |
| + output.write(HEADER_GUARD) |
| + |
| test_prefix = {} |
| test_expectations = open(EXPECTATION_FILE) |
| for line in test_expectations: |
| line_match = EXPECTATION_REGEXP.match(line) |
| if line_match: |
| match_dict = line_match.groupdict() |
| - os_list = match_dict['OS'].strip().split() |
| - if not is_matching_os(os_list): |
| - continue |
| + modifier_list = match_dict['MODIFIER'].strip().split() |
| + macro_conditions = map_to_macro_conditions(modifier_list) |
| test = match_dict['TEST'].strip() |
| outcome_list = match_dict['OUTCOME'].strip().split() |
| if 'TIMEOUT' in outcome_list: |
| - test_prefix[test] = "DISABLED_" |
| + prefix = "DISABLED_" |
| elif 'FAIL' in outcome_list: |
| if 'PASS' in outcome_list: |
| - test_prefix[test] = "FLAKY_" |
| + prefix = "FLAKY_" |
| else: |
| - test_prefix[test] = "FAILS_" |
| + prefix = "FAILS_" |
| + if macro_conditions: |
| + output.write('#if %s\n' % macro_conditions) |
| + output.write('#define MAYBE_%s %s%s\n' % (test, prefix, test)) |
| + output.write('#elif !defined(MAYBE_%s)\n' % test) |
| + output.write('#define MAYBE_%s %s\n' % (test, test)) |
| + output.write('#endif\n') |
| + test_prefix[test] = 'MAYBE_' |
| + else: |
| + test_prefix[test] = prefix |
| test_expectations.close() |
| - output = open(OUTPUT_FILE, "w") |
| - output.write(COPYRIGHT) |
| - output.write(WARNING) |
| - output.write(HEADER_GUARD) |
| - |
| unparsed_files = [INPUT_FILE] |
| while unparsed_files: |
| filename = unparsed_files.pop(0) |