mutant 0.12.0 → 0.12.1

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 4e8ba758de42528dd4dd4fdb5686df439d9ea4e2b1635905e89d7a98b904b959
4
- data.tar.gz: df2317b0cabc5964fec52e0fc1d7e76c0f368a01f713fa411f03cba4808b834a
3
+ metadata.gz: 0e1cf4d744b27691dff3986c4af5dddd278e6eadcc348a9cd0d4b5e16fa22514
4
+ data.tar.gz: 77913d65e176d5150b17ca03ec5b05398dee759dfea2ad89dd438eeaf72e34f8
5
5
  SHA512:
6
- metadata.gz: 3b74495aa82f4489e22a95b5c25f3185d759fa616354af51c07544bb66be08f69becf8e5021db80008d169c2de12e677bf8a3a38becb954c32dc8287f1eea24d
7
- data.tar.gz: 82e7bdc18591e89028a39a3489291452b0b73cc4bcc6ea7549e9fa376778de622ac53bd4a2dbbe7702ff875eb9d84f55b6fa1ad424e55bfb0e4c7bdaa7243d13
6
+ metadata.gz: 6d8ec46587bb0b896b0322b57766a6e8bbe51ea00777e538cacd5f6a329d1a3e47c513ccaec720050a3a37049e65dc9be627f25006cc0404cb294fb0ba0a55d6
7
+ data.tar.gz: d0f457130db225049774066ad235cc00db9f3c1ca75c9994c618798a94567867fb21c84059c0a3878ae88736ad9b4d325b2e75f552bef583cd3cb846e48fc0c9
@@ -18,9 +18,10 @@ module Mutant
18
18
  # @return [Result::Test]
19
19
  def call(_tests)
20
20
  Result::Test.new(
21
- output: '',
22
- passed: true,
23
- runtime: 0.0
21
+ job_index: nil,
22
+ output: '',
23
+ passed: true,
24
+ runtime: 0.0
24
25
  )
25
26
  end
26
27
 
@@ -50,5 +50,6 @@ module Mutant
50
50
  expression.prefix?(subject.expression)
51
51
  end
52
52
  end
53
+ private_class_method :ignore_subject?
53
54
  end # Matcher
54
55
  end # Mutant
@@ -21,14 +21,22 @@ module Mutant
21
21
  all?: %i[any?],
22
22
  any?: %i[all?],
23
23
  at: %i[fetch key?],
24
+ detect: %i[first last],
24
25
  fetch: %i[key?],
26
+ find: %i[first last],
27
+ first: %i[last],
25
28
  flat_map: %i[map],
26
29
  gsub: %i[sub],
27
30
  is_a?: %i[instance_of?],
28
31
  kind_of?: %i[instance_of?],
32
+ last: %i[first],
29
33
  map: %i[each],
30
34
  match: %i[match?],
35
+ max: %i[first last],
36
+ max_by: %i[first last],
31
37
  method: %i[public_method],
38
+ min: %i[first last],
39
+ min_by: %i[first last],
32
40
  reverse_each: %i[each],
33
41
  reverse_map: %i[map each],
34
42
  reverse_merge: %i[merge],
@@ -49,6 +57,8 @@ module Mutant
49
57
  .tap do |replacements|
50
58
  replacements.delete(:==)
51
59
  replacements.delete(:eql?)
60
+ replacements.delete(:first)
61
+ replacements.delete(:last)
52
62
  end
53
63
  .freeze
54
64
  end
@@ -21,11 +21,11 @@ module Mutant
21
21
  attr_reader :log
22
22
 
23
23
  def error
24
- @errors.first
24
+ Util.max_one(@errors)
25
25
  end
26
26
 
27
27
  def result
28
- @results.first
28
+ Util.max_one(@results)
29
29
  end
30
30
 
31
31
  def initialize(*)
@@ -96,7 +96,7 @@ module Mutant
96
96
  end
97
97
 
98
98
  def length
99
- @lengths.first
99
+ Util.max_one(@lengths)
100
100
  end
101
101
 
102
102
  def advance_log
@@ -68,7 +68,7 @@ module Mutant
68
68
  #
69
69
  # @return [undefined]
70
70
  def run
71
- visit_collection(Result, object.failed_test_results)
71
+ visit_failed
72
72
  visit(Env, object.env)
73
73
  FORMATS.each do |report, format, value|
74
74
  __send__(report, format, __send__(value))
@@ -77,6 +77,27 @@ module Mutant
77
77
 
78
78
  private
79
79
 
80
+ def visit_failed
81
+ failed = object.failed_test_results
82
+
83
+ if object.env.config.fail_fast
84
+ visit_failed_tests(failed.take(1))
85
+ visit_other_failed(failed.drop(1))
86
+ else
87
+ visit_failed_tests(failed)
88
+ end
89
+ end
90
+
91
+ def visit_other_failed(other)
92
+ return if other.empty?
93
+
94
+ puts('Other failed tests (report suppressed from fail fast): %d' % other.length)
95
+ end
96
+
97
+ def visit_failed_tests(failed)
98
+ visit_collection(Result, failed)
99
+ end
100
+
80
101
  def efficiency_percent
81
102
  (testtime / runtime) * 100
82
103
  end
data/lib/mutant/result.rb CHANGED
@@ -158,7 +158,7 @@ module Mutant
158
158
 
159
159
  # Test result
160
160
  class Test
161
- include Anima.new(:passed, :runtime, :output)
161
+ include Anima.new(:job_index, :passed, :runtime, :output)
162
162
 
163
163
  alias_method :success?, :passed
164
164
 
@@ -170,9 +170,10 @@ module Mutant
170
170
  # @return [undefined]
171
171
  def initialize
172
172
  super(
173
- output: '',
174
- passed: false,
175
- runtime: 0.0
173
+ job_index: nil,
174
+ output: '',
175
+ passed: false,
176
+ runtime: 0.0
176
177
  )
177
178
  end
178
179
  end # VoidValue
@@ -22,7 +22,7 @@ module Mutant
22
22
  Result::TestEnv.new(
23
23
  env: env,
24
24
  runtime: env.world.timer.now - @start,
25
- test_results: @test_results
25
+ test_results: @test_results.sort_by!(&:job_index)
26
26
  )
27
27
  end
28
28
 
@@ -42,7 +42,11 @@ module Mutant
42
42
  fail response.error
43
43
  end
44
44
 
45
- @test_results << response.result.with(output: response.log)
45
+ @test_results << response.result.with(
46
+ job_index: response.job.index,
47
+ output: response.log
48
+ )
49
+
46
50
  self
47
51
  end
48
52
  end # Sink
data/lib/mutant/util.rb CHANGED
@@ -12,9 +12,30 @@ module Mutant
12
12
  #
13
13
  # @return [Object] first entry
14
14
  def self.one(array)
15
- return array.first if array.one?
15
+ case array
16
+ in [value]
17
+ value
18
+ else
19
+ fail SizeError, "expected size to be exactly 1 but size was #{array.size}"
20
+ end
21
+ end
16
22
 
17
- fail SizeError, "expected size to be exactly 1 but size was #{array.size}"
23
+ # Return only element in array if it contains max one member
24
+ #
25
+ # @param array [Array]
26
+ #
27
+ # @return [Object] first entry
28
+ # @return [nil] if empty
29
+ #
30
+ # rubocop:disable Lint/EmptyInPattern
31
+ def self.max_one(array)
32
+ case array
33
+ in []
34
+ in [value]
35
+ value
36
+ else
37
+ fail SizeError, "expected size to be max 1 but size was #{array.size}"
38
+ end
18
39
  end
19
40
  end # Util
20
41
  end # Mutant
@@ -2,5 +2,5 @@
2
2
 
3
3
  module Mutant
4
4
  # Current mutant version
5
- VERSION = '0.12.0'
5
+ VERSION = '0.12.1'
6
6
  end # Mutant
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: mutant
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.12.0
4
+ version: 0.12.1
5
5
  platform: ruby
6
6
  authors:
7
7
  - Markus Schirp
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2024-04-22 00:00:00.000000000 Z
11
+ date: 2024-05-12 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: diff-lcs