diff --git a/SupportedMutations b/SupportedMutations new file mode 100644 index 0000000..928816f --- /dev/null +++ b/SupportedMutations @@ -0,0 +1,58 @@ +Supported Mutations +------------------- + +TODO - RENAMES + +1. BooleanAnd - replaces && with || +2. BooleanOr - replaces || with && +3. BooleanFalse - replaces FALSE with TRUE +4. BooleanTrue - replaces TRUE with FALSE +5. OperatorAddition - replaces + with - +6. OperatorSubtraction - replaces - with + +7. OperatorDecrement - replaces -- with ++ +8. OperatorIncrement - replaces ++ with -- + +TODO - OPERATORS + +9. OperatorArithmeticDivision - replaces / with * +10. OperatorArithmeticModulus - replaces % with * +11. OperatorArithmeticMultiplication - replaces * with / +12. OperatorNegation - replaces - with +13. OperatorAssignmentPlusEqual - replaces += with -= +14. OperatorAssignmentMinusEqual - replaces -= with += +15. OperatorBitwiseAnd - replaces & with | +16. OperatorBitwiseOr - replaces | with & +17. OperatorBitwiseXor - replaces ^ with | +18. OperatorBitwiseNot - replaces ~ with +19. OperatorBitwiseShiftLeft - replaces << with >> +20. OperatorBitwiseShiftRight - replaces >> with << +21. OperatorComparisonEqual - replaces == with != +22. OperatorComparisonIdentical - replaces === with !== +23. OperatorComparisonNotEqual - replaces != with == +24. OperatorComparisonNotEqualAngular - replaces <> with == +25. OperatorComparisonNotIdentical - replaces !== with === +26. OperatorComparisonLessThan - replaces < with > +27. OperatorComparisonGreaterThan - replaces > with < +28. OperatorComparisonLessThenOrEqualTo - replaces <= with > +29. OperatorComparisonGreaterThanOrEqualTo - replaces >= with < +30. OperatorLogicalAnd - replaces AND with Or +31. OperatorLogicalOr - replaces OR with AND +32. OperatorLogicalXor - replaces XOR with AND +33. OperatorLogicalNot - replaces ! with +*34. OperatorLogicalAndSym - replaces && with || +*35. OperatorLogicalOrSym - replaces || with && +36. OperatorTypeInstanceof - replaces instanceof with !instanceof +*37. OperatorTypeNotInstanceOf - + +TODO - SCALARS + +38. ScalarString - replaces a literal string with random string +39. ScalarRegex - replaces a regex with random regex +40. ScalarInteger - replace an integer with random integer +41. ScalarFloat - replace a float with random float +42. ScalarNumeric - replace a string if numeric with a random numeric string + +TODO - LOGICAL + +43. LogicalIf - replaces positive IF condition with a negative one +*44. LogicalIfNegative - \ No newline at end of file diff --git a/library/Mutagenesis/Generator.php b/library/Mutagenesis/Generator.php index 82490f5..00c17cd 100644 --- a/library/Mutagenesis/Generator.php +++ b/library/Mutagenesis/Generator.php @@ -64,7 +64,6 @@ public function generate($mutableObject = null) $mutable = new $mutableObject; $mutable->setFilename($file); } - $mutable->generate(); $this->_mutables[] = $mutable; } } diff --git a/library/Mutagenesis/Mutable.php b/library/Mutagenesis/Mutable.php index fc55566..81931ac 100644 --- a/library/Mutagenesis/Mutable.php +++ b/library/Mutagenesis/Mutable.php @@ -64,6 +64,15 @@ public function generate() { $this->_mutables = $this->_parseMutables(); $this->_parseTokensToMutations($this->_mutables); + return $this; + } + + /** + * Cleanup routines for memory management + */ + public function cleanup() + { + unset($this->_mutations, $this->_mutables); } /** @@ -121,6 +130,7 @@ public function getMutables() public function hasMutation($type) { $typeClass = '\\Mutagenesis\\Mutation\\' . $type; + // I know, wtf?! $mutations = array_values(array_values(array_values($this->getMutations()))); foreach ($mutations as $mutation) { if ($mutation instanceof $typeClass) { diff --git a/library/Mutagenesis/Renderer/Text.php b/library/Mutagenesis/Renderer/Text.php index 879fb50..fe20a84 100644 --- a/library/Mutagenesis/Renderer/Text.php +++ b/library/Mutagenesis/Renderer/Text.php @@ -31,7 +31,7 @@ class Text implements RendererInterface */ public function renderOpening() { - $out = 'Mutagenesis 0.5: Mutation Testing for PHP' + $out = 'Mutagenesis: Mutation Testing for PHP' . PHP_EOL . PHP_EOL; return $out; } @@ -143,7 +143,7 @@ public function renderReport($total, $killed, $escaped, array $mutations, array . PHP_EOL . $this->_indentTestOutput($mutant[1]) . PHP_EOL . PHP_EOL; $i++; } - $out .= "Check above these capture details to see if any mutants" + $out .= "Check above for the capture details to see if any mutants" . ' escaped.'; } return $out; diff --git a/library/Mutagenesis/Runner/Base.php b/library/Mutagenesis/Runner/Base.php index 3cc7bb1..b9c5f45 100644 --- a/library/Mutagenesis/Runner/Base.php +++ b/library/Mutagenesis/Runner/Base.php @@ -69,8 +69,8 @@ public function execute() * to dynamically alter included (in-memory) classes on the fly. */ - foreach ($mutables as $mutable) { - $mutations = $mutable->getMutations(); + foreach ($mutables as $i=>$mutable) { + $mutations = $mutable->generate()->getMutations(); foreach ($mutations as $mutation) { $output = \Mutagenesis\Utility\Process::run( $job->generate($mutation), $this->getTimeout() @@ -97,6 +97,8 @@ public function execute() } echo $renderer->renderProgressMark($result); } + $mutable->cleanup(); + unset($this->_mutables[$i]); } /** diff --git a/tests/Mutagenesis/Renderer/TextTest.php b/tests/Mutagenesis/Renderer/TextTest.php index cc23dd3..67c1d78 100644 --- a/tests/Mutagenesis/Renderer/TextTest.php +++ b/tests/Mutagenesis/Renderer/TextTest.php @@ -40,7 +40,7 @@ public function setUp() public function testRendersOpeningMessage() { $this->assertEquals( - 'Mutagenesis 0.5: Mutation Testing for PHP' . PHP_EOL . PHP_EOL, + 'Mutagenesis: Mutation Testing for PHP' . PHP_EOL . PHP_EOL, $this->_renderer->renderOpening() ); }