mirror of
https://github.com/DATA-DOG/go-sqlmock.git
synced 2025-03-19 20:57:50 +02:00
46 lines
1.2 KiB
Go
46 lines
1.2 KiB
Go
|
// +build !go1.8
|
||
|
|
||
|
package sqlmock
|
||
|
|
||
|
import (
|
||
|
"database/sql/driver"
|
||
|
"fmt"
|
||
|
"reflect"
|
||
|
)
|
||
|
|
||
|
func (e *queryBasedExpectation) argsMatches(args []namedValue) error {
|
||
|
if nil == e.args {
|
||
|
return nil
|
||
|
}
|
||
|
if len(args) != len(e.args) {
|
||
|
return fmt.Errorf("expected %d, but got %d arguments", len(e.args), len(args))
|
||
|
}
|
||
|
for k, v := range args {
|
||
|
// custom argument matcher
|
||
|
matcher, ok := e.args[k].(Argument)
|
||
|
if ok {
|
||
|
// @TODO: does it make sense to pass value instead of named value?
|
||
|
if !matcher.Match(v.Value) {
|
||
|
return fmt.Errorf("matcher %T could not match %d argument %T - %+v", matcher, k, args[k], args[k])
|
||
|
}
|
||
|
continue
|
||
|
}
|
||
|
|
||
|
dval := e.args[k]
|
||
|
// convert to driver converter
|
||
|
darg, err := driver.DefaultParameterConverter.ConvertValue(dval)
|
||
|
if err != nil {
|
||
|
return fmt.Errorf("could not convert %d argument %T - %+v to driver value: %s", k, e.args[k], e.args[k], err)
|
||
|
}
|
||
|
|
||
|
if !driver.IsValue(darg) {
|
||
|
return fmt.Errorf("argument %d: non-subset type %T returned from Value", k, darg)
|
||
|
}
|
||
|
|
||
|
if !reflect.DeepEqual(darg, v.Value) {
|
||
|
return fmt.Errorf("argument %d expected [%T - %+v] does not match actual [%T - %+v]", k, darg, darg, v.Value, v.Value)
|
||
|
}
|
||
|
}
|
||
|
return nil
|
||
|
}
|