github.com/MontFerret/ferret@v0.18.0/pkg/stdlib/objects/zip_test.go (about)

     1  package objects_test
     2  
     3  import (
     4  	"context"
     5  	"testing"
     6  
     7  	"github.com/MontFerret/ferret/pkg/runtime/values"
     8  	"github.com/MontFerret/ferret/pkg/stdlib/objects"
     9  
    10  	. "github.com/smartystreets/goconvey/convey"
    11  )
    12  
    13  func TestZip(t *testing.T) {
    14  	Convey("Invalid arguments", t, func() {
    15  		Convey("When there are no arguments", func() {
    16  			actual, err := objects.Zip(context.Background())
    17  			expected := values.None
    18  
    19  			So(err, ShouldBeError)
    20  			So(actual.Compare(expected), ShouldEqual, 0)
    21  		})
    22  
    23  		Convey("When single argument", func() {
    24  			actual, err := objects.Zip(context.Background(), values.NewArray(0))
    25  			expected := values.None
    26  
    27  			So(err, ShouldBeError)
    28  			So(actual.Compare(expected), ShouldEqual, 0)
    29  
    30  			actual, err = objects.Zip(context.Background(), values.NewInt(0))
    31  
    32  			So(err, ShouldBeError)
    33  			So(actual.Compare(expected), ShouldEqual, 0)
    34  		})
    35  
    36  		Convey("When too many arguments", func() {
    37  			actual, err := objects.Zip(context.Background(),
    38  				values.NewArray(0), values.NewArray(0), values.NewArray(0))
    39  			expected := values.None
    40  
    41  			So(err, ShouldBeError)
    42  			So(actual.Compare(expected), ShouldEqual, 0)
    43  		})
    44  
    45  		Convey("When there is not array argument", func() {
    46  			actual, err := objects.Zip(context.Background(), values.NewArray(0), values.NewInt(0))
    47  			expected := values.None
    48  
    49  			So(err, ShouldBeError)
    50  			So(actual.Compare(expected), ShouldEqual, 0)
    51  
    52  			actual, err = objects.Zip(context.Background(), values.NewInt(0), values.NewArray(0))
    53  
    54  			So(err, ShouldBeError)
    55  			So(actual.Compare(expected), ShouldEqual, 0)
    56  		})
    57  
    58  		Convey("When there is not string element into keys array", func() {
    59  			keys := values.NewArrayWith(values.NewInt(0))
    60  			vals := values.NewArrayWith(values.NewString("v1"))
    61  			expected := values.None
    62  
    63  			actual, err := objects.Zip(context.Background(), keys, vals)
    64  
    65  			So(err, ShouldBeError)
    66  			So(actual.Compare(expected), ShouldEqual, 0)
    67  		})
    68  
    69  		Convey("When 1 key and 0 values", func() {
    70  			keys := values.NewArrayWith(values.NewString("k1"))
    71  			vals := values.NewArray(0)
    72  			expected := values.None
    73  
    74  			actual, err := objects.Zip(context.Background(), keys, vals)
    75  
    76  			So(err, ShouldBeError)
    77  			So(actual.Compare(expected), ShouldEqual, 0)
    78  		})
    79  
    80  		Convey("When 0 keys and 1 values", func() {
    81  			keys := values.NewArray(0)
    82  			vals := values.NewArrayWith(values.NewString("v1"))
    83  			expected := values.None
    84  
    85  			actual, err := objects.Zip(context.Background(), keys, vals)
    86  
    87  			So(err, ShouldBeError)
    88  			So(actual.Compare(expected), ShouldEqual, 0)
    89  		})
    90  	})
    91  
    92  	Convey("Zip 2 keys and 2 values", t, func() {
    93  		keys := values.NewArrayWith(
    94  			values.NewString("k1"),
    95  			values.NewString("k2"),
    96  		)
    97  		vals := values.NewArrayWith(
    98  			values.NewString("v1"),
    99  			values.NewInt(2),
   100  		)
   101  		expected := values.NewObjectWith(
   102  			values.NewObjectProperty("k1", values.NewString("v1")),
   103  			values.NewObjectProperty("k2", values.NewInt(2)),
   104  		)
   105  
   106  		actual, err := objects.Zip(context.Background(), keys, vals)
   107  
   108  		So(err, ShouldBeNil)
   109  		So(actual.Compare(expected), ShouldEqual, 0)
   110  	})
   111  
   112  	Convey("Zip 3 keys and 3 values. 1 key repeats", t, func() {
   113  		keys := values.NewArrayWith(
   114  			values.NewString("k1"),
   115  			values.NewString("k2"),
   116  			values.NewString("k1"),
   117  		)
   118  		vals := values.NewArrayWith(
   119  			values.NewInt(1),
   120  			values.NewInt(2),
   121  			values.NewInt(3),
   122  		)
   123  		expected := values.NewObjectWith(
   124  			values.NewObjectProperty("k1", values.NewInt(1)),
   125  			values.NewObjectProperty("k2", values.NewInt(2)),
   126  		)
   127  
   128  		actual, err := objects.Zip(context.Background(), keys, vals)
   129  
   130  		So(err, ShouldBeNil)
   131  		So(actual.Compare(expected), ShouldEqual, 0)
   132  	})
   133  }