EPUB conformance¶
This page reports how KitePDF does on the W3C EPUB 3 test suite, w3c/epub-tests at commit 54092b42. The suite has one test book for each normative statement of EPUB 3 and EPUB Reading Systems 3. Each test has the level of its statement: must, should or may. A test is deprecated when the specifications no longer recommend its feature.
The reading system under test is the library and its viewer together:
kitepdf-epubreads the book and lays it out.KiteDocViewshows the book, pairs the spreads and follows the links.EpubScriptRunnerofkitepdf-javascriptruns the scripts of the book.
The implementation report gives each result in the format of the suite: true, false or "n/a". Each failure of a must or a should names the issue that tracks it.
Summary¶
| Level | Tests | Passes | Fails | Not applicable |
|---|---|---|---|---|
| must | 140 | 136 | 0 | 4 |
| should | 38 | 37 | 0 | 1 |
| may | 1 | 0 | 1 | 0 |
| deprecated | 27 | 25 | 1 | 1 |
| all | 206 | 198 | 2 | 6 |
How the results are known¶
A test in kitepdf-compose-viewer packs each test book of the suite and opens it as a reader does. When the KitePDF API shows the result, a check decides it. A check can read:
- the text, the size and the page count of a page
- what a page paints on a recording canvas
- the rendition of a chapter and the table of contents
- the spreads that the viewer pairs
- the outcome of the scripts
These rows say Checked and tell what the check asserts. The test fails when a check and the report disagree, so a change that moves a result must also move the report.
The other rows need a person, for example to see whether a line breaks before a given character, or how read-aloud behaves. These rows say Judged and tell what was seen on the page or read in the code.
A test is not applicable in two cases:
- It does not test a reading system. For example, it asks EPUBCheck to report an error.
- It says that it does not apply to a reading system without the feature that it tests.
Run the test¶
CI checks out the suite at the pinned commit and runs the test on every push. To run the test locally, give it a checkout of the suite:
git clone https://github.com/w3c/epub-tests ../epub-tests
git -C ../epub-tests checkout 54092b4233253e9aac80e93ec4782b380b4b3403
KITEPDF_EPUB_TESTS=$PWD/../epub-tests/tests ./kotlin test -m kitepdf-compose-viewer -p jvm --include-classes='*EpubConformanceTest*'
Open Container Format¶
| Test | Level | Result | How it is known |
|---|---|---|---|
ocf-font_obfuscation |
should | Passes | Checked: The quote draws in the obfuscated font, with glyph outlines from the font the book embeds. |
ocf-font_obfuscation_bis |
should | Passes | Checked: A font obfuscated with the wrong key does not load, so no glyph run takes its outlines from it. |
ocf-metainf-inc |
must | Passes | Checked: The book opens and its page shows the pass sentence. |
ocf-metainf-manifest |
must | Passes | Checked: The spine is the one chapter of the package, and no page shows the fail sentence. |
ocf-package_arbitrary |
must | Passes | Checked: The package at FOO/BAR opens and its page shows the pass sentence and not the fail one. |
ocf-package_multiple |
must | Passes | Checked: The first rendition, at FOO/BAR, opens and its page shows the pass sentence and not the fail one. |
ocf-url_link-leaking-relative |
must | Passes | Checked: The image whose path climbs past the root draws, 1000 by 562 pixels. |
ocf-url_link-path-absolute |
must | Passes | Checked: The image with a path from the root draws, 1000 by 562 pixels. |
ocf-url_link-relative |
must | Passes | Checked: The image with a relative path draws, 1000 by 562 pixels. |
ocf-url_manifest |
must | Passes | Checked: The chapter at EPUB/foo opens and shows the pass sentence. |
ocf-url_origin |
must | Passes | Checked: Two openings of the book, standing for two readers with their own instance keys, show different origins. |
ocf-url_parse-leaking-relative |
must | Passes | Checked: After the scripts run, the page shows the image address that URL resolves under the book's origin, which stays at the root of the book however many .. segments climb above it. |
ocf-url_parse-path-absolute |
must | Passes | Checked: After the scripts run, the page shows the path-absolute address that URL resolves under the book's origin, from the root of the book. |
ocf-url_relative |
must | Passes | Checked: The chapter at foo/BAR/qux opens and shows the pass sentence. |
ocf-zip-comp |
must | Passes | Checked: The test book re-packed with its entries marked as bzip2 does not open: EpubDocument.open throws EpubFormatException. The folder itself can only hold Deflate. |
ocf-zip-mult |
must | Passes | Checked: The test book whose end record says it is the second segment of a split archive does not open: EpubDocument.open throws EpubFormatException. |
Package Documents¶
| Test | Level | Result | How it is known |
|---|---|---|---|
pkg-collections-unknown |
must | Passes | Checked: The book opens with its own title, not the unknown collection's, and shows the pass sentence. |
pkg-creator-order |
must | Passes | Checked: epubMetadata.creators lists the five creators in package order. |
pkg-linked-records |
should | Not applicable | Judged: Linked metadata records are not read, and the test applies only to a reading system that reads them. The title and creator come from the package. |
pkg-manifest-unknown |
must | Passes | Checked: The book opens and shows the pass sentence. |
pkg-manifest-unlisted-resource |
should | Passes | Checked: The image that the manifest does not list does not draw. |
pkg-meta-unknown |
must | Passes | Checked: The book opens with its own title, not the unknown meta's, and shows the pass sentence. |
pkg-meta-whitespace |
must | Passes | Checked: The creator reads "Dave Cramer" with one space, and the title reads as written. |
pkg-spine-duplicate-item-hyperlink |
must | Passes | Checked: The link to the repeated document goes to its first place in the spine. |
pkg-spine-duplicate-item-rendering |
must | Passes | Checked: The document listed three times in the spine shows three times, one page each. |
pkg-spine-duplicate-item-ui |
must | Passes | Checked: Each of the three places of the repeated document has a bookmark of its own chapter. |
pkg-spine-nonlinear-activation |
must | Passes | Checked: The link to the non-linear document goes to it, and it shows the pass sentence. |
pkg-spine-order |
must | Passes | Checked: The chapters follow the spine, whatever the file names. |
pkg-spine-order-svg |
must | Passes | Checked: The four SVG chapters follow the spine and draw "Page 1" to "Page 4". |
pkg-spine-unknown |
must | Passes | Checked: The book opens and shows the pass sentence. |
pkg-title-order |
must | Passes | Checked: The title is the first dc:title of the package. |
pkg-unique-id |
must | Passes | Checked: The two books that share an identifier open as two books, each with its own title. |
pkg-unique-id_duplicate |
must | Passes | Checked: The two books that share an identifier open as two books, each with its own title. |
pkg-version-backward |
must | Passes | Checked: A package with version 0 opens and shows the pass sentence. |
Publication Resources¶
| Test | Level | Result | How it is known |
|---|---|---|---|
pub-data-urls_browsing-context |
must | Passes | Checked: The image whose source is a data: URL draws. |
pub-data-urls_top-level-content |
must | Passes | Checked: The fixed-layout page draws the SVG of its data: URL in place, and the book keeps its two pages. |
pub-external-links |
should | Passes | Judged: when onLinkTap does not take the web link, KiteDocView asks the reader and then opens the address in the browser through LocalUriHandler. A scene test covers the prompt. |
pub-external-links_consent |
should | Passes | Judged: KiteDocView asks the reader before it opens the mail link, and opens the mail app through LocalUriHandler only after the reader taps Open. A scene test covers the prompt. |
pub-file-urls |
must | Passes | Checked: The three iframes point at file: URLs, none of which the book can read, and their boxes stay empty. |
pub-xml-external-id |
must | Passes | Checked: No page shows the fail sentence: the external entity is not resolved, and stands for nothing, and the DOCTYPE's internal subset leaves nothing of itself on the page. |
pub-xml-names |
must | Passes | Checked: EpubDocument.markupErrors reports that p::p is not a name with a namespace prefix, and KiteDocView shows the error on the page. |
pub-xml-non-validating_comment |
must | Passes | Checked: The spine holds the two chapters, and the commented-out item is not one of them. |
pub-xml-non-validating_unclosed |
must | Passes | Checked: EpubDocument.markupErrors reports that the paragraph is never closed, and KiteDocView shows the error on the page. |
sec-untrusted-consent_network |
should | Passes | Checked: Opened with the default settings, the page fetches nothing: no image draws, nothing arrives from the network, and the remote stylesheet does not turn the text red. Fetching starts only when the host app passes a fetcher, which is where the reader consents. |
sec-untrusted-consent_scripting |
should | Passes | Checked: Without EpubScriptRunner the page still says "No script has been executed.": scripts run only when the host app passes a runner, which is where the reader consents. |
Core Media Types¶
| Test | Level | Result | How it is known |
|---|---|---|---|
pub-cmt-avif |
must | Passes | Checked: The AVIF draws. |
pub-cmt-gif |
must | Passes | Checked: The GIF draws. |
pub-cmt-jpeg |
must | Passes | Checked: The JPEG draws. |
pub-cmt-jxl |
must | Passes | Checked: The JPEG XL draws. |
pub-cmt-mp3 |
must | Passes | Checked: The page offers the MP3 as audio with controls, which kitepdf-media plays on Android, iOS and the desktop JVM. |
pub-cmt-mp4 |
must | Passes | Checked: The page offers the M4A as audio with controls, which kitepdf-media plays on Android, iOS and the desktop JVM. |
pub-cmt-opus |
must | Passes | Checked: The page offers the Opus file as audio with controls, which kitepdf-media plays on Android, iOS and the desktop JVM. |
pub-cmt-png |
must | Passes | Checked: The PNG draws. |
pub-cmt-svg |
must | Passes | Checked: The SVG image draws its red heart. |
pub-cmt-webp |
must | Passes | Checked: The WebP draws. |
Manifest Fallbacks¶
| Test | Level | Result | How it is known |
|---|---|---|---|
pub-foreign_bad-fallback |
must | Passes | Checked: The book, whose only spine item has no content document in its fallback chain and no markup in its bytes, is refused with a format error, as the test allows. |
pub-foreign_image |
must | Passes | Checked: The PSD image falls back to its PNG, which draws. |
pub-foreign_json-spine |
must | Passes | Checked: The JSON spine item falls back to its XHTML document, which shows the pass sentence. |
pub-foreign_xml-spine |
must | Passes | Checked: The XML spine item falls back to its XHTML document, which shows the pass sentence. |
pub-foreign_xml-suffix-spine |
must | Passes | Checked: The +xml spine item falls back to its XHTML document, which shows the pass sentence. |
Content Documents¶
| Test | Level | Result | How it is known |
|---|---|---|---|
cnt-css-fonts_ot |
must | Passes | Checked: The item draws in the OpenType font of its @font-face, with glyph outlines from the book. |
cnt-css-fonts_tt |
must | Passes | Checked: The item draws in the TrueType font of its @font-face, with glyph outlines from the book. |
cnt-css-fonts_woff |
must | Passes | Checked: The item draws in the WOFF font of its @font-face, with glyph outlines from the book. |
cnt-css-fonts_woff2 |
must | Passes | Checked: The item draws in the WOFF2 font of its @font-face, with glyph outlines from the book. |
cnt-mathml-support |
must | Passes | Checked: The equation draws as MathML: the exponent 2 is smaller than the base and raised above it. |
cnt-svg-css |
must | Passes | Checked: The SVG chapter fills its shapes with the star pattern of its CSS. |
cnt-svg-css-inclusion |
must | Passes | Checked: The inline SVG fills with the star pattern of the document's CSS. |
cnt-svg-css-reference |
must | Passes | Checked: The SVG referenced by img stays solid green: the document's CSS does not reach it. |
cnt-svg-embedded |
must | Passes | Checked: The inline SVG draws its red heart. |
cnt-svg-support |
must | Passes | Checked: The SVG chapter draws its red heart and its text. |
cnt-xhtml-support |
must | Passes | Checked: The XHTML chapter shows its pass sentence. |
css-epub-hyphens |
should | Passes | Judged: -epub-hyphens is read: none never hyphenates, manual breaks at soft hyphens and auto hyphenates by the language's patterns. At the test's page width no line happens to end on a break point, so this is judged from the code and narrower pages. |
css-epub-line-break |
should | Passes | Checked: Over many widths of the page, no line runs past its edge, auto and strict start no line with 々 or ぁ, normal starts some with ぁ and none with 々, and loose starts some with each. |
css-epub-text-align-last |
should | Passes | Checked: The last line of each sample sits where its -epub-text-align-last puts it: at the left edge for auto, start, left and end in right-to-left text, at the right edge for right, centred for center, and across the line for justify. |
css-epub-text-combine-horizontal |
should | Passes | Checked: Tests 2 and 4 set each pair of digits upright and side by side in the space of one character, an em down the column from the last, and tests 1 and 3 set the same digits one by one, turned as the mixed rule turns them. |
css-epub-text-emphasis |
should | Passes | Checked: The first chapter draws over its text each mark its style sheet asks for, from the book's font where the font has it, a blue one for test 12 and one under the text for test 13, and the vertical chapters draw them left of the first column and then right of it. Tests 8 to 11 name other marks than their style sheet asks for; the check follows the style sheet. |
css-epub-text-orientation |
should | Passes | Checked: The test's second chapter lays out vertically: the mixed paragraph stands its Japanese up and turns its English, the upright one stands its English letters up, and the sideways ones turn their Japanese too. |
css-epub-text-transform |
should | Passes | Checked: The digits and letters of the sample read as their full-width forms and stand upright in the vertical chapter, as the Japanese beside them does. |
css-epub-text-underline-position |
should | Passes | Checked: The first chapter's underline sits under the baseline and above the 0.2 em that descenders reach, the second chapter's sits below them, and the vertical chapters draw it left of the first column and then right of it. |
css-epub-word-break |
should | Passes | Checked: The normal and keep-all samples keep every word whole, and the break-all sample breaks inside words and fills each line to its edge. |
css-epub-writing-mode |
should | Passes | Checked: Chapter 1 lays out horizontally and chapters 2 and 3 vertically. |
Internationalization¶
| Test | Level | Result | How it is known |
|---|---|---|---|
pkg-dir-auto_root-rtl |
must | Passes | Checked: epubMetadata.titleRightToLeft is false, since the title's own auto goes by its first strong character, the Latin C of "CSS:", over the package's rtl, so the title displays incorrectly as the test expects. |
pkg-dir-auto_root-unset |
must | Passes | Checked: epubMetadata.titleRightToLeft is false, since the title's auto goes by its first strong character, the Latin C of "CSS:", so the title displays incorrectly as the test expects. |
pkg-dir_but_not_content |
must | Passes | Checked: The list reads left to right: the package's dir does not reach the content. |
pkg-dir_creator-rtl |
must | Passes | Checked: epubMetadata.creatorsRightToLeft says the one creator reads right to left by its own dir. |
pkg-dir_rtl-root-ltr |
must | Passes | Checked: epubMetadata.titleRightToLeft is true, since the title's own rtl wins over the package's ltr. |
pkg-dir_rtl-root-unset |
must | Passes | Checked: epubMetadata.titleRightToLeft is true by the title's own rtl. |
pkg-dir_unset-root-rtl |
must | Passes | Checked: epubMetadata.titleRightToLeft is true by the package's rtl, which the title inherits. |
pkg-dir_unset-root-unset |
must | Passes | Checked: epubMetadata.titleRightToLeft is false, since with no dir anywhere the title goes by its first strong character, the Latin C of "CSS:", so it displays incorrectly as the test expects. |
pkg-lang_but_not_content |
must | Passes | Checked: The q element shows English quotation marks, not the French ones of the package language. |
pkg-spine-progression-default |
must | Passes | Checked: The book of Arabic language with a default spine progresses right to left. |
pkg-spine-progression-pre-paginated |
must | Passes | Checked: The pages progress left to right and pair into spreads with the first page on the left. |
pkg-spine-progression_ltr |
must | Passes | Checked: The pages progress left to right, paired with the first page on the left. |
pkg-spine-progression_rtl |
must | Passes | Checked: The book progresses right to left, and the viewer pairs its pages that way. |
Navigation Documents¶
| Test | Level | Result | How it is known |
|---|---|---|---|
nav-access |
must | Passes | Checked: The table of contents has the one entry, which the outline panel lists. |
nav-activation |
must | Passes | Checked: The entry for the second document goes to it, and it shows the pass sentence. |
nav-non-text_img |
should | Passes | Checked: The entry made of an image takes the image's alt as its label. |
nav-non-text_img_title |
should | Passes | Checked: The entry made of an image takes its alt, not its title, as its label. |
nav-spine_in-spine |
must | Passes | Checked: The navigation document in the spine shows both links, and the table of contents has both entries. |
nav-spine_in-spine-hidden-toc-css |
must | Passes | Checked: The table of contents has both entries, while the page hides the second as its CSS says. |
nav-spine_in-spine-hidden-toc-html |
must | Passes | Checked: The table of contents has both entries, while the page hides the second as its hidden says. |
nav-spine_in-spine-no-list-style |
must | Passes | Checked: The outline lists the two titles alone, with no number or letter before them. |
nav-spine_not-in-spine |
must | Passes | Checked: The table of contents has both entries, and the navigation document is not a chapter. |
Structural Semantics¶
| Test | Level | Result | How it is known |
|---|---|---|---|
pss-support |
may | Fails | Judged: The note reference and its footnote are found (linkTarget), but KiteDocView shows no popup of its own; the app builds one from onLinkTap. |
pss-support_ignore-title |
must | Passes | Checked: A link to the head's title is not a footnote, while the note in the body is one. |
Scripting¶
| Test | Level | Result | How it is known |
|---|---|---|---|
scr-not-support_ccscript-modify-host |
must | Passes | Checked: The iframe's box draws its document, whose script ran, and the chapter's text stays: the frame's parent is its own window. |
scr-not-support_ccscript-modify-size |
must | Passes | Checked: The iframe's box draws its document, whose script ran, and the box keeps its shape of 500 by 70 pixels. |
scr-readingsystem-features |
must | Passes | Checked: After the scripts run, the page lists each of the six features that hasFeature answers as true or false, and none as unimplemented. |
scr-readingsystem-support |
must | Passes | Checked: After the scripts run, the page says the reading system implements epubReadingSystem. |
scr-readingsystem-support_iframe |
must | Passes | Checked: The iframe's box draws its document, whose script finds epubReadingSystem. |
scr-readingsystem-support_iframe_svg |
must | Passes | Checked: The iframe's box draws its SVG document, whose script finds epubReadingSystem. |
scr-readingsystem-support_svg |
must | Passes | Checked: After the scripts run in the SVG chapter, it draws the pass text about epubReadingSystem. |
scr-storage-delete |
should | Passes | Checked: Opened a second time, the page says persistent data is not kept, so the test passes: local storage lives as long as the session. |
scr-support |
should | Passes | Checked: After the scripts run, the page says scripting is supported and the test passes. |
scr-support-fallback |
must | Not applicable | Judged: Scripts run, so the page itself says its manifest fallback is unused and the test does not apply. |
scr-support_iframe |
should | Passes | Checked: The iframe's box draws its document, whose script says scripting works. |
scr-support_origin |
must | Passes | Checked: After the scripts run, both chapters show the same origin, epub:// and a host. |
scr-support_origin_unique |
must | Passes | Checked: After the scripts run, the book shows an origin other than scr-support_origin's. |
scr-support_scrolled-continuous |
should | Passes | Checked: Each chapter is one page as tall as its content, and KiteDocLayout.forDocument shows the book as one continuous strip. |
scr-support_scrolled-doc |
must | Passes | Checked: Each chapter is one page as tall as its content, and KiteDocLayout.forDocument shows the book in a pager whose chapters fill the width and scroll down. |
scr-support_svg |
should | Passes | Checked: After the scripts run in the SVG chapter, it draws the pass text and not the fail text. |
Fixed Layout¶
| Test | Level | Result | How it is known |
|---|---|---|---|
lay-page-layout-both |
should | Passes | Checked: The reflowable chapter flows over pages between the fixed ones, each one page of its viewport. |
lay-page-layout-both-spread |
must | Passes | Checked: The last page, which asks for the left, sits alone in the left half of its spread. |
lay-pkg-flow-paginated |
should | Passes | Checked: With flow paginated, the chapters are cut into pages. |
lay-pkg-flow-scrolled-continuous |
should | Passes | Checked: Each chapter is one page as tall as its content, and KiteDocLayout.forDocument shows the book as one continuous strip. |
lay-pkg-flow-scrolled-doc |
should | Passes | Checked: Each chapter is one page as tall as its content, and KiteDocLayout.forDocument shows the book in a pager whose chapters fill the width and scroll down. |
lay-reflow-align-x-center |
must | Not applicable | Judged: rendition:align-x-center is not supported, and the test applies only to a reading system that supports it. |
lay-rendition-flow-pre-pag |
must | Passes | Checked: The fixed chapters of a scrolled book are one page each of their viewport. |
lay-viewport-meta-prop |
must | Passes | Checked: All four pages take the same 900 by 600 viewport whatever their scale keys say; the viewer's zoom follows its own settings. |
Pre-paginated Layout¶
| Test | Level | Result | How it is known |
|---|---|---|---|
fxl-layout-duplication |
deprecated | Not applicable | Judged: Only EPUBCheck can pass it, by reporting the duplicated rendition:layout. KitePDF keeps the first value. |
fxl-page-spread-break |
deprecated | Passes | Checked: Each chapter is one 900 by 600 page despite page-break-before, and the viewer pairs them two by two. |
fxl-page-spread-center |
deprecated | Passes | Checked: The first chapter asks for the centre, and the viewer gives it a spread of its own, drawn centred. |
fxl-spine-overrides_behave-as-global |
deprecated | Passes | Checked: The fixed chapter is one page of its viewport and the overriding chapter flows over pages. |
fxl-spine-overrides_behave-as-global-bis |
deprecated | Passes | Checked: The overriding chapter is one fixed page of its viewport between two reflowable ones. |
fxl-spine-overrides_duplicate |
deprecated | Passes | Checked: Of the two overrides on the itemref, the first, reflowable, wins. |
lay-fxl-layout-default |
deprecated | Passes | Checked: With no rendition:layout, the book is reflowable and flows over pages. |
lay-fxl-layout-pre-paginated |
deprecated | Passes | Checked: Each chapter is one 900 by 600 page, in spine order. |
lay-fxl-layout-pre-paginated-spreads |
deprecated | Passes | Checked: The viewer pairs the four pages into two spreads with no lone page between. |
lay-fxl-orientation-default |
deprecated | Passes | Checked: Every chapter reads orientation auto, and the viewer follows the device. |
lay-fxl-orientation-landscape |
deprecated | Fails | Judged: rendition:orientation landscape is read, but KiteDocView neither rotates nor tells the reader. |
lay-fxl-page-spread-combined |
deprecated | Passes | Checked: The left and right pages share one spread, the left one first. |
lay-fxl-page-spread-left |
deprecated | Passes | Checked: The page-spread-left page opens its spread on the left. |
lay-fxl-page-spread-right |
deprecated | Passes | Checked: The page-spread-right first page sits alone in the right half of its spread, and the pages after it pair. |
lay-fxl-spread-auto |
deprecated | Passes | Checked: With spread auto, the viewer pairs the pages. |
lay-fxl-spread-both |
deprecated | Passes | Checked: With spread both, the viewer pairs the pages in landscape and in portrait. |
lay-fxl-spread-default |
deprecated | Passes | Checked: With no rendition:spread, the value is auto and the viewer pairs the pages. |
lay-fxl-spread-landscape |
deprecated | Passes | Checked: With spread landscape, the viewer pairs the pages in landscape only. |
lay-fxl-spread-none |
deprecated | Passes | Checked: With spread none, every page shows alone. |
lay-fxl-svg-icb_multi |
deprecated | Passes | Checked: Each SVG page takes the size of its own viewBox, 900 by 600 and 1200 by 600. |
lay-fxl-xhtml-icb |
deprecated | Passes | Checked: The page is its 900 by 600 pixel viewport, and the grid of layered gradients paints over the red box, in 18 by 12 cells. |
lay-fxl-xhtml-icb_device_sizes |
deprecated | Passes | Checked: The grid of layered gradients paints over the red box. device-width and device-height give the page the size of the reader's, so it fills the display. |
lay-fxl-xhtml-icb_invalid_meta |
deprecated | Passes | Checked: Width and height are read from the invalid tag, so the second page is 900 by 600 pixels too, and both paint the grid of layered gradients over the red box. |
lay-fxl-xhtml-icb_multi |
deprecated | Passes | Checked: Each page takes its own viewport, 900 and 1400 pixels wide, and both paint the grid of layered gradients over the red box, which shows to the right of it on the wide page. |
lay-fxl-xhtml-icb_multi_declarations |
deprecated | Passes | Checked: Of two viewport tags, the first sizes the page, 1000 by 600. |
lay-fxl-xhtml-icb_repeated-in-meta |
deprecated | Passes | Checked: Of a repeated width and height, the first sizes the page, 900 by 600. |
lay-fxl-xhtml-icb_units |
deprecated | Passes | Checked: width=1000px, height=600mm sizes the page 1000 by 600. |
lay-pp-embedded-images |
must | Passes | Checked: Each of the nine chapters is one page of its viewport that draws its image, and the title page asks for the centre. |
lay-pp-embedded-images-svg |
must | Passes | Checked: The XHTML title and the SVG plates are one page each of their viewport, each drawing its image. |
lay-pp-images-in-spine |
must | Passes | Checked: Each image spine item shows the image itself, as one fixed page at its pixel size. |
lay-pp-images-mixed |
must | Passes | Checked: The plates draw their images, and the two image spine items show the images themselves, at the same size. |
lay-pp-layout-default |
must | Passes | Checked: With no rendition:layout, the book is reflowable and flows over pages. |
lay-pp-layout-duplication |
must | Not applicable | Judged: Only EPUBCheck can pass it, by reporting the duplicated rendition:layout. KitePDF keeps the first value. |
lay-pp-layout-pre-paginated |
must | Passes | Checked: Each chapter is one 900 by 600 page, in spine order. |
lay-pp-layout-pre-paginated-spreads |
must | Passes | Checked: The viewer pairs the four pages into two spreads with no lone page between. |
lay-pp-page-spread-combined |
should | Passes | Checked: The left and right pages share one spread, the left one first. |
lay-pp-page-spread-left |
should | Passes | Checked: The page-spread-left page opens its spread on the left. |
lay-pp-page-spread-right |
should | Passes | Checked: The page-spread-right first page sits alone in the right half of its spread, and the pages after it pair. |
lay-pp-spine-overrides_behave-as-global |
must | Passes | Checked: The fixed chapter is one page of its viewport and the overriding chapter flows over pages. |
lay-pp-spine-overrides_behave-as-global-bis |
must | Passes | Checked: The overriding chapter is one fixed page of its viewport between two reflowable ones. |
lay-pp-spine-overrides_image-only-pp |
must | Passes | Checked: The fixed chapter is one page that draws its image, and the overriding chapter flows over pages. |
lay-pp-spine-overrides_image-only-reflow |
must | Passes | Checked: The overriding chapter is one fixed page that draws its image between two reflowable ones. |
lay-pp-spine-overrides_image-spine-pp |
must | Passes | Checked: The image spine item shows the image as one fixed page, and the overriding chapter flows. |
lay-pp-spine-overrides_image-spine-reflow |
must | Passes | Checked: The image spine item shows the image as one fixed page, between reflowable chapters. |
lay-pp-spread-none |
must | Passes | Checked: With spread none, every page shows alone. |
lay-pp-svg-icb_multi |
must | Passes | Checked: Each SVG page takes the size of its own viewBox, 900 by 600 and 1200 by 600. |
lay-pp-xhtml-icb |
must | Passes | Checked: The page is its 900 by 600 pixel viewport, and the grid of layered gradients paints over the red box, in 18 by 12 cells. |
lay-pp-xhtml-icb_invalid_meta |
should | Passes | Checked: Width and height are read from the invalid tag, so the second page is 900 by 600 pixels too, and both paint the grid of layered gradients over the red box. |
lay-pp-xhtml-icb_multi |
must | Passes | Checked: Each page takes its own viewport, 900 and 1400 pixels wide, and both paint the grid of layered gradients over the red box, which shows to the right of it on the wide page. |
lay-pp-xhtml-icb_multi_declarations |
must | Passes | Checked: Of two viewport tags, the first sizes the page, 1000 by 600. |
lay-pp-xhtml-icb_repeated-in-meta |
must | Passes | Checked: Of a repeated width and height, the first sizes the page, 900 by 600. |
lay-pp-xhtml-icb_units |
must | Passes | Checked: width=1000px, height=600mm sizes the page 1000 by 600. |
Roll Layout¶
| Test | Level | Result | How it is known |
|---|---|---|---|
lay-roll-embedded-images |
must | Passes | Checked: Each plate is one page at its own aspect, and KiteDocLayout.forDocument shows the book as one strip whose pages fill the width with no gap. |
lay-roll-embedded-images-svg |
must | Passes | Checked: Each plate is one page at its own aspect, and KiteDocLayout.forDocument shows the book as one strip whose pages fill the width with no gap. |
lay-roll-images-in-spine |
must | Passes | Checked: Each plate is one page at its own aspect, and KiteDocLayout.forDocument shows the book as one strip whose pages fill the width with no gap. |
lay-roll-images-mixed |
must | Passes | Checked: Each plate is one page at its own aspect, and KiteDocLayout.forDocument shows the book as one strip whose pages fill the width with no gap. |
Media Overlays¶
| Test | Level | Result | How it is known |
|---|---|---|---|
mol-audio |
must | Passes | Checked: The overlay's clip reads its audio file from 29.268 s to 44.783 s, which KiteReadAloud plays while it highlights the text. |
mol-audio-exceeding-clipend |
must | Passes | Judged: From the code of KiteReadAloud: a clip whose clipEnd lies past the end of its file ends with the file, and reading goes on. |
mol-audio-no-clipbegin |
must | Passes | Checked: A clip with no clipBegin starts at 0 s. |
mol-audio-no-clipend |
must | Passes | Checked: A clip with no clipEnd plays to the end of its file. |
mol-css |
should | Passes | Checked: With the first clip marked through EpubDocument.markNarration, the word Call draws light on a green fill and the rest of the chapter grey, as KiteReadAloud marks each clip. |
mol-ignore |
must | Not applicable | Judged: The test is for reading systems without media overlays, and says one with them should skip it. |
mol-navigation |
must | Passes | Judged: After a jump through the table of contents, KiteReadAloud goes on from the first clip of the chapter the reader went to, as ReadAloudTest checks on a book of its own. |
mol-support_xhtml |
must | Passes | Judged: From the code of KiteReadAloud: it reads the overlay clip by clip, highlights each piece of text and turns the page with the reading. |
mol-support_xhtml-fxl |
must | Passes | Judged: From the code of KiteReadAloud: it reads the fixed page's overlay as it does a reflowable one. |
mol-support_xhtml-load |
must | Passes | Checked: The overlay that two chapters share gives each only the clips of its own text. |
mol-support_xhtml-load-fxl |
must | Passes | Checked: The overlay that two chapters share gives each only the clips of its own text. |
mol-support_xhtml-load-next |
should | Passes | Judged: From the code of KiteReadAloud: when a chapter's overlay ends it goes on with the next chapter's and turns the page itself. |
mol-support_xhtml-load-next-fxl |
should | Passes | Judged: From the code of KiteReadAloud: on fixed pages too, reading moves on to the next page's overlay and turns the page. |
mol-timing-synchronization |
must | Passes | Judged: From the code of KiteReadAloud: each clip's text is highlighted while its audio plays. |
mol-timing-synchronization_fxl |
must | Passes | Checked: The overlay that three pages share gives each page its one clip. |
mol-timing-synchronization_multiple_audio |
must | Passes | Judged: From the code of KiteReadAloud: the clips of both audio files read in order, the second file opening in the same player. |
mol-timing-synchronization_multiple_audio-fxl |
must | Passes | Judged: From the code of KiteReadAloud: on the fixed page too, the reading goes from the first audio file to the second in clip order. |
mol-timing-synchronization_svg |
must | Passes | Checked: Each clip's text inside the SVG chapter has a place on its page, one rectangle per line it draws. |
mol-timing-synchronization_svg-fxl |
must | Passes | Checked: Each clip's text inside the SVG page has a place on it, one rectangle per line it draws. |
mol-tts_multi |
should | Passes | Checked: Each of the four clips has no audio, and EpubDocument.readingOrderOf gives its sentence, which KiteReadAloud hands to the app's speech hook. |
mol-tts_single |
should | Passes | Checked: The one clip has no audio, and EpubDocument.readingOrderOf gives the text of the whole section, which KiteReadAloud hands to the app's speech hook. |