gears.table.join: Ignore nil arguments (#2440)
When calling join with e.g. arguments (nil, {"a"}), then everything past the nil was ignored, because the code internally used ipairs() to iterate over the arguments and this stops at the first nil it encounters. Fix this by using select() to iterate over the arguments. This also adds a unit test for this problem. Signed-off-by: Uli Schlachter <psychon@znc.in>
This commit is contained in:
parent
aa16d77d15
commit
4744a744f0
|
@ -18,7 +18,8 @@ local gtable = {}
|
||||||
-- @return A new table containing all keys from the arguments.
|
-- @return A new table containing all keys from the arguments.
|
||||||
function gtable.join(...)
|
function gtable.join(...)
|
||||||
local ret = {}
|
local ret = {}
|
||||||
for _, t in ipairs({...}) do
|
for i = 1, select("#", ...) do
|
||||||
|
local t = select(i, ...)
|
||||||
if t then
|
if t then
|
||||||
for k, v in pairs(t) do
|
for k, v in pairs(t) do
|
||||||
if type(k) == "number" then
|
if type(k) == "number" then
|
||||||
|
|
|
@ -41,4 +41,11 @@ describe("gears.table", function()
|
||||||
assert.is.equal(f(), nil)
|
assert.is.equal(f(), nil)
|
||||||
end)
|
end)
|
||||||
end)
|
end)
|
||||||
|
|
||||||
|
describe("table.join", function()
|
||||||
|
it("nil argument", function()
|
||||||
|
local t = gtable.join({"a"}, nil, {"b"})
|
||||||
|
assert.is.same(t, {"a", "b"})
|
||||||
|
end)
|
||||||
|
end)
|
||||||
end)
|
end)
|
||||||
|
|
Loading…
Reference in New Issue