All notable changes to this project will be documented in this file.
The format is based on Keep a Changelog, and this project adheres to Semantic Versioning.
- Support for crystal
1.12.1
. Resolves warnings.
- Support for crystal
1.4.0
. Fixed a bug where theNumberLiteralSignFlip
mutant would apply to unsigned integers
- Support for crystal
1.1.1
- Support for crystal
0.36.1
- Dropped support for crystal
< 0.35.0
- New mutant
DropCallInVoidDef
which replaces method calls withnil
inside void methods - New mutant
SymbolLiteralChange
which modifies symbol literal with a prefix
- Dropped support for crystal
< 0.34.0
- New command
crytic noop
to output the code as crytic would run it. This helps with debugging, e.g.crytic noop | crystal eval
- Crystal 0.31.x compatibility (no changes were needed for crystal 0.30.x). Be careful with crystal 0.31.0 and 0.31.1 because there is a bug that might cause your CI job to pass even with failing tests. See #8420.
- Crystal 0.32.x compatibility
- The stryker dashboard reporter only reports a successfull upload if the API responds with the correct status code
- Bump required crystal version to 0.29.0
- When the production code requires e.g.
./html/builder
, crytic will mimic crystal langs require and findhtml/builder/builder.cr
- New "File Summary" reporter that list the covered subjects and the number of mutations that were performed on each of those files respectively
- When the neutral mutation errored, the output is shown as well
- Ability to enable/disable reporters with --reporters/-r flag. Current reporters are
Console
,Stryker
andConsoleFileSummary
- When no mutations were run, crytic now exits with 1 instead of 0
- The
StringLiteralChange
mutant now performs more efficient replacements
- Don't crash in the stryker dashboard reporter when zero mutations were run
- Fixed reporting of the number of mutations being run
- Run a "neutral" mutation before each subjects real mutations. This is @mjb's idea to validate the infrastructure of injecting mutations. Currently a "noop"-mutation is run, which simply doesn't mutate the subject at all.
- The
AndOrSwap
mutant now swaps both||
to&&
and&&
to||
- The
AndOrSwap
mutant accidentally mutated multiple&&
at the same time
- Due to a regression introduced in 5a02821cce6bd27361bc84d5b073b21dc2fa55f0, require statements that don't yield any files could be left in the mutated code, leading to compile errors which looked like killed mutants
- Fix filename reporting introduced in 3.2.0
- Show filename (and line and col numbers) for both killed and surviving mutants in the console output
- Mutants
AnyAllSwap
andAndOrSwap
could skip possible mutations
- Add
--preamble
cli option to pass code that is prepended. Helpful to allow usage together with e.g. (minitest.cr)[https://github.com/ysbaddaden/minitest.cr]
- Exit after printing usage information, thanks @anicholson
- Don't mutate unsigned integer literals like
1_u16
with theNumberLiteralSignFlip
- Simply running
./bin/crytic
without any arguments will now automatically find all src files and specs - Introduced a mutant to swap
[1].all?
for[1].any?
- Report number of mutations being run in console output
- Introduced a mutant to swap any RegexLiteral for
/a^/
which will never match - Enabled the mutant to swap
#reject
for#select
and vice-versa
- When the mutated source code fails to compile this is now being noted correctly
- Negative numbers are now correctly flipped to positive ones (e.g.
-1 => 1
instead of-1 => --1
) - Timeouts in mutations are printed as "not found" but are actually found and calculated as "killed". Fixed this so that timeouts are not showing a diff in the console output any more.
- Errors resulting from mutations are printed as "bad" but actually mean that they were detected. Fixed this so that errors are not showing a diff in the console output.
--min-msi
cli argument to allow passing the suite (exiting with 0) even when there are mutants that survived. Pass as float like--min-msi=75.0
.- Post MSI score to stryker dashboard if env vars are set.
- NumberLiteralChange mutant now outputs 0 (for everything != 0) and 1 (for 0)
- Depending on crystal 0.27.0, dropping all previous versions
- This changelog
- Avoid hanging forever by imposing a timeout for mutations
- Use "fail fast" option of crystal spec runner
- Calculate the mutation score as MSI, described in infection
- More mutants: AndOrSwap, StringLiteralChange
- Run CI on crystal 0.26.1 as well
- Report a summary in the cli output
- Don't report the number of times a mutant was run (e.g.
(x2)
) in the cli output
- Running multiple spec files as the test suite
- Everything. First release 🚀 🎉 💃