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 }