import assert from 'node:assert/strict' import test from 'node:test' import { tryApplyKnownMypyFix } from './static-guard/manager' import type { StaticDiagnostic } from './static-guard/types' function createMypyDiagnostic(overrides: Partial = {}): StaticDiagnostic { return { tool: 'mypy', line: 1, message: 'Name "Scene" is not defined', code: 'name-defined', ...overrides } } test('tryApplyKnownMypyFix prepends manim import for undefined Scene', () => { const code = 'class MainScene(Scene):\n pass' const fixed = tryApplyKnownMypyFix(code, createMypyDiagnostic()) assert.equal(fixed, 'from manim import *\nfrom manim import Scene\nclass MainScene(Scene):\n pass') }) test('tryApplyKnownMypyFix adds explicit Scene import when wildcard import already exists', () => { const code = 'from manim import *\n\nclass MainScene(Scene):\n pass' const fixed = tryApplyKnownMypyFix(code, createMypyDiagnostic()) assert.equal(fixed, 'from manim import *\nfrom manim import Scene\n\nclass MainScene(Scene):\n pass') }) test('tryApplyKnownMypyFix avoids duplicating explicit Scene import', () => { const code = 'from manim import *\nfrom manim import Scene\n\nclass MainScene(Scene):\n pass' const fixed = tryApplyKnownMypyFix(code, createMypyDiagnostic()) assert.equal(fixed, null) }) test('tryApplyKnownMypyFix replaces CYAN with TEAL for known color alias', () => { const code = 'from manim import *\naccent = CYAN\n' const fixed = tryApplyKnownMypyFix(code, createMypyDiagnostic({ message: 'Name "CYAN" is not defined', code: 'name-defined' })) assert.equal(fixed, 'from manim import *\naccent = TEAL\n') }) test('tryApplyKnownMypyFix keeps arg-type tuple fixes active for mypy diagnostics', () => { const code = 'axes = Axes(x_range=[0, 10, 1])' const fixed = tryApplyKnownMypyFix(code, createMypyDiagnostic({ message: 'Argument "x_range" to "Axes" has incompatible type "list[int]"; expected "tuple[float, float, float] | None"', code: 'arg-type' })) assert.equal(fixed, 'axes = Axes(x_range=(0, 10, 1))') })