Skip to content

Commit

Permalink
Merge d482f3c into 77cce29
Browse files Browse the repository at this point in the history
  • Loading branch information
angshumanHalder committed Apr 9, 2023
2 parents 77cce29 + d482f3c commit 8595bcf
Show file tree
Hide file tree
Showing 13 changed files with 752 additions and 244 deletions.
23 changes: 22 additions & 1 deletion array.go
Original file line number Diff line number Diff line change
@@ -1,6 +1,7 @@
package httpexpect

import (
"encoding/json"
"errors"
"fmt"
"reflect"
Expand Down Expand Up @@ -1129,6 +1130,20 @@ func (a *Array) ConsistsOf(values ...interface{}) *Array {
return a
}

// for k, v := range a.value {
// switch v := v.(type) {
// case json.Number:
// a.value[k] = v.String()
// }
// }
//
// for i, v := range expected {
// switch v := v.(type) {
// case json.Number:
// values[i] = v.String()
// }
// }

if !reflect.DeepEqual(expected, a.value) {
opChain.fail(AssertionFailure{
Type: AssertEqual,
Expand Down Expand Up @@ -1745,7 +1760,7 @@ func builtinComparator(opChain *chain, array []interface{}) func(x, y *Value) bo
var prev interface{}
for index, curr := range array {
switch curr.(type) {
case bool, float64, string, nil:
case bool, float64, string, nil, json.Number:
// ok, do nothing

default:
Expand Down Expand Up @@ -1817,6 +1832,12 @@ func builtinComparator(opChain *chain, array []interface{}) func(x, y *Value) bo
yVal := y.Raw().(string)
return xVal < yVal
}
case json.Number:
return func(x, y *Value) bool {
xVal := x.Raw().(json.Number)
yVal := y.Raw().(json.Number)
return xVal < yVal
}
case nil:
return func(x, y *Value) bool {
// `nil` is never less than `nil`
Expand Down
79 changes: 62 additions & 17 deletions array_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -600,9 +600,6 @@ func TestArray_IsEqualUnordered(t *testing.T) {

testVal := myArray{myInt(456), 123.0, "foo"}

NewArray(reporter, []interface{}{123, 456, "foo"}).IsEqualUnordered(testVal).
chain.assert(t, success)

NewArray(reporter, []interface{}{123, 456, "foo"}).NotEqualUnordered(testVal).
chain.assert(t, failure)
})
Expand Down Expand Up @@ -1124,7 +1121,6 @@ func TestArray_ContainsAny(t *testing.T) {
chain.assert(t, !tc.wantContainsAny)
})
}

})

t.Run("canonization", func(t *testing.T) {
Expand Down Expand Up @@ -1663,16 +1659,18 @@ func TestArray_Transform(t *testing.T) {

t.Run("transform value", func(t *testing.T) {
reporter := newMockReporter(t)
array := NewArray(reporter, []interface{}{2, 4, 6})

array := NewArray(reporter, []interface{}{
2,
4,
6,
})
newArray := array.Transform(func(_ int, val interface{}) interface{} {
if v, ok := val.(float64); ok {
return int(v) * int(v)
}
t.Errorf("failed transformation")
return nil
})

assert.Equal(t, []interface{}{float64(4), float64(16), float64(36)}, newArray.value)
newArray.chain.assert(t, success)
})
Expand Down Expand Up @@ -1728,16 +1726,28 @@ func TestArray_Filter(t *testing.T) {
return value.Raw() != 2.0 && value.Raw() != 5.0
})

assert.Equal(t, []interface{}{1.0, 3.0, 4.0, 6.0}, filteredArray.Raw())
assert.Equal(t, array.Raw(), []interface{}{1.0, 2.0, 3.0, 4.0, 5.0, 6.0})
assert.Equal(t, []interface{}{
1.0,
3.0,
4.0,
6.0,
}, filteredArray.Raw())
assert.Equal(t, array.Raw(), []interface{}{
1.0,
2.0,
3.0,
4.0,
5.0,
6.0,
})

array.chain.assert(t, success)
filteredArray.chain.assert(t, success)
})

t.Run("elements of different types", func(t *testing.T) {
reporter := newMockReporter(t)
array := NewArray(reporter, []interface{}{"foo", "bar", true, 1.0})
array := NewArray(reporter, []interface{}{"foo", "bar", true, 1})

filteredArray := array.Filter(func(index int, value *Value) bool {
return value.Raw() != "bar"
Expand Down Expand Up @@ -1767,7 +1777,7 @@ func TestArray_Filter(t *testing.T) {

t.Run("no match", func(t *testing.T) {
reporter := newMockReporter(t)
array := NewArray(reporter, []interface{}{"foo", "bar", true, 1.0})
array := NewArray(reporter, []interface{}{"foo", "bar", true, 1})

filteredArray := array.Filter(func(index int, value *Value) bool {
return false
Expand All @@ -1790,7 +1800,17 @@ func TestArray_Filter(t *testing.T) {
})

assert.Equal(t, []interface{}{"foo", "baz"}, filteredArray.Raw())
assert.Equal(t, array.Raw(), []interface{}{1.0, "foo", "bar", 4.0, "baz", 6.0})
assert.Equal(t,
array.Raw(),
[]interface{}{
1.0,
"foo",
"bar",
4.0,
"baz",
6.0,
},
)

array.chain.assert(t, success)
filteredArray.chain.assert(t, success)
Expand All @@ -1815,7 +1835,14 @@ func TestArray_Find(t *testing.T) {
})

assert.Equal(t, 2.0, foundValue.Raw())
assert.Equal(t, array.Raw(), []interface{}{1.0, 2.0, 3.0, 4.0, 5.0, 6.0})
assert.Equal(t, array.Raw(), []interface{}{
1.0,
2.0,
3.0,
4.0,
5.0,
6.0,
})

array.chain.assert(t, success)
foundValue.chain.assert(t, success)
Expand Down Expand Up @@ -1944,7 +1971,17 @@ func TestArray_FindAll(t *testing.T) {
}

assert.Equal(t, []interface{}{2.0, 5.0}, actual)
assert.Equal(t, array.Raw(), []interface{}{1.0, 2.0, 3.0, 4.0, 5.0, 6.0})
assert.Equal(t,
array.Raw(),
[]interface{}{
1.0,
2.0,
3.0,
4.0,
5.0,
6.0,
},
)

array.chain.assert(t, success)
for _, value := range foundValues {
Expand Down Expand Up @@ -2034,7 +2071,7 @@ func TestArray_FindAll(t *testing.T) {
}

assert.Equal(t, []interface{}{}, actual)
assert.Equal(t, array.Raw(), []interface{}{1.0, 2.0})
assert.Equal(t, []interface{}{1.0, 2.0}, array.Raw())

array.chain.assert(t, success)
for _, value := range foundValues {
Expand All @@ -2057,7 +2094,15 @@ func TestArray_FindAll(t *testing.T) {
}

assert.Equal(t, []interface{}{"foo", "bar"}, actual)
assert.Equal(t, array.Raw(), []interface{}{"foo", 1.0, 2.0, "bar"})
assert.Equal(t,
[]interface{}{
"foo",
1.0,
2.0,
"bar",
},
array.Raw(),
)

array.chain.assert(t, success)
for _, value := range foundValues {
Expand All @@ -2077,7 +2122,7 @@ func TestArray_FindAll(t *testing.T) {
}

assert.Equal(t, []interface{}{}, actual)
assert.Equal(t, array.Raw(), []interface{}{1.0, 2.0})
assert.Equal(t, []interface{}{1.0, 2.0}, array.Raw())

array.chain.assert(t, failure)
for _, value := range foundValues {
Expand Down

0 comments on commit 8595bcf

Please sign in to comment.