diff --git a/lib/mutant.rb b/lib/mutant.rb index 1d5745c0..6be0ccf8 100644 --- a/lib/mutant.rb +++ b/lib/mutant.rb @@ -58,6 +58,7 @@ require 'mutant/mutator/node/argument' require 'mutant/mutator/node/arguments' require 'mutant/mutator/node/begin' require 'mutant/mutator/node/named_value/access' +require 'mutant/mutator/node/named_value/constant_assignment' require 'mutant/mutator/node/named_value/variable_assignment' require 'mutant/mutator/node/while' require 'mutant/mutator/node/super' diff --git a/lib/mutant/mutator/node/generic.rb b/lib/mutant/mutator/node/generic.rb index 645184d5..0bab9dd1 100644 --- a/lib/mutant/mutator/node/generic.rb +++ b/lib/mutant/mutator/node/generic.rb @@ -14,7 +14,7 @@ module Mutant :next, :break, :match, :ensure, :dstr, :dsym, :yield, :rescue, :redo, :defined?, :blockarg, :block_pass, :op_asgn, :and_asgn, - :regopt, :restarg, :casgn, :resbody, :retry, :arg_expr, + :regopt, :restarg, :resbody, :retry, :arg_expr, :kwrestarg, :kwoptarg, :kwarg, :undef, :module, :cbase, :empty, :alias, :for, :xstr, :back_ref, :nth_ref, :class, :sclass, :match_with_lvasgn, :match_current_line, :or_asgn, :kwbegin diff --git a/lib/mutant/mutator/node/named_value/constant_assignment.rb b/lib/mutant/mutator/node/named_value/constant_assignment.rb new file mode 100644 index 00000000..00a63ea7 --- /dev/null +++ b/lib/mutant/mutator/node/named_value/constant_assignment.rb @@ -0,0 +1,42 @@ +module Mutant + class Mutator + class Node + module NamedValue + + # Mutation emitter to handle constant assignment nodes + class ConstantAssignment < Node + + children :cbase, :name, :value + + handle :casgn + + private + + # Perform dispatch + # + # @return [undefined] + # + # @api private + # + def dispatch + mutate_name + emit_value_mutations if value + end + + # Emit name mutations + # + # @return [undefined] + # + # @api private + # + def mutate_name + Mutator::Util::Symbol.each(name, self) do |name| + emit_name(name.upcase) + end + end + + end # ConstantAssignment + end # NamedValue + end # Node + end # Mutator +end # Mutant diff --git a/spec/unit/mutant/mutator/node/named_value/constant_assignment/mutation_spec.rb b/spec/unit/mutant/mutator/node/named_value/constant_assignment/mutation_spec.rb new file mode 100644 index 00000000..06b96009 --- /dev/null +++ b/spec/unit/mutant/mutator/node/named_value/constant_assignment/mutation_spec.rb @@ -0,0 +1,20 @@ +require 'spec_helper' + +describe Mutant::Mutator::Node::NamedValue::VariableAssignment, 'mutations' do + + before do + Mutant::Random.stub(:hex_string => :RANDOM) + end + + 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