Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(64)

Side by Side Diff: third_party/WebKit/Tools/Scripts/webkitpy/layout_tests/merge_results_unittest.py

Issue 2825253003: webkitpy: Improve performance of merge-results script. (Closed)
Patch Set: Fixes. Created 3 years, 8 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
« no previous file with comments | « third_party/WebKit/Tools/Scripts/webkitpy/layout_tests/merge_results.py ('k') | no next file » | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 # Copyright 2017 The Chromium Authors. All rights reserved. 1 # Copyright 2017 The Chromium Authors. All rights reserved.
2 # Use of this source code is governed by a BSD-style license that can be 2 # Use of this source code is governed by a BSD-style license that can be
3 # found in the LICENSE file. 3 # found in the LICENSE file.
4 4
5 # pylint: disable=invalid-name 5 # pylint: disable=invalid-name
6 # pylint complains about the assertXXX methods and the usage of short variables 6 # pylint complains about the assertXXX methods and the usage of short variables
7 # m/a/b/d in the tests. 7 # m/a/b/d in the tests.
8 8
9 import types 9 import types
10 import unittest 10 import unittest
(...skipping 26 matching lines...) Expand all
37 ([1, 2], ([1], [2])), 37 ([1, 2], ([1], [2])),
38 ([2, 1], ([2], [1])), 38 ([2, 1], ([2], [1])),
39 ([1, 2, 3], ([], [1, 2, 3])), 39 ([1, 2, 3], ([], [1, 2, 3])),
40 ([1, 2, 3], ([1], [2, 3])), 40 ([1, 2, 3], ([1], [2, 3])),
41 ([1, 2, 3], ([1, 2], [3])), 41 ([1, 2, 3], ([1, 2], [3])),
42 ([1, 2, 3], ([1, 2, 3], [])), 42 ([1, 2, 3], ([1, 2, 3], [])),
43 ] 43 ]
44 44
45 for expected, (inputa, inputb) in tests: 45 for expected, (inputa, inputb) in tests:
46 self.assertListEqual( 46 self.assertListEqual(
47 expected, m.merge_listlike(inputa, inputb)) 47 expected, m.merge_listlike([inputa, inputb]))
48 self.assertListEqual( 48 self.assertListEqual(
49 expected, m.merge(inputa, inputb)) 49 expected, m.merge([inputa, inputb]))
50 self.assertSequenceEqual( 50 self.assertSequenceEqual(
51 expected, 51 expected,
52 m.merge_listlike(tuple(inputa), tuple(inputb)), 52 m.merge_listlike([tuple(inputa), tuple(inputb)]),
53 types.TupleType) 53 types.TupleType)
54 self.assertSequenceEqual( 54 self.assertSequenceEqual(
55 expected, 55 expected,
56 m.merge(tuple(inputa), tuple(inputb)), 56 m.merge([tuple(inputa), tuple(inputb)]),
57 types.TupleType) 57 types.TupleType)
58 58
59 def test_merge_simple_dict(self): 59 def test_merge_simple_dict(self):
60 m = merge_results.JSONMerger() 60 m = merge_results.JSONMerger()
61 m.fallback_matcher = m.merge_equal 61 m.fallback_matcher = m.merge_equal
62 62
63 tests = [ 63 tests = [
64 # expected, (inputa, inputb) 64 # expected, (inputa, inputb)
65 ({'a': 1}, ({'a': 1}, {'a': 1})), 65 ({'a': 1}, ({'a': 1}, {'a': 1})),
66 66
67 ({'a': 1, 'b': 2}, ({'a': 1, 'b': 2}, {})), 67 ({'a': 1, 'b': 2}, ({'a': 1, 'b': 2}, {})),
68 ({'a': 1, 'b': 2}, ({}, {'a': 1, 'b': 2})), 68 ({'a': 1, 'b': 2}, ({}, {'a': 1, 'b': 2})),
69 ({'a': 1, 'b': 2}, ({'a': 1}, {'b': 2})), 69 ({'a': 1, 'b': 2}, ({'a': 1}, {'b': 2})),
70 70
71 ({'a': 1, 'b': 2, 'c': 3}, ({'a': 1, 'b': 2, 'c': 3}, {})), 71 ({'a': 1, 'b': 2, 'c': 3}, ({'a': 1, 'b': 2, 'c': 3}, {})),
72 ({'a': 1, 'b': 2, 'c': 3}, ({'a': 1, 'b': 2}, {'c': 3})), 72 ({'a': 1, 'b': 2, 'c': 3}, ({'a': 1, 'b': 2}, {'c': 3})),
73 ({'a': 1, 'b': 2, 'c': 3}, ({'a': 1}, {'b': 2, 'c': 3})), 73 ({'a': 1, 'b': 2, 'c': 3}, ({'a': 1}, {'b': 2, 'c': 3})),
74 ({'a': 1, 'b': 2, 'c': 3}, ({}, {'a': 1, 'b': 2, 'c': 3})), 74 ({'a': 1, 'b': 2, 'c': 3}, ({}, {'a': 1, 'b': 2, 'c': 3})),
75 ] 75 ]
76 76
77 for expected, (inputa, inputb) in tests: 77 for expected, (inputa, inputb) in tests:
78 self.assertDictEqual(expected, m.merge_dictlike(inputa, inputb)) 78 self.assertDictEqual(expected, m.merge_dictlike([inputa, inputb]))
79 79
80 self.assertRaises( 80 self.assertRaises(
81 merge_results.MergeFailure, m.merge_dictlike, {'a': 1}, {'a': 2}) 81 merge_results.MergeFailure, m.merge_dictlike, [{'a': 1}, {'a': 2}])
82 82
83 def test_merge_compound_dict(self): 83 def test_merge_compound_dict(self):
84 m = merge_results.JSONMerger() 84 m = merge_results.JSONMerger()
85 85
86 tests = [ 86 tests = [
87 # expected, (inputa, inputb) 87 # expected, (inputa, inputb)
88 ({'a': [1, 2]}, ({'a': [1]}, {'a': [2]})), 88 ({'a': [1, 2]}, ({'a': [1]}, {'a': [2]})),
89 ({'a': [1, 'c', 3]}, ({'a': [1]}, {'a': ['c', 3]})), 89 ({'a': [1, 'c', 3]}, ({'a': [1]}, {'a': ['c', 3]})),
90 ({'a': [1], 'b': [2]}, ({'a': [1]}, {'b': [2]})), 90 ({'a': [1], 'b': [2]}, ({'a': [1]}, {'b': [2]})),
91 ({'a': {'b': 1, 'c': 2}}, ({'a': {'b': 1}}, {'a': {'c': 2}})), 91 ({'a': {'b': 1, 'c': 2}}, ({'a': {'b': 1}}, {'a': {'c': 2}})),
92 ] 92 ]
93 for expected, (inputa, inputb) in tests: 93 for expected, (inputa, inputb) in tests:
94 self.assertDictEqual(expected, m.merge_dictlike(inputa, inputb)) 94 self.assertDictEqual(expected, m.merge_dictlike([inputa, inputb]))
95 95
96 def test_merge(self): 96 def test_merge(self):
97 m = merge_results.JSONMerger() 97 m = merge_results.JSONMerger()
98 m.fallback_matcher = m.merge_equal 98 m.fallback_matcher = m.merge_equal
99 99
100 tests = [ 100 tests = [
101 # expected, (inputa, inputb) 101 # expected, (inputa, inputb)
102 (None, (None, None)), 102 (None, (None, None)),
103 ({'a': 1}, ({'a': 1}, None)), 103 ({'a': 1}, ({'a': 1}, None)),
104 ({'b': 2}, (None, {'b': 2})), 104 ({'b': 2}, (None, {'b': 2})),
(...skipping 31 matching lines...) Expand 10 before | Expand all | Expand 10 after
136 ({'a': 1, 'b': 2, 'c': 3}, ({}, {'a': 1, 'b': 2, 'c': 3})), 136 ({'a': 1, 'b': 2, 'c': 3}, ({}, {'a': 1, 'b': 2, 'c': 3})),
137 137
138 # Complex values 138 # Complex values
139 ({'a': [1, 2]}, ({'a': [1]}, {'a': [2]})), 139 ({'a': [1, 2]}, ({'a': [1]}, {'a': [2]})),
140 ({'a': [1, 'c', 3]}, ({'a': [1]}, {'a': ['c', 3]})), 140 ({'a': [1, 'c', 3]}, ({'a': [1]}, {'a': ['c', 3]})),
141 ({'a': [1], 'b': [2]}, ({'a': [1]}, {'b': [2]})), 141 ({'a': [1], 'b': [2]}, ({'a': [1]}, {'b': [2]})),
142 ({'a': {'b': 1, 'c': 2}}, ({'a': {'b': 1}}, {'a': {'c': 2}})), 142 ({'a': {'b': 1, 'c': 2}}, ({'a': {'b': 1}}, {'a': {'c': 2}})),
143 ] 143 ]
144 144
145 for expected, (inputa, inputb) in tests: 145 for expected, (inputa, inputb) in tests:
146 self.assertEqual(expected, m.merge(inputa, inputb)) 146 self.assertEqual(expected, m.merge([inputa, inputb]))
147 147
148 self.assertRaises( 148 self.assertRaises(
149 merge_results.MergeFailure, m.merge, {'a': 1}, {'a': 2}) 149 merge_results.MergeFailure, m.merge, [{'a': 1}, {'a': 2}])
150 150
151 # Ordered values 151 # Ordered values
152 a = OrderedDict({'a': 1}) 152 a = OrderedDict({'a': 1})
153 b = OrderedDict({'b': 2}) 153 b = OrderedDict({'b': 2})
154 154
155 a_before_b = OrderedDict() 155 a_before_b = OrderedDict()
156 a_before_b['a'] = 1 156 a_before_b['a'] = 1
157 a_before_b['b'] = 2 157 a_before_b['b'] = 2
158 158
159 b_before_a = OrderedDict() 159 b_before_a = OrderedDict()
160 b_before_a['b'] = 2 160 b_before_a['b'] = 2
161 b_before_a['a'] = 1 161 b_before_a['a'] = 1
162 162
163 r1 = m.merge(a, b) 163 r1 = m.merge([a, b])
164 self.assertSequenceEqual(a_before_b.items(), r1.items()) 164 self.assertSequenceEqual(a_before_b.items(), r1.items())
165 self.assertIsInstance(r1, OrderedDict) 165 self.assertIsInstance(r1, OrderedDict)
166 166
167 r2 = m.merge(b, a) 167 r2 = m.merge([b, a])
168 self.assertSequenceEqual(b_before_a.items(), r2.items()) 168 self.assertSequenceEqual(b_before_a.items(), r2.items())
169 self.assertIsInstance(r2, OrderedDict) 169 self.assertIsInstance(r2, OrderedDict)
170 170
171 def test_custom_match_on_name(self): 171 def test_custom_match_on_name(self):
172 m = merge_results.JSONMerger() 172 m = merge_results.JSONMerger()
173 m.add_helper( 173 m.add_helper(
174 merge_results.NameMatch('a'), 174 merge_results.NameRegexMatch('a'),
175 lambda a, b, name=None: a + b) 175 lambda o, name=None: sum(o))
176 176
177 self.assertDictEqual({'a': 3}, m.merge({'a': 1}, {'a': 2})) 177 self.assertDictEqual({'a': 3}, m.merge([{'a': 1}, {'a': 2}]))
178 self.assertRaises( 178 self.assertRaises(
179 merge_results.MergeFailure, m.merge, {'b': 1}, {'b': 2}) 179 merge_results.MergeFailure, m.merge, [{'b': 1}, {'b': 2}])
180 180
181 # Test that helpers that are added later have precedence. 181 # Test that helpers that are added later have precedence.
182 m.add_helper( 182 m.add_helper(
183 merge_results.NameMatch('b'), 183 merge_results.NameRegexMatch('b'),
184 lambda a, b, name=None: a + b) 184 lambda o, name=None: sum(o))
185 m.add_helper( 185 m.add_helper(
186 merge_results.NameMatch('b'), 186 merge_results.NameRegexMatch('b'),
187 lambda a, b, name=None: a - b) 187 lambda o, name=None: o[0] - o[1])
188 self.assertDictEqual({'b': -1}, m.merge({'b': 1}, {'b': 2})) 188 self.assertDictEqual({'b': -1}, m.merge([{'b': 1}, {'b': 2}]))
189 189
190 def test_custom_match_on_obj_type(self): 190 def test_custom_match_on_obj_type(self):
191 m = merge_results.JSONMerger() 191 m = merge_results.JSONMerger()
192 m.add_helper( 192 m.add_helper(
193 merge_results.TypeMatch(int), 193 merge_results.TypeMatch(int),
194 lambda a, b, name=None: a + b) 194 lambda o, name=None: sum(o))
195 self.assertDictEqual({'a': 3}, m.merge({'a': 1}, {'a': 2})) 195 self.assertDictEqual({'a': 3}, m.merge([{'a': 1}, {'a': 2}]))
196 self.assertDictEqual({'b': 3}, m.merge({'b': 1}, {'b': 2})) 196 self.assertDictEqual({'b': 3}, m.merge([{'b': 1}, {'b': 2}]))
197 197
198 def test_custom_match_on_obj_value(self): 198 def test_custom_match_on_obj_value(self):
199 m = merge_results.JSONMerger() 199 m = merge_results.JSONMerger()
200 m.add_helper( 200 m.add_helper(
201 merge_results.ValueMatch(3), 201 merge_results.ValueMatch(3),
202 lambda a, b, name=None: a + b) 202 lambda o, name=None: sum(o))
203 self.assertDictEqual({'a': 6}, m.merge({'a': 3}, {'a': 3})) 203 self.assertDictEqual({'a': 6}, m.merge([{'a': 3}, {'a': 3}]))
204 self.assertDictEqual({'a': 5}, m.merge({'a': 2}, {'a': 3})) 204 self.assertDictEqual({'a': 5}, m.merge([{'a': 2}, {'a': 3}]))
205 self.assertDictEqual({'a': 7}, m.merge({'a': 3}, {'a': 4})) 205 self.assertDictEqual({'a': 7}, m.merge([{'a': 3}, {'a': 4}]))
206 self.assertRaises( 206 self.assertRaises(
207 merge_results.MergeFailure, m.merge, {'a': 1}, {'a': 2}) 207 merge_results.MergeFailure, m.merge, {'a': 1}, {'a': 2})
208 208
209 209
210 class MergeFilesOneTests(FileSystemTestCase): 210 class MergeFilesOneTests(FileSystemTestCase):
211 def test(self): 211 def test(self):
212 mock_filesystem = MockFileSystem({'/s/file1': '1', '/s/file2': '2'}, dir s=['/output']) 212 mock_filesystem = MockFileSystem({'/s/file1': '1', '/s/file2': '2'}, dir s=['/output'])
213 213
214 merger = merge_results.MergeFilesOne(mock_filesystem) 214 merger = merge_results.MergeFilesOne(mock_filesystem)
215 215
(...skipping 271 matching lines...) Expand 10 before | Expand all | Expand 10 after
487 }, 487 },
488 ('/output/outff4', ['/s/filea', '/s/filef1a'])) 488 ('/output/outff4', ['/s/filea', '/s/filef1a']))
489 489
490 490
491 class JSONTestResultsMerger(unittest.TestCase): 491 class JSONTestResultsMerger(unittest.TestCase):
492 492
493 def test_allow_unknown_if_matching(self): 493 def test_allow_unknown_if_matching(self):
494 merger = merge_results.JSONTestResultsMerger(allow_unknown_if_matching=F alse) 494 merger = merge_results.JSONTestResultsMerger(allow_unknown_if_matching=F alse)
495 self.assertEqual( 495 self.assertEqual(
496 {'version': 3.0}, 496 {'version': 3.0},
497 merger.merge({'version': 3.0}, {'version': 3.0})) 497 merger.merge([{'version': 3.0}, {'version': 3.0}]))
498 498
499 with self.assertRaises(merge_results.MergeFailure): 499 with self.assertRaises(merge_results.MergeFailure):
500 merger.merge({'random': 'hello'}, {'random': 'hello'}) 500 merger.merge([{'random': 'hello'}, {'random': 'hello'}])
501 501
502 merger = merge_results.JSONTestResultsMerger(allow_unknown_if_matching=T rue) 502 merger = merge_results.JSONTestResultsMerger(allow_unknown_if_matching=T rue)
503 self.assertEqual( 503 self.assertEqual(
504 {'random': 'hello'}, 504 {'random': 'hello'},
505 merger.merge({'random': 'hello'}, {'random': 'hello'})) 505 merger.merge([{'random': 'hello'}, {'random': 'hello'}]))
506 506
507 def test_summable(self): 507 def test_summable(self):
508 merger = merge_results.JSONTestResultsMerger() 508 merger = merge_results.JSONTestResultsMerger()
509 self.assertEqual( 509 self.assertEqual(
510 {'fixable': 5}, 510 {'fixable': 5},
511 merger.merge({'fixable': 2}, {'fixable': 3})) 511 merger.merge([{'fixable': 2}, {'fixable': 3}]))
512 self.assertEqual( 512 self.assertEqual(
513 {'num_failures_by_type': {'A': 4, 'B': 3, 'C': 2}}, 513 {'num_failures_by_type': {'A': 4, 'B': 3, 'C': 2}},
514 merger.merge( 514 merger.merge([
515 {'num_failures_by_type': {'A': 3, 'B': 1}}, 515 {'num_failures_by_type': {'A': 3, 'B': 1}},
516 {'num_failures_by_type': {'A': 1, 'B': 2, 'C': 2}})) 516 {'num_failures_by_type': {'A': 1, 'B': 2, 'C': 2}},
517 ]))
517 518
518 def test_interrupted(self): 519 def test_interrupted(self):
519 merger = merge_results.JSONTestResultsMerger() 520 merger = merge_results.JSONTestResultsMerger()
520 self.assertEqual( 521 self.assertEqual(
521 {'interrupted': False}, 522 {'interrupted': False},
522 merger.merge({'interrupted': False}, {'interrupted': False})) 523 merger.merge([{'interrupted': False}, {'interrupted': False}]))
523 self.assertEqual( 524 self.assertEqual(
524 {'interrupted': True}, 525 {'interrupted': True},
525 merger.merge({'interrupted': True}, {'interrupted': False})) 526 merger.merge([{'interrupted': True}, {'interrupted': False}]))
526 self.assertEqual( 527 self.assertEqual(
527 {'interrupted': True}, 528 {'interrupted': True},
528 merger.merge({'interrupted': False}, {'interrupted': True})) 529 merger.merge([{'interrupted': False}, {'interrupted': True}]))
529 530
530 def test_seconds_since_epoch(self): 531 def test_seconds_since_epoch(self):
531 merger = merge_results.JSONTestResultsMerger() 532 merger = merge_results.JSONTestResultsMerger()
532 self.assertEqual( 533 self.assertEqual(
533 {'seconds_since_epoch': 2}, 534 {'seconds_since_epoch': 2},
534 merger.merge({'seconds_since_epoch': 3}, {'seconds_since_epoch': 2}) ) 535 merger.merge([{'seconds_since_epoch': 3}, {'seconds_since_epoch': 2} ]))
535 self.assertEqual( 536 self.assertEqual(
536 {'seconds_since_epoch': 2}, 537 {'seconds_since_epoch': 2},
537 merger.merge({'seconds_since_epoch': 2}, {'seconds_since_epoch': 3}) ) 538 merger.merge([{'seconds_since_epoch': 2}, {'seconds_since_epoch': 3} ]))
538 self.assertEqual( 539 self.assertEqual(
539 {'seconds_since_epoch': 12}, 540 {'seconds_since_epoch': 12},
540 merger.merge({'seconds_since_epoch': 12}, {})) 541 merger.merge([{'seconds_since_epoch': 12}, {}]))
541 542
542 543
543 class LayoutTestDirMergerTests(unittest.TestCase): 544 class LayoutTestDirMergerTests(unittest.TestCase):
544 545
545 maxDiff = None 546 maxDiff = None
546 547
547 # Common HTML files every shard has. 548 # Common HTML files every shard has.
548 dashboard_html = '<html><body>Dashboard would be here.</body></html>' 549 dashboard_html = '<html><body>Dashboard would be here.</body></html>'
549 dashboard_css = '.css { value = would be here }' 550 dashboard_css = '.css { value = would be here }'
550 551
(...skipping 504 matching lines...) Expand 10 before | Expand all | Expand 10 after
1055 1056
1056 def test(self): 1057 def test(self):
1057 fs = MockFileSystem(self.layout_test_filesystem) 1058 fs = MockFileSystem(self.layout_test_filesystem)
1058 1059
1059 merger = merge_results.LayoutTestDirMerger(fs, results_json_value_overri des={'layout_tests_dir': 'src'}) 1060 merger = merge_results.LayoutTestDirMerger(fs, results_json_value_overri des={'layout_tests_dir': 'src'})
1060 merger.merge('/out', ['/shards/0', '/shards/1']) 1061 merger.merge('/out', ['/shards/0', '/shards/1'])
1061 1062
1062 for fname, contents in self.layout_test_output_filesystem.items(): 1063 for fname, contents in self.layout_test_output_filesystem.items():
1063 self.assertIn(fname, fs.files) 1064 self.assertIn(fname, fs.files)
1064 self.assertMultiLineEqual(contents, fs.files[fname]) 1065 self.assertMultiLineEqual(contents, fs.files[fname])
OLDNEW
« no previous file with comments | « third_party/WebKit/Tools/Scripts/webkitpy/layout_tests/merge_results.py ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698