d2ir: Fix globs to not match reserved
This commit is contained in:
parent
82663f0445
commit
63efa12160
5 changed files with 1729 additions and 11 deletions
|
|
@ -85,23 +85,27 @@ func assertQuery(t testing.TB, n d2ir.Node, nfields, nedges int, primary interfa
|
||||||
m := n.Map()
|
m := n.Map()
|
||||||
p := n.Primary()
|
p := n.Primary()
|
||||||
|
|
||||||
|
var na []d2ir.Node
|
||||||
if idStr != "" {
|
if idStr != "" {
|
||||||
var err error
|
var err error
|
||||||
n, err = m.Query(idStr)
|
na, err = m.QueryAll(idStr)
|
||||||
assert.Success(t, err)
|
assert.Success(t, err)
|
||||||
assert.NotEqual(t, n, nil)
|
assert.NotEqual(t, n, nil)
|
||||||
|
} else {
|
||||||
p = n.Primary()
|
na = append(na, n)
|
||||||
m = n.Map()
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
for _, n := range na {
|
||||||
|
m = n.Map()
|
||||||
|
p = n.Primary()
|
||||||
assert.Equal(t, nfields, m.FieldCountRecursive())
|
assert.Equal(t, nfields, m.FieldCountRecursive())
|
||||||
assert.Equal(t, nedges, m.EdgeCountRecursive())
|
assert.Equal(t, nedges, m.EdgeCountRecursive())
|
||||||
if !makeScalar(p).Equal(makeScalar(primary)) {
|
if !makeScalar(p).Equal(makeScalar(primary)) {
|
||||||
t.Fatalf("expected primary %#v but got %s", primary, p)
|
t.Fatalf("expected primary %#v but got %s", primary, p)
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
|
||||||
return n
|
return na[0]
|
||||||
}
|
}
|
||||||
|
|
||||||
func makeScalar(v interface{}) *d2ir.Scalar {
|
func makeScalar(v interface{}) *d2ir.Scalar {
|
||||||
|
|
|
||||||
|
|
@ -31,6 +31,9 @@ func matchPattern(s string, pattern []string) bool {
|
||||||
if len(pattern) == 0 {
|
if len(pattern) == 0 {
|
||||||
return true
|
return true
|
||||||
}
|
}
|
||||||
|
if _, ok := d2graph.ReservedKeywords[s]; ok {
|
||||||
|
return false
|
||||||
|
}
|
||||||
|
|
||||||
for i := 0; i < len(pattern); i++ {
|
for i := 0; i < len(pattern); i++ {
|
||||||
if pattern[i] == "*" {
|
if pattern[i] == "*" {
|
||||||
|
|
|
||||||
|
|
@ -193,6 +193,25 @@ shared.animal
|
||||||
assertQuery(t, m, 1, 0, nil, "shared.animal.style")
|
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)
|
runa(t, tca)
|
||||||
|
|
|
||||||
|
|
@ -29,8 +29,14 @@ func (m *Map) QueryAll(idStr string) (na []Node, _ error) {
|
||||||
}
|
}
|
||||||
|
|
||||||
eida := NewEdgeIDs(k)
|
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 {
|
for _, e := range ea {
|
||||||
if k.EdgeKey == nil {
|
if k.EdgeKey == nil {
|
||||||
na = append(na, e)
|
na = append(na, e)
|
||||||
|
|
|
||||||
1686
testdata/d2ir/TestCompile/patterns/reserved.exp.json
generated
vendored
Normal file
1686
testdata/d2ir/TestCompile/patterns/reserved.exp.json
generated
vendored
Normal file
File diff suppressed because it is too large
Load diff
Loading…
Reference in a new issue