55 lines
2.0 KiB
TypeScript
55 lines
2.0 KiB
TypeScript
import { describe, expect, it } from "bun:test"
|
|
import { readdirSync, statSync } from "node:fs"
|
|
import { join, relative, sep } from "node:path"
|
|
|
|
const repoRoot = join(import.meta.dir, "..", "..", "..")
|
|
const packageRoot = join(repoRoot, "packages", "omo-codex")
|
|
|
|
const retainedPythonFiles = [
|
|
"packages/omo-codex/plugin/components/lsp/test/fixtures/broken.py",
|
|
"packages/omo-codex/plugin/skills/programming/scripts/go/new-project.py",
|
|
"packages/omo-codex/plugin/skills/programming/scripts/python/check-no-excuse-rules.py",
|
|
"packages/omo-codex/plugin/skills/programming/scripts/python/new-project.py",
|
|
"packages/omo-codex/plugin/skills/programming/scripts/python/new-script.py",
|
|
"packages/omo-codex/plugin/skills/programming/scripts/rust/check-no-excuse-rules.py",
|
|
"packages/omo-codex/plugin/skills/programming/scripts/rust/new-project.py",
|
|
] as const
|
|
const retainedPythonFileSet = new Set<string>(retainedPythonFiles)
|
|
|
|
describe("omo-codex Python migration inventory", () => {
|
|
it("classifies every Python file under packages/omo-codex", () => {
|
|
// given
|
|
const pythonFiles = listPythonFiles(packageRoot)
|
|
|
|
// when
|
|
const unclassified = pythonFiles.filter((path) => !retainedPythonFileSet.has(path))
|
|
|
|
// then
|
|
expect(unclassified).toEqual([])
|
|
expect(pythonFiles).toEqual([...retainedPythonFiles].sort())
|
|
})
|
|
})
|
|
|
|
function listPythonFiles(root: string): readonly string[] {
|
|
const files: string[] = []
|
|
collectPythonFiles(root, files)
|
|
return files.sort()
|
|
}
|
|
|
|
function collectPythonFiles(directory: string, files: string[]): void {
|
|
for (const entry of readdirSync(directory)) {
|
|
if (entry === "node_modules" || entry === "dist") continue
|
|
|
|
const absolutePath = join(directory, entry)
|
|
const stats = statSync(absolutePath)
|
|
if (stats.isDirectory()) {
|
|
collectPythonFiles(absolutePath, files)
|
|
continue
|
|
}
|
|
|
|
if (entry.endsWith(".py") || entry.endsWith(".pyi")) {
|
|
files.push(relative(repoRoot, absolutePath).split(sep).join("/"))
|
|
}
|
|
}
|
|
}
|