check-safety/any_usage_test.go
Alex Dunmow cd88c808b0 initial: standalone check-safety module hoisted from CMS
Static safety/lint runner for the BlockNinja codebase. ~25 invariant
checks across Go and frontend sources. Was at git.dev.alexdunmow.com:block/ninja
in backend/cmd/check-safety/ until the 2026-06-06 consolidation moved
the BlockNinja repos under a shared ~/src/blockninja/ parent.

This repo is the standalone extraction:
- Own go.mod (git.dev.alexdunmow.com/block/check-safety, go 1.26.4)
- Vendored internal/{helpers,theme} from CMS (Go's internal/ rule
  blocks cross-module imports; vendoring is the workaround)
- CLI contract unchanged: `check-safety <target-dir> [--flags]`
- CMS Makefile shells into ../check-safety for safety-check /
  install-safety-checker targets

Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
2026-06-06 13:04:02 +08:00

71 lines
1.7 KiB
Go

package main
import (
"path/filepath"
"testing"
)
func TestCheckGoAnyUsageFlagsAnyTypes(t *testing.T) {
root := t.TempDir()
writeTestFile(t, filepath.Join(root, "sample.go"), `package sample
type Payload struct {
Value any
Items []any
}
func Map() map[string]any {
return nil
}
`, 0644)
warnings := checkGoAnyUsage(root)
if len(warnings) < 3 {
t.Fatalf("checkGoAnyUsage() returned %d warnings, want at least 3: %#v", len(warnings), warnings)
}
}
func TestCheckGoAnyUsageSkipsTestsAndGeneratedFiles(t *testing.T) {
root := t.TempDir()
writeTestFile(t, filepath.Join(root, "sample_test.go"), `package sample
func TestThing(value any) {}
`, 0644)
writeTestFile(t, filepath.Join(root, "sample.pb.go"), `package sample
type Payload struct {
Value any
}
`, 0644)
warnings := checkGoAnyUsage(root)
if len(warnings) != 0 {
t.Fatalf("checkGoAnyUsage() returned %d warnings, want 0: %#v", len(warnings), warnings)
}
}
func TestCheckTypeScriptAnyUsageFlagsAnyPatterns(t *testing.T) {
root := t.TempDir()
writeTestFile(t, filepath.Join(root, "sample.ts"), `export type Row = any
export const fn = (value: any[]): any => value as any
`, 0644)
warnings := checkTypeScriptAnyUsage(root)
if len(warnings) < 2 {
t.Fatalf("checkTypeScriptAnyUsage() returned %d warnings, want at least 2: %#v", len(warnings), warnings)
}
}
func TestCheckTypeScriptAnyUsageSkipsCommentsAndStrings(t *testing.T) {
root := t.TempDir()
writeTestFile(t, filepath.Join(root, "sample.ts"), `// any should not count
const label = "any";
/* any */
`, 0644)
warnings := checkTypeScriptAnyUsage(root)
if len(warnings) != 0 {
t.Fatalf("checkTypeScriptAnyUsage() returned %d warnings, want 0: %#v", len(warnings), warnings)
}
}