Struct-filling #14

Merged
lilleman merged 10 commits from struct-filling into main 2026-09-15 17:52:29 +02:00
2 changed files with 16 additions and 10 deletions
Showing only changes of commit c212c6bef4 - Show all commits
+3
View File
@@ -185,6 +185,9 @@ func TestIsTemplate(t *testing.T) {
` "{/sv_SE.person}"`: "write sv_SE.person", ` "{/sv_SE.person}"`: "write sv_SE.person",
`{"format":"{/sv_SE.person}"}`: "write sv_SE.person", `{"format":"{/sv_SE.person}"}`: "write sv_SE.person",
"//sv_SE.person": "write sv_SE.person", "//sv_SE.person": "write sv_SE.person",
"{//sv_SE.person}": "{//sv_SE.person} is the path sv_SE.person written as a template; write sv_SE.person",
"/sv_SE/person": `path "sv_SE/person" contains "/"`,
"{/-}": `path "-" is reserved`,
} { } {
if _, err := IsTemplate(arg); err == nil || !strings.Contains(err.Error(), want) { if _, err := IsTemplate(arg); err == nil || !strings.Contains(err.Error(), want) {
t.Errorf("IsTemplate(%q) = %v; want it rejected naming %s", arg, err, want) t.Errorf("IsTemplate(%q) = %v; want it rejected naming %s", arg, err, want)
+13 -10
View File
@@ -243,17 +243,20 @@ func TestFakeStructErrors(t *testing.T) {
} }
} }
func TestFakeStructBoundsTheRecordsATypeReaches(t *testing.T) { func TestFakeStructBoundsTheStructsATypeReaches(t *testing.T) {
f := structData(t) f := structData(t)
tree := reflect.TypeOf(structPlace{}) place := reflect.TypeOf(structPlace{})
for depth := 1; depth <= 10; depth++ { tree := place
for depth := 1; depth <= 8; depth++ {
tree = reflect.StructOf([]reflect.StructField{{Name: "L", Type: reflect.PointerTo(tree)}, {Name: "R", Type: reflect.PointerTo(tree)}}) tree = reflect.StructOf([]reflect.StructField{{Name: "L", Type: reflect.PointerTo(tree)}, {Name: "R", Type: reflect.PointerTo(tree)}})
err := f.FakeStruct(reflect.New(tree).Interface()) }
switch { fields := []reflect.StructField{{Name: "L", Type: reflect.PointerTo(tree)}, {Name: "R", Type: reflect.PointerTo(tree)}, {Name: "P", Type: place}}
case depth < 10 && err != nil: if err := f.FakeStruct(reflect.New(reflect.StructOf(fields)).Interface()); err != nil {
t.Fatalf("a tree %d deep, %d records: FakeStruct = %v, want it filled", depth, 1<<(depth+1)-1, err) t.Fatalf("a type reaching 1024 structs: FakeStruct = %v, want it filled", err)
case depth == 10 && (err == nil || !strings.Contains(err.Error(), "more than 1024 records") || !strings.Contains(err.Error(), `fake:"-"`)): }
t.Errorf("a tree 10 deep, 2047 records: FakeStruct = %v, want it refused naming the cap and fake:\"-\"", err) embedded := reflect.StructField{Name: "StructFamily", Type: reflect.TypeOf(StructFamily{}), Anonymous: true}
} err := f.FakeStruct(reflect.New(reflect.StructOf(append(fields, embedded))).Interface())
if err == nil || !strings.Contains(err.Error(), "more than 1024 structs") || !strings.Contains(err.Error(), `leave a struct field unfilled with fake:"-"`) {
t.Errorf("a type reaching 1025 structs, the last embedded: FakeStruct = %v, want it refused naming the cap and fake:\"-\"", err)
} }
} }