config = { mode = 'fortress', } local gui = require('gui') local guidm = require('gui.dwarfmode') function test.enterSidebarMode() expect.error_match('Invalid or unsupported sidebar mode', function() guidm.enterSidebarMode('badmode') end) expect.error_match('Invalid or unsupported sidebar mode', function() guidm.enterSidebarMode( df.ui_sidebar_mode.OrdersRefuse) end) expect.error_match('must be a positive number', function() guidm.enterSidebarMode(0, 'gg') end) expect.error_match('must be a positive number', function() guidm.enterSidebarMode(0, 0) end) expect.error_match('must be a positive number', function() guidm.enterSidebarMode(0, '0') end) expect.error_match('must be a positive number', function() guidm.enterSidebarMode(0, -1) end) expect.error_match('must be a positive number', function() guidm.enterSidebarMode(0, '-1') end) -- Simulate not being able to get to default from a screen via mocks. This -- failure can actually happen in-game in some situations, such as when -- naming a building with ctrl-N (no way to cancel changes). mock.patch({{dfhack.gui, 'getFocusString', mock.func()}, {gui, 'simulateInput', mock.func()}}, function() expect.error_match('Unable to get into target sidebar mode', function() guidm.enterSidebarMode(df.ui_sidebar_mode.Default) end) end) -- verify expected starting state expect.eq(df.ui_sidebar_mode.Default, df.global.ui.main.mode) expect.eq('dwarfmode/Default', dfhack.gui.getCurFocus(true)) -- get into the orders screen gui.simulateInput(dfhack.gui.getCurViewscreen(true), 'D_JOBLIST') gui.simulateInput(dfhack.gui.getCurViewscreen(true), 'UNITJOB_MANAGER') expect.eq(df.ui_sidebar_mode.Default, df.global.ui.main.mode) expect.eq('jobmanagement/Main', dfhack.gui.getCurFocus(true)) -- get back into default from some deep screen guidm.enterSidebarMode(df.ui_sidebar_mode.Default) expect.eq(df.ui_sidebar_mode.Default, df.global.ui.main.mode) expect.eq('dwarfmode/Default', dfhack.gui.getCurFocus(true)) -- move from default to some other mode guidm.enterSidebarMode(df.ui_sidebar_mode.QueryBuilding) expect.eq(df.ui_sidebar_mode.QueryBuilding, df.global.ui.main.mode) expect.str_find('^dwarfmode/QueryBuilding', dfhack.gui.getCurFocus(true)) -- move between non-default modes guidm.enterSidebarMode(df.ui_sidebar_mode.LookAround) expect.eq(df.ui_sidebar_mode.LookAround, df.global.ui.main.mode) expect.str_find('^dwarfmode/LookAround', dfhack.gui.getCurFocus(true)) -- get back into default from a supported mode guidm.enterSidebarMode(df.ui_sidebar_mode.Default) expect.eq(df.ui_sidebar_mode.Default, df.global.ui.main.mode) expect.eq('dwarfmode/Default', dfhack.gui.getCurFocus(true)) -- verify that all supported modes lead where we say they'll go for k,v in pairs(guidm.SIDEBAR_MODE_KEYS) do guidm.enterSidebarMode(k) expect.eq(k, df.global.ui.main.mode, df.ui_sidebar_mode[k]) end -- end test back in default so the test harness doesn't have to autocorrect guidm.enterSidebarMode(df.ui_sidebar_mode.Default) end