Chromium Code Reviews| OLD | NEW |
|---|---|
| 1 # Copyright (C) 2010 Google Inc. All rights reserved. | 1 # Copyright (C) 2010 Google Inc. All rights reserved. |
| 2 # | 2 # |
| 3 # Redistribution and use in source and binary forms, with or without | 3 # Redistribution and use in source and binary forms, with or without |
| 4 # modification, are permitted provided that the following conditions are | 4 # modification, are permitted provided that the following conditions are |
| 5 # met: | 5 # met: |
| 6 # | 6 # |
| 7 # * Redistributions of source code must retain the above copyright | 7 # * Redistributions of source code must retain the above copyright |
| 8 # notice, this list of conditions and the following disclaimer. | 8 # notice, this list of conditions and the following disclaimer. |
| 9 # * Redistributions in binary form must reproduce the above | 9 # * Redistributions in binary form must reproduce the above |
| 10 # copyright notice, this list of conditions and the following disclaimer | 10 # copyright notice, this list of conditions and the following disclaimer |
| (...skipping 25 matching lines...) Expand all Loading... | |
| 36 | 36 |
| 37 | 37 |
| 38 def get_result(test_name, result_type=test_expectations.PASS, run_time=0): | 38 def get_result(test_name, result_type=test_expectations.PASS, run_time=0): |
| 39 failures = [] | 39 failures = [] |
| 40 if result_type == test_expectations.TIMEOUT: | 40 if result_type == test_expectations.TIMEOUT: |
| 41 failures = [test_failures.FailureTimeout()] | 41 failures = [test_failures.FailureTimeout()] |
| 42 elif result_type == test_expectations.AUDIO: | 42 elif result_type == test_expectations.AUDIO: |
| 43 failures = [test_failures.FailureAudioMismatch()] | 43 failures = [test_failures.FailureAudioMismatch()] |
| 44 elif result_type == test_expectations.CRASH: | 44 elif result_type == test_expectations.CRASH: |
| 45 failures = [test_failures.FailureCrash()] | 45 failures = [test_failures.FailureCrash()] |
| 46 elif result_type == test_expectations.LEAK: | |
| 47 failures = [test_failures.FailureLeak()] | |
| 46 return test_results.TestResult(test_name, failures=failures, test_run_time=r un_time) | 48 return test_results.TestResult(test_name, failures=failures, test_run_time=r un_time) |
| 47 | 49 |
| 48 | 50 |
| 49 def run_results(port, extra_skipped_tests=[]): | 51 def run_results(port, extra_skipped_tests=[]): |
| 50 tests = ['passes/text.html', 'failures/expected/timeout.html', 'failures/exp ected/crash.html', 'failures/expected/keyboard.html', | 52 tests = ['passes/text.html', 'failures/expected/timeout.html', 'failures/exp ected/crash.html', 'failures/expected/leak.html', 'failures/expected/keyboard.ht ml', |
| 51 'failures/expected/audio.html', 'passes/skipped/skip.html'] | 53 'failures/expected/audio.html', 'passes/skipped/skip.html'] |
| 52 expectations = test_expectations.TestExpectations(port, tests) | 54 expectations = test_expectations.TestExpectations(port, tests) |
| 53 if extra_skipped_tests: | 55 if extra_skipped_tests: |
| 54 expectations.add_extra_skipped_tests(extra_skipped_tests) | 56 expectations.add_extra_skipped_tests(extra_skipped_tests) |
| 55 return test_run_results.TestRunResults(expectations, len(tests)) | 57 return test_run_results.TestRunResults(expectations, len(tests)) |
| 56 | 58 |
| 57 | 59 |
| 58 def summarized_results(port, expected, passing, flaky, only_include_failing=Fals e, extra_skipped_tests=[]): | 60 def summarized_results(port, expected, passing, flaky, only_include_failing=Fals e, extra_skipped_tests=[]): |
| 59 test_is_slow = False | 61 test_is_slow = False |
| 60 | 62 |
| 61 initial_results = run_results(port, extra_skipped_tests) | 63 initial_results = run_results(port, extra_skipped_tests) |
| 62 if expected: | 64 if expected: |
| 63 initial_results.add(get_result('passes/text.html', test_expectations.PAS S), expected, test_is_slow) | 65 initial_results.add(get_result('passes/text.html', test_expectations.PAS S), expected, test_is_slow) |
| 64 initial_results.add(get_result('failures/expected/audio.html', test_expe ctations.AUDIO), expected, test_is_slow) | 66 initial_results.add(get_result('failures/expected/audio.html', test_expe ctations.AUDIO), expected, test_is_slow) |
| 65 initial_results.add(get_result('failures/expected/timeout.html', test_ex pectations.TIMEOUT), expected, test_is_slow) | 67 initial_results.add(get_result('failures/expected/timeout.html', test_ex pectations.TIMEOUT), expected, test_is_slow) |
| 66 initial_results.add(get_result('failures/expected/crash.html', test_expe ctations.CRASH), expected, test_is_slow) | 68 initial_results.add(get_result('failures/expected/crash.html', test_expe ctations.CRASH), expected, test_is_slow) |
| 69 initial_results.add(get_result('failures/expected/leak.html', test_expec tations.LEAK), expected, test_is_slow) | |
| 67 elif passing: | 70 elif passing: |
| 68 skipped_result = get_result('passes/skipped/skip.html') | 71 skipped_result = get_result('passes/skipped/skip.html') |
| 69 skipped_result.type = test_expectations.SKIP | 72 skipped_result.type = test_expectations.SKIP |
| 70 initial_results.add(skipped_result, expected, test_is_slow) | 73 initial_results.add(skipped_result, expected, test_is_slow) |
| 71 | 74 |
| 72 initial_results.add(get_result('passes/text.html', run_time=1), expected , test_is_slow) | 75 initial_results.add(get_result('passes/text.html', run_time=1), expected , test_is_slow) |
| 73 initial_results.add(get_result('failures/expected/audio.html'), expected , test_is_slow) | 76 initial_results.add(get_result('failures/expected/audio.html'), expected , test_is_slow) |
| 74 initial_results.add(get_result('failures/expected/timeout.html'), expect ed, test_is_slow) | 77 initial_results.add(get_result('failures/expected/timeout.html'), expect ed, test_is_slow) |
| 75 initial_results.add(get_result('failures/expected/crash.html'), expected , test_is_slow) | 78 initial_results.add(get_result('failures/expected/crash.html'), expected , test_is_slow) |
| 79 initial_results.add(get_result('failures/expected/leak.html'), expected, test_is_slow) | |
| 76 else: | 80 else: |
| 77 initial_results.add(get_result('passes/text.html', test_expectations.TIM EOUT, run_time=1), expected, test_is_slow) | 81 initial_results.add(get_result('passes/text.html', test_expectations.TIM EOUT, run_time=1), expected, test_is_slow) |
| 78 initial_results.add(get_result('failures/expected/audio.html', test_expe ctations.AUDIO, run_time=0.049), expected, test_is_slow) | 82 initial_results.add(get_result('failures/expected/audio.html', test_expe ctations.AUDIO, run_time=0.049), expected, test_is_slow) |
| 79 initial_results.add(get_result('failures/expected/timeout.html', test_ex pectations.CRASH, run_time=0.05), expected, test_is_slow) | 83 initial_results.add(get_result('failures/expected/timeout.html', test_ex pectations.CRASH, run_time=0.05), expected, test_is_slow) |
| 80 initial_results.add(get_result('failures/expected/crash.html', test_expe ctations.TIMEOUT), expected, test_is_slow) | 84 initial_results.add(get_result('failures/expected/crash.html', test_expe ctations.TIMEOUT), expected, test_is_slow) |
| 85 initial_results.add(get_result('failures/expected/leak.html', test_expec tations.TIMEOUT), expected, test_is_slow) | |
| 81 | 86 |
| 82 # we only list keyboard.html here, since normally this is WontFix | 87 # we only list keyboard.html here, since normally this is WontFix |
| 83 initial_results.add(get_result('failures/expected/keyboard.html', test_e xpectations.SKIP), expected, test_is_slow) | 88 initial_results.add(get_result('failures/expected/keyboard.html', test_e xpectations.SKIP), expected, test_is_slow) |
| 84 | 89 |
| 85 if flaky: | 90 if flaky: |
| 86 retry_results = run_results(port, extra_skipped_tests) | 91 retry_results = run_results(port, extra_skipped_tests) |
| 87 retry_results.add(get_result('passes/text.html'), True, test_is_slow) | 92 retry_results.add(get_result('passes/text.html'), True, test_is_slow) |
| 88 retry_results.add(get_result('failures/expected/timeout.html'), True, te st_is_slow) | 93 retry_results.add(get_result('failures/expected/timeout.html'), True, te st_is_slow) |
| 89 retry_results.add(get_result('failures/expected/crash.html'), True, test _is_slow) | 94 retry_results.add(get_result('failures/expected/crash.html'), True, test _is_slow) |
| 95 retry_results.add(get_result('failures/expected/leak.html'), True, test_ is_slow) | |
| 90 else: | 96 else: |
| 91 retry_results = None | 97 retry_results = None |
| 92 | 98 |
| 93 return test_run_results.summarize_results(port, initial_results.expectations , initial_results, retry_results, enabled_pixel_tests_in_retry=False, only_inclu de_failing=only_include_failing) | 99 return test_run_results.summarize_results(port, initial_results.expectations , initial_results, retry_results, enabled_pixel_tests_in_retry=False, only_inclu de_failing=only_include_failing) |
| 94 | 100 |
| 95 | 101 |
| 96 class InterpretTestFailuresTest(unittest.TestCase): | 102 class InterpretTestFailuresTest(unittest.TestCase): |
| 97 def setUp(self): | 103 def setUp(self): |
| 98 host = MockHost() | 104 host = MockHost() |
| 99 self.port = host.port_factory.get(port_name='test') | 105 self.port = host.port_factory.get(port_name='test') |
| (...skipping 19 matching lines...) Expand all Loading... | |
| 119 def setUp(self): | 125 def setUp(self): |
| 120 host = MockHost(initialize_scm_by_default=False) | 126 host = MockHost(initialize_scm_by_default=False) |
| 121 self.port = host.port_factory.get(port_name='test') | 127 self.port = host.port_factory.get(port_name='test') |
| 122 | 128 |
| 123 def test_no_svn_revision(self): | 129 def test_no_svn_revision(self): |
| 124 summary = summarized_results(self.port, expected=False, passing=False, f laky=False) | 130 summary = summarized_results(self.port, expected=False, passing=False, f laky=False) |
| 125 self.assertNotIn('revision', summary) | 131 self.assertNotIn('revision', summary) |
| 126 | 132 |
| 127 def test_num_failures_by_type(self): | 133 def test_num_failures_by_type(self): |
| 128 summary = summarized_results(self.port, expected=False, passing=False, f laky=False) | 134 summary = summarized_results(self.port, expected=False, passing=False, f laky=False) |
| 129 self.assertEquals(summary['num_failures_by_type'], {'CRASH': 1, 'MISSING ': 0, 'TEXT': 0, 'IMAGE': 0, 'NEEDSREBASELINE': 0, 'NEEDSMANUALREBASELINE': 0, ' PASS': 0, 'REBASELINE': 0, 'SKIP': 0, 'SLOW': 0, 'TIMEOUT': 2, 'IMAGE+TEXT': 0, 'LEAK': 0, 'FAIL': 0, 'AUDIO': 1, 'WONTFIX': 1}) | 135 self.assertEquals(summary['num_failures_by_type'], {'CRASH': 1, 'MISSING ': 0, 'TEXT': 0, 'IMAGE': 0, 'NEEDSREBASELINE': 0, 'NEEDSMANUALREBASELINE': 0, ' PASS': 0, 'REBASELINE': 0, 'SKIP': 0, 'SLOW': 0, 'TIMEOUT': 3, 'IMAGE+TEXT': 0, 'LEAK': 0, 'FAIL': 0, 'AUDIO': 1, 'WONTFIX': 1}) |
|
Dirk Pranke
2014/04/09 16:11:51
why does timeout increase here?
hajimehoshi
2014/04/10 02:08:20
It's because the newly added test (at L85) is trea
| |
| 130 | 136 |
| 131 summary = summarized_results(self.port, expected=True, passing=False, fl aky=False) | 137 summary = summarized_results(self.port, expected=True, passing=False, fl aky=False) |
| 132 self.assertEquals(summary['num_failures_by_type'], {'CRASH': 1, 'MISSING ': 0, 'TEXT': 0, 'IMAGE': 0, 'NEEDSREBASELINE': 0, 'NEEDSMANUALREBASELINE': 0, ' PASS': 1, 'REBASELINE': 0, 'SKIP': 0, 'SLOW': 0, 'TIMEOUT': 1, 'IMAGE+TEXT': 0, 'LEAK': 0, 'FAIL': 0, 'AUDIO': 1, 'WONTFIX': 0}) | 138 self.assertEquals(summary['num_failures_by_type'], {'CRASH': 1, 'MISSING ': 0, 'TEXT': 0, 'IMAGE': 0, 'NEEDSREBASELINE': 0, 'NEEDSMANUALREBASELINE': 0, ' PASS': 1, 'REBASELINE': 0, 'SKIP': 0, 'SLOW': 0, 'TIMEOUT': 1, 'IMAGE+TEXT': 0, 'LEAK': 1, 'FAIL': 0, 'AUDIO': 1, 'WONTFIX': 0}) |
| 133 | 139 |
| 134 summary = summarized_results(self.port, expected=False, passing=True, fl aky=False) | 140 summary = summarized_results(self.port, expected=False, passing=True, fl aky=False) |
| 135 self.assertEquals(summary['num_failures_by_type'], {'CRASH': 0, 'MISSING ': 0, 'TEXT': 0, 'IMAGE': 0, 'NEEDSREBASELINE': 0, 'NEEDSMANUALREBASELINE': 0, ' PASS': 4, 'REBASELINE': 0, 'SKIP': 1, 'SLOW': 0, 'TIMEOUT': 0, 'IMAGE+TEXT': 0, 'LEAK': 0, 'FAIL': 0, 'AUDIO': 0, 'WONTFIX': 0}) | 141 self.assertEquals(summary['num_failures_by_type'], {'CRASH': 0, 'MISSING ': 0, 'TEXT': 0, 'IMAGE': 0, 'NEEDSREBASELINE': 0, 'NEEDSMANUALREBASELINE': 0, ' PASS': 5, 'REBASELINE': 0, 'SKIP': 1, 'SLOW': 0, 'TIMEOUT': 0, 'IMAGE+TEXT': 0, 'LEAK': 0, 'FAIL': 0, 'AUDIO': 0, 'WONTFIX': 0}) |
| 136 | 142 |
| 137 def test_svn_revision(self): | 143 def test_svn_revision(self): |
| 138 self.port._options.builder_name = 'dummy builder' | 144 self.port._options.builder_name = 'dummy builder' |
| 139 summary = summarized_results(self.port, expected=False, passing=False, f laky=False) | 145 summary = summarized_results(self.port, expected=False, passing=False, f laky=False) |
| 140 self.assertNotEquals(summary['blink_revision'], '') | 146 self.assertNotEquals(summary['blink_revision'], '') |
| 141 | 147 |
| 142 def test_bug_entry(self): | 148 def test_bug_entry(self): |
| 143 self.port._options.builder_name = 'dummy builder' | 149 self.port._options.builder_name = 'dummy builder' |
| 144 summary = summarized_results(self.port, expected=False, passing=True, fl aky=False) | 150 summary = summarized_results(self.port, expected=False, passing=True, fl aky=False) |
| 145 self.assertEquals(summary['tests']['passes']['skipped']['skip.html']['bu gs'], ['Bug(test)']) | 151 self.assertEquals(summary['tests']['passes']['skipped']['skip.html']['bu gs'], ['Bug(test)']) |
| (...skipping 15 matching lines...) Expand all Loading... | |
| 161 self.assertTrue(summary['tests']['passes']['text.html']) | 167 self.assertTrue(summary['tests']['passes']['text.html']) |
| 162 self.assertTrue('is_unexpected' not in summary['tests']['passes']['text. html']) | 168 self.assertTrue('is_unexpected' not in summary['tests']['passes']['text. html']) |
| 163 | 169 |
| 164 def test_summarized_results_expected_only_include_failing(self): | 170 def test_summarized_results_expected_only_include_failing(self): |
| 165 self.port._options.builder_name = 'dummy builder' | 171 self.port._options.builder_name = 'dummy builder' |
| 166 summary = summarized_results(self.port, expected=True, passing=False, fl aky=False, only_include_failing=True) | 172 summary = summarized_results(self.port, expected=True, passing=False, fl aky=False, only_include_failing=True) |
| 167 self.assertNotIn('passes', summary['tests']) | 173 self.assertNotIn('passes', summary['tests']) |
| 168 self.assertTrue(summary['tests']['failures']['expected']['audio.html']) | 174 self.assertTrue(summary['tests']['failures']['expected']['audio.html']) |
| 169 self.assertTrue(summary['tests']['failures']['expected']['timeout.html'] ) | 175 self.assertTrue(summary['tests']['failures']['expected']['timeout.html'] ) |
| 170 self.assertTrue(summary['tests']['failures']['expected']['crash.html']) | 176 self.assertTrue(summary['tests']['failures']['expected']['crash.html']) |
| 177 self.assertTrue(summary['tests']['failures']['expected']['leak.html']) | |
| 171 | 178 |
| 172 def test_summarized_results_skipped(self): | 179 def test_summarized_results_skipped(self): |
| 173 self.port._options.builder_name = 'dummy builder' | 180 self.port._options.builder_name = 'dummy builder' |
| 174 summary = summarized_results(self.port, expected=False, passing=True, fl aky=False) | 181 summary = summarized_results(self.port, expected=False, passing=True, fl aky=False) |
| 175 self.assertEquals(summary['tests']['passes']['skipped']['skip.html']['ex pected'], 'SKIP') | 182 self.assertEquals(summary['tests']['passes']['skipped']['skip.html']['ex pected'], 'SKIP') |
| 176 | 183 |
| 177 def test_summarized_results_only_inlude_failing(self): | 184 def test_summarized_results_only_inlude_failing(self): |
| 178 self.port._options.builder_name = 'dummy builder' | 185 self.port._options.builder_name = 'dummy builder' |
| 179 summary = summarized_results(self.port, expected=False, passing=True, fl aky=False, only_include_failing=True) | 186 summary = summarized_results(self.port, expected=False, passing=True, fl aky=False, only_include_failing=True) |
| 180 self.assertTrue('passes' not in summary['tests']) | 187 self.assertTrue('passes' not in summary['tests']) |
| 181 | 188 |
| 182 def test_rounded_run_times(self): | 189 def test_rounded_run_times(self): |
| 183 summary = summarized_results(self.port, expected=False, passing=False, f laky=False) | 190 summary = summarized_results(self.port, expected=False, passing=False, f laky=False) |
| 184 self.assertEquals(summary['tests']['passes']['text.html']['time'], 1) | 191 self.assertEquals(summary['tests']['passes']['text.html']['time'], 1) |
| 185 self.assertTrue('time' not in summary['tests']['failures']['expected'][' audio.html']) | 192 self.assertTrue('time' not in summary['tests']['failures']['expected'][' audio.html']) |
| 186 self.assertEquals(summary['tests']['failures']['expected']['timeout.html ']['time'], 0.1) | 193 self.assertEquals(summary['tests']['failures']['expected']['timeout.html ']['time'], 0.1) |
| 187 self.assertTrue('time' not in summary['tests']['failures']['expected'][' crash.html']) | 194 self.assertTrue('time' not in summary['tests']['failures']['expected'][' crash.html']) |
| 195 self.assertTrue('time' not in summary['tests']['failures']['expected'][' leak.html']) | |
| 188 | 196 |
| 189 def test_timeout_then_unexpected_pass(self): | 197 def test_timeout_then_unexpected_pass(self): |
| 190 tests = ['failures/expected/image.html'] | 198 tests = ['failures/expected/image.html'] |
| 191 expectations = test_expectations.TestExpectations(self.port, tests) | 199 expectations = test_expectations.TestExpectations(self.port, tests) |
| 192 initial_results = test_run_results.TestRunResults(expectations, len(test s)) | 200 initial_results = test_run_results.TestRunResults(expectations, len(test s)) |
| 193 initial_results.add(get_result('failures/expected/image.html', test_expe ctations.TIMEOUT, run_time=1), False, False) | 201 initial_results.add(get_result('failures/expected/image.html', test_expe ctations.TIMEOUT, run_time=1), False, False) |
| 194 retry_results = test_run_results.TestRunResults(expectations, len(tests) ) | 202 retry_results = test_run_results.TestRunResults(expectations, len(tests) ) |
| 195 retry_results.add(get_result('failures/expected/image.html', test_expect ations.PASS, run_time=0.1), False, False) | 203 retry_results.add(get_result('failures/expected/image.html', test_expect ations.PASS, run_time=0.1), False, False) |
| 196 summary = test_run_results.summarize_results(self.port, expectations, in itial_results, retry_results, enabled_pixel_tests_in_retry=True, only_include_fa iling=True) | 204 summary = test_run_results.summarize_results(self.port, expectations, in itial_results, retry_results, enabled_pixel_tests_in_retry=True, only_include_fa iling=True) |
| 197 self.assertEquals(summary['num_regressions'], 0) | 205 self.assertEquals(summary['num_regressions'], 0) |
| 198 self.assertEquals(summary['num_passes'], 1) | 206 self.assertEquals(summary['num_passes'], 1) |
| OLD | NEW |