github.com/GuanceCloud/cliutils@v1.1.21/pipeline/ptinput/funcs/fn_delete_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 funcs 7 8 import ( 9 "testing" 10 "time" 11 12 "github.com/GuanceCloud/cliutils/pipeline/ptinput" 13 "github.com/GuanceCloud/cliutils/point" 14 "github.com/stretchr/testify/assert" 15 ) 16 17 func TestDelete(t *testing.T) { 18 cases := []struct { 19 name, pl, in string 20 expected interface{} 21 fail bool 22 outkey string 23 }{ 24 { 25 name: "delete_map", 26 pl: ` 27 a=load_json(_) 28 delete(a["a"][-1], "b") 29 add_key(a)`, 30 in: `{"a":[1, {"b":2}]}`, 31 expected: "{\"a\":[1,{}]}", 32 outkey: "a", 33 }, 34 { 35 pl: `j_map = load_json(_) 36 37 delete(j_map["b"][-1], "c") 38 39 delete(j_map, "a") 40 41 add_key("j_map", j_map)`, 42 in: `{"a": "b", "b":[0, {"c": "d"}], "e": 1}`, 43 expected: "{\"b\":[0,{}],\"e\":1}", 44 outkey: "j_map", 45 }, 46 { 47 name: "delete_map", 48 pl: ` 49 a=load_json(_) 50 delete(a, "a") 51 add_key(a)`, 52 in: `{"a":[1, {"b":2}]}`, 53 expected: "{}", 54 outkey: "a", 55 }, 56 { 57 name: "delete_map", 58 pl: ` 59 a=load_json(_) 60 delete(a["a"], "b") 61 add_key(a)`, 62 in: `{"a":[1, {"b":2}]}`, 63 expected: "{\"a\":[1,{\"b\":2}]}", 64 outkey: "a", 65 }, 66 { 67 name: "delete_map", 68 pl: ` 69 a=load_json(_) 70 delete(b, "b") 71 add_key(a)`, 72 in: `{"a":[1, {"b":2}]}`, 73 expected: "{\"a\":[1,{\"b\":2}]}", 74 outkey: "a", 75 }, 76 { 77 name: "delete_map", 78 pl: ` 79 a=load_json(_) 80 delete(a["a"][-7], "b") 81 add_key(a)`, 82 in: `{"a":[1, {"b":2}]}`, 83 expected: "{\"a\":[1,{\"b\":2}]}", 84 outkey: "a", 85 }, 86 { 87 name: "delete_map", 88 pl: ` 89 a=load_json(_) 90 delete(b, x) 91 add_key(a)`, 92 in: `{"a":[1, {"b":2}]}`, 93 expected: "{\"a\":[1,{\"b\":2}]}", 94 outkey: "a", 95 fail: true, 96 }, 97 } 98 99 for idx, tc := range cases { 100 t.Run(tc.name, func(t *testing.T) { 101 runner, err := NewTestingRunner(tc.pl) 102 if err != nil { 103 if tc.fail { 104 t.Logf("[%d]expect error: %s", idx, err) 105 } else { 106 t.Errorf("[%d] failed: %s", idx, err) 107 } 108 return 109 } 110 pt := ptinput.NewPlPoint( 111 point.Logging, "test", nil, map[string]any{"message": tc.in}, time.Now()) 112 errR := runScript(runner, pt) 113 if errR != nil { 114 t.Fatal(*errR) 115 } 116 117 v, _, e := pt.Get(tc.outkey) 118 119 assert.NoError(t, e) 120 assert.Equal(t, tc.expected, v) 121 t.Logf("[%d] PASS", idx) 122 }) 123 } 124 }