ManimCat / src /services /static-guard.test.ts
littlebrian's picture
Sync from enhance: d795216 feat: implement patch response parser for search and replace functionality
9bd4242
Raw
History Blame Contribute Delete
2.13 kB
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> = {}): 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))')
})