mutest 0.0.1 → 0.0.2

Sign up to get free protection for your applications and to get access to all the features.
Files changed (401) hide show
  1. checksums.yaml +4 -4
  2. data/.buildkite/hooks/pre-command +3 -0
  3. data/.buildkite/pipeline.yml +51 -0
  4. data/.gitattributes +1 -0
  5. data/.gitignore +38 -0
  6. data/.rspec +5 -0
  7. data/Gemfile +13 -0
  8. data/Gemfile.lock +216 -0
  9. data/Gemfile.shared +3 -0
  10. data/LICENSE +21 -0
  11. data/README.md +8 -0
  12. data/Rakefile +24 -0
  13. data/bin/mutest +39 -0
  14. data/build/Dockerfile +71 -0
  15. data/build/docker-bootstrap.sh +85 -0
  16. data/build/docker-exec +29 -0
  17. data/build/make-docker +3 -0
  18. data/build/ruby_matrix +1 -0
  19. data/build/run +5 -0
  20. data/build/strict-mode.sh +16 -0
  21. data/circle.yml +7 -0
  22. data/config/devtools.yml +2 -0
  23. data/config/flay.yml +3 -0
  24. data/config/flog.yml +2 -0
  25. data/config/reek.yml +137 -0
  26. data/config/rubocop.yml +395 -0
  27. data/config/triage.yml +2 -0
  28. data/config/yardstick.yml +2 -0
  29. data/lib/mutest.rb +243 -0
  30. data/lib/mutest/actor.rb +52 -0
  31. data/lib/mutest/actor/env.rb +28 -0
  32. data/lib/mutest/actor/mailbox.rb +31 -0
  33. data/lib/mutest/actor/receiver.rb +39 -0
  34. data/lib/mutest/actor/sender.rb +22 -0
  35. data/lib/mutest/ast.rb +44 -0
  36. data/lib/mutest/ast/meta.rb +7 -0
  37. data/lib/mutest/ast/meta/const.rb +22 -0
  38. data/lib/mutest/ast/meta/optarg.rb +24 -0
  39. data/lib/mutest/ast/meta/resbody.rb +15 -0
  40. data/lib/mutest/ast/meta/restarg.rb +15 -0
  41. data/lib/mutest/ast/meta/send.rb +89 -0
  42. data/lib/mutest/ast/meta/symbol.rb +15 -0
  43. data/lib/mutest/ast/named_children.rb +86 -0
  44. data/lib/mutest/ast/node_predicates.rb +17 -0
  45. data/lib/mutest/ast/nodes.rb +22 -0
  46. data/lib/mutest/ast/regexp.rb +50 -0
  47. data/lib/mutest/ast/regexp/transformer.rb +184 -0
  48. data/lib/mutest/ast/regexp/transformer/alternative.rb +39 -0
  49. data/lib/mutest/ast/regexp/transformer/character_set.rb +46 -0
  50. data/lib/mutest/ast/regexp/transformer/direct.rb +101 -0
  51. data/lib/mutest/ast/regexp/transformer/options_group.rb +65 -0
  52. data/lib/mutest/ast/regexp/transformer/quantifier.rb +112 -0
  53. data/lib/mutest/ast/regexp/transformer/recursive.rb +50 -0
  54. data/lib/mutest/ast/regexp/transformer/root.rb +28 -0
  55. data/lib/mutest/ast/regexp/transformer/text.rb +55 -0
  56. data/lib/mutest/ast/sexp.rb +26 -0
  57. data/lib/mutest/ast/types.rb +140 -0
  58. data/lib/mutest/cli.rb +196 -0
  59. data/lib/mutest/color.rb +39 -0
  60. data/lib/mutest/config.rb +28 -0
  61. data/lib/mutest/context.rb +98 -0
  62. data/lib/mutest/diff.rb +111 -0
  63. data/lib/mutest/env.rb +59 -0
  64. data/lib/mutest/env/bootstrap.rb +159 -0
  65. data/lib/mutest/expression.rb +55 -0
  66. data/lib/mutest/expression/method.rb +54 -0
  67. data/lib/mutest/expression/methods.rb +58 -0
  68. data/lib/mutest/expression/namespace.rb +75 -0
  69. data/lib/mutest/expression/parser.rb +64 -0
  70. data/lib/mutest/integration.rb +75 -0
  71. data/lib/mutest/isolation.rb +11 -0
  72. data/lib/mutest/isolation/fork.rb +72 -0
  73. data/lib/mutest/isolation/none.rb +23 -0
  74. data/lib/mutest/loader.rb +27 -0
  75. data/lib/mutest/matcher.rb +14 -0
  76. data/lib/mutest/matcher/chain.rb +19 -0
  77. data/lib/mutest/matcher/compiler.rb +55 -0
  78. data/lib/mutest/matcher/config.rb +81 -0
  79. data/lib/mutest/matcher/filter.rb +19 -0
  80. data/lib/mutest/matcher/method.rb +138 -0
  81. data/lib/mutest/matcher/method/instance.rb +63 -0
  82. data/lib/mutest/matcher/method/singleton.rb +88 -0
  83. data/lib/mutest/matcher/methods.rb +109 -0
  84. data/lib/mutest/matcher/namespace.rb +41 -0
  85. data/lib/mutest/matcher/null.rb +17 -0
  86. data/lib/mutest/matcher/scope.rb +38 -0
  87. data/lib/mutest/matcher/static.rb +15 -0
  88. data/lib/mutest/meta.rb +33 -0
  89. data/lib/mutest/meta/example.rb +32 -0
  90. data/lib/mutest/meta/example/dsl.rb +107 -0
  91. data/lib/mutest/meta/example/verification.rb +85 -0
  92. data/lib/mutest/mutation.rb +101 -0
  93. data/lib/mutest/mutator.rb +117 -0
  94. data/lib/mutest/mutator/node.rb +166 -0
  95. data/lib/mutest/mutator/node/and_asgn.rb +25 -0
  96. data/lib/mutest/mutator/node/argument.rb +68 -0
  97. data/lib/mutest/mutator/node/arguments.rb +90 -0
  98. data/lib/mutest/mutator/node/begin.rb +21 -0
  99. data/lib/mutest/mutator/node/binary.rb +64 -0
  100. data/lib/mutest/mutator/node/block.rb +51 -0
  101. data/lib/mutest/mutator/node/break.rb +21 -0
  102. data/lib/mutest/mutator/node/case.rb +47 -0
  103. data/lib/mutest/mutator/node/class.rb +21 -0
  104. data/lib/mutest/mutator/node/conditional_loop.rb +25 -0
  105. data/lib/mutest/mutator/node/const.rb +23 -0
  106. data/lib/mutest/mutator/node/define.rb +79 -0
  107. data/lib/mutest/mutator/node/defined.rb +24 -0
  108. data/lib/mutest/mutator/node/dstr.rb +20 -0
  109. data/lib/mutest/mutator/node/dsym.rb +20 -0
  110. data/lib/mutest/mutator/node/generic.rb +77 -0
  111. data/lib/mutest/mutator/node/if.rb +57 -0
  112. data/lib/mutest/mutator/node/kwbegin.rb +20 -0
  113. data/lib/mutest/mutator/node/literal.rb +19 -0
  114. data/lib/mutest/mutator/node/literal/array.rb +37 -0
  115. data/lib/mutest/mutator/node/literal/boolean.rb +27 -0
  116. data/lib/mutest/mutator/node/literal/fixnum.rb +36 -0
  117. data/lib/mutest/mutator/node/literal/float.rb +45 -0
  118. data/lib/mutest/mutator/node/literal/hash.rb +52 -0
  119. data/lib/mutest/mutator/node/literal/nil.rb +20 -0
  120. data/lib/mutest/mutator/node/literal/range.rb +38 -0
  121. data/lib/mutest/mutator/node/literal/regex.rb +76 -0
  122. data/lib/mutest/mutator/node/literal/string.rb +21 -0
  123. data/lib/mutest/mutator/node/literal/symbol.rb +26 -0
  124. data/lib/mutest/mutator/node/masgn.rb +21 -0
  125. data/lib/mutest/mutator/node/match_current_line.rb +22 -0
  126. data/lib/mutest/mutator/node/mlhs.rb +21 -0
  127. data/lib/mutest/mutator/node/named_value/access.rb +54 -0
  128. data/lib/mutest/mutator/node/named_value/constant_assignment.rb +42 -0
  129. data/lib/mutest/mutator/node/named_value/variable_assignment.rb +47 -0
  130. data/lib/mutest/mutator/node/next.rb +22 -0
  131. data/lib/mutest/mutator/node/noop.rb +19 -0
  132. data/lib/mutest/mutator/node/nthref.rb +22 -0
  133. data/lib/mutest/mutator/node/op_asgn.rb +50 -0
  134. data/lib/mutest/mutator/node/or_asgn.rb +26 -0
  135. data/lib/mutest/mutator/node/regexp.rb +33 -0
  136. data/lib/mutest/mutator/node/regexp/alternation_meta.rb +21 -0
  137. data/lib/mutest/mutator/node/regexp/capture_group.rb +26 -0
  138. data/lib/mutest/mutator/node/regexp/character_type.rb +29 -0
  139. data/lib/mutest/mutator/node/regexp/end_of_line_anchor.rb +21 -0
  140. data/lib/mutest/mutator/node/regexp/end_of_string_or_before_end_of_line_anchor.rb +21 -0
  141. data/lib/mutest/mutator/node/regexp/one_or_more.rb +29 -0
  142. data/lib/mutest/mutator/node/regexp/zero_or_more.rb +29 -0
  143. data/lib/mutest/mutator/node/regopt.rb +28 -0
  144. data/lib/mutest/mutator/node/resbody.rb +34 -0
  145. data/lib/mutest/mutator/node/rescue.rb +69 -0
  146. data/lib/mutest/mutator/node/return.rb +24 -0
  147. data/lib/mutest/mutator/node/send.rb +270 -0
  148. data/lib/mutest/mutator/node/send/attribute_assignment.rb +39 -0
  149. data/lib/mutest/mutator/node/send/binary.rb +45 -0
  150. data/lib/mutest/mutator/node/send/conditional.rb +21 -0
  151. data/lib/mutest/mutator/node/send/index.rb +47 -0
  152. data/lib/mutest/mutator/node/splat.rb +23 -0
  153. data/lib/mutest/mutator/node/super.rb +24 -0
  154. data/lib/mutest/mutator/node/when.rb +60 -0
  155. data/lib/mutest/mutator/node/yield.rb +21 -0
  156. data/lib/mutest/mutator/node/zsuper.rb +20 -0
  157. data/lib/mutest/mutator/util.rb +11 -0
  158. data/lib/mutest/mutator/util/array.rb +42 -0
  159. data/lib/mutest/mutator/util/symbol.rb +19 -0
  160. data/lib/mutest/parallel.rb +89 -0
  161. data/lib/mutest/parallel/master.rb +181 -0
  162. data/lib/mutest/parallel/source.rb +57 -0
  163. data/lib/mutest/parallel/worker.rb +76 -0
  164. data/lib/mutest/parser.rb +22 -0
  165. data/lib/mutest/registry.rb +43 -0
  166. data/lib/mutest/reporter.rb +39 -0
  167. data/lib/mutest/reporter/cli.rb +87 -0
  168. data/lib/mutest/reporter/cli/format.rb +135 -0
  169. data/lib/mutest/reporter/cli/printer.rb +124 -0
  170. data/lib/mutest/reporter/cli/printer/config.rb +24 -0
  171. data/lib/mutest/reporter/cli/printer/env_progress.rb +76 -0
  172. data/lib/mutest/reporter/cli/printer/env_result.rb +20 -0
  173. data/lib/mutest/reporter/cli/printer/mutation_progress_result.rb +31 -0
  174. data/lib/mutest/reporter/cli/printer/mutation_result.rb +127 -0
  175. data/lib/mutest/reporter/cli/printer/status.rb +49 -0
  176. data/lib/mutest/reporter/cli/printer/status_progressive.rb +46 -0
  177. data/lib/mutest/reporter/cli/printer/subject_progress.rb +65 -0
  178. data/lib/mutest/reporter/cli/printer/subject_result.rb +23 -0
  179. data/lib/mutest/reporter/cli/printer/test_result.rb +28 -0
  180. data/lib/mutest/reporter/cli/tput.rb +43 -0
  181. data/lib/mutest/reporter/null.rb +14 -0
  182. data/lib/mutest/reporter/sequence.rb +24 -0
  183. data/lib/mutest/repository.rb +80 -0
  184. data/lib/mutest/require_highjack.rb +24 -0
  185. data/lib/mutest/result.rb +212 -0
  186. data/lib/mutest/runner.rb +81 -0
  187. data/lib/mutest/runner/sink.rb +63 -0
  188. data/lib/mutest/scope.rb +6 -0
  189. data/lib/mutest/selector.rb +13 -0
  190. data/lib/mutest/selector/expression.rb +25 -0
  191. data/lib/mutest/source_file.rb +47 -0
  192. data/lib/mutest/subject.rb +94 -0
  193. data/lib/mutest/subject/method.rb +42 -0
  194. data/lib/mutest/subject/method/instance.rb +43 -0
  195. data/lib/mutest/subject/method/singleton.rb +19 -0
  196. data/lib/mutest/test.rb +14 -0
  197. data/lib/mutest/util.rb +18 -0
  198. data/lib/mutest/version.rb +4 -0
  199. data/lib/mutest/warning_filter.rb +58 -0
  200. data/lib/mutest/zombifier.rb +119 -0
  201. data/meta/and.rb +13 -0
  202. data/meta/and_asgn.rb +12 -0
  203. data/meta/array.rb +28 -0
  204. data/meta/begin.rb +19 -0
  205. data/meta/block.rb +104 -0
  206. data/meta/block_pass.rb +6 -0
  207. data/meta/blockarg.rb +8 -0
  208. data/meta/break.rb +8 -0
  209. data/meta/case.rb +221 -0
  210. data/meta/casgn.rb +26 -0
  211. data/meta/cbase.rb +6 -0
  212. data/meta/class.rb +10 -0
  213. data/meta/const.rb +15 -0
  214. data/meta/csend.rb +8 -0
  215. data/meta/cvar.rb +5 -0
  216. data/meta/cvasgn.rb +8 -0
  217. data/meta/date.rb +57 -0
  218. data/meta/def.rb +260 -0
  219. data/meta/defined.rb +7 -0
  220. data/meta/dstr.rb +11 -0
  221. data/meta/dsym.rb +12 -0
  222. data/meta/ensure.rb +7 -0
  223. data/meta/false.rb +6 -0
  224. data/meta/float.rb +35 -0
  225. data/meta/gvar.rb +5 -0
  226. data/meta/gvasgn.rb +8 -0
  227. data/meta/hash.rb +22 -0
  228. data/meta/if.rb +75 -0
  229. data/meta/int.rb +16 -0
  230. data/meta/ivar.rb +6 -0
  231. data/meta/ivasgn.rb +21 -0
  232. data/meta/kwarg.rb +8 -0
  233. data/meta/kwbegin.rb +7 -0
  234. data/meta/kwoptarg.rb +11 -0
  235. data/meta/kwrestarg.rb +17 -0
  236. data/meta/lvar.rb +14 -0
  237. data/meta/lvasgn.rb +8 -0
  238. data/meta/masgn.rb +5 -0
  239. data/meta/match_current_line.rb +13 -0
  240. data/meta/next.rb +9 -0
  241. data/meta/nil.rb +3 -0
  242. data/meta/nthref.rb +12 -0
  243. data/meta/op_assgn.rb +39 -0
  244. data/meta/or.rb +13 -0
  245. data/meta/or_asgn.rb +48 -0
  246. data/meta/range.rb +37 -0
  247. data/meta/redo.rb +3 -0
  248. data/meta/regexp.rb +84 -0
  249. data/meta/regexp/character_types.rb +20 -0
  250. data/meta/regexp/regexp_alternation_meta.rb +11 -0
  251. data/meta/regexp/regexp_bol_anchor.rb +8 -0
  252. data/meta/regexp/regexp_bos_anchor.rb +16 -0
  253. data/meta/regexp/regexp_capture_group.rb +17 -0
  254. data/meta/regexp/regexp_eol_anchor.rb +8 -0
  255. data/meta/regexp/regexp_eos_anchor.rb +6 -0
  256. data/meta/regexp/regexp_eos_ob_eol_anchor.rb +8 -0
  257. data/meta/regexp/regexp_one_or_more.rb +32 -0
  258. data/meta/regexp/regexp_root_expression.rb +8 -0
  259. data/meta/regexp/regexp_zero_or_more.rb +32 -0
  260. data/meta/regopt.rb +8 -0
  261. data/meta/rescue.rb +87 -0
  262. data/meta/restarg.rb +9 -0
  263. data/meta/return.rb +14 -0
  264. data/meta/self.rb +5 -0
  265. data/meta/send.rb +849 -0
  266. data/meta/str.rb +5 -0
  267. data/meta/super.rb +25 -0
  268. data/meta/sym.rb +6 -0
  269. data/meta/true.rb +6 -0
  270. data/meta/until.rb +15 -0
  271. data/meta/while.rb +24 -0
  272. data/meta/yield.rb +8 -0
  273. data/mutest-rspec.gemspec +22 -0
  274. data/mutest.gemspec +45 -0
  275. data/spec/integration/mutest/corpus_spec.rb +18 -0
  276. data/spec/integration/mutest/isolation/fork_spec.rb +8 -0
  277. data/spec/integration/mutest/null_spec.rb +13 -0
  278. data/spec/integration/mutest/rspec_spec.rb +11 -0
  279. data/spec/integration/mutest/test_mutator_handles_types_spec.rb +7 -0
  280. data/spec/integrations.yml +32 -0
  281. data/spec/rcov.opts +7 -0
  282. data/spec/shared/framework_integration_behavior.rb +44 -0
  283. data/spec/shared/method_matcher_behavior.rb +49 -0
  284. data/spec/spec_helper.rb +70 -0
  285. data/spec/support/compress_helper.rb +9 -0
  286. data/spec/support/corpus.rb +331 -0
  287. data/spec/support/fake_actor.rb +107 -0
  288. data/spec/support/file_system.rb +60 -0
  289. data/spec/support/ice_nine_config.rb +8 -0
  290. data/spec/support/rb_bug.rb +15 -0
  291. data/spec/support/ruby_vm.rb +82 -0
  292. data/spec/support/shared_context.rb +125 -0
  293. data/spec/support/test_app.rb +5 -0
  294. data/spec/support/warning.rb +73 -0
  295. data/spec/support/warnings.yml +5 -0
  296. data/spec/support/xspec.rb +175 -0
  297. data/spec/unit/mutest/actor/binding_spec.rb +32 -0
  298. data/spec/unit/mutest/actor/env_spec.rb +29 -0
  299. data/spec/unit/mutest/actor/mailbox_spec.rb +25 -0
  300. data/spec/unit/mutest/actor/message_spec.rb +22 -0
  301. data/spec/unit/mutest/actor/receiver_spec.rb +56 -0
  302. data/spec/unit/mutest/actor/sender_spec.rb +22 -0
  303. data/spec/unit/mutest/ast/meta/optarg_spec.rb +21 -0
  304. data/spec/unit/mutest/ast/meta/send/proc_predicate_spec.rb +28 -0
  305. data/spec/unit/mutest/ast/meta/send/receiver_possible_top_level_const_predicate_spec.rb +37 -0
  306. data/spec/unit/mutest/ast/meta/send_spec.rb +42 -0
  307. data/spec/unit/mutest/ast/named_children_spec.rb +87 -0
  308. data/spec/unit/mutest/ast/regexp/parse_spec.rb +5 -0
  309. data/spec/unit/mutest/ast/regexp/supported_predicate_spec.rb +14 -0
  310. data/spec/unit/mutest/ast/regexp/transformer/lookup_table/table_spec.rb +19 -0
  311. data/spec/unit/mutest/ast/regexp/transformer/lookup_table_spec.rb +33 -0
  312. data/spec/unit/mutest/ast/regexp/transformer_spec.rb +19 -0
  313. data/spec/unit/mutest/ast/regexp_spec.rb +625 -0
  314. data/spec/unit/mutest/ast/sexp_spec.rb +36 -0
  315. data/spec/unit/mutest/ast_spec.rb +55 -0
  316. data/spec/unit/mutest/cli_spec.rb +247 -0
  317. data/spec/unit/mutest/context_spec.rb +141 -0
  318. data/spec/unit/mutest/diff_spec.rb +185 -0
  319. data/spec/unit/mutest/env/bootstrap_spec.rb +188 -0
  320. data/spec/unit/mutest/env_spec.rb +100 -0
  321. data/spec/unit/mutest/expression/method_spec.rb +44 -0
  322. data/spec/unit/mutest/expression/methods_spec.rb +59 -0
  323. data/spec/unit/mutest/expression/namespace/exact_spec.rb +26 -0
  324. data/spec/unit/mutest/expression/namespace/recursive_spec.rb +64 -0
  325. data/spec/unit/mutest/expression/parser_spec.rb +67 -0
  326. data/spec/unit/mutest/expression_spec.rb +45 -0
  327. data/spec/unit/mutest/integration/null_spec.rb +28 -0
  328. data/spec/unit/mutest/integration/rspec_spec.rb +197 -0
  329. data/spec/unit/mutest/integration_spec.rb +26 -0
  330. data/spec/unit/mutest/isolation/fork_spec.rb +155 -0
  331. data/spec/unit/mutest/isolation/none_spec.rb +16 -0
  332. data/spec/unit/mutest/loader_spec.rb +42 -0
  333. data/spec/unit/mutest/matcher/chain_spec.rb +24 -0
  334. data/spec/unit/mutest/matcher/compiler/subject_prefix_spec.rb +24 -0
  335. data/spec/unit/mutest/matcher/compiler_spec.rb +76 -0
  336. data/spec/unit/mutest/matcher/config_spec.rb +45 -0
  337. data/spec/unit/mutest/matcher/filter_spec.rb +20 -0
  338. data/spec/unit/mutest/matcher/method/instance_spec.rb +125 -0
  339. data/spec/unit/mutest/matcher/method/singleton_spec.rb +85 -0
  340. data/spec/unit/mutest/matcher/methods/instance_spec.rb +58 -0
  341. data/spec/unit/mutest/matcher/methods/singleton_spec.rb +54 -0
  342. data/spec/unit/mutest/matcher/namespace_spec.rb +35 -0
  343. data/spec/unit/mutest/matcher/null_spec.rb +10 -0
  344. data/spec/unit/mutest/matcher/scope_spec.rb +33 -0
  345. data/spec/unit/mutest/matcher/static_spec.rb +11 -0
  346. data/spec/unit/mutest/meta/example/dsl_spec.rb +123 -0
  347. data/spec/unit/mutest/meta/example/verification_spec.rb +120 -0
  348. data/spec/unit/mutest/meta/example_spec.rb +32 -0
  349. data/spec/unit/mutest/mutation_spec.rb +129 -0
  350. data/spec/unit/mutest/mutator/node_spec.rb +43 -0
  351. data/spec/unit/mutest/mutator_spec.rb +30 -0
  352. data/spec/unit/mutest/parallel/driver_spec.rb +26 -0
  353. data/spec/unit/mutest/parallel/master_spec.rb +335 -0
  354. data/spec/unit/mutest/parallel/source/array_spec.rb +47 -0
  355. data/spec/unit/mutest/parallel/worker_spec.rb +65 -0
  356. data/spec/unit/mutest/parallel_spec.rb +16 -0
  357. data/spec/unit/mutest/parser_spec.rb +24 -0
  358. data/spec/unit/mutest/registry_spec.rb +45 -0
  359. data/spec/unit/mutest/reporter/cli/printer/config_spec.rb +29 -0
  360. data/spec/unit/mutest/reporter/cli/printer/env_progress_spec.rb +74 -0
  361. data/spec/unit/mutest/reporter/cli/printer/env_result_spec.rb +35 -0
  362. data/spec/unit/mutest/reporter/cli/printer/mutation_progress_result_spec.rb +23 -0
  363. data/spec/unit/mutest/reporter/cli/printer/mutation_result_spec.rb +110 -0
  364. data/spec/unit/mutest/reporter/cli/printer/status_progressive_spec.rb +43 -0
  365. data/spec/unit/mutest/reporter/cli/printer/status_spec.rb +119 -0
  366. data/spec/unit/mutest/reporter/cli/printer/subject_progress_spec.rb +34 -0
  367. data/spec/unit/mutest/reporter/cli/printer/subject_result_spec.rb +37 -0
  368. data/spec/unit/mutest/reporter/cli/printer/test_result_spec.rb +14 -0
  369. data/spec/unit/mutest/reporter/cli/printer_spec.rb +161 -0
  370. data/spec/unit/mutest/reporter/cli/tput_spec.rb +48 -0
  371. data/spec/unit/mutest/reporter/cli_spec.rb +212 -0
  372. data/spec/unit/mutest/reporter/null_spec.rb +12 -0
  373. data/spec/unit/mutest/reporter/sequence_spec.rb +29 -0
  374. data/spec/unit/mutest/repository/diff_spec.rb +106 -0
  375. data/spec/unit/mutest/repository/subject_filter_spec.rb +28 -0
  376. data/spec/unit/mutest/require_highjack_spec.rb +71 -0
  377. data/spec/unit/mutest/result/class_methods_spec.rb +49 -0
  378. data/spec/unit/mutest/result/env_spec.rb +82 -0
  379. data/spec/unit/mutest/result/mutation_spec.rb +37 -0
  380. data/spec/unit/mutest/result/subject_spec.rb +109 -0
  381. data/spec/unit/mutest/result_spec.rb +31 -0
  382. data/spec/unit/mutest/runner/sink_spec.rb +172 -0
  383. data/spec/unit/mutest/runner_spec.rb +69 -0
  384. data/spec/unit/mutest/selector/expression_spec.rb +59 -0
  385. data/spec/unit/mutest/source_file_spec.rb +42 -0
  386. data/spec/unit/mutest/subject/method/instance/memoized_spec.rb +78 -0
  387. data/spec/unit/mutest/subject/method/instance_spec.rb +64 -0
  388. data/spec/unit/mutest/subject/method/singleton_spec.rb +51 -0
  389. data/spec/unit/mutest/subject_spec.rb +87 -0
  390. data/spec/unit/mutest/util/one_spec.rb +20 -0
  391. data/spec/unit/mutest/warning_filter_spec.rb +99 -0
  392. data/spec/unit/mutest/zombifier_spec.rb +120 -0
  393. data/spec/unit/mutest_spec.rb +15 -0
  394. data/test_app/.rspec +1 -0
  395. data/test_app/Gemfile.rspec3.4 +7 -0
  396. data/test_app/Gemfile.rspec3.5 +7 -0
  397. data/test_app/lib/test_app.rb +109 -0
  398. data/test_app/lib/test_app/literal.rb +40 -0
  399. data/test_app/spec/spec_helper.rb +9 -0
  400. data/test_app/spec/unit/test_app/literal_spec.rb +20 -0
  401. metadata +784 -9
data/build/Dockerfile ADDED
@@ -0,0 +1,71 @@
1
+ FROM alpine:3.4
2
+ MAINTAINER John Backus <johncbackus@gmail.com>
3
+
4
+ VOLUME /app
5
+
6
+ # URLs for ruby-install and chruby which help install and manage our ruby matrix
7
+ ARG RUBY_INSTALL_URL=https://github.com/postmodern/ruby-install/archive/v0.6.0.tar.gz
8
+ ARG CHRUBY_URL=https://github.com/postmodern/chruby/archive/v0.3.9.tar.gz
9
+
10
+ # Directory that the ruby managers will be downloaded to
11
+ ARG RUBY_MANAGERS_DIR=/tmp/ruby_mangers
12
+
13
+ # Compiler environment variables that don't need to carry over to the final image
14
+ ARG CC=/usr/bin/clang
15
+ ARG CXX=/usr/bin/clang++
16
+
17
+ # Use dkubb's bash strict mode to protect us from bash's many ugliness
18
+ COPY build/strict-mode.sh /usr/local/sbin/strict-mode.sh
19
+
20
+ # Copy over a list of ruby versions to install
21
+ COPY build/ruby_matrix /tmp
22
+
23
+ # Enable strict mode by default
24
+ ENV BASH_ENV=/usr/local/sbin/strict-mode.sh
25
+
26
+ # Write all bundle config to /bundle instead of /app/.bundle
27
+ ENV BUNDLE_APP_CONFIG /bundle
28
+
29
+ RUN apk add --update-cache \
30
+ bash=4.3.42-r5 \
31
+ # provides tools like make
32
+ build-base=0.4-r1 \
33
+ # install clang to reduce the final binary size for our rubies
34
+ clang=3.8.0-r0 \
35
+ # install git so that the bundle can depend on git sources
36
+ git=2.8.3-r0 \
37
+ # required for gems that use ffi
38
+ libffi-dev=3.2.1-r2 \
39
+ # ruby needs access to things like linux/random.h
40
+ linux-headers=4.4.6-r1 \
41
+ # required to compile ruby
42
+ openssl-dev=1.0.2k-r0 \
43
+ # required for ruby-versions to download ruby binaries
44
+ openssl=1.0.2k-r0 \
45
+ # install ncurses for tput
46
+ ncurses=6.0-r7 \
47
+ # install ruby-dev for libruby.so for the FFI bug tests
48
+ ruby-dev=2.3.1-r0 \
49
+ # Create ruby managers directory for downloads
50
+ && mkdir "$RUBY_MANAGERS_DIR"
51
+
52
+ # Download ruby-install
53
+ ADD $RUBY_INSTALL_URL "$RUBY_MANAGERS_DIR"
54
+
55
+ # Download chruby
56
+ ADD $CHRUBY_URL "$RUBY_MANAGERS_DIR"
57
+
58
+ RUN mkdir -p /src/app
59
+
60
+ WORKDIR /src/app
61
+
62
+ COPY build/docker-exec build/docker-exec
63
+
64
+ # Copy the bootstrap script used to setup the final image
65
+ COPY build/docker-bootstrap.sh /usr/local/sbin
66
+
67
+ RUN docker-bootstrap.sh
68
+
69
+ USER ci
70
+
71
+ ENTRYPOINT ["build/docker-exec"]
@@ -0,0 +1,85 @@
1
+ #!/bin/bash
2
+
3
+ # `make` for ruby-install and chruby don't work within our strict environment
4
+ # so we have to unset the BASH_ENV variable before executing their setup.
5
+ # The `make` call creates a new shell so doing `set +o [option]` doesn't impact
6
+ # the `make install` execution
7
+ unset_strict(){
8
+ unset BASH_ENV
9
+ }
10
+
11
+ # Change directories to either chruby's or ruby-install's source directory
12
+ # and `make install`
13
+ install_manager(){
14
+ local manager_dir="$1"
15
+
16
+ (
17
+ unset_strict;
18
+ cd "$manager_dir" || exit 1;
19
+ make install
20
+ )
21
+ }
22
+
23
+ # Install bundler for a given ruby version
24
+ install_bundler_for_ruby_version(){
25
+ local ruby_version="$1"
26
+
27
+ # chruby unsets variables and uses file globbing
28
+ # execute in a subshell so that environment changes for chruby don't have
29
+ # global effect
30
+ (
31
+ # Only unset the rules that are required to not break chruby
32
+ set +o nounset;
33
+ set +o noglob;
34
+ source /usr/local/share/chruby/chruby.sh
35
+ chruby "$ruby_version"
36
+ gem install bundler
37
+ )
38
+ }
39
+
40
+ # Use ruby-install to install a ruby version
41
+ install_ruby_version(){
42
+ local ruby_version="$1"
43
+
44
+ # Execute inside of a subshell so that environment changes for ruby-install
45
+ # don't have a global impact
46
+ (
47
+ unset_strict;
48
+ # Skipping doc installation saves space and time during `docker build`
49
+ ruby-install --jobs=8 ruby "$ruby_version" -- --disable-install-doc --disable-install-rdoc --disable-install-capi;
50
+ )
51
+
52
+ # Install bundler for the newly installed ruby version
53
+ install_bundler_for_ruby_version "$ruby_version"
54
+ }
55
+
56
+ # Untar all downloaded ruby managers
57
+ find "$RUBY_MANAGERS_DIR" -name "*.tar.gz" -exec tar -xzvf {} -C "$RUBY_MANAGERS_DIR" \;
58
+
59
+ # Load the ruby manager directories into the array `ruby_managers`
60
+ mapfile -t ruby_managers < <(find "$RUBY_MANAGERS_DIR" -type d -maxdepth 1 -mindepth 1)
61
+
62
+ # Load the ruby versions we want to install into the array `ruby_versions`
63
+ mapfile -t ruby_versions < /tmp/ruby_matrix
64
+
65
+ # Call `make install` for all ruby manager directories downloaded
66
+ for directory in "${ruby_managers[@]}"; do
67
+ install_manager "$directory"
68
+ done
69
+
70
+ # Remove ruby manager install files now that we are done with them
71
+ rm -rf /tmp/ruby_managers
72
+
73
+ # Install all ruby versions specified in our ruby matrix file
74
+ for ruby_version in "${ruby_versions[@]}"; do
75
+ install_ruby_version "$ruby_version"
76
+ done
77
+
78
+ # Create a new unprivileged user named "ci"
79
+ adduser -DS -s /bin/bash ci
80
+
81
+ # Create our separate bundle config directory which ci is allowed to write to
82
+ mkdir "$BUNDLE_APP_CONFIG" && chown ci: "$BUNDLE_APP_CONFIG"
83
+
84
+ # Create a source directory which files are copied to so writes don't impact the host
85
+ chown ci: --recursive /src
data/build/docker-exec ADDED
@@ -0,0 +1,29 @@
1
+ #!/bin/bash
2
+
3
+ if [[ $# -ne 2 ]] ; then
4
+ echo 'build/docker-exec - run a command on a specified ruby version'
5
+ echo 'Usage:'
6
+ echo ' build/docker-exec 2.2.5 rake spec'
7
+ exit 1
8
+ fi
9
+
10
+ ruby_version="$1"
11
+ bundled_command="$2"
12
+
13
+ cp -r /app ..
14
+
15
+ # Disable strict settings that break chruby
16
+ set +o nounset
17
+ set +o noglob
18
+
19
+ source /usr/local/share/chruby/chruby.sh
20
+
21
+ chruby "$ruby_version"
22
+
23
+ # Reenable strict settings
24
+ set -o nounset
25
+ set -o noglob
26
+
27
+ bundle --path /bundle
28
+
29
+ bundle exec "$bundled_command"
data/build/make-docker ADDED
@@ -0,0 +1,3 @@
1
+ #!/bin/bash
2
+
3
+ docker build --tag backus/mutest . --file build/Dockerfile
data/build/ruby_matrix ADDED
@@ -0,0 +1 @@
1
+ 2.3.1
data/build/run ADDED
@@ -0,0 +1,5 @@
1
+ #!/bin/bash
2
+
3
+ # Mount the project as a read only filesystem to /app and pass
4
+ # along any arugments that were provided to this script
5
+ docker run --rm --volume "$(pwd):/app:ro" backus/mutest "$@"
@@ -0,0 +1,16 @@
1
+ #!/bin/bash
2
+
3
+ # Taken from dkubb/dockerfiles: https://git.io/viGZZ
4
+ #
5
+ # Reference:
6
+ # http://www.davidpashley.com/articles/writing-robust-shell-scripts/
7
+ # http://kvz.io/blog/2013/11/21/bash-best-practices/
8
+ # http://redsymbol.net/articles/unofficial-bash-strict-mode/
9
+
10
+ set -o errexit # Exit when an expression fails
11
+ set -o pipefail # Exit when a command in a pipeline fails
12
+ set -o nounset # Exit when an undefined variable is used
13
+ set -o noglob # Disable shell globbing
14
+ set -o noclobber # Disable automatic file overwriting
15
+
16
+ IFS=$'\n\t' # Set default field separator to not split on spaces
data/circle.yml ADDED
@@ -0,0 +1,7 @@
1
+ ---
2
+ machine:
3
+ ruby:
4
+ version: '2.3.3'
5
+ test:
6
+ override:
7
+ - bundle exec rake ci
@@ -0,0 +1,2 @@
1
+ ---
2
+ unit_test_timeout: 10.0
data/config/flay.yml ADDED
@@ -0,0 +1,3 @@
1
+ ---
2
+ threshold: 16
3
+ total_score: 1325
data/config/flog.yml ADDED
@@ -0,0 +1,2 @@
1
+ ---
2
+ threshold: 27.7
data/config/reek.yml ADDED
@@ -0,0 +1,137 @@
1
+ ---
2
+ Attribute:
3
+ enabled: false
4
+ exclude: []
5
+ BooleanParameter:
6
+ enabled: true
7
+ exclude: []
8
+ ClassVariable:
9
+ enabled: true
10
+ exclude: []
11
+ ControlParameter:
12
+ enabled: true
13
+ exclude:
14
+ - Mutest::Expression#match_length
15
+ DataClump:
16
+ enabled: true
17
+ exclude: []
18
+ max_copies: 2
19
+ min_clump_size: 2
20
+ DuplicateMethodCall:
21
+ enabled: false
22
+ exclude: []
23
+ max_calls: 1
24
+ allow_calls: []
25
+ FeatureEnvy:
26
+ enabled: false
27
+ # Buggy smell detector
28
+ IrresponsibleModule:
29
+ enabled: false
30
+ exclude: []
31
+ LongParameterList:
32
+ enabled: true
33
+ exclude:
34
+ - Mutest::Matcher::Method::Instance#self.build
35
+ - Mutest::Meta::Example::DSL # 3 vars
36
+ max_params: 2
37
+ LongYieldList:
38
+ enabled: true
39
+ exclude: []
40
+ max_params: 2
41
+ NestedIterators:
42
+ enabled: true
43
+ exclude:
44
+ - Mutest#self.singleton_subclass_instance
45
+ - Mutest::CLI#parse
46
+ - Mutest::Mutator::Node::Arguments#emit_argument_mutations
47
+ - Mutest::Mutator::Node::Resbody#mutate_captures
48
+ - Mutest::Mutator::Util::Array::Element#dispatch
49
+ - Mutest::Parallel::Master#run
50
+ - Mutest::RequireHighjack#self.call
51
+ - Mutest::Selector::Expression#call
52
+ - Parser::Lexer#self.new
53
+ max_allowed_nesting: 1
54
+ ignore_iterators: []
55
+ NilCheck:
56
+ enabled: false
57
+ RepeatedConditional:
58
+ enabled: true
59
+ exclude:
60
+ - Mutest::Mutator
61
+ - Mutest::Meta::Example::DSL
62
+ max_ifs: 1
63
+ TooManyInstanceVariables:
64
+ enabled: true
65
+ exclude:
66
+ - Mutest::Mutator # 4 vars
67
+ - Mutest::Parallel::Master # 4 vars
68
+ - Mutest::Meta::Example::DSL # 4 vars
69
+ max_instance_variables: 3
70
+ TooManyMethods:
71
+ enabled: true
72
+ exclude:
73
+ - Mutest::CLI
74
+ - Mutest::Mutator::Node
75
+ - Mutest::Parallel::Master
76
+ max_methods: 10
77
+ TooManyStatements:
78
+ enabled: true
79
+ exclude:
80
+ - Mutest::CLI#add_debug_options
81
+ - Mutest::CLI#add_environment_options
82
+ - Mutest::Reporter::CLI::Printer::Config#run
83
+ - Mutest::Reporter::CLI::Printer::EnvProgress#run
84
+ - Mutest::Runner#run_driver
85
+ - Mutest::Zombifier::File#self.find
86
+ max_statements: 7
87
+ UncommunicativeMethodName:
88
+ enabled: true
89
+ exclude:
90
+ - Mutest::AST::Sexp#s
91
+ - Mutest::Mutation#sha1
92
+ reject:
93
+ - !ruby/regexp /^[a-z]$/
94
+ - !ruby/regexp /[0-9]$/
95
+ - !ruby/regexp /[A-Z]/
96
+ accept: []
97
+ UncommunicativeModuleName:
98
+ enabled: true
99
+ exclude: []
100
+ reject:
101
+ - !ruby/regexp /^.$/
102
+ - !ruby/regexp /[0-9]$/
103
+ accept: []
104
+ UncommunicativeParameterName:
105
+ enabled: true
106
+ exclude: []
107
+ reject:
108
+ - !ruby/regexp /^.$/
109
+ - !ruby/regexp /[0-9]$/
110
+ - !ruby/regexp /[A-Z]/
111
+ accept: []
112
+ UncommunicativeVariableName:
113
+ enabled: true
114
+ exclude: []
115
+ reject:
116
+ - !ruby/regexp /^.$/
117
+ - !ruby/regexp /[0-9]$/
118
+ - !ruby/regexp /[A-Z]/
119
+ accept: ['force_utf32']
120
+ UnusedParameters:
121
+ enabled: true
122
+ exclude: []
123
+ UtilityFunction:
124
+ enabled: true
125
+ exclude:
126
+ - Mutest::AST::Sexp#s
127
+ - Mutest::Actor::Env#new_mailbox
128
+ - Mutest::CLI#reporter
129
+ - Mutest::Integration::Null#call
130
+ - Mutest::Integration::Rspec#parse_example
131
+ - Mutest::Integration::Rspec#parse_expression # intentional, private
132
+ - Mutest::Meta::Example::Verification#format_mutations # intentional, private
133
+ - Mutest::Reporter::CLI::Format::Progressive#new_buffer
134
+ - Mutest::Reporter::CLI::Printer::StatusProgressive#object # False positive calls super
135
+ - Mutest::Repository::Diff#tracks? # intentional, private
136
+ - Mutest::Repository::Diff#within_working_directory? # intentional, private
137
+ max_helper_calls: 0
@@ -0,0 +1,395 @@
1
+ ---
2
+ require:
3
+ - rubocop-rspec
4
+ - rubocop/devtools
5
+ AllCops:
6
+ Exclude:
7
+ - 'test_app/**/*'
8
+ - 'tmp/**/*'
9
+ - vendor/**/*
10
+ DisplayCopNames: true
11
+ TargetRubyVersion: 2.2
12
+ # This ends up being too spammy
13
+ Style/Documentation:
14
+ Enabled: false
15
+ Style/ExtraSpacing:
16
+ AllowForAlignment: true
17
+ Metrics/LineLength:
18
+ Max: 100
19
+ Metrics/BlockLength:
20
+ Exclude:
21
+ # Ignore migration DSL
22
+ - db/migrations/**/*
23
+ # Ignore RSpec DSL
24
+ - spec/**/*
25
+ # Ignore Rake task DSL
26
+ - Rakefile
27
+ Style/IfUnlessModifier:
28
+ MaxLineLength: 100
29
+ Style/Next:
30
+ EnforcedStyle: always
31
+ Style/PercentLiteralDelimiters:
32
+ PreferredDelimiters:
33
+ '%i': '[]'
34
+ '%I': '[]'
35
+ '%q': '{}'
36
+ '%Q': '{}'
37
+ '%r': '{}'
38
+ '%s': ()
39
+ '%w': '[]'
40
+ '%W': '[]'
41
+ '%x': ()
42
+ Style/TrivialAccessors:
43
+ ExactNameMatch: false
44
+ Style/SymbolArray:
45
+ Enabled: true
46
+ Style/BarePercentLiterals:
47
+ EnforcedStyle: percent_q
48
+ Style/CollectionMethods:
49
+ Enabled: true
50
+ Style/Send:
51
+ Enabled: true
52
+ Style/AutoResourceCleanup:
53
+ Enabled: true
54
+ Style/FirstArrayElementLineBreak:
55
+ Enabled: true
56
+ Style/FirstHashElementLineBreak:
57
+ Enabled: true
58
+ Style/FirstMethodArgumentLineBreak:
59
+ Enabled: true
60
+ Style/FirstMethodParameterLineBreak:
61
+ Enabled: true
62
+ Style/MultilineArrayBraceLayout:
63
+ Enabled: true
64
+ Style/MultilineAssignmentLayout:
65
+ EnforcedStyle: new_line
66
+ Enabled: true
67
+ Style/MultilineHashBraceLayout:
68
+ Enabled: true
69
+ Style/MultilineMethodCallBraceLayout:
70
+ Enabled: true
71
+ Style/MultilineMethodDefinitionBraceLayout:
72
+ Enabled: true
73
+ Style/OptionHash:
74
+ Enabled: true
75
+ Style/StringMethods:
76
+ Enabled: true
77
+ Style/IndentArray:
78
+ EnforcedStyle: consistent
79
+ Style/IndentHash:
80
+ EnforcedStyle: consistent
81
+ MultilineMethodCallIndentation:
82
+ EnforcedStyle: indented
83
+ Style/Alias:
84
+ EnforcedStyle: prefer_alias_method
85
+ Style/AlignHash:
86
+ EnforcedColonStyle: table
87
+ Style/SignalException:
88
+ EnforcedStyle: semantic
89
+ Style/SingleLineBlockParams:
90
+ Enabled: false
91
+ # We prefer being able to write
92
+ #
93
+ # foo(*%w[bar baz qux norf hello goodbye])
94
+ #
95
+ # over
96
+ #
97
+ # foo('bar', 'baz', 'qux', 'norf', 'hello', 'goodbye')
98
+ #
99
+ # because
100
+ #
101
+ # 1. the `%w` signals that all elements are strings without interpolation
102
+ # 2. the `%w` case is more compact
103
+ #
104
+ # The only exception is method invocations with a single argument. These
105
+ # cases should be `foo('bar')` and never `foo(*%w[bar])`
106
+ #
107
+ Lint/UnneededSplatExpansion:
108
+ Enabled: false
109
+ # We only use guard clauses when it guards two or more statements:
110
+ #
111
+ # # bad
112
+ # def foo
113
+ # return if bar
114
+ #
115
+ # baz
116
+ # end
117
+ #
118
+ # # good
119
+ # def foo
120
+ # baz if bar
121
+ # end
122
+ #
123
+ # This includes conditionals with an `else` branch:
124
+ #
125
+ # # bad
126
+ # def foo
127
+ # return qux if bar
128
+ #
129
+ # baz
130
+ # end
131
+ #
132
+ # # good
133
+ # def foo
134
+ # if bar
135
+ # qux
136
+ # else
137
+ # baz
138
+ # end
139
+ # end
140
+ #
141
+ # It is up to the author of the code in question if the condition concerns
142
+ # exactly two statements
143
+ #
144
+ # # ok
145
+ # def foo
146
+ # return if bar
147
+ #
148
+ # baz
149
+ # qux
150
+ # end
151
+ #
152
+ # # also ok
153
+ # def foo
154
+ # if bar
155
+ # baz
156
+ # qux
157
+ # end
158
+ # end
159
+ #
160
+ # Use a guard clause if more than two statements are being guarded by the conditional
161
+ #
162
+ # # bad
163
+ # def foo
164
+ # if bar
165
+ # baz
166
+ # qux
167
+ # norf
168
+ # end
169
+ # end
170
+ #
171
+ # # good
172
+ # def foo
173
+ # return if bar
174
+ #
175
+ # baz
176
+ # qux
177
+ # norf
178
+ # end
179
+ Style/GuardClause:
180
+ Enabled: false
181
+ # Prefer writing an empty method on two lines
182
+ #
183
+ # # good
184
+ # def foo
185
+ # end
186
+ #
187
+ # # bar
188
+ # def foo; end
189
+ #
190
+ Style/EmptyMethod:
191
+ EnforcedStyle: expanded
192
+ # RuboCop disables end alignment by default. Explanation:
193
+ #
194
+ # The end alignment cops are in the Lint category because the bad
195
+ # indentation could be something more serious than just a style issue.
196
+ # It could be a mistake in which keyword you think you're matching with the end.
197
+ # (ruby -w warns for these too, by the way.) So for this reason I don't think
198
+ # we can add auto-correct for these cops.
199
+ #
200
+ # From https://github.com/bbatsov/rubocop/pull/1789#issuecomment-92308357
201
+ #
202
+ # I think we have more than enough tools that sound the alarms if we have
203
+ # such an obvious mistake like mismatched tokens.
204
+ #
205
+ # - Our specs are likely to fail
206
+ # - RuboCop will flag it regardless, it just doesn't autocorrect it by default
207
+ # - Ruby will emit a warning which we configure to fail our specs
208
+ #
209
+ # So I think it is safe to enable autocorrect for end alignment cops because it
210
+ # does not seem unsafe and it improves workflow to be able to autocorrect alignment
211
+ Lint/DefEndAlignment:
212
+ AutoCorrect: true
213
+ # See explanation for `Lint/DefEndAlignment`
214
+ Lint/EndAlignment:
215
+ AutoCorrect: true
216
+
217
+ # TODO is inlined so that it takes precedence.
218
+
219
+ # This configuration was generated by
220
+ # `rubocop --auto-gen-config --exclude-limit 0`
221
+ # on 2017-01-27 00:08:49 -0800 using RuboCop version 0.47.1.
222
+ # The point is for the user to remove these configuration records
223
+ # one by one as the offenses are removed from the code base.
224
+ # Note that changes in the inspected code, or installation of new
225
+ # versions of RuboCop, may require this file to be generated again.
226
+
227
+ # Offense count: 1
228
+ # Cop supports --auto-correct.
229
+ # Configuration parameters: EnforcedStyleAlignWith, SupportedStylesAlignWith, AutoCorrect.
230
+ # SupportedStylesAlignWith: keyword, variable, start_of_line
231
+
232
+ # Offense count: 4
233
+ # Cop supports --auto-correct.
234
+ Lint/UnifiedInteger:
235
+ Enabled: false
236
+
237
+ # Offense count: 10
238
+ Metrics/AbcSize:
239
+ Max: 20
240
+
241
+ # Offense count: 84
242
+ # Configuration parameters: AllowHeredoc, AllowURI, URISchemes, IgnoreCopDirectives, IgnoredPatterns.
243
+ # URISchemes: http, https
244
+ Metrics/LineLength:
245
+ Max: 120
246
+
247
+ # Offense count: 7
248
+ # Cop supports --auto-correct.
249
+ # Configuration parameters: EnforcedStyle, SupportedStyles.
250
+ # SupportedStyles: always, conditionals
251
+ Style/AndOr:
252
+ Enabled: false
253
+
254
+ # Offense count: 150
255
+ # Cop supports --auto-correct.
256
+ Style/FirstMethodArgumentLineBreak:
257
+ Enabled: false
258
+
259
+ # Offense count: 2
260
+ # Cop supports --auto-correct.
261
+ # Configuration parameters: SupportedStyles, IndentationWidth.
262
+ # SupportedStyles: special_inside_parentheses, consistent, align_braces
263
+ Style/IndentHash:
264
+ EnforcedStyle: special_inside_parentheses
265
+
266
+ # Offense count: 21
267
+ # Cop supports --auto-correct.
268
+ # Configuration parameters: EnforcedStyle, SupportedStyles.
269
+ # SupportedStyles: call, braces
270
+ Style/LambdaCall:
271
+ Enabled: false
272
+
273
+ # Offense count: 12
274
+ # Cop supports --auto-correct.
275
+ # Configuration parameters: EnforcedStyle, MinBodyLength, SupportedStyles.
276
+ # SupportedStyles: skip_modifier_ifs, always
277
+ Style/Next:
278
+ Enabled: false
279
+
280
+ # Devtools Cops
281
+ Devtools/GroupSingleLineLet:
282
+ Enabled: false
283
+
284
+ # RSpec Cops
285
+ RSpec/MessageExpectation:
286
+ Enabled: true
287
+ RSpec/ExampleLength:
288
+ Enabled: false
289
+ RSpec/VerifiedDoubles:
290
+ IgnoreSymbolicNames: true
291
+ RSpec/DescribeClass:
292
+ Exclude:
293
+ - 'spec/integration/mutest/**/*'
294
+
295
+
296
+ # Inlining RSpec todos for the same reason as the RSpec ones
297
+
298
+ # This configuration was generated by
299
+ # `rubocop --auto-gen-config`
300
+ # on 2017-01-27 19:41:43 -0800 using RuboCop version 0.47.1.
301
+ # The point is for the user to remove these configuration records
302
+ # one by one as the offenses are removed from the code base.
303
+ # Note that changes in the inspected code, or installation of new
304
+ # versions of RuboCop, may require this file to be generated again.
305
+
306
+ # Offense count: 89
307
+ # Configuration parameters: CustomIncludeMethods.
308
+ RSpec/EmptyExampleGroup:
309
+ Exclude:
310
+ - 'spec/unit/mutest/meta/example/dsl_spec.rb'
311
+ - 'spec/unit/mutest/reporter/cli/printer/config_spec.rb'
312
+ - 'spec/unit/mutest/reporter/cli/printer/env_progress_spec.rb'
313
+ - 'spec/unit/mutest/reporter/cli/printer/env_result_spec.rb'
314
+ - 'spec/unit/mutest/reporter/cli/printer/mutation_progress_result_spec.rb'
315
+ - 'spec/unit/mutest/reporter/cli/printer/mutation_result_spec.rb'
316
+ - 'spec/unit/mutest/reporter/cli/printer/status_progressive_spec.rb'
317
+ - 'spec/unit/mutest/reporter/cli/printer/status_spec.rb'
318
+ - 'spec/unit/mutest/reporter/cli/printer/subject_progress_spec.rb'
319
+ - 'spec/unit/mutest/reporter/cli/printer/subject_result_spec.rb'
320
+ - 'spec/unit/mutest/reporter/cli/printer/test_result_spec.rb'
321
+ - 'spec/unit/mutest/reporter/cli/printer_spec.rb'
322
+ - 'spec/unit/mutest/reporter/cli_spec.rb'
323
+
324
+ # Offense count: 13
325
+ # Configuration parameters: CustomTransform, IgnoreMethods.
326
+ RSpec/FilePath:
327
+ Exclude:
328
+ - 'spec/unit/mutest/loader_spec.rb'
329
+ - 'spec/unit/mutest/matcher/chain_spec.rb'
330
+ - 'spec/unit/mutest/matcher/compiler/subject_prefix_spec.rb'
331
+ - 'spec/unit/mutest/matcher/compiler_spec.rb'
332
+ - 'spec/unit/mutest/matcher/filter_spec.rb'
333
+ - 'spec/unit/mutest/matcher/method/instance_spec.rb'
334
+ - 'spec/unit/mutest/matcher/method/singleton_spec.rb'
335
+ - 'spec/unit/mutest/matcher/methods/instance_spec.rb'
336
+ - 'spec/unit/mutest/matcher/methods/singleton_spec.rb'
337
+ - 'spec/unit/mutest/matcher/namespace_spec.rb'
338
+ - 'spec/unit/mutest/matcher/null_spec.rb'
339
+ - 'spec/unit/mutest/matcher/scope_spec.rb'
340
+ - 'spec/unit/mutest/matcher/static_spec.rb'
341
+
342
+ # Offense count: 5
343
+ # Configuration parameters: AssignmentOnly.
344
+ RSpec/InstanceVariable:
345
+ Exclude:
346
+ - 'spec/unit/mutest/parallel/master_spec.rb'
347
+
348
+ # Offense count: 93
349
+ # Configuration parameters: EnforcedStyle, SupportedStyles.
350
+ # SupportedStyles: allow, expect
351
+ RSpec/MessageExpectation:
352
+ Enabled: false
353
+
354
+ # Offense count: 94
355
+ # Configuration parameters: SupportedStyles.
356
+ # SupportedStyles: have_received, receive
357
+ RSpec/MessageSpies:
358
+ EnforcedStyle: receive
359
+
360
+ # Offense count: 5
361
+ RSpec/MultipleExpectations:
362
+ Max: 3
363
+
364
+ # Offense count: 57
365
+ RSpec/NamedSubject:
366
+ Enabled: false
367
+
368
+ # Offense count: 70
369
+ # Configuration parameters: Max.
370
+ RSpec/NestedGroups:
371
+ Exclude:
372
+ - 'spec/unit/mutest/ast/named_children_spec.rb'
373
+ - 'spec/unit/mutest/cli_spec.rb'
374
+ - 'spec/unit/mutest/expression/namespace/recursive_spec.rb'
375
+ - 'spec/unit/mutest/mutation_spec.rb'
376
+ - 'spec/unit/mutest/parallel/master_spec.rb'
377
+ - 'spec/unit/mutest/reporter/cli/printer/mutation_result_spec.rb'
378
+ - 'spec/unit/mutest/reporter/cli/printer/status_progressive_spec.rb'
379
+ - 'spec/unit/mutest/reporter/cli/printer/status_spec.rb'
380
+ - 'spec/unit/mutest/reporter/cli/printer_spec.rb'
381
+ - 'spec/unit/mutest/reporter/cli_spec.rb'
382
+ - 'spec/unit/mutest/repository/diff_spec.rb'
383
+ - 'spec/unit/mutest/runner/sink_spec.rb'
384
+
385
+ # Offense count: 18
386
+ # Configuration parameters: IgnoreSymbolicNames.
387
+ RSpec/VerifiedDoubles:
388
+ Exclude:
389
+ - 'spec/unit/mutest/actor/binding_spec.rb'
390
+ - 'spec/unit/mutest/integration/rspec_spec.rb'
391
+ - 'spec/unit/mutest/reporter/cli/printer_spec.rb'
392
+ - 'spec/unit/mutest/repository/subject_filter_spec.rb'
393
+ - 'spec/unit/mutest/result/mutation_spec.rb'
394
+ - 'spec/unit/mutest/subject/method/instance/memoized_spec.rb'
395
+ - 'spec/unit/mutest/subject_spec.rb'