import * as assert from 'assert'; import * as vscode from 'vscode'; import { toVscodeDiagnostics } from '../src/diagnostics/diagnosticMarkers'; import type { LinterDiagnostic } from '../src/types'; suite('DiagnosticMarkers Tests', () => { test('toVscodeDiagnostics maps severity correctly', () => { const diags: LinterDiagnostic[] = [ { severity: 'error', ruleId: 'eslint:no-unused', message: 'unused', range: new vscode.Range(0, 0, 0, 5) }, { severity: 'warning', ruleId: 'pmd:avoid-duplicate', message: 'duplicate', range: new vscode.Range(1, 0, 1, 3) }, { severity: 'info', ruleId: 'custom:no-console', message: 'console', range: new vscode.Range(2, 0, 2, 4) }, ]; const result = toVscodeDiagnostics(diags); assert.strictEqual(result[0].severity, vscode.DiagnosticSeverity.Error); assert.strictEqual(result[1].severity, vscode.DiagnosticSeverity.Warning); assert.strictEqual(result[2].severity, vscode.DiagnosticSeverity.Information); }); test('toVscodeDiagnostics preserves range', () => { const range = new vscode.Range(3, 2, 5, 10); const diags: LinterDiagnostic[] = [ { severity: 'error', ruleId: 'eslint:no-var', message: 'no var', range }, ]; const result = toVscodeDiagnostics(diags); assert.ok(result[0].range.isEqual(range)); }); test('toVscodeDiagnostics prefixes message with plugin and linter', () => { const diags: LinterDiagnostic[] = [ { severity: 'warning', ruleId: 'eslint:no-console', message: 'avoid console', range: new vscode.Range(0, 0, 0, 1) }, ]; const result = toVscodeDiagnostics(diags); assert.strictEqual(result[0].message, '[Code Purifier ยท eslint] no-console: avoid console'); }); test('toVscodeDiagnostics handles ruleId without linter prefix', () => { const diags: LinterDiagnostic[] = [ { severity: 'warning', ruleId: 'custom-rule', message: 'custom message', range: new vscode.Range(0, 0, 0, 1) }, ]; const result = toVscodeDiagnostics(diags); assert.strictEqual(result[0].message, '[Code Purifier] custom-rule: custom message'); }); test('toVscodeDiagnostics sets source and code for quick fix hover', () => { const diags: LinterDiagnostic[] = [ { severity: 'warning', ruleId: 'eslint:no-var', message: 'no var', range: new vscode.Range(0, 0, 0, 1) }, ]; const result = toVscodeDiagnostics(diags); assert.strictEqual(result[0].source, 'Code Purifier'); assert.strictEqual(result[0].code, 'eslint:no-var'); }); test('toVscodeDiagnostics returns empty array for empty input', () => { assert.deepStrictEqual(toVscodeDiagnostics([]), []); }); });