github.com/gogf/gf@v1.16.9/util/gutil/gutil_z_unit_map_test.go (about)

     1  // Copyright GoFrame Author(https://goframe.org). All Rights Reserved.
     2  //
     3  // This Source Code Form is subject to the terms of the MIT License.
     4  // If a copy of the MIT was not distributed with this file,
     5  // You can obtain one at https://github.com/gogf/gf.
     6  
     7  package gutil_test
     8  
     9  import (
    10  	"github.com/gogf/gf/frame/g"
    11  	"testing"
    12  
    13  	"github.com/gogf/gf/test/gtest"
    14  	"github.com/gogf/gf/util/gutil"
    15  )
    16  
    17  func Test_MapCopy(t *testing.T) {
    18  	gtest.C(t, func(t *gtest.T) {
    19  		m1 := g.Map{
    20  			"k1": "v1",
    21  		}
    22  		m2 := gutil.MapCopy(m1)
    23  		m2["k2"] = "v2"
    24  
    25  		t.Assert(m1["k1"], "v1")
    26  		t.Assert(m1["k2"], nil)
    27  		t.Assert(m2["k1"], "v1")
    28  		t.Assert(m2["k2"], "v2")
    29  	})
    30  }
    31  
    32  func Test_MapContains(t *testing.T) {
    33  	gtest.C(t, func(t *gtest.T) {
    34  		m1 := g.Map{
    35  			"k1": "v1",
    36  		}
    37  		t.Assert(gutil.MapContains(m1, "k1"), true)
    38  		t.Assert(gutil.MapContains(m1, "K1"), false)
    39  		t.Assert(gutil.MapContains(m1, "k2"), false)
    40  	})
    41  }
    42  
    43  func Test_MapMerge(t *testing.T) {
    44  	gtest.C(t, func(t *gtest.T) {
    45  		m1 := g.Map{
    46  			"k1": "v1",
    47  		}
    48  		m2 := g.Map{
    49  			"k2": "v2",
    50  		}
    51  		m3 := g.Map{
    52  			"k3": "v3",
    53  		}
    54  		gutil.MapMerge(m1, m2, m3, nil)
    55  		t.Assert(m1["k1"], "v1")
    56  		t.Assert(m1["k2"], "v2")
    57  		t.Assert(m1["k3"], "v3")
    58  		t.Assert(m2["k1"], nil)
    59  		t.Assert(m3["k1"], nil)
    60  	})
    61  }
    62  
    63  func Test_MapMergeCopy(t *testing.T) {
    64  	gtest.C(t, func(t *gtest.T) {
    65  		m1 := g.Map{
    66  			"k1": "v1",
    67  		}
    68  		m2 := g.Map{
    69  			"k2": "v2",
    70  		}
    71  		m3 := g.Map{
    72  			"k3": "v3",
    73  		}
    74  		m := gutil.MapMergeCopy(m1, m2, m3, nil)
    75  		t.Assert(m["k1"], "v1")
    76  		t.Assert(m["k2"], "v2")
    77  		t.Assert(m["k3"], "v3")
    78  		t.Assert(m1["k1"], "v1")
    79  		t.Assert(m1["k2"], nil)
    80  		t.Assert(m2["k1"], nil)
    81  		t.Assert(m3["k1"], nil)
    82  	})
    83  }
    84  
    85  func Test_MapPossibleItemByKey(t *testing.T) {
    86  	gtest.C(t, func(t *gtest.T) {
    87  		m := g.Map{
    88  			"name":     "guo",
    89  			"NickName": "john",
    90  		}
    91  		k, v := gutil.MapPossibleItemByKey(m, "NAME")
    92  		t.Assert(k, "name")
    93  		t.Assert(v, "guo")
    94  
    95  		k, v = gutil.MapPossibleItemByKey(m, "nick name")
    96  		t.Assert(k, "NickName")
    97  		t.Assert(v, "john")
    98  
    99  		k, v = gutil.MapPossibleItemByKey(m, "none")
   100  		t.Assert(k, "")
   101  		t.Assert(v, nil)
   102  	})
   103  }
   104  
   105  func Test_MapContainsPossibleKey(t *testing.T) {
   106  	gtest.C(t, func(t *gtest.T) {
   107  		m := g.Map{
   108  			"name":     "guo",
   109  			"NickName": "john",
   110  		}
   111  		t.Assert(gutil.MapContainsPossibleKey(m, "name"), true)
   112  		t.Assert(gutil.MapContainsPossibleKey(m, "NAME"), true)
   113  		t.Assert(gutil.MapContainsPossibleKey(m, "nickname"), true)
   114  		t.Assert(gutil.MapContainsPossibleKey(m, "nick name"), true)
   115  		t.Assert(gutil.MapContainsPossibleKey(m, "nick_name"), true)
   116  		t.Assert(gutil.MapContainsPossibleKey(m, "nick-name"), true)
   117  		t.Assert(gutil.MapContainsPossibleKey(m, "nick.name"), true)
   118  		t.Assert(gutil.MapContainsPossibleKey(m, "none"), false)
   119  	})
   120  }
   121  
   122  func Test_MapOmitEmpty(t *testing.T) {
   123  	gtest.C(t, func(t *gtest.T) {
   124  		m := g.Map{
   125  			"k1": "john",
   126  			"e1": "",
   127  			"e2": 0,
   128  			"e3": nil,
   129  			"k2": "smith",
   130  		}
   131  		gutil.MapOmitEmpty(m)
   132  		t.Assert(len(m), 2)
   133  		t.AssertNE(m["k1"], nil)
   134  		t.AssertNE(m["k2"], nil)
   135  	})
   136  }
   137  
   138  func Test_MapToSlice(t *testing.T) {
   139  	gtest.C(t, func(t *gtest.T) {
   140  		m := g.Map{
   141  			"k1": "v1",
   142  			"k2": "v2",
   143  		}
   144  		s := gutil.MapToSlice(m)
   145  		t.Assert(len(s), 4)
   146  		t.AssertIN(s[0], g.Slice{"k1", "k2", "v1", "v2"})
   147  		t.AssertIN(s[1], g.Slice{"k1", "k2", "v1", "v2"})
   148  		t.AssertIN(s[2], g.Slice{"k1", "k2", "v1", "v2"})
   149  		t.AssertIN(s[3], g.Slice{"k1", "k2", "v1", "v2"})
   150  	})
   151  	gtest.C(t, func(t *gtest.T) {
   152  		m := g.MapStrStr{
   153  			"k1": "v1",
   154  			"k2": "v2",
   155  		}
   156  		s := gutil.MapToSlice(m)
   157  		t.Assert(len(s), 4)
   158  		t.AssertIN(s[0], g.Slice{"k1", "k2", "v1", "v2"})
   159  		t.AssertIN(s[1], g.Slice{"k1", "k2", "v1", "v2"})
   160  		t.AssertIN(s[2], g.Slice{"k1", "k2", "v1", "v2"})
   161  		t.AssertIN(s[3], g.Slice{"k1", "k2", "v1", "v2"})
   162  	})
   163  	gtest.C(t, func(t *gtest.T) {
   164  		m := g.MapStrStr{}
   165  		s := gutil.MapToSlice(m)
   166  		t.Assert(len(s), 0)
   167  	})
   168  	gtest.C(t, func(t *gtest.T) {
   169  		s := gutil.MapToSlice(1)
   170  		t.Assert(s, nil)
   171  	})
   172  }