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

Side by Side Diff: platform_tools/android/tests/makefile_writer_tests.py

Issue 198063002: Updates to Android.mk generation. (Closed) Base URL: https://skia.googlesource.com/skia.git@android_mk
Patch Set: Add a comment explaining the motivation of OrderedSet. Created 6 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
OLDNEW
1 #!/usr/bin/python 1 #!/usr/bin/python
2 2
3 # Copyright 2014 Google Inc. 3 # Copyright 2014 Google Inc.
4 # 4 #
5 # Use of this source code is governed by a BSD-style license that can be 5 # Use of this source code is governed by a BSD-style license that can be
6 # found in the LICENSE file. 6 # found in the LICENSE file.
7 7
8 """ 8 """
9 Test makefile_writer.py 9 Test makefile_writer.py
10 """ 10 """
11 11
12 import argparse 12 import argparse
13 import os 13 import os
14 import shutil 14 import shutil
15 import sys 15 import sys
16 import tempfile 16 import tempfile
17 import test_variables 17 import test_variables
18 import unittest 18 import unittest
19 import utils
19 20
20 sys.path.append(test_variables.GYP_GEN_DIR) 21 sys.path.append(test_variables.GYP_GEN_DIR)
21 22
22 import makefile_writer 23 import makefile_writer
23 import vars_dict_lib 24 import vars_dict_lib
24 25
25 EXPECTATIONS_DIR = os.path.join(os.path.dirname(__file__), 'expectations')
26 MAKEFILE_NAME = 'Android.mk' 26 MAKEFILE_NAME = 'Android.mk'
27 REBASELINE_MSG = ('If you\'ve modified makefile_writer.py, run '
28 '"makefile_writer_tests.py --rebaseline" to rebaseline')
27 29
28 def generate_dummy_vars_dict(name): 30 def generate_dummy_vars_dict(name):
29 """Create a VarsDict and fill it with dummy entries. 31 """Create a VarsDict and fill it with dummy entries.
30 32
31 Args: 33 Args:
32 name: string to be appended to each entry, if not None. 34 name: string to be appended to each entry, if not None.
33 35
34 Returns: 36 Returns:
35 A VarsDict with dummy entries. 37 A VarsDict with dummy entries.
36 """ 38 """
37 vars_dict = vars_dict_lib.VarsDict() 39 vars_dict = vars_dict_lib.VarsDict()
38 for key in vars_dict.keys(): 40 for key in vars_dict.keys():
39 entry = key.lower() 41 entry = key.lower()
40 if name: 42 if name:
41 entry += '_' + name 43 entry += '_' + name
42 vars_dict[key].add(entry) 44 vars_dict[key].add(entry)
43 return vars_dict 45 return vars_dict
44 46
47 def generate_write_local_vars_params():
48 """Generator to compute params for write_local_vars tests.
49
50 Each iteration yields a new tuple: (filename, append, name), specific to a
51 way to call write_local_vars for the tests.
52
53 Yields:
54 filename: filename corresponding to the expectation file for this
55 combination of params to write_local_vars.
56 append: boolean to pass as append parameter to write_local_vars.
57 name: string to pass as name parameter to write_local_vars.
58 """
59 for append in [ True, False ]:
60 for name in [ None, 'arm', 'foo' ]:
61 filename = 'write_local_vars'
62 if append:
63 filename += '_append'
64 else:
65 filename += '_no_append'
66 if name:
67 filename += '_' + name
68 else:
69 filename += '_no_name'
70
71 yield (filename, append, name)
45 72
46 def generate_dummy_vars_dict_data(name, condition): 73 def generate_dummy_vars_dict_data(name, condition):
47 """Create a dummy VarsDictData. 74 """Create a dummy VarsDictData.
48 75
49 Create a dummy VarsDictData, using the name for both the contained 76 Create a dummy VarsDictData, using the name for both the contained
50 VarsDict and the VarsDictData 77 VarsDict and the VarsDictData
51 78
52 Args: 79 Args:
53 name: name used by both the returned VarsDictData and its contained 80 name: name used by both the returned VarsDictData and its contained
54 VarsDict. 81 VarsDict.
(...skipping 32 matching lines...) Expand 10 before | Expand all | Expand 10 after
87 114
88 def test_write_group_empty(self): 115 def test_write_group_empty(self):
89 f = tempfile.TemporaryFile() 116 f = tempfile.TemporaryFile()
90 assert f.tell() == 0 117 assert f.tell() == 0
91 for empty in (None, []): 118 for empty in (None, []):
92 for truth in (True, False): 119 for truth in (True, False):
93 makefile_writer.write_group(f, 'name', empty, truth) 120 makefile_writer.write_group(f, 'name', empty, truth)
94 self.assertEqual(f.tell(), 0) 121 self.assertEqual(f.tell(), 0)
95 f.close() 122 f.close()
96 123
97 def __compare_files(self, actual_name, expectation_name, msg=None):
98 """Check that two files are identical.
99
100 Assert line by line that the files match.
101
102 Args:
103 actual_name: Full path to the test file.
104 expectation_name: Basename of the expectations file within which
105 to compare. The file is expected to be in
106 platform_tools/android/tests/expectations.
107 msg: Message to pass to assertEqual.
108 Raises:
109 AssertionError: If the files do not match.
110 """
111 with open(actual_name, 'r') as result:
112 with open(os.path.join(EXPECTATIONS_DIR,
113 expectation_name)) as expectation:
114 for line in result:
115 self.assertEqual(line, expectation.readline(), msg)
116
117 def test_write_group(self): 124 def test_write_group(self):
118 animals = ('dog', 'cat', 'mouse', 'elephant') 125 animals = ('dog', 'cat', 'mouse', 'elephant')
119 fd, filename = tempfile.mkstemp() 126 fd, filename = tempfile.mkstemp()
120 with open(filename, 'w') as f: 127 with open(filename, 'w') as f:
121 makefile_writer.write_group(f, 'animals', animals, False) 128 makefile_writer.write_group(f, 'animals', animals, False)
122 os.close(fd) 129 os.close(fd)
123 # Now confirm that it matches expectations 130 # Now confirm that it matches expectations
124 self.__compare_files(filename, 'animals.txt') 131 utils.compare_to_expectation(filename, 'animals.txt', self.assertTrue)
125 132
126 with open(filename, 'w') as f: 133 with open(filename, 'w') as f:
127 makefile_writer.write_group(f, 'animals_append', animals, True) 134 makefile_writer.write_group(f, 'animals_append', animals, True)
128 # Now confirm that it matches expectations 135 # Now confirm that it matches expectations
129 self.__compare_files(filename, 'animals_append.txt') 136 utils.compare_to_expectation(filename, 'animals_append.txt',
137 self.assertTrue)
130 os.remove(filename) 138 os.remove(filename)
131 139
132 def test_write_local_vars(self): 140 def test_write_local_vars(self):
133 vars_dict = generate_dummy_vars_dict(None) 141 vars_dict = generate_dummy_vars_dict(None)
142 # Compare various ways of calling write_local_vars to expectations.
143 for (filename, append, name) in generate_write_local_vars_params():
144 fd, outfile = tempfile.mkstemp()
145 with open(outfile, 'w') as f:
146 makefile_writer.write_local_vars(f, vars_dict, append, name)
147 os.close(fd)
134 148
135 # Call variations of write_local_vars. 149 # Compare to the expected file.
136 for append in [ True, False ]: 150 utils.compare_to_expectation(outfile, filename, self.assertTrue,
137 for name in [ None, 'arm', 'foo' ]: 151 REBASELINE_MSG)
138 # Now write to a temporary file.
139 fd, outfile = tempfile.mkstemp()
140 with open(outfile, 'w') as f:
141 makefile_writer.write_local_vars(f, vars_dict, append, name)
142 os.close(fd)
143 152
144 # Compare to the expected file. 153 # KNOWN_TARGETS is always a key in the input VarsDict, but it should not
145 filename = 'write_local_vars' 154 # be written to the resulting file.
146 if append: 155 # Note that this assumes none of our dummy entries is 'KNOWN_TARGETS'.
147 filename += '_append' 156 known_targets_name = 'KNOWN_TARGETS'
148 else: 157 self.assertEqual(len(vars_dict[known_targets_name]), 1)
149 filename += '_no_append'
150 if name:
151 filename += '_' + name
152 else:
153 filename += '_no_name'
154 self.__compare_files(outfile, filename)
155 158
156 # KNOWN_TARGETS is always a part of the input VarsDict, but it should 159 with open(outfile, 'r') as f:
157 # not be written to the resulting file. 160 self.assertNotIn(known_targets_name, f.read())
158 # Note that this assumes none of our dummy entries is 'KNOWN_TARGETS'. 161 os.remove(outfile)
159 known_targets_name = 'KNOWN_TARGETS'
160 self.assertEqual(len(vars_dict[known_targets_name]), 1)
161
162 with open(outfile, 'r') as f:
163 self.assertNotIn(known_targets_name, f.read())
164 os.remove(outfile)
165 162
166 def test_write_android_mk(self): 163 def test_write_android_mk(self):
167 outdir = tempfile.mkdtemp() 164 outdir = tempfile.mkdtemp()
168 generate_dummy_makefile(outdir) 165 generate_dummy_makefile(outdir)
169 166
170 self.__compare_files(os.path.join(outdir, MAKEFILE_NAME), MAKEFILE_NAME, 167 utils.compare_to_expectation(os.path.join(outdir, MAKEFILE_NAME),
171 'If you\'ve modified makefile_writer.py, run ' + 168 MAKEFILE_NAME, self.assertTrue, REBASELINE_MSG)
172 '"makefile_writer_tests.py --rebaseline" ' +
173 'to rebaseline')
174 169
175 shutil.rmtree(outdir) 170 shutil.rmtree(outdir)
176 171
177 172
178 def main(): 173 def main():
179 loader = unittest.TestLoader() 174 loader = unittest.TestLoader()
180 suite = loader.loadTestsFromTestCase(MakefileWriterTest) 175 suite = loader.loadTestsFromTestCase(MakefileWriterTest)
181 results = unittest.TextTestRunner(verbosity=2).run(suite) 176 results = unittest.TextTestRunner(verbosity=2).run(suite)
182 print repr(results) 177 print repr(results)
183 if not results.wasSuccessful(): 178 if not results.wasSuccessful():
184 raise Exception('failed one or more unittests') 179 raise Exception('failed one or more unittests')
185 180
186 181
182 def rebaseline():
183 generate_dummy_makefile(utils.EXPECTATIONS_DIR)
184
185 vars_dict = generate_dummy_vars_dict(None)
186 for (filename, append, name) in generate_write_local_vars_params():
187 with open(os.path.join(utils.EXPECTATIONS_DIR, filename), 'w') as f:
188 makefile_writer.write_local_vars(f, vars_dict, append, name)
189
190
187 if __name__ == '__main__': 191 if __name__ == '__main__':
188 parser = argparse.ArgumentParser() 192 parser = argparse.ArgumentParser()
189 parser.add_argument('-r', '--rebaseline', 193 parser.add_argument('-r', '--rebaseline', help='Rebaseline expectations.',
190 help='Rebaseline expectation for Android.mk',
191 action='store_true') 194 action='store_true')
192 args = parser.parse_args() 195 args = parser.parse_args()
193 196
194 if args.rebaseline: 197 if args.rebaseline:
195 generate_dummy_makefile(EXPECTATIONS_DIR) 198 rebaseline()
196 else: 199 else:
197 main() 200 main()
198 201
OLDNEW
« no previous file with comments | « platform_tools/android/tests/inputs/SkUserConfig.h ('k') | platform_tools/android/tests/ordered_set_tests.py » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698