summaryrefslogtreecommitdiff
path: root/scalar_test.go
diff options
context:
space:
mode:
authorAlex Flint <[email protected]>2017-02-15 17:42:57 -0800
committerAlex Flint <[email protected]>2017-02-15 17:42:57 -0800
commit679dadd066b3a2df0ea42cdc0975937086cc522c (patch)
tree9c62878d05a8e63800db7b073c638c37d61fd3bf /scalar_test.go
based functions all working
Diffstat (limited to 'scalar_test.go')
-rw-r--r--scalar_test.go74
1 files changed, 74 insertions, 0 deletions
diff --git a/scalar_test.go b/scalar_test.go
new file mode 100644
index 0000000..30df997
--- /dev/null
+++ b/scalar_test.go
@@ -0,0 +1,74 @@
+package scalar
+
+import (
+ "net"
+ "reflect"
+ "testing"
+ "time"
+
+ "github.com/stretchr/testify/assert"
+ "github.com/stretchr/testify/require"
+)
+
+func assertParse(t *testing.T, expected interface{}, str string) {
+ v := reflect.New(reflect.TypeOf(expected)).Elem()
+ err := ParseValue(v, str)
+ if assert.NoError(t, err) {
+ assert.Equal(t, expected, v)
+ }
+
+ ptr := reflect.New(reflect.PtrTo(reflect.TypeOf(expected))).Elem()
+ err = ParseValue(ptr, str)
+ if assert.NoError(t, err) {
+ assert.Equal(t, expected, ptr.Elem())
+ }
+
+ assert.True(t, CanParse(v.Type()))
+ assert.True(t, CanParse(ptr.Type()))
+}
+
+func TestParseValue(t *testing.T) {
+ // strings
+ assertParse(t, "abc", "abc")
+
+ // booleans
+ assertParse(t, true, "true")
+ assertParse(t, false, "false")
+
+ // integers
+ assertParse(t, int(123), "123")
+ assertParse(t, int8(123), "123")
+ assertParse(t, int16(123), "123")
+ assertParse(t, int32(123), "123")
+ assertParse(t, int64(123), "123")
+
+ // unsigned integers
+ assertParse(t, uint(123), "123")
+ assertParse(t, byte(123), "123")
+ assertParse(t, uint8(123), "123")
+ assertParse(t, uint16(123), "123")
+ assertParse(t, uint32(123), "123")
+ assertParse(t, uint64(123), "123")
+ assertParse(t, uintptr(123), "123")
+ assertParse(t, rune(123), "123")
+
+ // floats
+ assertParse(t, float32(123), "123")
+ assertParse(t, float64(123), "123")
+
+ // durations
+ assertParse(t, 3*time.Hour+15*time.Minute, "3h15m")
+
+ // IP addresses
+ assertParse(t, net.IPv4(1, 2, 3, 4), "1.2.3.4")
+
+ // MAC addresses
+ assertParse(t, net.HardwareAddr("\x01\x23\x45\x67\x89\xab"), "01:23:45:67:89:ab")
+}
+
+func TestParse(t *testing.T) {
+ var v int
+ err := Parse(&v, "123")
+ require.NoError(t, err)
+ assert.Equal(t, 123, v)
+}