d2ir: Fix globs to not match reserved

This commit is contained in:
Anmol Sethi 2023-07-29 16:54:44 -07:00
parent 82663f0445
commit 63efa12160
No known key found for this signature in database
GPG key ID: 8CEF1878FF10ADEB
5 changed files with 1729 additions and 11 deletions

View file

@ -85,23 +85,27 @@ func assertQuery(t testing.TB, n d2ir.Node, nfields, nedges int, primary interfa
m := n.Map()
p := n.Primary()
var na []d2ir.Node
if idStr != "" {
var err error
n, err = m.Query(idStr)
na, err = m.QueryAll(idStr)
assert.Success(t, err)
assert.NotEqual(t, n, nil)
} else {
na = append(na, n)
}
p = n.Primary()
for _, n := range na {
m = n.Map()
p = n.Primary()
assert.Equal(t, nfields, m.FieldCountRecursive())
assert.Equal(t, nedges, m.EdgeCountRecursive())
if !makeScalar(p).Equal(makeScalar(primary)) {
t.Fatalf("expected primary %#v but got %s", primary, p)
}
}
assert.Equal(t, nfields, m.FieldCountRecursive())
assert.Equal(t, nedges, m.EdgeCountRecursive())
if !makeScalar(p).Equal(makeScalar(primary)) {
t.Fatalf("expected primary %#v but got %s", primary, p)
}
return n
return na[0]
}
func makeScalar(v interface{}) *d2ir.Scalar {

View file

@ -31,6 +31,9 @@ func matchPattern(s string, pattern []string) bool {
if len(pattern) == 0 {
return true
}
if _, ok := d2graph.ReservedKeywords[s]; ok {
return false
}
for i := 0; i < len(pattern); i++ {
if pattern[i] == "*" {

View file

@ -193,6 +193,25 @@ shared.animal
assertQuery(t, m, 1, 0, nil, "shared.animal.style")
},
},
{
name: "reserved",
run: func(t testing.TB) {
m, err := compile(t, `vars: {
d2-config: {
layout-engine: elk
}
}
Spiderman 1
Spiderman 2
Spiderman 3
* -> *: arrow`)
assert.Success(t, err)
assertQuery(t, m, 6, 9, nil, "")
assertQuery(t, m, 0, 0, "arrow", "(* -> *)[*]")
},
},
}
runa(t, tca)

View file

@ -29,8 +29,14 @@ func (m *Map) QueryAll(idStr string) (na []Node, _ error) {
}
eida := NewEdgeIDs(k)
for _, eid := range eida {
ea := m.GetEdges(eid, nil)
for i, eid := range eida {
refctx := &RefContext{
Key: k,
ScopeMap: m,
Edge: k.Edges[i],
}
ea := m.GetEdges(eid, refctx)
for _, e := range ea {
if k.EdgeKey == nil {
na = append(na, e)

1686
testdata/d2ir/TestCompile/patterns/reserved.exp.json generated vendored Normal file

File diff suppressed because it is too large Load diff