diff --git a/CHANGELOG.md b/CHANGELOG.md index 849d271..ee9919e 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,5 +1,10 @@ # Changelog +## Unreleased + +- Fixed a bug when `assert_covers` didn't check array items for coverage and + instead treated arrays as scalars (gh-439). + ## 1.3.0 - Fixed a bug when `assert_covers` treats arrays as maps (gh-405). diff --git a/luatest/assertions.lua b/luatest/assertions.lua index bc0498d..ffb79db 100644 --- a/luatest/assertions.lua +++ b/luatest/assertions.lua @@ -443,12 +443,12 @@ local function table_slice(actual, expected) if type(expected) ~= 'table' or type(actual) ~= 'table' then return actual end - + local sliced if utils.table_is_array(actual) or utils.table_is_array(expected) then - return actual + sliced = table.copy(actual) + else + sliced = {} end - - local sliced = {} for k, _ in pairs(expected) do sliced[k] = table_slice(actual[k], expected[k]) end diff --git a/test/luatest_test.lua b/test/luatest_test.lua index df53988..a5a24fc 100644 --- a/test/luatest_test.lua +++ b/test/luatest_test.lua @@ -113,6 +113,8 @@ g.test_assert_covers = function() subject({a = box.NULL}, {a = box.NULL}) subject({a = box.tuple.new({1})}, {a = box.tuple.new({1})}) subject({1, 2}, {1, 2}) + subject({{a = 1, b = 10}, {a = 2, b = 20}, {a = 3, b = 30}}, {{a = 1}, {a = 2}, {a = 3}}) + subject({x = {{a = 1, b = 10}, {a = 2, b = 20}}, y = {}}, {x = {{a = 1}, {a = 2}}}) subject({[0] = 'zero', [1] = 'one'}, {[0] = 'zero'}) helper.assert_failure(subject, {a = 1, b = 2, c = 3}, {a = 2}) @@ -123,6 +125,9 @@ g.test_assert_covers = function() helper.assert_failure(subject, {a = {b = 1, c = 2}}, {a = {b = 1, c = 2, d = 3}}) helper.assert_failure(subject, {1, 2}, {}) helper.assert_failure(subject, {1, 2, 3}, {1, 2}) + helper.assert_failure(subject, {{a = 1, b = 10}, {a = 2, b = 20}}, {{a = 1}}) + helper.assert_failure(subject, {{a = 1, b = 10}, {a = 2, b = 20}}, {{a = 1}, {a = 2}, {a = 3}}) + helper.assert_failure(subject, {1, 2}, {nil, 2}) helper.assert_failure(subject, {1, 2, foo = 'bar'}, {1, 2}) helper.assert_failure(subject, {a = {1, 2, 3}}, {a = {1, 2}}) helper.assert_failure(subject, {a = {1, 2}}, {a = {}})