Path: blob/main/pkg/util/structwalk/structwalk_test.go
4094 views
package structwalk12import (3"testing"45"github.com/stretchr/testify/require"6)78type LevelA struct {9Field1 bool10Field2 string11Field3 int12Nested LevelB13}1415type LevelB struct {16Level1 bool17Level2 string18Field3 int19Nested LevelC20}2122type LevelC struct {23Level1 bool24Level2 string25Field3 int26}2728func TestWalk(t *testing.T) {29var (30iteration int31fv FuncVisitor32)33fv = func(val interface{}) Visitor {34iteration++3536// After visiting all 3 structs, should receive a w.Visit(nil) for each level37if iteration >= 4 {38require.Nil(t, val)39return nil40}4142switch iteration {43case 1:44require.IsType(t, LevelA{}, val)45case 2:46require.IsType(t, LevelB{}, val)47case 3:48require.IsType(t, LevelC{}, val)49default:50require.FailNow(t, "unexpected iteration")51}5253return fv54}5556var val LevelA57Walk(fv, val)58}5960type FuncVisitor func(v interface{}) Visitor6162func (fv FuncVisitor) Visit(v interface{}) Visitor { return fv(v) }636465