99 lines
2.2 KiB
Go
99 lines
2.2 KiB
Go
package hrana
|
|
|
|
import (
|
|
"reflect"
|
|
"testing"
|
|
)
|
|
|
|
func TestStmtWithPositionalArgs(t *testing.T) {
|
|
tests := []struct {
|
|
name string
|
|
args []any
|
|
want []Value
|
|
wantErr bool
|
|
}{
|
|
{
|
|
name: "int args",
|
|
args: []any{1, 2},
|
|
want: []Value{{Type: "integer", Value: "1"}, {Type: "integer", Value: "2"}},
|
|
},
|
|
{
|
|
name: "string args",
|
|
args: []any{"a", "b"},
|
|
want: []Value{{Type: "text", Value: "a"}, {Type: "text", Value: "b"}},
|
|
},
|
|
{
|
|
name: "invalid arg",
|
|
args: []any{make(chan int)},
|
|
want: nil,
|
|
wantErr: true,
|
|
},
|
|
}
|
|
for _, tt := range tests {
|
|
t.Run(tt.name, func(t *testing.T) {
|
|
stmt := Stmt{}
|
|
err := stmt.AddPositionalArgs(tt.args)
|
|
if (err != nil) != tt.wantErr {
|
|
t.Errorf("StmtWithPositionalArgs() error = %v, wantErr %v", err, tt.wantErr)
|
|
return
|
|
}
|
|
if !reflect.DeepEqual(stmt.Args, tt.want) {
|
|
t.Errorf("got = %v, want %v", stmt.Args, tt.want)
|
|
}
|
|
})
|
|
}
|
|
}
|
|
|
|
func TestStmtWithNamedArgs(t *testing.T) {
|
|
tests := []struct {
|
|
name string
|
|
args map[string]any
|
|
want []NamedArg
|
|
wantErr bool
|
|
}{
|
|
{
|
|
name: "int args",
|
|
args: map[string]any{"arg1": 1, "arg2": int64(2)},
|
|
want: []NamedArg{
|
|
{Name: "arg1", Value: Value{Type: "integer", Value: "1"}},
|
|
{Name: "arg2", Value: Value{Type: "integer", Value: "2"}},
|
|
},
|
|
},
|
|
{
|
|
name: "string args",
|
|
args: map[string]any{"arg1": "a", "arg2": "b"},
|
|
want: []NamedArg{
|
|
{Name: "arg1", Value: Value{Type: "text", Value: "a"}},
|
|
{Name: "arg2", Value: Value{Type: "text", Value: "b"}},
|
|
},
|
|
},
|
|
{
|
|
name: "invalid arg",
|
|
args: map[string]any{"arg1": make(chan int)},
|
|
want: nil,
|
|
wantErr: true,
|
|
},
|
|
}
|
|
for _, tt := range tests {
|
|
t.Run(tt.name, func(t *testing.T) {
|
|
stmt := Stmt{}
|
|
err := stmt.AddNamedArgs(tt.args)
|
|
if (err != nil) != tt.wantErr {
|
|
t.Errorf("StmtWithNamedArgs() error = %v, wantErr %v", err, tt.wantErr)
|
|
return
|
|
}
|
|
got := make(map[NamedArg]struct{})
|
|
want := make(map[NamedArg]struct{})
|
|
for _, arg := range stmt.NamedArgs {
|
|
got[arg] = struct{}{}
|
|
}
|
|
for _, arg := range tt.want {
|
|
want[arg] = struct{}{}
|
|
}
|
|
if !reflect.DeepEqual(got, want) {
|
|
t.Errorf("got = %v, want %v", stmt.NamedArgs, tt.want)
|
|
}
|
|
})
|
|
}
|
|
}
|