@@ -1136,6 +1136,12 @@ def raises(expected_exception, *args, **kwargs):
1136
1136
...
1137
1137
>>> assert str(exc_info.value) == "value must be <= 10"
1138
1138
1139
+ Or you can use the keyword argument ``match_info`` to assert that the
1140
+ exception contains a certain text::
1141
+
1142
+ >>> with raises(ValueError, match_info='must be 0'):
1143
+ .... if value != 0:
1144
+ .... raise ValueError("value must be 0 or None")
1139
1145
1140
1146
Or you can specify a callable by passing a to-be-called lambda::
1141
1147
@@ -1191,11 +1197,15 @@ def raises(expected_exception, *args, **kwargs):
1191
1197
raise TypeError (msg % type (expected_exception ))
1192
1198
1193
1199
message = "DID NOT RAISE {0}" .format (expected_exception )
1200
+ match_info = None
1194
1201
1195
1202
if not args :
1196
1203
if "message" in kwargs :
1197
1204
message = kwargs .pop ("message" )
1198
- return RaisesContext (expected_exception , message )
1205
+ if "match_info" in kwargs :
1206
+ match_info = kwargs .pop ("match_info" )
1207
+ message += " with text '{0}'" .format (match_info )
1208
+ return RaisesContext (expected_exception , message , match_info )
1199
1209
elif isinstance (args [0 ], str ):
1200
1210
code , = args
1201
1211
assert isinstance (code , str )
@@ -1219,9 +1229,10 @@ def raises(expected_exception, *args, **kwargs):
1219
1229
pytest .fail (message )
1220
1230
1221
1231
class RaisesContext (object ):
1222
- def __init__ (self , expected_exception , message ):
1232
+ def __init__ (self , expected_exception , message , match_info ):
1223
1233
self .expected_exception = expected_exception
1224
1234
self .message = message
1235
+ self .match_info = match_info
1225
1236
self .excinfo = None
1226
1237
1227
1238
def __enter__ (self ):
@@ -1240,6 +1251,8 @@ def __exit__(self, *tp):
1240
1251
exc_type , value , traceback = tp
1241
1252
tp = exc_type , exc_type (value ), traceback
1242
1253
self .excinfo .__init__ (tp )
1254
+ if self .match_info and not self .match_info .lower () in str (self .excinfo ).lower ():
1255
+ pytest .fail (self .message )
1243
1256
suppress_exception = issubclass (self .excinfo .type , self .expected_exception )
1244
1257
if sys .version_info [0 ] == 2 and suppress_exception :
1245
1258
sys .exc_clear ()
0 commit comments