1
0
mirror of https://github.com/danog/liquid.git synced 2024-12-02 14:47:46 +01:00
liquid/evaluator/value_test.go

122 lines
4.2 KiB
Go
Raw Normal View History

2017-07-20 15:37:56 +02:00
package evaluator
import (
"testing"
"github.com/stretchr/testify/require"
)
func TestValue_Interface(t *testing.T) {
nv := ValueOf(nil)
iv := ValueOf(123)
2017-07-21 17:56:04 +02:00
require.Equal(t, nil, nv.Interface())
require.Equal(t, true, ValueOf(true).Interface())
require.Equal(t, false, ValueOf(false).Interface())
require.Equal(t, 123, iv.Interface())
}
func TestValue_Equal(t *testing.T) {
iv := ValueOf(123)
2017-07-20 15:37:56 +02:00
require.True(t, iv.Equal(ValueOf(123)))
require.True(t, iv.Equal(ValueOf(123.0)))
}
func TestValue_Less(t *testing.T) {
iv := ValueOf(123)
require.False(t, iv.Less(ValueOf(100)))
2017-07-20 15:37:56 +02:00
require.True(t, iv.Less(ValueOf(200)))
require.False(t, iv.Less(ValueOf(100.5)))
require.True(t, iv.Less(ValueOf(200.5)))
sv := ValueOf("b")
require.False(t, sv.Less(ValueOf("a")))
require.True(t, sv.Less(ValueOf("c")))
}
func TestValue_Int(t *testing.T) {
nv := ValueOf(nil)
iv := ValueOf(123)
require.Equal(t, 123, iv.Int())
require.Panics(t, func() { nv.Int() })
2017-07-20 15:37:56 +02:00
}
func TestValue_IndexValue(t *testing.T) {
require.Nil(t, ValueOf(nil).PropertyValue(ValueOf("first")).Interface())
require.Nil(t, ValueOf(false).PropertyValue(ValueOf("first")).Interface())
require.Nil(t, ValueOf(12).PropertyValue(ValueOf("first")).Interface())
empty := ValueOf([]string{})
require.Equal(t, nil, empty.IndexValue(ValueOf(0)).Interface())
require.Equal(t, nil, empty.IndexValue(ValueOf(-1)).Interface())
2017-07-20 15:37:56 +02:00
av := ValueOf([]string{"first", "second", "third"})
require.Equal(t, "first", av.IndexValue(ValueOf(0)).Interface())
require.Equal(t, "third", av.IndexValue(ValueOf(-1)).Interface())
2017-07-21 22:23:08 +02:00
require.Equal(t, "second", av.IndexValue(ValueOf(1.0)).Interface())
require.Equal(t, "second", av.IndexValue(ValueOf(1.1)).Interface())
2017-07-20 15:37:56 +02:00
hv := ValueOf(map[string]interface{}{"key": "value"})
require.Equal(t, "value", hv.IndexValue(ValueOf("key")).Interface())
require.Equal(t, nil, hv.IndexValue(ValueOf("missing_key")).Interface())
hashPtr := ValueOf(&map[string]interface{}{"key": "value"})
require.Equal(t, "value", hashPtr.IndexValue(ValueOf("key")).Interface())
require.Equal(t, nil, hashPtr.IndexValue(ValueOf("missing_key")).Interface())
}
func TestValue_PropertyValue(t *testing.T) {
2017-07-20 15:37:56 +02:00
empty := ValueOf([]string{})
require.Equal(t, nil, empty.PropertyValue(ValueOf("first")).Interface())
require.Equal(t, nil, empty.PropertyValue(ValueOf("last")).Interface())
av := ValueOf([]string{"first", "second", "third"})
require.Equal(t, "first", av.PropertyValue(ValueOf("first")).Interface())
require.Equal(t, "third", av.PropertyValue(ValueOf("last")).Interface())
2017-07-20 15:37:56 +02:00
}
func TestValue_Contains(t *testing.T) {
// array
require.True(t, ValueOf([]int{1, 2}).Contains(ValueOf(2)))
require.False(t, ValueOf([]int{1, 2}).Contains(ValueOf(3)))
av := ValueOf([]string{"first", "second", "third"})
require.True(t, av.Contains(ValueOf("first")))
require.False(t, av.Contains(ValueOf("missing")))
// string
sv := ValueOf("seafood")
require.True(t, sv.Contains(ValueOf("foo")))
require.False(t, sv.Contains(ValueOf("bar")))
2017-07-20 15:52:05 +02:00
// string contains stringifies its argument
2017-07-20 15:52:05 +02:00
require.True(t, ValueOf("seaf00d").Contains(ValueOf(0)))
// hash
hv := ValueOf(map[string]interface{}{"key": "value"})
require.True(t, hv.Contains(ValueOf("key")))
require.False(t, hv.Contains(ValueOf("missing_key")))
2017-07-20 15:37:56 +02:00
}
func TestValue_PropertyValue_size(t *testing.T) {
require.Nil(t, ValueOf(nil).PropertyValue(ValueOf("size")).Interface())
require.Nil(t, ValueOf(false).PropertyValue(ValueOf("size")).Interface())
require.Nil(t, ValueOf(12).PropertyValue(ValueOf("size")).Interface())
require.Equal(t, 7, ValueOf("seafood").PropertyValue(ValueOf("size")).Interface())
empty := ValueOf([]string{})
require.Equal(t, 0, empty.PropertyValue(ValueOf("size")).Interface())
av := ValueOf([]string{"first", "second", "third"})
require.Equal(t, 3, av.PropertyValue(ValueOf("size")).Interface())
hv := ValueOf(map[string]interface{}{"key": "value"})
require.Equal(t, 1, hv.PropertyValue(ValueOf("size")).Interface())
2017-07-20 15:37:56 +02:00
withSizeKey := ValueOf(map[string]interface{}{"size": "value"})
require.Equal(t, "value", withSizeKey.IndexValue(ValueOf("size")).Interface())
2017-07-20 15:42:36 +02:00
hashPtr := ValueOf(&map[string]interface{}{"key": "value"})
require.Equal(t, 1, hashPtr.PropertyValue(ValueOf("size")).Interface())
2017-07-20 15:37:56 +02:00
}