Skip to content

Commit a05f099

Browse files
JackWang032jialan
and
jialan
authored
feat: add toMatchUnorderedArrary matcher and apply it (#271)
* feat: add toMatchUnorderedArrary matcher replace tokenSuggestion test * fix: revert benchmark and replace matcher of trinosql --------- Co-authored-by: jialan <[email protected]>
1 parent 195878d commit a05f099

File tree

11 files changed

+136
-48
lines changed

11 files changed

+136
-48
lines changed

jest.config.js

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -129,7 +129,7 @@ module.exports = {
129129
// setupFiles: [],
130130

131131
// A list of paths to modules that run some code to configure or set up the testing framework before each test
132-
// setupFilesAfterEnv: [],
132+
setupFilesAfterEnv: ['<rootDir>/test/setupTests.ts'],
133133

134134
// The number of seconds after which a test is considered as slow and reported as such in the results.
135135
// slowTestThreshold: 5,

test/jest.d.ts

Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,17 @@
1+
namespace jest {
2+
interface Matchers<R = void, T = {}> {
3+
/**
4+
* @description
5+
* Check whether two arrays are equal without considering the order of items.
6+
*
7+
* Make sure expected array has no duplicate item.
8+
*
9+
* Every item must be primitive type, like string, number, etc.
10+
*
11+
* @example
12+
* expect(['a', 'b']).toMatchUnorderedArrary(['b', 'a']) // pass
13+
* expect(['b', 'a']).toMatchUnorderedArrary(['c', 'b', 'a']) // not pass, missing item 'c'
14+
*/
15+
toMatchUnorderedArrary(expected: unknown[]): R;
16+
}
17+
}

test/matchers.ts

Lines changed: 49 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,49 @@
1+
export const toMatchUnorderedArrary: jest.CustomMatcher = function (
2+
actual: Array<unknown>,
3+
expected: Array<unknown>
4+
) {
5+
if (!Array.isArray(actual) || !Array.isArray(expected)) {
6+
throw new TypeError('These must be of type array!');
7+
}
8+
9+
const print = () =>
10+
`Expected: ${this.utils.printExpected(expected)}. \n` +
11+
`Received: ${this.utils.printReceived(actual)}. \n`;
12+
13+
const expectedMap = new Map(expected.map((item) => [item, false]));
14+
const unexpectedItemList = [];
15+
16+
for (const item of actual) {
17+
if (!expectedMap.has(item) || expectedMap.get(item)) unexpectedItemList.push(item);
18+
else expectedMap.set(item, true);
19+
}
20+
21+
if (unexpectedItemList.length) {
22+
return {
23+
pass: false,
24+
message: () =>
25+
`Receive unexpected items: ${this.utils.printReceived(unexpectedItemList)}. \n` +
26+
print(),
27+
};
28+
}
29+
30+
const missingItemList = Array.from(expectedMap)
31+
.filter(([_, isAppeared]) => !isAppeared)
32+
.map(([item]) => item);
33+
34+
if (missingItemList.length) {
35+
return {
36+
pass: false,
37+
message: () =>
38+
`Missing expected items: ${this.utils.printExpected(missingItemList)}. \n` +
39+
print(),
40+
};
41+
}
42+
43+
return {
44+
pass: true,
45+
message() {
46+
return 'The received array matches the expected array.';
47+
},
48+
};
49+
};

test/parser/flinksql/suggestion/tokenSuggestion.test.ts

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -19,7 +19,7 @@ describe('Flink SQL Token Suggestion', () => {
1919
pos
2020
)?.keywords;
2121

22-
expect(suggestion).toEqual(['MODULES', 'CATALOG']);
22+
expect(suggestion).toMatchUnorderedArrary(['MODULES', 'CATALOG']);
2323
});
2424

2525
test('Create Statement ', () => {
@@ -32,7 +32,7 @@ describe('Flink SQL Token Suggestion', () => {
3232
pos
3333
)?.keywords;
3434

35-
expect(suggestion).toEqual([
35+
expect(suggestion).toMatchUnorderedArrary([
3636
'CATALOG',
3737
'FUNCTION',
3838
'TEMPORARY',
@@ -52,7 +52,7 @@ describe('Flink SQL Token Suggestion', () => {
5252
pos
5353
)?.keywords;
5454

55-
expect(suggestion).toEqual([
55+
expect(suggestion).toMatchUnorderedArrary([
5656
'MODULES',
5757
'FULL',
5858
'FUNCTIONS',

test/parser/hive/suggestion/tokenSuggestion.test.ts

Lines changed: 10 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -18,7 +18,7 @@ describe('Hive SQL Token Suggestion', () => {
1818
commentOtherLine(tokenSql, pos.lineNumber),
1919
pos
2020
)?.keywords;
21-
expect(suggestion).toEqual([
21+
expect(suggestion).toMatchUnorderedArrary([
2222
'APPLICATION',
2323
'GROUP',
2424
'USER',
@@ -45,7 +45,7 @@ describe('Hive SQL Token Suggestion', () => {
4545
commentOtherLine(tokenSql, pos.lineNumber),
4646
pos
4747
)?.keywords;
48-
expect(suggestion).toEqual([
48+
expect(suggestion).toMatchUnorderedArrary([
4949
'CONNECTOR',
5050
'APPLICATION',
5151
'GROUP',
@@ -80,7 +80,7 @@ describe('Hive SQL Token Suggestion', () => {
8080
commentOtherLine(tokenSql, pos.lineNumber),
8181
pos
8282
)?.keywords;
83-
expect(suggestion).toEqual(['FROM']);
83+
expect(suggestion).toMatchUnorderedArrary(['FROM']);
8484
});
8585

8686
test('After DESCRIBE', () => {
@@ -92,7 +92,7 @@ describe('Hive SQL Token Suggestion', () => {
9292
commentOtherLine(tokenSql, pos.lineNumber),
9393
pos
9494
)?.keywords;
95-
expect(suggestion).toEqual([
95+
expect(suggestion).toMatchUnorderedArrary([
9696
'EXTENDED',
9797
'FORMATTED',
9898
'FUNCTION',
@@ -111,7 +111,7 @@ describe('Hive SQL Token Suggestion', () => {
111111
commentOtherLine(tokenSql, pos.lineNumber),
112112
pos
113113
)?.keywords;
114-
expect(suggestion).toEqual([
114+
expect(suggestion).toMatchUnorderedArrary([
115115
'CONNECTOR',
116116
'APPLICATION',
117117
'GROUP',
@@ -141,7 +141,7 @@ describe('Hive SQL Token Suggestion', () => {
141141
commentOtherLine(tokenSql, pos.lineNumber),
142142
pos
143143
)?.keywords;
144-
expect(suggestion).toEqual(['TABLE']);
144+
expect(suggestion).toMatchUnorderedArrary(['TABLE']);
145145
});
146146

147147
test('After IMPORT', () => {
@@ -153,7 +153,7 @@ describe('Hive SQL Token Suggestion', () => {
153153
commentOtherLine(tokenSql, pos.lineNumber),
154154
pos
155155
)?.keywords;
156-
expect(suggestion).toEqual(['FROM', 'TABLE', 'EXTERNAL']);
156+
expect(suggestion).toMatchUnorderedArrary(['FROM', 'TABLE', 'EXTERNAL']);
157157
});
158158

159159
test('After INSERT', () => {
@@ -165,7 +165,7 @@ describe('Hive SQL Token Suggestion', () => {
165165
commentOtherLine(tokenSql, pos.lineNumber),
166166
pos
167167
)?.keywords;
168-
expect(suggestion).toEqual(['INTO', 'OVERWRITE']);
168+
expect(suggestion).toMatchUnorderedArrary(['INTO', 'OVERWRITE']);
169169
});
170170

171171
test('After LOAD', () => {
@@ -177,7 +177,7 @@ describe('Hive SQL Token Suggestion', () => {
177177
commentOtherLine(tokenSql, pos.lineNumber),
178178
pos
179179
)?.keywords;
180-
expect(suggestion).toEqual(['DATA']);
180+
expect(suggestion).toMatchUnorderedArrary(['DATA']);
181181
});
182182

183183
test('After SHOW', () => {
@@ -189,7 +189,7 @@ describe('Hive SQL Token Suggestion', () => {
189189
commentOtherLine(tokenSql, pos.lineNumber),
190190
pos
191191
)?.keywords;
192-
expect(suggestion).toEqual([
192+
expect(suggestion).toMatchUnorderedArrary([
193193
'CURRENT',
194194
'ROLES',
195195
'PRINCIPALS',

test/parser/impala/suggestion/tokenSuggestion.test.ts

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -19,7 +19,7 @@ describe('Impala SQL Token Suggestion', () => {
1919
pos
2020
)?.keywords;
2121

22-
expect(suggestion).toEqual(['TABLE', 'VIEW', 'DATABASE']);
22+
expect(suggestion).toMatchUnorderedArrary(['TABLE', 'VIEW', 'DATABASE']);
2323
});
2424

2525
test('After CREATE', () => {
@@ -32,7 +32,7 @@ describe('Impala SQL Token Suggestion', () => {
3232
pos
3333
)?.keywords;
3434

35-
expect(suggestion).toEqual([
35+
expect(suggestion).toMatchUnorderedArrary([
3636
'TABLE',
3737
'EXTERNAL',
3838
'VIEW',
@@ -54,7 +54,7 @@ describe('Impala SQL Token Suggestion', () => {
5454
pos
5555
)?.keywords;
5656

57-
expect(suggestion).toEqual([
57+
expect(suggestion).toMatchUnorderedArrary([
5858
'DATABASE',
5959
'SCHEMA',
6060
'TABLE',
@@ -77,7 +77,7 @@ describe('Impala SQL Token Suggestion', () => {
7777
pos
7878
)?.keywords;
7979

80-
expect(suggestion).toEqual(['INTO', 'OVERWRITE']);
80+
expect(suggestion).toMatchUnorderedArrary(['INTO', 'OVERWRITE']);
8181
});
8282

8383
test('After SHOW', () => {
@@ -90,7 +90,7 @@ describe('Impala SQL Token Suggestion', () => {
9090
pos
9191
)?.keywords;
9292

93-
expect(suggestion).toEqual([
93+
expect(suggestion).toMatchUnorderedArrary([
9494
'DATABASES',
9595
'SCHEMAS',
9696
'TABLES',

test/parser/mysql/suggestion/tokenSuggestion.test.ts

Lines changed: 14 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -19,7 +19,7 @@ describe('MySQL Token Suggestion', () => {
1919
pos
2020
)?.keywords;
2121

22-
expect(suggestion).toEqual([
22+
expect(suggestion).toMatchUnorderedArrary([
2323
'RESOURCE',
2424
'USER',
2525
'VIEW',
@@ -50,7 +50,7 @@ describe('MySQL Token Suggestion', () => {
5050
pos
5151
)?.keywords;
5252

53-
expect(suggestion).toEqual([
53+
expect(suggestion).toMatchUnorderedArrary([
5454
'RESOURCE',
5555
'USER',
5656
'ROLE',
@@ -91,7 +91,7 @@ describe('MySQL Token Suggestion', () => {
9191
pos
9292
)?.keywords;
9393

94-
expect(suggestion).toEqual(['FROM', 'IGNORE', 'QUICK', 'LOW_PRIORITY']);
94+
expect(suggestion).toMatchUnorderedArrary(['FROM', 'IGNORE', 'QUICK', 'LOW_PRIORITY']);
9595
});
9696

9797
test('After DESCRIBE', () => {
@@ -104,7 +104,7 @@ describe('MySQL Token Suggestion', () => {
104104
pos
105105
)?.keywords;
106106

107-
expect(suggestion).toEqual([
107+
expect(suggestion).toMatchUnorderedArrary([
108108
'ANALYZE',
109109
'SELECT',
110110
'DELETE',
@@ -128,7 +128,7 @@ describe('MySQL Token Suggestion', () => {
128128
pos
129129
)?.keywords;
130130

131-
expect(suggestion).toEqual([
131+
expect(suggestion).toMatchUnorderedArrary([
132132
'RESOURCE',
133133
'USER',
134134
'PREPARE',
@@ -161,7 +161,13 @@ describe('MySQL Token Suggestion', () => {
161161
pos
162162
)?.keywords;
163163

164-
expect(suggestion).toEqual(['INTO', 'IGNORE', 'DELAYED', 'HIGH_PRIORITY', 'LOW_PRIORITY']);
164+
expect(suggestion).toMatchUnorderedArrary([
165+
'INTO',
166+
'IGNORE',
167+
'DELAYED',
168+
'HIGH_PRIORITY',
169+
'LOW_PRIORITY',
170+
]);
165171
});
166172

167173
test('After LOAD', () => {
@@ -174,7 +180,7 @@ describe('MySQL Token Suggestion', () => {
174180
pos
175181
)?.keywords;
176182

177-
expect(suggestion).toEqual(['INDEX', 'XML', 'DATA']);
183+
expect(suggestion).toMatchUnorderedArrary(['INDEX', 'XML', 'DATA']);
178184
});
179185

180186
test('After SHOW', () => {
@@ -187,7 +193,7 @@ describe('MySQL Token Suggestion', () => {
187193
pos
188194
)?.keywords;
189195

190-
expect(suggestion).toEqual([
196+
expect(suggestion).toMatchUnorderedArrary([
191197
'REPLICAS',
192198
'REPLICA',
193199
'SLAVE',

test/parser/pgsql/suggestion/tokenSuggestion.test.ts

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -17,7 +17,7 @@ describe('Postgres SQL Token Suggestion', () => {
1717
commentOtherLine(tokenSql, pos.lineNumber),
1818
pos
1919
)?.keywords;
20-
expect(suggestion).toEqual([
20+
expect(suggestion).toMatchUnorderedArrary([
2121
'TYPE',
2222
'TEXT',
2323
'STATISTICS',
@@ -66,7 +66,7 @@ describe('Postgres SQL Token Suggestion', () => {
6666
commentOtherLine(tokenSql, pos.lineNumber),
6767
pos
6868
)?.keywords;
69-
expect(suggestion).toEqual([
69+
expect(suggestion).toMatchUnorderedArrary([
7070
'RECURSIVE',
7171
'VIEW',
7272
'TEMPORARY',
@@ -126,7 +126,7 @@ describe('Postgres SQL Token Suggestion', () => {
126126
commentOtherLine(tokenSql, pos.lineNumber),
127127
pos
128128
)?.keywords;
129-
expect(suggestion).toEqual(['FROM']);
129+
expect(suggestion).toMatchUnorderedArrary(['FROM']);
130130
});
131131

132132
test('After DROP', () => {
@@ -138,7 +138,7 @@ describe('Postgres SQL Token Suggestion', () => {
138138
commentOtherLine(tokenSql, pos.lineNumber),
139139
pos
140140
)?.keywords;
141-
expect(suggestion).toEqual([
141+
expect(suggestion).toMatchUnorderedArrary([
142142
'OPERATOR',
143143
'ROUTINE',
144144
'PROCEDURE',
@@ -188,6 +188,6 @@ describe('Postgres SQL Token Suggestion', () => {
188188
commentOtherLine(tokenSql, pos.lineNumber),
189189
pos
190190
)?.keywords;
191-
expect(suggestion).toEqual(['INTO']);
191+
expect(suggestion).toMatchUnorderedArrary(['INTO']);
192192
});
193193
});

0 commit comments

Comments
 (0)