@@ -6,11 +6,104 @@ import (
66	"database/sql" 
77	"database/sql/driver" 
88	"testing" 
9+ 	"time" 
910)
1011
12+ func  TestQueryExpectationArgComparison (t  * testing.T ) {
13+ 	e  :=  & queryBasedExpectation {converter : driver .DefaultParameterConverter }
14+ 	against  :=  []driver.NamedValue {{Value : int64 (5 ), Ordinal : 1 }}
15+ 	if  err  :=  e .argsMatches (against ); err  !=  nil  {
16+ 		t .Errorf ("arguments should match, since the no expectation was set, but got err: %s" , err )
17+ 	}
18+ 
19+ 	e .args  =  []driver.Value {5 , "str" }
20+ 
21+ 	against  =  []driver.NamedValue {{Value : int64 (5 ), Ordinal : 1 }}
22+ 	if  err  :=  e .argsMatches (against ); err  ==  nil  {
23+ 		t .Error ("arguments should not match, since the size is not the same" )
24+ 	}
25+ 
26+ 	against  =  []driver.NamedValue {
27+ 		{Value : int64 (3 ), Ordinal : 1 },
28+ 		{Value : "str" , Ordinal : 2 },
29+ 	}
30+ 	if  err  :=  e .argsMatches (against ); err  ==  nil  {
31+ 		t .Error ("arguments should not match, since the first argument (int value) is different" )
32+ 	}
33+ 
34+ 	against  =  []driver.NamedValue {
35+ 		{Value : int64 (5 ), Ordinal : 1 },
36+ 		{Value : "st" , Ordinal : 2 },
37+ 	}
38+ 	if  err  :=  e .argsMatches (against ); err  ==  nil  {
39+ 		t .Error ("arguments should not match, since the second argument (string value) is different" )
40+ 	}
41+ 
42+ 	against  =  []driver.NamedValue {
43+ 		{Value : int64 (5 ), Ordinal : 1 },
44+ 		{Value : "str" , Ordinal : 2 },
45+ 	}
46+ 	if  err  :=  e .argsMatches (against ); err  !=  nil  {
47+ 		t .Errorf ("arguments should match, but it did not: %s" , err )
48+ 	}
49+ 
50+ 	const  longForm  =  "Jan 2, 2006 at 3:04pm (MST)" 
51+ 	tm , _  :=  time .Parse (longForm , "Feb 3, 2013 at 7:54pm (PST)" )
52+ 	e .args  =  []driver.Value {5 , tm }
53+ 
54+ 	against  =  []driver.NamedValue {
55+ 		{Value : int64 (5 ), Ordinal : 1 },
56+ 		{Value : tm , Ordinal : 2 },
57+ 	}
58+ 	if  err  :=  e .argsMatches (against ); err  !=  nil  {
59+ 		t .Error ("arguments should match, but it did not" )
60+ 	}
61+ 
62+ 	e .args  =  []driver.Value {5 , AnyArg ()}
63+ 	if  err  :=  e .argsMatches (against ); err  !=  nil  {
64+ 		t .Errorf ("arguments should match, but it did not: %s" , err )
65+ 	}
66+ }
67+ 
68+ func  TestQueryExpectationArgComparisonBool (t  * testing.T ) {
69+ 	var  e  * queryBasedExpectation 
70+ 
71+ 	e  =  & queryBasedExpectation {args : []driver.Value {true }, converter : driver .DefaultParameterConverter }
72+ 	against  :=  []driver.NamedValue {
73+ 		{Value : true , Ordinal : 1 },
74+ 	}
75+ 	if  err  :=  e .argsMatches (against ); err  !=  nil  {
76+ 		t .Error ("arguments should match, since arguments are the same" )
77+ 	}
78+ 
79+ 	e  =  & queryBasedExpectation {args : []driver.Value {false }, converter : driver .DefaultParameterConverter }
80+ 	against  =  []driver.NamedValue {
81+ 		{Value : false , Ordinal : 1 },
82+ 	}
83+ 	if  err  :=  e .argsMatches (against ); err  !=  nil  {
84+ 		t .Error ("arguments should match, since argument are the same" )
85+ 	}
86+ 
87+ 	e  =  & queryBasedExpectation {args : []driver.Value {true }, converter : driver .DefaultParameterConverter }
88+ 	against  =  []driver.NamedValue {
89+ 		{Value : false , Ordinal : 1 },
90+ 	}
91+ 	if  err  :=  e .argsMatches (against ); err  ==  nil  {
92+ 		t .Error ("arguments should not match, since argument is different" )
93+ 	}
94+ 
95+ 	e  =  & queryBasedExpectation {args : []driver.Value {false }, converter : driver .DefaultParameterConverter }
96+ 	against  =  []driver.NamedValue {
97+ 		{Value : true , Ordinal : 1 },
98+ 	}
99+ 	if  err  :=  e .argsMatches (against ); err  ==  nil  {
100+ 		t .Error ("arguments should not match, since argument is different" )
101+ 	}
102+ }
103+ 
11104func  TestQueryExpectationNamedArgComparison (t  * testing.T ) {
12105	e  :=  & queryBasedExpectation {converter : driver .DefaultParameterConverter }
13- 	against  :=  []namedValue {{Value : int64 (5 ), Name : "id" }}
106+ 	against  :=  []driver. NamedValue {{Value : int64 (5 ), Name : "id" }}
14107	if  err  :=  e .argsMatches (against ); err  !=  nil  {
15108		t .Errorf ("arguments should match, since the no expectation was set, but got err: %s" , err )
16109	}
@@ -24,7 +117,7 @@ func TestQueryExpectationNamedArgComparison(t *testing.T) {
24117		t .Error ("arguments should not match, since the size is not the same" )
25118	}
26119
27- 	against  =  []namedValue {
120+ 	against  =  []driver. NamedValue {
28121		{Value : int64 (5 ), Name : "id" },
29122		{Value : "str" , Name : "s" },
30123	}
@@ -33,7 +126,7 @@ func TestQueryExpectationNamedArgComparison(t *testing.T) {
33126		t .Errorf ("arguments should have matched, but it did not: %v" , err )
34127	}
35128
36- 	against  =  []namedValue {
129+ 	against  =  []driver. NamedValue {
37130		{Value : int64 (5 ), Name : "id" },
38131		{Value : "str" , Name : "username" },
39132	}
@@ -44,7 +137,7 @@ func TestQueryExpectationNamedArgComparison(t *testing.T) {
44137
45138	e .args  =  []driver.Value {int64 (5 ), "str" }
46139
47- 	against  =  []namedValue {
140+ 	against  =  []driver. NamedValue {
48141		{Value : int64 (5 ), Ordinal : 0 },
49142		{Value : "str" , Ordinal : 1 },
50143	}
@@ -53,7 +146,7 @@ func TestQueryExpectationNamedArgComparison(t *testing.T) {
53146		t .Error ("arguments matched, but it should have not due to wrong Ordinal position" )
54147	}
55148
56- 	against  =  []namedValue {
149+ 	against  =  []driver. NamedValue {
57150		{Value : int64 (5 ), Ordinal : 1 },
58151		{Value : "str" , Ordinal : 2 },
59152	}
@@ -62,3 +155,20 @@ func TestQueryExpectationNamedArgComparison(t *testing.T) {
62155		t .Errorf ("arguments should have matched, but it did not: %v" , err )
63156	}
64157}
158+ 
159+ type  panicConverter  struct  {
160+ }
161+ 
162+ func  (s  panicConverter ) ConvertValue (v  interface {}) (driver.Value , error ) {
163+ 	panic (v )
164+ }
165+ 
166+ func  Test_queryBasedExpectation_attemptArgMatch (t  * testing.T ) {
167+ 	e  :=  & queryBasedExpectation {converter : new (panicConverter ), args : []driver.Value {"test" }}
168+ 	values  :=  []driver.NamedValue {
169+ 		{Ordinal : 1 , Name : "test" , Value : "test" },
170+ 	}
171+ 	if  err  :=  e .attemptArgMatch (values ); err  ==  nil  {
172+ 		t .Errorf ("error expected" )
173+ 	}
174+ }
0 commit comments