1
0
bind/scan_test.go

121 lines
2.0 KiB
Go
Raw Normal View History

2025-08-27 21:03:25 +02:00
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()
}
})
}