Skip to content

Commit

Permalink
Add unit tests for dropdown workaround
Browse files Browse the repository at this point in the history
  • Loading branch information
luk3yx committed Aug 12, 2024
1 parent d990864 commit ba9bda7
Showing 1 changed file with 31 additions and 7 deletions.
38 changes: 31 additions & 7 deletions test.lua
Original file line number Diff line number Diff line change
Expand Up @@ -53,8 +53,8 @@ local function stub_player(name)
return formspec
end
end
function minetest.get_player_by_name(name)
assert(name == "test_player")
function minetest.get_player_by_name(passed_in_name)
assert(name == passed_in_name)
return self
end
return self
Expand Down Expand Up @@ -94,6 +94,10 @@ function minetest.global_exists(var)
return rawget(_G, var) ~= nil
end

function minetest.get_player_information(name)
return name == "fs6" and {formspec_version = 6} or nil
end

-- Load flow
local f = assert(io.open("init.lua"))
local code = f:read("*a") .. "\nreturn naive_str_width"
Expand Down Expand Up @@ -134,14 +138,14 @@ local function test_render(build_func, output, description)
assert.same(expected_tree, tree, description)
end

local function render_to_string(tree)
local player = stub_player("test_player")
local function render_to_string(tree, pname)
local player = stub_player(pname or "test_player")
local form = flow.make_gui(function()
return table.copy(tree)
end)
local ctx = {}
local _, event = form:render_to_formspec_string(player, ctx)
return ctx, event
local fs, event = form:render_to_formspec_string(player, ctx)
return ctx, event, fs
end

describe("Flow", function()
Expand Down Expand Up @@ -587,9 +591,10 @@ describe("Flow", function()
describe("Dropdown", function()
describe("{index_event=false}", function()
it("passes correct input through", function()
local ctx, event = render_to_string(gui.Dropdown{
local ctx, event, fs = render_to_string(gui.Dropdown{
name = "a", items = {"hello", "world"},
})
assert(fs:find("dropdown%[[^%]]-;true%]") == nil)
assert.equals(ctx.form.a, "hello")
event({a = "world"})
assert.equals(ctx.form.a, "world")
Expand All @@ -603,6 +608,25 @@ describe("Flow", function()
event({a = "there"})
assert.equals(ctx.form.a, "hello")
end)

it("uses index_event internally on new clients", function()
local ctx, event, fs = render_to_string(gui.Dropdown{
name = "a", items = {"hello", "world"},
}, "fs6")
assert(fs:find("dropdown%[[^%]]-;true%]") ~= nil)
assert.equals(ctx.form.a, "hello")
event({a = 2})
assert.equals(ctx.form.a, "world")
end)

it("ignores malicious input on new clients", function()
local ctx, event = render_to_string(gui.Dropdown{
name = "a", items = {"hello", "world"},
}, "fs6")
assert.equals(ctx.form.a, "hello")
event({a = "world"})
assert.equals(ctx.form.a, "hello")
end)
end)

describe("{index_event=true}", function()
Expand Down

0 comments on commit ba9bda7

Please sign in to comment.