@@ -5,6 +5,7 @@ local helper = require('test.helpers.general')
5
5
local assert_failure = helper .assert_failure
6
6
local assert_failure_equals = helper .assert_failure_equals
7
7
local assert_failure_contains = helper .assert_failure_contains
8
+ local assert_failure_matches = helper .assert_failure_matches
8
9
9
10
local function f ()
10
11
end
@@ -22,13 +23,13 @@ local f_check_trace = function(level)
22
23
box .error (box .error .UNKNOWN , level )
23
24
end
24
25
25
- local line = debug.getinfo (1 , ' l' ).currentline + 2
26
+ local wrapper_line = debug.getinfo (1 , ' l' ).currentline + 2
26
27
local f_check_trace_wrapper = function ()
27
28
f_check_trace (2 )
28
29
end
29
30
30
- local _ , err = pcall (f_check_trace_wrapper )
31
- local box_error_has_level = err :unpack ().trace [1 ].line == line
31
+ local _ , wrapper_err = pcall (f_check_trace_wrapper )
32
+ local box_error_has_level = wrapper_err :unpack ().trace [1 ].line == wrapper_line
32
33
33
34
local f_check_success = function ()
34
35
return {1 , ' foo' }
@@ -163,26 +164,85 @@ function g.test_assert_errorMsgMatches()
163
164
end
164
165
165
166
function g .test_assert_errorCovers ()
167
+ local actual
168
+ local expected
166
169
-- function executes successfully
167
- assert_failure (t .assert_error_covers , {}, f , 1 )
168
- -- function expected to raise a table or has unpack()
169
- assert_failure (t .assert_error_covers , {}, f_with_error , 1 )
170
-
171
- -- good error coverage, error is table
172
- t .assert_error_covers ({b = 2 },
173
- function (a , b ) error ({a = a , b = b }) end , 1 , 2 )
174
- local error_with_unpack = function (a , b )
175
- local e = {}
176
- e .unpack = function ()
177
- return {a = a , b = b }
178
- end
179
- error (e )
170
+ assert_failure_equals (' Function successfully returned: {1, "foo"}\n ' ..
171
+ ' Expected error: {}' , t .assert_error_covers , {},
172
+ function () return {1 , ' foo' } end )
173
+ ---- ------------
174
+ -- good coverage
175
+ ---- ------------
176
+ t .assert_error_covers ({}, error , {})
177
+ t .assert_error_covers ({b = 2 }, error , {b = 2 })
178
+ t .assert_error_covers ({b = 2 }, error , {a = 1 , b = 2 })
179
+ actual = {a = 1 , b = 2 , prev = {x = 3 , y = 4 }}
180
+ expected = {b = 2 , prev = {x = 3 }}
181
+ t .assert_error_covers (expected , error , actual )
182
+ actual .prev .prev = {i = 5 , j = 6 }
183
+ expected .prev .prev = {j = 6 }
184
+ t .assert_error_covers (expected , error , actual )
185
+ ---- -----------
186
+ -- bad coverage
187
+ ---- -----------
188
+ local msg = ' Error expected: .*\n Error received: .*'
189
+ assert_failure_matches (msg , t .assert_error_covers ,
190
+ {b = 2 }, error , {a = 1 , b = 3 })
191
+ assert_failure_matches (msg , t .assert_error_covers , {b = 2 }, error , {a = 1 })
192
+ assert_failure_matches (msg , t .assert_error_covers , {b = 2 }, error , {})
193
+ actual = {a = 1 , b = 2 , prev = {x = 3 , y = 4 }}
194
+ expected = {b = 2 , prev = {x = 4 }}
195
+ assert_failure_matches (msg , t .assert_error_covers , expected , error , actual )
196
+ actual = {a = 1 , b = 2 , prev = {x = 3 , y = 4 , prev = {i = 5 , j = 6 }}}
197
+ expected = {b = 2 , prev = {x = 3 , prev = {i = 6 }}}
198
+ assert_failure_matches (msg , t .assert_error_covers , expected , error , actual )
199
+ ---- ----
200
+ --- misc
201
+ ---- ----
202
+ -- several arguments for tested function
203
+ local error_args = function (a , b ) error ({a = a , b = b }) end
204
+ t .assert_error_covers ({b = 2 }, error_args , 1 , 2 )
205
+ -- full error message
206
+ assert_failure_equals (' Error expected: {b = 2}\n ' ..
207
+ ' Error received: {a = 1, b = 3}' ,
208
+ t .assert_error_covers , {b = 2 }, error , {a = 1 , b = 3 })
209
+ ---- -----------
210
+ -- corner cases
211
+ ---- -----------
212
+ -- strange, but still
213
+ t .assert_error_covers (' foo' , error , ' foo' )
214
+ -- same but for stacked diagnostics
215
+ t .assert_error_covers ({b = 2 , prev = ' foo' },
216
+ error , {a = 1 , b = 2 , prev = ' foo' })
217
+ -- actual error is not table
218
+ assert_failure_matches (msg , t .assert_error_covers , {}, error , ' foo' )
219
+ -- expected in not a table
220
+ assert_failure_matches (msg , t .assert_error_covers , 2 , error , {})
221
+ -- actual error is not indexable
222
+ assert_failure_matches (msg , t .assert_error_covers , {}, error , 1 LL)
223
+ -- actual error prev is not table
224
+ assert_failure_matches (msg , t .assert_error_covers , {prev = {}},
225
+ error , {prev = ' foo' })
226
+ -- expected error prev is not table
227
+ assert_failure_matches (msg , t .assert_error_covers , {prev = ' foo' },
228
+ error , {prev = {}})
229
+ -- actual error prev is not indexable
230
+ assert_failure_matches (msg , t .assert_error_covers , {prev = {}},
231
+ error , {prev = 1 LL})
232
+ ---- --------
233
+ -- box.error
234
+ ---- --------
235
+ t .assert_error_covers ({type = ' ClientError' , code = 0 }, box .error , 0 )
236
+ local err = box .error .new (box .error .UNKNOWN )
237
+ if err .set_prev ~= nil then
238
+ err :set_prev (box .error .new (box .error .ILLEGAL_PARAMS , ' foo' ))
239
+ expected = {
240
+ type = ' ClientError' ,
241
+ code = box .error .UNKNOWN ,
242
+ prev = {code = box .error .ILLEGAL_PARAMS }
243
+ }
244
+ t .assert_error_covers (expected , err .raise , err )
180
245
end
181
- -- good error coverage, error has unpack()
182
- t .assert_error_covers ({b = 2 }, error_with_unpack , 1 , 2 )
183
- -- bad error coverage
184
- assert_failure (t .assert_error_covers , {b = 2 },
185
- function (a , b ) error ({a = a , b = b }) end , 1 , 3 )
186
246
187
247
-- test assert failure due to unexpected error trace
188
248
t .private .check_trace_module = THIS_MODULE
0 commit comments