@@ -102,24 +102,33 @@ def __conform__(self, protocol):
102
102
def __str__ (self ):
103
103
return "<%s>" % self .val
104
104
105
+ class BadConform :
106
+ def __init__ (self , exc ):
107
+ self .exc = exc
108
+ def __conform__ (self , protocol ):
109
+ raise self .exc
110
+
105
111
def setUp (self ):
106
112
self .con = sqlite .connect (":memory:" , detect_types = sqlite .PARSE_DECLTYPES )
107
113
self .cur = self .con .cursor ()
108
- self .cur .execute ("create table test(i int, s str, f float, b bool, u unicode, foo foo, bin blob, n1 number, n2 number(5))" )
114
+ self .cur .execute ("create table test(i int, s str, f float, b bool, u unicode, foo foo, bin blob, n1 number, n2 number(5), bad bad )" )
109
115
110
116
# override float, make them always return the same number
111
117
sqlite .converters ["FLOAT" ] = lambda x : 47.2
112
118
113
119
# and implement two custom ones
114
120
sqlite .converters ["BOOL" ] = lambda x : bool (int (x ))
115
121
sqlite .converters ["FOO" ] = DeclTypesTests .Foo
122
+ sqlite .converters ["BAD" ] = DeclTypesTests .BadConform
116
123
sqlite .converters ["WRONG" ] = lambda x : "WRONG"
117
124
sqlite .converters ["NUMBER" ] = float
118
125
119
126
def tearDown (self ):
120
127
del sqlite .converters ["FLOAT" ]
121
128
del sqlite .converters ["BOOL" ]
122
129
del sqlite .converters ["FOO" ]
130
+ del sqlite .converters ["BAD" ]
131
+ del sqlite .converters ["WRONG" ]
123
132
del sqlite .converters ["NUMBER" ]
124
133
self .cur .close ()
125
134
self .con .close ()
@@ -159,13 +168,13 @@ def CheckBool(self):
159
168
self .cur .execute ("insert into test(b) values (?)" , (False ,))
160
169
self .cur .execute ("select b from test" )
161
170
row = self .cur .fetchone ()
162
- self .assertEqual (row [0 ], False )
171
+ self .assertIs (row [0 ], False )
163
172
164
173
self .cur .execute ("delete from test" )
165
174
self .cur .execute ("insert into test(b) values (?)" , (True ,))
166
175
self .cur .execute ("select b from test" )
167
176
row = self .cur .fetchone ()
168
- self .assertEqual (row [0 ], True )
177
+ self .assertIs (row [0 ], True )
169
178
170
179
def CheckUnicode (self ):
171
180
# default
@@ -182,6 +191,19 @@ def CheckFoo(self):
182
191
row = self .cur .fetchone ()
183
192
self .assertEqual (row [0 ], val )
184
193
194
+ def CheckErrorInConform (self ):
195
+ val = DeclTypesTests .BadConform (TypeError )
196
+ with self .assertRaises (sqlite .InterfaceError ):
197
+ self .cur .execute ("insert into test(bad) values (?)" , (val ,))
198
+ with self .assertRaises (sqlite .InterfaceError ):
199
+ self .cur .execute ("insert into test(bad) values (:val)" , {"val" : val })
200
+
201
+ val = DeclTypesTests .BadConform (KeyboardInterrupt )
202
+ with self .assertRaises (KeyboardInterrupt ):
203
+ self .cur .execute ("insert into test(bad) values (?)" , (val ,))
204
+ with self .assertRaises (KeyboardInterrupt ):
205
+ self .cur .execute ("insert into test(bad) values (:val)" , {"val" : val })
206
+
185
207
def CheckUnsupportedSeq (self ):
186
208
class Bar : pass
187
209
val = Bar ()
0 commit comments