OLD | NEW |
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 """Unittest for the generate_stubs.py. | 6 """Unittest for the generate_stubs.py. |
7 | 7 |
8 Since generate_stubs.py is a code generator, it is hard to do a very good | 8 Since generate_stubs.py is a code generator, it is hard to do a very good |
9 test. Instead of creating a golden-file test, which might be flakey, this | 9 test. Instead of creating a golden-file test, which might be flakey, this |
10 test elects instead to verify that various components "exist" within the | 10 test elects instead to verify that various components "exist" within the |
(...skipping 147 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
158 '-c', 'print "line 1 and suffix\\nline 2"'], | 158 '-c', 'print "line 1 and suffix\\nline 2"'], |
159 filter='line 1', write_to=output) | 159 filter='line 1', write_to=output) |
160 self.assertEqual('line 2\n', output.getvalue()) | 160 self.assertEqual('line 2\n', output.getvalue()) |
161 | 161 |
162 | 162 |
163 class PosixStubWriterUnittest(unittest.TestCase): | 163 class PosixStubWriterUnittest(unittest.TestCase): |
164 def setUp(self): | 164 def setUp(self): |
165 self.module_name = 'my_module-1' | 165 self.module_name = 'my_module-1' |
166 self.signatures = [sig[1] for sig in SIMPLE_SIGNATURES] | 166 self.signatures = [sig[1] for sig in SIMPLE_SIGNATURES] |
167 self.out_dir = 'out_dir' | 167 self.out_dir = 'out_dir' |
168 self.writer = gs.PosixStubWriter(self.module_name, self.signatures) | 168 self.writer = gs.PosixStubWriter(self.module_name, '', self.signatures) |
169 | 169 |
170 def testEnumName(self): | 170 def testEnumName(self): |
171 self.assertEqual('kModuleMy_module1', | 171 self.assertEqual('kModuleMy_module1', |
172 gs.PosixStubWriter.EnumName(self.module_name)) | 172 gs.PosixStubWriter.EnumName(self.module_name)) |
173 | 173 |
174 def testIsInitializedName(self): | 174 def testIsInitializedName(self): |
175 self.assertEqual('IsMy_module1Initialized', | 175 self.assertEqual('IsMy_module1Initialized', |
176 gs.PosixStubWriter.IsInitializedName(self.module_name)) | 176 gs.PosixStubWriter.IsInitializedName(self.module_name)) |
177 | 177 |
178 def testInitializeModuleName(self): | 178 def testInitializeModuleName(self): |
179 self.assertEqual( | 179 self.assertEqual( |
180 'InitializeMy_module1', | 180 'InitializeMy_module1', |
181 gs.PosixStubWriter.InitializeModuleName(self.module_name)) | 181 gs.PosixStubWriter.InitializeModuleName(self.module_name)) |
182 | 182 |
183 def testUninitializeModuleName(self): | 183 def testUninitializeModuleName(self): |
184 self.assertEqual( | 184 self.assertEqual( |
185 'UninitializeMy_module1', | 185 'UninitializeMy_module1', |
186 gs.PosixStubWriter.UninitializeModuleName(self.module_name)) | 186 gs.PosixStubWriter.UninitializeModuleName(self.module_name)) |
187 | 187 |
188 def testStubFunctionPointer(self): | 188 def testStubFunctionPointer(self): |
189 self.assertEqual( | 189 self.assertEqual( |
190 'static int (*foo_ptr)(int a) = NULL;', | 190 'static int (*foo_ptr)(int a) = NULL;', |
191 gs.PosixStubWriter.StubFunctionPointer(SIMPLE_SIGNATURES[0][1])) | 191 gs.PosixStubWriter.StubFunctionPointer(SIMPLE_SIGNATURES[0][1])) |
192 | 192 |
193 def testStubFunction(self): | 193 def testStubFunction(self): |
194 # Test for a signature with a return value and a parameter. | 194 # Test for a signature with a return value and a parameter. |
195 self.assertEqual("""extern int foo(int a) __attribute__((weak)); | 195 self.assertEqual("""extern int foo(int a) __attribute__((weak)); |
196 int foo(int a) { | 196 int foo(int a) { |
197 return foo_ptr(a); | 197 return foo_ptr(a); |
198 }""", gs.PosixStubWriter.StubFunction(SIMPLE_SIGNATURES[0][1])) | 198 }""", gs.PosixStubWriter.StubFunction(SIMPLE_SIGNATURES[0][1])) |
199 | 199 |
200 # Test for a signature with a void return value and no parameters. | 200 # Test for a signature with a void return value and no parameters. |
201 self.assertEqual("""extern void waldo(void) __attribute__((weak)); | 201 self.assertEqual("""extern void waldo(void) __attribute__((weak)); |
202 void waldo(void) { | 202 void waldo(void) { |
203 waldo_ptr(); | 203 waldo_ptr(); |
204 }""", gs.PosixStubWriter.StubFunction(SIMPLE_SIGNATURES[4][1])) | 204 }""", gs.PosixStubWriter.StubFunction(SIMPLE_SIGNATURES[4][1])) |
205 | 205 |
| 206 # Test export macros. |
| 207 sig = _MakeSignature('int*', 'foo', ['bool b']) |
| 208 sig['export'] = 'TEST_EXPORT' |
| 209 self.assertEqual("""extern int* foo(bool b) __attribute__((weak)); |
| 210 int* TEST_EXPORT foo(bool b) { |
| 211 return foo_ptr(b); |
| 212 }""", gs.PosixStubWriter.StubFunction(sig)) |
| 213 |
206 def testWriteImplemenationContents(self): | 214 def testWriteImplemenationContents(self): |
207 outfile = StringIO.StringIO() | 215 outfile = StringIO.StringIO() |
208 self.writer.WriteImplementationContents('my_namespace', outfile) | 216 self.writer.WriteImplementationContents('my_namespace', outfile) |
209 contents = outfile.getvalue() | 217 contents = outfile.getvalue() |
210 | 218 |
211 # Verify namespace exists somewhere. | 219 # Verify namespace exists somewhere. |
212 self.assertTrue(contents.find('namespace my_namespace {') != -1) | 220 self.assertTrue(contents.find('namespace my_namespace {') != -1) |
213 | 221 |
214 # Verify that each signature has an _ptr and a function call in the file. | 222 # Verify that each signature has an _ptr and a function call in the file. |
215 # Check that the signatures were exported. | 223 # Check that the signatures were exported. |
(...skipping 76 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
292 msg='Expected "%s" in %s' % (decl, contents)) | 300 msg='Expected "%s" in %s' % (decl, contents)) |
293 decl = gs.PosixStubWriter.InitializeModuleName(name) | 301 decl = gs.PosixStubWriter.InitializeModuleName(name) |
294 self.assertTrue(contents.find(decl) != -1, | 302 self.assertTrue(contents.find(decl) != -1, |
295 msg='Expected "%s" in %s' % (decl, contents)) | 303 msg='Expected "%s" in %s' % (decl, contents)) |
296 decl = gs.PosixStubWriter.UninitializeModuleName(name) | 304 decl = gs.PosixStubWriter.UninitializeModuleName(name) |
297 self.assertTrue(contents.find(decl) != -1, | 305 self.assertTrue(contents.find(decl) != -1, |
298 msg='Expected "%s" in %s' % (decl, contents)) | 306 msg='Expected "%s" in %s' % (decl, contents)) |
299 | 307 |
300 if __name__ == '__main__': | 308 if __name__ == '__main__': |
301 unittest.main() | 309 unittest.main() |
OLD | NEW |