You cannot select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
koreader/spec/unit/readerfooter_spec.lua

870 lines
33 KiB
Lua

describe("Readerfooter module", function()
local DocumentRegistry, ReaderUI, ReaderFooter, DocSettings, UIManager
local purgeDir, Screen
local tapFooterMenu
local function is_am()
-- Technically only an issue for 1 digit results from %-H, e.g., anything below 10:00 AM
return tonumber(os.date("%H")) < 10
end
setup(function()
require("commonrequire")
package.unloadAll()
local Device = require("device")
-- Override powerd for running tests on devices with batteries.
Device.powerd.isChargingHW = function() return false end
Device.powerd.getCapacityHW = function() return 0 end
require("document/canvascontext"):init(Device)
DocumentRegistry = require("document/documentregistry")
DocSettings = require("docsettings")
ReaderUI = require("apps/reader/readerui")
ReaderFooter = require("apps/reader/modules/readerfooter")
UIManager = require("ui/uimanager")
purgeDir = require("ffi/util").purgeDir
Screen = require("device").screen
function tapFooterMenu(menu_items, menu_title)
local status_bar = menu_items.status_bar
if status_bar then
for _, subitem in ipairs(status_bar.sub_item_table) do
if subitem.text_func and subitem.text_func() == menu_title then
subitem.callback()
return
end
if subitem.text == menu_title then
subitem.callback()
return
end
if subitem.sub_item_table then
local status_bar_sub_item = subitem.sub_item_table
for _, sub_subitem in ipairs(status_bar_sub_item) do
if sub_subitem.text_func and sub_subitem.text_func() == menu_title then
sub_subitem.callback()
return
end
if sub_subitem.text == menu_title then
sub_subitem.callback()
return
end
end
end
end
error('Menu item not found: "' .. menu_title .. '"!')
end
error('Menu item not found: "Status bar"!')
end
--[[
function resetSettings()
local settings = G_reader_settings:readSetting("footer", {})
for k, v in pairs(ReaderFooter.default_settings) do
settings[k] = v
end
return settings
end
--]]
end)
teardown(function()
-- Clean up global settings we played with
G_reader_settings:delSetting("reader_footer_mode")
G_reader_settings:delSetting("footer")
G_reader_settings:flush()
end)
before_each(function()
local settings = G_reader_settings:readSetting("footer", ReaderFooter.default_settings)
-- NOTE: This is screwing with a few of the later tests,
-- where we basically do a weird dance of "reset to defaults" -> "disable all this"
settings.disabled = false
settings.all_at_once = true
settings.toc_markers = true
settings.battery = true
settings.time = true
settings.page_progress = true
settings.pages_left = true
settings.percentage = true
settings.book_time_to_read = true
settings.chapter_time_to_read = true
G_reader_settings:saveSetting("footer", settings)
-- NOTE: Forcefully disable the statistics plugin, as lj-sqlite3 is horribly broken under Busted,
-- causing it to erratically fail to load, affecting the results of this test...
G_reader_settings:saveSetting("plugins_disabled", {
statistics = true,
})
UIManager:run()
end)
it("should setup footer as visible in all_at_once mode", function()
G_reader_settings:saveSetting("reader_footer_mode", 1)
local sample_pdf = "spec/front/unit/data/2col.pdf"
purgeDir(DocSettings:getSidecarDir(sample_pdf))
os.remove(DocSettings:getHistoryPath(sample_pdf))
local readerui = ReaderUI:new{
dimen = Screen:getSize(),
document = DocumentRegistry:openDocument(sample_pdf),
}
assert.is.same(true, readerui.view.footer_visible)
G_reader_settings:delSetting("reader_footer_mode")
readerui:closeDocument()
readerui:onClose()
end)
it("should setup footer as visible not in all_at_once", function()
local settings = G_reader_settings:readSetting("footer")
settings.disabled = false
settings.all_at_once = false
settings.toc_markers = true
settings.battery = true
settings.time = true
settings.page_progress = true
settings.pages_left = true
settings.percentage = true
settings.book_time_to_read = true
settings.chapter_time_to_read = true
G_reader_settings:saveSetting("footer", settings)
G_reader_settings:saveSetting("reader_footer_mode", 1)
local sample_pdf = "spec/front/unit/data/2col.pdf"
purgeDir(DocSettings:getSidecarDir(sample_pdf))
os.remove(DocSettings:getHistoryPath(sample_pdf))
local readerui = ReaderUI:new{
dimen = Screen:getSize(),
document = DocumentRegistry:openDocument(sample_pdf),
}
assert.is.same(true, readerui.view.footer_visible)
assert.is.same(1, readerui.view.footer.mode, 1)
G_reader_settings:delSetting("reader_footer_mode")
readerui:closeDocument()
readerui:onClose()
end)
it("should setup footer as invisible in full screen mode", function()
G_reader_settings:saveSetting("reader_footer_mode", 1)
local sample_pdf = "spec/front/unit/data/2col.pdf"
purgeDir(DocSettings:getSidecarDir(sample_pdf))
os.remove(DocSettings:getHistoryPath(sample_pdf))
local cfg = DocSettings:open(sample_pdf)
cfg:saveSetting("kopt_full_screen", 0)
cfg:flush()
local readerui = ReaderUI:new{
dimen = Screen:getSize(),
document = DocumentRegistry:openDocument(sample_pdf),
}
assert.is.same(false, readerui.view.footer_visible)
G_reader_settings:delSetting("reader_footer_mode")
readerui:closeDocument()
readerui:onClose()
end)
it("should setup footer as visible in mini progress bar mode", function()
G_reader_settings:saveSetting("reader_footer_mode", 1)
local sample_pdf = "spec/front/unit/data/2col.pdf"
purgeDir(DocSettings:getSidecarDir(sample_pdf))
os.remove(DocSettings:getHistoryPath(sample_pdf))
local cfg = DocSettings:open(sample_pdf)
cfg:saveSetting("kopt_full_screen", 0)
cfg:flush()
local readerui = ReaderUI:new{
dimen = Screen:getSize(),
document = DocumentRegistry:openDocument(sample_pdf),
}
assert.is.same(false, readerui.view.footer_visible)
G_reader_settings:delSetting("reader_footer_mode")
readerui:closeDocument()
readerui:onClose()
end)
it("should setup footer as invisible", function()
G_reader_settings:saveSetting("reader_footer_mode", 1)
local sample_epub = "spec/front/unit/data/juliet.epub"
purgeDir(DocSettings:getSidecarDir(sample_epub))
os.remove(DocSettings:getHistoryPath(sample_epub))
local cfg = DocSettings:open(sample_epub)
cfg:saveSetting("copt_status_line", 1)
cfg:flush()
local readerui = ReaderUI:new{
dimen = Screen:getSize(),
document = DocumentRegistry:openDocument(sample_epub),
}
assert.is.same(true, readerui.view.footer_visible)
G_reader_settings:delSetting("reader_footer_mode")
readerui:closeDocument()
readerui:onClose()
end)
it("should setup footer for epub without error", function()
local sample_epub = "spec/front/unit/data/juliet.epub"
purgeDir(DocSettings:getSidecarDir(sample_epub))
os.remove(DocSettings:getHistoryPath(sample_epub))
local readerui = ReaderUI:new{
dimen = Screen:getSize(),
document = DocumentRegistry:openDocument(sample_epub),
}
local footer = readerui.view.footer
footer:onPageUpdate(1)
footer:onUpdateFooter()
local timeinfo = footer.textGeneratorMap.time(footer)
local page_count = readerui.document:getPageCount()
-- c.f., NOTE above, Statistics are disabled, hence the N/A results
assert.are.same('1 / '..page_count..' | '..timeinfo..' | ⇒ 0 | 0% | ⤠ 0% | ⏳ N/A | ⤻ N/A',
footer.footer_text.text)
readerui:closeDocument()
readerui:onClose()
end)
it("should setup footer for pdf without error", function()
local sample_pdf = "spec/front/unit/data/2col.pdf"
purgeDir(DocSettings:getSidecarDir(sample_pdf))
os.remove(DocSettings:getHistoryPath(sample_pdf))
local readerui = ReaderUI:new{
dimen = Screen:getSize(),
document = DocumentRegistry:openDocument(sample_pdf),
}
local footer = readerui.view.footer
readerui.view.footer:onUpdateFooter()
local timeinfo = readerui.view.footer.textGeneratorMap.time(footer)
assert.are.same('1 / 2 | '..timeinfo..' | ⇒ 1 | 0% | ⤠ 50% | ⏳ N/A | ⤻ N/A',
readerui.view.footer.footer_text.text)
readerui:closeDocument()
readerui:onClose()
end)
it("should switch between different modes", function()
local sample_pdf = "spec/front/unit/data/2col.pdf"
purgeDir(DocSettings:getSidecarDir(sample_pdf))
os.remove(DocSettings:getHistoryPath(sample_pdf))
local readerui = ReaderUI:new{
dimen = Screen:getSize(),
document = DocumentRegistry:openDocument(sample_pdf),
}
local fake_menu = {setting = {}}
local footer = readerui.view.footer
footer:addToMainMenu(fake_menu)
footer:resetLayout()
footer:onUpdateFooter()
local timeinfo = footer.textGeneratorMap.time(footer)
assert.are.same('1 / 2 | '..timeinfo..' | ⇒ 1 | 0% | ⤠ 50% | ⏳ N/A | ⤻ N/A',
footer.footer_text.text)
-- disable show all at once, page progress should be on the first
tapFooterMenu(fake_menu, "Show all at once")
assert.are.same('1 / 2', footer.footer_text.text)
-- disable page progress, time should follow
tapFooterMenu(fake_menu, "Current page".." (/)")
assert.are.same(timeinfo, footer.footer_text.text)
-- disable time, page left should follow
tapFooterMenu(fake_menu, "Current time".." (⌚)")
assert.are.same('⇒ 1', footer.footer_text.text)
-- disable page left, battery should follow
tapFooterMenu(fake_menu, "Pages left in chapter".." (⇒)")
assert.are.same('0%', footer.footer_text.text)
-- disable battery, percentage should follow
tapFooterMenu(fake_menu, "Battery status".." ()")
assert.are.same('⤠ 50%', footer.footer_text.text)
-- disable percentage, book time to read should follow
tapFooterMenu(fake_menu, "Progress percentage".." (⤠)")
assert.are.same('⏳ N/A', footer.footer_text.text)
-- disable book time to read, chapter time to read should follow
tapFooterMenu(fake_menu, "Book time to read".." (⏳)")
assert.are.same('⤻ N/A', footer.footer_text.text)
-- disable chapter time to read, text should be empty
tapFooterMenu(fake_menu, "Chapter time to read".." (⤻)")
assert.are.same('', footer.footer_text.text)
-- reenable chapter time to read, text should be chapter time to read
tapFooterMenu(fake_menu, "Chapter time to read".." (⤻)")
assert.are.same('⤻ N/A', footer.footer_text.text)
readerui:closeDocument()
readerui:onClose()
end)
it("should rotate through different modes", function()
local sample_pdf = "spec/front/unit/data/2col.pdf"
local readerui = ReaderUI:new{
dimen = Screen:getSize(),
document = DocumentRegistry:openDocument(sample_pdf),
}
local footer = readerui.view.footer
footer.settings.all_at_once = false
footer.mode = 0
footer:onTapFooter()
assert.is.same(1, footer.mode)
footer:onTapFooter()
-- 2 is pages_left_book, an alternate variant of page_progress, disabled by default (#7047)
assert.is.same(3, footer.mode)
footer:onTapFooter()
assert.is.same(4, footer.mode)
footer:onTapFooter()
assert.is.same(5, footer.mode)
footer:onTapFooter()
assert.is.same(6, footer.mode)
footer:onTapFooter()
assert.is.same(7, footer.mode)
footer:onTapFooter()
assert.is.same(8, footer.mode)
footer:onTapFooter()
assert.is.same(0, footer.mode)
footer.settings.all_at_once = true
footer.mode = 5
footer:onTapFooter()
assert.is.same(0, footer.mode)
footer:onTapFooter()
assert.is.same(1, footer.mode)
footer:onTapFooter()
assert.is.same(0, footer.mode)
-- Make it visible again to make the following tests behave...
footer:onTapFooter()
assert.is.same(1, footer.mode)
readerui:closeDocument()
readerui:onClose()
end)
it("should pick up screen resize in resetLayout", function()
local sample_pdf = "spec/front/unit/data/2col.pdf"
purgeDir(DocSettings:getSidecarDir(sample_pdf))
os.remove(DocSettings:getHistoryPath(sample_pdf))
local readerui = ReaderUI:new{
dimen = Screen:getSize(),
document = DocumentRegistry:openDocument(sample_pdf),
}
local footer = readerui.view.footer
local horizontal_margin = Screen:scaleBySize(10)*2
footer:onUpdateFooter()
-- Account for trimming of the leading 0 in the AM
local expected = is_am() and 362 or 370
assert.is.same(expected, footer.text_width)
assert.is.same(600, footer.progress_bar.width
+ footer.text_width
+ horizontal_margin)
expected = is_am() and 218 or 210
assert.is.same(expected, footer.progress_bar.width)
local old_screen_getwidth = Screen.getWidth
Screen.getWidth = function() return 900 end
footer:resetLayout()
expected = is_am() and 362 or 370
assert.is.same(expected, footer.text_width)
assert.is.same(900, footer.progress_bar.width
+ footer.text_width
+ horizontal_margin)
expected = is_am() and 518 or 510
assert.is.same(expected, footer.progress_bar.width)
Screen.getWidth = old_screen_getwidth
readerui:closeDocument()
readerui:onClose()
end)
it("should update width on PosUpdate event", function()
local sample_epub = "spec/front/unit/data/juliet.epub"
purgeDir(DocSettings:getSidecarDir(sample_epub))
os.remove(DocSettings:getHistoryPath(sample_epub))
local readerui = ReaderUI:new{
dimen = Screen:getSize(),
document = DocumentRegistry:openDocument(sample_epub),
}
local footer = readerui.view.footer
footer:onPageUpdate(1)
local expected = is_am() and 210 or 202
assert.are.same(expected, footer.progress_bar.width)
expected = is_am() and 370 or 378
assert.are.same(expected, footer.text_width)
footer:onPageUpdate(100)
expected = is_am() and 186 or 178
assert.are.same(expected, footer.progress_bar.width)
expected = is_am() and 394 or 402
assert.are.same(expected, footer.text_width)
readerui:closeDocument()
readerui:onClose()
end)
it("should support chapter markers", function()
local sample_epub = "spec/front/unit/data/juliet.epub"
purgeDir(DocSettings:getSidecarDir(sample_epub))
os.remove(DocSettings:getHistoryPath(sample_epub))
local settings = G_reader_settings:readSetting("footer")
settings.toc_markers = true
G_reader_settings:saveSetting("footer", settings)
local readerui = ReaderUI:new{
dimen = Screen:getSize(),
document = DocumentRegistry:openDocument(sample_epub),
}
local footer = readerui.view.footer
footer:onPageUpdate(1)
local page_count = readerui.document:getPageCount()
assert.are.same(28, #footer.progress_bar.ticks)
assert.are.same(page_count, footer.progress_bar.last)
-- test toggle TOC markers
footer.settings.toc_markers = false
footer:setTocMarkers()
assert.are.same(nil, footer.progress_bar.ticks)
readerui:closeDocument()
readerui:onClose()
end)
it("should schedule/unschedule auto refresh time task", function()
local sample_epub = "spec/front/unit/data/juliet.epub"
purgeDir(DocSettings:getSidecarDir(sample_epub))
os.remove(DocSettings:getHistoryPath(sample_epub))
UIManager:quit()
assert.are.same({}, UIManager._task_queue)
local settings = G_reader_settings:readSetting("footer")
settings.auto_refresh_time = true
settings.all_at_once = true
settings.time = true
G_reader_settings:saveSetting("footer", settings)
local readerui = ReaderUI:new{
dimen = Screen:getSize(),
document = DocumentRegistry:openDocument(sample_epub),
}
local footer = readerui.view.footer
local found = 0
for _,task in ipairs(UIManager._task_queue) do
if task.action == footer.autoRefreshFooter then
found = found + 1
end
end
assert.is.same(1, found)
footer:onCloseDocument()
found = 0
for _,task in ipairs(UIManager._task_queue) do
if task.action == footer.autoRefreshFooter then
found = found + 1
end
end
assert.is.same(0, found)
readerui:closeDocument()
readerui:onClose()
end)
it("should not schedule auto refresh time task if footer is disabled", function()
local sample_epub = "spec/front/unit/data/juliet.epub"
purgeDir(DocSettings:getSidecarDir(sample_epub))
os.remove(DocSettings:getHistoryPath(sample_epub))
UIManager:quit()
assert.are.same({}, UIManager._task_queue)
local settings = G_reader_settings:readSetting("footer")
settings.disabled = true
settings.auto_refresh_time = true
settings.all_at_once = true
settings.time = true
G_reader_settings:saveSetting("footer", settings)
local readerui = ReaderUI:new{
dimen = Screen:getSize(),
document = DocumentRegistry:openDocument(sample_epub),
}
local footer = readerui.view.footer
local found = 0
for _,task in ipairs(UIManager._task_queue) do
if task.action == footer.autoRefreshFooter then
found = found + 1
end
end
assert.is.same(0, found)
readerui:closeDocument()
readerui:onClose()
end)
it("should toggle auto refresh time task by toggling the menu", function()
local sample_pdf = "spec/front/unit/data/2col.pdf"
purgeDir(DocSettings:getSidecarDir(sample_pdf))
os.remove(DocSettings:getHistoryPath(sample_pdf))
UIManager:quit()
assert.are.same({}, UIManager._task_queue)
local settings = G_reader_settings:readSetting("footer")
settings.disabled = false
settings.auto_refresh_time = true
settings.all_at_once = true
settings.time = true
G_reader_settings:saveSetting("footer", settings)
local readerui = ReaderUI:new{
dimen = Screen:getSize(),
document = DocumentRegistry:openDocument(sample_pdf),
}
local footer = readerui.view.footer
local fake_menu = {setting = {}}
footer:addToMainMenu(fake_menu)
local found = 0
for _,task in ipairs(UIManager._task_queue) do
if task.action == footer.autoRefreshFooter then
found = found + 1
end
end
assert.is.same(1, found)
-- disable auto refresh time
tapFooterMenu(fake_menu, "Auto refresh")
found = 0
for _,task in ipairs(UIManager._task_queue) do
if task.action == footer.autoRefreshFooter then
found = found + 1
end
end
assert.is.same(0, found)
-- enable auto refresh time again
tapFooterMenu(fake_menu, "Auto refresh")
found = 0
for _,task in ipairs(UIManager._task_queue) do
if task.action == footer.autoRefreshFooter then
found = found + 1
end
end
assert.is.same(1, found)
readerui:closeDocument()
readerui:onClose()
end)
it("should support toggle footer through menu if tap zone is disabled", function()
local saved_tap_zone_minibar = DTAP_ZONE_MINIBAR
DTAP_ZONE_MINIBAR.w = 0 --luacheck: ignore
DTAP_ZONE_MINIBAR.h = 0 --luacheck: ignore
local sample_pdf = "spec/front/unit/data/2col.pdf"
purgeDir(DocSettings:getSidecarDir(sample_pdf))
os.remove(DocSettings:getHistoryPath(sample_pdf))
UIManager:quit()
assert.are.same({}, UIManager._task_queue)
G_reader_settings:saveSetting("reader_footer_mode", 1)
local settings = G_reader_settings:readSetting("footer")
settings.disabled = false
settings.all_at_once = false
settings.page_progress = true
settings.time = true
G_reader_settings:saveSetting("footer", settings)
local readerui = ReaderUI:new{
dimen = Screen:getSize(),
document = DocumentRegistry:openDocument(sample_pdf),
}
local footer = readerui.view.footer
local fake_menu = {setting = {}}
footer:addToMainMenu(fake_menu)
local has_toggle_menu = false
if fake_menu.status_bar then
for _, subitem in ipairs(fake_menu.status_bar.sub_item_table) do
if subitem.text == 'Toggle mode' then
has_toggle_menu = true
break
end
end
end
assert.is.truthy(has_toggle_menu)
assert.is.same(1, footer.mode)
tapFooterMenu(fake_menu, "Toggle mode")
assert.is.same(3, footer.mode)
DTAP_ZONE_MINIBAR = saved_tap_zone_minibar --luacheck: ignore
readerui:closeDocument()
readerui:onClose()
end)
it("should remove and add modes to footer text in all_at_once mode", function()
local sample_pdf = "spec/front/unit/data/2col.pdf"
purgeDir(DocSettings:getSidecarDir(sample_pdf))
os.remove(DocSettings:getHistoryPath(sample_pdf))
UIManager:quit()
assert.are.same({}, UIManager._task_queue)
local settings = G_reader_settings:readSetting("footer")
settings.all_at_once = true
settings.page_progress = true
settings.pages_left = true
settings.battery = false
settings.time = false
settings.percentage = false
settings.book_time_to_read = false
settings.chapter_time_to_read = false
G_reader_settings:saveSetting("footer", settings)
local readerui = ReaderUI:new{
dimen = Screen:getSize(),
document = DocumentRegistry:openDocument(sample_pdf),
}
local footer = readerui.view.footer
local fake_menu = {setting = {}}
footer:addToMainMenu(fake_menu)
assert.are.same('1 / 2 | ⇒ 1', footer.footer_text.text)
-- remove mode from footer text
tapFooterMenu(fake_menu, "Pages left in chapter".." (⇒)")
assert.are.same('1 / 2', footer.footer_text.text)
-- add mode to footer text
tapFooterMenu(fake_menu, "Progress percentage".." (⤠)")
assert.are.same('1 / 2 | ⤠ 50%', footer.footer_text.text)
readerui:closeDocument()
readerui:onClose()
end)
it("should initialize text mode in all_at_once mode", function()
local sample_pdf = "spec/front/unit/data/2col.pdf"
purgeDir(DocSettings:getSidecarDir(sample_pdf))
os.remove(DocSettings:getHistoryPath(sample_pdf))
UIManager:quit()
assert.are.same({}, UIManager._task_queue)
G_reader_settings:saveSetting("reader_footer_mode", 0)
local settings = G_reader_settings:readSetting("footer")
settings.all_at_once = true
settings.page_progress = true
settings.pages_left = true
G_reader_settings:saveSetting("footer", settings)
local readerui = ReaderUI:new{
dimen = Screen:getSize(),
document = DocumentRegistry:openDocument(sample_pdf)
}
local footer = readerui.view.footer
assert.is.truthy(footer.settings.all_at_once)
assert.is.truthy(0, footer.mode)
assert.is.falsy(readerui.view.footer_visible)
readerui:closeDocument()
readerui:onClose()
end)
it("should support disabling all the modes", function()
local sample_epub = "spec/front/unit/data/juliet.epub"
purgeDir(DocSettings:getSidecarDir(sample_epub))
os.remove(DocSettings:getHistoryPath(sample_epub))
UIManager:quit()
assert.are.same({}, UIManager._task_queue)
G_reader_settings:saveSetting("footer", ReaderFooter.default_settings)
local settings = G_reader_settings:readSetting("footer")
settings.all_at_once = false
settings.battery = false
settings.time = false
settings.page_progress = false
settings.pages_left = false
settings.percentage = false
settings.book_time_to_read = false
settings.chapter_time_to_read = false
G_reader_settings:saveSetting("footer", settings)
local readerui = ReaderUI:new{
dimen = Screen:getSize(),
document = DocumentRegistry:openDocument(sample_epub),
}
local footer = readerui.view.footer
local fake_menu = {setting = {}}
footer:addToMainMenu(fake_menu)
assert.is.same(true, footer.has_no_mode)
assert.is.same(0, footer.text_width)
tapFooterMenu(fake_menu, "Progress percentage".." (⤠)")
assert.are.same('⤠ 0%', footer.footer_text.text)
assert.is.same(false, footer.has_no_mode)
assert.is.same(footer.footer_text:getSize().w + footer.horizontal_margin,
footer.text_width)
tapFooterMenu(fake_menu, "Progress percentage".." (⤠)")
assert.is.same(true, footer.has_no_mode)
-- test in all at once mode
tapFooterMenu(fake_menu, "Progress percentage".." (⤠)")
tapFooterMenu(fake_menu, "Show all at once")
assert.is.same(false, footer.has_no_mode)
tapFooterMenu(fake_menu, "Progress percentage".." (⤠)")
assert.is.same(true, footer.has_no_mode)
tapFooterMenu(fake_menu, "Progress percentage".." (⤠)")
assert.is.same(false, footer.has_no_mode)
readerui:closeDocument()
readerui:onClose()
end)
it("should return correct footer height in time mode", function()
local sample_epub = "spec/front/unit/data/juliet.epub"
purgeDir(DocSettings:getSidecarDir(sample_epub))
os.remove(DocSettings:getHistoryPath(sample_epub))
UIManager:quit()
G_reader_settings:saveSetting("reader_footer_mode", 2)
local settings = G_reader_settings:readSetting("footer")
settings.time = true
G_reader_settings:saveSetting("footer", settings)
local readerui = ReaderUI:new{
dimen = Screen:getSize(),
document = DocumentRegistry:openDocument(sample_epub),
}
local footer = readerui.view.footer
assert.falsy(footer.has_no_mode)
assert.truthy(readerui.view.footer_visible)
assert.is.same(15, footer:getHeight())
readerui:closeDocument()
readerui:onClose()
end)
it("should return correct footer height when all modes are disabled", function()
local sample_epub = "spec/front/unit/data/juliet.epub"
purgeDir(DocSettings:getSidecarDir(sample_epub))
os.remove(DocSettings:getHistoryPath(sample_epub))
UIManager:quit()
G_reader_settings:saveSetting("reader_footer_mode", 1)
G_reader_settings:saveSetting("footer", ReaderFooter.default_settings)
local settings = G_reader_settings:readSetting("footer")
settings.all_at_once = false
settings.battery = false
settings.time = false
settings.page_progress = false
settings.pages_left = false
settings.percentage = false
settings.book_time_to_read = false
settings.chapter_time_to_read = false
G_reader_settings:saveSetting("footer", settings)
local readerui = ReaderUI:new{
dimen = Screen:getSize(),
document = DocumentRegistry:openDocument(sample_epub),
}
local footer = readerui.view.footer
assert.truthy(footer.has_no_mode)
assert.truthy(readerui.view.footer_visible)
assert.is.same(15, footer:getHeight())
readerui:closeDocument()
readerui:onClose()
end)
it("should disable footer when all modes + progressbar are disabled", function()
local sample_epub = "spec/front/unit/data/juliet.epub"
purgeDir(DocSettings:getSidecarDir(sample_epub))
os.remove(DocSettings:getHistoryPath(sample_epub))
UIManager:quit()
G_reader_settings:saveSetting("reader_footer_mode", 1)
G_reader_settings:saveSetting("footer", ReaderFooter.default_settings)
local settings = G_reader_settings:readSetting("footer")
settings.all_at_once = false
settings.battery = false
settings.time = false
settings.page_progress = false
settings.pages_left = false
settings.percentage = false
settings.book_time_to_read = false
settings.chapter_time_to_read = false
settings.disable_progress_bar = true
G_reader_settings:saveSetting("footer", settings)
local readerui = ReaderUI:new{
dimen = Screen:getSize(),
document = DocumentRegistry:openDocument(sample_epub),
}
local footer = readerui.view.footer
assert.truthy(footer.has_no_mode)
assert.falsy(readerui.view.footer_visible)
readerui:closeDocument()
readerui:onClose()
end)
it("should disable footer if settings.disabled is true", function()
local sample_epub = "spec/front/unit/data/juliet.epub"
purgeDir(DocSettings:getSidecarDir(sample_epub))
os.remove(DocSettings:getHistoryPath(sample_epub))
UIManager:quit()
local settings = G_reader_settings:readSetting("footer")
settings.disabled = true
G_reader_settings:saveSetting("footer", settings)
local readerui = ReaderUI:new{
dimen = Screen:getSize(),
document = DocumentRegistry:openDocument(sample_epub),
}
local footer = readerui.view.footer
assert.falsy(readerui.view.footer_visible)
assert.truthy(footer.mode == 0)
local found = 0
for _,task in ipairs(UIManager._task_queue) do
if task.action == footer.autoRefreshFooter then
found = found + 1
end
end
assert.is.same(0, found)
readerui:closeDocument()
readerui:onClose()
end)
--[[ This toggling behaviour has been removed:
it("should toggle between full and min progress bar for cre documents", function()
local sample_txt = "spec/front/unit/data/sample.txt"
local readerui = ReaderUI:new{
dimen = Screen:getSize(),
document = DocumentRegistry:openDocument(sample_txt),
}
local footer = readerui.view.footer
footer:applyFooterMode(0)
assert.is.same(0, footer.mode)
assert.falsy(readerui.view.footer_visible)
readerui.rolling:onSetStatusLine(1)
assert.is.same(1, footer.mode)
assert.truthy(readerui.view.footer_visible)
footer.mode = 1
readerui.rolling:onSetStatusLine(1)
assert.is.same(1, footer.mode)
assert.truthy(readerui.view.footer_visible)
readerui.rolling:onSetStatusLine(0)
assert.is.same(0, footer.mode)
assert.falsy(readerui.view.footer_visible)
readerui:closeDocument()
readerui:onClose()
end)
]]--
end)