PageRenderTime 16ms CodeModel.GetById 1ms RepoModel.GetById 0ms app.codeStats 0ms

/waf_tools/test_scwaf.py

https://code.google.com/p/quirkysoft/
Python | 192 lines | 185 code | 7 blank | 0 comment | 0 complexity | 2eee9b0208592e4ddfed2d6548373404 MD5 | raw file
Possible License(s): GPL-3.0
  1. import unittest
  2. import waftester
  3. import scwaf
  4. import Options
  5. from Build import BuildContext
  6. import Build
  7. class SCwafTest(unittest.TestCase):
  8. def testOptDecorator(self):
  9. @scwaf.option
  10. def foobar(opt):
  11. return 1
  12. self.assertTrue(Options.Handler.foobar)
  13. optionctx = Options.Handler()
  14. self.assertTrue(optionctx.foobar())
  15. def testBuildDecorator(self):
  16. @scwaf.build
  17. def foobar(bld):
  18. return 1
  19. self.assertTrue(BuildContext.foobar)
  20. bldctx = BuildContext()
  21. self.assertTrue(bldctx.foobar())
  22. def testCCStaticLib(self):
  23. features = scwaf.get_features('somefile.c other.c')
  24. self.assertEqual('cc', features)
  25. features = scwaf.get_features('somefile.cpp other.c')
  26. self.assertEqual('cxx', features)
  27. def CompilerOptions(opt):
  28. opt.tool_options('compiler_cxx')
  29. def CompilerConfigure(conf):
  30. conf.check_tool('compiler_cxx')
  31. def StaticLibBuild(bld):
  32. obj = bld.static_library('test', 'source')
  33. obj.include_directories('include')
  34. foo_h_data = """
  35. int in_foo_h();
  36. """
  37. foo_c_data = """
  38. #include "foo.h"
  39. int foo()
  40. {
  41. in_foo_h();
  42. return 1;
  43. }
  44. """
  45. main_cpp_data = """
  46. int main()
  47. {
  48. return 0;
  49. }
  50. """
  51. def StaticLibBuild2(bld):
  52. obj = bld.static_library('test', 'source')
  53. obj.include_directories('include', export=False)
  54. bar_c_data = """
  55. int bar()
  56. {
  57. return 1;
  58. }
  59. """
  60. baz_c_data = """
  61. int baz()
  62. {
  63. return 1;
  64. }
  65. """
  66. def StaticLibBuild3(bld):
  67. obj = bld.static_library('test', 'source')
  68. obj.source_directories('source2')
  69. def BuildWithArgs(bld):
  70. obj = bld.static_library('test', 'source',
  71. FOOFLAGS = 'foobar',
  72. install_path = '/opt/test')
  73. def BuildProgWithArgs(bld):
  74. bld.program('test', 'source')
  75. class SCwafTestFiles(waftester.WafTestCase):
  76. def testStaticLib(self):
  77. self.suite.write_wscript(options=CompilerOptions, configure=CompilerConfigure, build=StaticLibBuild)
  78. self.suite.subdir('source')
  79. self.suite.subdir('include')
  80. self.suite.write_data(foo_c_data, 'source/foo.cpp')
  81. self.suite.write_data(foo_h_data, 'include/foo.h')
  82. self.suite.run_waf()
  83. staticlib_PATTERN = Build.bld.env['staticlib_PATTERN']
  84. self.assertTrue(self.suite.exists(staticlib_PATTERN % 'test'))
  85. exports = Build.bld.all_task_gen[0].export_incdirs
  86. self.assertEquals(sorted(['include', 'source']), sorted(exports))
  87. def testExportInc(self):
  88. self.suite.write_wscript(options=CompilerOptions, configure=CompilerConfigure, build=StaticLibBuild2)
  89. self.suite.subdir('source')
  90. self.suite.subdir('include')
  91. self.suite.write_data(foo_c_data, 'source/foo.cpp')
  92. self.suite.write_data(foo_h_data, 'include/foo.h')
  93. self.suite.run_waf()
  94. staticlib_PATTERN = Build.bld.env['staticlib_PATTERN']
  95. self.assertTrue(self.suite.exists(staticlib_PATTERN % 'test'))
  96. exports = Build.bld.all_task_gen[0].export_incdirs
  97. self.assertEquals(['source'], exports)
  98. def testAddSourceDir(self):
  99. self.suite.write_wscript(options=CompilerOptions, configure=CompilerConfigure, build=StaticLibBuild3)
  100. self.suite.subdir('source')
  101. self.suite.subdir('source2')
  102. self.suite.write_data(bar_c_data, 'source/bar.cpp')
  103. self.suite.write_data(baz_c_data, 'source2/baz.cpp')
  104. self.suite.run_waf()
  105. staticlib_PATTERN = Build.bld.env['staticlib_PATTERN']
  106. self.assertTrue(self.suite.exists(staticlib_PATTERN % 'test'))
  107. exports = Build.bld.all_task_gen[0].export_incdirs
  108. self.assertEquals(sorted(['source', 'source2']), sorted(exports))
  109. def testStaticLibArgs(self):
  110. self.suite.write_wscript(options=CompilerOptions, configure=CompilerConfigure, build=BuildWithArgs)
  111. self.suite.subdir('source')
  112. self.suite.write_data(bar_c_data, 'source/bar.cpp')
  113. self.suite.run_waf()
  114. taskgen = Build.bld.all_task_gen[0]
  115. self.assertEqual('foobar', taskgen.env['FOOFLAGS'])
  116. self.assertEqual('/opt/test', taskgen.install_path)
  117. def testProgram(self):
  118. self.suite.write_wscript(options=CompilerOptions, configure=CompilerConfigure, build=BuildProgWithArgs)
  119. self.suite.subdir('source')
  120. self.suite.write_data(main_cpp_data, 'source/main.cpp')
  121. self.suite.run_waf()
  122. program_PATTERN = Build.bld.env['program_PATTERN']
  123. self.assertTrue(self.suite.exists(program_PATTERN % 'test'))
  124. class SCwafTestFunctions(unittest.TestCase):
  125. def testParseTaskGenArgs(self):
  126. args = {'foo':'foo_value',
  127. 'BAR12_V': 'bar_value'}
  128. env, attr = scwaf.parse_task_gen_args(args)
  129. self.assertEquals({'BAR12_V': 'bar_value'} , env)
  130. self.assertEquals({'foo': 'foo_value'} , attr)
  131. def testApplyEnv(self):
  132. env = {'BAR_123': 'bar_value', 'FOO_456':'foo_value'}
  133. class FakeTG:
  134. env = {}
  135. fake = FakeTG()
  136. scwaf.apply_env_values(fake, env)
  137. self.assertEquals('bar_value', fake.env['BAR_123'])
  138. self.assertEquals('foo_value', fake.env['FOO_456'])
  139. def VariantConf(conf):
  140. conf.addenv('debug')
  141. CompilerConfigure(conf)
  142. conf.setenv('debug')
  143. CompilerConfigure(conf)
  144. conf.addenv('another', is_copy=True)
  145. def DoNothing(bld):
  146. for env in sorted(bld.all_envs):
  147. bld.set_variant(env)
  148. lib = bld.static_library('test', '.')
  149. class SCwafTestConfig(waftester.WafTestCase):
  150. def testVariants(self):
  151. self.suite.write_wscript(options=CompilerOptions, configure=VariantConf, build=DoNothing)
  152. self.suite.write_data(bar_c_data, 'bar.cpp')
  153. self.suite.run_waf()
  154. self.assertTrue(self.suite.exists('bar_1.o', 'another'), "another bar.o")
  155. self.assertTrue(self.suite.exists('bar_2.o', 'debug'), "debug bar.o")
  156. self.assertTrue(self.suite.exists('bar_3.o'), "default bar.o")
  157. tasks = Build.bld.all_task_gen
  158. self.assertEqual('another', tasks[0].env.variant())
  159. self.assertEqual('debug', tasks[1].env.variant())
  160. self.assertEqual('default', tasks[2].env.variant())
  161. if __name__ == '__main__':
  162. unittest.main()