github.com/lmorg/murex@v0.0.0-20240217211045-e081c89cd4ef/builtins/core/element/element_test.go (about) 1 package element 2 3 import ( 4 "testing" 5 6 _ "github.com/lmorg/murex/builtins/core/io" 7 _ "github.com/lmorg/murex/builtins/types/json" 8 "github.com/lmorg/murex/lang/types" 9 "github.com/lmorg/murex/test" 10 ) 11 12 func jsonStr() string { 13 s := ` 14 { 15 "StrArray": [ "foobar", "a", "b", "-2", "-1", "0", "1", "2", "00100" ], 16 "IntArray": [ -2, -1, 0, 1, 2, 3, 4, 5, 100 ], 17 "StrMap": { "foo": "bar", "bar": "foo", "1": "00100", "00100": "1" }, 18 "IntMap": { "-2": -2, "-1": -1, "0": 0, "00100": 100 }, 19 "Nested": { "self": 5314, "fork": "fork" } 20 }` 21 22 return s 23 } 24 25 func TestElementPositive(t *testing.T) { 26 params := [][]string{ 27 {"/StrArray]]"}, 28 {"/StrArray/]]"}, 29 {"/IntArray]]"}, 30 {"/IntArray/]]"}, 31 {"/StrMap]]"}, 32 {"/StrMap/]]"}, 33 {"/IntMap]]"}, 34 {"/IntMap/]]"}, 35 {"/Nested/fork]]"}, 36 {"/Nested/fork/]]"}, 37 38 {",StrArray]]"}, 39 {",StrArray,]]"}, 40 {",IntArray]]"}, 41 {",IntArray,]]"}, 42 {",StrMap]]"}, 43 {",StrMap,]]"}, 44 {",IntMap]]"}, 45 {",IntMap,]]"}, 46 {",Nested,fork]]"}, 47 {",Nested,fork,]]"}, 48 49 {"#StrArray]]"}, 50 {"#StrArray#]]"}, 51 {"#IntArray]]"}, 52 {"#IntArray#]]"}, 53 {"#StrMap]]"}, 54 {"#StrMap#]]"}, 55 {"#IntMap]]"}, 56 {"#IntMap#]]"}, 57 {"#Nested#fork]]"}, 58 {"#Nested#fork#]]"}, 59 60 {"{StrArray]]"}, 61 {"{StrArray{]]"}, 62 {"{IntArray]]"}, 63 {"{IntArray{]]"}, 64 {"{StrMap]]"}, 65 {"{StrMap{]]"}, 66 {"{IntMap]]"}, 67 {"{IntMap{]]"}, 68 {"{Nested{fork]]"}, 69 {"{Nested{fork{]]"}, 70 71 /*{"世StrArray]]"}, 72 {"世StrArray世]]"}, 73 {"世IntArray]]"}, 74 {"世IntArray世]]"}, 75 {"世StrMap]]"}, 76 {"世StrMap世]]"}, 77 {"世IntMap]]"}, 78 {"世IntMap世]]"}, 79 {"世Nested世fork]]"}, 80 {"世Nested世fork世]]"},*/ 81 82 {"/StrArray", "]]"}, 83 {"/StrArray/", "]]"}, 84 {"/IntArray", "]]"}, 85 {"/IntArray/", "]]"}, 86 {"/StrMap", "]]"}, 87 {"/StrMap/", "]]"}, 88 {"/IntMap", "]]"}, 89 {"/IntMap/", "]]"}, 90 {"/Nested/fork", "]]"}, 91 {"/Nested/fork/", "]]"}, 92 93 {",StrArray", "]]"}, 94 {",StrArray,", "]]"}, 95 {",IntArray", "]]"}, 96 {",IntArray,", "]]"}, 97 {",StrMap", "]]"}, 98 {",StrMap,", "]]"}, 99 {",IntMap", "]]"}, 100 {",IntMap,", "]]"}, 101 {",Nested,fork", "]]"}, 102 {",Nested,fork,", "]]"}, 103 104 {"#StrArray", "]]"}, 105 {"#StrArray#", "]]"}, 106 {"#IntArray", "]]"}, 107 {"#IntArray#", "]]"}, 108 {"#StrMap", "]]"}, 109 {"#StrMap#", "]]"}, 110 {"#IntMap", "]]"}, 111 {"#IntMap#", "]]"}, 112 {"#Nested#fork", "]]"}, 113 {"#Nested#fork#", "]]"}, 114 115 {"{StrArray", "]]"}, 116 {"{StrArray{", "]]"}, 117 {"{IntArray", "]]"}, 118 {"{IntArray{", "]]"}, 119 {"{StrMap", "]]"}, 120 {"{StrMap{", "]]"}, 121 {"{IntMap", "]]"}, 122 {"{IntMap{", "]]"}, 123 {"{Nested{fork", "]]"}, 124 {"{Nested{fork{", "]]"}, 125 126 /*{"世StrArray","]]"}, 127 {"世StrArray世","]]"}, 128 {"世IntArray","]]"}, 129 {"世IntArray世","]]"}, 130 {"世StrMap","]]"}, 131 {"世StrMap世","]]"}, 132 {"世IntMap","]]"}, 133 {"世IntMap世","]]"}, 134 {"世Nested世fork","]]"}, 135 {"世Nested世fork世","]]"},*/ 136 } 137 138 expected := []string{ 139 `["foobar","a","b","-2","-1","0","1","2","00100"]`, 140 `["foobar","a","b","-2","-1","0","1","2","00100"]`, 141 `[-2,-1,0,1,2,3,4,5,100]`, 142 `[-2,-1,0,1,2,3,4,5,100]`, 143 `{"00100":"1","1":"00100","bar":"foo","foo":"bar"}`, 144 `{"00100":"1","1":"00100","bar":"foo","foo":"bar"}`, 145 `{"-1":-1,"-2":-2,"0":0,"00100":100}`, 146 `{"-1":-1,"-2":-2,"0":0,"00100":100}`, 147 `fork`, 148 `fork`, 149 150 `["foobar","a","b","-2","-1","0","1","2","00100"]`, 151 `["foobar","a","b","-2","-1","0","1","2","00100"]`, 152 `[-2,-1,0,1,2,3,4,5,100]`, 153 `[-2,-1,0,1,2,3,4,5,100]`, 154 `{"00100":"1","1":"00100","bar":"foo","foo":"bar"}`, 155 `{"00100":"1","1":"00100","bar":"foo","foo":"bar"}`, 156 `{"-1":-1,"-2":-2,"0":0,"00100":100}`, 157 `{"-1":-1,"-2":-2,"0":0,"00100":100}`, 158 `fork`, 159 `fork`, 160 161 `["foobar","a","b","-2","-1","0","1","2","00100"]`, 162 `["foobar","a","b","-2","-1","0","1","2","00100"]`, 163 `[-2,-1,0,1,2,3,4,5,100]`, 164 `[-2,-1,0,1,2,3,4,5,100]`, 165 `{"00100":"1","1":"00100","bar":"foo","foo":"bar"}`, 166 `{"00100":"1","1":"00100","bar":"foo","foo":"bar"}`, 167 `{"-1":-1,"-2":-2,"0":0,"00100":100}`, 168 `{"-1":-1,"-2":-2,"0":0,"00100":100}`, 169 `fork`, 170 `fork`, 171 172 `["foobar","a","b","-2","-1","0","1","2","00100"]`, 173 `["foobar","a","b","-2","-1","0","1","2","00100"]`, 174 `[-2,-1,0,1,2,3,4,5,100]`, 175 `[-2,-1,0,1,2,3,4,5,100]`, 176 `{"00100":"1","1":"00100","bar":"foo","foo":"bar"}`, 177 `{"00100":"1","1":"00100","bar":"foo","foo":"bar"}`, 178 `{"-1":-1,"-2":-2,"0":0,"00100":100}`, 179 `{"-1":-1,"-2":-2,"0":0,"00100":100}`, 180 `fork`, 181 `fork`, 182 183 /*`["foobar","a","b","-2","-1","0","1","2","00100"]`, 184 `["foobar","a","b","-2","-1","0","1","2","00100"]`, 185 `[-2,-1,0,1,2,3,4,5,100]`, 186 `[-2,-1,0,1,2,3,4,5,100]`, 187 `{"00100":"1","1":"00100","bar":"foo","foo":"bar"}`, 188 `{"00100":"1","1":"00100","bar":"foo","foo":"bar"}`, 189 `{"-1":-1,"-2":-2,"0":0,"00100":100}`, 190 `{"-1":-1,"-2":-2,"0":0,"00100":100}`, 191 `fork`, 192 `fork`,*/ 193 194 `["foobar","a","b","-2","-1","0","1","2","00100"]`, 195 `["foobar","a","b","-2","-1","0","1","2","00100"]`, 196 `[-2,-1,0,1,2,3,4,5,100]`, 197 `[-2,-1,0,1,2,3,4,5,100]`, 198 `{"00100":"1","1":"00100","bar":"foo","foo":"bar"}`, 199 `{"00100":"1","1":"00100","bar":"foo","foo":"bar"}`, 200 `{"-1":-1,"-2":-2,"0":0,"00100":100}`, 201 `{"-1":-1,"-2":-2,"0":0,"00100":100}`, 202 `fork`, 203 `fork`, 204 205 `["foobar","a","b","-2","-1","0","1","2","00100"]`, 206 `["foobar","a","b","-2","-1","0","1","2","00100"]`, 207 `[-2,-1,0,1,2,3,4,5,100]`, 208 `[-2,-1,0,1,2,3,4,5,100]`, 209 `{"00100":"1","1":"00100","bar":"foo","foo":"bar"}`, 210 `{"00100":"1","1":"00100","bar":"foo","foo":"bar"}`, 211 `{"-1":-1,"-2":-2,"0":0,"00100":100}`, 212 `{"-1":-1,"-2":-2,"0":0,"00100":100}`, 213 `fork`, 214 `fork`, 215 216 `["foobar","a","b","-2","-1","0","1","2","00100"]`, 217 `["foobar","a","b","-2","-1","0","1","2","00100"]`, 218 `[-2,-1,0,1,2,3,4,5,100]`, 219 `[-2,-1,0,1,2,3,4,5,100]`, 220 `{"00100":"1","1":"00100","bar":"foo","foo":"bar"}`, 221 `{"00100":"1","1":"00100","bar":"foo","foo":"bar"}`, 222 `{"-1":-1,"-2":-2,"0":0,"00100":100}`, 223 `{"-1":-1,"-2":-2,"0":0,"00100":100}`, 224 `fork`, 225 `fork`, 226 227 `["foobar","a","b","-2","-1","0","1","2","00100"]`, 228 `["foobar","a","b","-2","-1","0","1","2","00100"]`, 229 `[-2,-1,0,1,2,3,4,5,100]`, 230 `[-2,-1,0,1,2,3,4,5,100]`, 231 `{"00100":"1","1":"00100","bar":"foo","foo":"bar"}`, 232 `{"00100":"1","1":"00100","bar":"foo","foo":"bar"}`, 233 `{"-1":-1,"-2":-2,"0":0,"00100":100}`, 234 `{"-1":-1,"-2":-2,"0":0,"00100":100}`, 235 `fork`, 236 `fork`, 237 238 /*`["foobar","a","b","-2","-1","0","1","2","00100"]`, 239 `["foobar","a","b","-2","-1","0","1","2","00100"]`, 240 `[-2,-1,0,1,2,3,4,5,100]`, 241 `[-2,-1,0,1,2,3,4,5,100]`, 242 `{"00100":"1","1":"00100","bar":"foo","foo":"bar"}`, 243 `{"00100":"1","1":"00100","bar":"foo","foo":"bar"}`, 244 `{"-1":-1,"-2":-2,"0":0,"00100":100}`, 245 `{"-1":-1,"-2":-2,"0":0,"00100":100}`, 246 `fork`, 247 `fork`,*/ 248 } 249 250 for i := range params { 251 test.RunMethodTest( 252 t, element, "[[", jsonStr(), types.Json, params[i], expected[i], nil) 253 } 254 } 255 256 /*func TestElementNegative(t *testing.T) { 257 params := [][]string{ 258 {"StrArray]]"}, 259 {"/StrArray/]"}, 260 {"/IntArray"}, 261 } 262 263 expected := []string{ 264 `Key 'trArray' not found`, 265 "Missing closing brackets, ` ]]`", 266 "Missing closing brackets, ` ]]`", 267 } 268 269 for i := range params { 270 test.RunMethodTest( 271 t, element, "[[", jsonStr(), types.Json, params[i], "", errors.New(expected[i])) 272 } 273 }*/