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  }