From 0f0ae156c313d4fde6a72a142739e2713cd950e7 Mon Sep 17 00:00:00 2001 From: myk002 Date: Sun, 15 Aug 2021 08:31:42 -0700 Subject: [PATCH] test printall_recurse --- test/library/print.lua | 65 +++++++++++++++++++++++++++++++++++++++++- 1 file changed, 64 insertions(+), 1 deletion(-) diff --git a/test/library/print.lua b/test/library/print.lua index 73dacaecf..04a20f5b3 100644 --- a/test/library/print.lua +++ b/test/library/print.lua @@ -106,6 +106,69 @@ function test.printall_ipairs_userdata() end) end +local function validate_patterns(start_idx, patterns) + for i,pattern in ipairs(patterns) do + expect.true_(mock_print.call_args[start_idx+i-1][1]:find(pattern)) + end + return start_idx + #patterns +end + function test.printall_recurse() - -- TODO + local udatatable = new_int_vector() + dfhack.with_temp_object(udatatable, function() + local udataint = df.new('uint32_t') + dfhack.with_temp_object(udataint, function () + udatatable:insert(0, 10) + udatatable:insert(1, 20) + udatatable:insert(2, 20) + udatatable:insert(3, 20) + udatatable:insert(4, 0) + udatatable:insert(5, 0) + local t2 = {} + local t = {num=5, + bool=false, + fn=function() end, + udatatable=udatatable, + udataint=udataint, + table=t2} + t2.cyclic = t + printall_recurse(t) + expect.eq(49, mock_print.call_count) + expect.true_(mock_print.call_args[1][1]:find('^table: ')) + local idx = 2 + local EQ = '^%s+= $' + while idx <= 49 do + expect.eq('', mock_print.call_args[idx][1]) + idx = idx + 1 + local str = mock_print.call_args[idx][1] + if str:startswith('num') then + idx = validate_patterns(idx, {'^num$', EQ, '^5$'}) + elseif str:startswith('bool') then + idx = validate_patterns(idx, {'^bool$', EQ, '^false$'}) + elseif str:startswith('fn') then + idx = validate_patterns(idx, {'^fn$', EQ, '^function: '}) + elseif str:startswith('udatatable') then + idx = validate_patterns(idx, + {'^udatatable$', EQ, '^%[6%]: ', + '%s+', '^0$', EQ, '^10$', + '%s+', '^1$', EQ, '^20$', + 'Repeated 2 times', + '%s+', '^4$', EQ, '^0$', + 'Repeated 1 times'}) -- [sic] + elseif str:startswith('udataint') then + idx = validate_patterns(idx, + {'^udataint$', EQ, '^