From fcaba26a28863fc0cdbbafe9ecd991512db99dfb Mon Sep 17 00:00:00 2001 From: Alexander Wang Date: Tue, 2 Jan 2024 09:32:37 -0800 Subject: [PATCH] add test, switch to mapfs --- d2oracle/edit_test.go | 78 ++--- testdata/d2oracle/TestSet/import/1.exp.json | 40 +-- testdata/d2oracle/TestSet/import/2.exp.json | 40 +-- testdata/d2oracle/TestSet/import/3.exp.json | 40 +-- testdata/d2oracle/TestSet/import/4.exp.json | 297 ++++++++++++++++++++ 5 files changed, 388 insertions(+), 107 deletions(-) create mode 100644 testdata/d2oracle/TestSet/import/4.exp.json diff --git a/d2oracle/edit_test.go b/d2oracle/edit_test.go index 3b8914b1a..b18ad3786 100644 --- a/d2oracle/edit_test.go +++ b/d2oracle/edit_test.go @@ -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 -} diff --git a/testdata/d2oracle/TestSet/import/1.exp.json b/testdata/d2oracle/TestSet/import/1.exp.json index 6b6107050..a2186cf1f 100644 --- a/testdata/d2oracle/TestSet/import/1.exp.json +++ b/testdata/d2oracle/TestSet/import/1.exp.json @@ -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", diff --git a/testdata/d2oracle/TestSet/import/2.exp.json b/testdata/d2oracle/TestSet/import/2.exp.json index 37ff8f8e6..929277298 100644 --- a/testdata/d2oracle/TestSet/import/2.exp.json +++ b/testdata/d2oracle/TestSet/import/2.exp.json @@ -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", diff --git a/testdata/d2oracle/TestSet/import/3.exp.json b/testdata/d2oracle/TestSet/import/3.exp.json index 1cca998d1..feeebe288 100644 --- a/testdata/d2oracle/TestSet/import/3.exp.json +++ b/testdata/d2oracle/TestSet/import/3.exp.json @@ -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", diff --git a/testdata/d2oracle/TestSet/import/4.exp.json b/testdata/d2oracle/TestSet/import/4.exp.json new file mode 100644 index 000000000..e0b66f2f8 --- /dev/null +++ b/testdata/d2oracle/TestSet/import/4.exp.json @@ -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": "" +}