Skip to content

Commit af1ec76

Browse files
authored
Fix jest/no-conditional-expect lint and enable it (matrix-org#10307)
1 parent 2c97cb4 commit af1ec76

8 files changed

+49
-83
lines changed

.eslintrc.js

-3
Original file line numberDiff line numberDiff line change
@@ -179,9 +179,6 @@ module.exports = {
179179
// TODO: There are many tests with invalid expects that should be fixed,
180180
// https://github.com/vector-im/element-web/issues/24709
181181
"jest/valid-expect": "off",
182-
// TODO: There are many cases to refactor away,
183-
// https://github.com/vector-im/element-web/issues/24710
184-
"jest/no-conditional-expect": "off",
185182
// Also treat "oldBackendOnly" as a test function.
186183
// Used in some crypto tests.
187184
"jest/no-standalone-expect": [

test/SlidingSyncManager-test.ts

+2
Original file line numberDiff line numberDiff line change
@@ -168,8 +168,10 @@ describe("SlidingSyncManager", () => {
168168
expect(slidingSync.setListRanges).toHaveBeenCalledTimes(wantWindows.length - 1);
169169
wantWindows.forEach((range, i) => {
170170
if (i === 0) {
171+
// eslint-disable-next-line jest/no-conditional-expect
171172
expect(slidingSync.setList).toHaveBeenCalledWith(
172173
SlidingSyncManager.ListSearch,
174+
// eslint-disable-next-line jest/no-conditional-expect
173175
expect.objectContaining({
174176
ranges: [[0, batchSize - 1], range],
175177
}),

test/components/views/rooms/MessageComposer-test.tsx

+4
Original file line numberDiff line numberDiff line change
@@ -220,8 +220,10 @@ describe("MessageComposer", () => {
220220

221221
it(`should${value || "not"} display the button`, () => {
222222
if (value) {
223+
// eslint-disable-next-line jest/no-conditional-expect
223224
expect(screen.getByLabelText(buttonLabel)).toBeInTheDocument();
224225
} else {
226+
// eslint-disable-next-line jest/no-conditional-expect
225227
expect(screen.queryByLabelText(buttonLabel)).not.toBeInTheDocument();
226228
}
227229
});
@@ -242,8 +244,10 @@ describe("MessageComposer", () => {
242244

243245
it(`should${!value || "not"} display the button`, () => {
244246
if (!value) {
247+
// eslint-disable-next-line jest/no-conditional-expect
245248
expect(screen.getByLabelText(buttonLabel)).toBeInTheDocument();
246249
} else {
250+
// eslint-disable-next-line jest/no-conditional-expect
247251
expect(screen.queryByLabelText(buttonLabel)).not.toBeInTheDocument();
248252
}
249253
});

test/components/views/rooms/wysiwyg_composer/components/WysiwygComposer-test.tsx

+1
Original file line numberDiff line numberDiff line change
@@ -186,6 +186,7 @@ describe("WysiwygComposer", () => {
186186
await waitFor(() => {
187187
const selection = document.getSelection();
188188
if (selection) {
189+
// eslint-disable-next-line jest/no-conditional-expect
189190
expect(selection.focusNode?.textContent).toEqual("other");
190191
}
191192
});

test/editor/model-test.ts

+36-69
Original file line numberDiff line numberDiff line change
@@ -15,9 +15,10 @@ limitations under the License.
1515
*/
1616

1717
import EditorModel from "../../src/editor/model";
18-
import { createPartCreator, createRenderer, isDocumentPosition } from "./mock";
18+
import { createPartCreator, createRenderer } from "./mock";
1919
import DocumentOffset from "../../src/editor/offset";
2020
import { PillPart } from "../../src/editor/parts";
21+
import DocumentPosition from "../../src/editor/position";
2122

2223
describe("editor/model", function () {
2324
describe("plain text manipulation", function () {
@@ -26,10 +27,8 @@ describe("editor/model", function () {
2627
const model = new EditorModel([], createPartCreator(), renderer);
2728
model.update("hello", "insertText", new DocumentOffset(5, true));
2829
expect(renderer.count).toBe(1);
29-
if (isDocumentPosition(renderer.caret)) {
30-
expect(renderer.caret.index).toBe(0);
31-
expect(renderer.caret.offset).toBe(5);
32-
}
30+
expect((renderer.caret as DocumentPosition).index).toBe(0);
31+
expect((renderer.caret as DocumentPosition).offset).toBe(5);
3332
expect(model.parts.length).toBe(1);
3433
expect(model.parts[0].type).toBe("plain");
3534
expect(model.parts[0].text).toBe("hello");
@@ -40,10 +39,8 @@ describe("editor/model", function () {
4039
const model = new EditorModel([pc.plain("hello")], pc, renderer);
4140
model.update("hello world", "insertText", new DocumentOffset(11, true));
4241
expect(renderer.count).toBe(1);
43-
if (isDocumentPosition(renderer.caret)) {
44-
expect(renderer.caret.index).toBe(0);
45-
expect(renderer.caret.offset).toBe(11);
46-
}
42+
expect((renderer.caret as DocumentPosition).index).toBe(0);
43+
expect((renderer.caret as DocumentPosition).offset).toBe(11);
4744
expect(model.parts.length).toBe(1);
4845
expect(model.parts[0].type).toBe("plain");
4946
expect(model.parts[0].text).toBe("hello world");
@@ -54,10 +51,8 @@ describe("editor/model", function () {
5451
const model = new EditorModel([pc.plain("world")], pc, renderer);
5552
model.update("hello world", "insertText", new DocumentOffset(6, false));
5653
expect(renderer.count).toBe(1);
57-
if (isDocumentPosition(renderer.caret)) {
58-
expect(renderer.caret.index).toBe(0);
59-
expect(renderer.caret.offset).toBe(6);
60-
}
54+
expect((renderer.caret as DocumentPosition).index).toBe(0);
55+
expect((renderer.caret as DocumentPosition).offset).toBe(6);
6156
expect(model.parts.length).toBe(1);
6257
expect(model.parts[0].type).toBe("plain");
6358
expect(model.parts[0].text).toBe("hello world");
@@ -70,10 +65,8 @@ describe("editor/model", function () {
7065
const model = new EditorModel([pc.plain("hello")], pc, renderer);
7166
model.update("hello\n", "insertText", new DocumentOffset(6, true));
7267
expect(renderer.count).toBe(1);
73-
if (isDocumentPosition(renderer.caret)) {
74-
expect(renderer.caret.index).toBe(1);
75-
expect(renderer.caret.offset).toBe(1);
76-
}
68+
expect((renderer.caret as DocumentPosition).index).toBe(1);
69+
expect((renderer.caret as DocumentPosition).offset).toBe(1);
7770
expect(model.parts.length).toBe(2);
7871
expect(model.parts[0].type).toBe("plain");
7972
expect(model.parts[0].text).toBe("hello");
@@ -86,10 +79,8 @@ describe("editor/model", function () {
8679
const model = new EditorModel([pc.plain("hello")], pc, renderer);
8780
model.update("hello\n\n\nworld!", "insertText", new DocumentOffset(14, true));
8881
expect(renderer.count).toBe(1);
89-
if (isDocumentPosition(renderer.caret)) {
90-
expect(renderer.caret.index).toBe(4);
91-
expect(renderer.caret.offset).toBe(6);
92-
}
82+
expect((renderer.caret as DocumentPosition).index).toBe(4);
83+
expect((renderer.caret as DocumentPosition).offset).toBe(6);
9384
expect(model.parts.length).toBe(5);
9485
expect(model.parts[0].type).toBe("plain");
9586
expect(model.parts[0].text).toBe("hello");
@@ -112,10 +103,8 @@ describe("editor/model", function () {
112103
);
113104
model.update("hello\nwarm\nworld", "insertText", new DocumentOffset(10, true));
114105
expect(renderer.count).toBe(1);
115-
if (isDocumentPosition(renderer.caret)) {
116-
expect(renderer.caret.index).toBe(2);
117-
expect(renderer.caret.offset).toBe(4);
118-
}
106+
expect((renderer.caret as DocumentPosition).index).toBe(2);
107+
expect((renderer.caret as DocumentPosition).offset).toBe(4);
119108
expect(model.parts.length).toBe(5);
120109
expect(model.parts[0].type).toBe("plain");
121110
expect(model.parts[0].text).toBe("hello");
@@ -135,10 +124,8 @@ describe("editor/model", function () {
135124
const pc = createPartCreator();
136125
const model = new EditorModel([pc.plain("try "), pc.roomPill("#someroom")], pc, renderer);
137126
model.update("try foo#someroom", "insertText", new DocumentOffset(7, false));
138-
if (isDocumentPosition(renderer.caret)) {
139-
expect(renderer.caret.index).toBe(0);
140-
expect(renderer.caret.offset).toBe(7);
141-
}
127+
expect((renderer.caret as DocumentPosition).index).toBe(0);
128+
expect((renderer.caret as DocumentPosition).offset).toBe(7);
142129
expect(model.parts.length).toBe(2);
143130
expect(model.parts[0].type).toBe("plain");
144131
expect(model.parts[0].text).toBe("try foo");
@@ -150,10 +137,8 @@ describe("editor/model", function () {
150137
const pc = createPartCreator();
151138
const model = new EditorModel([pc.plain("try "), pc.roomPill("#someroom"), pc.plain("?")], pc, renderer);
152139
model.update("try #some perhapsroom?", "insertText", new DocumentOffset(17, false));
153-
if (isDocumentPosition(renderer.caret)) {
154-
expect(renderer.caret.index).toBe(2);
155-
expect(renderer.caret.offset).toBe(8);
156-
}
140+
expect((renderer.caret as DocumentPosition).index).toBe(2);
141+
expect((renderer.caret as DocumentPosition).offset).toBe(8);
157142
expect(model.parts.length).toBe(3);
158143
expect(model.parts[0].type).toBe("plain");
159144
expect(model.parts[0].text).toBe("try ");
@@ -168,10 +153,8 @@ describe("editor/model", function () {
168153
const model = new EditorModel([pc.roomPill("#someroom")], pc, renderer);
169154
model.update("#someroo", "deleteContentBackward", new DocumentOffset(8, true));
170155
expect(renderer.count).toBe(1);
171-
if (isDocumentPosition(renderer.caret)) {
172-
expect(renderer.caret.index).toBe(-1);
173-
expect(renderer.caret.offset).toBe(0);
174-
}
156+
expect((renderer.caret as DocumentPosition).index).toBe(-1);
157+
expect((renderer.caret as DocumentPosition).offset).toBe(0);
175158
expect(model.parts.length).toBe(0);
176159
});
177160
it("remove non-editable part with delete", function () {
@@ -180,10 +163,8 @@ describe("editor/model", function () {
180163
const model = new EditorModel([pc.roomPill("#someroom")], pc, renderer);
181164
model.update("someroom", "deleteContentForward", new DocumentOffset(0, false));
182165
expect(renderer.count).toBe(1);
183-
if (isDocumentPosition(renderer.caret)) {
184-
expect(renderer.caret.index).toBe(-1);
185-
expect(renderer.caret.offset).toBe(0);
186-
}
166+
expect((renderer.caret as DocumentPosition).index).toBe(-1);
167+
expect((renderer.caret as DocumentPosition).offset).toBe(0);
187168
expect(model.parts.length).toBe(0);
188169
});
189170
});
@@ -196,10 +177,8 @@ describe("editor/model", function () {
196177
model.update("hello @a", "insertText", new DocumentOffset(8, true));
197178

198179
expect(renderer.count).toBe(1);
199-
if (isDocumentPosition(renderer.caret)) {
200-
expect(renderer.caret.index).toBe(1);
201-
expect(renderer.caret.offset).toBe(2);
202-
}
180+
expect((renderer.caret as DocumentPosition).index).toBe(1);
181+
expect((renderer.caret as DocumentPosition).offset).toBe(2);
203182
expect(model.parts.length).toBe(2);
204183
expect(model.parts[0].type).toBe("plain");
205184
expect(model.parts[0].text).toBe("hello ");
@@ -211,10 +190,8 @@ describe("editor/model", function () {
211190
model.autoComplete.tryComplete(); // see MockAutoComplete
212191

213192
expect(renderer.count).toBe(2);
214-
if (isDocumentPosition(renderer.caret)) {
215-
expect(renderer.caret.index).toBe(1);
216-
expect(renderer.caret.offset).toBe(5);
217-
}
193+
expect((renderer.caret as DocumentPosition).index).toBe(1);
194+
expect((renderer.caret as DocumentPosition).offset).toBe(5);
218195
expect(model.parts.length).toBe(2);
219196
expect(model.parts[0].type).toBe("plain");
220197
expect(model.parts[0].text).toBe("hello ");
@@ -230,10 +207,8 @@ describe("editor/model", function () {
230207
model.update("hello #r", "insertText", new DocumentOffset(8, true));
231208

232209
expect(renderer.count).toBe(1);
233-
if (isDocumentPosition(renderer.caret)) {
234-
expect(renderer.caret.index).toBe(1);
235-
expect(renderer.caret.offset).toBe(2);
236-
}
210+
expect((renderer.caret as DocumentPosition).index).toBe(1);
211+
expect((renderer.caret as DocumentPosition).offset).toBe(2);
237212
expect(model.parts.length).toBe(2);
238213
expect(model.parts[0].type).toBe("plain");
239214
expect(model.parts[0].text).toBe("hello ");
@@ -245,10 +220,8 @@ describe("editor/model", function () {
245220
model.autoComplete.tryComplete(); // see MockAutoComplete
246221

247222
expect(renderer.count).toBe(2);
248-
if (isDocumentPosition(renderer.caret)) {
249-
expect(renderer.caret.index).toBe(1);
250-
expect(renderer.caret.offset).toBe(9);
251-
}
223+
expect((renderer.caret as DocumentPosition).index).toBe(1);
224+
expect((renderer.caret as DocumentPosition).offset).toBe(9);
252225
expect(model.parts.length).toBe(2);
253226
expect(model.parts[0].type).toBe("plain");
254227
expect(model.parts[0].text).toBe("hello ");
@@ -268,10 +241,8 @@ describe("editor/model", function () {
268241
model.update("hello #riot-dev!!", "insertText", new DocumentOffset(17, true));
269242

270243
expect(renderer.count).toBe(3);
271-
if (isDocumentPosition(renderer.caret)) {
272-
expect(renderer.caret.index).toBe(2);
273-
expect(renderer.caret.offset).toBe(2);
274-
}
244+
expect((renderer.caret as DocumentPosition).index).toBe(2);
245+
expect((renderer.caret as DocumentPosition).offset).toBe(2);
275246
expect(model.parts.length).toBe(3);
276247
expect(model.parts[0].type).toBe("plain");
277248
expect(model.parts[0].text).toBe("hello ");
@@ -289,10 +260,8 @@ describe("editor/model", function () {
289260
model.update("try #define", "insertFromPaste", new DocumentOffset(11, true));
290261

291262
expect(model.autoComplete).toBeFalsy();
292-
if (isDocumentPosition(renderer.caret)) {
293-
expect(renderer.caret.index).toBe(0);
294-
expect(renderer.caret.offset).toBe(11);
295-
}
263+
expect((renderer.caret as DocumentPosition).index).toBe(0);
264+
expect((renderer.caret as DocumentPosition).offset).toBe(11);
296265
expect(model.parts.length).toBe(1);
297266
expect(model.parts[0].type).toBe("plain");
298267
expect(model.parts[0].text).toBe("try #define");
@@ -306,10 +275,8 @@ describe("editor/model", function () {
306275
model.update("try #define", "insertFromDrop", new DocumentOffset(11, true));
307276

308277
expect(model.autoComplete).toBeFalsy();
309-
if (isDocumentPosition(renderer.caret)) {
310-
expect(renderer.caret.index).toBe(0);
311-
expect(renderer.caret.offset).toBe(11);
312-
}
278+
expect((renderer.caret as DocumentPosition).index).toBe(0);
279+
expect((renderer.caret as DocumentPosition).offset).toBe(11);
313280
expect(model.parts.length).toBe(1);
314281
expect(model.parts[0].type).toBe("plain");
315282
expect(model.parts[0].text).toBe("try #define");

test/editor/operations-test.ts

+3-4
Original file line numberDiff line numberDiff line change
@@ -15,7 +15,7 @@ limitations under the License.
1515
*/
1616

1717
import EditorModel from "../../src/editor/model";
18-
import { createPartCreator, createRenderer, isDocumentPosition } from "./mock";
18+
import { createPartCreator, createRenderer } from "./mock";
1919
import {
2020
formatRange,
2121
formatRangeAsCode,
@@ -25,6 +25,7 @@ import {
2525
} from "../../src/editor/operations";
2626
import { Formatting } from "../../src/components/views/rooms/MessageComposerFormatBar";
2727
import { longestBacktickSequence } from "../../src/editor/deserialize";
28+
import DocumentPosition from "../../src/editor/position";
2829

2930
const SERIALIZED_NEWLINE = { text: "\n", type: "newline" };
3031

@@ -86,9 +87,7 @@ describe("editor/operations: formatting operations", () => {
8687

8788
expect(range.parts[0].text).toBe(input);
8889
formatRangeAsLink(range, text);
89-
if (isDocumentPosition(renderer.caret)) {
90-
expect(renderer.caret.offset).toBe(4 + expectation.indexOf("|"));
91-
}
90+
expect((renderer.caret as DocumentPosition).offset).toBe(4 + expectation.indexOf("|"));
9291
expect(model.parts[0].text).toBe("foo " + expectation.replace("|", "") + " bar");
9392
});
9493
});

test/utils/FixedRollingArray-test.ts

+2
Original file line numberDiff line numberDiff line change
@@ -56,8 +56,10 @@ describe("FixedRollingArray", () => {
5656
expect(previous - current).toBe(1);
5757

5858
if (i === 1) {
59+
// eslint-disable-next-line jest/no-conditional-expect
5960
expect(previous).toBe(maxValue);
6061
} else if (i === width) {
62+
// eslint-disable-next-line jest/no-conditional-expect
6163
expect(current).toBe(minValue);
6264
}
6365
}

test/utils/Singleflight-test.ts

+1-7
Original file line numberDiff line numberDiff line change
@@ -28,13 +28,7 @@ describe("Singleflight", () => {
2828
[null, "test"],
2929
];
3030
for (const p of permutations) {
31-
try {
32-
Singleflight.for(p[0], p[1]);
33-
// noinspection ExceptionCaughtLocallyJS
34-
throw new Error("failed to fail: " + JSON.stringify(p));
35-
} catch (e) {
36-
expect(e.message).toBe("An instance and key must be supplied");
37-
}
31+
expect(() => Singleflight.for(p[0], p[1])).toThrow("An instance and key must be supplied");
3832
}
3933
});
4034

0 commit comments

Comments
 (0)