...

Source file src/github.com/stretchr/objx/conversions_test.go

Documentation: github.com/stretchr/objx

     1  package objx_test
     2  
     3  import (
     4  	"net/url"
     5  	"testing"
     6  
     7  	"github.com/stretchr/objx"
     8  	"github.com/stretchr/testify/assert"
     9  	"github.com/stretchr/testify/require"
    10  )
    11  
    12  func TestConversionJSON(t *testing.T) {
    13  	jsonString := `{"name":"Mat"}`
    14  	o := objx.MustFromJSON(jsonString)
    15  
    16  	result, err := o.JSON()
    17  
    18  	require.NoError(t, err)
    19  	assert.Equal(t, jsonString, result)
    20  	assert.Equal(t, jsonString, o.MustJSON())
    21  
    22  	i := objx.Map{
    23  		"a": map[interface{}]interface{}{"b": objx.Map{"c": map[interface{}]interface{}{"d": "e"}},
    24  			"f": []objx.Map{{"g": map[interface{}]interface{}{"h": "i"}}},
    25  			"j": []map[string]interface{}{{"k": map[interface{}]interface{}{"l": "m"}}},
    26  			"n": []interface{}{objx.Map{"o": "p"}},
    27  		},
    28  	}
    29  
    30  	jsonString = `{"a":{"b":{"c":{"d":"e"}},"f":[{"g":{"h":"i"}}],"j":[{"k":{"l":"m"}}],"n":[{"o":"p"}]}}`
    31  	result, err = i.JSON()
    32  	require.NoError(t, err)
    33  	assert.Equal(t, jsonString, result)
    34  	assert.Equal(t, jsonString, i.MustJSON())
    35  }
    36  
    37  func TestConversionJSONWithError(t *testing.T) {
    38  	o := objx.MSI()
    39  	o["test"] = func() {}
    40  
    41  	assert.Panics(t, func() {
    42  		o.MustJSON()
    43  	})
    44  
    45  	_, err := o.JSON()
    46  
    47  	assert.Error(t, err)
    48  }
    49  
    50  func TestConversionBase64(t *testing.T) {
    51  	o := objx.Map{"name": "Mat"}
    52  
    53  	result, err := o.Base64()
    54  
    55  	require.NoError(t, err)
    56  	assert.Equal(t, "eyJuYW1lIjoiTWF0In0=", result)
    57  	assert.Equal(t, "eyJuYW1lIjoiTWF0In0=", o.MustBase64())
    58  }
    59  
    60  func TestConversionBase64WithError(t *testing.T) {
    61  	o := objx.MSI()
    62  	o["test"] = func() {}
    63  
    64  	assert.Panics(t, func() {
    65  		o.MustBase64()
    66  	})
    67  
    68  	_, err := o.Base64()
    69  
    70  	assert.Error(t, err)
    71  }
    72  
    73  func TestConversionSignedBase64(t *testing.T) {
    74  	o := objx.Map{"name": "Mat"}
    75  
    76  	result, err := o.SignedBase64("key")
    77  
    78  	require.NoError(t, err)
    79  	assert.Equal(t, "eyJuYW1lIjoiTWF0In0=_67ee82916f90b2c0d68c903266e8998c9ef0c3d6", result)
    80  	assert.Equal(t, "eyJuYW1lIjoiTWF0In0=_67ee82916f90b2c0d68c903266e8998c9ef0c3d6", o.MustSignedBase64("key"))
    81  }
    82  
    83  func TestConversionSignedBase64WithError(t *testing.T) {
    84  	o := objx.MSI()
    85  	o["test"] = func() {}
    86  
    87  	assert.Panics(t, func() {
    88  		o.MustSignedBase64("key")
    89  	})
    90  
    91  	_, err := o.SignedBase64("key")
    92  
    93  	assert.Error(t, err)
    94  }
    95  
    96  func TestConversionURLValues(t *testing.T) {
    97  	m := getURLQueryMap()
    98  	u := m.URLValues()
    99  
   100  	assert.Equal(t, url.Values{
   101  		"abc":                []string{"123"},
   102  		"name":               []string{"Mat"},
   103  		"data[age]":          []string{"30"},
   104  		"data[height]":       []string{"162"},
   105  		"data[arr][]":        []string{"1", "2"},
   106  		"stats[]":            []string{"1", "2"},
   107  		"bools[]":            []string{"true", "false"},
   108  		"mapSlice[][age]":    []string{"40"},
   109  		"mapSlice[][height]": []string{"152"},
   110  		"msiData[age]":       []string{"30"},
   111  		"msiData[height]":    []string{"162"},
   112  		"msiData[arr][]":     []string{"1", "2"},
   113  		"msiSlice[][age]":    []string{"40"},
   114  		"msiSlice[][height]": []string{"152"},
   115  	}, u)
   116  }
   117  
   118  func TestConversionURLQuery(t *testing.T) {
   119  	m := getURLQueryMap()
   120  	u, err := m.URLQuery()
   121  
   122  	assert.Nil(t, err)
   123  	require.NotNil(t, u)
   124  
   125  	ue, err := url.QueryUnescape(u)
   126  	assert.Nil(t, err)
   127  	require.NotNil(t, ue)
   128  
   129  	assert.Equal(t, "abc=123&bools[]=true&bools[]=false&data[age]=30&data[arr][]=1&data[arr][]=2&data[height]=162&mapSlice[][age]=40&mapSlice[][height]=152&msiData[age]=30&msiData[arr][]=1&msiData[arr][]=2&msiData[height]=162&msiSlice[][age]=40&msiSlice[][height]=152&name=Mat&stats[]=1&stats[]=2", ue)
   130  }
   131  
   132  func TestConversionURLQueryNoSliceKeySuffix(t *testing.T) {
   133  	m := getURLQueryMap()
   134  	err := objx.SetURLValuesSliceKeySuffix(objx.URLValuesSliceKeySuffixEmpty)
   135  	require.Nil(t, err)
   136  	u, err := m.URLQuery()
   137  
   138  	assert.Nil(t, err)
   139  	require.NotNil(t, u)
   140  
   141  	ue, err := url.QueryUnescape(u)
   142  	assert.Nil(t, err)
   143  	require.NotNil(t, ue)
   144  
   145  	assert.Equal(t, "abc=123&bools=true&bools=false&data[age]=30&data[arr]=1&data[arr]=2&data[height]=162&mapSlice[age]=40&mapSlice[height]=152&msiData[age]=30&msiData[arr]=1&msiData[arr]=2&msiData[height]=162&msiSlice[age]=40&msiSlice[height]=152&name=Mat&stats=1&stats=2", ue)
   146  }
   147  
   148  func TestConversionURLQueryIndexSliceKeySuffix(t *testing.T) {
   149  	m := getURLQueryMap()
   150  	m.Set("mapSlice", []objx.Map{{"age": 40, "sex": "male"}, {"height": 152}})
   151  	err := objx.SetURLValuesSliceKeySuffix(objx.URLValuesSliceKeySuffixIndex)
   152  	require.Nil(t, err)
   153  	u, err := m.URLQuery()
   154  
   155  	assert.Nil(t, err)
   156  	require.NotNil(t, u)
   157  
   158  	ue, err := url.QueryUnescape(u)
   159  	assert.Nil(t, err)
   160  	require.NotNil(t, ue)
   161  
   162  	assert.Equal(t, "abc=123&bools[0]=true&bools[1]=false&data[age]=30&data[arr][0]=1&data[arr][1]=2&data[height]=162&mapSlice[0][age]=40&mapSlice[0][sex]=male&mapSlice[1][height]=152&msiData[age]=30&msiData[arr][0]=1&msiData[arr][1]=2&msiData[height]=162&msiSlice[0][age]=40&msiSlice[1][height]=152&name=Mat&stats[0]=1&stats[1]=2", ue)
   163  }
   164  
   165  func TestValidityURLQuerySliceKeySuffix(t *testing.T) {
   166  	err := objx.SetURLValuesSliceKeySuffix("")
   167  	assert.Nil(t, err)
   168  	err = objx.SetURLValuesSliceKeySuffix("[]")
   169  	assert.Nil(t, err)
   170  	err = objx.SetURLValuesSliceKeySuffix("[i]")
   171  	assert.Nil(t, err)
   172  	err = objx.SetURLValuesSliceKeySuffix("{}")
   173  	assert.Error(t, err)
   174  }
   175  
   176  func getURLQueryMap() objx.Map {
   177  	return objx.Map{
   178  		"abc":      123,
   179  		"name":     "Mat",
   180  		"data":     objx.Map{"age": 30, "height": 162, "arr": []int{1, 2}},
   181  		"mapSlice": []objx.Map{{"age": 40}, {"height": 152}},
   182  		"msiData":  map[string]interface{}{"age": 30, "height": 162, "arr": []int{1, 2}},
   183  		"msiSlice": []map[string]interface{}{{"age": 40}, {"height": 152}},
   184  		"stats":    []string{"1", "2"},
   185  		"bools":    []bool{true, false},
   186  	}
   187  }
   188  

View as plain text