From f6d80ec965eb63f412f8fb1c8dafe23be8981e08 Mon Sep 17 00:00:00 2001 From: Daniel Gollahon Date: Sat, 18 Mar 2017 17:12:00 -0700 Subject: [PATCH] Mutate block-pass arguments - These were previously not recursing and being mutated. - Remove Noop mutator--this behavior (AFAICT) is equivalent to just being a node in the generic list. The `cbase` node still gets deleted. --- CHANGELOG.md | 4 ++++ lib/mutest.rb | 2 +- lib/mutest/mutator/node/{noop.rb => block_pass.rb} | 11 ++++++----- lib/mutest/mutator/node/generic.rb | 1 + meta/block_pass.rb | 10 +++++++++- meta/send.rb | 2 ++ 6 files changed, 23 insertions(+), 7 deletions(-) rename lib/mutest/mutator/node/{noop.rb => block_pass.rb} (59%) diff --git a/CHANGELOG.md b/CHANGELOG.md index 3e1f1fdc..3862258f 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -6,6 +6,10 @@ The format is based on [Keep a Changelog](http://keepachangelog.com/). ## [Master (Unreleased)] +### Added + +- Block-pass mutations (`foo(&method(:bar))` -> `foo(&public_method(:bar))`) [[#54](https://github.com/backus/mutest/pull/54/files) ([@dgollahon][])] + ## [0.0.6] - 2017-03-04 ### Fixed diff --git a/lib/mutest.rb b/lib/mutest.rb index 377696c7..62a90889 100644 --- a/lib/mutest.rb +++ b/lib/mutest.rb @@ -123,7 +123,7 @@ def self.ci? require 'mutest/mutator/node/named_value/variable_assignment' require 'mutest/mutator/node/next' require 'mutest/mutator/node/break' -require 'mutest/mutator/node/noop' +require 'mutest/mutator/node/block_pass' require 'mutest/mutator/node/or_asgn' require 'mutest/mutator/node/and_asgn' require 'mutest/mutator/node/defined' diff --git a/lib/mutest/mutator/node/noop.rb b/lib/mutest/mutator/node/block_pass.rb similarity index 59% rename from lib/mutest/mutator/node/noop.rb rename to lib/mutest/mutator/node/block_pass.rb index 5a1b037b..e906e5b4 100644 --- a/lib/mutest/mutator/node/noop.rb +++ b/lib/mutest/mutator/node/block_pass.rb @@ -1,9 +1,10 @@ module Mutest class Mutator class Node - # Mutation emitter to handle noop nodes - class Noop < self - handle(:block_pass, :cbase) + class BlockPass < self + handle(:block_pass) + + children :arg private @@ -11,9 +12,9 @@ class Noop < self # # @return [undefined] def dispatch - # noop + emit_arg_mutations end - end # Noop + end # BlockPass end # Node end # Mutator end # Mutest diff --git a/lib/mutest/mutator/node/generic.rb b/lib/mutest/mutator/node/generic.rb index 9ca6ebf5..369f8e20 100644 --- a/lib/mutest/mutator/node/generic.rb +++ b/lib/mutest/mutator/node/generic.rb @@ -4,6 +4,7 @@ class Node # Generic mutator class Generic < self unsupported_nodes = %i[ + cbase ensure redo retry diff --git a/meta/block_pass.rb b/meta/block_pass.rb index a5d0fd0b..f6e88024 100644 --- a/meta/block_pass.rb +++ b/meta/block_pass.rb @@ -1,6 +1,14 @@ Mutest::Meta::Example.add :block_pass do - source 'foo(&bar)' + source 'foo(&method(:bar))' singleton_mutations mutation 'foo' + mutation 'foo(&nil)' + mutation 'foo(&self)' + mutation 'foo(&method)' + mutation 'foo(&method(nil))' + mutation 'foo(&method(self))' + mutation 'foo(&method(:bar__mutest__))' + mutation 'foo(&public_method(:bar))' + mutation 'foo(&:bar)' end diff --git a/meta/send.rb b/meta/send.rb index 2e9181f8..c7266f21 100644 --- a/meta/send.rb +++ b/meta/send.rb @@ -404,6 +404,8 @@ singleton_mutations mutation 'foo' + mutation 'foo(&nil)' + mutation 'foo(&self)' end Mutest::Meta::Example.add :send do