Identify conflicting sequence registration positions
This commit is contained in:
@@ -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"}},
|
||||
|
||||
Reference in New Issue
Block a user