- Change to modern ast format via unparser-0.4.1.
- Replace internal timers with monotonic ones.
- Drop support for Ruby < 2.5
- Fix bug when mutating a module that includes Memoizable
- Add support for regexp unicode print nodes #749
- Drop support for Ruby < 2.3
- Use frozen string literals globally
- Update to parser ~> 2.5
- Support for rspec-3.x
- Fix boot time issue
- Support for rspec-3.7
- Support ruby 2.4 #719
- Allow empty match expressions on CLI
- Add support for rspec-3.6 by @krzysiek150
- Add support for configurable corpus glob exprssions by @jekuta
- Add mutation from
/foo|bar/
to/foo/
and/bar/
- Add mutation from
/$/
to/\z/
- Add mutation from
/\h/
to/\H/
- Add mutation from
/\H/
to/\h/
- Add mutation from
/\Z/
to/\z/
- Add mutation from
flat_map
tomap
- Add mutation from
/(foo)/
to/(?:foo)/
- Add mutation from
/a*/
to/a+/
- Add mutation from
/a*/
to/a/
- Add mutation from
!!foo
tofoo
- Add mutation from
proc { }
tolambda { }
- Add support for rspec-3.5
- Remove misleading
--debug
option - Remove misleading
--expect-coverage
option - Add basic support for regexp mutations (machinery and simple anchor mutations)
- Add support for mutating csend (duck tape operator) into regular sends
- Add mutation from
foo&.bar
tofoo.bar
- Add mutation from
#to_a
to#to_set
- Add mutation from
foo.dig(a, b)
tofoo.fetch(a).dig(b)
- Add mutation from
def foo(bar:); end
todef foo(_bar:); end
- Add mutation from
def foo(bar: baz); end
todef foo(_bar: baz); end
- Add mutation from
/regex/i
to/regex/
- Add mutation from
foo[n..-1]
tofoo.drop(n)
- Add mutation from
/^/
to/\A/
- Add mutation from
#first
to#last
- Add mutation from
#last
to#first
- Add mutation from
#sample
to#first
and#last
- Remove mutations from
1..n
to1..(0.0 / 0.0)
and1..(1.0 / 0.0)
- Add support for parser 2.3 (via unparser 0.2.5)
- Add mutation from
Hash#[]
toHash#key?
(#511) - Add mutation from
Hash#fetch
toHash#key?
(#511) - Add mutation from
#at
to#key?
(#511) - Add mutation from
Hash#values_at
toHash#fetch_values
(#510)
- Drop support for rspec-3.2
- Remove CI specific job number default
- Add support for rspec-3.3.4
- Add mutations/s performance metric to report
- Fix blackliting regexp to correctly match the String
(eval)
absolutely.
- Add mutation from
Date.parse
to more strict parsing methods #448 - Add mutation from
foo.to_i
toInteger(foo)
#455 - Add mutation from
@foo
tofoo
#454
- Fix misimplementation of block gluing operator that as side effect could also cause invalid AST crashes
- Add mutation from
a != b
to!a.eql?(b)
and!a.equal?(b)
#417 - Add mutation
A.const_get(:B)
->A::B
#426 - Add mutation
def foo(*args); end
intodef foo(*args); args = []; end
#423 - Add mutation from
foo.baz { bar }
tofoo.bar
#416 - Update anima dependency to 0.3.0
- Remove invalid mutation
super(...)
tosuper
- Add mutation from
def foo(a = true); end
todef foo(a = true); a = true; end
#419 - Add mutation from
def foo; end
toremove_method :foo
#413
- Remove invalid mutation
foo or bar
to!(foo or bar)
see #287 - Add mutation from
#to_h
to#to_hash
#218 - Add mutation from
super
tosuper()
#309 - Add mutation from
#defined?
totrue
/false
#399 - Reduce framed (multiline) progress reporter noise
- Fix a bug where killfork pipes where not properly closed
- Add --since flag to constrain mutated subjects based on repository diff from HEAD to other REVISON.
- Add mutation from #[] to #at / #fetch
- Some internal improvements
- Drop support for ruby < 2.1
- Remove broken
--code
option - Remove deprecated
--score
option - Add support for rspec-3.3
- End support for rspec-3.{0,1}
- Internal quality improvements
- Deprecate
--score
flag replace with--expected-coverage
- Set default job count to 4 under CI environments.
- Relax parser dependency to ~>2.2.2
- Kill imperfect float rounding for exact coverage expectations.
- Add support for rspec-3.2
- Fix crash on using the null integration.
- Bump deps to support MRI 2.2.
- Fix rspec example visibility on duplicate metadata examples #279.
- Add naked if/else body emitter #280.
- Fix communication between workers and killforks to work for all binaries.
- Fix synthetic race conditon in actor implementation
- Fix progressive reporter slowdown
- Fix invalid dependencies on rspec for mutant-rspec
- Use homegrown actor based parallelization
- Fix redundant spec execution in rspec integration
- Add mutation from
#send
to#__send__
(the canonical form).
- Fix duplicate neutral emit for memoized instance method subjects
- Fix neutral error detection edge cases
- Fix emitter to recurse into left and right of binary nodes.
- Fix killforks not to leak zombies.
- Do not buffer report prints, speedup large report generation.
- Fix some cases where --fail-fast semantics stopped far to late.
- Fix crashing / stuckage from using parallel in a nested way.
- Add support for rspec-3.1.
- Fix matcher to ignore metaprogrammed defines #254
- Add rescue resbody body concat-promotion mutation
- Add rescue else body concat-promotion mutation #245
- Incorrectly released on partial state. Yanked.
- Parallel execution / reporting.
- Add -j, --jobs flag to control concurrency.
- Fix blind spots on send with block.
- Add mutation from
foo { bar }
tobar
- Add mutation from
#reverse_merge
to#merge
- Add mutation from
#<=
to#<
,#==
,#eql?
,#equal?
- Add mutation from
#>=
to#>
,#==
,#eql?
,#equal?
- Add mutation from
#>
to#==
,#eql?
,#equal?
- Add mutation from
#<
to#==
,#eql?
,#equal?
- Fix reporting of diff errors to include context [tjchambers]
- Fix exceptions generation matcher errors
- Fix report generation with formatted string as payload of diffs.
- Make ordering of subjects and tests deterministic
- Fix performance of subject selection
- Improve noop and neutral reporting.
- Rename noop mutations to neutral mutations
- Simplify code nuked around 1kloc.
- Fix invalid AST on op_assign mutations
- Make subject matching result order deterministic
- Improve internals a bit for more consistency.
- Add instance methods expression 'Foo#'
- Add singleton methods expression 'Foo.'
- Split rspec2 and rspec3 integration with minimal duplication
- Move test matching outside of integrations.
- Propagate exceptions from child-isolation-killforks to master
- Fix invalid AST generation on operator method mutation with self as receiver.
- Readd mutation of index assignments
- Remove a bunch of useless mutations to nil.something
- Readd mutation of index reference arguments
-
Remove support for matchers prefixed with ::
-
Fix cases where mutated source diff was empty #198
-
Fix mutate to simpler primitive violation break to next #203
-
Improve integration / corpus tests to spot highlevel regressions on CI level.
-
Remove support for matchers prefixed with ::
Changes:
- Do not emit more powerful rescue matchers #183
- Do not emit more powerful loop control #201
Changes:
- Do not rename lhs of or assigns when lhs is a ivasgn. Closes #150
Changes:
- Report selected tests in progress runner
- Fix scope of rspec selections to include meaningful parents.
- Add short circuits on already dead mutations under multiple test selections.
Changes:
- Fix granularity of test selection under rspec
- Add mutation from [item] to item
- Add mutation from #reverse_each to #each
- Add mutation from #reverse_map to #each, #map
- Add mutation from #map to #each
Changes:
- Put isolation pipe into binmode
Changes:
- Add support for rspec-3.0.0.rc1
- Remove some senseless rescue mutations
Changes:
- Improve reporting of isolation problems
- Centralize test selection
- Report selected tests
- Report rspec output on noop failures
- Silence warnings on methods without source location
Changes:
- Remove pointless mutation nil => Object.new
Changes:
- Fix crash on while and until without body
- Better require highjack based zombifier
- Do not mutate nthref $1 to gvar $0
- Use faster duplicate guarding hashing AST::Node instances
- Fix lots of shadowed invalid ASTs
- Fix undefine initialize warnings, Closes #175
Changes:
- Fix crash on case without conditional
- Remove dependency to descendants tracker
- Add mutation #== => #eql?, #equal?
- Add mutation #eql? => #equal?
Changes:
- Fix mutation of memoized methods with the memoizable gem.
Changes:
- Fix crash on Module#name and Class#name returning non Strings
Changes:
- Fix crash on invalid partial AST unparsing, closes: #164
Changes:
- Correctly specifiy diff-lcs dependency
Changes:
- Morpher dependency bump
Changes:
- Morpher dependency bump
Changes:
- mutant-rspec now supports rspec3 beta
Changes:
- Use parser 2.1.6 that has its own Parser::Meta::NODE_LIST
Changes:
- Remove rspec dep from main mutant gem
Changes:
- Add configurable coverage expectation via --coverage (default 100%)
- rspec integration was moved into a gem 'mutant-rspec'
- Replace filters implementation with morpher predicates
- Drop --rspec option use: --use rspec instead.
Status: Yanked because of broken dependencies.
Changes:
- Depend on anima-0.2.0
Bugfixes:
- Correctly fix crash on attribute assignments nodes: #149
Changes:
- Bump dependency to unparser-0.1.8 that fixes dozens of non reported issues.
Bugfixes:
- Fix crash on attribute assignments nodes: #149
Bugfixes:
- Fix crash on until nodes: #143
- Fix missing requires: #141
- Fix crash on unknown nodes, fixes #143
- Use more durable unparser version 0.1.6
Bugfixes:
- Add missing require of stringio, #141
Feature:
- Rewrite all mutators on top of whitequark/parser (major!)
- Also mutate conditions in case statements
- Add tons of mutators I lost track about during development.
- Add --ignore-subject optoin supporting the same syntax as matchers
Bugfixes:
- Fix lots of crashes.
- Fix all known multiple diff errors
- Handle methods memoized with adamantium correctly
Bugfixes:
- Fix all bugs caused by mutant-melbourne
- Update dependencies
- Kill mutations in #initialize from class methods.
Other:
- Update dependencies
Bugfix:
- Handle Rubinius::AST::NthRef as noop
Bugfix:
- Do not mutate super to super() anymore. This needs a context check in future.
Bugfix:
- Do not emit mutation to { nil => nil } for hash literals
Bugfix:
- Capture failures that occur in the window between mutation insertion and spec run as kills
Bugfix:
- Do not crash when trying to load methods from precompiled ruby under rbx
Feature:
- Handle binary operator methods in dedicated mutator
Bugfix:
- Do not crash when mutating binary operator method
Bugfix:
- Do not mutate receivers away when message name is a keyword
Feature:
- Mutate instance and global variable assignments
- Mutate super calls
Feature:
- Do not mutate argument or local variable names beginning with an underscore
- Mutate unary calls
coerce(object)
=>object
- Mutate method call receivers
foo.bar
=>foo
Feature:
- Use latest adamantium and ice_nine
Bugfix:
- Correctly set file and line of injected mutants
Feature:
- Add --debug flag for showing killer output and mutation
- Run noop mutation per subject to guard against initial failing specs
- Mutate default into required arguments
- Mutate default literals
- Mutate unwinding of pattern args
|(a, b), c|
=>|a, b, c|
- Mutate define and block arguments
- Mutate block arguments, inklusive pattern args
- Recurse into block bodies
- Unvendor inflector use mbj-inflector from rubygems
Bugfix:
- Insert mutations at correct constant scope
- Crash on mutating yield, added a noop for now
- Crash on singleton methods defined on other than constants or self
Bugfix:
- Correctly vendor inflector
Bugfix:
- Prepend extra elements to hash and array instead of append. This fixes unkillable mutators in parallel assignments!
Feature:
- Add a shitload of operator expansions for dm2 strategy
Bugfix:
- Crash on unavailable source location
- Incorrect handling of if and unless statements
- Expand Foo#initialize to spec/unit/foo in rspec dm2 strategy
- Correctly expand [] to element_reader_spec.rb in rspec dm2 strategy
- Correctly expand []= to element_writer_spec.rb in rspec dm2 strategy
- Correctly expand foo= to foo_writer_spec.rb in rspec dm2 strategy
First public release!