1
0
mirror of https://github.com/DATA-DOG/go-sqlmock.git synced 2025-02-05 13:05:12 +02:00
go-sqlmock/expectations.go

105 lines
1.9 KiB
Go
Raw Normal View History

2014-02-05 16:21:07 +02:00
package sqlmock
import (
"database/sql/driver"
"reflect"
"regexp"
)
2014-02-07 08:58:27 +02:00
// an expectation interface
2014-02-05 16:21:07 +02:00
type expectation interface {
fulfilled() bool
setError(err error)
}
2014-02-07 08:58:27 +02:00
// common expectation struct
// satisfies the expectation interface
2014-02-05 16:21:07 +02:00
type commonExpectation struct {
triggered bool
err error
}
func (e *commonExpectation) fulfilled() bool {
return e.triggered
}
func (e *commonExpectation) setError(err error) {
e.err = err
}
// query based expectation
2014-02-07 08:58:27 +02:00
// adds a query matching logic
2014-02-05 16:21:07 +02:00
type queryBasedExpectation struct {
commonExpectation
sqlRegex *regexp.Regexp
args []driver.Value
}
func (e *queryBasedExpectation) queryMatches(sql string) bool {
return e.sqlRegex.MatchString(sql)
}
func (e *queryBasedExpectation) argsMatches(args []driver.Value) bool {
if len(args) != len(e.args) {
return false
}
2014-02-06 17:03:46 +02:00
for k, v := range args {
2014-02-05 16:21:07 +02:00
vi := reflect.ValueOf(v)
2014-02-06 17:03:46 +02:00
ai := reflect.ValueOf(e.args[k])
2014-02-05 16:21:07 +02:00
switch vi.Kind() {
case reflect.Int, reflect.Int8, reflect.Int16, reflect.Int32, reflect.Int64:
if vi.Int() != ai.Int() {
return false
}
case reflect.Float32, reflect.Float64:
if vi.Float() != ai.Float() {
return false
}
case reflect.Uint, reflect.Uint8, reflect.Uint16, reflect.Uint32, reflect.Uint64:
if vi.Uint() != ai.Uint() {
return false
}
case reflect.String:
if vi.String() != ai.String() {
return false
}
default:
// compare types like time.Time based on type only
if vi.Kind() != ai.Kind() {
return false
}
}
}
return true
}
// begin transaction
type expectedBegin struct {
commonExpectation
}
// tx commit
type expectedCommit struct {
commonExpectation
}
// tx rollback
type expectedRollback struct {
commonExpectation
}
// query expectation
type expectedQuery struct {
queryBasedExpectation
rows driver.Rows
}
// exec query expectation
type expectedExec struct {
queryBasedExpectation
result driver.Result
}
2014-02-07 08:58:27 +02:00