mirror of
https://github.com/koreader/koreader
synced 2024-11-16 06:12:56 +00:00
5541d5f5d3
Includes: - New option to tune word spacing: space width scale percent - Text: look for hyphenation in more words if needed - CSS: fix "hyphens:none" should override inherited "hyphens:auto" - getHtml(): grab dir= and lang= attributes from upper nodes Replace our Word Gap/Space condensing toggle/setting with a new Word Spacing toggle/setting, made of 2 values: - 1st number scales the normal width of spaces in all font (100% uses the font space width untouched) - 2nd number applies after the 1st has been applied, and tells how much these spaces can additionally be condensed to make more text fit on a line.
681 lines
26 KiB
Lua
681 lines
26 KiB
Lua
describe("Readerfooter module", function()
|
|
local DocumentRegistry, ReaderUI, DocSettings, UIManager
|
|
local purgeDir, Screen
|
|
local tapFooterMenu
|
|
|
|
setup(function()
|
|
require("commonrequire")
|
|
package.unloadAll()
|
|
require("document/canvascontext"):init(require("device"))
|
|
DocumentRegistry = require("document/documentregistry")
|
|
DocSettings = require("docsettings")
|
|
ReaderUI = require("apps/reader/readerui")
|
|
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
|
|
end)
|
|
|
|
before_each(function()
|
|
G_reader_settings:saveSetting("footer", {
|
|
disabled = false,
|
|
all_at_once = true,
|
|
toc_markers = true,
|
|
battery = true,
|
|
time = true,
|
|
page_progress = true,
|
|
pages_left = true,
|
|
percentage = true,
|
|
book_time_to_read = true,
|
|
chapter_time_to_read = 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{
|
|
document = DocumentRegistry:openDocument(sample_pdf),
|
|
}
|
|
assert.is.same(true, readerui.view.footer_visible)
|
|
G_reader_settings:delSetting("reader_footer_mode")
|
|
end)
|
|
|
|
it("should setup footer as visible not in all_at_once", function()
|
|
G_reader_settings:saveSetting("footer", {
|
|
disabled = false,
|
|
all_at_once = false,
|
|
toc_markers = true,
|
|
battery = true,
|
|
time = true,
|
|
page_progress = true,
|
|
pages_left = true,
|
|
percentage = true,
|
|
book_time_to_read = true,
|
|
chapter_time_to_read = true,
|
|
})
|
|
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{
|
|
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")
|
|
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{
|
|
document = DocumentRegistry:openDocument(sample_pdf),
|
|
}
|
|
assert.is.same(false, readerui.view.footer_visible)
|
|
G_reader_settings:delSetting("reader_footer_mode")
|
|
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{
|
|
document = DocumentRegistry:openDocument(sample_pdf),
|
|
}
|
|
assert.is.same(false, readerui.view.footer_visible)
|
|
G_reader_settings:delSetting("reader_footer_mode")
|
|
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{
|
|
document = DocumentRegistry:openDocument(sample_epub),
|
|
}
|
|
assert.is.same(true, readerui.view.footer_visible)
|
|
G_reader_settings:delSetting("reader_footer_mode")
|
|
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{
|
|
document = DocumentRegistry:openDocument(sample_epub),
|
|
}
|
|
local footer = readerui.view.footer
|
|
footer:onPageUpdate(1)
|
|
footer:updateFooter()
|
|
local timeinfo = footer.textGeneratorMap.time(footer)
|
|
local page_count = readerui.document:getPageCount()
|
|
-- stats has not been initialized here, so we get na TB and TC
|
|
assert.are.same('1 / '..page_count..' | '..timeinfo..' | ⇒ 0 | 0% | ⤠ 0% | ⏳ na | ⤻ na',
|
|
footer.footer_text.text)
|
|
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{
|
|
document = DocumentRegistry:openDocument(sample_pdf),
|
|
}
|
|
local footer = readerui.view.footer
|
|
readerui.view.footer:updateFooter()
|
|
local timeinfo = readerui.view.footer.textGeneratorMap.time(footer)
|
|
assert.are.same('1 / 2 | '..timeinfo..' | ⇒ 1 | 0% | ⤠ 50% | ⏳ na | ⤻ na',
|
|
readerui.view.footer.footer_text.text)
|
|
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{
|
|
document = DocumentRegistry:openDocument(sample_pdf),
|
|
}
|
|
local fake_menu = {setting = {}}
|
|
local footer = readerui.view.footer
|
|
footer:addToMainMenu(fake_menu)
|
|
footer:resetLayout()
|
|
footer:updateFooter()
|
|
local timeinfo = footer.textGeneratorMap.time(footer)
|
|
assert.are.same('1 / 2 | '..timeinfo..' | ⇒ 1 | 0% | ⤠ 50% | ⏳ na | ⤻ na',
|
|
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('⏳ na', 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('⤻ na', 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('⤻ na', footer.footer_text.text)
|
|
end)
|
|
|
|
it("should rotate through different modes", function()
|
|
local sample_pdf = "spec/front/unit/data/2col.pdf"
|
|
local readerui = ReaderUI:new{
|
|
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()
|
|
assert.is.same(2, footer.mode)
|
|
footer:onTapFooter()
|
|
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(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)
|
|
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{
|
|
document = DocumentRegistry:openDocument(sample_pdf),
|
|
}
|
|
local footer = readerui.view.footer
|
|
local horizontal_margin = Screen:scaleBySize(10)*2
|
|
footer:updateFooter()
|
|
assert.is.same(354, footer.text_width)
|
|
assert.is.same(600, footer.progress_bar.width
|
|
+ footer.text_width
|
|
+ horizontal_margin)
|
|
assert.is.same(226, footer.progress_bar.width)
|
|
|
|
local old_screen_getwidth = Screen.getWidth
|
|
Screen.getWidth = function() return 900 end
|
|
footer:resetLayout()
|
|
assert.is.same(354, footer.text_width)
|
|
assert.is.same(900, footer.progress_bar.width
|
|
+ footer.text_width
|
|
+ horizontal_margin)
|
|
assert.is.same(526, footer.progress_bar.width)
|
|
Screen.getWidth = old_screen_getwidth
|
|
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{
|
|
document = DocumentRegistry:openDocument(sample_epub),
|
|
}
|
|
local footer = readerui.view.footer
|
|
footer:onPageUpdate(1)
|
|
assert.are.same(218, footer.progress_bar.width)
|
|
assert.are.same(362, footer.text_width)
|
|
|
|
footer:onPageUpdate(100)
|
|
assert.are.same(194, footer.progress_bar.width)
|
|
assert.are.same(386, footer.text_width)
|
|
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))
|
|
|
|
G_reader_settings:saveSetting("footer", {
|
|
toc_markers = true,
|
|
})
|
|
|
|
local readerui = ReaderUI:new{
|
|
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)
|
|
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)
|
|
G_reader_settings:saveSetting("footer", {
|
|
page_progress = true,
|
|
auto_refresh_time = true,
|
|
})
|
|
local readerui = ReaderUI:new{
|
|
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.autoRefreshTime 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.autoRefreshTime then
|
|
found = found + 1
|
|
end
|
|
end
|
|
assert.is.same(0, found)
|
|
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)
|
|
G_reader_settings:saveSetting("footer", {
|
|
disabled = true,
|
|
page_progress = true,
|
|
auto_refresh_time = true,
|
|
})
|
|
local readerui = ReaderUI:new{
|
|
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.autoRefreshTime then
|
|
found = found + 1
|
|
end
|
|
end
|
|
assert.is.same(0, found)
|
|
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)
|
|
G_reader_settings:saveSetting("footer", {
|
|
disabled = false,
|
|
page_progress = true,
|
|
auto_refresh_time = true,
|
|
})
|
|
local readerui = ReaderUI:new{
|
|
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.autoRefreshTime then
|
|
found = found + 1
|
|
end
|
|
end
|
|
assert.is.same(1, found)
|
|
|
|
-- disable auto refresh time
|
|
tapFooterMenu(fake_menu, "Auto refresh time")
|
|
found = 0
|
|
for _,task in ipairs(UIManager._task_queue) do
|
|
if task.action == footer.autoRefreshTime then
|
|
found = found + 1
|
|
end
|
|
end
|
|
assert.is.same(0, found)
|
|
|
|
-- enable auto refresh time again
|
|
tapFooterMenu(fake_menu, "Auto refresh time")
|
|
found = 0
|
|
for _,task in ipairs(UIManager._task_queue) do
|
|
if task.action == footer.autoRefreshTime then
|
|
found = found + 1
|
|
end
|
|
end
|
|
assert.is.same(1, found)
|
|
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)
|
|
G_reader_settings:saveSetting("footer", {
|
|
disabled = false,
|
|
page_progress = true,
|
|
time = true,
|
|
})
|
|
local readerui = ReaderUI:new{
|
|
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(2, footer.mode)
|
|
|
|
DTAP_ZONE_MINIBAR = saved_tap_zone_minibar --luacheck: ignore
|
|
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)
|
|
G_reader_settings:saveSetting("footer", {
|
|
all_at_once = true,
|
|
page_progress = true,
|
|
pages_left = true,
|
|
})
|
|
local readerui = ReaderUI:new{
|
|
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)
|
|
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)
|
|
G_reader_settings:saveSetting("footer", {
|
|
all_at_once = true,
|
|
page_progress = true,
|
|
pages_left = true,
|
|
})
|
|
local readerui = ReaderUI:new{
|
|
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)
|
|
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", {})
|
|
local readerui = ReaderUI:new{
|
|
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.text_left_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)
|
|
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)
|
|
G_reader_settings:saveSetting("footer", { time = true })
|
|
local readerui = ReaderUI:new{
|
|
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())
|
|
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", {})
|
|
local readerui = ReaderUI:new{
|
|
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())
|
|
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", {disable_progress_bar = true})
|
|
local readerui = ReaderUI:new{
|
|
document = DocumentRegistry:openDocument(sample_epub),
|
|
}
|
|
local footer = readerui.view.footer
|
|
|
|
assert.truthy(footer.has_no_mode)
|
|
assert.falsy(readerui.view.footer_visible)
|
|
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()
|
|
|
|
G_reader_settings:saveSetting("footer", { disabled = true })
|
|
local readerui = ReaderUI:new{
|
|
document = DocumentRegistry:openDocument(sample_epub),
|
|
}
|
|
local footer = readerui.view.footer
|
|
|
|
assert.falsy(readerui.view.footer_visible)
|
|
assert.truthy(footer.onCloseDocument == nil)
|
|
assert.truthy(footer.mode == 0)
|
|
end)
|
|
|
|
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{
|
|
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)
|
|
end)
|
|
end)
|