Identify conflicting sequence registration positions

This commit is contained in:
2026-10-24 00:15:23 +00:00
parent 42663cf07c
commit 57edb8ec19
3 changed files with 51 additions and 7 deletions

View File

@@ -178,6 +178,34 @@ func TestCompileSequenceIdentityPolicyRejectsConflictingOverlapsWithoutInput(t *
}
}
func TestSequenceOverlapDiagnosticsIdentifyOriginalRegistrationPositions(t *testing.T) {
t.Parallel()
_, diagnostics := compileSequenceIdentityPolicy([]sequenceIdentityRegistration{
{selector: sequenceIdentitySelector{literalSequenceSelector("invalid")}},
{selector: sequenceIdentitySelector{literalSequenceSelector("unrelated")}, identityFields: []string{"id"}},
{selector: sequenceIdentitySelector{literalSequenceSelector("collections"), anyMappingSequenceSelector(), literalSequenceSelector("items")}, identityFields: []string{"id"}},
{selector: sequenceIdentitySelector{literalSequenceSelector("collections"), literalSequenceSelector("foo"), literalSequenceSelector("items")}, identityFields: []string{"name"}},
{selector: sequenceIdentitySelector{literalSequenceSelector("collections"), literalSequenceSelector("bar"), literalSequenceSelector("items")}, identityFields: []string{"code"}},
})
if len(diagnostics) != 3 {
t.Fatalf("diagnostics = %#v, want the invalid registration and two conflicts", diagnostics)
}
for _, pair := range []string{"3 and 4", "3 and 5"} {
found := false
for _, diagnostic := range diagnostics {
if strings.Contains(diagnostic.Message, pair) {
found = true
if diagnostic.Code != CodeOptionsInvalid || diagnostic.Path.String() != "" || len(diagnostic.Related) != 0 {
t.Fatalf("definition overlap invented input coordinates: %#v", diagnostic)
}
}
}
if !found {
t.Errorf("conflicting registration positions %s not identified: %#v", pair, diagnostics)
}
}
}
func TestCompileSequenceIdentityPolicyAllowsDisjointSelectorsAndRoot(t *testing.T) {
policy, diagnostics := compileSequenceIdentityPolicy([]sequenceIdentityRegistration{
{selector: sequenceIdentitySelector{}, identityFields: []string{"id"}},