2
0
mirror of https://github.com/koreader/koreader synced 2024-11-10 01:10:34 +00:00
koreader/spec/unit/readertoc_spec.lua
poire-z 4740ab1fdc
bump crengine: round FT metrics, split text drawing by script (#5628)
Includes:
- Fonts: round FT metrics instead of floor'ing them
- Fonts: switch to no hinting when native hinting fails
- Fonts: fix issue with Harfbuzz fallback font drawing
- Text: split measuring and word drawing by unicode script
- Page splitting: fix small memory leak
- Fix "background-color: black" ignored on inline elements
- Fix decoding of recent MOBI files
- Hardcoded elements list: add <font>
base/xtext.cpp: small cleanup, no logic change
2019-11-22 23:54:34 +01:00

102 lines
3.9 KiB
Lua

describe("Readertoc module", function()
local DocumentRegistry, ReaderUI, DEBUG
local readerui, toc, toc_max_depth, title
setup(function()
require("commonrequire")
DocumentRegistry = require("document/documentregistry")
ReaderUI = require("apps/reader/readerui")
DEBUG = require("dbg")
local sample_epub = "spec/front/unit/data/juliet.epub"
readerui = ReaderUI:new{
document = DocumentRegistry:openDocument(sample_epub),
}
-- reset book to first page
readerui.rolling:onGotoPage(0)
toc = readerui.toc
end)
it("should get max toc depth", function()
toc_max_depth = toc:getMaxDepth()
assert.are.same(2, toc_max_depth)
end)
it("should get toc title from page", function()
title = toc:getTocTitleByPage(60)
DEBUG("toc", toc.toc)
assert.is.equal("SCENE V. A hall in Capulet's house.", title)
title = toc:getTocTitleByPage(187)
assert.is.equal("SCENE I. Friar Laurence's cell.", title)
end)
describe("getTocTicks API", function()
local ticks_level_0 = nil
it("should get ticks of level 0", function()
ticks_level_0 = toc:getTocTicks(0)
--DEBUG("ticks", ticks_level_0)
assert.are.same(28, #ticks_level_0)
end)
local ticks_level_1 = nil
it("should get ticks of level 1", function()
ticks_level_1 = toc:getTocTicks(1)
assert.are.same(7, #ticks_level_1)
end)
local ticks_level_2 = nil
it("should get ticks of level 2", function()
ticks_level_2 = toc:getTocTicks(2)
assert.are.same(26, #ticks_level_2)
end)
local ticks_level_m1 = nil
it("should get ticks of level -1", function()
ticks_level_m1 = toc:getTocTicks(-1)
assert.are.same(26, #ticks_level_m1)
end)
it("should get the same ticks of level -1 and level 2", function()
if toc_max_depth == 2 then
assert.are.same(ticks_level_2, ticks_level_m1)
end
end)
end)
it("should get page of next chapter", function()
assert.truthy(toc:getNextChapter(10, 0) > 10)
assert.truthy(toc:getNextChapter(100, 0) > 100)
assert.are.same(nil, toc:getNextChapter(290, 0))
end)
it("should get page of previous chapter", function()
assert.truthy(toc:getPreviousChapter(10, 0) < 10)
assert.truthy(toc:getPreviousChapter(100, 0) < 100)
assert.truthy(toc:getPreviousChapter(200, 0) < 200)
end)
it("should get page left of chapter", function()
assert.truthy(toc:getChapterPagesLeft(10, 0) > 10)
assert.truthy(toc:getChapterPagesLeft(95, 0) > 10)
assert.are.same(nil, toc:getChapterPagesLeft(290, 0))
end)
it("should get page done of chapter", function()
assert.truthy(toc:getChapterPagesDone(11, 0) < 5)
assert.truthy(toc:getChapterPagesDone(88, 0) < 5)
assert.truthy(toc:getChapterPagesDone(290, 0) > 10)
end)
describe("collasible TOC", function()
it("should collapse the secondary toc nodes by default", function()
toc:onShowToc()
assert.are.same(7, #toc.collapsed_toc)
end)
it("should not expand toc nodes that have no child nodes", function()
toc:expandToc(2)
assert.are.same(7, #toc.collapsed_toc)
end)
it("should expand toc nodes that have child nodes", function()
toc:expandToc(3)
assert.are.same(13, #toc.collapsed_toc)
toc:expandToc(18)
assert.are.same(18, #toc.collapsed_toc)
end)
it("should collapse toc nodes that have been expanded", function()
toc:collapseToc(3)
assert.are.same(12, #toc.collapsed_toc)
toc:collapseToc(18)
assert.are.same(7, #toc.collapsed_toc)
end)
end)
end)