Add global, local and instance variable assignment mutators
This commit is contained in:
parent
9e51c44c1f
commit
cbdc84db88
5 changed files with 114 additions and 28 deletions
|
@ -83,6 +83,7 @@ require 'mutant/mutator/node/literal/nil'
|
|||
require 'mutant/mutator/node/block'
|
||||
require 'mutant/mutator/node/noop'
|
||||
require 'mutant/mutator/node/send'
|
||||
require 'mutant/mutator/node/assignment'
|
||||
require 'mutant/mutator/node/define'
|
||||
require 'mutant/mutator/node/formal_arguments_19'
|
||||
require 'mutant/mutator/node/formal_arguments_19/default_mutations'
|
||||
|
@ -93,7 +94,6 @@ require 'mutant/mutator/node/pattern_arguments'
|
|||
require 'mutant/mutator/node/pattern_variable'
|
||||
require 'mutant/mutator/node/default_arguments'
|
||||
require 'mutant/mutator/node/return'
|
||||
require 'mutant/mutator/node/local_variable_assignment'
|
||||
require 'mutant/mutator/node/iter_19'
|
||||
require 'mutant/mutator/node/if_statement'
|
||||
require 'mutant/mutator/node/receiver_case'
|
||||
|
|
48
lib/mutant/mutator/node/assignment.rb
Normal file
48
lib/mutant/mutator/node/assignment.rb
Normal file
|
@ -0,0 +1,48 @@
|
|||
module Mutant
|
||||
class Mutator
|
||||
class Node
|
||||
class Assignment < self
|
||||
|
||||
private
|
||||
|
||||
class Variable < self
|
||||
|
||||
# Emit mutants
|
||||
#
|
||||
# @return [undefined]
|
||||
#
|
||||
# @api private
|
||||
#
|
||||
def dispatch
|
||||
emit_attribute_mutations(:name) do |mutation|
|
||||
mutation.name = "#{self.class::PREFIX}#{mutation.name}".to_sym
|
||||
end
|
||||
emit_attribute_mutations(:value)
|
||||
end
|
||||
|
||||
class Local < self
|
||||
PREFIX = ''.freeze
|
||||
handle(Rubinius::AST::LocalVariableAssignment)
|
||||
end
|
||||
|
||||
class Instance < self
|
||||
PREFIX = '@'.freeze
|
||||
handle(Rubinius::AST::InstanceVariableAssignment)
|
||||
end
|
||||
|
||||
class Class < self
|
||||
PREFIX = '@@'.freeze
|
||||
handle(Rubinius::AST::ClassVariableAssignment)
|
||||
end
|
||||
|
||||
class Global < self
|
||||
PREFIX = '$'.freeze
|
||||
handle(Rubinius::AST::GlobalVariableAssignment)
|
||||
end
|
||||
|
||||
end
|
||||
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
|
@ -1,25 +0,0 @@
|
|||
module Mutant
|
||||
class Mutator
|
||||
class Node
|
||||
class LocalVariableAssignment < self
|
||||
|
||||
handle(Rubinius::AST::LocalVariableAssignment)
|
||||
|
||||
private
|
||||
|
||||
# Emit mutants
|
||||
#
|
||||
# @return [undefined]
|
||||
#
|
||||
# @api private
|
||||
#
|
||||
def dispatch
|
||||
emit_attribute_mutations(:name)
|
||||
emit_attribute_mutations(:value)
|
||||
end
|
||||
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
||||
|
|
@ -22,12 +22,11 @@ module Mutant
|
|||
handle(Rubinius::AST::ZSuper)
|
||||
handle(Rubinius::AST::MultipleAssignment)
|
||||
handle(Rubinius::AST::ScopedConstant)
|
||||
handle(Rubinius::AST::LocalVariableAssignment)
|
||||
handle(Rubinius::AST::LocalVariableAccess)
|
||||
handle(Rubinius::AST::InstanceVariableAssignment)
|
||||
handle(Rubinius::AST::InstanceVariableAccess)
|
||||
handle(Rubinius::AST::GlobalVariableAssignment)
|
||||
handle(Rubinius::AST::GlobalVariableAccess)
|
||||
handle(Rubinius::AST::ClassVariableAccess)
|
||||
handle(Rubinius::AST::ToplevelConstant)
|
||||
handle(Rubinius::AST::Ensure)
|
||||
handle(Rubinius::AST::Rescue)
|
||||
|
|
64
spec/unit/mutant/mutator/node/assignment/mutation_spec.rb
Normal file
64
spec/unit/mutant/mutator/node/assignment/mutation_spec.rb
Normal file
|
@ -0,0 +1,64 @@
|
|||
require 'spec_helper'
|
||||
|
||||
describe Mutant::Mutator::Node::Assignment, 'mutations' do
|
||||
|
||||
before do
|
||||
Mutant::Random.stub(:hex_string => :random)
|
||||
end
|
||||
|
||||
context 'global variable' do
|
||||
let(:source) { '$a = true' }
|
||||
|
||||
let(:mutations) do
|
||||
mutations = []
|
||||
|
||||
mutations << '$srandom = true'
|
||||
mutations << '$a = false'
|
||||
mutations << '$a = nil'
|
||||
end
|
||||
|
||||
it_should_behave_like 'a mutator'
|
||||
end
|
||||
|
||||
context 'class variable' do
|
||||
let(:source) { '@@a = true' }
|
||||
|
||||
let(:mutations) do
|
||||
mutations = []
|
||||
|
||||
mutations << '@@srandom = true'
|
||||
mutations << '@@a = false'
|
||||
mutations << '@@a = nil'
|
||||
end
|
||||
|
||||
it_should_behave_like 'a mutator'
|
||||
end
|
||||
|
||||
context 'instance variable' do
|
||||
let(:source) { '@a = true' }
|
||||
|
||||
let(:mutations) do
|
||||
mutations = []
|
||||
|
||||
mutations << '@srandom = true'
|
||||
mutations << '@a = false'
|
||||
mutations << '@a = nil'
|
||||
end
|
||||
|
||||
it_should_behave_like 'a mutator'
|
||||
end
|
||||
|
||||
context 'local variable' do
|
||||
let(:source) { 'a = true' }
|
||||
|
||||
let(:mutations) do
|
||||
mutations = []
|
||||
|
||||
mutations << 'srandom = true'
|
||||
mutations << 'a = false'
|
||||
mutations << 'a = nil'
|
||||
end
|
||||
|
||||
it_should_behave_like 'a mutator'
|
||||
end
|
||||
end
|
Loading…
Add table
Reference in a new issue