github.com/GuanceCloud/cliutils@v1.1.21/point/any_test.go (about) 1 // Unless explicitly stated otherwise all files in this repository are licensed 2 // under the MIT License. 3 // This product includes software developed at Guance Cloud (https://www.guance.com/). 4 // Copyright 2021-present Guance, Inc. 5 6 package point 7 8 import ( 9 T "testing" 10 11 "github.com/stretchr/testify/assert" 12 ) 13 14 func TestAny(t *T.T) { 15 t.Run("elem-same-type-array", func(t *T.T) { 16 var kvs KVs 17 18 arr, err := NewArray(1, 2, 3) 19 assert.NoError(t, err) 20 assert.Len(t, arr.Arr, 3) 21 22 x, err := NewAny(arr) 23 assert.NoError(t, err) 24 25 assert.Equal(t, ArrayFieldType, x.TypeUrl) 26 27 kvs = kvs.Add("k1", x, false, false) 28 pt := NewPointV2("basic", kvs) 29 30 t.Logf("%s", pt.Pretty()) 31 }) 32 33 t.Run("mixed-array", func(t *T.T) { 34 var kvs KVs 35 36 _, err := NewArray(1, 2.0, false) 37 assert.Error(t, err) 38 assert.Nil(t, nil) 39 40 EnableMixedArrayField = true 41 defer func() { 42 EnableMixedArrayField = false 43 }() 44 45 arr, err := NewArray(1, 2.0, false) 46 assert.NoError(t, err) 47 assert.Len(t, arr.Arr, 3) 48 49 x, err := NewAny(arr) 50 assert.NoError(t, err) 51 52 kvs = kvs.Add("k1", x, false, false) 53 pt := NewPointV2("basic", kvs) 54 55 assert.Equal(t, ArrayFieldType, x.TypeUrl) 56 57 t.Logf("%s", pt.Pretty()) 58 }) 59 60 t.Run("with-nil", func(t *T.T) { 61 EnableMixedArrayField = true 62 defer func() { 63 EnableMixedArrayField = false 64 }() 65 66 arr, err := NewArray(1, 2.0) 67 68 assert.NoError(t, err) 69 assert.Len(t, arr.Arr, 2) 70 71 x, err := NewAny(arr) 72 assert.NoError(t, err) 73 74 var kvs KVs 75 76 kvs = kvs.Add("k1", x, false, false) 77 pt := NewPointV2("basic", kvs) 78 79 t.Logf("%s", pt.Pretty()) 80 81 _, err = NewArray(1, 2.0, nil) 82 assert.Error(t, err) 83 }) 84 85 t.Run("with-non-baisc-type", func(t *T.T) { 86 EnableMixedArrayField = true 87 defer func() { 88 EnableMixedArrayField = false 89 }() 90 91 type custom struct { 92 some string 93 } 94 95 _, err := NewArray([]any{1, 2.0, custom{some: "one"}}) 96 assert.Error(t, err) 97 t.Logf("expect error %q", err) 98 }) 99 100 t.Run("map", func(t *T.T) { 101 var kvs KVs 102 103 m, err := NewMap(map[string]any{"i1": 1, "i2": 2}) 104 assert.Nil(t, m) 105 assert.Error(t, err) 106 107 EnableDictField = true 108 defer func() { 109 EnableDictField = false 110 }() 111 112 m = MustNewMap(map[string]any{"i1": 1, "i2": 2}) 113 assert.Len(t, m.Map, 2) 114 115 x, err := NewAny(m) 116 assert.NoError(t, err) 117 118 assert.Equal(t, DictFieldType, x.TypeUrl) 119 120 t.Logf("any type URL: %s", x.GetTypeUrl()) 121 122 kvs = kvs.Add("k1", x, false, false) 123 pt := NewPointV2("basic", kvs) 124 125 t.Logf("%s", pt.Pretty()) 126 }) 127 } 128 129 func TestAnyRaw(t *T.T) { 130 t.Run("arr", func(t *T.T) { 131 EnableMixedArrayField = true 132 defer func() { 133 EnableMixedArrayField = false 134 }() 135 136 arr, err := NewArray(1, 2.0) 137 assert.NoError(t, err) 138 assert.Len(t, arr.Arr, 2) 139 140 x, err := NewAny(arr) 141 assert.NoError(t, err) 142 143 raw := MustAnyRaw(x) 144 assert.Equal(t, []any{int64(1), 2.0}, raw) 145 }) 146 } 147 148 func TestNewArray(t *T.T) { 149 t.Run(`basic-uint`, func(t *T.T) { 150 u16s := []uint16{ 151 uint16(1), 152 uint16(2), 153 uint16(3), 154 } 155 156 x := MustNewUintArray(u16s...) 157 158 raw, err := AnyRaw(x) 159 assert.NoError(t, err) 160 assert.Equal(t, []any{ 161 uint64(1), 162 uint64(2), 163 uint64(3), 164 }, raw) 165 t.Logf("any.Raw: %+#v", raw) 166 }) 167 168 t.Run(`basic-int`, func(t *T.T) { 169 i16s := []int16{ 170 int16(1), 171 int16(2), 172 int16(3), 173 } 174 175 raw, err := AnyRaw(MustNewIntArray(i16s...)) 176 assert.NoError(t, err) 177 assert.Equal(t, []any{ 178 int64(1), 179 int64(2), 180 int64(3), 181 }, raw) 182 t.Logf("any.Raw: %+#v", raw) 183 }) 184 185 t.Run(`basic-float`, func(t *T.T) { 186 arr := []float64{ 187 float64(1.1), 188 float64(2.2), 189 float64(3.3), 190 } 191 192 raw, err := AnyRaw(MustNewFloatArray(arr...)) 193 assert.NoError(t, err) 194 assert.Equal(t, []any{ 195 float64(1.1), 196 float64(2.2), 197 float64(3.3), 198 }, raw) 199 t.Logf("any.Raw: %+#v", raw) 200 }) 201 202 t.Run(`basic-float32`, func(t *T.T) { 203 arr := []float32{ 204 float32(1.1), 205 float32(2.2), 206 float32(3.1415926), 207 } 208 209 raw, err := AnyRaw(MustNewFloatArray(arr...)) 210 assert.NoError(t, err) 211 assert.Len(t, raw, 3) 212 assert.NotEqual(t, []any{ // float32 -> float64 not equal 213 float64(1.1), 214 float64(2.2), 215 float64(3.1415926), 216 }, raw) 217 t.Logf("any.Raw: %+#v", raw) 218 }) 219 220 t.Run(`basic-bool`, func(t *T.T) { 221 arr := []bool{ 222 false, true, 223 } 224 225 raw, err := AnyRaw(MustNewBoolArray(arr...)) 226 assert.NoError(t, err) 227 assert.Len(t, raw, 2) 228 assert.Equal(t, []any{false, true}, raw) 229 t.Logf("any.Raw: %+#v", raw) 230 }) 231 232 t.Run(`basic-string`, func(t *T.T) { 233 arr := []string{ 234 "s1", "s2", "s3", 235 } 236 237 raw, err := AnyRaw(MustNewStringArray(arr...)) 238 assert.NoError(t, err) 239 assert.Len(t, raw, 3) 240 assert.Equal(t, []any{"s1", "s2", "s3"}, raw) 241 t.Logf("any.Raw: %+#v", raw) 242 }) 243 244 t.Run(`bytes array`, func(t *T.T) { 245 arr := []any{ 246 []byte("hello"), []byte("world"), 247 } 248 249 x, err := NewAnyArray(arr...) 250 assert.NoError(t, err) 251 252 raw, err := AnyRaw(x) 253 assert.NoError(t, err) 254 255 assert.Equal(t, []any{[]byte("hello"), []byte("world")}, raw) 256 t.Logf("any.Raw: %+#v", raw) 257 }) 258 259 t.Run(`basic-mixed-type`, func(t *T.T) { 260 arr := []any{ 261 "s1", 123, false, 262 } 263 264 x, err := NewAnyArray(arr...) 265 assert.Error(t, err) 266 267 raw, err := AnyRaw(x) 268 assert.Error(t, err) 269 assert.Nil(t, raw) 270 }) 271 }