github.com/qiniu/dyn@v1.3.0/vars/context_test.go (about)

     1  package vars
     2  
     3  import (
     4  	"errors"
     5  	"reflect"
     6  	"testing"
     7  
     8  	"github.com/qiniu/x/jsonutil"
     9  )
    10  
    11  // ---------------------------------------------------------------------------
    12  
    13  type caseMatchVar struct {
    14  	Key         string
    15  	RealVal     string
    16  	Err         error
    17  	OldDom      string
    18  	ExpectedDom string
    19  }
    20  
    21  func TestMatchVar(t *testing.T) {
    22  
    23  	cases := []caseMatchVar{
    24  		{
    25  			Key:         `a.b`,
    26  			RealVal:     `{"value": 1}`,
    27  			Err:         nil,
    28  			OldDom:      `{}`,
    29  			ExpectedDom: `{"a": {"b": {"value": 1}}}`,
    30  		},
    31  		{
    32  			Key:         `a.b`,
    33  			RealVal:     `{"value": 1}`,
    34  			Err:         errors.New("unmatched field: `value`"),
    35  			OldDom:      `{"a": {"b": {"value": 2}}}`,
    36  			ExpectedDom: `{"a": {"b": {"value": 2}}}`,
    37  		},
    38  		{
    39  			Key:         `a.b`,
    40  			RealVal:     `{"value": 1}`,
    41  			Err:         ErrUnmatchedValue,
    42  			OldDom:      `{"a": "123"}`,
    43  			ExpectedDom: `{"a": "123"}`,
    44  		},
    45  		{
    46  			Key:         `a.b`,
    47  			RealVal:     `{"value": {"37": "64"}}`,
    48  			Err:         nil,
    49  			OldDom:      `{"a": {}, "c": 1.2}`,
    50  			ExpectedDom: `{"a": {"b": {"value": {"37": "64"}}}, "c": 1.2}`,
    51  		},
    52  	}
    53  
    54  	for _, c := range cases {
    55  		ctx := New()
    56  		err := jsonutil.Unmarshal(c.OldDom, &ctx.vars)
    57  		if err != nil {
    58  			t.Fatal("jsonutil.Unmarshal OldDom failed:", c.OldDom, err)
    59  		}
    60  		var vreal interface{}
    61  		err = jsonutil.Unmarshal(c.RealVal, &vreal)
    62  		if err != nil {
    63  			t.Fatal("jsonutil.Unmarshal RealVal failed:", c.RealVal, err)
    64  		}
    65  		err = ctx.MatchVar(c.Key, vreal)
    66  		if err != c.Err {
    67  			if !(err != nil && c.Err != nil && err.Error() == c.Err.Error()) {
    68  				t.Fatal("MatchVar unexpected error:", c, err)
    69  			}
    70  		}
    71  		var vdom interface{}
    72  		err = jsonutil.Unmarshal(c.ExpectedDom, &vdom)
    73  		if err != nil {
    74  			t.Fatal("jsonutil.Unmarshal ExpectedDom failed:", c.ExpectedDom, err)
    75  		}
    76  		if !reflect.DeepEqual(ctx.vars, vdom) {
    77  			t.Fatal("MatchVar unexpected dom:", c, vdom)
    78  		}
    79  	}
    80  }
    81  
    82  // ---------------------------------------------------------------------------