121 lines
2.0 KiB
Go
121 lines
2.0 KiB
Go
|
|
package bind_test
|
||
|
|
|
||
|
|
import (
|
||
|
|
"testing"
|
||
|
|
"code.squareroundforest.org/arpio/bind"
|
||
|
|
)
|
||
|
|
|
||
|
|
func TestScan(t *testing.T) {
|
||
|
|
// conversion
|
||
|
|
// unscannable
|
||
|
|
// bool
|
||
|
|
// int
|
||
|
|
// int sized
|
||
|
|
// uint
|
||
|
|
// uint sized
|
||
|
|
// binary
|
||
|
|
// octal
|
||
|
|
// hexa
|
||
|
|
// num parse failing
|
||
|
|
|
||
|
|
t.Run("conversion", func(t *testing.T) {
|
||
|
|
var i64 int64
|
||
|
|
i := 42
|
||
|
|
bind.BindScalar(&i64, i)
|
||
|
|
if i64 != 42 {
|
||
|
|
t.Fatal()
|
||
|
|
}
|
||
|
|
})
|
||
|
|
|
||
|
|
t.Run("unscannable", func(t *testing.T) {
|
||
|
|
var s string
|
||
|
|
if bind.BindScalar(&s, func() string { return "" }) {
|
||
|
|
t.Fatal()
|
||
|
|
}
|
||
|
|
})
|
||
|
|
|
||
|
|
t.Run("bool", func(t *testing.T) {
|
||
|
|
var b bool
|
||
|
|
if !bind.BindScalar(&b, "true") || !b {
|
||
|
|
t.Fatal()
|
||
|
|
}
|
||
|
|
})
|
||
|
|
|
||
|
|
t.Run("int", func(t *testing.T) {
|
||
|
|
var i int
|
||
|
|
if !bind.BindScalar(&i, "42") || i != 42 {
|
||
|
|
t.Fatal()
|
||
|
|
}
|
||
|
|
})
|
||
|
|
|
||
|
|
t.Run("int sized", func(t *testing.T) {
|
||
|
|
var i int8
|
||
|
|
if !bind.BindScalar(&i, "42") || i != 42 {
|
||
|
|
t.Fatal()
|
||
|
|
}
|
||
|
|
})
|
||
|
|
|
||
|
|
t.Run("uint", func(t *testing.T) {
|
||
|
|
var i uint
|
||
|
|
if !bind.BindScalar(&i, "42") || i != 42 {
|
||
|
|
t.Fatal()
|
||
|
|
}
|
||
|
|
})
|
||
|
|
|
||
|
|
t.Run("uint sized", func(t *testing.T) {
|
||
|
|
var i uint8
|
||
|
|
if !bind.BindScalar(&i, "42") || i != 42 {
|
||
|
|
t.Fatal()
|
||
|
|
}
|
||
|
|
})
|
||
|
|
|
||
|
|
t.Run("binary", func(t *testing.T) {
|
||
|
|
var i int
|
||
|
|
if !bind.BindScalar(&i, "0b101010") || i != 42 {
|
||
|
|
t.Fatal()
|
||
|
|
}
|
||
|
|
})
|
||
|
|
|
||
|
|
t.Run("octal", func(t *testing.T) {
|
||
|
|
var i int
|
||
|
|
if !bind.BindScalar(&i, "052") || i != 42 {
|
||
|
|
t.Fatal()
|
||
|
|
}
|
||
|
|
})
|
||
|
|
|
||
|
|
t.Run("hexa", func(t *testing.T) {
|
||
|
|
var i int
|
||
|
|
if !bind.BindScalar(&i, "0x2a") || i != 42 {
|
||
|
|
t.Fatal()
|
||
|
|
}
|
||
|
|
})
|
||
|
|
|
||
|
|
t.Run("num parse failing", func(t *testing.T) {
|
||
|
|
i := 21
|
||
|
|
if bind.BindScalar(&i, "foo") || i != 21 {
|
||
|
|
t.Fatal()
|
||
|
|
}
|
||
|
|
})
|
||
|
|
|
||
|
|
t.Run("float", func(t *testing.T) {
|
||
|
|
var f float64
|
||
|
|
if !bind.BindScalar(&f, "2.41") || f != 2.41 {
|
||
|
|
t.Fatal()
|
||
|
|
}
|
||
|
|
})
|
||
|
|
|
||
|
|
t.Run("string", func(t *testing.T) {
|
||
|
|
var s string
|
||
|
|
if !bind.BindScalar(&s, "foo bar baz") || s != "foo bar baz" {
|
||
|
|
t.Fatal()
|
||
|
|
}
|
||
|
|
})
|
||
|
|
|
||
|
|
t.Run("interface", func(t *testing.T) {
|
||
|
|
var i any
|
||
|
|
if !bind.BindScalar(&i, "foo bar baz") || i != "foo bar baz" {
|
||
|
|
t.Fatal()
|
||
|
|
}
|
||
|
|
})
|
||
|
|
}
|