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 |