From 70d088c763138ee3199080387e5bbfe68feeeae9 Mon Sep 17 00:00:00 2001 From: Timur Kelman Date: Fri, 30 Jul 2021 23:21:35 +0200 Subject: [PATCH] add tests for dialog.lua --- test/library/gui/dialogs.lua | 172 +++++++++++++++++++++++++++++++++++ 1 file changed, 172 insertions(+) create mode 100644 test/library/gui/dialogs.lua diff --git a/test/library/gui/dialogs.lua b/test/library/gui/dialogs.lua new file mode 100644 index 000000000..47448da59 --- /dev/null +++ b/test/library/gui/dialogs.lua @@ -0,0 +1,172 @@ +config.mode = 'fortress' + +local gui = require('gui') +local function send_keys(...) + local keys = {...} + for _,key in ipairs(keys) do + gui.simulateInput(dfhack.gui.getCurViewscreen(true), key) + end +end + +local xtest = {} -- use to temporarily disable tests (change `function test.somename` to `function xtest.somename`) +local wait = function() + --delay(30) -- enable for debugging the tests +end + +local dialogs = require('gui.dialogs') + +function test.ListBox_opens_and_closes() + local before_scr = dfhack.gui.getCurViewscreen(true) + local choices = {{ + text = 'ListBox_opens_and_closes' + }} + local lb = dialogs.ListBox({choices = choices}) + expect.eq(before_scr, dfhack.gui.getCurViewscreen(true), "creating a ListBox object should not change CurViewscreen") + lb:show() + wait() + expect.ne(before_scr, dfhack.gui.getCurViewscreen(true), "ListBox:show should change CurViewscreen") + send_keys('LEAVESCREEN') + expect.eq(before_scr, dfhack.gui.getCurViewscreen(true), "Pressing LEAVESCREEN should return us to previous screen") +end + +function test.ListBox_closes_on_select() + local before_scr = dfhack.gui.getCurViewscreen(true) + + local args = {} + local mock_cb = mock.func() + local mock_cb2 = mock.func() + args.on_select = mock_cb + args.on_select2 = mock_cb2 + args.choices = {{ + text = 'ListBox_closes_on_select' + }} + + local lb = dialogs.ListBox(args) + lb:show() + wait() + send_keys('SELECT') + + expect.eq(1, mock_cb.call_count) + expect.eq(0, mock_cb2.call_count) + + expect.eq(before_scr, dfhack.gui.getCurViewscreen(true), "Selecting an item should return us to previous screen") +end + +function test.ListBox_closes_on_select2() + local before_scr = dfhack.gui.getCurViewscreen(true) + + local args = {} + local mock_cb = mock.func() + local mock_cb2 = mock.func() + args.on_select = mock_cb + args.on_select2 = mock_cb2 + args.choices = {{ + text = 'ListBox_closes_on_select2' + }} + + local lb = dialogs.ListBox(args) + lb:show() + wait() + send_keys('SEC_SELECT') + + expect.eq(0, mock_cb.call_count) + expect.eq(1, mock_cb2.call_count) + + expect.eq(before_scr, dfhack.gui.getCurViewscreen(true), "Selecting an item should return us to previous screen") +end + +function test.ListBox_stays_open_with_multi_select() + local before_scr = dfhack.gui.getCurViewscreen(true) + + local args = {} + local mock_cb = mock.func() + local mock_cb2 = mock.func() + args.on_select = mock_cb + args.on_select2 = mock_cb2 + args.dismiss_on_select = false + args.choices = {{ + text = 'ListBox_stays_open_with_multi_select' + }} + + local lb = dialogs.ListBox(args) + lb:show() + local lb_scr = dfhack.gui.getCurViewscreen(true) + wait() + send_keys('SELECT') + + expect.eq(lb_scr, dfhack.gui.getCurViewscreen(true), "Selecting an item should NOT close the ListBox") + + send_keys('SEC_SELECT') + expect.eq(before_scr, dfhack.gui.getCurViewscreen(true), "With default dismiss_on_select2 it should return us to previous screen") + + expect.eq(1, mock_cb.call_count) + expect.eq(1, mock_cb2.call_count) +end + +function test.ListBox_stays_open_with_multi_select2() + local before_scr = dfhack.gui.getCurViewscreen(true) + + local args = {} + local mock_cb = mock.func() + local mock_cb2 = mock.func() + args.on_select = mock_cb + args.on_select2 = mock_cb2 + args.dismiss_on_select2 = false + args.choices = {{ + text = 'ListBox_stays_open_with_multi_select2' + }} + + local lb = dialogs.ListBox(args) + lb:show() + local lb_scr = dfhack.gui.getCurViewscreen(true) + wait() + send_keys('SEC_SELECT') + + expect.eq(lb_scr, dfhack.gui.getCurViewscreen(true), "Sec-selecting an item should NOT close the ListBox") + + send_keys('SELECT') + expect.eq(before_scr, dfhack.gui.getCurViewscreen(true), "With default dismiss_on_select it should return us to previous screen") + + expect.eq(1, mock_cb.call_count) + expect.eq(1, mock_cb2.call_count) +end + +function test.ListBox_with_multi_select() + local before_scr = dfhack.gui.getCurViewscreen(true) + + local args = {} + local mock_cb = mock.func() + local mock_cb2 = mock.func() + args.on_select = mock_cb + args.on_select2 = mock_cb2 + args.dismiss_on_select = false + args.dismiss_on_select2 = false + args.choices = {{ + text = 'ListBox_with_multi_select' + },{ + text = 'item2' + },{ + text = 'item3' + } + } + + local lb = dialogs.ListBox(args) + lb:show() + local lb_scr = dfhack.gui.getCurViewscreen(true) + wait() + send_keys('SELECT') + send_keys('STANDARDSCROLL_DOWN') + wait() + send_keys('SEC_SELECT') + send_keys('STANDARDSCROLL_DOWN') + wait() + send_keys('SELECT') + + expect.eq(2, mock_cb.call_count) + expect.eq(1, mock_cb2.call_count) + + expect.eq(lb_scr, dfhack.gui.getCurViewscreen(true), "With both dismiss_on_select and dismiss_on_select2 false the ListBox should stay open") + + send_keys('LEAVESCREEN') + expect.eq(before_scr, dfhack.gui.getCurViewscreen(true), "Pressing LEAVESCREEN should still return us to previous screen") +end