test_basic.py 14 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293
  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. '--log-level=INFO'],
  31. check_stderr=[(0, -1)],
  32. save_prev=True)
  33. self.assertExec(runner.run())
  34. runner = tests.common.ToolRunner('view',
  35. ['--log-level=INFO', '--format=xml'],
  36. check_stderr=[(0, -1)])
  37. self.assertExec(runner.run())
  38. runner = tests.common.ToolRunner('limit',
  39. ['--log-level=INFO',
  40. '--max-limit=std.code.complexity:cyclomatic:0'],
  41. check_stderr=[(0, -1)],
  42. exit_code=8)
  43. self.assertExec(runner.run())
  44. runner = tests.common.ToolRunner('info',
  45. ['--log-level=INFO'],
  46. check_stderr=[(0, -1)],
  47. exit_code=0)
  48. self.assertExec(runner.run())
  49. # second collection
  50. runner = tests.common.ToolRunner('collect',
  51. ['--std.code.complexity.cyclomatic',
  52. '--std.code.lines.total',
  53. '--std.code.lines.code',
  54. '--std.code.lines.preprocessor',
  55. '--std.code.lines.comments',
  56. '--log-level=INFO'],
  57. check_stderr=[(0, -1)],
  58. prefix='second',
  59. cwd="sources_changed",
  60. use_prev=True)
  61. self.assertExec(runner.run())
  62. runner = tests.common.ToolRunner('view',
  63. ['--log-level=INFO', '--format=xml'],
  64. check_stderr=[(0, -1)],
  65. prefix='second',
  66. use_prev=True)
  67. self.assertExec(runner.run())
  68. runner = tests.common.ToolRunner('view',
  69. ['--log-level=INFO', '--format=xml'],
  70. check_stderr=[(0, -1)],
  71. prefix='second_per_file',
  72. dirs_list=['./simple.cpp'],
  73. use_prev=True)
  74. self.assertExec(runner.run())
  75. runner = tests.common.ToolRunner('view',
  76. ['--log-level=INFO', '--scope-mode=all'],
  77. check_stderr=[(0, -1)],
  78. prefix='second_txt_all',
  79. use_prev=True)
  80. self.assertExec(runner.run())
  81. runner = tests.common.ToolRunner('view',
  82. ['--log-level=INFO', '--scope-mode=all'],
  83. check_stderr=[(0, -1)],
  84. prefix='second_per_file_txt_all',
  85. dirs_list=['./simple.cpp'],
  86. use_prev=True)
  87. self.assertExec(runner.run())
  88. runner = tests.common.ToolRunner('view',
  89. ['--log-level=INFO', '--scope-mode=touched'],
  90. check_stderr=[(0, -1)],
  91. prefix='second_txt_touched',
  92. use_prev=True)
  93. self.assertExec(runner.run())
  94. runner = tests.common.ToolRunner('view',
  95. ['--log-level=INFO', '--scope-mode=touched'],
  96. check_stderr=[(0, -1)],
  97. prefix='second_per_file_txt_touched',
  98. dirs_list=['./simple.cpp'],
  99. use_prev=True)
  100. self.assertExec(runner.run())
  101. runner = tests.common.ToolRunner('view',
  102. ['--log-level=INFO', '--scope-mode=new'],
  103. check_stderr=[(0, -1)],
  104. prefix='second_txt_new',
  105. use_prev=True)
  106. self.assertExec(runner.run())
  107. runner = tests.common.ToolRunner('view',
  108. ['--log-level=INFO', '--scope-mode=new'],
  109. check_stderr=[(0, -1)],
  110. prefix='second_per_file_txt_new',
  111. dirs_list=['./simple.cpp'],
  112. use_prev=True)
  113. self.assertExec(runner.run())
  114. runner = tests.common.ToolRunner('limit',
  115. ['--log-level=INFO',
  116. '--max-limit=std.code.complexity:cyclomatic:0'],
  117. check_stderr=[(0, -1)],
  118. exit_code=6,
  119. prefix='second',
  120. use_prev=True)
  121. self.assertExec(runner.run())
  122. runner = tests.common.ToolRunner('limit',
  123. ['--log-level=INFO',
  124. '--max-limit=std.code.complexity:cyclomatic:0',
  125. '--warn-mode=all'],
  126. check_stderr=[(0, -1)],
  127. exit_code=6,
  128. prefix='second_warn_all',
  129. use_prev=True)
  130. self.assertExec(runner.run())
  131. runner = tests.common.ToolRunner('limit',
  132. ['--log-level=INFO',
  133. '--max-limit=std.code.complexity:cyclomatic:0',
  134. '--warn-mode=touched'],
  135. check_stderr=[(0, -1)],
  136. exit_code=4,
  137. prefix='second_warn_touched',
  138. use_prev=True)
  139. self.assertExec(runner.run())
  140. runner = tests.common.ToolRunner('limit',
  141. ['--log-level=INFO',
  142. '--max-limit=std.code.complexity:cyclomatic:0',
  143. '--warn-mode=trend'],
  144. check_stderr=[(0, -1)],
  145. exit_code=3,
  146. prefix='second_warn_trend',
  147. use_prev=True)
  148. self.assertExec(runner.run())
  149. runner = tests.common.ToolRunner('limit',
  150. ['--log-level=INFO',
  151. '--max-limit=std.code.complexity:cyclomatic:0',
  152. '--warn-mode=new'],
  153. check_stderr=[(0, -1)],
  154. exit_code=2,
  155. prefix='second_warn_new',
  156. use_prev=True)
  157. self.assertExec(runner.run())
  158. runner = tests.common.ToolRunner('info',
  159. ['--log-level=INFO'],
  160. check_stderr=[(0, -1)],
  161. prefix='second',
  162. use_prev=True)
  163. self.assertExec(runner.run())
  164. def test_help(self):
  165. runner = tests.common.ToolRunner('--help')
  166. self.assertExec(runner.run())
  167. runner = tests.common.ToolRunner('unknown', exit_code=2)
  168. self.assertExec(runner.run())
  169. runner = tests.common.ToolRunner('collect', ['--help'])
  170. self.assertExec(runner.run())
  171. runner = tests.common.ToolRunner('info', ['--help'])
  172. self.assertExec(runner.run())
  173. runner = tests.common.ToolRunner('view', ['--help'])
  174. self.assertExec(runner.run())
  175. runner = tests.common.ToolRunner('limit', ['--help'])
  176. self.assertExec(runner.run())
  177. #runner = tests.common.ToolRunner('export', ['--help'])
  178. #self.assertExec(runner.run())
  179. def test_view_format(self):
  180. # note: --scope-mode is tested in workflow test above
  181. runner = tests.common.ToolRunner('collect', ['--std.code.complexity.cyclomatic'], save_prev=True)
  182. self.assertExec(runner.run())
  183. runner = tests.common.ToolRunner('view', ['--format=txt'], prefix='txt')
  184. self.assertExec(runner.run())
  185. runner = tests.common.ToolRunner('view', ['--format=python'], prefix='python')
  186. self.assertExec(runner.run())
  187. runner = tests.common.ToolRunner('view', ['--format=xml'], prefix='xml')
  188. self.assertExec(runner.run())
  189. runner = tests.common.ToolRunner('collect',
  190. ['--std.code.complexity.cyclomatic'],
  191. prefix='nest',
  192. cwd="sources_changed",
  193. use_prev=True)
  194. self.assertExec(runner.run())
  195. runner = tests.common.ToolRunner('view',
  196. ['--nest-regions', '--format=xml'],
  197. prefix='nest',
  198. use_prev=True)
  199. self.assertExec(runner.run())
  200. runner = tests.common.ToolRunner('view',
  201. ['--nest-regions', '--format=xml'],
  202. prefix='nest_per_file',
  203. dirs_list=['./simple.cpp'],
  204. use_prev=True)
  205. self.assertExec(runner.run())
  206. def test_std_general_metrics(self):
  207. runner = tests.common.ToolRunner('collect',
  208. ['--std.general.size',
  209. '--std.general.procerrors',
  210. '--std.general.proctime'])
  211. self.assertExec(runner.run())
  212. runner = tests.common.ToolRunner('view', ['--format=txt'], prefix='txt')
  213. self.assertExec(runner.run())
  214. runner = tests.common.ToolRunner('view',
  215. ['--nest-regions', '--format=txt'],
  216. prefix='nest_per_file',
  217. dirs_list=['./simple.cpp'])
  218. self.assertExec(runner.run())
  219. def test_std_lines_metrics(self):
  220. runner = tests.common.ToolRunner('collect',
  221. ['--std.code.lines.code',
  222. '--std.code.lines.preprocessor',
  223. '--std.code.lines.comments',
  224. '--std.code.lines.total'])
  225. self.assertExec(runner.run())
  226. runner = tests.common.ToolRunner('view',
  227. ['--nest-regions', '--format=txt'],
  228. prefix='nest_per_file',
  229. dirs_list=['./simple.cpp'])
  230. self.assertExec(runner.run())
  231. runner = tests.common.ToolRunner('view', ['--format=txt'], prefix='txt')
  232. self.assertExec(runner.run())
  233. def test_debug_tool(self):
  234. runner = tests.common.ToolRunner('collect')
  235. self.assertExec(runner.run())
  236. runner = tests.common.ToolRunner('debug', dirs_list=['./simple.cpp'])
  237. self.assertExec(runner.run())
  238. if __name__ == '__main__':
  239. unittest.main()