go-micro.dev/v5@v5.12.0/config/reader/json/values_test.go (about) 1 package json 2 3 import ( 4 "reflect" 5 "testing" 6 7 "go-micro.dev/v5/config/source" 8 ) 9 10 func TestValues(t *testing.T) { 11 emptyStr := "" 12 testData := []struct { 13 csdata []byte 14 path []string 15 accepter interface{} 16 value interface{} 17 }{ 18 { 19 []byte(`{"foo": "bar", "baz": {"bar": "cat"}}`), 20 []string{"foo"}, 21 emptyStr, 22 "bar", 23 }, 24 { 25 []byte(`{"foo": "bar", "baz": {"bar": "cat"}}`), 26 []string{"baz", "bar"}, 27 emptyStr, 28 "cat", 29 }, 30 } 31 32 for idx, test := range testData { 33 values, err := newValues(&source.ChangeSet{ 34 Data: test.csdata, 35 }) 36 if err != nil { 37 t.Fatal(err) 38 } 39 40 v, err := values.Get(test.path...) 41 if err != nil { 42 t.Fatal(err) 43 } 44 err = v.Scan(&test.accepter) 45 if err != nil { 46 t.Fatal(err) 47 } 48 if test.accepter != test.value { 49 t.Fatalf("No.%d Expected %v got %v for path %v", idx, test.value, test.accepter, test.path) 50 } 51 } 52 } 53 54 func TestStructArray(t *testing.T) { 55 type T struct { 56 Foo string 57 } 58 59 emptyTSlice := []T{} 60 61 testData := []struct { 62 csdata []byte 63 accepter []T 64 value []T 65 }{ 66 { 67 []byte(`[{"foo": "bar"}]`), 68 emptyTSlice, 69 []T{{Foo: "bar"}}, 70 }, 71 } 72 73 for idx, test := range testData { 74 values, err := newValues(&source.ChangeSet{ 75 Data: test.csdata, 76 }) 77 if err != nil { 78 t.Fatal(err) 79 } 80 81 v, err := values.Get() 82 if err != nil { 83 t.Fatal(err) 84 } 85 err = v.Scan(&test.accepter) 86 if err != nil { 87 t.Fatal(err) 88 } 89 if !reflect.DeepEqual(test.accepter, test.value) { 90 t.Fatalf("No.%d Expected %v got %v", idx, test.value, test.accepter) 91 } 92 } 93 }