chore: add source completion tester (#4077)

* add source completion tester

Signed-off-by: Alex Goodman <wagoodman@users.noreply.github.com>

* add missing t.Helper calls

Signed-off-by: Alex Goodman <wagoodman@users.noreply.github.com>

---------

Signed-off-by: Alex Goodman <wagoodman@users.noreply.github.com>
This commit is contained in:
Alex Goodman 2025-07-23 09:49:47 -04:00 committed by GitHub
parent 48bf81cf7f
commit f0a990b85f
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
3 changed files with 65 additions and 0 deletions

View File

@ -12,6 +12,7 @@ type CompletionTester struct {
} }
func NewCompletionTester(t testing.TB, ignore ...any) *CompletionTester { func NewCompletionTester(t testing.TB, ignore ...any) *CompletionTester {
t.Helper()
tester := &CompletionTester{ tester := &CompletionTester{
valid: AllTypes(), valid: AllTypes(),
ignore: ignore, ignore: ignore,
@ -23,6 +24,14 @@ func NewCompletionTester(t testing.TB, ignore ...any) *CompletionTester {
return tester return tester
} }
func (tr *CompletionTester) Ignore(is ...any) {
tr.ignore = append(tr.ignore, keepNonNil(is...)...)
}
func (tr *CompletionTester) Expect(is ...any) {
tr.valid = append(tr.valid, keepNonNil(is...)...)
}
func (tr *CompletionTester) Tested(t testing.TB, m any) { func (tr *CompletionTester) Tested(t testing.TB, m any) {
t.Helper() t.Helper()
@ -33,6 +42,13 @@ func (tr *CompletionTester) Tested(t testing.TB, m any) {
t.Fatal("no valid metadata types to test against") t.Fatal("no valid metadata types to test against")
} }
ty := reflect.TypeOf(m) ty := reflect.TypeOf(m)
for _, v := range tr.ignore {
if reflect.TypeOf(v) == ty {
return
}
}
for _, v := range tr.valid { for _, v := range tr.valid {
if reflect.TypeOf(v) == ty { if reflect.TypeOf(v) == ty {
tr.saw = append(tr.saw, m) tr.saw = append(tr.saw, m)
@ -67,3 +83,13 @@ validations:
} }
} }
} }
func keepNonNil(is ...any) []any {
var result []any
for _, i := range is {
if i != nil {
result = append(result, i)
}
}
return result
}

View File

@ -12,6 +12,7 @@ type CompletionTester struct {
} }
func NewCompletionTester(t testing.TB, ignore ...any) *CompletionTester { func NewCompletionTester(t testing.TB, ignore ...any) *CompletionTester {
t.Helper()
tester := &CompletionTester{ tester := &CompletionTester{
valid: AllTypes(), valid: AllTypes(),
ignore: ignore, ignore: ignore,
@ -23,6 +24,14 @@ func NewCompletionTester(t testing.TB, ignore ...any) *CompletionTester {
return tester return tester
} }
func (tr *CompletionTester) Ignore(is ...any) {
tr.ignore = append(tr.ignore, keepNonNil(is...)...)
}
func (tr *CompletionTester) Expect(is ...any) {
tr.valid = append(tr.valid, keepNonNil(is...)...)
}
func (tr *CompletionTester) Tested(t testing.TB, m any) { func (tr *CompletionTester) Tested(t testing.TB, m any) {
t.Helper() t.Helper()
@ -33,6 +42,13 @@ func (tr *CompletionTester) Tested(t testing.TB, m any) {
t.Fatal("no valid metadata types to test against") t.Fatal("no valid metadata types to test against")
} }
ty := reflect.TypeOf(m) ty := reflect.TypeOf(m)
for _, v := range tr.ignore {
if reflect.TypeOf(v) == ty {
return
}
}
for _, v := range tr.valid { for _, v := range tr.valid {
if reflect.TypeOf(v) == ty { if reflect.TypeOf(v) == ty {
tr.saw = append(tr.saw, m) tr.saw = append(tr.saw, m)
@ -67,3 +83,13 @@ validations:
} }
} }
} }
func keepNonNil(is ...any) []any {
var result []any
for _, i := range is {
if i != nil {
result = append(result, i)
}
}
return result
}

View File

@ -4,14 +4,27 @@ import (
"testing" "testing"
"github.com/anchore/syft/syft/internal/packagemetadata" "github.com/anchore/syft/syft/internal/packagemetadata"
"github.com/anchore/syft/syft/internal/sourcemetadata"
) )
type PackageMetadataCompletionTester struct { type PackageMetadataCompletionTester struct {
*packagemetadata.CompletionTester *packagemetadata.CompletionTester
} }
type SourceMetadataCompletionTester struct {
*sourcemetadata.CompletionTester
}
func NewPackageMetadataCompletionTester(t testing.TB, ignore ...any) *PackageMetadataCompletionTester { func NewPackageMetadataCompletionTester(t testing.TB, ignore ...any) *PackageMetadataCompletionTester {
t.Helper()
return &PackageMetadataCompletionTester{ return &PackageMetadataCompletionTester{
CompletionTester: packagemetadata.NewCompletionTester(t, ignore...), CompletionTester: packagemetadata.NewCompletionTester(t, ignore...),
} }
} }
func NewSourceMetadataCompletionTester(t testing.TB, ignore ...any) *SourceMetadataCompletionTester {
t.Helper()
return &SourceMetadataCompletionTester{
CompletionTester: sourcemetadata.NewCompletionTester(t, ignore...),
}
}