test_basic.py 20 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430
  1. #
  2. # Metrix++, Copyright 2009-2019, Metrix++ Project
  3. # Link: https://github.com/metrixplusplus/metrixplusplus
  4. #
  5. # This file is a part of Metrix++ Tool.
  6. #
  7. import unittest
  8. import tests.common
  9. class Test(tests.common.TestCase):
  10. def test_workflow(self):
  11. # first collection
  12. runner = tests.common.ToolRunner('collect',
  13. ['--std.code.complexity.cyclomatic',
  14. '--std.code.lines.total',
  15. '--std.code.lines.code',
  16. '--std.code.lines.preprocessor',
  17. '--std.code.lines.comments',
  18. '--std.code.ratio.comments',
  19. '--std.suppress',
  20. '--log-level=INFO'],
  21. check_stderr=[(0, -1)],
  22. save_prev=True)
  23. self.assertExec(runner.run())
  24. runner = tests.common.ToolRunner('view',
  25. ['--log-level=INFO', '--format=xml'],
  26. check_stderr=[(0, -1)])
  27. self.assertExec(runner.run())
  28. runner = tests.common.ToolRunner('limit',
  29. ['--log-level=INFO',
  30. '--max-limit=std.code.complexity:cyclomatic:0'],
  31. check_stderr=[(0, -1)],
  32. exit_code=8)
  33. self.assertExec(runner.run())
  34. runner = tests.common.ToolRunner('info',
  35. ['--log-level=INFO'],
  36. check_stderr=[(0, -1)],
  37. exit_code=0)
  38. self.assertExec(runner.run())
  39. runner = tests.common.ToolRunner('export',
  40. ['--log-level=INFO'],
  41. check_stderr=[(0, -1)])
  42. self.assertExec(runner.run())
  43. # second collection
  44. runner = tests.common.ToolRunner('collect',
  45. ['--std.code.complexity.cyclomatic',
  46. '--std.code.lines.total',
  47. '--std.code.lines.code',
  48. '--std.code.lines.preprocessor',
  49. '--std.code.lines.comments',
  50. '--std.code.ratio.comments',
  51. '--std.suppress',
  52. '--log-level=INFO'],
  53. check_stderr=[(0, -1)],
  54. prefix='second',
  55. cwd="sources_changed",
  56. use_prev=True)
  57. self.assertExec(runner.run())
  58. runner = tests.common.ToolRunner('view',
  59. ['--log-level=INFO', '--format=xml'],
  60. check_stderr=[(0, -1)],
  61. prefix='second',
  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_per_file',
  68. dirs_list=['./simple.cpp'],
  69. use_prev=True)
  70. self.assertExec(runner.run())
  71. runner = tests.common.ToolRunner('view',
  72. ['--log-level=INFO', '--scope-mode=all'],
  73. check_stderr=[(0, -1)],
  74. prefix='second_txt_all',
  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_per_file_txt_all',
  81. dirs_list=['./simple.cpp'],
  82. use_prev=True)
  83. self.assertExec(runner.run())
  84. runner = tests.common.ToolRunner('view',
  85. ['--log-level=INFO', '--scope-mode=touched'],
  86. check_stderr=[(0, -1)],
  87. prefix='second_txt_touched',
  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_per_file_txt_touched',
  94. dirs_list=['./simple.cpp'],
  95. use_prev=True)
  96. self.assertExec(runner.run())
  97. runner = tests.common.ToolRunner('view',
  98. ['--log-level=INFO', '--scope-mode=new'],
  99. check_stderr=[(0, -1)],
  100. prefix='second_txt_new',
  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_per_file_txt_new',
  107. dirs_list=['./simple.cpp'],
  108. use_prev=True)
  109. self.assertExec(runner.run())
  110. runner = tests.common.ToolRunner('limit',
  111. ['--log-level=INFO',
  112. '--max-limit=std.code.complexity:cyclomatic:0'],
  113. check_stderr=[(0, -1)],
  114. exit_code=6,
  115. prefix='second',
  116. use_prev=True)
  117. self.assertExec(runner.run())
  118. runner = tests.common.ToolRunner('limit',
  119. ['--log-level=INFO',
  120. '--max-limit=std.code.complexity:cyclomatic:0',
  121. '--warn-mode=all'],
  122. check_stderr=[(0, -1)],
  123. exit_code=6,
  124. prefix='second_warn_all',
  125. use_prev=True)
  126. self.assertExec(runner.run())
  127. runner = tests.common.ToolRunner('limit',
  128. ['--log-level=INFO',
  129. '--max-limit=std.code.complexity:cyclomatic:0',
  130. '--warn-mode=touched'],
  131. check_stderr=[(0, -1)],
  132. exit_code=4,
  133. prefix='second_warn_touched',
  134. use_prev=True)
  135. self.assertExec(runner.run())
  136. runner = tests.common.ToolRunner('limit',
  137. ['--log-level=INFO',
  138. '--max-limit=std.code.complexity:cyclomatic:0',
  139. '--warn-mode=trend'],
  140. check_stderr=[(0, -1)],
  141. exit_code=3,
  142. prefix='second_warn_trend',
  143. use_prev=True)
  144. self.assertExec(runner.run())
  145. runner = tests.common.ToolRunner('limit',
  146. ['--log-level=INFO',
  147. '--max-limit=std.code.complexity:cyclomatic:0',
  148. '--warn-mode=new'],
  149. check_stderr=[(0, -1)],
  150. exit_code=2,
  151. prefix='second_warn_new',
  152. use_prev=True)
  153. self.assertExec(runner.run())
  154. runner = tests.common.ToolRunner('info',
  155. ['--log-level=INFO'],
  156. check_stderr=[(0, -1)],
  157. prefix='second',
  158. use_prev=True)
  159. self.assertExec(runner.run())
  160. runner = tests.common.ToolRunner('export',
  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('view', ['--format=prometheus', '--log-level=ERROR'], prefix='prometheus')
  192. self.assertExec(runner.run())
  193. runner = tests.common.ToolRunner('view',
  194. ['--format=prometheus', '--log-level=ERROR'],
  195. prefix='prometheus_simple.cpp',
  196. dirs_list=['./simple.cpp'])
  197. self.assertExec(runner.run())
  198. runner = tests.common.ToolRunner('collect',
  199. ['--std.code.complexity.cyclomatic'],
  200. prefix='nest',
  201. cwd="sources_changed",
  202. use_prev=True)
  203. self.assertExec(runner.run())
  204. runner = tests.common.ToolRunner('view',
  205. ['--nest-regions', '--format=xml'],
  206. prefix='nest',
  207. use_prev=True)
  208. self.assertExec(runner.run())
  209. runner = tests.common.ToolRunner('view',
  210. ['--nest-regions', '--format=xml'],
  211. prefix='nest_per_file',
  212. dirs_list=['./simple.cpp'],
  213. use_prev=True)
  214. self.assertExec(runner.run())
  215. def test_report_format(self):
  216. runner = tests.common.ToolRunner('collect', ['--std.code.complexity.cyclomatic'], save_prev=True)
  217. self.assertExec(runner.run())
  218. runner = tests.common.ToolRunner('report',
  219. ['--format=txt', '--max-limit=std.code.complexity:cyclomatic:0'],
  220. prefix='txt')
  221. self.assertExec(runner.run())
  222. runner = tests.common.ToolRunner('report',
  223. ['--format=json', '--max-limit=std.code.complexity:cyclomatic:0'],
  224. prefix='json')
  225. self.assertExec(runner.run())
  226. runner = tests.common.ToolRunner('report',
  227. ['--format=doxygen', '--max-limit=std.code.complexity:cyclomatic:0'],
  228. prefix='dox')
  229. self.assertExec(runner.run())
  230. def test_std_general_metrics(self):
  231. runner = tests.common.ToolRunner('collect',
  232. ['--std.general.size',
  233. '--std.general.procerrors',
  234. '--std.general.proctime'])
  235. self.assertExec(runner.run())
  236. runner = tests.common.ToolRunner('view', ['--format=txt'], prefix='txt')
  237. self.assertExec(runner.run())
  238. runner = tests.common.ToolRunner('view',
  239. ['--nest-regions', '--format=txt'],
  240. prefix='nest_per_file',
  241. dirs_list=['./simple.cpp'])
  242. self.assertExec(runner.run())
  243. def test_std_lines_metrics(self):
  244. runner = tests.common.ToolRunner('collect',
  245. ['--std.code.lines.code',
  246. '--std.code.lines.preprocessor',
  247. '--std.code.lines.comments',
  248. '--std.code.ratio.comments',
  249. '--std.code.lines.total'])
  250. self.assertExec(runner.run())
  251. runner = tests.common.ToolRunner('view',
  252. ['--nest-regions', '--format=txt'],
  253. prefix='nest_per_file',
  254. dirs_list=['./simple.cpp'])
  255. self.assertExec(runner.run())
  256. runner = tests.common.ToolRunner('view', ['--format=txt'], prefix='txt')
  257. self.assertExec(runner.run())
  258. def test_std_filelines_metrics(self):
  259. runner = tests.common.ToolRunner('collect',
  260. ['--std.code.filelines.code',
  261. '--std.code.filelines.preprocessor',
  262. '--std.code.filelines.comments',
  263. '--std.code.filelines.total'])
  264. self.assertExec(runner.run())
  265. runner = tests.common.ToolRunner('view',
  266. ['--nest-regions', '--format=txt'],
  267. prefix='nest_per_file',
  268. dirs_list=['./simple.cpp'])
  269. self.assertExec(runner.run())
  270. runner = tests.common.ToolRunner('view', ['--format=txt'], prefix='txt')
  271. self.assertExec(runner.run())
  272. def test_std_longlines_metrics(self):
  273. runner = tests.common.ToolRunner('collect',
  274. ['--std.code.longlines',
  275. '--std.code.longlines.limit=50'])
  276. self.assertExec(runner.run())
  277. runner = tests.common.ToolRunner('view',
  278. ['--nest-regions', '--format=txt'],
  279. prefix='nest_per_file',
  280. dirs_list=['./simple.cpp'])
  281. self.assertExec(runner.run())
  282. runner = tests.common.ToolRunner('view', ['--format=txt'], prefix='txt')
  283. self.assertExec(runner.run())
  284. def test_std_complexity_maxindent(self):
  285. runner = tests.common.ToolRunner('collect',
  286. ['--std.code.complexity.maxindent'])
  287. self.assertExec(runner.run())
  288. runner = tests.common.ToolRunner('view',
  289. ['--nest-regions'],
  290. prefix='nest_per_file',
  291. dirs_list=['./simple.cpp'])
  292. self.assertExec(runner.run())
  293. runner = tests.common.ToolRunner('view')
  294. self.assertExec(runner.run())
  295. def test_std_code_magic(self):
  296. runner = tests.common.ToolRunner('collect',
  297. ['--std.code.magic.numbers'])
  298. self.assertExec(runner.run())
  299. runner = tests.common.ToolRunner('view',
  300. ['--nest-regions'],
  301. prefix='nest_per_file',
  302. dirs_list=['./simple.cpp'])
  303. self.assertExec(runner.run())
  304. runner = tests.common.ToolRunner('view')
  305. self.assertExec(runner.run())
  306. runner = tests.common.ToolRunner('collect',
  307. ['--std.code.magic.numbers', '--std.code.magic.numbers.simplier'],
  308. prefix='nozeros',)
  309. self.assertExec(runner.run())
  310. runner = tests.common.ToolRunner('view',
  311. ['--nest-regions'],
  312. prefix='nozeros_nest_per_file',
  313. dirs_list=['./simple.cpp'])
  314. self.assertExec(runner.run())
  315. runner = tests.common.ToolRunner('view', prefix='nozeros')
  316. self.assertExec(runner.run())
  317. def test_std_member_metrics(self):
  318. runner = tests.common.ToolRunner('collect',
  319. ['--std.code.member.fields',
  320. '--std.code.member.globals',
  321. '--std.code.member.classes',
  322. '--std.code.member.structs',
  323. '--std.code.member.interfaces',
  324. '--std.code.member.types',
  325. '--std.code.member.methods',
  326. '--std.code.member.namespaces'])
  327. self.assertExec(runner.run())
  328. runner = tests.common.ToolRunner('view',
  329. ['--nest-regions', '--format=txt'],
  330. prefix='nest_per_file',
  331. dirs_list=['./simple.cpp'])
  332. self.assertExec(runner.run())
  333. runner = tests.common.ToolRunner('view', ['--format=txt'], prefix='txt')
  334. self.assertExec(runner.run())
  335. def test_std_maintindex(self):
  336. runner = tests.common.ToolRunner('collect',
  337. ['--std.code.complexity.cyclomatic',
  338. '--std.code.lines.code',
  339. '--std.code.maintindex.simple',
  340. '--log-level=INFO'],
  341. check_stderr=[(0, -1)],
  342. save_prev=True)
  343. self.assertExec(runner.run())
  344. runner = tests.common.ToolRunner('view', ['--format=txt'], prefix='txt')
  345. self.assertExec(runner.run())
  346. if __name__ == '__main__':
  347. unittest.main()