Skip to content

Commit 3481756

Browse files
authored
fix: tags no operator
1 parent 9462036 commit 3481756

File tree

4 files changed

+31
-11
lines changed

4 files changed

+31
-11
lines changed

src/test-reader/test-parser.ts

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -153,15 +153,15 @@ export class TestParser extends EventEmitter {
153153
treeBuilder.addTestFilter((test: Test) => {
154154
let current: Test | Suite | null = test;
155155

156+
const allTags = new Set<string>([]);
157+
156158
while (current) {
157-
if (tag(current.tags)) {
158-
return true;
159-
} else {
160-
current = current.parent;
161-
}
159+
[...current.tags.keys()].forEach(item => allTags.add(item));
160+
161+
current = current.parent;
162162
}
163163

164-
return false;
164+
return tag(allTags);
165165
});
166166
}
167167

src/utils/cli.ts

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,7 @@ export const collectCliValues = (newValue: unknown, array = [] as unknown[]): un
77
return array.concat(newValue);
88
};
99

10-
export type TagFilter = (tags: Map<string, boolean>) => boolean;
10+
export type TagFilter = (tags: Set<string>) => boolean;
1111

1212
export const compileTagFilter = (filter: string): TagFilter => {
1313
const normalizedFilter = filter.replace(/[\s'"`\\]/g, "").toLowerCase();
@@ -37,7 +37,7 @@ export const compileTagFilter = (filter: string): TagFilter => {
3737

3838
const compiledCode = compileOrExpression(normalizedFilter);
3939

40-
return new Function("tags", `return ${compiledCode};`) as (tags: Map<string, boolean>) => boolean;
40+
return new Function("tags", `return ${compiledCode};`) as (tags: Set<string>) => boolean;
4141
};
4242

4343
export const compileGrep = (grep: string): RegExp => {

test/src/test-reader/test-parser.js

Lines changed: 20 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -674,6 +674,22 @@ describe("test-reader/test-parser", () => {
674674
assert.isTrue(filter(test));
675675
});
676676

677+
it("installed filter should accept matched test with not operator and parent test for tags", async () => {
678+
await parse_({ tag: compileTagFilter("!smoke") });
679+
680+
const filter = TreeBuilder.prototype.addTestFilter.lastCall.args[0];
681+
const test = {
682+
fullTitle: () => "Some name",
683+
tags: new Map([["slow", false]]),
684+
parent: {
685+
fullTitle: () => "Some parent",
686+
tags: new Map([["smoke", false]]),
687+
},
688+
};
689+
690+
assert.isFalse(filter(test));
691+
});
692+
677693
it("installed filter should accept matched test with not operator for tags", async () => {
678694
await parse_({ tag: compileTagFilter("!smoke&!slow") });
679695

@@ -684,6 +700,10 @@ describe("test-reader/test-parser", () => {
684700
["smoke", false],
685701
["slow", false],
686702
]),
703+
parent: {
704+
fullTitle: () => "Some parent",
705+
tags: new Map([]),
706+
},
687707
};
688708

689709
assert.isFalse(filter(test));

test/src/utils/compileTagFilter.ts

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -28,16 +28,16 @@ describe("compileTagFilter", () => {
2828
cases.forEach(({ expression, okTags, badTags }) => {
2929
const func = compileTagFilter(expression);
3030

31-
assert.isTrue(func(new Map(okTags.map(tag => [tag, false]))));
31+
assert.isTrue(func(new Set(okTags.map(tag => tag))));
3232

33-
assert.isFalse(func(new Map(badTags.map(tag => [tag, false]))));
33+
assert.isFalse(func(new Set(badTags.map(tag => tag))));
3434
});
3535
});
3636

3737
it("check injection code", () => {
3838
const injectionStr = '")+console.log("111111';
3939
const func = compileTagFilter(injectionStr);
4040

41-
assert.isFalse(func(new Map()));
41+
assert.isFalse(func(new Set()));
4242
});
4343
});

0 commit comments

Comments
 (0)