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  }*/