...
1
2
3
4 package sqlmock
5
6 import (
7 "database/sql/driver"
8 "fmt"
9 "reflect"
10 )
11
12
13
14 func (e *ExpectedQuery) WillReturnRows(rows *Rows) *ExpectedQuery {
15 e.rows = &rowSets{sets: []*Rows{rows}, ex: e}
16 return e
17 }
18
19 func (e *queryBasedExpectation) argsMatches(args []namedValue) error {
20 if nil == e.args {
21 if e.noArgs && len(args) > 0 {
22 return fmt.Errorf("expected 0, but got %d arguments", len(args))
23 }
24 return nil
25 }
26 if len(args) != len(e.args) {
27 return fmt.Errorf("expected %d, but got %d arguments", len(e.args), len(args))
28 }
29 for k, v := range args {
30
31 matcher, ok := e.args[k].(Argument)
32 if ok {
33
34 if !matcher.Match(v.Value) {
35 return fmt.Errorf("matcher %T could not match %d argument %T - %+v", matcher, k, args[k], args[k])
36 }
37 continue
38 }
39
40 dval := e.args[k]
41
42 darg, err := e.converter.ConvertValue(dval)
43 if err != nil {
44 return fmt.Errorf("could not convert %d argument %T - %+v to driver value: %s", k, e.args[k], e.args[k], err)
45 }
46
47 if !driver.IsValue(darg) {
48 return fmt.Errorf("argument %d: non-subset type %T returned from Value", k, darg)
49 }
50
51 if !reflect.DeepEqual(darg, v.Value) {
52 return fmt.Errorf("argument %d expected [%T - %+v] does not match actual [%T - %+v]", k, darg, darg, v.Value, v.Value)
53 }
54 }
55 return nil
56 }
57
58 func (e *queryBasedExpectation) attemptArgMatch(args []namedValue) (err error) {
59
60 defer func() {
61 if e := recover(); e != nil {
62 _, ok := e.(error)
63 if !ok {
64 err = fmt.Errorf(e.(string))
65 }
66 }
67 }()
68
69 err = e.argsMatches(args)
70 return
71 }
72
View as plain text