2
0
mirror of https://github.com/koreader/koreader synced 2024-11-13 19:11:25 +00:00
koreader/spec/unit/readerfooter_spec.lua
Qingping Hou 1c5543358c readerfooter(fix): avoid setting mini footer to invisible when full progress bar is on
Our previous assumption is user will only choose between full or min
bar. The does not hold anymore as many more info has been added to the
mini bar and sometimes user might want to have both of them on. This
patch makes the reader behavior consistent when both bars are set to be
on for a document.
2016-07-23 18:00:37 -07:00

343 lines
13 KiB
Lua

describe("Readerfooter module", function()
local DocumentRegistry, ReaderUI, DocSettings, UIManager, DEBUG
local purgeDir, Screen
setup(function()
require("commonrequire")
DocumentRegistry = require("document/documentregistry")
ReaderUI = require("apps/reader/readerui")
DocSettings = require("docsettings")
UIManager = require("ui/uimanager")
DEBUG = require("dbg")
purgeDir = require("ffi/util").purgeDir
Screen = require("device").screen
end)
before_each(function()
G_reader_settings:saveSetting("footer", {
disabled = false,
all_at_once = true,
progress_bar = 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,
})
end)
it("should setup footer as visible", 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 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:getTimeInfo()
local page_count = readerui.document:getPageCount()
-- stats has not been initialized here, so we get na TB and TC
assert.are.same('B:0% | '..timeinfo..' | 1 / '..page_count..' | => 1 | R:0% | TB: na | TC: na',
footer.progress_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),
}
readerui.view.footer:updateFooter()
local timeinfo = readerui.view.footer:getTimeInfo()
assert.are.same('B:0% | '..timeinfo..' | 1 / 2 | => 1 | R:50% | TB: na | TC: na',
readerui.view.footer.progress_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 footer = readerui.view.footer
footer:resetLayout()
footer:updateFooter()
local timeinfo = readerui.view.footer:getTimeInfo()
assert.are.same('B:0% | '..timeinfo..' | 1 / 2 | => 1 | R:50% | TB: na | TC: na',
footer.progress_text.text)
footer.mode = 1
footer.settings.all_at_once = false
footer:updateFooter()
assert.are.same('1 / 2', footer.progress_text.text)
footer.mode = 3
footer:updateFooter()
assert.are.same('=> 1', footer.progress_text.text)
footer.mode = 4
footer:updateFooter()
assert.are.same('B:0%', footer.progress_text.text)
footer.mode = 5
footer:updateFooter()
assert.are.same('R:50%', footer.progress_text.text)
footer.mode = 6
footer:updateFooter()
assert.are.same('TB: na', footer.progress_text.text)
footer.mode = 7
footer:updateFooter()
assert.are.same('TC: na', footer.progress_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)
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(357, footer.text_width)
assert.is.same(600, footer.progress_bar.width
+ footer.text_width
+ horizontal_margin)
assert.is.same(223, footer.progress_bar.width)
local old_screen_getwidth = Screen.getWidth
Screen.getWidth = function() return 900 end
footer:resetLayout()
assert.is.same(357, footer.text_width)
assert.is.same(900, footer.progress_bar.width
+ footer.text_width
+ horizontal_margin)
assert.is.same(523, 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(215, footer.progress_bar.width)
assert.are.same(365, footer.text_width)
footer:onPageUpdate(100)
assert.are.same(191, footer.progress_bar.width)
assert.are.same(389, 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))
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)
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 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.view.footer:onSetStatusLine(1)
assert.is.same(0, footer.mode)
assert.falsy(readerui.view.footer_visible)
footer.mode = 1
readerui.view.footer:onSetStatusLine(1)
assert.is.same(1, footer.mode)
assert.truthy(readerui.view.footer_visible)
readerui.view.footer:onSetStatusLine(0)
assert.is.same(0, footer.mode)
assert.falsy(readerui.view.footer_visible)
end)
end)