import * as assert from 'assert'; import * as vscode from 'vscode'; import { ESLintAdapter } from '../src/adapters/eslint'; import { StylelintAdapter } from '../src/adapters/stylelint'; suite('Adapter Tests', () => { test('ESLintAdapter has correct id and languages', () => { const adapter = new ESLintAdapter(); assert.strictEqual(adapter.id, 'eslint'); assert.deepStrictEqual(adapter.supportedLanguages, ['javascript', 'typescript']); }); test('StylelintAdapter has correct id and languages', () => { const adapter = new StylelintAdapter(); assert.strictEqual(adapter.id, 'stylelint'); assert.deepStrictEqual(adapter.supportedLanguages, ['css']); }); test('ESLintAdapter check returns AdapterResult structure', async () => { const adapter = new ESLintAdapter(); if (!adapter.isAvailable()) { return; } const doc = await vscode.workspace.openTextDocument({ content: 'const x = 1;\nconsole.log(x);\n', language: 'javascript', }); const result = await adapter.check(doc, __dirname); assert.ok(result.status === 'ok' || result.status === 'tool-unavailable'); assert.ok(Array.isArray(result.diagnostics)); }); test('ESLintAdapter surfaces octal literal as eslint:parse-error', async () => { const adapter = new ESLintAdapter(); if (!adapter.isAvailable()) { return; } const doc = await vscode.workspace.openTextDocument({ content: 'var a = 010;\n', language: 'javascript', }); const result = await adapter.check(doc, __dirname); assert.strictEqual(result.status, 'ok'); const parseErrors = result.diagnostics.filter(d => d.ruleId === 'eslint:parse-error'); assert.ok(parseErrors.length >= 1, 'expected a parse-error diagnostic for octal literal'); assert.strictEqual(parseErrors[0].severity, 'error'); }); test('ESLintAdapter surfaces \\8 escape as eslint:parse-error', async () => { const adapter = new ESLintAdapter(); if (!adapter.isAvailable()) { return; } const doc = await vscode.workspace.openTextDocument({ content: 'var b = "\\8";\n', language: 'javascript', }); const result = await adapter.check(doc, __dirname); assert.strictEqual(result.status, 'ok'); const parseErrors = result.diagnostics.filter(d => d.ruleId === 'eslint:parse-error'); assert.ok(parseErrors.length >= 1, 'expected a parse-error diagnostic for \\8 escape'); }); test('ESLintAdapter parses JSX in .js without parse error', async () => { const adapter = new ESLintAdapter(); if (!adapter.isAvailable()) { return; } const doc = await vscode.workspace.openTextDocument({ content: 'const App = () =>