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 // ---------------------------------------------------------------------------