Skip to content

Commit d8b2d5f

Browse files
committed
chore: add more code actions unit tests
1 parent c5e057a commit d8b2d5f

5 files changed

+94
-205
lines changed

package-lock.json

-202
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

package.json

+1-2
Original file line numberDiff line numberDiff line change
@@ -43,7 +43,7 @@
4343
"lint": "xo && npm run lint:md",
4444
"lint:md": "prettier --parser markdown '**/*.md' --check",
4545
"prepare": "husky install",
46-
"test": "NODE_NO_WARNINGS=1 node --require tsx/cjs --test test/index.ts | tap-mocha-reporter spec",
46+
"test": "NODE_NO_WARNINGS=1 node --require tsx/cjs --test test/index.ts",
4747
"test:coverage": "NODE_NO_WARNINGS=1 c8 node --require tsx/cjs --test test/index.ts",
4848
"test:watch": "NODE_NO_WARNINGS=1 node --require tsx/cjs --watch --test test/index.ts",
4949
"vscode:prepublish": "npm run check && npm run build"
@@ -213,7 +213,6 @@
213213
"prettier": "^3.2.4",
214214
"prettier-plugin-packagejson": "^2.4.9",
215215
"rimraf": "^5.0.5",
216-
"tap-mocha-reporter": "^5.0.4",
217216
"tsx": "^4.7.0",
218217
"typescript": "^5.3.3",
219218
"vsce": "^2.15.0",

test/code-actions-builder.test.ts

+91
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,91 @@
1+
import {test, describe} from 'node:test';
2+
import assert from 'node:assert';
3+
import {TextDocument} from 'vscode-languageserver-textdocument';
4+
import {
5+
CodeAction,
6+
Diagnostic,
7+
Range,
8+
Position,
9+
DiagnosticSeverity,
10+
CodeActionKind,
11+
uinteger,
12+
type CodeActionParams
13+
} from 'vscode-languageserver';
14+
import {QuickFixCodeActionsBuilder} from '../server/code-actions-builder';
15+
16+
const testTextDocument: TextDocument = TextDocument.create(
17+
'file:///test.js',
18+
'javascript',
19+
1,
20+
'const foo = 1;\nconst bar = 2;\n'
21+
);
22+
23+
describe('QuickFixCodeActionsBuilder:', () => {
24+
test('Server is a function', (t) => {
25+
assert.strictEqual(typeof QuickFixCodeActionsBuilder, 'function');
26+
});
27+
28+
test('ignores non xo code actions', (t) => {
29+
const diagnostic = Diagnostic.create(
30+
Range.create(Position.create(0, 0), Position.create(0, 0)),
31+
'test message',
32+
DiagnosticSeverity.Error,
33+
'test',
34+
'non-xo'
35+
);
36+
37+
const builder = new QuickFixCodeActionsBuilder(testTextDocument, [diagnostic], undefined);
38+
39+
const codeAction = builder.build();
40+
41+
assert.deepStrictEqual(codeAction, []);
42+
});
43+
44+
describe('Disable rule actions:', () => {
45+
const diagnostic = Diagnostic.create(
46+
Range.create(Position.create(0, 0), Position.create(0, 0)),
47+
'test message',
48+
DiagnosticSeverity.Error,
49+
'test-rule',
50+
'XO'
51+
);
52+
53+
const builder = new QuickFixCodeActionsBuilder(testTextDocument, [diagnostic], undefined);
54+
test('Creates ignore same line code action', (t) => {
55+
const codeActions = builder.build();
56+
assert.equal(Array.isArray(codeActions) && codeActions.length === 3, true);
57+
const codeAction = codeActions.find(
58+
(action) => action.title === `Ignore Rule ${diagnostic.code}: Same Line`
59+
);
60+
assert.strictEqual(codeAction?.kind, CodeActionKind.QuickFix);
61+
assert.strictEqual(
62+
codeAction?.edit?.changes?.[testTextDocument.uri]?.[0].newText,
63+
` // eslint-disable-line ${diagnostic.code}`
64+
);
65+
});
66+
67+
test('Creates ignore line above code action', (t) => {
68+
const codeActions = builder.build();
69+
const codeAction = codeActions.find(
70+
(action) => action.title === `Ignore Rule ${diagnostic.code}: Line Above`
71+
);
72+
assert.strictEqual(codeAction?.kind, CodeActionKind.QuickFix);
73+
assert.strictEqual(
74+
codeAction?.edit?.changes?.[testTextDocument.uri]?.[0].newText,
75+
`// eslint-disable-next-line ${diagnostic.code}\n`
76+
);
77+
});
78+
79+
test('Creates ignore entire file code action', (t) => {
80+
const codeActions = builder.build();
81+
const codeAction = codeActions.find(
82+
(action) => action.title === `Ignore Rule ${diagnostic.code}: Entire File`
83+
);
84+
assert.strictEqual(codeAction?.kind, CodeActionKind.QuickFix);
85+
assert.strictEqual(
86+
codeAction?.edit?.changes?.[testTextDocument.uri]?.[0].newText,
87+
`/* eslint-disable ${diagnostic.code} */\n`
88+
);
89+
});
90+
});
91+
});

test/index.ts

+1
Original file line numberDiff line numberDiff line change
@@ -6,3 +6,4 @@ import './server.test.js';
66
import './lsp/document-sync.test.js';
77
import './lsp/initialization.test.js';
88
import './lsp/code-actions.test.js';
9+
import './code-actions-builder.test.js';

0 commit comments

Comments
 (0)