Class: Mutineer::Mutation
- Inherits:
-
Data
- Object
- Data
- Mutineer::Mutation
- Defined in:
- lib/mutineer/mutation.rb
Overview
One atomic byte-range edit.
Immutable. One mutation per mutant — never combine. Source is mutated textually, never regenerated from the AST.
Instance Attribute Summary collapse
-
#end_offset ⇒ Object
readonly
Returns the value of attribute end_offset.
-
#operator ⇒ Object
readonly
Returns the value of attribute operator.
-
#replacement ⇒ Object
readonly
Returns the value of attribute replacement.
-
#start_offset ⇒ Object
readonly
Returns the value of attribute start_offset.
Instance Method Summary collapse
-
#apply(source) ⇒ String
Applies the mutation to source text.
-
#valid?(source) ⇒ Boolean
Checks whether the mutated source still parses cleanly.
Instance Attribute Details
#end_offset ⇒ Object (readonly)
Returns the value of attribute end_offset
10 11 12 |
# File 'lib/mutineer/mutation.rb', line 10 def end_offset @end_offset end |
#operator ⇒ Object (readonly)
Returns the value of attribute operator
10 11 12 |
# File 'lib/mutineer/mutation.rb', line 10 def operator @operator end |
#replacement ⇒ Object (readonly)
Returns the value of attribute replacement
10 11 12 |
# File 'lib/mutineer/mutation.rb', line 10 def replacement @replacement end |
#start_offset ⇒ Object (readonly)
Returns the value of attribute start_offset
10 11 12 |
# File 'lib/mutineer/mutation.rb', line 10 def start_offset @start_offset end |
Instance Method Details
#apply(source) ⇒ String
Applies the mutation to source text.
15 16 17 |
# File 'lib/mutineer/mutation.rb', line 15 def apply(source) source.byteslice(0, start_offset) + replacement + source.byteslice(end_offset..) end |
#valid?(source) ⇒ Boolean
Checks whether the mutated source still parses cleanly.
23 24 25 |
# File 'lib/mutineer/mutation.rb', line 23 def valid?(source) Parser.parse_string(apply(source)).errors.empty? end |