mutest 0.0.9 → 0.0.10

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (236) hide show
  1. checksums.yaml +5 -5
  2. data/.circleci/config.yml +38 -0
  3. data/{config/rubocop.yml → .rubocop.yml} +80 -183
  4. data/CHANGELOG.md +8 -0
  5. data/Gemfile +2 -3
  6. data/Gemfile.lock +41 -52
  7. data/README.md +16 -0
  8. data/Rakefile +1 -1
  9. data/lib/mutest.rb +5 -4
  10. data/lib/mutest/actor.rb +7 -6
  11. data/lib/mutest/actor/env.rb +3 -3
  12. data/lib/mutest/actor/mailbox.rb +5 -4
  13. data/lib/mutest/actor/receiver.rb +6 -5
  14. data/lib/mutest/actor/sender.rb +5 -4
  15. data/lib/mutest/ast.rb +4 -3
  16. data/lib/mutest/ast/meta.rb +3 -3
  17. data/lib/mutest/ast/meta/const.rb +7 -5
  18. data/lib/mutest/ast/meta/optarg.rb +6 -5
  19. data/lib/mutest/ast/meta/resbody.rb +6 -5
  20. data/lib/mutest/ast/meta/restarg.rb +6 -5
  21. data/lib/mutest/ast/meta/send.rb +8 -20
  22. data/lib/mutest/ast/meta/symbol.rb +6 -5
  23. data/lib/mutest/ast/named_children.rb +5 -5
  24. data/lib/mutest/ast/node_predicates.rb +4 -4
  25. data/lib/mutest/ast/nodes.rb +3 -3
  26. data/lib/mutest/ast/regexp.rb +3 -3
  27. data/lib/mutest/ast/regexp/transformer.rb +19 -11
  28. data/lib/mutest/ast/regexp/transformer/alternative.rb +6 -6
  29. data/lib/mutest/ast/regexp/transformer/character_set.rb +7 -7
  30. data/lib/mutest/ast/regexp/transformer/direct.rb +7 -7
  31. data/lib/mutest/ast/regexp/transformer/options_group.rb +7 -7
  32. data/lib/mutest/ast/regexp/transformer/quantifier.rb +11 -13
  33. data/lib/mutest/ast/regexp/transformer/recursive.rb +7 -7
  34. data/lib/mutest/ast/regexp/transformer/root.rb +6 -6
  35. data/lib/mutest/ast/regexp/transformer/text.rb +7 -7
  36. data/lib/mutest/ast/sexp.rb +3 -3
  37. data/lib/mutest/ast/types.rb +8 -6
  38. data/lib/mutest/cli.rb +5 -3
  39. data/lib/mutest/color.rb +4 -3
  40. data/lib/mutest/config.rb +4 -3
  41. data/lib/mutest/context.rb +4 -3
  42. data/lib/mutest/diff.rb +5 -3
  43. data/lib/mutest/env.rb +5 -5
  44. data/lib/mutest/env/bootstrap.rb +7 -5
  45. data/lib/mutest/expression.rb +7 -5
  46. data/lib/mutest/expression/method.rb +4 -4
  47. data/lib/mutest/expression/methods.rb +4 -4
  48. data/lib/mutest/expression/namespace.rb +9 -8
  49. data/lib/mutest/expression/parser.rb +9 -8
  50. data/lib/mutest/integration.rb +5 -3
  51. data/lib/mutest/integration/null.rb +3 -3
  52. data/lib/mutest/isolation.rb +2 -2
  53. data/lib/mutest/isolation/fork.rb +4 -4
  54. data/lib/mutest/isolation/none.rb +4 -4
  55. data/lib/mutest/loader.rb +2 -2
  56. data/lib/mutest/matcher.rb +4 -3
  57. data/lib/mutest/matcher/chain.rb +3 -3
  58. data/lib/mutest/matcher/compiler.rb +7 -5
  59. data/lib/mutest/matcher/config.rb +5 -4
  60. data/lib/mutest/matcher/filter.rb +3 -3
  61. data/lib/mutest/matcher/method.rb +13 -13
  62. data/lib/mutest/matcher/method/instance.rb +6 -6
  63. data/lib/mutest/matcher/method/singleton.rb +5 -5
  64. data/lib/mutest/matcher/methods.rb +7 -6
  65. data/lib/mutest/matcher/namespace.rb +3 -3
  66. data/lib/mutest/matcher/null.rb +3 -3
  67. data/lib/mutest/matcher/scope.rb +3 -3
  68. data/lib/mutest/matcher/static.rb +3 -3
  69. data/lib/mutest/meta.rb +4 -4
  70. data/lib/mutest/meta/example.rb +5 -4
  71. data/lib/mutest/meta/example/dsl.rb +12 -11
  72. data/lib/mutest/meta/example/verification.rb +7 -6
  73. data/lib/mutest/mutation.rb +7 -6
  74. data/lib/mutest/mutator.rb +6 -6
  75. data/lib/mutest/mutator/node.rb +19 -7
  76. data/lib/mutest/mutator/node/and_asgn.rb +4 -4
  77. data/lib/mutest/mutator/node/argument.rb +6 -5
  78. data/lib/mutest/mutator/node/arguments.rb +18 -5
  79. data/lib/mutest/mutator/node/begin.rb +4 -4
  80. data/lib/mutest/mutator/node/binary.rb +4 -4
  81. data/lib/mutest/mutator/node/block.rb +6 -5
  82. data/lib/mutest/mutator/node/block_pass.rb +4 -4
  83. data/lib/mutest/mutator/node/break.rb +4 -4
  84. data/lib/mutest/mutator/node/case.rb +6 -4
  85. data/lib/mutest/mutator/node/class.rb +4 -4
  86. data/lib/mutest/mutator/node/conditional_loop.rb +4 -4
  87. data/lib/mutest/mutator/node/const.rb +4 -4
  88. data/lib/mutest/mutator/node/define.rb +6 -6
  89. data/lib/mutest/mutator/node/defined.rb +4 -4
  90. data/lib/mutest/mutator/node/dstr.rb +4 -4
  91. data/lib/mutest/mutator/node/dsym.rb +4 -4
  92. data/lib/mutest/mutator/node/generic.rb +5 -4
  93. data/lib/mutest/mutator/node/if.rb +6 -4
  94. data/lib/mutest/mutator/node/index.rb +128 -0
  95. data/lib/mutest/mutator/node/kwbegin.rb +4 -4
  96. data/lib/mutest/mutator/node/literal.rb +4 -4
  97. data/lib/mutest/mutator/node/literal/array.rb +8 -6
  98. data/lib/mutest/mutator/node/literal/boolean.rb +5 -5
  99. data/lib/mutest/mutator/node/literal/fixnum.rb +5 -5
  100. data/lib/mutest/mutator/node/literal/float.rb +5 -5
  101. data/lib/mutest/mutator/node/literal/hash.rb +6 -6
  102. data/lib/mutest/mutator/node/literal/nil.rb +5 -5
  103. data/lib/mutest/mutator/node/literal/range.rb +5 -5
  104. data/lib/mutest/mutator/node/literal/regex.rb +5 -5
  105. data/lib/mutest/mutator/node/literal/string.rb +5 -5
  106. data/lib/mutest/mutator/node/literal/symbol.rb +5 -5
  107. data/lib/mutest/mutator/node/masgn.rb +4 -4
  108. data/lib/mutest/mutator/node/match_current_line.rb +4 -4
  109. data/lib/mutest/mutator/node/mlhs.rb +4 -4
  110. data/lib/mutest/mutator/node/named_value/access.rb +6 -6
  111. data/lib/mutest/mutator/node/named_value/constant_assignment.rb +6 -5
  112. data/lib/mutest/mutator/node/named_value/variable_assignment.rb +5 -5
  113. data/lib/mutest/mutator/node/next.rb +4 -4
  114. data/lib/mutest/mutator/node/nthref.rb +4 -4
  115. data/lib/mutest/mutator/node/op_asgn.rb +4 -4
  116. data/lib/mutest/mutator/node/or_asgn.rb +5 -4
  117. data/lib/mutest/mutator/node/procarg_zero.rb +45 -0
  118. data/lib/mutest/mutator/node/regexp.rb +6 -6
  119. data/lib/mutest/mutator/node/regexp/alternation_meta.rb +5 -5
  120. data/lib/mutest/mutator/node/regexp/capture_group.rb +5 -5
  121. data/lib/mutest/mutator/node/regexp/character_type.rb +5 -5
  122. data/lib/mutest/mutator/node/regexp/end_of_line_anchor.rb +5 -5
  123. data/lib/mutest/mutator/node/regexp/end_of_string_or_before_end_of_line_anchor.rb +5 -5
  124. data/lib/mutest/mutator/node/regexp/one_or_more.rb +5 -5
  125. data/lib/mutest/mutator/node/regexp/zero_or_more.rb +5 -5
  126. data/lib/mutest/mutator/node/regopt.rb +4 -4
  127. data/lib/mutest/mutator/node/resbody.rb +6 -4
  128. data/lib/mutest/mutator/node/rescue.rb +6 -4
  129. data/lib/mutest/mutator/node/return.rb +5 -4
  130. data/lib/mutest/mutator/node/send.rb +6 -34
  131. data/lib/mutest/mutator/node/send/attribute_assignment.rb +5 -5
  132. data/lib/mutest/mutator/node/send/binary.rb +5 -5
  133. data/lib/mutest/mutator/node/send/conditional.rb +5 -5
  134. data/lib/mutest/mutator/node/splat.rb +4 -4
  135. data/lib/mutest/mutator/node/super.rb +4 -4
  136. data/lib/mutest/mutator/node/when.rb +4 -4
  137. data/lib/mutest/mutator/node/yield.rb +4 -4
  138. data/lib/mutest/mutator/node/zsuper.rb +4 -4
  139. data/lib/mutest/mutator/util.rb +3 -3
  140. data/lib/mutest/mutator/util/array.rb +6 -6
  141. data/lib/mutest/mutator/util/symbol.rb +4 -4
  142. data/lib/mutest/parallel.rb +16 -12
  143. data/lib/mutest/parallel/master.rb +4 -4
  144. data/lib/mutest/parallel/source.rb +6 -5
  145. data/lib/mutest/parallel/worker.rb +6 -5
  146. data/lib/mutest/parser.rb +4 -3
  147. data/lib/mutest/registry.rb +6 -5
  148. data/lib/mutest/reporter.rb +2 -2
  149. data/lib/mutest/reporter/cli.rb +3 -3
  150. data/lib/mutest/reporter/cli/format.rb +9 -8
  151. data/lib/mutest/reporter/cli/printer.rb +8 -8
  152. data/lib/mutest/reporter/cli/printer/config.rb +5 -5
  153. data/lib/mutest/reporter/cli/printer/env_progress.rb +16 -16
  154. data/lib/mutest/reporter/cli/printer/env_result.rb +5 -5
  155. data/lib/mutest/reporter/cli/printer/mutation_progress_result.rb +5 -5
  156. data/lib/mutest/reporter/cli/printer/mutation_result.rb +5 -5
  157. data/lib/mutest/reporter/cli/printer/status.rb +6 -5
  158. data/lib/mutest/reporter/cli/printer/status_progressive.rb +5 -5
  159. data/lib/mutest/reporter/cli/printer/subject_progress.rb +5 -5
  160. data/lib/mutest/reporter/cli/printer/subject_result.rb +5 -5
  161. data/lib/mutest/reporter/cli/printer/test_result.rb +5 -5
  162. data/lib/mutest/reporter/cli/tput.rb +6 -5
  163. data/lib/mutest/reporter/null.rb +3 -3
  164. data/lib/mutest/reporter/sequence.rb +3 -3
  165. data/lib/mutest/repository.rb +9 -7
  166. data/lib/mutest/require_highjack.rb +2 -2
  167. data/lib/mutest/requirer.rb +2 -2
  168. data/lib/mutest/result.rb +18 -12
  169. data/lib/mutest/runner.rb +6 -3
  170. data/lib/mutest/runner/sink.rb +3 -3
  171. data/lib/mutest/scope.rb +2 -2
  172. data/lib/mutest/selector.rb +4 -3
  173. data/lib/mutest/selector/expression.rb +3 -3
  174. data/lib/mutest/source_file.rb +6 -5
  175. data/lib/mutest/subject.rb +5 -3
  176. data/lib/mutest/subject/method.rb +3 -3
  177. data/lib/mutest/subject/method/instance.rb +5 -5
  178. data/lib/mutest/subject/method/singleton.rb +4 -4
  179. data/lib/mutest/test.rb +4 -3
  180. data/lib/mutest/util.rb +3 -3
  181. data/lib/mutest/version.rb +2 -2
  182. data/lib/mutest/warning_filter.rb +3 -3
  183. data/lib/mutest/zombifier.rb +5 -4
  184. data/meta/block.rb +22 -3
  185. data/meta/case.rb +29 -1
  186. data/meta/index.rb +132 -0
  187. data/meta/indexasgn.rb +42 -0
  188. data/meta/lambda.rb +17 -0
  189. data/meta/send.rb +5 -139
  190. data/mutest-rspec.gemspec +1 -1
  191. data/mutest.gemspec +11 -12
  192. data/spec/integration/mutest/rspec_spec.rb +1 -1
  193. data/spec/shared/framework_integration_behavior.rb +1 -1
  194. data/spec/shared/idempotent_method_behavior.rb +2 -1
  195. data/spec/spec_helper.rb +5 -5
  196. data/spec/support/compress_helper.rb +2 -1
  197. data/spec/support/corpus.rb +12 -8
  198. data/spec/support/fake_actor.rb +19 -14
  199. data/spec/support/file_system.rb +10 -7
  200. data/spec/support/ice_nine_config.rb +3 -3
  201. data/spec/support/ruby_vm.rb +10 -11
  202. data/spec/support/shared_context.rb +1 -1
  203. data/spec/support/test_app.rb +1 -1
  204. data/spec/support/warning.rb +8 -7
  205. data/spec/support/xspec.rb +18 -17
  206. data/spec/unit/mutest/actor/binding_spec.rb +1 -0
  207. data/spec/unit/mutest/ast/meta/optarg_spec.rb +1 -0
  208. data/spec/unit/mutest/ast/meta/send/proc_predicate_spec.rb +1 -1
  209. data/spec/unit/mutest/ast/meta/send/receiver_possible_top_level_const_predicate_spec.rb +1 -1
  210. data/spec/unit/mutest/ast/meta/send_spec.rb +14 -18
  211. data/spec/unit/mutest/ast/regexp_spec.rb +4 -3
  212. data/spec/unit/mutest/ast_spec.rb +1 -1
  213. data/spec/unit/mutest/cli_spec.rb +15 -15
  214. data/spec/unit/mutest/env/bootstrap_spec.rb +1 -1
  215. data/spec/unit/mutest/integration_spec.rb +1 -0
  216. data/spec/unit/mutest/isolation/none_spec.rb +1 -1
  217. data/spec/unit/mutest/matcher/config_spec.rb +1 -0
  218. data/spec/unit/mutest/mutator/node_spec.rb +1 -1
  219. data/spec/unit/mutest/parallel/master_spec.rb +3 -3
  220. data/spec/unit/mutest/reporter/cli/printer_spec.rb +2 -0
  221. data/spec/unit/mutest/reporter/cli/tput_spec.rb +2 -0
  222. data/spec/unit/mutest/reporter/cli_spec.rb +2 -0
  223. data/spec/unit/mutest/repository/diff_spec.rb +1 -1
  224. data/spec/unit/mutest/runner_spec.rb +1 -1
  225. data/spec/unit/mutest/subject_spec.rb +1 -1
  226. data/spec/unit/mutest/warning_filter_spec.rb +2 -3
  227. data/spec/unit/mutest/zombifier_spec.rb +1 -1
  228. data/test_app/Gemfile.rspec3.8 +7 -0
  229. metadata +67 -68
  230. data/.buildkite/hooks/pre-command +0 -3
  231. data/.buildkite/pipeline.yml +0 -38
  232. data/.gitmodules +0 -3
  233. data/circle.yml +0 -10
  234. data/config/triage.yml +0 -2
  235. data/config/yardstick.yml +0 -2
  236. data/lib/mutest/mutator/node/send/index.rb +0 -47
@@ -16,7 +16,7 @@ Gem::Specification.new do |gem|
16
16
  gem.extra_rdoc_files = %w[LICENSE]
17
17
 
18
18
  gem.add_runtime_dependency('mutest', "~> #{gem.version}")
19
- gem.add_runtime_dependency('rspec-core', '>= 3.4.0', '< 3.8.0')
19
+ gem.add_runtime_dependency('rspec-core', '>= 3.4.0', '< 3.9.0')
20
20
 
21
21
  gem.add_development_dependency('bundler', '~> 1.3', '>= 1.3.5')
22
22
  end
@@ -1,6 +1,5 @@
1
1
  require File.expand_path('../lib/mutest/version', __FILE__)
2
2
 
3
- # rubocop:disable Metrics/BlockLength
4
3
  Gem::Specification.new do |gem|
5
4
  gem.name = 'mutest'
6
5
  gem.version = Mutest::VERSION.dup
@@ -22,21 +21,21 @@ Gem::Specification.new do |gem|
22
21
  gem.extra_rdoc_files = %w[LICENSE]
23
22
  gem.executables = %w[mutest]
24
23
 
25
- gem.required_ruby_version = '>= 2.1'
24
+ gem.required_ruby_version = '>= 2.3'
26
25
 
27
- gem.add_runtime_dependency('parser', '>= 2.5.0.1', '< 2.6')
28
- gem.add_runtime_dependency('ast', '~> 2.2')
29
- gem.add_runtime_dependency('diff-lcs', '~> 1.2')
30
- gem.add_runtime_dependency('parallel', '~> 1.3')
31
- gem.add_runtime_dependency('morpher', '~> 0.2.6')
32
- gem.add_runtime_dependency('procto', '~> 0.0.2')
33
26
  gem.add_runtime_dependency('abstract_type', '~> 0.0.7')
34
- gem.add_runtime_dependency('unparser', '~> 0.2.5')
35
- gem.add_runtime_dependency('ice_nine', '~> 0.11.1')
36
27
  gem.add_runtime_dependency('adamantium', '~> 0.2.0')
37
- gem.add_runtime_dependency('memoizable', '~> 0.4.2')
38
- gem.add_runtime_dependency('equalizer', '~> 0.0.9')
39
28
  gem.add_runtime_dependency('anima', '~> 0.3.0')
29
+ gem.add_runtime_dependency('ast', '~> 2.2')
40
30
  gem.add_runtime_dependency('concord', '~> 0.1.5')
31
+ gem.add_runtime_dependency('diff-lcs', '~> 1.2')
32
+ gem.add_runtime_dependency('equalizer', '~> 0.0.9')
33
+ gem.add_runtime_dependency('ice_nine', '~> 0.11.1')
34
+ gem.add_runtime_dependency('memoizable', '~> 0.4.2')
35
+ gem.add_runtime_dependency('morpher', '~> 0.2.6')
36
+ gem.add_runtime_dependency('parallel', '~> 1.3')
37
+ gem.add_runtime_dependency('parser', '>= 2.5.0.1', '< 2.6')
38
+ gem.add_runtime_dependency('procto', '~> 0.0.2')
41
39
  gem.add_runtime_dependency('regexp_parser', '~> 0.4.9')
40
+ gem.add_runtime_dependency('unparser', '~> 0.4.2')
42
41
  end
@@ -1,7 +1,7 @@
1
1
  RSpec.describe 'rspec integration', mutest: false do
2
2
  let(:base_cmd) { 'bundle exec mutest -I lib --require test_app --use rspec' }
3
3
 
4
- %w[3.4 3.5 3.6 3.7].each do |version|
4
+ %w[3.4 3.5 3.6 3.7 3.8].each do |version|
5
5
  context "RSpec #{version}" do
6
6
  let(:gemfile) { "Gemfile.rspec#{version}" }
7
7
 
@@ -2,7 +2,7 @@ RSpec.shared_examples_for 'framework integration' do
2
2
  around do |example|
3
3
  Bundler.with_clean_env do
4
4
  Dir.chdir(TestApp.root) do
5
- Kernel.system("bundle install --gemfile=#{gemfile}") || fail('Bundle install failed!')
5
+ Kernel.system("bundle install --gemfile=#{gemfile}") || raise('Bundle install failed!')
6
6
  ENV['BUNDLE_GEMFILE'] = gemfile
7
7
  example.run
8
8
  end
@@ -1,7 +1,8 @@
1
1
  RSpec.shared_examples_for 'an idempotent method' do
2
2
  it 'is idempotent' do
3
3
  first = subject
4
- fail 'RSpec not configured for threadsafety' unless RSpec.configuration.threadsafe?
4
+ raise 'RSpec not configured for threadsafety' unless RSpec.configuration.threadsafe?
5
+
5
6
  mutex = __memoized.instance_variable_get(:@mutex)
6
7
  memoized = __memoized.instance_variable_get(:@memoized)
7
8
  mutex.synchronize { memoized.delete(:subject) }
@@ -32,7 +32,7 @@ module MutestSpec
32
32
  SPECS_PATH = Pathname.new(__dir__).expand_path.freeze
33
33
  PROJECT_ROOT = SPECS_PATH.parent.freeze
34
34
  UNIT_TEST_TIMOUT = 10.0
35
- end # MutestSpec
35
+ end
36
36
 
37
37
  Dir.glob(MutestSpec::SPECS_PATH.join('{shared,support}/**/*.rb')).each(&method(:require))
38
38
 
@@ -43,7 +43,7 @@ require 'test_app'
43
43
  module Fixtures
44
44
  TEST_CONFIG = Mutest::Config::DEFAULT.with(reporter: Mutest::Reporter::Null.new)
45
45
  TEST_ENV = Mutest::Env::Bootstrap.(TEST_CONFIG)
46
- end # Fixtures
46
+ end
47
47
 
48
48
  module ParserHelper
49
49
  def generate(node)
@@ -51,19 +51,19 @@ module ParserHelper
51
51
  end
52
52
 
53
53
  def parse(string)
54
- Unparser::Preprocessor.run(Parser::CurrentRuby.parse(string))
54
+ Unparser::Preprocessor.run(Unparser.parse(string))
55
55
  end
56
56
 
57
57
  def parse_expression(string)
58
58
  Mutest::Config::DEFAULT.expression_parser.(string)
59
59
  end
60
- end # ParserHelper
60
+ end
61
61
 
62
62
  module MessageHelper
63
63
  def message(*arguments)
64
64
  Mutest::Actor::Message.new(*arguments)
65
65
  end
66
- end # MessageHelper
66
+ end
67
67
 
68
68
  RSpec.configure do |config|
69
69
  config.extend(SharedContext)
@@ -3,7 +3,8 @@ module CompressHelper
3
3
  lines = string.lines
4
4
  match = /\A( *)/.match(lines.first)
5
5
  return string unless match
6
+
6
7
  whitespaces = match[1].to_s.length
7
8
  lines.map { |line| line[whitespaces..-1] }.join
8
9
  end
9
- end # CompressHelper
10
+ end
@@ -31,7 +31,7 @@ module MutestSpec
31
31
 
32
32
  DEFAULT_MUTATION_COUNT = 0
33
33
 
34
- include Adamantium, Anima.new(
34
+ include Anima.new(
35
35
  :expected_errors,
36
36
  :mutation_coverage,
37
37
  :mutation_generation,
@@ -40,6 +40,7 @@ module MutestSpec
40
40
  :repo_uri,
41
41
  :repo_ref
42
42
  )
43
+ include Adamantium
43
44
 
44
45
  # Verify mutation coverage
45
46
  #
@@ -95,6 +96,7 @@ module MutestSpec
95
96
  # @return [self]
96
97
  def checkout
97
98
  return self if noinstall?
99
+
98
100
  TMP.mkdir unless TMP.directory?
99
101
 
100
102
  if repo_path.exist?
@@ -158,6 +160,7 @@ module MutestSpec
158
160
  # @return [undefined]
159
161
  def install_mutest
160
162
  return if noinstall?
163
+
161
164
  relative = ROOT.relative_path_from(repo_path)
162
165
  repo_path.join('Gemfile').open('a') do |file|
163
166
  file << "gem 'mutest', path: '#{relative}'\n"
@@ -241,7 +244,7 @@ module MutestSpec
241
244
  if block_given?
242
245
  yield
243
246
  else
244
- fail "System command failed!: #{arguments.join(' ')}"
247
+ raise "System command failed!: #{arguments.join(' ')}"
245
248
  end
246
249
  end
247
250
 
@@ -253,9 +256,10 @@ module MutestSpec
253
256
  def initialize(*error_info)
254
257
  super(MESSAGE % error_info)
255
258
  end
256
- end # UnnecessaryExpectation
259
+ end
257
260
 
258
- include Concord.new(:map), Adamantium
261
+ include Adamantium
262
+ include Concord.new(:map)
259
263
 
260
264
  # Assert that we expect to encounter the provided exception for this path
261
265
  #
@@ -295,7 +299,7 @@ module MutestSpec
295
299
  def to_h
296
300
  map
297
301
  end
298
- end # ErrorWhitelist
302
+ end
299
303
 
300
304
  LOADER =
301
305
  Morpher.build do
@@ -326,6 +330,6 @@ module MutestSpec
326
330
  end
327
331
 
328
332
  ALL = LOADER.call(YAML.load_file(ROOT.join('spec', 'integrations.yml')))
329
- end # Project
330
- end # Corpus
331
- end # MutestSpec
333
+ end
334
+ end
335
+ end
@@ -11,13 +11,15 @@ module FakeActor
11
11
  end
12
12
 
13
13
  def verify(other)
14
- fail "Got:\n#{other.inspect}\nExpected:\n#{inspect}" unless eql?(other)
15
- block.call(other.message) if block
14
+ raise "Got:\n#{other.inspect}\nExpected:\n#{inspect}" unless eql?(other)
15
+
16
+ block&.call(other.message)
16
17
  end
17
- end # Expectation
18
+ end
18
19
 
19
20
  class MessageSequence
20
- include Adamantium::Flat, Concord::Public.new(:messages)
21
+ include Concord::Public.new(:messages)
22
+ include Adamantium::Flat
21
23
 
22
24
  def self.new
23
25
  super([])
@@ -29,23 +31,26 @@ module FakeActor
29
31
  end
30
32
 
31
33
  def sending(expectation)
32
- fail "Unexpected send: #{expectation.inspect}" if messages.empty?
34
+ raise "Unexpected send: #{expectation.inspect}" if messages.empty?
35
+
33
36
  expected = messages.shift
34
37
  expected.verify(expectation)
35
38
  self
36
39
  end
37
40
 
38
41
  def receiving(name)
39
- fail "No message to read for #{name.inspect}" if messages.empty?
42
+ raise "No message to read for #{name.inspect}" if messages.empty?
43
+
40
44
  expected = messages.shift
41
- fail "Unexpected message #{expected.inspect} for #{name.inspect}" unless expected.name.eql?(name)
45
+ raise "Unexpected message #{expected.inspect} for #{name.inspect}" unless expected.name.eql?(name)
46
+
42
47
  expected.message
43
48
  end
44
49
 
45
50
  def consumed?
46
51
  messages.empty?
47
52
  end
48
- end # MessageSequence
53
+ end
49
54
 
50
55
  class Env
51
56
  include Concord.new(:messages, :mailbox_names)
@@ -68,10 +73,10 @@ module FakeActor
68
73
 
69
74
  def next_name
70
75
  @mailbox_names.shift.tap do |name|
71
- name or fail 'Tried to spawn actor when no name available'
76
+ name or raise 'Tried to spawn actor when no name available'
72
77
  end
73
78
  end
74
- end # Env
79
+ end
75
80
 
76
81
  class Mailbox
77
82
  include Concord.new(:name, :messages)
@@ -87,7 +92,7 @@ module FakeActor
87
92
  def bind(sender)
88
93
  Mutest::Actor::Binding.new(self, sender)
89
94
  end
90
- end # Mailbox
95
+ end
91
96
 
92
97
  class Sender
93
98
  include Concord.new(:name, :messages)
@@ -95,7 +100,7 @@ module FakeActor
95
100
  def call(message)
96
101
  messages.sending(Expectation.new(name, message))
97
102
  end
98
- end # Sender
103
+ end
99
104
 
100
105
  class Receiver
101
106
  include Concord::Public.new(:name, :messages)
@@ -103,5 +108,5 @@ module FakeActor
103
108
  def call
104
109
  messages.receiving(name)
105
110
  end
106
- end # Receiver
107
- end # FakeActor
111
+ end
112
+ end
@@ -6,7 +6,8 @@ module MutestSpec
6
6
  requires: []
7
7
  )
8
8
 
9
- include Adamantium, Anima.new(*DEFAULTS.keys)
9
+ include Anima.new(*DEFAULTS.keys)
10
+ include Adamantium
10
11
 
11
12
  def self.new(attributes = DEFAULTS)
12
13
  super(DEFAULTS.merge(attributes))
@@ -15,10 +16,11 @@ module MutestSpec
15
16
  DOES_NOT_EXIST = new
16
17
 
17
18
  alias_method :file?, :file
18
- end # FileState
19
+ end
19
20
 
20
21
  class FakePathname
21
- include Adamantium, Concord.new(:file_system, :pathname)
22
+ include Concord.new(:file_system, :pathname)
23
+ include Adamantium
22
24
 
23
25
  def join(*arguments)
24
26
  self.class.new(
@@ -44,10 +46,11 @@ module MutestSpec
44
46
  def state
45
47
  file_system.state(pathname.to_s)
46
48
  end
47
- end # FakePathname
49
+ end
48
50
 
49
51
  class FileSystem
50
- include Adamantium, Concord.new(:file_states)
52
+ include Concord.new(:file_states)
53
+ include Adamantium
51
54
 
52
55
  def state(filename)
53
56
  file_states.fetch(filename, FileState::DOES_NOT_EXIST)
@@ -56,5 +59,5 @@ module MutestSpec
56
59
  def path(filename)
57
60
  FakePathname.new(self, Pathname.new(filename))
58
61
  end
59
- end # FileSystem
60
- end # MutestSpec
62
+ end
63
+ end
@@ -3,6 +3,6 @@ require 'ice_nine'
3
3
  module IceNine
4
4
  class Freezer
5
5
  class RSpec < NoFreeze
6
- end # RSpec
7
- end # Freezer
8
- end # IceNine
6
+ end
7
+ end
8
+ end
@@ -8,15 +8,16 @@ module MutestSpec
8
8
  # An event being observed by the VM handlers
9
9
  class EventObservation
10
10
  include Concord::Public.new(:type, :payload)
11
- end # EventObservation
11
+ end
12
12
 
13
13
  # An event being expected, can advance the VM
14
14
  class EventExpectation
15
- include AbstractType, Anima.new(
15
+ include Anima.new(
16
16
  :expected_payload,
17
17
  :trigger_requires,
18
18
  :return_value
19
19
  )
20
+ include AbstractType
20
21
 
21
22
  DEFAULTS = IceNine.deep_freeze(trigger_requires: [])
22
23
 
@@ -25,9 +26,7 @@ module MutestSpec
25
26
  end
26
27
 
27
28
  def handle(vm, observation)
28
- unless match?(observation)
29
- fail "Unexpected event observation: #{observation.inspect}, expected #{inspect}"
30
- end
29
+ raise "Unexpected event observation: #{observation.inspect}, expected #{inspect}" unless match?(observation)
31
30
 
32
31
  trigger_requires.each(&vm.method(:require))
33
32
 
@@ -42,12 +41,12 @@ module MutestSpec
42
41
 
43
42
  # Expectation and advance on require calls
44
43
  class Require < self
45
- end # Require
44
+ end
46
45
 
47
46
  # Expectation and advance on eval calls
48
47
  class Eval < self
49
- end # Eval
50
- end # EventExpectation
48
+ end
49
+ end
51
50
 
52
51
  # A fake implementation of Kernel#require
53
52
  def require(logical_name)
@@ -74,9 +73,9 @@ module MutestSpec
74
73
  private
75
74
 
76
75
  def handle_event(observation)
77
- fail "Unexpected event: #{observation.type} / #{observation.payload}" if expected_events.empty?
76
+ raise "Unexpected event: #{observation.type} / #{observation.payload}" if expected_events.empty?
78
77
 
79
78
  expected_events.slice!(0).handle(self, observation).return_value
80
79
  end
81
- end # RubyVM
82
- end # MutestSpec
80
+ end
81
+ end
@@ -122,4 +122,4 @@ module SharedContext
122
122
  )
123
123
  end
124
124
  end
125
- end # SharedContext
125
+ end
@@ -2,4 +2,4 @@ module TestApp
2
2
  def self.root
3
3
  File.expand_path('../../../test_app', __FILE__)
4
4
  end
5
- end # TestApp
5
+ end
@@ -17,7 +17,7 @@ module MutestSpec
17
17
  def self.assert_no_warnings
18
18
  return if EXTRACTOR.warnings.empty?
19
19
 
20
- fail UnexpectedWarnings, EXTRACTOR.warnings.to_a
20
+ raise UnexpectedWarnings, EXTRACTOR.warnings.to_a
21
21
  end
22
22
 
23
23
  class UnexpectedWarnings < StandardError
@@ -26,12 +26,13 @@ module MutestSpec
26
26
  def initialize(warnings)
27
27
  super(MSG % warnings.join("\n"))
28
28
  end
29
- end # UnexpectedWarnings
29
+ end
30
30
 
31
31
  class Extractor < DelegateClass(IO)
32
- PATTERN = /\A(?:.+):(?:\d+): warning: (?:.+)\n\z/
32
+ PATTERN = /\A(?:.+):(?:\d+): warning: (?:.+)\n\z/.freeze
33
33
 
34
- include Equalizer.new(:whitelist, :seen, :io), Memoizable
34
+ include Memoizable
35
+ include Equalizer.new(:whitelist, :seen, :io)
35
36
 
36
37
  def initialize(io, whitelist)
37
38
  @whitelist = whitelist
@@ -63,11 +64,11 @@ module MutestSpec
63
64
  end
64
65
 
65
66
  attr_reader :whitelist, :seen, :io
66
- end # Extractor
67
+ end
67
68
 
68
69
  warnings = Pathname.new(__dir__).join('warnings.yml').freeze
69
70
  whitelist = IceNine.deep_freeze(YAML.safe_load(warnings.read))
70
71
 
71
72
  EXTRACTOR = Extractor.new(STDERR, whitelist)
72
- end # Warning
73
- end # MutestSpec
73
+ end
74
+ end