package bpdoc import ( "reflect" "testing" ) type parentProps struct { A string Child *childProps Mutated *mutatedProps `blueprint:"mutated"` } type childProps struct { B int Child *grandchildProps } type grandchildProps struct { C bool } type mutatedProps struct { D int } func TestNestedPropertyStructs(t *testing.T) { parent := parentProps{Child: &childProps{Child: &grandchildProps{}}, Mutated: &mutatedProps{}} allStructs := nestedPropertyStructs(reflect.ValueOf(parent)) // mutated shouldn't be found because it's a mutated property. expected := []string{"child", "child.child"} if len(allStructs) != len(expected) { t.Errorf("expected %d structs, got %d, all entries: %q", len(expected), len(allStructs), allStructs) } for _, e := range expected { if _, ok := allStructs[e]; !ok { t.Errorf("missing entry %q, all entries: %q", e, allStructs) } } }