Make great documentation goal 1.2, and plan the README's reorganisation and the nested-template gaps #33
+26
-6
@@ -1,6 +1,7 @@
|
|||||||
package fejkdata
|
package fejkdata
|
||||||
|
|
||||||
import (
|
import (
|
||||||
|
"fmt"
|
||||||
"slices"
|
"slices"
|
||||||
"strings"
|
"strings"
|
||||||
"testing"
|
"testing"
|
||||||
@@ -10,6 +11,8 @@ func TestWalkPathStopsAtAMissingSegment(t *testing.T) {
|
|||||||
n := compiled(t, `{"format":"{a}","a":{"format":"{b}","b":"leaf"}}`)
|
n := compiled(t, `{"format":"{a}","a":{"format":"{b}","b":"leaf"}}`)
|
||||||
var seen []string
|
var seen []string
|
||||||
walk := pathWalk{
|
walk := pathWalk{
|
||||||
|
mode: walkEvery,
|
||||||
|
pins: &pinSet{},
|
||||||
level: func(tm *template, rest []string) error { seen = append(seen, "level:"+rest[0]); return nil },
|
level: func(tm *template, rest []string) error { seen = append(seen, "level:"+rest[0]); return nil },
|
||||||
leaf: func(n node) error { seen = append(seen, "leaf"); return nil },
|
leaf: func(n node) error { seen = append(seen, "leaf"); return nil },
|
||||||
}
|
}
|
||||||
@@ -33,12 +36,8 @@ func TestWalkPathChoiceConsumesNoSegment(t *testing.T) {
|
|||||||
n := compiled(t, `[{"format":"{f}","f":"1"},{"format":"{f}","f":"2"}]`)
|
n := compiled(t, `[{"format":"{f}","f":"1"},{"format":"{f}","f":"2"}]`)
|
||||||
var leaves []node
|
var leaves []node
|
||||||
_, err := walkPath(n, []string{"f"}, pathWalk{
|
_, err := walkPath(n, []string{"f"}, pathWalk{
|
||||||
choice: func(c *choice, rest []string) ([]node, error) {
|
mode: walkEvery,
|
||||||
if len(rest) != 1 || rest[0] != "f" {
|
pins: &pinSet{},
|
||||||
t.Errorf("choice saw rest %v, want [f]", rest)
|
|
||||||
}
|
|
||||||
return c.items, nil
|
|
||||||
},
|
|
||||||
leaf: func(n node) error { leaves = append(leaves, n); return nil },
|
leaf: func(n node) error { leaves = append(leaves, n); return nil },
|
||||||
})
|
})
|
||||||
if err != nil || len(leaves) != 2 {
|
if err != nil || len(leaves) != 2 {
|
||||||
@@ -46,6 +45,27 @@ func TestWalkPathChoiceConsumesNoSegment(t *testing.T) {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func TestWalkCoverStopsAtAChoice(t *testing.T) {
|
||||||
|
n := compiled(t, `[{"format":"{f}","f":"1"},{"format":"{f}","f":"2"}]`)
|
||||||
|
var leaves []node
|
||||||
|
_, err := walkPath(n, []string{"f"}, pathWalk{
|
||||||
|
mode: walkCover,
|
||||||
|
leaf: func(n node) error { leaves = append(leaves, n); return nil },
|
||||||
|
})
|
||||||
|
if err != nil || len(leaves) != 1 || leaves[0] != n {
|
||||||
|
t.Fatalf("cover through a choice = %v, leaves %v, want the choice alone", err, leaves)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
func TestDrawPathPanicsOnAnUnprovedPath(t *testing.T) {
|
||||||
|
defer func() {
|
||||||
|
if r := recover(); r == nil || !strings.Contains(fmt.Sprint(r), `no field "f"`) {
|
||||||
|
t.Errorf("drawPath(plain, f) recovered %v, want a panic naming the missing field", r)
|
||||||
|
}
|
||||||
|
}()
|
||||||
|
drawPath(compiled(t, `"plain"`), []string{"f"}, &pinSet{}, &pathDraws{s: engine(1).rand})
|
||||||
|
}
|
||||||
|
|
||||||
func TestDeepDottedPath(t *testing.T) {
|
func TestDeepDottedPath(t *testing.T) {
|
||||||
// A 5-segment path descends through alternating object/array nodes; choices
|
// A 5-segment path descends through alternating object/array nodes; choices
|
||||||
// on the path are single-variant, so it resolves deterministically.
|
// on the path are single-variant, so it resolves deterministically.
|
||||||
|
|||||||
Reference in New Issue
Block a user