test_basic.py 14 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295
  1. #
  2. # Metrix++, Copyright 2009-2013, Metrix++ Project
  3. # Link: http://metrixplusplus.sourceforge.net
  4. #
  5. # This file is a part of Metrix++ Tool.
  6. #
  7. # Metrix++ is free software: you can redistribute it and/or modify
  8. # it under the terms of the GNU General Public License as published by
  9. # the Free Software Foundation, version 3 of the License.
  10. #
  11. # Metrix++ is distributed in the hope that it will be useful,
  12. # but WITHOUT ANY WARRANTY; without even the implied warranty of
  13. # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
  14. # GNU General Public License for more details.
  15. #
  16. # You should have received a copy of the GNU General Public License
  17. # along with Metrix++. If not, see <http://www.gnu.org/licenses/>.
  18. #
  19. import unittest
  20. import tests.common
  21. class Test(tests.common.TestCase):
  22. def test_workflow(self):
  23. # first collection
  24. runner = tests.common.ToolRunner('collect',
  25. ['--std.code.complexity.cyclomatic',
  26. '--std.code.lines.total',
  27. '--std.code.lines.code',
  28. '--std.code.lines.preprocessor',
  29. '--std.code.lines.comments',
  30. '--std.suppress',
  31. '--log-level=INFO'],
  32. check_stderr=[(0, -1)],
  33. save_prev=True)
  34. self.assertExec(runner.run())
  35. runner = tests.common.ToolRunner('view',
  36. ['--log-level=INFO', '--format=xml'],
  37. check_stderr=[(0, -1)])
  38. self.assertExec(runner.run())
  39. runner = tests.common.ToolRunner('limit',
  40. ['--log-level=INFO',
  41. '--max-limit=std.code.complexity:cyclomatic:0'],
  42. check_stderr=[(0, -1)],
  43. exit_code=8)
  44. self.assertExec(runner.run())
  45. runner = tests.common.ToolRunner('info',
  46. ['--log-level=INFO'],
  47. check_stderr=[(0, -1)],
  48. exit_code=0)
  49. self.assertExec(runner.run())
  50. # second collection
  51. runner = tests.common.ToolRunner('collect',
  52. ['--std.code.complexity.cyclomatic',
  53. '--std.code.lines.total',
  54. '--std.code.lines.code',
  55. '--std.code.lines.preprocessor',
  56. '--std.code.lines.comments',
  57. '--std.suppress',
  58. '--log-level=INFO'],
  59. check_stderr=[(0, -1)],
  60. prefix='second',
  61. cwd="sources_changed",
  62. use_prev=True)
  63. self.assertExec(runner.run())
  64. runner = tests.common.ToolRunner('view',
  65. ['--log-level=INFO', '--format=xml'],
  66. check_stderr=[(0, -1)],
  67. prefix='second',
  68. use_prev=True)
  69. self.assertExec(runner.run())
  70. runner = tests.common.ToolRunner('view',
  71. ['--log-level=INFO', '--format=xml'],
  72. check_stderr=[(0, -1)],
  73. prefix='second_per_file',
  74. dirs_list=['./simple.cpp'],
  75. use_prev=True)
  76. self.assertExec(runner.run())
  77. runner = tests.common.ToolRunner('view',
  78. ['--log-level=INFO', '--scope-mode=all'],
  79. check_stderr=[(0, -1)],
  80. prefix='second_txt_all',
  81. use_prev=True)
  82. self.assertExec(runner.run())
  83. runner = tests.common.ToolRunner('view',
  84. ['--log-level=INFO', '--scope-mode=all'],
  85. check_stderr=[(0, -1)],
  86. prefix='second_per_file_txt_all',
  87. dirs_list=['./simple.cpp'],
  88. use_prev=True)
  89. self.assertExec(runner.run())
  90. runner = tests.common.ToolRunner('view',
  91. ['--log-level=INFO', '--scope-mode=touched'],
  92. check_stderr=[(0, -1)],
  93. prefix='second_txt_touched',
  94. use_prev=True)
  95. self.assertExec(runner.run())
  96. runner = tests.common.ToolRunner('view',
  97. ['--log-level=INFO', '--scope-mode=touched'],
  98. check_stderr=[(0, -1)],
  99. prefix='second_per_file_txt_touched',
  100. dirs_list=['./simple.cpp'],
  101. use_prev=True)
  102. self.assertExec(runner.run())
  103. runner = tests.common.ToolRunner('view',
  104. ['--log-level=INFO', '--scope-mode=new'],
  105. check_stderr=[(0, -1)],
  106. prefix='second_txt_new',
  107. use_prev=True)
  108. self.assertExec(runner.run())
  109. runner = tests.common.ToolRunner('view',
  110. ['--log-level=INFO', '--scope-mode=new'],
  111. check_stderr=[(0, -1)],
  112. prefix='second_per_file_txt_new',
  113. dirs_list=['./simple.cpp'],
  114. use_prev=True)
  115. self.assertExec(runner.run())
  116. runner = tests.common.ToolRunner('limit',
  117. ['--log-level=INFO',
  118. '--max-limit=std.code.complexity:cyclomatic:0'],
  119. check_stderr=[(0, -1)],
  120. exit_code=6,
  121. prefix='second',
  122. use_prev=True)
  123. self.assertExec(runner.run())
  124. runner = tests.common.ToolRunner('limit',
  125. ['--log-level=INFO',
  126. '--max-limit=std.code.complexity:cyclomatic:0',
  127. '--warn-mode=all'],
  128. check_stderr=[(0, -1)],
  129. exit_code=6,
  130. prefix='second_warn_all',
  131. use_prev=True)
  132. self.assertExec(runner.run())
  133. runner = tests.common.ToolRunner('limit',
  134. ['--log-level=INFO',
  135. '--max-limit=std.code.complexity:cyclomatic:0',
  136. '--warn-mode=touched'],
  137. check_stderr=[(0, -1)],
  138. exit_code=4,
  139. prefix='second_warn_touched',
  140. use_prev=True)
  141. self.assertExec(runner.run())
  142. runner = tests.common.ToolRunner('limit',
  143. ['--log-level=INFO',
  144. '--max-limit=std.code.complexity:cyclomatic:0',
  145. '--warn-mode=trend'],
  146. check_stderr=[(0, -1)],
  147. exit_code=3,
  148. prefix='second_warn_trend',
  149. use_prev=True)
  150. self.assertExec(runner.run())
  151. runner = tests.common.ToolRunner('limit',
  152. ['--log-level=INFO',
  153. '--max-limit=std.code.complexity:cyclomatic:0',
  154. '--warn-mode=new'],
  155. check_stderr=[(0, -1)],
  156. exit_code=2,
  157. prefix='second_warn_new',
  158. use_prev=True)
  159. self.assertExec(runner.run())
  160. runner = tests.common.ToolRunner('info',
  161. ['--log-level=INFO'],
  162. check_stderr=[(0, -1)],
  163. prefix='second',
  164. use_prev=True)
  165. self.assertExec(runner.run())
  166. def test_help(self):
  167. runner = tests.common.ToolRunner('--help')
  168. self.assertExec(runner.run())
  169. runner = tests.common.ToolRunner('unknown', exit_code=2)
  170. self.assertExec(runner.run())
  171. runner = tests.common.ToolRunner('collect', ['--help'])
  172. self.assertExec(runner.run())
  173. runner = tests.common.ToolRunner('info', ['--help'])
  174. self.assertExec(runner.run())
  175. runner = tests.common.ToolRunner('view', ['--help'])
  176. self.assertExec(runner.run())
  177. runner = tests.common.ToolRunner('limit', ['--help'])
  178. self.assertExec(runner.run())
  179. #runner = tests.common.ToolRunner('export', ['--help'])
  180. #self.assertExec(runner.run())
  181. def test_view_format(self):
  182. # note: --scope-mode is tested in workflow test above
  183. runner = tests.common.ToolRunner('collect', ['--std.code.complexity.cyclomatic'], save_prev=True)
  184. self.assertExec(runner.run())
  185. runner = tests.common.ToolRunner('view', ['--format=txt'], prefix='txt')
  186. self.assertExec(runner.run())
  187. runner = tests.common.ToolRunner('view', ['--format=python'], prefix='python')
  188. self.assertExec(runner.run())
  189. runner = tests.common.ToolRunner('view', ['--format=xml'], prefix='xml')
  190. self.assertExec(runner.run())
  191. runner = tests.common.ToolRunner('collect',
  192. ['--std.code.complexity.cyclomatic'],
  193. prefix='nest',
  194. cwd="sources_changed",
  195. use_prev=True)
  196. self.assertExec(runner.run())
  197. runner = tests.common.ToolRunner('view',
  198. ['--nest-regions', '--format=xml'],
  199. prefix='nest',
  200. use_prev=True)
  201. self.assertExec(runner.run())
  202. runner = tests.common.ToolRunner('view',
  203. ['--nest-regions', '--format=xml'],
  204. prefix='nest_per_file',
  205. dirs_list=['./simple.cpp'],
  206. use_prev=True)
  207. self.assertExec(runner.run())
  208. def test_std_general_metrics(self):
  209. runner = tests.common.ToolRunner('collect',
  210. ['--std.general.size',
  211. '--std.general.procerrors',
  212. '--std.general.proctime'])
  213. self.assertExec(runner.run())
  214. runner = tests.common.ToolRunner('view', ['--format=txt'], prefix='txt')
  215. self.assertExec(runner.run())
  216. runner = tests.common.ToolRunner('view',
  217. ['--nest-regions', '--format=txt'],
  218. prefix='nest_per_file',
  219. dirs_list=['./simple.cpp'])
  220. self.assertExec(runner.run())
  221. def test_std_lines_metrics(self):
  222. runner = tests.common.ToolRunner('collect',
  223. ['--std.code.lines.code',
  224. '--std.code.lines.preprocessor',
  225. '--std.code.lines.comments',
  226. '--std.code.lines.total'])
  227. self.assertExec(runner.run())
  228. runner = tests.common.ToolRunner('view',
  229. ['--nest-regions', '--format=txt'],
  230. prefix='nest_per_file',
  231. dirs_list=['./simple.cpp'])
  232. self.assertExec(runner.run())
  233. runner = tests.common.ToolRunner('view', ['--format=txt'], prefix='txt')
  234. self.assertExec(runner.run())
  235. def test_debug_tool(self):
  236. runner = tests.common.ToolRunner('collect')
  237. self.assertExec(runner.run())
  238. runner = tests.common.ToolRunner('debug', dirs_list=['./simple.cpp'])
  239. self.assertExec(runner.run())
  240. if __name__ == '__main__':
  241. unittest.main()