1package objx_test 2 3import ( 4 "testing" 5 6 "github.com/stretchr/objx" 7 "github.com/stretchr/testify/assert" 8 "github.com/stretchr/testify/require" 9) 10 11var TestMap = objx.Map{ 12 "name": "Tyler", 13 "address": objx.Map{ 14 "city": "Salt Lake City", 15 "state": "UT", 16 }, 17 "numbers": []interface{}{"one", "two", "three", "four", "five"}, 18} 19 20type Convertable struct { 21 name string 22} 23 24type Unconvertable struct { 25 name string 26} 27 28func (c *Convertable) MSI() map[string]interface{} { 29 return objx.Map{"name": c.name} 30} 31 32func TestMapCreation(t *testing.T) { 33 o := objx.New(nil) 34 assert.Nil(t, o) 35 36 o = objx.New("Tyler") 37 assert.Nil(t, o) 38 39 unconvertable := &Unconvertable{name: "Tyler"} 40 o = objx.New(unconvertable) 41 assert.Nil(t, o) 42 43 convertable := &Convertable{name: "Tyler"} 44 o = objx.New(convertable) 45 require.NotNil(t, convertable) 46 assert.Equal(t, "Tyler", o["name"]) 47 48 o = objx.MSI() 49 assert.NotNil(t, o) 50 51 o = objx.MSI("name", "Tyler") 52 require.NotNil(t, o) 53 assert.Equal(t, o["name"], "Tyler") 54 55 o = objx.MSI(1, "a") 56 assert.Nil(t, o) 57 58 o = objx.MSI("a") 59 assert.Nil(t, o) 60 61 o = objx.MSI("a", "b", "c") 62 assert.Nil(t, o) 63} 64 65func TestMapValure(t *testing.T) { 66 m := objx.Map{ 67 "a": 1, 68 } 69 v := m.Value() 70 71 assert.Equal(t, m, v.ObjxMap()) 72} 73 74func TestMapMustFromJSONWithError(t *testing.T) { 75 _, err := objx.FromJSON(`"name":"Mat"}`) 76 assert.Error(t, err) 77} 78 79func TestMapFromJSON(t *testing.T) { 80 o := objx.MustFromJSON(`{"name":"Mat"}`) 81 82 require.NotNil(t, o) 83 assert.Equal(t, "Mat", o["name"]) 84} 85 86func TestMapFromJSONWithError(t *testing.T) { 87 var m objx.Map 88 89 assert.Panics(t, func() { 90 m = objx.MustFromJSON(`"name":"Mat"}`) 91 }) 92 assert.Nil(t, m) 93} 94 95func TestMapFromBase64String(t *testing.T) { 96 base64String := "eyJuYW1lIjoiTWF0In0=" 97 o, err := objx.FromBase64(base64String) 98 99 require.NoError(t, err) 100 assert.Equal(t, o.Get("name").Str(), "Mat") 101 assert.Equal(t, objx.MustFromBase64(base64String).Get("name").Str(), "Mat") 102} 103 104func TestMapFromBase64StringWithError(t *testing.T) { 105 base64String := "eyJuYW1lIjoiTWFasd0In0=" 106 _, err := objx.FromBase64(base64String) 107 108 assert.Error(t, err) 109 assert.Panics(t, func() { 110 objx.MustFromBase64(base64String) 111 }) 112} 113 114func TestMapFromSignedBase64String(t *testing.T) { 115 base64String := "eyJuYW1lIjoiTWF0In0=_67ee82916f90b2c0d68c903266e8998c9ef0c3d6" 116 117 o, err := objx.FromSignedBase64(base64String, "key") 118 119 require.NoError(t, err) 120 assert.Equal(t, o.Get("name").Str(), "Mat") 121 assert.Equal(t, objx.MustFromSignedBase64(base64String, "key").Get("name").Str(), "Mat") 122} 123 124func TestMapFromSignedBase64StringWithError(t *testing.T) { 125 base64String := "eyJuYW1lasdIjoiTWF0In0=_67ee82916f90b2c0d68c903266e8998c9ef0c3d6" 126 _, err := objx.FromSignedBase64(base64String, "key") 127 assert.Error(t, err) 128 assert.Panics(t, func() { 129 objx.MustFromSignedBase64(base64String, "key") 130 }) 131 132 base64String = "eyJuYW1lasdIjoiTWF0In0=67ee82916f90b2c0d68c903266e8998c9ef0c3d6" 133 _, err = objx.FromSignedBase64(base64String, "key") 134 assert.Error(t, err) 135 assert.Panics(t, func() { 136 objx.MustFromSignedBase64(base64String, "key") 137 }) 138 139 base64String = "eyJuYW1lIjoiTWF0In0=_67ee82916f90b2c0d68c903266e8998c9ef0c3d6_junk" 140 _, err = objx.FromSignedBase64(base64String, "key") 141 assert.Error(t, err) 142 assert.Panics(t, func() { 143 objx.MustFromSignedBase64(base64String, "key") 144 }) 145} 146 147func TestMapFromURLQuery(t *testing.T) { 148 m, err := objx.FromURLQuery("name=tyler&state=UT") 149 150 assert.NoError(t, err) 151 require.NotNil(t, m) 152 assert.Equal(t, "tyler", m.Get("name").Str()) 153 assert.Equal(t, "UT", m.Get("state").Str()) 154} 155 156func TestMapMustFromURLQuery(t *testing.T) { 157 m := objx.MustFromURLQuery("name=tyler&state=UT") 158 159 require.NotNil(t, m) 160 assert.Equal(t, "tyler", m.Get("name").Str()) 161 assert.Equal(t, "UT", m.Get("state").Str()) 162} 163 164func TestMapFromURLQueryWithError(t *testing.T) { 165 m, err := objx.FromURLQuery("%") 166 167 assert.Error(t, err) 168 assert.Nil(t, m) 169 assert.Panics(t, func() { 170 objx.MustFromURLQuery("%") 171 }) 172} 173