mutiny 0.2.5 → 0.2.6

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
  SHA1:
3
- metadata.gz: ca31e6c61eac704333513e20a7ba33416eacb370
4
- data.tar.gz: 2c08a4a4337d1d6c9a842f995baa993c9f7ea460
3
+ metadata.gz: 82f8ce8c2e31d5a113f71eb05cae910a1e0942ae
4
+ data.tar.gz: 2f39cf42e45814019566e7729fc12cc76c74c812
5
5
  SHA512:
6
- metadata.gz: deb63bad6550131c72454459b7eafd301f7ad5b4641498e42b262a17dacf7f77636a790daa15addb55bf749f410845eea82843f5cacc5e8324606505d400988a
7
- data.tar.gz: 649fdc273f4e3ab181e7cb0f806b78996754d08f9beb2e98627a7dbca59aae5f9cafde975e6351c9ecc2d97e1c94d8c5b968ec90287b043e631ba746c4aa61d1
6
+ metadata.gz: 4161257ca1df94e4ff122a14261affb7dcf9637d1e9b6e96de9be70c39b1f7d6563a58acce9e083732d3ac6af9f6f3013e148cf1acbcb27f95467cc043a24899
7
+ data.tar.gz: 0029e46e1070c21440256a86e75e3db603e160ff741d910075d405a601d42d7f8e3c374bf8d6cc07407c1002bf0113e80bc0b9662fde45a13b38293a2b73d358
data/Gemfile.lock CHANGED
@@ -1,7 +1,7 @@
1
1
  PATH
2
2
  remote: .
3
3
  specs:
4
- mutiny (0.2.5)
4
+ mutiny (0.2.6)
5
5
  gli (~> 2.13.0)
6
6
  metamorpher (~> 0.2.2)
7
7
  parser (~> 2.2.2)
data/RELEASES.md CHANGED
@@ -1,5 +1,8 @@
1
1
  # Release History
2
2
 
3
+ ## v0.2.6 (17 February 2016)
4
+ * A mutant's position now carries information about the affected range in the subject, as well as in the mutated code.
5
+
3
6
  ## v0.2.5 (16 February 2016)
4
7
  * Fix bug in the --cached switch of the score command, which was preventing mutants being correctly loaded from disk on Linux.
5
8
  * Fix bug in the --cached switch of the score command, which was causing mutiny to report the incorrect path to subject files.
@@ -2,17 +2,19 @@ module Mutiny
2
2
  module Mutants
3
3
  class Mutant
4
4
  class Location
5
- attr_reader :position, :content
5
+ attr_reader :old_position, :new_position, :content
6
6
 
7
7
  def initialize(position:, content:)
8
- @position = position.freeze
8
+ position ||= {}
9
+ @old_position = position[:old].freeze
10
+ @new_position = position[:new].freeze
9
11
  @content = content
10
12
  end
11
13
 
12
14
  def lines
13
15
  Range.new(
14
- line_number_of_offset(position.begin),
15
- line_number_of_offset(position.end)
16
+ line_number_of_offset(new_position.begin),
17
+ line_number_of_offset(new_position.end)
16
18
  )
17
19
  end
18
20
 
@@ -38,10 +38,7 @@ module Mutiny
38
38
  positions = []
39
39
 
40
40
  code = mutation.mutate_file(path) do |change|
41
- starting_position = change.original_position.begin
42
- ending_position = change.original_position.begin + change.transformed_code.size - 1
43
-
44
- positions << (starting_position..ending_position)
41
+ positions << extract_position(change)
45
42
  end
46
43
 
47
44
  code.zip(positions)
@@ -49,6 +46,15 @@ module Mutiny
49
46
  msg = "Error encountered whilst mutating file at '#{path}' with #{mutation.name}"
50
47
  raise Mutation::Error, msg
51
48
  end
49
+
50
+ def extract_position(change)
51
+ old_start = change.original_position.begin
52
+ old_end = change.original_position.end
53
+ new_start = change.original_position.begin
54
+ new_end = change.original_position.begin + change.transformed_code.size - 1
55
+
56
+ { old: old_start..old_end, new: new_start..new_end }
57
+ end
52
58
  end
53
59
  end
54
60
  end
@@ -2,10 +2,12 @@ module Mutiny
2
2
  module Mutants
3
3
  class Storage
4
4
  class MutantFileContents
5
+ # rubocop:disable Metrics/AbcSize
5
6
  def serialise(mutant)
6
7
  "# " + mutant.subject.name + "\n" \
7
8
  "# " + mutant.mutation_name + "\n" \
8
- "# " + mutant.location.position.to_s + "\n" +
9
+ "# " + mutant.location.old_position.to_s + "\n" \
10
+ "# " + mutant.location.new_position.to_s + "\n" +
9
11
  mutant.code
10
12
  end
11
13
 
@@ -13,10 +15,14 @@ module Mutiny
13
15
  {
14
16
  subject: { name: extract_contents_of_comment(contents.lines[0]) },
15
17
  mutation_name: extract_contents_of_comment(contents.lines[1]),
16
- position: convert_to_range(extract_contents_of_comment(contents.lines[2])),
17
- code: contents.lines.drop(3).join
18
+ position: {
19
+ old: convert_to_range(extract_contents_of_comment(contents.lines[2])),
20
+ new: convert_to_range(extract_contents_of_comment(contents.lines[3]))
21
+ },
22
+ code: contents.lines.drop(4).join
18
23
  }
19
24
  end
25
+ # rubocop:enable Metrics/AbcSize
20
26
 
21
27
  private
22
28
 
@@ -1,3 +1,3 @@
1
1
  module Mutiny
2
- VERSION = "0.2.5"
2
+ VERSION = "0.2.6"
3
3
  end
@@ -4,15 +4,15 @@ module Mutiny
4
4
  describe Location do
5
5
  context "calculates lines" do
6
6
  it "correctly for a multi-line location" do
7
- # 0 1 2
8
- # 01234567 89012345678901 234
9
- location = Location.new(position: 3..21, content: "if BOMB\n raise 'boom'\nend")
7
+ # 0 1
8
+ # 01234567 890123 4567
9
+ location = Location.new(position: { new: 3..13 }, content: "if BOMB\n fail\nend")
10
10
 
11
11
  expect(location.lines).to eq(1..2)
12
12
  end
13
13
 
14
14
  it "correctly for a single-line location" do
15
- location = Location.new(position: 2..4, content: "a <= b\nb <= c")
15
+ location = Location.new(position: { new: 2..4 }, content: "a <= b\nb <= c")
16
16
 
17
17
  expect(location.lines).to eq(1..1)
18
18
  end
@@ -16,7 +16,7 @@ module Mutiny
16
16
  code: "2 - 2",
17
17
  index: 0,
18
18
  mutation_name: "BAOR",
19
- position: 2..3
19
+ position: { old: 2..3, new: 3..5 }
20
20
  )
21
21
  end
22
22
 
@@ -32,6 +32,7 @@ module Mutiny
32
32
  "# Two\n" \
33
33
  "# BAOR\n" \
34
34
  "# 2..3\n" \
35
+ "# 3..5\n" \
35
36
  "2 - 2"
36
37
  end
37
38
 
@@ -40,7 +41,7 @@ module Mutiny
40
41
  subject: { name: "Two" },
41
42
  mutation_name: "BAOR",
42
43
  code: "2 - 2",
43
- position: 2..3
44
+ position: { old: 2..3, new: 3..5 }
44
45
  }
45
46
  end
46
47
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: mutiny
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.2.5
4
+ version: 0.2.6
5
5
  platform: ruby
6
6
  authors:
7
7
  - Louis Rose
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2016-02-16 00:00:00.000000000 Z
11
+ date: 2016-02-17 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: parser