add test, switch to mapfs

This commit is contained in:
Alexander Wang 2024-01-02 09:32:37 -08:00
parent 0b993710ec
commit fcaba26a28
No known key found for this signature in database
GPG key ID: D89FA31966BDBECE
5 changed files with 388 additions and 107 deletions

View file

@ -2,9 +2,6 @@ package d2oracle_test
import (
"fmt"
"io"
"io/fs"
"os"
"path/filepath"
"strconv"
"strings"
@ -13,6 +10,7 @@ import (
"oss.terrastruct.com/util-go/assert"
"oss.terrastruct.com/util-go/diff"
"oss.terrastruct.com/util-go/go2"
"oss.terrastruct.com/util-go/mapfs"
"oss.terrastruct.com/util-go/xjson"
"oss.terrastruct.com/d2/d2compiler"
@ -1999,7 +1997,7 @@ scenarios: {
}
`,
fsTexts: map[string]string{
"meow": `x: {
"meow.d2": `x: {
style.fill: blue
}
`,
@ -2022,7 +2020,7 @@ scenarios: {
}
`,
fsTexts: map[string]string{
"meow": `x: {
"meow.d2": `x: {
style.fill: blue
}
`,
@ -2046,7 +2044,7 @@ scenarios: {
}
`,
fsTexts: map[string]string{
"meow": `x: {
"meow.d2": `x: {
style.fill: blue
}
`,
@ -2058,6 +2056,21 @@ scenarios: {
y
style.fill: yellow
}
`,
},
{
name: "import/4",
text: `...@yo
a`,
fsTexts: map[string]string{
"yo.d2": `b`,
},
key: `b.style.fill`,
value: go2.Pointer(`red`),
exp: `...@yo
a
b.style.fill: red
`,
},
}
@ -7081,17 +7094,23 @@ type editTest struct {
}
func (tc editTest) run(t *testing.T) {
var tfs *mapfs.FS
d2Path := fmt.Sprintf("d2/testdata/d2oracle/%v.d2", t.Name())
tfs := testFS(make(map[string]*testF))
for name, text := range tc.fsTexts {
tfs[name] = &testF{content: text}
if tc.fsTexts != nil {
tc.fsTexts["index.d2"] = tc.text
d2Path = "index.d2"
var err error
tfs, err = mapfs.New(tc.fsTexts)
assert.Success(t, err)
t.Cleanup(func() {
assert.Success(t, tfs.Close())
})
}
g, _, err := d2compiler.Compile(d2Path, strings.NewReader(tc.text), &d2compiler.CompileOptions{
FS: tfs,
})
if err != nil {
t.Fatal(err)
}
assert.Success(t, err)
g, err = tc.testFunc(g)
if tc.expErr != "" {
@ -8446,38 +8465,3 @@ scenarios: {
})
}
}
type testF struct {
content string
readIndex int
}
func (tf *testF) Close() error {
return nil
}
func (tf *testF) Read(p []byte) (int, error) {
data := []byte(tf.content)
if tf.readIndex >= len(data) {
tf.readIndex = 0
return 0, io.EOF
}
readBytes := copy(p, data[tf.readIndex:])
tf.readIndex += readBytes
return readBytes, nil
}
func (tf *testF) Stat() (os.FileInfo, error) {
return nil, nil
}
type testFS map[string]*testF
func (tfs testFS) Open(name string) (fs.File, error) {
for k := range tfs {
if strings.HasSuffix(name[:len(name)-3], k) {
return tfs[k], nil
}
}
return nil, fs.ErrNotExist
}

View file

@ -3,17 +3,17 @@
"name": "",
"isFolderOnly": false,
"ast": {
"range": "d2/testdata/d2oracle/TestSet/import/1.d2,0:0:0-5:0:44",
"range": "index.d2,0:0:0-5:0:44",
"nodes": [
{
"map_key": {
"range": "d2/testdata/d2oracle/TestSet/import/1.d2,0:0:0-4:1:43",
"range": "index.d2,0:0:0-4:1:43",
"key": {
"range": "d2/testdata/d2oracle/TestSet/import/1.d2,0:0:0-0:1:1",
"range": "index.d2,0:0:0-0:1:1",
"path": [
{
"unquoted_string": {
"range": "d2/testdata/d2oracle/TestSet/import/1.d2,0:0:0-0:1:1",
"range": "index.d2,0:0:0-0:1:1",
"value": [
{
"string": "x",
@ -27,17 +27,17 @@
"primary": {},
"value": {
"map": {
"range": "d2/testdata/d2oracle/TestSet/import/1.d2,0:3:3-4:1:43",
"range": "index.d2,0:3:3-4:1:43",
"nodes": [
{
"import": {
"range": "d2/testdata/d2oracle/TestSet/import/1.d2,1:2:7-1:12:17",
"range": "index.d2,1:2:7-1:12:17",
"spread": true,
"pre": "",
"path": [
{
"unquoted_string": {
"range": "d2/testdata/d2oracle/TestSet/import/1.d2,1:6:11-1:10:15",
"range": "index.d2,1:6:11-1:10:15",
"value": [
{
"string": "meow",
@ -48,7 +48,7 @@
},
{
"unquoted_string": {
"range": "d2/testdata/d2oracle/TestSet/import/1.d2,1:11:16-1:12:17",
"range": "index.d2,1:11:16-1:12:17",
"value": [
{
"string": "x",
@ -62,13 +62,13 @@
},
{
"map_key": {
"range": "d2/testdata/d2oracle/TestSet/import/1.d2,2:2:20-2:3:21",
"range": "index.d2,2:2:20-2:3:21",
"key": {
"range": "d2/testdata/d2oracle/TestSet/import/1.d2,2:2:20-2:3:21",
"range": "index.d2,2:2:20-2:3:21",
"path": [
{
"unquoted_string": {
"range": "d2/testdata/d2oracle/TestSet/import/1.d2,2:2:20-2:3:21",
"range": "index.d2,2:2:20-2:3:21",
"value": [
{
"string": "y",
@ -85,13 +85,13 @@
},
{
"map_key": {
"range": "d2/testdata/d2oracle/TestSet/import/1.d2,3:2:24-3:19:41",
"range": "index.d2,3:2:24-3:19:41",
"key": {
"range": "d2/testdata/d2oracle/TestSet/import/1.d2,3:2:24-3:14:36",
"range": "index.d2,3:2:24-3:14:36",
"path": [
{
"unquoted_string": {
"range": "d2/testdata/d2oracle/TestSet/import/1.d2,3:2:24-3:7:29",
"range": "index.d2,3:2:24-3:7:29",
"value": [
{
"string": "style",
@ -102,7 +102,7 @@
},
{
"unquoted_string": {
"range": "d2/testdata/d2oracle/TestSet/import/1.d2,3:8:30-3:14:36",
"range": "index.d2,3:8:30-3:14:36",
"value": [
{
"string": "stroke",
@ -116,7 +116,7 @@
"primary": {},
"value": {
"unquoted_string": {
"range": "d2/testdata/d2oracle/TestSet/import/1.d2,3:16:38-3:19:41",
"range": "index.d2,3:16:38-3:19:41",
"value": [
{
"string": "red",
@ -165,11 +165,11 @@
"references": [
{
"key": {
"range": "d2/testdata/d2oracle/TestSet/import/1.d2,0:0:0-0:1:1",
"range": "index.d2,0:0:0-0:1:1",
"path": [
{
"unquoted_string": {
"range": "d2/testdata/d2oracle/TestSet/import/1.d2,0:0:0-0:1:1",
"range": "index.d2,0:0:0-0:1:1",
"value": [
{
"string": "x",
@ -217,11 +217,11 @@
"references": [
{
"key": {
"range": "d2/testdata/d2oracle/TestSet/import/1.d2,2:2:20-2:3:21",
"range": "index.d2,2:2:20-2:3:21",
"path": [
{
"unquoted_string": {
"range": "d2/testdata/d2oracle/TestSet/import/1.d2,2:2:20-2:3:21",
"range": "index.d2,2:2:20-2:3:21",
"value": [
{
"string": "y",

View file

@ -3,17 +3,17 @@
"name": "",
"isFolderOnly": false,
"ast": {
"range": "d2/testdata/d2oracle/TestSet/import/2.d2,0:0:0-5:0:42",
"range": "index.d2,0:0:0-5:0:42",
"nodes": [
{
"map_key": {
"range": "d2/testdata/d2oracle/TestSet/import/2.d2,0:0:0-4:1:41",
"range": "index.d2,0:0:0-4:1:41",
"key": {
"range": "d2/testdata/d2oracle/TestSet/import/2.d2,0:0:0-0:1:1",
"range": "index.d2,0:0:0-0:1:1",
"path": [
{
"unquoted_string": {
"range": "d2/testdata/d2oracle/TestSet/import/2.d2,0:0:0-0:1:1",
"range": "index.d2,0:0:0-0:1:1",
"value": [
{
"string": "x",
@ -27,17 +27,17 @@
"primary": {},
"value": {
"map": {
"range": "d2/testdata/d2oracle/TestSet/import/2.d2,0:3:3-4:1:41",
"range": "index.d2,0:3:3-4:1:41",
"nodes": [
{
"import": {
"range": "d2/testdata/d2oracle/TestSet/import/2.d2,1:2:7-1:12:17",
"range": "index.d2,1:2:7-1:12:17",
"spread": true,
"pre": "",
"path": [
{
"unquoted_string": {
"range": "d2/testdata/d2oracle/TestSet/import/2.d2,1:6:11-1:10:15",
"range": "index.d2,1:6:11-1:10:15",
"value": [
{
"string": "meow",
@ -48,7 +48,7 @@
},
{
"unquoted_string": {
"range": "d2/testdata/d2oracle/TestSet/import/2.d2,1:11:16-1:12:17",
"range": "index.d2,1:11:16-1:12:17",
"value": [
{
"string": "x",
@ -62,13 +62,13 @@
},
{
"map_key": {
"range": "d2/testdata/d2oracle/TestSet/import/2.d2,2:2:20-2:3:21",
"range": "index.d2,2:2:20-2:3:21",
"key": {
"range": "d2/testdata/d2oracle/TestSet/import/2.d2,2:2:20-2:3:21",
"range": "index.d2,2:2:20-2:3:21",
"path": [
{
"unquoted_string": {
"range": "d2/testdata/d2oracle/TestSet/import/2.d2,2:2:20-2:3:21",
"range": "index.d2,2:2:20-2:3:21",
"value": [
{
"string": "y",
@ -85,13 +85,13 @@
},
{
"map_key": {
"range": "d2/testdata/d2oracle/TestSet/import/2.d2,3:2:24-3:17:39",
"range": "index.d2,3:2:24-3:17:39",
"key": {
"range": "d2/testdata/d2oracle/TestSet/import/2.d2,3:2:24-3:12:34",
"range": "index.d2,3:2:24-3:12:34",
"path": [
{
"unquoted_string": {
"range": "d2/testdata/d2oracle/TestSet/import/2.d2,3:2:24-3:7:29",
"range": "index.d2,3:2:24-3:7:29",
"value": [
{
"string": "style",
@ -102,7 +102,7 @@
},
{
"unquoted_string": {
"range": "d2/testdata/d2oracle/TestSet/import/2.d2,3:8:30-3:12:34",
"range": "index.d2,3:8:30-3:12:34",
"value": [
{
"string": "fill",
@ -116,7 +116,7 @@
"primary": {},
"value": {
"unquoted_string": {
"range": "d2/testdata/d2oracle/TestSet/import/2.d2,3:14:36-3:17:39",
"range": "index.d2,3:14:36-3:17:39",
"value": [
{
"string": "red",
@ -165,11 +165,11 @@
"references": [
{
"key": {
"range": "d2/testdata/d2oracle/TestSet/import/2.d2,0:0:0-0:1:1",
"range": "index.d2,0:0:0-0:1:1",
"path": [
{
"unquoted_string": {
"range": "d2/testdata/d2oracle/TestSet/import/2.d2,0:0:0-0:1:1",
"range": "index.d2,0:0:0-0:1:1",
"value": [
{
"string": "x",
@ -214,11 +214,11 @@
"references": [
{
"key": {
"range": "d2/testdata/d2oracle/TestSet/import/2.d2,2:2:20-2:3:21",
"range": "index.d2,2:2:20-2:3:21",
"path": [
{
"unquoted_string": {
"range": "d2/testdata/d2oracle/TestSet/import/2.d2,2:2:20-2:3:21",
"range": "index.d2,2:2:20-2:3:21",
"value": [
{
"string": "y",

View file

@ -3,17 +3,17 @@
"name": "",
"isFolderOnly": false,
"ast": {
"range": "d2/testdata/d2oracle/TestSet/import/3.d2,0:0:0-5:0:45",
"range": "index.d2,0:0:0-5:0:45",
"nodes": [
{
"map_key": {
"range": "d2/testdata/d2oracle/TestSet/import/3.d2,0:0:0-4:1:44",
"range": "index.d2,0:0:0-4:1:44",
"key": {
"range": "d2/testdata/d2oracle/TestSet/import/3.d2,0:0:0-0:1:1",
"range": "index.d2,0:0:0-0:1:1",
"path": [
{
"unquoted_string": {
"range": "d2/testdata/d2oracle/TestSet/import/3.d2,0:0:0-0:1:1",
"range": "index.d2,0:0:0-0:1:1",
"value": [
{
"string": "x",
@ -27,17 +27,17 @@
"primary": {},
"value": {
"map": {
"range": "d2/testdata/d2oracle/TestSet/import/3.d2,0:3:3-4:1:44",
"range": "index.d2,0:3:3-4:1:44",
"nodes": [
{
"import": {
"range": "d2/testdata/d2oracle/TestSet/import/3.d2,1:2:7-1:12:17",
"range": "index.d2,1:2:7-1:12:17",
"spread": true,
"pre": "",
"path": [
{
"unquoted_string": {
"range": "d2/testdata/d2oracle/TestSet/import/3.d2,1:6:11-1:10:15",
"range": "index.d2,1:6:11-1:10:15",
"value": [
{
"string": "meow",
@ -48,7 +48,7 @@
},
{
"unquoted_string": {
"range": "d2/testdata/d2oracle/TestSet/import/3.d2,1:11:16-1:12:17",
"range": "index.d2,1:11:16-1:12:17",
"value": [
{
"string": "x",
@ -62,13 +62,13 @@
},
{
"map_key": {
"range": "d2/testdata/d2oracle/TestSet/import/3.d2,2:2:20-2:3:21",
"range": "index.d2,2:2:20-2:3:21",
"key": {
"range": "d2/testdata/d2oracle/TestSet/import/3.d2,2:2:20-2:3:21",
"range": "index.d2,2:2:20-2:3:21",
"path": [
{
"unquoted_string": {
"range": "d2/testdata/d2oracle/TestSet/import/3.d2,2:2:20-2:3:21",
"range": "index.d2,2:2:20-2:3:21",
"value": [
{
"string": "y",
@ -85,13 +85,13 @@
},
{
"map_key": {
"range": "d2/testdata/d2oracle/TestSet/import/3.d2,3:2:24-3:20:42",
"range": "index.d2,3:2:24-3:20:42",
"key": {
"range": "d2/testdata/d2oracle/TestSet/import/3.d2,3:2:24-3:12:34",
"range": "index.d2,3:2:24-3:12:34",
"path": [
{
"unquoted_string": {
"range": "d2/testdata/d2oracle/TestSet/import/3.d2,3:2:24-3:7:29",
"range": "index.d2,3:2:24-3:7:29",
"value": [
{
"string": "style",
@ -102,7 +102,7 @@
},
{
"unquoted_string": {
"range": "d2/testdata/d2oracle/TestSet/import/3.d2,3:8:30-3:12:34",
"range": "index.d2,3:8:30-3:12:34",
"value": [
{
"string": "fill",
@ -116,7 +116,7 @@
"primary": {},
"value": {
"unquoted_string": {
"range": "d2/testdata/d2oracle/TestSet/import/3.d2,3:14:36-3:20:42",
"range": "index.d2,3:14:36-3:20:42",
"value": [
{
"string": "yellow",
@ -165,11 +165,11 @@
"references": [
{
"key": {
"range": "d2/testdata/d2oracle/TestSet/import/3.d2,0:0:0-0:1:1",
"range": "index.d2,0:0:0-0:1:1",
"path": [
{
"unquoted_string": {
"range": "d2/testdata/d2oracle/TestSet/import/3.d2,0:0:0-0:1:1",
"range": "index.d2,0:0:0-0:1:1",
"value": [
{
"string": "x",
@ -214,11 +214,11 @@
"references": [
{
"key": {
"range": "d2/testdata/d2oracle/TestSet/import/3.d2,2:2:20-2:3:21",
"range": "index.d2,2:2:20-2:3:21",
"path": [
{
"unquoted_string": {
"range": "d2/testdata/d2oracle/TestSet/import/3.d2,2:2:20-2:3:21",
"range": "index.d2,2:2:20-2:3:21",
"value": [
{
"string": "y",

297
testdata/d2oracle/TestSet/import/4.exp.json generated vendored Normal file
View file

@ -0,0 +1,297 @@
{
"graph": {
"name": "",
"isFolderOnly": false,
"ast": {
"range": "d2/testdata/d2oracle/TestSet/import/4.d2,0:0:0-3:0:27",
"nodes": [
{
"import": {
"range": "d2/testdata/d2oracle/TestSet/import/4.d2,0:0:0-0:6:6",
"spread": true,
"pre": "",
"path": [
{
"unquoted_string": {
"range": "d2/testdata/d2oracle/TestSet/import/4.d2,0:4:4-0:6:6",
"value": [
{
"string": "yo",
"raw_string": "yo"
}
]
}
}
]
}
},
{
"map_key": {
"range": "d2/testdata/d2oracle/TestSet/import/4.d2,1:0:7-1:1:8",
"key": {
"range": "d2/testdata/d2oracle/TestSet/import/4.d2,1:0:7-1:1:8",
"path": [
{
"unquoted_string": {
"range": "d2/testdata/d2oracle/TestSet/import/4.d2,1:0:7-1:1:8",
"value": [
{
"string": "a",
"raw_string": "a"
}
]
}
}
]
},
"primary": {},
"value": {}
}
},
{
"map_key": {
"range": "d2/testdata/d2oracle/TestSet/import/4.d2,2:0:9-2:17:26",
"key": {
"range": "d2/testdata/d2oracle/TestSet/import/4.d2,2:0:9-2:12:21",
"path": [
{
"unquoted_string": {
"range": "d2/testdata/d2oracle/TestSet/import/4.d2,2:0:9-2:1:10",
"value": [
{
"string": "b",
"raw_string": "b"
}
]
}
},
{
"unquoted_string": {
"range": "d2/testdata/d2oracle/TestSet/import/4.d2,2:2:11-2:7:16",
"value": [
{
"string": "style",
"raw_string": "style"
}
]
}
},
{
"unquoted_string": {
"range": "d2/testdata/d2oracle/TestSet/import/4.d2,2:8:17-2:12:21",
"value": [
{
"string": "fill",
"raw_string": "fill"
}
]
}
}
]
},
"primary": {},
"value": {
"unquoted_string": {
"range": "d2/testdata/d2oracle/TestSet/import/4.d2,2:14:23-2:17:26",
"value": [
{
"string": "red",
"raw_string": "red"
}
]
}
}
}
}
]
},
"root": {
"id": "",
"id_val": "",
"attributes": {
"label": {
"value": ""
},
"labelDimensions": {
"width": 0,
"height": 0
},
"style": {},
"near_key": null,
"shape": {
"value": ""
},
"direction": {
"value": ""
},
"constraint": null
},
"zIndex": 0
},
"edges": null,
"objects": [
{
"id": "bb",
"id_val": "bb",
"references": [
{
"key": {
"range": "d2/testdata/d2oracle/TestSet/import/yo.d2,0:0:0-0:2:2",
"path": [
{
"unquoted_string": {
"range": "d2/testdata/d2oracle/TestSet/import/yo.d2,0:0:0-0:2:2",
"value": [
{
"string": "bb",
"raw_string": "bb"
}
]
}
}
]
},
"key_path_index": 0,
"map_key_edge_index": -1
}
],
"attributes": {
"label": {
"value": "bb"
},
"labelDimensions": {
"width": 0,
"height": 0
},
"style": {},
"near_key": null,
"shape": {
"value": "rectangle"
},
"direction": {
"value": ""
},
"constraint": null
},
"zIndex": 0
},
{
"id": "a",
"id_val": "a",
"references": [
{
"key": {
"range": "d2/testdata/d2oracle/TestSet/import/4.d2,1:0:7-1:1:8",
"path": [
{
"unquoted_string": {
"range": "d2/testdata/d2oracle/TestSet/import/4.d2,1:0:7-1:1:8",
"value": [
{
"string": "a",
"raw_string": "a"
}
]
}
}
]
},
"key_path_index": 0,
"map_key_edge_index": -1
}
],
"attributes": {
"label": {
"value": "a"
},
"labelDimensions": {
"width": 0,
"height": 0
},
"style": {},
"near_key": null,
"shape": {
"value": "rectangle"
},
"direction": {
"value": ""
},
"constraint": null
},
"zIndex": 0
},
{
"id": "b",
"id_val": "b",
"references": [
{
"key": {
"range": "d2/testdata/d2oracle/TestSet/import/4.d2,2:0:9-2:12:21",
"path": [
{
"unquoted_string": {
"range": "d2/testdata/d2oracle/TestSet/import/4.d2,2:0:9-2:1:10",
"value": [
{
"string": "b",
"raw_string": "b"
}
]
}
},
{
"unquoted_string": {
"range": "d2/testdata/d2oracle/TestSet/import/4.d2,2:2:11-2:7:16",
"value": [
{
"string": "style",
"raw_string": "style"
}
]
}
},
{
"unquoted_string": {
"range": "d2/testdata/d2oracle/TestSet/import/4.d2,2:8:17-2:12:21",
"value": [
{
"string": "fill",
"raw_string": "fill"
}
]
}
}
]
},
"key_path_index": 0,
"map_key_edge_index": -1
}
],
"attributes": {
"label": {
"value": "b"
},
"labelDimensions": {
"width": 0,
"height": 0
},
"style": {
"fill": {
"value": "red"
}
},
"near_key": null,
"shape": {
"value": "rectangle"
},
"direction": {
"value": ""
},
"constraint": null
},
"zIndex": 0
}
]
},
"err": "<nil>"
}