github.com/lmorg/murex@v0.0.0-20240217211045-e081c89cd4ef/lang/expressions/parse_vars_exec_test.go (about) 1 package expressions_test 2 3 import ( 4 "fmt" 5 "testing" 6 7 _ "github.com/lmorg/murex/builtins" 8 "github.com/lmorg/murex/test" 9 "github.com/lmorg/murex/utils/home" 10 ) 11 12 func TestParseVarsScalar(t *testing.T) { 13 tests := []test.MurexTest{ 14 { 15 Block: `TestParseVarsScalar0="0";$TestParseVarsScalar0`, 16 Stdout: `0`, 17 }, 18 { 19 Block: `TestParseVarsScalar1=1;$TestParseVarsScalar1`, 20 Stdout: `1`, 21 }, 22 { 23 Block: `TestParseVarsScalar2="foobar";TestParseVarsScalar2="> $TestParseVarsScalar2 <";$TestParseVarsScalar2`, 24 Stdout: `> foobar <`, 25 }, 26 { 27 Block: `TestParseVarsScalar3=3;TestParseVarsScalar3="> $TestParseVarsScalar3 <";$TestParseVarsScalar3`, 28 Stdout: `> 3 <`, 29 }, 30 ///// 31 { 32 Block: `TestParseVarsScalar4=4;%[1 2 3 $TestParseVarsScalar4]`, 33 Stdout: `[1,2,3,4]`, 34 }, 35 { 36 Block: `TestParseVarsScalar5=5;%{$TestParseVarsScalar5: "foobar"}`, 37 Stdout: `{"5":"foobar"}`, 38 }, 39 { 40 Block: `TestParseVarsScalar6=6;%{"foobar": $TestParseVarsScalar6}`, 41 Stdout: `{"foobar":6}`, 42 }, 43 ///// 44 { 45 Block: `TestParseVarsScalar7=1;TestParseVarsScalar7=2;TestParseVarsScalar7=3;$TestParseVarsScalar7`, 46 Stdout: `3`, 47 }, 48 { 49 Block: `TestParseVarsScalar8=1;TestParseVarsScalar8=2;TestParseVarsScalar8=3;;$TestParseVarsScalar8`, 50 Stdout: `3`, 51 }, 52 { 53 Block: `TestParseVarsScalar9=1;TestParseVarsScalar9=2;TestParseVarsScalar9=3;out bob;$TestParseVarsScalar9`, 54 Stdout: "bob\n3", 55 }, 56 } 57 58 test.RunMurexTests(tests, t) 59 } 60 61 func TestParseVarsArray(t *testing.T) { 62 tests := []test.MurexTest{ 63 { 64 Block: `TestParseVarsArray0=%[1..3];$TestParseVarsArray0`, 65 Stdout: `[1,2,3]`, 66 }, 67 { 68 Block: `TestParseVarsArray1=%[1..3];TestParseVarsArray1="> $TestParseVarsArray1 <";$TestParseVarsArray1`, 69 Stdout: `> [1,2,3] <`, 70 }, 71 ///// 72 { 73 Block: `TestParseVarsArray2=%[1..3];@TestParseVarsArray2`, 74 Stdout: `[1,2,3]`, 75 }, 76 { 77 Block: `TestParseVarsArray3=%[1..3];TestParseVarsArray3="> @TestParseVarsArray3 <";$TestParseVarsArray3`, 78 Stdout: `> @TestParseVarsArray3 <`, 79 }, 80 { 81 Block: `TestParseVarsArray4=%[1..3];TestParseVarsArray4=". @TestParseVarsArray4 .";@TestParseVarsArray4`, 82 Stdout: `[". @TestParseVarsArray4 ."]`, 83 }, 84 ///// 85 { 86 Block: `TestParseVarsArray5=%[1..3];%[1 2 3 @TestParseVarsArray5]`, 87 Stdout: `[1,2,3,1,2,3]`, 88 }, 89 { 90 Block: `TestParseVarsArray6=%[1..3];%[1 2 3 [@TestParseVarsArray6]]`, 91 Stdout: `[1,2,3,[1,2,3]]`, 92 }, 93 ///// 94 { 95 Block: `TestParseVarsArray7=%[1..3];%{a: @TestParseVarsArray7}`, 96 Stdout: `{"a":[1,2,3]}`, 97 }, 98 { 99 Block: `TestParseVarsArray8=%[1..3];%{a: [@TestParseVarsArray8]}`, 100 Stdout: `{"a":[1,2,3]}`, 101 }, 102 { 103 Block: `TestParseVarsArray8=%[1..3];%{a: [[@TestParseVarsArray8]]}`, 104 Stdout: `{"a":[[1,2,3]]}`, 105 }, 106 } 107 108 test.RunMurexTests(tests, t) 109 } 110 111 func TestParseVarsTilder(t *testing.T) { 112 tests := []test.MurexTest{ 113 { 114 Block: `TestParseVarsTilder0= ~;$TestParseVarsTilder0`, 115 Stdout: home.MyDir, 116 }, 117 { 118 Block: `TestParseVarsTilder1="~";$TestParseVarsTilder1`, 119 Stdout: home.MyDir, 120 }, 121 { 122 Block: `TestParseVarsTilder2='~';$TestParseVarsTilder2`, 123 Stdout: `~`, 124 }, 125 { 126 Block: `%[~]`, 127 Stdout: fmt.Sprintf(`["%s"]`, home.MyDir), 128 }, 129 { 130 Block: `%{~: a}`, 131 Stdout: fmt.Sprintf(`{"%s":"a"}`, home.MyDir), 132 }, 133 { 134 Block: `%{a: ~}`, 135 Stdout: fmt.Sprintf(`{"a":"%s"}`, home.MyDir), 136 }, 137 } 138 139 test.RunMurexTests(tests, t) 140 } 141 142 func TestParseVarsTilderPlusName(t *testing.T) { 143 tests := []test.MurexTest{ 144 { 145 Block: `TestParseVarsTilderPlusName0= ~TestParseVarsTilderPlusName0;$TestParseVarsTilderPlusName0`, 146 Stdout: home.UserDir("TestParseVarsTilderPlusName0"), 147 }, 148 { 149 Block: `TestParseVarsTilderPlusName1="~TestParseVarsTilderPlusName1";$TestParseVarsTilderPlusName1`, 150 Stdout: home.UserDir("TestParseVarsTilderPlusName1"), 151 }, 152 { 153 Block: `TestParseVarsTilderPlusName2='~TestParseVarsTilderPlusName2';$TestParseVarsTilderPlusName2`, 154 Stdout: `~TestParseVarsTilderPlusName2`, 155 }, 156 { 157 Block: `%[~TestParseVarsTilderPlusName3]`, 158 Stdout: fmt.Sprintf(`["%s"]`, home.UserDir("TestParseVarsTilderPlusName3")), 159 }, 160 { 161 Block: `%{~TestParseVarsTilderPlusName4: a}`, 162 Stdout: fmt.Sprintf(`{"%s":"a"}`, home.UserDir("TestParseVarsTilderPlusName4")), 163 }, 164 { 165 Block: `%{a: ~TestParseVarsTilderPlusName5}`, 166 Stdout: fmt.Sprintf(`{"a":"%s"}`, home.UserDir("TestParseVarsTilderPlusName5")), 167 }, 168 } 169 170 test.RunMurexTests(tests, t) 171 } 172 173 func TestParseVarsIndex(t *testing.T) { 174 tests := []test.MurexTest{ 175 { 176 Block: `TestParseVarsIndex0=%[1..3];$TestParseVarsIndex0[1]`, 177 Stdout: `2`, 178 }, 179 { 180 Block: `TestParseVarsIndex1=%[1..3];TestParseVarsIndex1=$TestParseVarsIndex1[2];$TestParseVarsIndex1`, 181 Stdout: `3`, 182 }, 183 { 184 Block: `TestParseVarsIndex2=%[1..3];TestParseVarsIndex2="-$TestParseVarsIndex2[1]-";$TestParseVarsIndex2`, 185 Stdout: `-2-`, 186 }, 187 { 188 Block: `TestParseVarsIndex3=%[1..3];%[1 2 3 $TestParseVarsIndex3[1] 1 2 3]`, 189 Stdout: `[1,2,3,2,1,2,3]`, 190 }, 191 { 192 Block: `TestParseVarsIndex4=%[1..3];%{$TestParseVarsIndex4[1]:a}`, 193 Stdout: `{"2":"a"}`, 194 }, 195 { 196 Block: `TestParseVarsIndex5=%[1..3];%{a:$TestParseVarsIndex5[1]}`, 197 Stdout: `{"a":2}`, 198 }, 199 } 200 201 test.RunMurexTests(tests, t) 202 } 203 204 func TestParseVarsElementSlash(t *testing.T) { 205 tests := []test.MurexTest{ 206 { 207 Block: `TestParseVarsElement0=%[1..3];$TestParseVarsElement0[[/1]]`, 208 Stdout: `2`, 209 }, 210 { 211 Block: `TestParseVarsElement1=%[1..3];TestParseVarsElement1=$TestParseVarsElement1[[/2]];$TestParseVarsElement1`, 212 Stdout: `3`, 213 }, 214 { 215 Block: `TestParseVarsElement2=%[1..3];TestParseVarsElement2="-$TestParseVarsElement2[[/1]]-";$TestParseVarsElement2`, 216 Stdout: `-2-`, 217 }, 218 { 219 Block: `TestParseVarsElement3=%[1..3];%[1 2 3 $TestParseVarsElement3[[/1]] 1 2 3]`, 220 Stdout: `[1,2,3,2,1,2,3]`, 221 }, 222 { 223 Block: `TestParseVarsElement4=%[1..3];%{$TestParseVarsElement4[[/1]]:a}`, 224 Stdout: `{"2":"a"}`, 225 }, 226 { 227 Block: `TestParseVarsElement5=%[1..3];%{a:$TestParseVarsElement5[[/1]]}`, 228 Stdout: `{"a":2}`, 229 }, 230 } 231 232 test.RunMurexTests(tests, t) 233 } 234 235 func TestParseVarsElementDot(t *testing.T) { 236 tests := []test.MurexTest{ 237 { 238 Block: `TestParseVarsElement0=%[1..3];$TestParseVarsElement0[[.1]]`, 239 Stdout: `2`, 240 }, 241 { 242 Block: `TestParseVarsElement1=%[1..3];TestParseVarsElement1=$TestParseVarsElement1[[.2]];$TestParseVarsElement1`, 243 Stdout: `3`, 244 }, 245 { 246 Block: `TestParseVarsElement2=%[1..3];TestParseVarsElement2="-$TestParseVarsElement2[[.1]]-";$TestParseVarsElement2`, 247 Stdout: `-2-`, 248 }, 249 { 250 Block: `TestParseVarsElement3=%[1..3];%[1 2 3 $TestParseVarsElement3[[.1]] 1 2 3]`, 251 Stdout: `[1,2,3,2,1,2,3]`, 252 }, 253 { 254 Block: `TestParseVarsElement4=%[1..3];%{$TestParseVarsElement4[[.1]]:a}`, 255 Stdout: `{"2":"a"}`, 256 }, 257 { 258 Block: `TestParseVarsElement5=%[1..3];%{a:$TestParseVarsElement5[[.1]]}`, 259 Stdout: `{"a":2}`, 260 }, 261 } 262 263 test.RunMurexTests(tests, t) 264 } 265 266 func TestParseVarsDotNotation(t *testing.T) { 267 tests := []test.MurexTest{ 268 { 269 Block: `TestParseVarsDotNotation0=%[1..3];$TestParseVarsDotNotation0.1`, 270 Stdout: `2`, 271 }, 272 { 273 Block: `TestParseVarsDotNotation1=%[1..3];TestParseVarsDotNotation1=$TestParseVarsDotNotation1.2;$TestParseVarsDotNotation1`, 274 Stdout: `3`, 275 }, 276 { 277 Block: `TestParseVarsDotNotation2=%[1..3];TestParseVarsDotNotation2="-$TestParseVarsDotNotation2.1-";$TestParseVarsDotNotation2`, 278 Stdout: `-2-`, 279 }, 280 { 281 Block: `TestParseVarsDotNotation3=%[1..3];%[1 2 3 $TestParseVarsDotNotation3.1 1 2 3]`, 282 Stdout: `[1,2,3,2,1,2,3]`, 283 }, 284 { 285 Block: `TestParseVarsDotNotation4=%[1..3];%{$TestParseVarsDotNotation4.1:a}`, 286 Stdout: `{"2":"a"}`, 287 }, 288 { 289 Block: `TestParseVarsDotNotation5=%[1..3];%{a:$TestParseVarsDotNotation5.1}`, 290 Stdout: `{"a":2}`, 291 }, 292 } 293 294 test.RunMurexTests(tests, t) 295 } 296 297 func TestParseVarsParen(t *testing.T) { 298 tests := []test.MurexTest{ 299 { 300 Block: `TestParseVarsParen0="foobar";$(TestParseVarsParen0)`, 301 Stdout: `^foobar$`, 302 }, 303 { 304 Block: `TestParseVarsParen1=%[1 2 3];$(TestParseVarsParen1)`, 305 Stdout: `[1,2,3]`, 306 }, 307 { 308 Block: `TestParseVarsParen2=%[1 2 3];$(TestParseVarsParen2.1)`, 309 Stdout: `2`, 310 }, 311 /*{ 312 Block: `TestParseVarsParen3=%[1 2 3];$(TestParseVarsParen3[2])`, 313 Stdout: `3`, 314 },*/ 315 /*{ 316 Block: `TestParseVarsParen4=%[1 2 3];$(TestParseVarsParen4[[.1]])`, 317 Stdout: `2`, 318 },*/ 319 // 320 { 321 Block: `TestParseVarsParen5=%[1..3];echo -$(TestParseVarsParen5.1)-`, 322 Stdout: `^-2-\n$`, 323 }, 324 { 325 Block: `TestParseVarsParen6=%[1..3];TestParseVarsParen6="-$(TestParseVarsParen6.1)-";$(TestParseVarsParen6)`, 326 Stdout: `^-2-$`, 327 }, 328 { 329 Block: `TestParseVarsParen7=%[1..3];%[1 2 3 $(TestParseVarsParen7.1) 1 2 3]`, 330 Stdout: `[1,2,3,2,1,2,3]`, 331 }, 332 { 333 Block: `TestParseVarsParen8=%[1..3];%{$(TestParseVarsParen8.1):a}`, 334 Stdout: `{"2":"a"}`, 335 }, 336 { 337 Block: `TestParseVarsParen9=%[1..3];%{a:$(TestParseVarsParen9.1)}`, 338 Stdout: `{"a":2}`, 339 }, 340 } 341 342 test.RunMurexTestsRx(tests, t) 343 }