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  }