package quality import ( "context" "testing" ) type panicDetector struct{} func (p panicDetector) Name() string { return "panic_detector" } func (p panicDetector) Severity() Severity { return SeverityT2 } func (p panicDetector) Detect(ctx context.Context, path string, config *Config) ([]Finding, error) { panic("boom") } type okDetector struct{} func (o okDetector) Name() string { return "ok_detector" } func (o okDetector) Severity() Severity { return SeverityT1 } func (o okDetector) Detect(ctx context.Context, path string, config *Config) ([]Finding, error) { return []Finding{{ID: "ok", Type: "ok", Title: "ok", File: "f.go", Line: 1, Severity: SeverityT1, Score: 1, Status: StatusOpen}}, nil } func TestScannerRecoversDetectorPanic(t *testing.T) { s := NewScanner(&Config{Path: ".", Language: "go"}) s.RegisterDetector(panicDetector{}) s.RegisterDetector(okDetector{}) result, err := s.Scan(context.Background()) if err != nil { t.Fatalf("scan should recover detector panic, got err: %v", err) } if len(result.Findings) != 1 { t.Fatalf("expected findings from healthy detector only, got %d", len(result.Findings)) } }