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

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: Reduce copy pasted constants 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
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 },
101 self.assertEquals(expected_oses, actual_oses) 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 = {
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 'OSes': set(['amiga', 'atari', 'coleco', 'dendy']),
203 'read_only': {
204 None: set(['coleco', 'dendy']),
205 False: set(['amiga']),
206 True: set(['atari']),
207 },
208 }
209 self.assertEquals(expected, merge_isolate.invert_map(value))
102 210
103 def test_reduce_inputs(self): 211 def test_reduce_inputs(self):
104 value_files = { 212 values = {
105 'a': set([None]), 213 'command': {
106 'c': set(['atari']), 214 ('echo', 'Hello World'): set(['atari']),
107 'e': set(['!atari']), 215 ('echo', 'You should get an Atari'): set(['amiga', 'coleco', 'dendy']),
108 'g': set(['amiga']), 216 },
109 'x': set(['!atari', 'atari']), 217 KEY_TRACKED: {
110 } 218 'a': set(['amiga', 'atari', 'coleco', 'dendy']),
111 value_dirs = { 219 'c': set(['atari']),
112 'b': set([None]), 220 'e': set(['amiga', 'coleco', 'dendy']),
113 'd': set(['atari']), 221 'g': set(['amiga']),
114 'f': set(['!atari']), 222 'x': set(['amiga', 'atari', 'coleco', 'dendy']),
115 'h': set(['!coleco']), 223 },
116 } 224 KEY_UNTRACKED: {
117 value_oses = set(['atari', 'amiga', 'coleco']) 225 'b': set(['amiga', 'atari', 'coleco', 'dendy']),
118 expected_files = { 226 'd': set(['atari']),
119 'a': set([None]), 227 'f': set(['amiga', 'coleco', 'dendy']),
120 'c': set(['atari']), 228 'h': set(['amiga', 'atari', 'dendy']),
121 'e': set(['!atari']), 229 },
122 'g': set(['amiga']), 230 'OSes': set(['amiga', 'atari', 'coleco', 'dendy']),
123 'x': set([None]), # Reduced. 231 'read_only': {
124 } 232 None: set(['coleco', 'dendy']),
125 expected_dirs = { 233 False: set(['amiga']),
126 'b': set([None]), 234 True: set(['atari']),
127 'd': set(['atari']), 235 },
128 'f': set(['!atari']), 236 }
129 'h': set(['!coleco']), 237 expected = {
130 } 238 'command': {
131 actual_files, actual_dirs = merge_isolate.reduce_inputs( 239 ('echo', 'Hello World'): set(['atari']),
132 value_files, value_dirs, value_oses) 240 ('echo', 'You should get an Atari'): set(['!atari']),
133 self.assertEquals(expected_files, actual_files) 241 },
134 self.assertEquals(expected_dirs, actual_dirs) 242 KEY_TRACKED: {
135 243 'a': set([None]),
136 def test_convert_to_gyp(self): 244 'c': set(['atari']),
137 files = { 245 'e': set(['!atari']),
138 'a': set([None]), 246 'g': set(['amiga']),
139 'x': set([None]), 247 'x': set([None]),
140 248 },
141 'g': set(['amiga']), 249 KEY_UNTRACKED: {
142 250 'b': set([None]),
143 'c': set(['atari']), 251 'd': set(['atari']),
144 'e': set(['!atari']), 252 'f': set(['!atari']),
145 } 253 'h': set(['!coleco']),
146 dirs = { 254 },
147 'b': set([None]), 255 'OSes': set(['amiga', 'atari', 'coleco', 'dendy']),
148 256 'read_only': {
149 'd': set(['atari']), 257 None: set(['coleco', 'dendy']),
150 'f': set(['!atari']), 258 False: set(['amiga']),
151 259 True: set(['atari']),
152 'h': set(['!coleco']), 260 },
261 }
262 self.assertEquals(expected, merge_isolate.reduce_inputs(values))
263
264 def test_convert_map_to_gyp(self):
265 values = {
266 'command': {
267 ('echo', 'Hello World'): set(['atari']),
268 ('echo', 'You should get an Atari'): set(['!atari']),
269 },
270 KEY_TRACKED: {
271 'a': set([None]),
272 'c': set(['atari']),
273 'e': set(['!atari']),
274 'g': set(['amiga']),
275 'x': set([None]),
276 },
277 KEY_UNTRACKED: {
278 'b': set([None]),
279 'd': set(['atari']),
280 'f': set(['!atari']),
281 'h': set(['!coleco']),
282 },
283 'OSes': set(['amiga', 'atari', 'coleco', 'dendy']),
284 'read_only': {
285 None: set(['coleco', 'dendy']),
286 False: set(['amiga']),
287 True: set(['atari']),
288 },
153 } 289 }
154 expected = { 290 expected = {
155 'variables': { 291 'variables': {
156 'isolate_dirs': ['b'], 292 KEY_TRACKED: ['a', 'x'],
157 'isolate_files': ['a', 'x'], 293 KEY_UNTRACKED: ['b'],
158 }, 294 },
159 'conditions': [ 295 'conditions': [
160 ['OS=="amiga"', { 296 ['OS=="amiga"', {
161 'variables': { 297 'variables': {
162 'isolate_files': ['g'], 298 KEY_TRACKED: ['g'],
299 'read_only': False,
163 }, 300 },
164 }], 301 }],
165 ['OS=="atari"', { 302 ['OS=="atari"', {
166 'variables': { 303 'variables': {
167 'isolate_dirs': ['d'], 304 'command': ['echo', 'Hello World'],
168 'isolate_files': ['c'], 305 KEY_TRACKED: ['c'],
306 KEY_UNTRACKED: ['d'],
307 'read_only': True,
169 }, 308 },
170 }, { 309 }, {
171 'variables': { 310 'variables': {
172 'isolate_dirs': ['f'], 311 'command': ['echo', 'You should get an Atari'],
173 'isolate_files': ['e'], 312 KEY_TRACKED: ['e'],
313 KEY_UNTRACKED: ['f'],
174 }, 314 },
175 }], 315 }],
176 ['OS=="coleco"', { 316 ['OS=="coleco"', {
177 }, { 317 }, {
178 'variables': { 318 'variables': {
179 'isolate_dirs': ['h'], 319 KEY_UNTRACKED: ['h'],
180 }, 320 },
181 }], 321 }],
182 ], 322 ],
183 } 323 }
184 self.assertEquals(expected, merge_isolate.convert_to_gyp(files, dirs)) 324 self.assertEquals(expected, merge_isolate.convert_map_to_gyp(values))
185 325
186 326
187 if __name__ == '__main__': 327 if __name__ == '__main__':
188 unittest.main() 328 unittest.main()
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698