@ -25,48 +25,48 @@ import (
func TestSetIndex ( t * testing . T ) {
tests := [ ] struct {
name string
initial [ ] interface { }
expect [ ] interface { }
initial [ ] any
expect [ ] any
add int
val int
err bool
} {
{
name : "short" ,
initial : [ ] interface { } { 0 , 1 } ,
expect : [ ] interface { } { 0 , 1 , 2 } ,
initial : [ ] any { 0 , 1 } ,
expect : [ ] any { 0 , 1 , 2 } ,
add : 2 ,
val : 2 ,
err : false ,
} ,
{
name : "equal" ,
initial : [ ] interface { } { 0 , 1 } ,
expect : [ ] interface { } { 0 , 2 } ,
initial : [ ] any { 0 , 1 } ,
expect : [ ] any { 0 , 2 } ,
add : 1 ,
val : 2 ,
err : false ,
} ,
{
name : "long" ,
initial : [ ] interface { } { 0 , 1 , 2 , 3 , 4 , 5 } ,
expect : [ ] interface { } { 0 , 1 , 2 , 4 , 4 , 5 } ,
initial : [ ] any { 0 , 1 , 2 , 3 , 4 , 5 } ,
expect : [ ] any { 0 , 1 , 2 , 4 , 4 , 5 } ,
add : 3 ,
val : 4 ,
err : false ,
} ,
{
name : "negative" ,
initial : [ ] interface { } { 0 , 1 , 2 , 3 , 4 , 5 } ,
expect : [ ] interface { } { 0 , 1 , 2 , 3 , 4 , 5 } ,
initial : [ ] any { 0 , 1 , 2 , 3 , 4 , 5 } ,
expect : [ ] any { 0 , 1 , 2 , 3 , 4 , 5 } ,
add : - 1 ,
val : 4 ,
err : true ,
} ,
{
name : "large" ,
initial : [ ] interface { } { 0 , 1 , 2 , 3 , 4 , 5 } ,
expect : [ ] interface { } { 0 , 1 , 2 , 3 , 4 , 5 } ,
initial : [ ] any { 0 , 1 , 2 , 3 , 4 , 5 } ,
expect : [ ] any { 0 , 1 , 2 , 3 , 4 , 5 } ,
add : MaxIndex + 1 ,
val : 4 ,
err : true ,
@ -103,53 +103,53 @@ func TestSetIndex(t *testing.T) {
func TestParseSet ( t * testing . T ) {
testsString := [ ] struct {
str string
expect map [ string ] interface { }
expect map [ string ] any
err bool
} {
{
str : "long_int_string=1234567890" ,
expect : map [ string ] interface { } { "long_int_string" : "1234567890" } ,
expect : map [ string ] any { "long_int_string" : "1234567890" } ,
err : false ,
} ,
{
str : "boolean=true" ,
expect : map [ string ] interface { } { "boolean" : "true" } ,
expect : map [ string ] any { "boolean" : "true" } ,
err : false ,
} ,
{
str : "is_null=null" ,
expect : map [ string ] interface { } { "is_null" : "null" } ,
expect : map [ string ] any { "is_null" : "null" } ,
err : false ,
} ,
{
str : "zero=0" ,
expect : map [ string ] interface { } { "zero" : "0" } ,
expect : map [ string ] any { "zero" : "0" } ,
err : false ,
} ,
}
tests := [ ] struct {
str string
expect map [ string ] interface { }
expect map [ string ] any
err bool
} {
{
"name1=null,f=false,t=true" ,
map [ string ] interface { } { "name1" : nil , "f" : false , "t" : true } ,
map [ string ] any { "name1" : nil , "f" : false , "t" : true } ,
false ,
} ,
{
"name1=value1" ,
map [ string ] interface { } { "name1" : "value1" } ,
map [ string ] any { "name1" : "value1" } ,
false ,
} ,
{
"name1=value1,name2=value2" ,
map [ string ] interface { } { "name1" : "value1" , "name2" : "value2" } ,
map [ string ] any { "name1" : "value1" , "name2" : "value2" } ,
false ,
} ,
{
"name1=value1,name2=value2," ,
map [ string ] interface { } { "name1" : "value1" , "name2" : "value2" } ,
map [ string ] any { "name1" : "value1" , "name2" : "value2" } ,
false ,
} ,
{
@ -158,27 +158,27 @@ func TestParseSet(t *testing.T) {
} ,
{
str : "name1=,name2=value2" ,
expect : map [ string ] interface { } { "name1" : "" , "name2" : "value2" } ,
expect : map [ string ] any { "name1" : "" , "name2" : "value2" } ,
} ,
{
str : "leading_zeros=00009" ,
expect : map [ string ] interface { } { "leading_zeros" : "00009" } ,
expect : map [ string ] any { "leading_zeros" : "00009" } ,
} ,
{
str : "zero_int=0" ,
expect : map [ string ] interface { } { "zero_int" : 0 } ,
expect : map [ string ] any { "zero_int" : 0 } ,
} ,
{
str : "long_int=1234567890" ,
expect : map [ string ] interface { } { "long_int" : 1234567890 } ,
expect : map [ string ] any { "long_int" : 1234567890 } ,
} ,
{
str : "boolean=true" ,
expect : map [ string ] interface { } { "boolean" : true } ,
expect : map [ string ] any { "boolean" : true } ,
} ,
{
str : "is_null=null" ,
expect : map [ string ] interface { } { "is_null" : nil } ,
expect : map [ string ] any { "is_null" : nil } ,
err : false ,
} ,
{
@ -199,40 +199,40 @@ func TestParseSet(t *testing.T) {
} ,
{
"name1=one\\,two,name2=three\\,four" ,
map [ string ] interface { } { "name1" : "one,two" , "name2" : "three,four" } ,
map [ string ] any { "name1" : "one,two" , "name2" : "three,four" } ,
false ,
} ,
{
"name1=one\\=two,name2=three\\=four" ,
map [ string ] interface { } { "name1" : "one=two" , "name2" : "three=four" } ,
map [ string ] any { "name1" : "one=two" , "name2" : "three=four" } ,
false ,
} ,
{
"name1=one two three,name2=three two one" ,
map [ string ] interface { } { "name1" : "one two three" , "name2" : "three two one" } ,
map [ string ] any { "name1" : "one two three" , "name2" : "three two one" } ,
false ,
} ,
{
"outer.inner=value" ,
map [ string ] interface { } { "outer" : map [ string ] interface { } { "inner" : "value" } } ,
map [ string ] any { "outer" : map [ string ] any { "inner" : "value" } } ,
false ,
} ,
{
"outer.middle.inner=value" ,
map [ string ] interface { } { "outer" : map [ string ] interface { } { "middle" : map [ string ] interface { } { "inner" : "value" } } } ,
map [ string ] any { "outer" : map [ string ] any { "middle" : map [ string ] any { "inner" : "value" } } } ,
false ,
} ,
{
"outer.inner1=value,outer.inner2=value2" ,
map [ string ] interface { } { "outer" : map [ string ] interface { } { "inner1" : "value" , "inner2" : "value2" } } ,
map [ string ] any { "outer" : map [ string ] any { "inner1" : "value" , "inner2" : "value2" } } ,
false ,
} ,
{
"outer.inner1=value,outer.middle.inner=value" ,
map [ string ] interface { } {
"outer" : map [ string ] interface { } {
map [ string ] any {
"outer" : map [ string ] any {
"inner1" : "value" ,
"middle" : map [ string ] interface { } {
"middle" : map [ string ] any {
"inner" : "value" ,
} ,
} ,
@ -249,7 +249,7 @@ func TestParseSet(t *testing.T) {
} ,
{
str : "name1.name2=" ,
expect : map [ string ] interface { } { "name1" : map [ string ] interface { } { "name2" : "" } } ,
expect : map [ string ] any { "name1" : map [ string ] any { "name2" : "" } } ,
} ,
{
str : "name1.=name2" ,
@ -261,12 +261,12 @@ func TestParseSet(t *testing.T) {
} ,
{
"name1={value1,value2}" ,
map [ string ] interface { } { "name1" : [ ] string { "value1" , "value2" } } ,
map [ string ] any { "name1" : [ ] string { "value1" , "value2" } } ,
false ,
} ,
{
"name1={value1,value2},name2={value1,value2}" ,
map [ string ] interface { } {
map [ string ] any {
"name1" : [ ] string { "value1" , "value2" } ,
"name2" : [ ] string { "value1" , "value2" } ,
} ,
@ -274,12 +274,12 @@ func TestParseSet(t *testing.T) {
} ,
{
"name1={1021,902}" ,
map [ string ] interface { } { "name1" : [ ] int { 1021 , 902 } } ,
map [ string ] any { "name1" : [ ] int { 1021 , 902 } } ,
false ,
} ,
{
"name1.name2={value1,value2}" ,
map [ string ] interface { } { "name1" : map [ string ] interface { } { "name2" : [ ] string { "value1" , "value2" } } } ,
map [ string ] any { "name1" : map [ string ] any { "name2" : [ ] string { "value1" , "value2" } } } ,
false ,
} ,
{
@ -289,21 +289,21 @@ func TestParseSet(t *testing.T) {
// List support
{
str : "list[0]=foo" ,
expect : map [ string ] interface { } { "list" : [ ] string { "foo" } } ,
expect : map [ string ] any { "list" : [ ] string { "foo" } } ,
} ,
{
str : "list[0].foo=bar" ,
expect : map [ string ] interface { } {
"list" : [ ] interface { } {
map [ string ] interface { } { "foo" : "bar" } ,
expect : map [ string ] any {
"list" : [ ] any {
map [ string ] any { "foo" : "bar" } ,
} ,
} ,
} ,
{
str : "list[0].foo=bar,list[0].hello=world" ,
expect : map [ string ] interface { } {
"list" : [ ] interface { } {
map [ string ] interface { } { "foo" : "bar" , "hello" : "world" } ,
expect : map [ string ] any {
"list" : [ ] any {
map [ string ] any { "foo" : "bar" , "hello" : "world" } ,
} ,
} ,
} ,
@ -313,15 +313,15 @@ func TestParseSet(t *testing.T) {
} ,
{
str : "list[0]=foo,list[1]=bar" ,
expect : map [ string ] interface { } { "list" : [ ] string { "foo" , "bar" } } ,
expect : map [ string ] any { "list" : [ ] string { "foo" , "bar" } } ,
} ,
{
str : "list[0]=foo,list[1]=bar," ,
expect : map [ string ] interface { } { "list" : [ ] string { "foo" , "bar" } } ,
expect : map [ string ] any { "list" : [ ] string { "foo" , "bar" } } ,
} ,
{
str : "list[0]=foo,list[3]=bar" ,
expect : map [ string ] interface { } { "list" : [ ] interface { } { "foo" , nil , nil , "bar" } } ,
expect : map [ string ] any { "list" : [ ] any { "foo" , nil , nil , "bar" } } ,
} ,
{
str : "list[0]=foo,list[-20]=bar" ,
@ -333,41 +333,41 @@ func TestParseSet(t *testing.T) {
} ,
{
str : "noval[0]" ,
expect : map [ string ] interface { } { "noval" : [ ] interface { } { } } ,
expect : map [ string ] any { "noval" : [ ] any { } } ,
} ,
{
str : "noval[0]=" ,
expect : map [ string ] interface { } { "noval" : [ ] interface { } { "" } } ,
expect : map [ string ] any { "noval" : [ ] any { "" } } ,
} ,
{
str : "nested[0][0]=1" ,
expect : map [ string ] interface { } { "nested" : [ ] interface { } { [ ] interface { } { 1 } } } ,
expect : map [ string ] any { "nested" : [ ] any { [ ] any { 1 } } } ,
} ,
{
str : "nested[1][1]=1" ,
expect : map [ string ] interface { } { "nested" : [ ] interface { } { nil , [ ] interface { } { nil , 1 } } } ,
expect : map [ string ] any { "nested" : [ ] any { nil , [ ] any { nil , 1 } } } ,
} ,
{
str : "name1.name2[0].foo=bar,name1.name2[1].foo=bar" ,
expect : map [ string ] interface { } {
"name1" : map [ string ] interface { } {
"name2" : [ ] map [ string ] interface { } { { "foo" : "bar" } , { "foo" : "bar" } } ,
expect : map [ string ] any {
"name1" : map [ string ] any {
"name2" : [ ] map [ string ] any { { "foo" : "bar" } , { "foo" : "bar" } } ,
} ,
} ,
} ,
{
str : "name1.name2[1].foo=bar,name1.name2[0].foo=bar" ,
expect : map [ string ] interface { } {
"name1" : map [ string ] interface { } {
"name2" : [ ] map [ string ] interface { } { { "foo" : "bar" } , { "foo" : "bar" } } ,
expect : map [ string ] any {
"name1" : map [ string ] any {
"name2" : [ ] map [ string ] any { { "foo" : "bar" } , { "foo" : "bar" } } ,
} ,
} ,
} ,
{
str : "name1.name2[1].foo=bar" ,
expect : map [ string ] interface { } {
"name1" : map [ string ] interface { } {
"name2" : [ ] map [ string ] interface { } { nil , { "foo" : "bar" } } ,
expect : map [ string ] any {
"name1" : map [ string ] any {
"name2" : [ ] map [ string ] any { nil , { "foo" : "bar" } } ,
} ,
} ,
} ,
@ -433,20 +433,20 @@ func TestParseInto(t *testing.T) {
tests := [ ] struct {
input string
input2 string
got map [ string ] interface { }
expect map [ string ] interface { }
got map [ string ] any
expect map [ string ] any
err bool
} {
{
input : "outer.inner1=value1,outer.inner3=value3,outer.inner4=4" ,
got : map [ string ] interface { } {
"outer" : map [ string ] interface { } {
got : map [ string ] any {
"outer" : map [ string ] any {
"inner1" : "overwrite" ,
"inner2" : "value2" ,
} ,
} ,
expect : map [ string ] interface { } {
"outer" : map [ string ] interface { } {
expect : map [ string ] any {
"outer" : map [ string ] any {
"inner1" : "value1" ,
"inner2" : "value2" ,
"inner3" : "value3" ,
@ -457,9 +457,9 @@ func TestParseInto(t *testing.T) {
{
input : "listOuter[0][0].type=listValue" ,
input2 : "listOuter[0][0].status=alive" ,
got : map [ string ] interface { } { } ,
expect : map [ string ] interface { } {
"listOuter" : [ ] [ ] interface { } { { map [ string ] string {
got : map [ string ] any { } ,
expect : map [ string ] any {
"listOuter" : [ ] [ ] any { { map [ string ] string {
"type" : "listValue" ,
"status" : "alive" ,
} } } ,
@ -469,9 +469,9 @@ func TestParseInto(t *testing.T) {
{
input : "listOuter[0][0].type=listValue" ,
input2 : "listOuter[1][0].status=alive" ,
got : map [ string ] interface { } { } ,
expect : map [ string ] interface { } {
"listOuter" : [ ] [ ] interface { } {
got : map [ string ] any { } ,
expect : map [ string ] any {
"listOuter" : [ ] [ ] any {
{
map [ string ] string { "type" : "listValue" } ,
} ,
@ -485,17 +485,17 @@ func TestParseInto(t *testing.T) {
{
input : "listOuter[0][1][0].type=listValue" ,
input2 : "listOuter[0][0][1].status=alive" ,
got : map [ string ] interface { } {
"listOuter" : [ ] interface { } {
[ ] interface { } {
[ ] interface { } {
got : map [ string ] any {
"listOuter" : [ ] any {
[ ] any {
[ ] any {
map [ string ] string { "exited" : "old" } ,
} ,
} ,
} ,
} ,
expect : map [ string ] interface { } {
"listOuter" : [ ] [ ] [ ] interface { } {
expect : map [ string ] any {
"listOuter" : [ ] [ ] [ ] any {
{
{
map [ string ] string { "exited" : "old" } ,
@ -543,15 +543,15 @@ func TestParseInto(t *testing.T) {
}
func TestParseIntoString ( t * testing . T ) {
got := map [ string ] interface { } {
"outer" : map [ string ] interface { } {
got := map [ string ] any {
"outer" : map [ string ] any {
"inner1" : "overwrite" ,
"inner2" : "value2" ,
} ,
}
input := "outer.inner1=1,outer.inner3=3"
expect := map [ string ] interface { } {
"outer" : map [ string ] interface { } {
expect := map [ string ] any {
"outer" : map [ string ] any {
"inner1" : "1" ,
"inner2" : "value2" ,
"inner3" : "3" ,
@ -579,20 +579,20 @@ func TestParseIntoString(t *testing.T) {
func TestParseJSON ( t * testing . T ) {
tests := [ ] struct {
input string
got map [ string ] interface { }
expect map [ string ] interface { }
got map [ string ] any
expect map [ string ] any
err bool
} {
{ // set json scalars values, and replace one existing key
input : "outer.inner1=\"1\",outer.inner3=3,outer.inner4=true,outer.inner5=\"true\"" ,
got : map [ string ] interface { } {
"outer" : map [ string ] interface { } {
got : map [ string ] any {
"outer" : map [ string ] any {
"inner1" : "overwrite" ,
"inner2" : "value2" ,
} ,
} ,
expect : map [ string ] interface { } {
"outer" : map [ string ] interface { } {
expect : map [ string ] any {
"outer" : map [ string ] any {
"inner1" : "1" ,
"inner2" : "value2" ,
"inner3" : 3 ,
@ -604,43 +604,43 @@ func TestParseJSON(t *testing.T) {
} ,
{ // set json objects and arrays, and replace one existing key
input : "outer.inner1={\"a\":\"1\",\"b\":2,\"c\":[1,2,3]},outer.inner3=[\"new value 1\",\"new value 2\"],outer.inner4={\"aa\":\"1\",\"bb\":2,\"cc\":[1,2,3]},outer.inner5=[{\"A\":\"1\",\"B\":2,\"C\":[1,2,3]}]" ,
got : map [ string ] interface { } {
"outer" : map [ string ] interface { } {
"inner1" : map [ string ] interface { } {
got : map [ string ] any {
"outer" : map [ string ] any {
"inner1" : map [ string ] any {
"x" : "overwrite" ,
} ,
"inner2" : "value2" ,
"inner3" : [ ] interface { } {
"inner3" : [ ] any {
"overwrite" ,
} ,
} ,
} ,
expect : map [ string ] interface { } {
"outer" : map [ string ] interface { } {
"inner1" : map [ string ] interface { } { "a" : "1" , "b" : 2 , "c" : [ ] interface { } { 1 , 2 , 3 } } ,
expect : map [ string ] any {
"outer" : map [ string ] any {
"inner1" : map [ string ] any { "a" : "1" , "b" : 2 , "c" : [ ] any { 1 , 2 , 3 } } ,
"inner2" : "value2" ,
"inner3" : [ ] interface { } { "new value 1" , "new value 2" } ,
"inner4" : map [ string ] interface { } { "aa" : "1" , "bb" : 2 , "cc" : [ ] interface { } { 1 , 2 , 3 } } ,
"inner5" : [ ] interface { } { map [ string ] interface { } { "A" : "1" , "B" : 2 , "C" : [ ] interface { } { 1 , 2 , 3 } } } ,
"inner3" : [ ] any { "new value 1" , "new value 2" } ,
"inner4" : map [ string ] any { "aa" : "1" , "bb" : 2 , "cc" : [ ] any { 1 , 2 , 3 } } ,
"inner5" : [ ] any { map [ string ] any { "A" : "1" , "B" : 2 , "C" : [ ] any { 1 , 2 , 3 } } } ,
} ,
} ,
err : false ,
} ,
{ // null assigment, and no value assigned (equivalent to null)
input : "outer.inner1=,outer.inner3={\"aa\":\"1\",\"bb\":2,\"cc\":[1,2,3]},outer.inner3.cc[1]=null" ,
got : map [ string ] interface { } {
"outer" : map [ string ] interface { } {
"inner1" : map [ string ] interface { } {
got : map [ string ] any {
"outer" : map [ string ] any {
"inner1" : map [ string ] any {
"x" : "overwrite" ,
} ,
"inner2" : "value2" ,
} ,
} ,
expect : map [ string ] interface { } {
"outer" : map [ string ] interface { } {
expect : map [ string ] any {
"outer" : map [ string ] any {
"inner1" : nil ,
"inner2" : "value2" ,
"inner3" : map [ string ] interface { } { "aa" : "1" , "bb" : 2 , "cc" : [ ] interface { } { 1 , nil , 3 } } ,
"inner3" : map [ string ] any { "aa" : "1" , "bb" : 2 , "cc" : [ ] any { 1 , nil , 3 } } ,
} ,
} ,
err : false ,
@ -679,10 +679,10 @@ func TestParseJSON(t *testing.T) {
func TestParseFile ( t * testing . T ) {
input := "name1=path1"
expect := map [ string ] interface { } {
expect := map [ string ] any {
"name1" : "value1" ,
}
rs2v := func ( rs [ ] rune ) ( interface { } , error ) {
rs2v := func ( rs [ ] rune ) ( any , error ) {
v := string ( rs )
if v != "path1" {
t . Errorf ( "%s: runesToVal: Expected value path1, got %s" , input , v )
@ -711,12 +711,12 @@ func TestParseFile(t *testing.T) {
}
func TestParseIntoFile ( t * testing . T ) {
got := map [ string ] interface { } { }
got := map [ string ] any { }
input := "name1=path1"
expect := map [ string ] interface { } {
expect := map [ string ] any {
"name1" : "value1" ,
}
rs2v := func ( rs [ ] rune ) ( interface { } , error ) {
rs2v := func ( rs [ ] rune ) ( any , error ) {
v := string ( rs )
if v != "path1" {
t . Errorf ( "%s: runesToVal: Expected value path1, got %s" , input , v )
@ -767,13 +767,13 @@ func TestParseSetNestedLevels(t *testing.T) {
}
tests := [ ] struct {
str string
expect map [ string ] interface { }
expect map [ string ] any
err bool
errStr string
} {
{
"outer.middle.inner=value" ,
map [ string ] interface { } { "outer" : map [ string ] interface { } { "middle" : map [ string ] interface { } { "inner" : "value" } } } ,
map [ string ] any { "outer" : map [ string ] any { "middle" : map [ string ] any { "inner" : "value" } } } ,
false ,
"" ,
} ,