All Stryker versions support a variety of different mutators. The difference in support is listed below.
Original |
Mutated |
a + b |
a - b |
a - b |
a + b |
a * b |
a / b |
a / b |
a * b |
a % b |
a * b |
🔝 Back to Top
Original |
Mutated |
new Array(1, 2, 3, 4) |
new Array() |
[1, 2, 3, 4] |
[ ] |
🔝 Back to Top
Original |
Mutated |
+= |
-= |
-= |
+= |
*= |
/= |
/= |
*= |
%= |
*= |
<<= |
>>= |
>>= |
<<= |
&= |
|= |
|= |
&= |
🔝 Back to Top
Removes the content of every block statement. For example the code:
function saySomething() {
console.log('Hello world!');
}
becomes:
function saySomething() {
}
🔝 Back to Top
Original |
Mutated |
true |
false |
false |
true |
!(a == b) |
a == b ¹ |
- ¹: Not supported by Stryker4s
🔝 Back to Top
Stryker.NET specific mutator
Original |
Mutated |
checked(2 + 4) |
2 + 4 |
🔝 Back to Top
Original |
Mutated |
for (var i = 0; i < 10; i++) { } |
for (var i = 0; false; i++) { } ¹ |
while (a > b) { } |
while (false) { } |
do { } while (a > b); |
do { } while (false); |
if (a > b) { } |
if (true) { } |
if (a > b) { } |
if (false) { } |
var x = a > b ? 1 : 2; |
var x = true ? 1 : 2; ¹ |
var x = a > b ? 1 : 2; |
var x = false ? 1 : 2; ¹ |
- ¹: Not supported by Stryker4s
🔝 Back to Top
Original |
Mutated |
a < b |
a <= b |
a < b |
a >= b |
a <= b |
a < b |
a <= b |
a > b |
a > b |
a >= b |
a > b |
a <= b |
a >= b |
a > b |
a >= b |
a < b |
a == b |
a != b |
a != b |
a == b |
a === b |
a !== b ¹ |
a !== b |
a === b ¹ |
- ¹: Only supported on StrykerJS and Stryker4s
🔝 Back to Top
Original |
Mutated |
a && b |
a || b |
a || b |
a && b |
🔝 Back to Top
Due to differences in language syntax, method expressions are implemented differently in each Stryker framework:
Original |
Mutated |
Distinct() |
|
Reverse() |
|
OrderBy() |
|
OrderByDescending() |
|
SingleOrDefault() |
FirstOrDefault() |
FirstOrDefault() |
SingleOrDefault() |
First() |
Last() |
Last() |
First() |
All() |
Any() |
Any() |
All() |
Skip() |
Take() |
Take() |
Skip() |
SkipWhile() |
TakeWhile() |
TakeWhile() |
SkipWhile() |
Min() |
Max() |
Max() |
Min() |
Sum() |
Count() |
Count() |
Sum() |
Original |
Mutated |
a.filter(b) |
a.filterNot(b) |
a.filterNot(b) |
a.filter(b) |
a.exists(b) |
a.forall(b) |
a.forall(b) |
a.exists(b) |
a.take(b) |
a.drop(b) |
a.drop(b) |
a.take(b) |
a.takeRight(b) |
a.dropRight(b) |
a.dropRight(b) |
a.takeRight(b) |
a.takeWhile(b) |
a.dropWhile(b) |
a.dropWhile(b) |
a.takeWhile(b) |
a.isEmpty |
a.nonEmpty |
a.nonEmpty |
a.isEmpty |
a.indexOf |
a.lastIndexOf(b) |
a.lastIndexOf(b) |
a.indexOf(b) |
a.max |
a.min |
a.min |
a.max |
a.maxBy(b) |
a.minBy(b) |
a.minBy(b) |
a.maxBy(b) |
🔝 Back to Top
Original |
Mutated |
"foo" (non-empty string) |
"" (empty string) |
"" (empty string) |
"Stryker was here!" |
s"foo ${bar}" (string interpolation) |
s"" ¹ |
¹ For Stryker4s, only works with string interpolation and not other types of interpolation (like Scalameta quasiquotes) to avoid compile errors
🔝 Back to Top
Original |
Mutated |
+a |
-a |
-a |
+a |
🔝 Back to Top
Original |
Mutated |
a++ |
a-- |
a-- |
a++ |
++a |
--a |
--a |
++a |
🔝 Back to Top