Skip to content

Commit 51907fa

Browse files
committed
feat(instrumenter): add more expression mutator for Date (stryker-mutator#4917)
1 parent e627f6c commit 51907fa

File tree

2 files changed

+37
-9
lines changed

2 files changed

+37
-9
lines changed

packages/instrumenter/src/mutators/method-expression-mutator.ts

+17-3
Original file line numberDiff line numberDiff line change
@@ -21,14 +21,28 @@ const replacements = new Map([
2121
['trim', null],
2222
['trimEnd', 'trimStart'],
2323
['min', 'max'],
24-
['getDate', 'getMonth'],
25-
['setDate', 'setMonth'],
24+
['getDate', 'getTime'],
25+
['setDate', 'setTime'],
26+
['getFullYear', 'getMonth'],
27+
['setFullYear', 'setMonth'],
2628
['getHours', 'getMinutes'],
2729
['setHours', 'setMinutes'],
30+
['getSeconds', 'getMilliseconds'],
31+
['setSeconds', 'setMilliseconds'],
32+
['getUTCDate', 'getTime'],
33+
['setUTCDate', 'setTime'],
34+
['getUTCFullYear', 'getUTCMonth'],
35+
['setUTCFullYear', 'setUTCMonth'],
36+
['getUTCHours', 'getUTCMinutes'],
37+
['setUTCHours', 'setUTCMinutes'],
38+
['getUTCSeconds', 'getUTCMilliseconds'],
39+
['setUTCSeconds', 'setUTCMilliseconds'],
2840
]);
2941

42+
const noReverseRemplacements = ['getUTCDate', 'setUTCDate'];
43+
3044
for (const [key, value] of Array.from(replacements)) {
31-
if (value) {
45+
if (value && !noReverseRemplacements.includes(key)) {
3246
replacements.set(value, key);
3347
}
3448
}

packages/instrumenter/test/unit/mutators/method-expression-mutator.spec.ts

+20-6
Original file line numberDiff line numberDiff line change
@@ -116,25 +116,39 @@ describe(sut.name, () => {
116116
});
117117
}
118118

119-
for (const [key, value] of [
119+
for (const [key, value, noReverse] of [
120120
['endsWith', 'startsWith'],
121121
['every', 'some'],
122122
['toLocaleLowerCase', 'toLocaleUpperCase'],
123123
['toLowerCase', 'toUpperCase'],
124124
['trimEnd', 'trimStart'],
125125
['min', 'max'],
126-
['getDate', 'getMonth'],
127-
['setDate', 'setMonth'],
126+
['getDate', 'getTime'],
127+
['setDate', 'setTime'],
128+
['getFullYear', 'getMonth'],
129+
['setFullYear', 'setMonth'],
128130
['getHours', 'getMinutes'],
129131
['setHours', 'setMinutes'],
132+
['getSeconds', 'getMilliseconds'],
133+
['setSeconds', 'setMilliseconds'],
134+
['getUTCDate', 'getTime', true],
135+
['setUTCDate', 'setTime', true],
136+
['getUTCFullYear', 'getUTCMonth'],
137+
['setUTCFullYear', 'setUTCMonth'],
138+
['getUTCHours', 'getUTCMinutes'],
139+
['setUTCHours', 'setUTCMinutes'],
140+
['getUTCSeconds', 'getUTCMilliseconds'],
141+
['setUTCSeconds', 'setUTCMilliseconds'],
130142
]) {
131143
it(`should replace ${key} with ${value}`, () => {
132144
expectJSMutation(sut, `text.${key}();`, `text.${value}();`);
133145
});
134146

135-
it(`should replace ${value} with ${key}`, () => {
136-
expectJSMutation(sut, `text.${value}();`, `text.${key}();`);
137-
});
147+
if (!noReverse) {
148+
it(`should replace ${value} with ${key}`, () => {
149+
expectJSMutation(sut, `text.${value}();`, `text.${key}();`);
150+
});
151+
}
138152
}
139153

140154
for (const method of ['charAt', 'filter', 'reverse', 'slice', 'sort', 'substr', 'substring', 'trim']) {

0 commit comments

Comments
 (0)