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

Side by Side Diff: tools/isolate/merge_isolate_test.py

Issue 10019014: Convert isolate.py to exclusively use .isolate files. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Do not read as binary Created 8 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 | Annotate | Revision Log
« no previous file with comments | « tools/isolate/merge_isolate.py ('k') | tools/isolate/trace_inputs.py » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 #!/usr/bin/env python 1 #!/usr/bin/env python
2 # Copyright (c) 2012 The Chromium Authors. All rights reserved. 2 # Copyright (c) 2012 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 import unittest 6 import unittest
7 7
8 import merge_isolate 8 import merge_isolate
9 # Create shortcuts.
10 from merge_isolate import KEY_TRACKED, KEY_UNTRACKED
9 11
10 12
11 class MergeGyp(unittest.TestCase): 13 class MergeGyp(unittest.TestCase):
12 def test_unknown_key(self): 14 def test_unknown_key(self):
13 try: 15 try:
14 merge_isolate.process_variables(None, {'foo': [],}) 16 merge_isolate.verify_variables({'foo': [],})
15 self.fail() 17 self.fail()
16 except AssertionError: 18 except AssertionError:
17 pass 19 pass
18 20
19 def test_unknown_var(self): 21 def test_unknown_var(self):
20 try: 22 try:
21 merge_isolate.process_variables(None, {'variables': {'foo': [],}}) 23 merge_isolate.verify_condition({'variables': {'foo': [],}})
22 self.fail() 24 self.fail()
23 except AssertionError: 25 except AssertionError:
24 pass 26 pass
25 27
26 def test_parse_gyp_dict_empty(self): 28 def test_union(self):
27 f, d, o = merge_isolate.parse_gyp_dict({}) 29 value1 = {
28 self.assertEquals({}, f) 30 'a': set(['A']),
29 self.assertEquals({}, d) 31 'b': ['B', 'C'],
30 self.assertEquals(set(), o) 32 'c': 'C',
31 33 }
32 def test_parse_gyp_dict(self): 34 value2 = {
35 'a': set(['B', 'C']),
36 'b': [],
37 'd': set(),
38 }
39 expected = {
40 'a': set(['A', 'B', 'C']),
41 'b': ['B', 'C'],
42 'c': 'C',
43 'd': set(),
44 }
45 self.assertEquals(expected, merge_isolate.union(value1, value2))
46
47 def test_eval_content(self):
48 try:
49 # Intrinsics are not available.
50 merge_isolate.eval_content('map(str, [1, 2])')
51 self.fail()
52 except NameError:
53 pass
54
55 def test_load_gyp_empty(self):
56 self.assertEquals({}, merge_isolate.load_gyp({}).flatten())
57
58 def test_load_gyp(self):
33 value = { 59 value = {
34 'variables': { 60 'variables': {
35 'isolate_files': [ 61 KEY_TRACKED: ['a'],
36 'a', 62 KEY_UNTRACKED: ['b'],
37 ],
38 'isolate_dirs': [
39 'b',
40 ],
41 }, 63 },
42 'conditions': [ 64 'conditions': [
43 ['OS=="atari"', { 65 ['OS=="atari"', {
44 'variables': { 66 'variables': {
45 'isolate_files': [ 67 KEY_TRACKED: ['c', 'x'],
46 'c', 68 KEY_UNTRACKED: ['d'],
47 'x', 69 'command': ['echo', 'Hello World'],
48 ], 70 'read_only': True,
49 'isolate_dirs': [
50 'd',
51 ],
52 }, 71 },
53 }, { # else 72 }, { # else
54 'variables': { 73 'variables': {
55 'isolate_files': [ 74 KEY_TRACKED: ['e', 'x'],
56 'e', 75 KEY_UNTRACKED: ['f'],
57 'x', 76 'command': ['echo', 'You should get an Atari'],
58 ],
59 'isolate_dirs': [
60 'f',
61 ],
62 }, 77 },
63 }], 78 }],
64 ['OS=="amiga"', { 79 ['OS=="amiga"', {
65 'variables': { 80 'variables': {
66 'isolate_files': [ 81 KEY_TRACKED: ['g'],
67 'g', 82 'read_only': False,
68 ], 83 },
69 }, 84 }],
70 }], 85 ['OS=="dendy"', {
71 ['OS=="inexistent"', {
72 }], 86 }],
73 ['OS=="coleco"', { 87 ['OS=="coleco"', {
74 }, { # else 88 }, { # else
75 'variables': { 89 'variables': {
76 'isolate_dirs': [ 90 KEY_UNTRACKED: ['h'],
77 'h', 91 'read_only': None,
78 ],
79 }, 92 },
80 }], 93 }],
81 ], 94 ],
82 } 95 }
83 expected_files = { 96 expected = {
84 'a': set([None]), 97 'amiga': {
85 'c': set(['atari']), 98 'command': ['echo', 'You should get an Atari'],
86 'e': set(['!atari']), 99 KEY_TRACKED: ['a', 'e', 'g', 'x'],
87 'g': set(['amiga']), 100 KEY_UNTRACKED: ['b', 'f', 'h'],
88 'x': set(['!atari', 'atari']), # potential for reduction 101 'read_only': False,
89 } 102 },
90 expected_dirs = { 103 'atari': {
91 'b': set([None]), 104 'command': ['echo', 'Hello World'],
92 'd': set(['atari']), 105 KEY_TRACKED: ['a', 'c', 'x'],
93 'f': set(['!atari']), 106 KEY_UNTRACKED: ['b', 'd', 'h'],
94 'h': set(['!coleco']), 107 'read_only': True,
95 } 108 },
96 # coleco is included even if only negative. 109 'coleco': {
97 expected_oses = set(['atari', 'amiga', 'coleco']) 110 'command': ['echo', 'You should get an Atari'],
98 actual_files, actual_dirs, actual_oses = merge_isolate.parse_gyp_dict(value) 111 KEY_TRACKED: ['a', 'e', 'x'],
99 self.assertEquals(expected_files, actual_files) 112 KEY_UNTRACKED: ['b', 'f'],
100 self.assertEquals(expected_dirs, actual_dirs) 113 },
114 'dendy': {
115 'command': ['echo', 'You should get an Atari'],
116 KEY_TRACKED: ['a', 'e', 'x'],
117 KEY_UNTRACKED: ['b', 'f', 'h'],
118 },
119 }
120 self.assertEquals(expected, merge_isolate.load_gyp(value).flatten())
121
122 def test_load_gyp_duplicate_command(self):
123 value = {
124 'variables': {
125 'command': ['rm', '-rf', '/'],
126 },
127 'conditions': [
128 ['OS=="atari"', {
129 'variables': {
130 'command': ['echo', 'Hello World'],
131 },
132 }],
133 ],
134 }
135 try:
136 merge_isolate.load_gyp(value)
137 self.fail()
138 except AssertionError:
139 pass
140
141 def test_load_gyp_no_condition(self):
142 value = {
143 'variables': {
144 KEY_TRACKED: ['a'],
145 KEY_UNTRACKED: ['b'],
146 },
147 }
148 expected = {
149 KEY_TRACKED: ['a'],
150 KEY_UNTRACKED: ['b'],
151 }
152 actual = merge_isolate.load_gyp(value)
153 # Flattening the whole config will discard 'None'.
154 self.assertEquals({}, actual.flatten())
155 self.assertEquals([None], actual.per_os.keys())
156 # But the 'None' value is still available as a backup.
157 self.assertEquals(expected, actual.per_os[None].flatten())
158
159 def test_invert_map(self):
160 value = {
161 'amiga': {
162 'command': ['echo', 'You should get an Atari'],
163 KEY_TRACKED: ['a', 'e', 'g', 'x'],
164 KEY_UNTRACKED: ['b', 'f', 'h'],
165 'read_only': False,
166 },
167 'atari': {
168 'command': ['echo', 'Hello World'],
169 KEY_TRACKED: ['a', 'c', 'x'],
170 KEY_UNTRACKED: ['b', 'd', 'h'],
171 'read_only': True,
172 },
173 'coleco': {
174 'command': ['echo', 'You should get an Atari'],
175 KEY_TRACKED: ['a', 'e', 'x'],
176 KEY_UNTRACKED: ['b', 'f'],
177 },
178 'dendy': {
179 'command': ['echo', 'You should get an Atari'],
180 KEY_TRACKED: ['a', 'e', 'x'],
181 KEY_UNTRACKED: ['b', 'f', 'h'],
182 },
183 }
184 expected_values = {
185 'command': {
186 ('echo', 'Hello World'): set(['atari']),
187 ('echo', 'You should get an Atari'): set(['amiga', 'coleco', 'dendy']),
188 },
189 KEY_TRACKED: {
190 'a': set(['amiga', 'atari', 'coleco', 'dendy']),
191 'c': set(['atari']),
192 'e': set(['amiga', 'coleco', 'dendy']),
193 'g': set(['amiga']),
194 'x': set(['amiga', 'atari', 'coleco', 'dendy']),
195 },
196 KEY_UNTRACKED: {
197 'b': set(['amiga', 'atari', 'coleco', 'dendy']),
198 'd': set(['atari']),
199 'f': set(['amiga', 'coleco', 'dendy']),
200 'h': set(['amiga', 'atari', 'dendy']),
201 },
202 'read_only': {
203 None: set(['coleco', 'dendy']),
204 False: set(['amiga']),
205 True: set(['atari']),
206 },
207 }
208 expected_oses = set(['amiga', 'atari', 'coleco', 'dendy'])
209 actual_values, actual_oses = merge_isolate.invert_map(value)
210 self.assertEquals(expected_values, actual_values)
101 self.assertEquals(expected_oses, actual_oses) 211 self.assertEquals(expected_oses, actual_oses)
102 212
103 def test_reduce_inputs(self): 213 def test_reduce_inputs(self):
104 value_files = { 214 values = {
105 'a': set([None]), 215 'command': {
106 'c': set(['atari']), 216 ('echo', 'Hello World'): set(['atari']),
107 'e': set(['!atari']), 217 ('echo', 'You should get an Atari'): set(['amiga', 'coleco', 'dendy']),
108 'g': set(['amiga']), 218 },
109 'x': set(['!atari', 'atari']), 219 KEY_TRACKED: {
110 } 220 'a': set(['amiga', 'atari', 'coleco', 'dendy']),
111 value_dirs = { 221 'c': set(['atari']),
112 'b': set([None]), 222 'e': set(['amiga', 'coleco', 'dendy']),
113 'd': set(['atari']), 223 'g': set(['amiga']),
114 'f': set(['!atari']), 224 'x': set(['amiga', 'atari', 'coleco', 'dendy']),
115 'h': set(['!coleco']), 225 },
116 } 226 KEY_UNTRACKED: {
117 value_oses = set(['atari', 'amiga', 'coleco']) 227 'b': set(['amiga', 'atari', 'coleco', 'dendy']),
118 expected_files = { 228 'd': set(['atari']),
119 'a': set([None]), 229 'f': set(['amiga', 'coleco', 'dendy']),
120 'c': set(['atari']), 230 'h': set(['amiga', 'atari', 'dendy']),
121 'e': set(['!atari']), 231 },
122 'g': set(['amiga']), 232 'read_only': {
123 'x': set([None]), # Reduced. 233 None: set(['coleco', 'dendy']),
124 } 234 False: set(['amiga']),
125 expected_dirs = { 235 True: set(['atari']),
126 'b': set([None]), 236 },
127 'd': set(['atari']), 237 }
128 'f': set(['!atari']), 238 oses = set(['amiga', 'atari', 'coleco', 'dendy'])
129 'h': set(['!coleco']), 239 expected_values = {
130 } 240 'command': {
131 actual_files, actual_dirs = merge_isolate.reduce_inputs( 241 ('echo', 'Hello World'): set(['atari']),
132 value_files, value_dirs, value_oses) 242 ('echo', 'You should get an Atari'): set(['!atari']),
133 self.assertEquals(expected_files, actual_files) 243 },
134 self.assertEquals(expected_dirs, actual_dirs) 244 KEY_TRACKED: {
135 245 'a': set([None]),
136 def test_convert_to_gyp(self): 246 'c': set(['atari']),
137 files = { 247 'e': set(['!atari']),
138 'a': set([None]), 248 'g': set(['amiga']),
139 'x': set([None]), 249 'x': set([None]),
140 250 },
141 'g': set(['amiga']), 251 KEY_UNTRACKED: {
142 252 'b': set([None]),
143 'c': set(['atari']), 253 'd': set(['atari']),
144 'e': set(['!atari']), 254 'f': set(['!atari']),
145 } 255 'h': set(['!coleco']),
146 dirs = { 256 },
147 'b': set([None]), 257 'read_only': {
148 258 None: set(['coleco', 'dendy']),
149 'd': set(['atari']), 259 False: set(['amiga']),
150 'f': set(['!atari']), 260 True: set(['atari']),
151 261 },
152 'h': set(['!coleco']), 262 }
153 } 263 actual_values, actual_oses = merge_isolate.reduce_inputs(values, oses)
264 self.assertEquals(expected_values, actual_values)
265 self.assertEquals(oses, actual_oses)
266
267 def test_convert_map_to_gyp(self):
268 values = {
269 'command': {
270 ('echo', 'Hello World'): set(['atari']),
271 ('echo', 'You should get an Atari'): set(['!atari']),
272 },
273 KEY_TRACKED: {
274 'a': set([None]),
275 'c': set(['atari']),
276 'e': set(['!atari']),
277 'g': set(['amiga']),
278 'x': set([None]),
279 },
280 KEY_UNTRACKED: {
281 'b': set([None]),
282 'd': set(['atari']),
283 'f': set(['!atari']),
284 'h': set(['!coleco']),
285 },
286 'read_only': {
287 None: set(['coleco', 'dendy']),
288 False: set(['amiga']),
289 True: set(['atari']),
290 },
291 }
292 oses = set(['amiga', 'atari', 'coleco', 'dendy'])
154 expected = { 293 expected = {
155 'variables': { 294 'variables': {
156 'isolate_dirs': ['b'], 295 KEY_TRACKED: ['a', 'x'],
157 'isolate_files': ['a', 'x'], 296 KEY_UNTRACKED: ['b'],
158 }, 297 },
159 'conditions': [ 298 'conditions': [
160 ['OS=="amiga"', { 299 ['OS=="amiga"', {
161 'variables': { 300 'variables': {
162 'isolate_files': ['g'], 301 KEY_TRACKED: ['g'],
302 'read_only': False,
163 }, 303 },
164 }], 304 }],
165 ['OS=="atari"', { 305 ['OS=="atari"', {
166 'variables': { 306 'variables': {
167 'isolate_dirs': ['d'], 307 'command': ['echo', 'Hello World'],
168 'isolate_files': ['c'], 308 KEY_TRACKED: ['c'],
309 KEY_UNTRACKED: ['d'],
310 'read_only': True,
169 }, 311 },
170 }, { 312 }, {
171 'variables': { 313 'variables': {
172 'isolate_dirs': ['f'], 314 'command': ['echo', 'You should get an Atari'],
173 'isolate_files': ['e'], 315 KEY_TRACKED: ['e'],
316 KEY_UNTRACKED: ['f'],
174 }, 317 },
175 }], 318 }],
176 ['OS=="coleco"', { 319 ['OS=="coleco"', {
177 }, { 320 }, {
178 'variables': { 321 'variables': {
179 'isolate_dirs': ['h'], 322 KEY_UNTRACKED: ['h'],
180 }, 323 },
181 }], 324 }],
182 ], 325 ],
183 } 326 }
184 self.assertEquals(expected, merge_isolate.convert_to_gyp(files, dirs)) 327 self.assertEquals(expected, merge_isolate.convert_map_to_gyp(values, oses))
185 328
186 329
187 if __name__ == '__main__': 330 if __name__ == '__main__':
188 unittest.main() 331 unittest.main()
OLDNEW
« no previous file with comments | « tools/isolate/merge_isolate.py ('k') | tools/isolate/trace_inputs.py » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698