github.com/gogf/gf@v1.16.9/encoding/gjson/gjson_z_unit_set_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 gjson_test
     8  
     9  import (
    10  	"bytes"
    11  	"github.com/gogf/gf/frame/g"
    12  	"github.com/gogf/gf/test/gtest"
    13  	"github.com/gogf/gf/text/gstr"
    14  	"testing"
    15  
    16  	"github.com/gogf/gf/encoding/gjson"
    17  )
    18  
    19  func Test_Set1(t *testing.T) {
    20  	e := []byte(`{"k1":{"k11":[1,2,3]},"k2":"v2"}`)
    21  	p := gjson.New(map[string]string{
    22  		"k1": "v1",
    23  		"k2": "v2",
    24  	})
    25  	p.Set("k1.k11", []int{1, 2, 3})
    26  	if c, err := p.ToJson(); err == nil {
    27  
    28  		if bytes.Compare(c, []byte(`{"k1":{"k11":[1,2,3]},"k2":"v2"}`)) != 0 {
    29  			t.Error("expect:", string(e))
    30  		}
    31  	} else {
    32  		t.Error(err)
    33  	}
    34  }
    35  
    36  func Test_Set2(t *testing.T) {
    37  	gtest.C(t, func(t *gtest.T) {
    38  		e := `[[null,1]]`
    39  		p := gjson.New([]string{"a"})
    40  		p.Set("0.1", 1)
    41  		s := p.MustToJsonString()
    42  		t.Assert(s, e)
    43  	})
    44  }
    45  
    46  func Test_Set3(t *testing.T) {
    47  	e := []byte(`{"kv":{"k1":"v1"}}`)
    48  	p := gjson.New([]string{"a"})
    49  	p.Set("kv", map[string]string{
    50  		"k1": "v1",
    51  	})
    52  	if c, err := p.ToJson(); err == nil {
    53  		if bytes.Compare(c, e) != 0 {
    54  			t.Error("expect:", string(e))
    55  		}
    56  	} else {
    57  		t.Error(err)
    58  	}
    59  }
    60  
    61  func Test_Set4(t *testing.T) {
    62  	e := []byte(`["a",[{"k1":"v1"}]]`)
    63  	p := gjson.New([]string{"a"})
    64  	p.Set("1.0", map[string]string{
    65  		"k1": "v1",
    66  	})
    67  	if c, err := p.ToJson(); err == nil {
    68  
    69  		if bytes.Compare(c, e) != 0 {
    70  			t.Error("expect:", string(e))
    71  		}
    72  	} else {
    73  		t.Error(err)
    74  	}
    75  }
    76  
    77  func Test_Set5(t *testing.T) {
    78  	e := []byte(`[[[[[[[[[[[[[[[[[[[[[1,2,3]]]]]]]]]]]]]]]]]]]]]`)
    79  	p := gjson.New([]string{"a"})
    80  	p.Set("0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0", []int{1, 2, 3})
    81  	if c, err := p.ToJson(); err == nil {
    82  
    83  		if bytes.Compare(c, e) != 0 {
    84  			t.Error("expect:", string(e))
    85  		}
    86  	} else {
    87  		t.Error(err)
    88  	}
    89  }
    90  
    91  func Test_Set6(t *testing.T) {
    92  	e := []byte(`["a",[1,2,3]]`)
    93  	p := gjson.New([]string{"a"})
    94  	p.Set("1", []int{1, 2, 3})
    95  	if c, err := p.ToJson(); err == nil {
    96  
    97  		if bytes.Compare(c, e) != 0 {
    98  			t.Error("expect:", string(e))
    99  		}
   100  	} else {
   101  		t.Error(err)
   102  	}
   103  }
   104  
   105  func Test_Set7(t *testing.T) {
   106  	e := []byte(`{"0":[null,[1,2,3]],"k1":"v1","k2":"v2"}`)
   107  	p := gjson.New(map[string]string{
   108  		"k1": "v1",
   109  		"k2": "v2",
   110  	})
   111  	p.Set("0.1", []int{1, 2, 3})
   112  	if c, err := p.ToJson(); err == nil {
   113  
   114  		if bytes.Compare(c, e) != 0 {
   115  			t.Error("expect:", string(e))
   116  		}
   117  	} else {
   118  		t.Error(err)
   119  	}
   120  }
   121  
   122  func Test_Set8(t *testing.T) {
   123  	e := []byte(`{"0":[[[[[[null,[1,2,3]]]]]]],"k1":"v1","k2":"v2"}`)
   124  	p := gjson.New(map[string]string{
   125  		"k1": "v1",
   126  		"k2": "v2",
   127  	})
   128  	p.Set("0.0.0.0.0.0.1", []int{1, 2, 3})
   129  	if c, err := p.ToJson(); err == nil {
   130  
   131  		if bytes.Compare(c, e) != 0 {
   132  			t.Error("expect:", string(e))
   133  		}
   134  	} else {
   135  		t.Error(err)
   136  	}
   137  }
   138  
   139  func Test_Set9(t *testing.T) {
   140  	e := []byte(`{"k1":[null,[1,2,3]],"k2":"v2"}`)
   141  	p := gjson.New(map[string]string{
   142  		"k1": "v1",
   143  		"k2": "v2",
   144  	})
   145  	p.Set("k1.1", []int{1, 2, 3})
   146  	if c, err := p.ToJson(); err == nil {
   147  
   148  		if bytes.Compare(c, e) != 0 {
   149  			t.Error("expect:", string(e))
   150  		}
   151  	} else {
   152  		t.Error(err)
   153  	}
   154  }
   155  
   156  func Test_Set10(t *testing.T) {
   157  	e := []byte(`{"a":{"b":{"c":1}}}`)
   158  	p := gjson.New(nil)
   159  	p.Set("a.b.c", 1)
   160  	if c, err := p.ToJson(); err == nil {
   161  
   162  		if bytes.Compare(c, e) != 0 {
   163  			t.Error("expect:", string(e))
   164  		}
   165  	} else {
   166  		t.Error(err)
   167  	}
   168  }
   169  
   170  func Test_Set11(t *testing.T) {
   171  	e := []byte(`{"a":{"b":{}}}`)
   172  	p, _ := gjson.LoadContent([]byte(`{"a":{"b":{"c":1}}}`))
   173  	p.Remove("a.b.c")
   174  	if c, err := p.ToJson(); err == nil {
   175  
   176  		if bytes.Compare(c, e) != 0 {
   177  			t.Error("expect:", string(e))
   178  		}
   179  	} else {
   180  		t.Error(err)
   181  	}
   182  }
   183  
   184  func Test_Set12(t *testing.T) {
   185  	e := []byte(`[0,1]`)
   186  	p := gjson.New(nil)
   187  	p.Set("0", 0)
   188  	p.Set("1", 1)
   189  	if c, err := p.ToJson(); err == nil {
   190  
   191  		if bytes.Compare(c, e) != 0 {
   192  			t.Error("expect:", string(e))
   193  		}
   194  	} else {
   195  		t.Error(err)
   196  	}
   197  }
   198  
   199  func Test_Set13(t *testing.T) {
   200  	e := []byte(`{"array":[0,1]}`)
   201  	p := gjson.New(nil)
   202  	p.Set("array.0", 0)
   203  	p.Set("array.1", 1)
   204  	if c, err := p.ToJson(); err == nil {
   205  
   206  		if bytes.Compare(c, e) != 0 {
   207  			t.Error("expect:", string(e))
   208  		}
   209  	} else {
   210  		t.Error(err)
   211  	}
   212  }
   213  
   214  func Test_Set14(t *testing.T) {
   215  	e := []byte(`{"f":{"a":1}}`)
   216  	p := gjson.New(nil)
   217  	p.Set("f", "m")
   218  	p.Set("f.a", 1)
   219  	if c, err := p.ToJson(); err == nil {
   220  
   221  		if bytes.Compare(c, e) != 0 {
   222  			t.Error("expect:", string(e))
   223  		}
   224  	} else {
   225  		t.Error(err)
   226  	}
   227  }
   228  
   229  func Test_Set15(t *testing.T) {
   230  	gtest.C(t, func(t *gtest.T) {
   231  		j := gjson.New(nil)
   232  
   233  		t.Assert(j.Set("root.0.k1", "v1"), nil)
   234  		t.Assert(j.Set("root.1.k2", "v2"), nil)
   235  		t.Assert(j.Set("k", "v"), nil)
   236  
   237  		s, err := j.ToJsonString()
   238  		t.Assert(err, nil)
   239  		t.Assert(
   240  			gstr.Contains(s, `"root":[{"k1":"v1"},{"k2":"v2"}`) ||
   241  				gstr.Contains(s, `"root":[{"k2":"v2"},{"k1":"v1"}`),
   242  			true,
   243  		)
   244  		t.Assert(
   245  			gstr.Contains(s, `{"k":"v"`) ||
   246  				gstr.Contains(s, `"k":"v"}`),
   247  			true,
   248  		)
   249  	})
   250  }
   251  
   252  func Test_Set16(t *testing.T) {
   253  	gtest.C(t, func(t *gtest.T) {
   254  		j := gjson.New(nil)
   255  
   256  		t.Assert(j.Set("processors.0.set.0value", "1"), nil)
   257  		t.Assert(j.Set("processors.0.set.0field", "2"), nil)
   258  		t.Assert(j.Set("description", "3"), nil)
   259  
   260  		s, err := j.ToJsonString()
   261  		t.Assert(err, nil)
   262  		t.Assert(
   263  			gstr.Contains(s, `"processors":[{"set":{"0field":"2","0value":"1"}}]`) ||
   264  				gstr.Contains(s, `"processors":[{"set":{"0value":"1","0field":"2"}}]`),
   265  			true,
   266  		)
   267  		t.Assert(
   268  			gstr.Contains(s, `{"description":"3"`) || gstr.Contains(s, `"description":"3"}`),
   269  			true,
   270  		)
   271  	})
   272  }
   273  
   274  func Test_Set17(t *testing.T) {
   275  	gtest.C(t, func(t *gtest.T) {
   276  		j := gjson.New(nil)
   277  
   278  		t.Assert(j.Set("0.k1", "v1"), nil)
   279  		t.Assert(j.Set("1.k2", "v2"), nil)
   280  		// overwrite the previous slice.
   281  		t.Assert(j.Set("k", "v"), nil)
   282  
   283  		s, err := j.ToJsonString()
   284  		t.Assert(err, nil)
   285  		t.Assert(s, `{"k":"v"}`)
   286  	})
   287  }
   288  
   289  func Test_Set18(t *testing.T) {
   290  	gtest.C(t, func(t *gtest.T) {
   291  		j := gjson.New(nil)
   292  
   293  		t.Assert(j.Set("0.1.k1", "v1"), nil)
   294  		t.Assert(j.Set("0.2.k2", "v2"), nil)
   295  		s, err := j.ToJsonString()
   296  		t.Assert(err, nil)
   297  		t.Assert(s, `[[null,{"k1":"v1"},{"k2":"v2"}]]`)
   298  	})
   299  }
   300  
   301  func Test_Set19(t *testing.T) {
   302  	gtest.C(t, func(t *gtest.T) {
   303  		j := gjson.New(nil)
   304  
   305  		t.Assert(j.Set("0.1.1.k1", "v1"), nil)
   306  		t.Assert(j.Set("0.2.1.k2", "v2"), nil)
   307  		s, err := j.ToJsonString()
   308  		t.Assert(err, nil)
   309  		t.Assert(s, `[[null,[null,{"k1":"v1"}],[null,{"k2":"v2"}]]]`)
   310  	})
   311  }
   312  
   313  func Test_Set20(t *testing.T) {
   314  	gtest.C(t, func(t *gtest.T) {
   315  		j := gjson.New(nil)
   316  
   317  		t.Assert(j.Set("k1", "v1"), nil)
   318  		t.Assert(j.Set("k2", g.Slice{1, 2, 3}), nil)
   319  		t.Assert(j.Set("k2.1", 20), nil)
   320  		t.Assert(j.Set("k2.2", g.Map{"k3": "v3"}), nil)
   321  		s, err := j.ToJsonString()
   322  		t.Assert(err, nil)
   323  		t.Assert(gstr.InArray(
   324  			g.SliceStr{
   325  				`{"k1":"v1","k2":[1,20,{"k3":"v3"}]}`,
   326  				`{"k2":[1,20,{"k3":"v3"}],"k1":"v1"}`,
   327  			},
   328  			s,
   329  		), true)
   330  	})
   331  }