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  }