2
0
mirror of https://github.com/koreader/koreader synced 2024-10-31 21:20:20 +00:00
koreader/spec/unit/readerlink_spec.lua
yparitcher 6d3e7fcef6 [fix] PDF footer margins (#5620)
closes #5612 

the change in `ReaderView:recalculate()` causes the viewable page size to be calculated by not including the footer, causing the text not to get cut off.

since the page area was not drawing under the footer `ReaderView:drawPageSurround()` had to be fixed to draw the margin under the footer so when tapping the footer off the area should be dran the background color.
2019-11-21 10:05:40 +01:00

172 lines
6.5 KiB
Lua

describe("ReaderLink module", function()
local DocumentRegistry, ReaderUI, UIManager, sample_epub, sample_pdf, Event
setup(function()
require("commonrequire")
package.unloadAll()
require("document/canvascontext"):init(require("device"))
DocumentRegistry = require("document/documentregistry")
Event = require("ui/event")
ReaderUI = require("apps/reader/readerui")
UIManager = require("ui/uimanager")
sample_epub = "spec/front/unit/data/leaves.epub"
sample_pdf = "spec/front/unit/data/paper.pdf"
end)
it("should jump to links in epub #nocov", function()
local readerui = ReaderUI:new{
document = DocumentRegistry:openDocument(sample_epub),
}
readerui.rolling:onGotoPage(4)
readerui.link:onTap(nil, {pos = {x = 320, y = 120}})
assert.is.same(36, readerui.rolling.current_page)
end)
it("should jump to links in pdf page mode", function()
UIManager:quit()
local readerui = ReaderUI:new{
document = DocumentRegistry:openDocument(sample_pdf),
}
readerui:handleEvent(Event:new("SetScrollMode", false))
readerui:handleEvent(Event:new("SetZoomMode", "page"))
readerui.paging:onGotoPage(1)
readerui.link:onTap(nil, {pos = {x = 363, y = 565}})
UIManager:run()
assert.is.same(22, readerui.paging.current_page)
end)
it("should jump to links in pdf scroll mode", function()
UIManager:quit()
local readerui = ReaderUI:new{
document = DocumentRegistry:openDocument(sample_pdf),
}
readerui:handleEvent(Event:new("SetScrollMode", true))
readerui:handleEvent(Event:new("SetZoomMode", "page"))
readerui.paging:onGotoPage(1)
assert.is.same(1, readerui.paging.current_page)
readerui.link:onTap(nil, {pos = {x = 250, y = 534}})
UIManager:run()
-- its really hard to get the exact page number in scroll mode
-- page positions may have unexpected impact on page number
assert.truthy(readerui.paging.current_page == 21
or readerui.paging.current_page == 20)
end)
it("should be able to go back after link jump in epub #nocov", function()
local readerui = ReaderUI:new{
document = DocumentRegistry:openDocument(sample_epub),
}
readerui.rolling:onGotoPage(4)
readerui.link:onTap(nil, {pos = {x = 320, y = 120}})
assert.is.same(36, readerui.rolling.current_page)
readerui.link:onGoBackLink()
assert.is.same(4, readerui.rolling.current_page)
end)
it("should be able to go back after link jump in pdf page mode", function()
UIManager:quit()
local readerui = ReaderUI:new{
document = DocumentRegistry:openDocument(sample_pdf),
}
readerui:handleEvent(Event:new("SetScrollMode", false))
readerui:handleEvent(Event:new("SetZoomMode", "page"))
readerui.paging:onGotoPage(1)
readerui.link:onTap(nil, {pos = {x = 363, y = 565}})
UIManager:run()
assert.is.same(22, readerui.paging.current_page)
readerui.link:onGoBackLink()
assert.is.same(1, readerui.paging.current_page)
end)
it("should be able to go back after link jump in pdf scroll mode", function()
UIManager:quit()
local readerui = ReaderUI:new{
document = DocumentRegistry:openDocument(sample_pdf),
}
readerui:handleEvent(Event:new("SetScrollMode", true))
readerui:handleEvent(Event:new("SetZoomMode", "page"))
readerui.paging:onGotoPage(1)
assert.is.same(1, readerui.paging.current_page)
readerui.link:onTap(nil, {pos = {x = 250, y = 534}})
UIManager:run()
assert.truthy(readerui.paging.current_page == 21
or readerui.paging.current_page == 20)
readerui.link:onGoBackLink()
assert.is.same(1, readerui.paging.current_page)
end)
it("should be able to go back to the same position after link jump in pdf scroll mode", function()
UIManager:quit()
local expected_page_states = {
{
gamma = 1,
offset = {x = 17, y = 0},
page = 3,
page_area = {
x = 0, y = 0,
h = 800, w = 566,
},
rotation = 0,
visible_area = {
x = 0, y = 694,
h = 106, w = 566,
},
zoom = 0.9501187648456056456,
},
{
gamma = 1,
offset = {x = 17, y = 0},
page = 4,
page_area = {
h = 800, w = 566,
x = 0, y = 0,
},
rotation = 0,
visible_area = {
h = 686, w = 566,
x = 0, y = 0,
},
zoom = 0.9501187648456056456,
},
}
-- disable footer
G_reader_settings:saveSetting("reader_footer_mode", 0)
require("docsettings"):open(sample_pdf):purge()
local readerui = ReaderUI:new{
document = DocumentRegistry:openDocument(sample_pdf),
}
readerui:handleEvent(Event:new("SetZoomMode", "page"))
assert.is.falsy(readerui.view.footer_visible)
readerui.paging:onGotoPage(1)
assert.is.same(1, readerui.paging.current_page)
readerui.view:onSetScrollMode(true)
assert.is.same(true, readerui.view.page_scroll)
assert.is.same(1, readerui.paging.current_page)
readerui.paging:onGotoViewRel(1)
assert.is.same(2, readerui.paging.current_page)
readerui.paging:onGotoViewRel(-1)
assert.is.same(1, readerui.paging.current_page)
readerui.paging:onGotoViewRel(1)
readerui.paging:onGotoViewRel(1)
assert.is.same(3, readerui.paging.current_page)
readerui.paging:onGotoViewRel(-1)
assert.is.same(2, readerui.paging.current_page)
readerui.paging:onGotoViewRel(1)
readerui.paging:onGotoViewRel(1)
assert.is.same(4, readerui.paging.current_page)
assert.are.same(expected_page_states, readerui.view.page_states)
readerui.link:onTap(nil, {pos = {x = 181, y = 366}})
UIManager:run()
assert.is.same(22, readerui.paging.current_page)
readerui.link:onGoBackLink()
assert.is.same(3, readerui.paging.current_page)
assert.are.same(expected_page_states, readerui.view.page_states)
end)
end)