Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Implementation of mutation levels #4686

Open
wants to merge 33 commits into
base: master
Choose a base branch
from

Conversation

Ja4pp
Copy link

@Ja4pp Ja4pp commented Jan 16, 2024

What?

We've added support for mutation levels to improve the performance of Stryker. It includes mutation operators, mutation groups, mutation levels, documentation and tests. In addition, we have PRs for the reporters in stryker-mutator/mutation-testing-elements and stryker-mutator/stryker-dashboard. Those PR's are still a work in progress.

Why?

Currently, Stryker, by default, executes a comprehensive mutation testing suite on your project, offering maximum efficacy. However, this default setting demands substantial computational resources. Alternatively, users can leverage mutation levels for a more resource-efficient testing experience, ranging from level 1 (optimized for speed) to level 3 (prioritizing efficacy). For more background information, see the Calisto research (https://research.infosupport.com/callisto/).

How?

For a tailored configuration, Xavier allows the adjustment of mutation levels by specifying inclusion and exclusion fields. In the configuration file, mutation operators can be precisely designated by their literal names, while mutator groups and mutation levels are denoted with the @ prefix (e.g., @ArithmeticOperator or @level1). For instance, to refine level 2 by selectively retaining the AdditionOperatorNegation mutation operator and excluding all other operators within the ArithmeticOperator group, the configuration would be expressed as follows:

{
   "includedMutators": ["@level1", "AdditionOperatorNegation"],
   "excludedMutators": ["@ArithmeticOperator"]
}
   

Testing?

We have made modifications to the ignore-project in the e2e test folder to support mutation levels as it had excluded mutations already in its configuration file. Moreover, we added unit tests for all mutator operators. We tested a subset of operators, an empty level and an undefined level.

dvcopae and others added 30 commits October 21, 2023 12:56
Update dependencies from upstream
* Added project to test on

* Add level to the config and read it from code

* Move the debugging to the test project

* Add mutation levels CLI argument, fix lint

* Move testing-project back outside packages folder

* Check if pipeline is fixed

* Remove last change, there is something wrong with the pipeline environment

* Modify mutation levels config file to reflect the submutators

* Update meta config such that types are generated instead of strings

* Add back comment inside instrumenter launch file

* Trigger e2e and incremental_mutation_test workflows only on `master` push

---------

Co-authored-by: luctia <[email protected]>
* Changed configuration file for testing purposes

* small updates in the lock file of package.json

* Adaptation of the NodeMutator

* Added check to only run desired suboperators

* changed file to only run desired operators and pass its suboperators

* Modified ArrayDeclaration tests according to modifications

* Linting

* Make modfications to the tests.

* Linting

* changed the acceptation of undefined as well

* Linting

* process feedback PR

* Unstable

* Added new suboperators for ArrayDeclaration

* Adapted the suboperators implementation accordingly

* Solved issues with undefined

* changed tests

* just a different config file

* changed codebase for testing purposes

* cleaned up file

* cleanup

* processed feedback

* last feedback processed
* ArithmeticOp: pass the whole level

* Add min size to level arrays and mandatory name

* Move arithmetic ops to map

* Add test for arithmetic operator

* Restrict EqualityOperator
Observed mutation score (equality-operator-mutator.ts): 85.71%

* Formatting fixes

* Formatting fixes and removed dead code

* Update arithmetic-operator-mutator.ts and equality-operator-mutator.ts to comply with the changes to node-mutator.ts.

Coded it such that `undefined` results in allowing everything since otherwise setting no MutationLevel results in blocking every mutator.

---------

Co-authored-by: Danut Copae <[email protected]>
Co-authored-by: Ivo_Broekhof <[email protected]>
* WIP Mutation level support for BooleanLiterals

* Fix prettier

* Tests

* Pleased linter

* Fixed typo

* Added tests for edge cases
* WIP support for assignmentoperator

* Added assignmentoperator in definitions

* Added tests for edge cases

* Added comments about what's being mutated

* Resolved merge conflict?
* solution to read a json file which contains levels

* implementation of reading json object

* read config

* Refactor default levels location

* make method private again

---------

Co-authored-by: Javier <[email protected]>
* Restricted logical-operator-mutator.ts

* Pleased linter now

---------

Co-authored-by: Ivo_Broekhof <[email protected]>
* Added an extra suboperator

* changed implementation of suboperator

* tests for conditional operator for mutationLevel

* combined config file

* moved order of yielding

* modified tests properly

---------

Co-authored-by: Danut Copae <[email protected]>
* integrated MutationLevel into method-expression-mutator.ts
Converted Map to const object

* Fix formatting to please Prettier
Used prettier-ignore on operators

* modified operator to pass test and still function

---------

Co-authored-by: Ivo_Broekhof <[email protected]>
Co-authored-by: Javier <[email protected]>
Co-authored-by: Danut Copae <[email protected]>
* integrated MutationLevel into unary-operator-mutator.ts
Changed enum to const object

* Fix formatting to please Prettier

---------

Co-authored-by: Ivo_Broekhof <[email protected]>
Co-authored-by: Danut Copae <[email protected]>
* updated to conform to mutationlevels

* modified tests

* modified config file

* initial implementation of condition

* Revert "initial implementation of condition"

This reverts commit bcb6cc0.

* changed tests to pass CI/CD

* changes nessecary for pass

* small refactor

* remove line added by mistake

---------

Co-authored-by: Danut Copae <[email protected]>
Co-authored-by: Danut Copae <[email protected]>
* Added support for arrowfunction

* update schema

* Fix up arrow function sting

---------

Co-authored-by: Danut Copae <[email protected]>
Co-authored-by: Danut Copae <[email protected]>
* object literal implementation of mutation levels

* change construct of ObjectLiteral

* Last Modifications to adhere to new implementation
* save progress

* details
* Rename mutators in the schema

* Change negation to substraction in arhitmeticop

* Rename mutators, stable

* Enforce type with a generic NodeMutatorConfiguration

* Get rid of NodeMutatorMultiConfiguration

* Move operators inside nodemutator interface

* Update conditionalLevel test name

* Finish aritmetic through conditional operators, stable

* Fix arithmetic through object-literal operators, stable

* Fix up optional-chaining

* Finish renaming mutators

* Reorder stryker-core to reduce generated warnings

* Use the same key for the mutator operators when there is no reason to be more specific
* Made the arithmetic operator more consistent

* Made the array declaration more consistent

* Made the arrow function more consistent

* Made the assignment operator more consistent

* Made the block statement more consistent

* Made the boolean literal more consistent

* Made the conditional expression more consistent

* Made the equality operator more consistent

* Made the logical operator more consistent

* Made the method expression more consistent

* Made the object literal more consistent

* Made the optional chaining more consistent

* Made the regex more consistent

* Made the string literal more consistent

* Made the unary operator more consistent

* Made the update operator more consistent

* small modification in consistency

* Fix consistency in all unit test files

---------

Co-authored-by: Danut Copae <[email protected]>
* Build level for includedMutations

* Add 'excludedMutations' functionality

* Fix up tests after the excludedMutations changes

* Remove redundant emptyMutationLevel object
… clear-text-reporter('s table) (#81)

* Add 'excludedMutations' functionality

* Fix up tests after the excludedMutations changes

* WIP

* Added isMutable to NodeMutator

* Added numberOfMutants to NodeMutator

* Added column to text score table for adjusted mutation score

* Fix linting issues

* Fixed tests for babel-transformer

* Fixed instrumenter tests

* Improved test coverage

* Adjusted tests for clear-text-reporter

* Removed additional useless writeLine

* Remove redundant emptyMutationLevel

* Refactor mutators to increase branch coverage

* Fix lint

* Fix method expression test

---------

Co-authored-by: Danut Copae <[email protected]>
* chore(deps): update dependency tap to v18.5.8 (stryker-mutator#4585)

Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>

* chore(deps): update dependency @sveltejs/kit to v1.27.6 (stryker-mutator#4586)

Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>

* chore(deps): update dependency ts-loader to v9.5.1 (stryker-mutator#4588)

Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>

* chore(deps): update dependency axios to v1.6.2 (stryker-mutator#4587)

Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>

* chore(deps): update dependency tap to v18.6.1 (stryker-mutator#4591)

Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>

* chore(deps): update dependency svelte to v4.2.4 (stryker-mutator#4594)

Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>

* chore(deps): update dependency @types/node to v20.9.1 (stryker-mutator#4593)

Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>

* chore(deps): update dependency svelte to v4.2.5 (stryker-mutator#4596)

Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>

* chore(deps): update dependency eslint to v8.54.0 (stryker-mutator#4597)

Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>

* chore(deps): update dependency @types/node to v20.9.2 (stryker-mutator#4599)

Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>

* chore(deps): update dependency svelte to v4.2.6 (stryker-mutator#4600)

Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>

* chore(deps): update dependency @babel/cli to v7.23.4 (stryker-mutator#4601)

Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>

* chore(deps): update dependency svelte to v4.2.7 (stryker-mutator#4602)

Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>

* chore(deps): update mutation-testing-elements to v3.0.0 (stryker-mutator#4592)

* chore(deps): update dependency @types/istanbul to v0.4.34 (stryker-mutator#4605)

Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>

* chore(deps): update dependency @types/babel__core to v7.20.5 (stryker-mutator#4604)

Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>

* chore(deps): update dependency @types/karma to v6.3.8 (stryker-mutator#4606)

Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>

* chore(deps): update dependency @types/mocha to v10.0.5 (stryker-mutator#4607)

Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>

* chore(deps): update dependency @types/sinon to v17.0.2 (stryker-mutator#4610)

Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>

* chore(deps): update dependency @types/node to v20.9.3 (stryker-mutator#4608)

Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>

* chore(deps): update dependency @types/semver to v7.5.6 (stryker-mutator#4609)

Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>

* chore(deps): update dependency @types/node to v20.9.4 (stryker-mutator#4612)

Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>

* chore(deps): update dependency svelte-check to v3.6.1 (stryker-mutator#4614)

Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>

* chore(deps): update dependency lerna to v8 (stryker-mutator#4616)

Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>

* chore(deps): update dependency @sveltejs/vite-plugin-svelte to v2.5.3 (stryker-mutator#4615)

Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>

* chore(deps): update dependency @types/node to v20.10.0 (stryker-mutator#4617)

Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>

* chore(deps): update dependency @types/mocha to v10.0.6 (stryker-mutator#4611)

Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>

* chore(deps): update dependency svelte-check to v3.6.2 (stryker-mutator#4619)

Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>

* chore(deps): update dependency jsdom to v23 (stryker-mutator#4621)

Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>

* chore(deps): update babel monorepo to v7.23.5 (stryker-mutator#4622)

Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>

* fix(jest-runner): support `handleTestEvent` class property (stryker-mutator#4623)

* chore(deps): update dependency typescript to v5.3.2

* fix(jest-runner): support `handleTestEvent` class property

Support `handleTestEvent` as a custom class property (instead of method).

---------

Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>

* chore(deps): update dependency @types/node to v20.10.1 (stryker-mutator#4624)

Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>

* chore(deps): update dependency @cucumber/messages to v24 (stryker-mutator#4618)

Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>

* chore(deps): update typescript-eslint monorepo to v6.13.1 (stryker-mutator#4584)

* chore(deps): update typescript-eslint monorepo to v6.13.1

* fix eslint warnings for grabbed code

---------

Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
Co-authored-by: Nico Jansen <[email protected]>

* chore(deps): update dependency jsdom to v23.0.1 (stryker-mutator#4626)

Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>

* chore(deps): update dependency svelte to v4.2.8 (stryker-mutator#4627)

Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>

* feat(node): drop official support for node 16 (stryker-mutator#4542)

- Set TS target to es2022 for more concise JavaScript
- Drop support for node 16. The lowest supported version is now NodeJS 18.

BREAKING CHANGE: NodeJS 16 is no longer supported. Please use NodeJS 18 or higher. See https://nodejs.org/en/about/previous-releases

* feat(vitest): support browser mode (stryker-mutator#4628)

- Support vitest browser mode
- Support [email protected]

* feat(init): add svelte custom initializer (stryker-mutator#4625)

* Add svelte custom initializer
* Add guide to configure Stryker for a svelte project

* chore(release): bump StrykerJS peer dependency version

* v8.0.0

* chore(deps): update dependency playwright to v1.40.1 (stryker-mutator#4629)

* chore(deps): update dependency playwright to v1.40.1

* Regen lock file

---------

Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
Co-authored-by: Nico Jansen <[email protected]>

* chore(deps): update dependency prettier to v3.1.0 (stryker-mutator#4583)

* chore(deps): update dependency prettier to v3.1.0

* Fix formatting

---------

Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
Co-authored-by: Nico Jansen <[email protected]>

* chore(deps): update dependency eslint to v8.55.0 (stryker-mutator#4632)

Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>

* chore(deps): update dependency eslint-config-prettier to v9.1.0 (stryker-mutator#4633)

Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>

* chore(deps): update typescript-eslint monorepo to v6.13.2 (stryker-mutator#4637)

Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>

* chore(deps): update dependency ava to v6 (stryker-mutator#4638)

Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>

* chore(deps): update dependency ava to v6.0.1 (stryker-mutator#4642)

Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>

* feat(core): Add .next, .nuxt and .svelte-kit to ignorePattern (stryker-mutator#4645)

* feat: Add .next .nuxt .svelte-kit to ALWAYS_IGNORE patterns

* fix unit test for project-reader

* chore(deps): update vitest monorepo to v1.0.3 (stryker-mutator#4636)

Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>

* chore(deps): update dependency vite to v4.5.1 [security] (stryker-mutator#4639)

Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>

* chore(deps): update dependency @testing-library/jest-dom to v6.1.5 (stryker-mutator#4630)

Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>

* chore(deps): update dependency @types/node to v20.10.4 (stryker-mutator#4631)

Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>

* chore(deps): update dependency ts-node to v10.9.2 (stryker-mutator#4646)

Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>

* chore(deps): update dependency typescript to v5.3.3 (stryker-mutator#4643)

Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>

* chore(deps): update vitest monorepo to v1.0.4 (stryker-mutator#4647)

Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>

* chore(deps): update dependency @sveltejs/kit to v1.27.7 (stryker-mutator#4640)

* chore(deps): update dependency @sveltejs/kit to v1.27.7

* Regen lock file

---------

Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
Co-authored-by: Nico Jansen <[email protected]>

* chore(deps): update dependency prettier to v3.1.1 (stryker-mutator#4648)

Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>

* fix(deps): update dependency angular-html-parser to ~5.2.0 (stryker-mutator#4649)

Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>

* chore(deps): update dependency @sveltejs/kit to v1.28.0 (stryker-mutator#4650)

Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>

* chore(ci): remove unused `--force` (stryker-mutator#4651)

* chore(deps): update babel monorepo to v7.23.6 (stryker-mutator#4652)

Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>

* chore(deps): update typescript-eslint monorepo to v6.14.0 (stryker-mutator#4653)

Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>

* chore(deps): update dependency @sveltejs/kit to v1.29.0 (stryker-mutator#4654)

Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>

* chore(deps): update dependency @sveltejs/kit to v1.29.1 (stryker-mutator#4655)

Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>

* chore(deps): update dependency @sveltejs/kit to v1.30.0 (stryker-mutator#4656)

Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>

* chore(deps): update dependency @sveltejs/kit to v1.30.1 (stryker-mutator#4657)

Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>

* chore(deps): update dependency @sveltejs/kit to v1.30.2 (stryker-mutator#4659)

Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>

* chore(deps): update dependency @sveltejs/kit to v1.30.3 (stryker-mutator#4660)

Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>

* chore(deps): update dependency eslint-plugin-import to v2.29.1 (stryker-mutator#4661)

Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>

* chore(deps): update dependency lerna to v8.0.1 (stryker-mutator#4665)

Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>

* chore(deps): update dependency eslint to v8.56.0 (stryker-mutator#4666)

Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>

* chore(deps): update dependency @types/babel__generator to v7.6.8 (stryker-mutator#4667)

Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>

* chore(deps): update dependency @types/node to v20.10.5 (stryker-mutator#4668)

Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>

* chore(deps): update actions/upload-artifact action to v4 (stryker-mutator#4662)

Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>

* chore(deps): update vitest monorepo to v1.1.0 (stryker-mutator#4670)

Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>

* chore(deps): update dependency eslint-plugin-prettier to v5.1.0 (stryker-mutator#4671)

Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>

* chore(deps): update dependency eslint-plugin-unicorn to v50 (stryker-mutator#4672)

Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>

* chore(deps): update dependency eslint-plugin-unicorn to v50.0.1 (stryker-mutator#4673)

Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>

* chore(deps): update dependency eslint-plugin-prettier to v5.1.1 (stryker-mutator#4674)

Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>

* chore(deps): update dependency @cucumber/cucumber to v10.1.0 (stryker-mutator#4676)

Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>

* chore(deps): update dependency eslint-plugin-prettier to v5.1.2 (stryker-mutator#4679)

Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>

* chore(deps): update dependency axios to v1.6.3 (stryker-mutator#4680)

Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>

* chore(deps): update dependency @testing-library/jest-dom to v6.1.6 (stryker-mutator#4682)

Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>

* chore: fix docs links

* Base structure for selecting operators individually (#14)

* Added project to test on

* Add level to the config and read it from code

* Move the debugging to the test project

* Add mutation levels CLI argument, fix lint

* Move testing-project back outside packages folder

* Check if pipeline is fixed

* Remove last change, there is something wrong with the pipeline environment

* Modify mutation levels config file to reflect the submutators

* Update meta config such that types are generated instead of strings

* Add back comment inside instrumenter launch file

* Trigger e2e and incremental_mutation_test workflows only on `master` push

---------

Co-authored-by: luctia <[email protected]>

* #18 restrict arraydeclaration mutator   (#40)

* Changed configuration file for testing purposes

* small updates in the lock file of package.json

* Adaptation of the NodeMutator

* Added check to only run desired suboperators

* changed file to only run desired operators and pass its suboperators

* Modified ArrayDeclaration tests according to modifications

* Linting

* Make modfications to the tests.

* Linting

* changed the acceptation of undefined as well

* Linting

* process feedback PR

* Unstable

* Added new suboperators for ArrayDeclaration

* Adapted the suboperators implementation accordingly

* Solved issues with undefined

* changed tests

* just a different config file

* changed codebase for testing purposes

* cleaned up file

* cleanup

* processed feedback

* last feedback processed

* #23 restrict equalityoperator mutator (#41)

* ArithmeticOp: pass the whole level

* Add min size to level arrays and mandatory name

* Move arithmetic ops to map

* Add test for arithmetic operator

* Restrict EqualityOperator
Observed mutation score (equality-operator-mutator.ts): 85.71%

* Formatting fixes

* Formatting fixes and removed dead code

* Update arithmetic-operator-mutator.ts and equality-operator-mutator.ts to comply with the changes to node-mutator.ts.

Coded it such that `undefined` results in allowing everything since otherwise setting no MutationLevel results in blocking every mutator.

---------

Co-authored-by: Danut Copae <[email protected]>
Co-authored-by: Ivo_Broekhof <[email protected]>

* #21 booleanliteral (#44)

* WIP Mutation level support for BooleanLiterals

* Fix prettier

* Tests

* Pleased linter

* Fixed typo

* Added tests for edge cases

* #20 assignment operator (#46)

* WIP support for assignmentoperator

* Added assignmentoperator in definitions

* Added tests for edge cases

* Added comments about what's being mutated

* Resolved merge conflict?

* Add restriction for string literals (#43)

Co-authored-by: Ivo Broekhof <[email protected]>

* Restrict optional chaining mutator (#45)

Co-authored-by: Ivo Broekhof <[email protected]>

* Change mutation level specification style (#56)

* Read default levels v2 (#60)

* solution to read a json file which contains levels

* implementation of reading json object

* read config

* Refactor default levels location

* make method private again

---------

Co-authored-by: Javier <[email protected]>

* Restricted logical-operator-mutator.ts (#57)

* Restricted logical-operator-mutator.ts

* Pleased linter now

---------

Co-authored-by: Ivo_Broekhof <[email protected]>

* #22 restrict conditionalexpression mutator (#55)

* Added an extra suboperator

* changed implementation of suboperator

* tests for conditional operator for mutationLevel

* combined config file

* moved order of yielding

* modified tests properly

---------

Co-authored-by: Danut Copae <[email protected]>

* 25 restrict methodexpression mutator (#54)

* integrated MutationLevel into method-expression-mutator.ts
Converted Map to const object

* Fix formatting to please Prettier
Used prettier-ignore on operators

* modified operator to pass test and still function

---------

Co-authored-by: Ivo_Broekhof <[email protected]>
Co-authored-by: Javier <[email protected]>
Co-authored-by: Danut Copae <[email protected]>

* 29 restrict unaryoperator mutator (#53)

* integrated MutationLevel into unary-operator-mutator.ts
Changed enum to const object

* Fix formatting to please Prettier

---------

Co-authored-by: Ivo_Broekhof <[email protected]>
Co-authored-by: Danut Copae <[email protected]>

* #30 restrict updateoperator mutator (#51)

* updated to conform to mutationlevels

* modified tests

* modified config file

* initial implementation of condition

* Revert "initial implementation of condition"

This reverts commit bcb6cc0.

* changed tests to pass CI/CD

* changes nessecary for pass

* small refactor

* remove line added by mistake

---------

Co-authored-by: Danut Copae <[email protected]>
Co-authored-by: Danut Copae <[email protected]>

* Added support for arrowfunction (#47)

* Added support for arrowfunction

* update schema

* Fix up arrow function sting

---------

Co-authored-by: Danut Copae <[email protected]>
Co-authored-by: Danut Copae <[email protected]>

* #63 implement objectliteral mutator (#65)

* object literal implementation of mutation levels

* change construct of ObjectLiteral

* Last Modifications to adhere to new implementation

* Refactor mutators (#64)

* save progress

* details

* Implement mutationLevel construct BlockStatement (#66)

* implement MutationLevel construct for Regex (#67)

* Rename mutators & enhance NodeMutatorConfiguration type (#68)

* Rename mutators in the schema

* Change negation to substraction in arhitmeticop

* Rename mutators, stable

* Enforce type with a generic NodeMutatorConfiguration

* Get rid of NodeMutatorMultiConfiguration

* Move operators inside nodemutator interface

* Update conditionalLevel test name

* Finish aritmetic through conditional operators, stable

* Fix arithmetic through object-literal operators, stable

* Fix up optional-chaining

* Finish renaming mutators

* Reorder stryker-core to reduce generated warnings

* Use the same key for the mutator operators when there is no reason to be more specific

* #48 ensure code consistency between mutators tests (#75)

* Made the arithmetic operator more consistent

* Made the array declaration more consistent

* Made the arrow function more consistent

* Made the assignment operator more consistent

* Made the block statement more consistent

* Made the boolean literal more consistent

* Made the conditional expression more consistent

* Made the equality operator more consistent

* Made the logical operator more consistent

* Made the method expression more consistent

* Made the object literal more consistent

* Made the optional chaining more consistent

* Made the regex more consistent

* Made the string literal more consistent

* Made the unary operator more consistent

* Made the update operator more consistent

* small modification in consistency

* Fix consistency in all unit test files

---------

Co-authored-by: Danut Copae <[email protected]>

* remove testing project folder

* removed testing folder from the workspace file

* Revert "chore: fix docs links"

This reverts commit d51d612.

* removed testing folder again

* change naming of operators

* small modification to one of the names

* Fix up ignore-project

* Copy CI from upstream

* Fix up config reader test from upstream

* Fix up reporters-e2e test

* Modification of stryker config

* Modify the mutantstatus dependency

* removed last items from testing folder

---------

Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
Co-authored-by: Hugo van Rijswijk <[email protected]>
Co-authored-by: Nico Jansen <[email protected]>
Co-authored-by: odinvanderlinden <[email protected]>
Co-authored-by: Danut Copae <[email protected]>
Co-authored-by: luctia <[email protected]>
Co-authored-by: Ivo Broekhof <[email protected]>
Co-authored-by: Danut Copae <[email protected]>
Co-authored-by: Ivo_Broekhof <[email protected]>
Co-authored-by: Luc Timmerman <[email protected]>
* Fix up ignore-project

* Copy CI from upstream

* Fix up config reader test from upstream

* Fix up reporters-e2e test

* Test ignored mutators when they are not present in includedMutations

* Remove MutantStatus from ignore-project
* chore(deps): update dependency tap to v18.5.8 (stryker-mutator#4585)

Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>

* chore(deps): update dependency @sveltejs/kit to v1.27.6 (stryker-mutator#4586)

Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>

* chore(deps): update dependency ts-loader to v9.5.1 (stryker-mutator#4588)

Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>

* chore(deps): update dependency axios to v1.6.2 (stryker-mutator#4587)

Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>

* chore(deps): update dependency tap to v18.6.1 (stryker-mutator#4591)

Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>

* chore(deps): update dependency svelte to v4.2.4 (stryker-mutator#4594)

Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>

* chore(deps): update dependency @types/node to v20.9.1 (stryker-mutator#4593)

Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>

* chore(deps): update dependency svelte to v4.2.5 (stryker-mutator#4596)

Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>

* chore(deps): update dependency eslint to v8.54.0 (stryker-mutator#4597)

Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>

* chore(deps): update dependency @types/node to v20.9.2 (stryker-mutator#4599)

Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>

* chore(deps): update dependency svelte to v4.2.6 (stryker-mutator#4600)

Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>

* chore(deps): update dependency @babel/cli to v7.23.4 (stryker-mutator#4601)

Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>

* chore(deps): update dependency svelte to v4.2.7 (stryker-mutator#4602)

Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>

* chore(deps): update mutation-testing-elements to v3.0.0 (stryker-mutator#4592)

* chore(deps): update dependency @types/istanbul to v0.4.34 (stryker-mutator#4605)

Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>

* chore(deps): update dependency @types/babel__core to v7.20.5 (stryker-mutator#4604)

Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>

* chore(deps): update dependency @types/karma to v6.3.8 (stryker-mutator#4606)

Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>

* chore(deps): update dependency @types/mocha to v10.0.5 (stryker-mutator#4607)

Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>

* chore(deps): update dependency @types/sinon to v17.0.2 (stryker-mutator#4610)

Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>

* chore(deps): update dependency @types/node to v20.9.3 (stryker-mutator#4608)

Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>

* chore(deps): update dependency @types/semver to v7.5.6 (stryker-mutator#4609)

Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>

* chore(deps): update dependency @types/node to v20.9.4 (stryker-mutator#4612)

Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>

* chore(deps): update dependency svelte-check to v3.6.1 (stryker-mutator#4614)

Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>

* chore(deps): update dependency lerna to v8 (stryker-mutator#4616)

Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>

* chore(deps): update dependency @sveltejs/vite-plugin-svelte to v2.5.3 (stryker-mutator#4615)

Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>

* chore(deps): update dependency @types/node to v20.10.0 (stryker-mutator#4617)

Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>

* chore(deps): update dependency @types/mocha to v10.0.6 (stryker-mutator#4611)

Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>

* chore(deps): update dependency svelte-check to v3.6.2 (stryker-mutator#4619)

Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>

* chore(deps): update dependency jsdom to v23 (stryker-mutator#4621)

Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>

* chore(deps): update babel monorepo to v7.23.5 (stryker-mutator#4622)

Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>

* fix(jest-runner): support `handleTestEvent` class property (stryker-mutator#4623)

* chore(deps): update dependency typescript to v5.3.2

* fix(jest-runner): support `handleTestEvent` class property

Support `handleTestEvent` as a custom class property (instead of method).

---------

Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>

* chore(deps): update dependency @types/node to v20.10.1 (stryker-mutator#4624)

Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>

* chore(deps): update dependency @cucumber/messages to v24 (stryker-mutator#4618)

Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>

* chore(deps): update typescript-eslint monorepo to v6.13.1 (stryker-mutator#4584)

* chore(deps): update typescript-eslint monorepo to v6.13.1

* fix eslint warnings for grabbed code

---------

Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
Co-authored-by: Nico Jansen <[email protected]>

* chore(deps): update dependency jsdom to v23.0.1 (stryker-mutator#4626)

Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>

* chore(deps): update dependency svelte to v4.2.8 (stryker-mutator#4627)

Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>

* feat(node): drop official support for node 16 (stryker-mutator#4542)

- Set TS target to es2022 for more concise JavaScript
- Drop support for node 16. The lowest supported version is now NodeJS 18.

BREAKING CHANGE: NodeJS 16 is no longer supported. Please use NodeJS 18 or higher. See https://nodejs.org/en/about/previous-releases

* feat(vitest): support browser mode (stryker-mutator#4628)

- Support vitest browser mode
- Support [email protected]

* feat(init): add svelte custom initializer (stryker-mutator#4625)

* Add svelte custom initializer
* Add guide to configure Stryker for a svelte project

* chore(release): bump StrykerJS peer dependency version

* v8.0.0

* chore(deps): update dependency playwright to v1.40.1 (stryker-mutator#4629)

* chore(deps): update dependency playwright to v1.40.1

* Regen lock file

---------

Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
Co-authored-by: Nico Jansen <[email protected]>

* chore(deps): update dependency prettier to v3.1.0 (stryker-mutator#4583)

* chore(deps): update dependency prettier to v3.1.0

* Fix formatting

---------

Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
Co-authored-by: Nico Jansen <[email protected]>

* chore(deps): update dependency eslint to v8.55.0 (stryker-mutator#4632)

Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>

* chore(deps): update dependency eslint-config-prettier to v9.1.0 (stryker-mutator#4633)

Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>

* chore(deps): update typescript-eslint monorepo to v6.13.2 (stryker-mutator#4637)

Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>

* chore(deps): update dependency ava to v6 (stryker-mutator#4638)

Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>

* chore(deps): update dependency ava to v6.0.1 (stryker-mutator#4642)

Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>

* feat(core): Add .next, .nuxt and .svelte-kit to ignorePattern (stryker-mutator#4645)

* feat: Add .next .nuxt .svelte-kit to ALWAYS_IGNORE patterns

* fix unit test for project-reader

* chore(deps): update vitest monorepo to v1.0.3 (stryker-mutator#4636)

Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>

* chore(deps): update dependency vite to v4.5.1 [security] (stryker-mutator#4639)

Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>

* chore(deps): update dependency @testing-library/jest-dom to v6.1.5 (stryker-mutator#4630)

Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>

* chore(deps): update dependency @types/node to v20.10.4 (stryker-mutator#4631)

Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>

* chore(deps): update dependency ts-node to v10.9.2 (stryker-mutator#4646)

Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>

* chore(deps): update dependency typescript to v5.3.3 (stryker-mutator#4643)

Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>

* chore(deps): update vitest monorepo to v1.0.4 (stryker-mutator#4647)

Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>

* chore(deps): update dependency @sveltejs/kit to v1.27.7 (stryker-mutator#4640)

* chore(deps): update dependency @sveltejs/kit to v1.27.7

* Regen lock file

---------

Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
Co-authored-by: Nico Jansen <[email protected]>

* chore(deps): update dependency prettier to v3.1.1 (stryker-mutator#4648)

Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>

* fix(deps): update dependency angular-html-parser to ~5.2.0 (stryker-mutator#4649)

Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>

* chore(deps): update dependency @sveltejs/kit to v1.28.0 (stryker-mutator#4650)

Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>

* chore(ci): remove unused `--force` (stryker-mutator#4651)

* chore(deps): update babel monorepo to v7.23.6 (stryker-mutator#4652)

Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>

* chore(deps): update typescript-eslint monorepo to v6.14.0 (stryker-mutator#4653)

Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>

* chore(deps): update dependency @sveltejs/kit to v1.29.0 (stryker-mutator#4654)

Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>

* chore(deps): update dependency @sveltejs/kit to v1.29.1 (stryker-mutator#4655)

Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>

* chore(deps): update dependency @sveltejs/kit to v1.30.0 (stryker-mutator#4656)

Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>

* chore(deps): update dependency @sveltejs/kit to v1.30.1 (stryker-mutator#4657)

Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>

* chore(deps): update dependency @sveltejs/kit to v1.30.2 (stryker-mutator#4659)

Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>

* chore(deps): update dependency @sveltejs/kit to v1.30.3 (stryker-mutator#4660)

Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>

* chore(deps): update dependency eslint-plugin-import to v2.29.1 (stryker-mutator#4661)

Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>

* chore(deps): update dependency lerna to v8.0.1 (stryker-mutator#4665)

Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>

* chore(deps): update dependency eslint to v8.56.0 (stryker-mutator#4666)

Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>

* chore(deps): update dependency @types/babel__generator to v7.6.8 (stryker-mutator#4667)

Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>

* chore(deps): update dependency @types/node to v20.10.5 (stryker-mutator#4668)

Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>

* chore(deps): update actions/upload-artifact action to v4 (stryker-mutator#4662)

Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>

* chore(deps): update vitest monorepo to v1.1.0 (stryker-mutator#4670)

Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>

* chore(deps): update dependency eslint-plugin-prettier to v5.1.0 (stryker-mutator#4671)

Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>

* chore(deps): update dependency eslint-plugin-unicorn to v50 (stryker-mutator#4672)

Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>

* chore(deps): update dependency eslint-plugin-unicorn to v50.0.1 (stryker-mutator#4673)

Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>

* chore(deps): update dependency eslint-plugin-prettier to v5.1.1 (stryker-mutator#4674)

Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>

* chore(deps): update dependency @cucumber/cucumber to v10.1.0 (stryker-mutator#4676)

Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>

* chore(deps): update dependency eslint-plugin-prettier to v5.1.2 (stryker-mutator#4679)

Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>

* chore(deps): update dependency axios to v1.6.3 (stryker-mutator#4680)

Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>

* chore(deps): update dependency @testing-library/jest-dom to v6.1.6 (stryker-mutator#4682)

Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>

* chore: fix docs links

* Base structure for selecting operators individually (#14)

* Added project to test on

* Add level to the config and read it from code

* Move the debugging to the test project

* Add mutation levels CLI argument, fix lint

* Move testing-project back outside packages folder

* Check if pipeline is fixed

* Remove last change, there is something wrong with the pipeline environment

* Modify mutation levels config file to reflect the submutators

* Update meta config such that types are generated instead of strings

* Add back comment inside instrumenter launch file

* Trigger e2e and incremental_mutation_test workflows only on `master` push

---------

Co-authored-by: luctia <[email protected]>

* #18 restrict arraydeclaration mutator   (#40)

* Changed configuration file for testing purposes

* small updates in the lock file of package.json

* Adaptation of the NodeMutator

* Added check to only run desired suboperators

* changed file to only run desired operators and pass its suboperators

* Modified ArrayDeclaration tests according to modifications

* Linting

* Make modfications to the tests.

* Linting

* changed the acceptation of undefined as well

* Linting

* process feedback PR

* Unstable

* Added new suboperators for ArrayDeclaration

* Adapted the suboperators implementation accordingly

* Solved issues with undefined

* changed tests

* just a different config file

* changed codebase for testing purposes

* cleaned up file

* cleanup

* processed feedback

* last feedback processed

* #23 restrict equalityoperator mutator (#41)

* ArithmeticOp: pass the whole level

* Add min size to level arrays and mandatory name

* Move arithmetic ops to map

* Add test for arithmetic operator

* Restrict EqualityOperator
Observed mutation score (equality-operator-mutator.ts): 85.71%

* Formatting fixes

* Formatting fixes and removed dead code

* Update arithmetic-operator-mutator.ts and equality-operator-mutator.ts to comply with the changes to node-mutator.ts.

Coded it such that `undefined` results in allowing everything since otherwise setting no MutationLevel results in blocking every mutator.

---------

Co-authored-by: Danut Copae <[email protected]>
Co-authored-by: Ivo_Broekhof <[email protected]>

* #21 booleanliteral (#44)

* WIP Mutation level support for BooleanLiterals

* Fix prettier

* Tests

* Pleased linter

* Fixed typo

* Added tests for edge cases

* #20 assignment operator (#46)

* WIP support for assignmentoperator

* Added assignmentoperator in definitions

* Added tests for edge cases

* Added comments about what's being mutated

* Resolved merge conflict?

* Add restriction for string literals (#43)

Co-authored-by: Ivo Broekhof <[email protected]>

* Restrict optional chaining mutator (#45)

Co-authored-by: Ivo Broekhof <[email protected]>

* Change mutation level specification style (#56)

* Read default levels v2 (#60)

* solution to read a json file which contains levels

* implementation of reading json object

* read config

* Refactor default levels location

* make method private again

---------

Co-authored-by: Javier <[email protected]>

* Restricted logical-operator-mutator.ts (#57)

* Restricted logical-operator-mutator.ts

* Pleased linter now

---------

Co-authored-by: Ivo_Broekhof <[email protected]>

* #22 restrict conditionalexpression mutator (#55)

* Added an extra suboperator

* changed implementation of suboperator

* tests for conditional operator for mutationLevel

* combined config file

* moved order of yielding

* modified tests properly

---------

Co-authored-by: Danut Copae <[email protected]>

* 25 restrict methodexpression mutator (#54)

* integrated MutationLevel into method-expression-mutator.ts
Converted Map to const object

* Fix formatting to please Prettier
Used prettier-ignore on operators

* modified operator to pass test and still function

---------

Co-authored-by: Ivo_Broekhof <[email protected]>
Co-authored-by: Javier <[email protected]>
Co-authored-by: Danut Copae <[email protected]>

* 29 restrict unaryoperator mutator (#53)

* integrated MutationLevel into unary-operator-mutator.ts
Changed enum to const object

* Fix formatting to please Prettier

---------

Co-authored-by: Ivo_Broekhof <[email protected]>
Co-authored-by: Danut Copae <[email protected]>

* #30 restrict updateoperator mutator (#51)

* updated to conform to mutationlevels

* modified tests

* modified config file

* initial implementation of condition

* Revert "initial implementation of condition"

This reverts commit bcb6cc0.

* changed tests to pass CI/CD

* changes nessecary for pass

* small refactor

* remove line added by mistake

---------

Co-authored-by: Danut Copae <[email protected]>
Co-authored-by: Danut Copae <[email protected]>

* Added support for arrowfunction (#47)

* Added support for arrowfunction

* update schema

* Fix up arrow function sting

---------

Co-authored-by: Danut Copae <[email protected]>
Co-authored-by: Danut Copae <[email protected]>

* #63 implement objectliteral mutator (#65)

* object literal implementation of mutation levels

* change construct of ObjectLiteral

* Last Modifications to adhere to new implementation

* Refactor mutators (#64)

* save progress

* details

* Implement mutationLevel construct BlockStatement (#66)

* implement MutationLevel construct for Regex (#67)

* Rename mutators & enhance NodeMutatorConfiguration type (#68)

* Rename mutators in the schema

* Change negation to substraction in arhitmeticop

* Rename mutators, stable

* Enforce type with a generic NodeMutatorConfiguration

* Get rid of NodeMutatorMultiConfiguration

* Move operators inside nodemutator interface

* Update conditionalLevel test name

* Finish aritmetic through conditional operators, stable

* Fix arithmetic through object-literal operators, stable

* Fix up optional-chaining

* Finish renaming mutators

* Reorder stryker-core to reduce generated warnings

* Use the same key for the mutator operators when there is no reason to be more specific

* #48 ensure code consistency between mutators tests (#75)

* Made the arithmetic operator more consistent

* Made the array declaration more consistent

* Made the arrow function more consistent

* Made the assignment operator more consistent

* Made the block statement more consistent

* Made the boolean literal more consistent

* Made the conditional expression more consistent

* Made the equality operator more consistent

* Made the logical operator more consistent

* Made the method expression more consistent

* Made the object literal more consistent

* Made the optional chaining more consistent

* Made the regex more consistent

* Made the string literal more consistent

* Made the unary operator more consistent

* Made the update operator more consistent

* small modification in consistency

* Fix consistency in all unit test files

---------

Co-authored-by: Danut Copae <[email protected]>

* remove testing project folder

* removed testing folder from the workspace file

* Revert "chore: fix docs links"

This reverts commit d51d612.

* removed testing folder again

* change naming of operators

* small modification to one of the names

* Fix up ignore-project

* Copy CI from upstream

* Fix up config reader test from upstream

* Fix up reporters-e2e test

* Modification of stryker config

* Modify the mutantstatus dependency

* removed last items from testing folder

---------

Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
Co-authored-by: Hugo van Rijswijk <[email protected]>
Co-authored-by: Nico Jansen <[email protected]>
Co-authored-by: odinvanderlinden <[email protected]>
Co-authored-by: Danut Copae <[email protected]>
Co-authored-by: luctia <[email protected]>
Co-authored-by: Ivo Broekhof <[email protected]>
Co-authored-by: Danut Copae <[email protected]>
Co-authored-by: Ivo_Broekhof <[email protected]>
Co-authored-by: Luc Timmerman <[email protected]>
* Remove testing project from eslintignore
Copy link
Member

@nicojs nicojs left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Looks a lot better already! The biggest remark I have is about the NodeMutator API.

Thanks a lot for the work so far 👏

@@ -0,0 +1,152 @@
{
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I think it's a good idea to separate this config, except I would expect it to be in a .ts file, so you can simply import it, instead of having to load it some other way.

Especially since the names used here should be in sync with the names in the stryker-core.json file. Having it as a JSON file here breaks type safety.

Copy link

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Good observation! We moved the default-mutation-levels to a .ts file, and used the spread operator to remove some redundancy between the levels.

import { NodeMutatorConfiguration, MutationLevel } from '../mutation-level/mutation-level.js';

export interface NodeMutator<T extends keyof MutationLevel> {
mutate(path: NodePath, levelMutations: string[] | undefined): Iterable<types.Node>;
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Instead of having each NodeMutator decide on whether to generate a mutant, it would be cleaner if they always generate everything and let excluding be done afterward (in the BabelInstrumenter class). It would safe you a lot if-statements and features like "absolute mutant score" would be easier to implement later.

Copy link

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Implemented, this indeed leaves a lot of if statements and duplicate code out.

},
"MutationLevelName": {
"title": "MutationLevelName",
"type": "string"
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

TODO: decide on the actual names

Copy link

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

We have also updated the supported-mutators documentation here, based on your PR .

We also noticed a few mutation operators that were not in the documentation as well, so we tried to come up with new names for those following your convention.

export type NodeMutatorConfiguration<T> = Record<string, ReplacementConfiguration<T>>;

interface ReplacementConfiguration<T> {
replacement?: any;
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I'm not sure if an any is needed here. I think it was strongly typed before.

Copy link

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Updated the type to Node | Node[] | boolean | string | null


interface ReplacementConfiguration<T> {
replacement?: any;
mutationName: T;
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I think a better name is "mutationOperator" (in line with research papers)

"anyOf": [
{
"const" : "AdditionOperatorNegation",
"description": "Replace ```a + b``` with ```a - b```."
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

It is very useful to see all the descriptions here. It will help Stryker users enormously. 👏

brokhiv and others added 2 commits January 27, 2024 10:23
* Added doc comments where they were missing

* Added/modified description of mutation levels in docs

* Updated section on level selection

* Possibly fixed pipeline failure
Looks like a dependency was snuck in from local, removed that

* linter fixes

Remove spurious whitespace at lines 12 and 17

* Updated naming changes in accordance to the new convention

* Made mutation names consistent with previous naming change

* Add calisto guide (specific commands still pending)

---------

Co-authored-by: Ivo_Broekhof <[email protected]>
Co-authored-by: Danut Copae <[email protected]>
Co-authored-by: Danut Copae <[email protected]>
* Move default-mutation-levels file to .ts

* Rename mutationName to mutationOperator

* Move if statements outside of API

* Remove `any` type from ReplacementConfiguration

* Remove all the clear-text-reporter changes

* Remove all clear-text reporter changes

* Minimum includedMutations array length, warn when mutator isn't recognised

* Remove default options for mutator options

* Fix typo

* Fix reporters-e2e test

* Refer to Callisto documentation
@dvcopae
Copy link

dvcopae commented Jan 27, 2024

Changes since Nico's last review:

  • Moved default-mutation-levels.js to a .ts file and used the spread operator to make it clearer that one level extends the other
  • Replaced mutationName with mutationOperator
  • Removed any type from ReplacementConfiguration
  • Removed everything related to the clear-text reporter changes
  • Enforce a minimum array size of 1 for the includedMutations property
  • Print a warning when something is not recognised in the includedMutations/excludedMutations configuration
  • Extend documentation about the concept of mutation levels, and how Callisto can be used to make adjustments to the default mutation levels

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

Successfully merging this pull request may close these issues.

5 participants