From 6a58b8e962fae1ef9a04ad562bb571dd9540c00f Mon Sep 17 00:00:00 2001 From: Romain Deltour Date: Mon, 10 Oct 2022 11:03:04 +0200 Subject: [PATCH] feat: better check media overlays styling properties - report schema error RSC-005 when the 'media:active-class' or 'media:playback-active-class' properties are declared more than once. - report schema error RSC-005 when the 'media:active-class' or 'media:playback-active-class' properties define more than once class names. - report new usage CSS-029 when a CSS selector is found referring to the widely-used '-epub-media-overlay-active' or '-epub-media-overlay- playing' class names but no 'media:active-class' or 'media:playback- active-class' properties were declared in the package document. - report new error CSS-030 when the 'media:active-class' or 'media:playback-active-class' properties are declared but no CSS is found in a content document with media overlays. - added various test scenarios for the checks described above. Closs #1218. --- .../com/adobe/epubcheck/css/CSSHandler.java | 39 +++++++++++++++ .../epubcheck/messages/DefaultSeverities.java | 2 + .../adobe/epubcheck/messages/MessageId.java | 2 + .../com/adobe/epubcheck/opf/OPFHandler30.java | 18 +++++++ .../com/adobe/epubcheck/ops/OPSHandler.java | 9 +++- .../com/adobe/epubcheck/ops/OPSHandler30.java | 12 +++++ .../com/adobe/epubcheck/util/FeatureEnum.java | 2 + .../idpf/epubcheck/util/css/CssGrammar.java | 4 +- .../messages/MessageBundle.properties | 2 + .../adobe/epubcheck/schema/30/package-30.sch | 10 ++++ .../EPUB/content_001.mp3 | Bin 0 -> 10363 bytes .../EPUB/content_001.smil | 9 ++++ .../EPUB/content_001.xhtml | 19 ++++++++ .../EPUB/nav.xhtml | 14 ++++++ .../EPUB/package.opf | 22 +++++++++ .../META-INF/container.xml | 6 +++ .../mimetype | 1 + ...ctive-class-multiple-class-names-error.opf | 21 ++++++++ .../EPUB/content_001.mp3 | Bin 0 -> 10363 bytes .../EPUB/content_001.smil | 9 ++++ .../EPUB/content_001.xhtml | 11 +++++ .../EPUB/nav.xhtml | 14 ++++++ .../EPUB/package.opf | 21 ++++++++ .../META-INF/container.xml | 6 +++ .../mimetype | 1 + .../EPUB/content_001.mp3 | Bin 0 -> 10363 bytes .../EPUB/content_001.smil | 9 ++++ .../EPUB/content_001.xhtml | 11 +++++ .../EPUB/nav.xhtml | 14 ++++++ .../EPUB/package.opf | 21 ++++++++ .../EPUB/styles.css | 6 +++ .../META-INF/container.xml | 6 +++ .../mimetype | 1 + .../EPUB/content_001.mp3 | Bin 0 -> 10363 bytes .../EPUB/content_001.smil | 9 ++++ .../EPUB/content_001.xhtml | 12 +++++ .../EPUB/nav.xhtml | 14 ++++++ .../EPUB/package.opf | 23 +++++++++ .../EPUB/styles.css | 6 +++ .../META-INF/container.xml | 6 +++ .../mimetype | 1 + ...ctive-class-multiple-class-names-error.opf | 21 ++++++++ ...ys-playback-active-class-refines-error.opf | 2 +- .../EPUB/content_001.mp3 | Bin 0 -> 10363 bytes .../EPUB/content_001.smil | 9 ++++ .../EPUB/content_001.xhtml | 11 +++++ .../EPUB/nav.xhtml | 14 ++++++ .../EPUB/package.opf | 21 ++++++++ .../META-INF/container.xml | 6 +++ .../mimetype | 1 + .../09-media-overlays/media-overlays.feature | 45 ++++++++++++++++++ ...lays-active-class-more-than-once-error.opf | 22 +++++++++ ...back-active-class-more-than-once-error.opf | 22 +++++++++ .../D-vocabularies/media-overlays.feature | 19 ++++++++ 54 files changed, 581 insertions(+), 5 deletions(-) create mode 100644 src/test/resources/epub3/09-media-overlays/files/mediaoverlays-active-class-inline-valid/EPUB/content_001.mp3 create mode 100644 src/test/resources/epub3/09-media-overlays/files/mediaoverlays-active-class-inline-valid/EPUB/content_001.smil create mode 100644 src/test/resources/epub3/09-media-overlays/files/mediaoverlays-active-class-inline-valid/EPUB/content_001.xhtml create mode 100644 src/test/resources/epub3/09-media-overlays/files/mediaoverlays-active-class-inline-valid/EPUB/nav.xhtml create mode 100644 src/test/resources/epub3/09-media-overlays/files/mediaoverlays-active-class-inline-valid/EPUB/package.opf create mode 100644 src/test/resources/epub3/09-media-overlays/files/mediaoverlays-active-class-inline-valid/META-INF/container.xml create mode 100644 src/test/resources/epub3/09-media-overlays/files/mediaoverlays-active-class-inline-valid/mimetype create mode 100644 src/test/resources/epub3/09-media-overlays/files/mediaoverlays-active-class-multiple-class-names-error.opf create mode 100644 src/test/resources/epub3/09-media-overlays/files/mediaoverlays-active-class-style-not-found-error/EPUB/content_001.mp3 create mode 100644 src/test/resources/epub3/09-media-overlays/files/mediaoverlays-active-class-style-not-found-error/EPUB/content_001.smil create mode 100644 src/test/resources/epub3/09-media-overlays/files/mediaoverlays-active-class-style-not-found-error/EPUB/content_001.xhtml create mode 100644 src/test/resources/epub3/09-media-overlays/files/mediaoverlays-active-class-style-not-found-error/EPUB/nav.xhtml create mode 100644 src/test/resources/epub3/09-media-overlays/files/mediaoverlays-active-class-style-not-found-error/EPUB/package.opf create mode 100644 src/test/resources/epub3/09-media-overlays/files/mediaoverlays-active-class-style-not-found-error/META-INF/container.xml create mode 100644 src/test/resources/epub3/09-media-overlays/files/mediaoverlays-active-class-style-not-found-error/mimetype create mode 100644 src/test/resources/epub3/09-media-overlays/files/mediaoverlays-active-class-stylesheet-undeclared-valid/EPUB/content_001.mp3 create mode 100644 src/test/resources/epub3/09-media-overlays/files/mediaoverlays-active-class-stylesheet-undeclared-valid/EPUB/content_001.smil create mode 100644 src/test/resources/epub3/09-media-overlays/files/mediaoverlays-active-class-stylesheet-undeclared-valid/EPUB/content_001.xhtml create mode 100644 src/test/resources/epub3/09-media-overlays/files/mediaoverlays-active-class-stylesheet-undeclared-valid/EPUB/nav.xhtml create mode 100644 src/test/resources/epub3/09-media-overlays/files/mediaoverlays-active-class-stylesheet-undeclared-valid/EPUB/package.opf create mode 100644 src/test/resources/epub3/09-media-overlays/files/mediaoverlays-active-class-stylesheet-undeclared-valid/EPUB/styles.css create mode 100644 src/test/resources/epub3/09-media-overlays/files/mediaoverlays-active-class-stylesheet-undeclared-valid/META-INF/container.xml create mode 100644 src/test/resources/epub3/09-media-overlays/files/mediaoverlays-active-class-stylesheet-undeclared-valid/mimetype create mode 100644 src/test/resources/epub3/09-media-overlays/files/mediaoverlays-active-class-stylesheet-valid/EPUB/content_001.mp3 create mode 100644 src/test/resources/epub3/09-media-overlays/files/mediaoverlays-active-class-stylesheet-valid/EPUB/content_001.smil create mode 100644 src/test/resources/epub3/09-media-overlays/files/mediaoverlays-active-class-stylesheet-valid/EPUB/content_001.xhtml create mode 100644 src/test/resources/epub3/09-media-overlays/files/mediaoverlays-active-class-stylesheet-valid/EPUB/nav.xhtml create mode 100644 src/test/resources/epub3/09-media-overlays/files/mediaoverlays-active-class-stylesheet-valid/EPUB/package.opf create mode 100644 src/test/resources/epub3/09-media-overlays/files/mediaoverlays-active-class-stylesheet-valid/EPUB/styles.css create mode 100644 src/test/resources/epub3/09-media-overlays/files/mediaoverlays-active-class-stylesheet-valid/META-INF/container.xml create mode 100644 src/test/resources/epub3/09-media-overlays/files/mediaoverlays-active-class-stylesheet-valid/mimetype create mode 100644 src/test/resources/epub3/09-media-overlays/files/mediaoverlays-playback-active-class-multiple-class-names-error.opf create mode 100644 src/test/resources/epub3/09-media-overlays/files/mediaoverlays-playback-active-class-style-not-found-error/EPUB/content_001.mp3 create mode 100644 src/test/resources/epub3/09-media-overlays/files/mediaoverlays-playback-active-class-style-not-found-error/EPUB/content_001.smil create mode 100644 src/test/resources/epub3/09-media-overlays/files/mediaoverlays-playback-active-class-style-not-found-error/EPUB/content_001.xhtml create mode 100644 src/test/resources/epub3/09-media-overlays/files/mediaoverlays-playback-active-class-style-not-found-error/EPUB/nav.xhtml create mode 100644 src/test/resources/epub3/09-media-overlays/files/mediaoverlays-playback-active-class-style-not-found-error/EPUB/package.opf create mode 100644 src/test/resources/epub3/09-media-overlays/files/mediaoverlays-playback-active-class-style-not-found-error/META-INF/container.xml create mode 100644 src/test/resources/epub3/09-media-overlays/files/mediaoverlays-playback-active-class-style-not-found-error/mimetype create mode 100644 src/test/resources/epub3/D-vocabularies/files/mediaoverlays-active-class-more-than-once-error.opf create mode 100644 src/test/resources/epub3/D-vocabularies/files/mediaoverlays-playback-active-class-more-than-once-error.opf diff --git a/src/main/java/com/adobe/epubcheck/css/CSSHandler.java b/src/main/java/com/adobe/epubcheck/css/CSSHandler.java index fc8051931..4b4ad4594 100644 --- a/src/main/java/com/adobe/epubcheck/css/CSSHandler.java +++ b/src/main/java/com/adobe/epubcheck/css/CSSHandler.java @@ -9,7 +9,9 @@ import org.idpf.epubcheck.util.css.CssContentHandler; import org.idpf.epubcheck.util.css.CssErrorHandler; import org.idpf.epubcheck.util.css.CssExceptions.CssException; +import org.idpf.epubcheck.util.css.CssGrammar; import org.idpf.epubcheck.util.css.CssGrammar.CssAtRule; +import org.idpf.epubcheck.util.css.CssGrammar.CssComposedConstruct; import org.idpf.epubcheck.util.css.CssGrammar.CssConstruct; import org.idpf.epubcheck.util.css.CssGrammar.CssDeclaration; import org.idpf.epubcheck.util.css.CssGrammar.CssSelector; @@ -201,6 +203,43 @@ public void endAtRule(String name) @Override public void selectors(List selectors) { + for (CssSelector selector : selectors) + { + if (!context.featureReport.hasFeature(FeatureEnum.MEDIA_OVERLAYS_ACTIVE_CLASS) + && findClassName(selector, ".-epub-media-overlay-active")) + { + report.message(MessageId.CSS_029, + getCorrectedEPUBLocation(selector.getLocation().getLine(), + selector.getLocation().getColumn(), selector.toCssString()), + "-epub-media-overlay-active", "media:active-class"); + } + if (!context.featureReport.hasFeature(FeatureEnum.MEDIA_OVERLAYS_PLAYBACK_ACTIVE_CLASS) + && findClassName(selector, ".-epub-media-overlay-playing")) + { + report.message(MessageId.CSS_029, + getCorrectedEPUBLocation(selector.getLocation().getLine(), + selector.getLocation().getColumn(), selector.toCssString()), + "-epub-media-overlay-playing", "media:playback-active-class"); + } + } + } + + private boolean findClassName(CssConstruct construct, String name) + { + if (construct.getType() == CssGrammar.CssConstruct.Type.CLASSNAME + && name.equals(construct.toCssString())) + { + return true; + + } + else if (construct instanceof CssComposedConstruct) + { + for (CssConstruct component : ((CssComposedConstruct) construct).getComponents()) + { + if (findClassName(component, name)) return true; + } + } + return false; } @Override diff --git a/src/main/java/com/adobe/epubcheck/messages/DefaultSeverities.java b/src/main/java/com/adobe/epubcheck/messages/DefaultSeverities.java index 309c1f5eb..deedf5ddc 100644 --- a/src/main/java/com/adobe/epubcheck/messages/DefaultSeverities.java +++ b/src/main/java/com/adobe/epubcheck/messages/DefaultSeverities.java @@ -91,6 +91,8 @@ private void initialize() severities.put(MessageId.CSS_024, Severity.SUPPRESSED); severities.put(MessageId.CSS_025, Severity.SUPPRESSED); severities.put(MessageId.CSS_028, Severity.USAGE); + severities.put(MessageId.CSS_029, Severity.USAGE); + severities.put(MessageId.CSS_030, Severity.ERROR); // HTML severities.put(MessageId.HTM_001, Severity.ERROR); diff --git a/src/main/java/com/adobe/epubcheck/messages/MessageId.java b/src/main/java/com/adobe/epubcheck/messages/MessageId.java index 6219080ca..340db9aaf 100644 --- a/src/main/java/com/adobe/epubcheck/messages/MessageId.java +++ b/src/main/java/com/adobe/epubcheck/messages/MessageId.java @@ -85,6 +85,8 @@ public enum MessageId implements Comparable CSS_024("CSS-024"), CSS_025("CSS-025"), CSS_028("CSS-028"), + CSS_029("CSS-029"), + CSS_030("CSS-030"), // Messages relating to xhtml markup HTM_001("HTM-001"), diff --git a/src/main/java/com/adobe/epubcheck/opf/OPFHandler30.java b/src/main/java/com/adobe/epubcheck/opf/OPFHandler30.java index 0274e357c..c717a0541 100644 --- a/src/main/java/com/adobe/epubcheck/opf/OPFHandler30.java +++ b/src/main/java/com/adobe/epubcheck/opf/OPFHandler30.java @@ -566,6 +566,24 @@ private void processMeta() { metadataBuilders.peekFirst().meta(e.getAttribute("id"), prop.get(), (String) e.getPrivateData(), e.getAttribute("refines")); + + // Primary metadata checks + if (metadataBuilders.size() == 1) + { + switch (prop.get().getPrefixedName()) + { + case "media:active-class": + context.featureReport.report(FeatureEnum.MEDIA_OVERLAYS_ACTIVE_CLASS, location(), + e.getPrivateData().toString()); + break; + case "media:playback-active-class": + context.featureReport.report(FeatureEnum.MEDIA_OVERLAYS_PLAYBACK_ACTIVE_CLASS, location(), + e.getPrivateData().toString()); + break; + default: + break; + } + } } // just parse the scheme for vocab errors diff --git a/src/main/java/com/adobe/epubcheck/ops/OPSHandler.java b/src/main/java/com/adobe/epubcheck/ops/OPSHandler.java index c851d655d..3a9098593 100755 --- a/src/main/java/com/adobe/epubcheck/ops/OPSHandler.java +++ b/src/main/java/com/adobe/epubcheck/ops/OPSHandler.java @@ -51,6 +51,7 @@ public class OPSHandler extends XMLHandler protected boolean hasTh = false; protected boolean hasThead = false; protected boolean hasCaption = false; + protected boolean hasCSS = false; protected boolean epubTypeInUse = false; protected StringBuilder textNode; protected Stack elementLocationStack = new Stack(); @@ -94,10 +95,13 @@ protected void checkLink() XMLElement e = currentElement(); URL href = checkURL(e.getAttribute("href")); String rel = e.getAttribute("rel"); - if (xrefChecker.isPresent() && href != null && rel != null + if (href != null && rel != null && rel.toLowerCase(Locale.ROOT).contains("stylesheet")) { - xrefChecker.get().registerReference(href, XRefChecker.Type.STYLESHEET, location()); + this.hasCSS = true; + if (xrefChecker.isPresent()) { + xrefChecker.get().registerReference(href, XRefChecker.Type.STYLESHEET, location()); + } } } @@ -365,6 +369,7 @@ public void endElement() String style = textNode.toString(); if (style.length() > 0) { + this.hasCSS = true; new CSSChecker(context, style, currentLocation.getLine(), false).check(); } textNode = null; diff --git a/src/main/java/com/adobe/epubcheck/ops/OPSHandler30.java b/src/main/java/com/adobe/epubcheck/ops/OPSHandler30.java index 0def5866f..544fe226b 100644 --- a/src/main/java/com/adobe/epubcheck/ops/OPSHandler30.java +++ b/src/main/java/com/adobe/epubcheck/ops/OPSHandler30.java @@ -815,6 +815,7 @@ public void endElement() String name = e.getName(); if (openElements == 0 && (name.equals("html") || name.equals("svg"))) { + checkOverlaysStyles(); checkProperties(); } else if (name.equals("object")) @@ -902,6 +903,17 @@ protected void checkFallback(String elementType) } } + protected void checkOverlaysStyles() + { + if (context.opfItem.isPresent() && context.opfItem.get().getMediaOverlay() != null + && (context.featureReport.hasFeature(FeatureEnum.MEDIA_OVERLAYS_ACTIVE_CLASS) + || context.featureReport.hasFeature(FeatureEnum.MEDIA_OVERLAYS_PLAYBACK_ACTIVE_CLASS)) + && !this.hasCSS) + { + report.message(MessageId.CSS_030, location()); + } + } + protected void checkProperties() { if (!context.container.isPresent()) // single file validation diff --git a/src/main/java/com/adobe/epubcheck/util/FeatureEnum.java b/src/main/java/com/adobe/epubcheck/util/FeatureEnum.java index 656af3ce9..c0f1ce7d2 100644 --- a/src/main/java/com/adobe/epubcheck/util/FeatureEnum.java +++ b/src/main/java/com/adobe/epubcheck/util/FeatureEnum.java @@ -64,6 +64,8 @@ public enum FeatureEnum LOI("list of illustrations"), LOT("list of tables"), LOV("list of videos"), + MEDIA_OVERLAYS_ACTIVE_CLASS("media:active-class"), + MEDIA_OVERLAYS_PLAYBACK_ACTIVE_CLASS("media:playback-active-class"), MODIFIED_DATE("modification date"), NAVIGATION_ORDER("navigation order"), PAGE_BREAK("epub:page-break"), diff --git a/src/main/java/org/idpf/epubcheck/util/css/CssGrammar.java b/src/main/java/org/idpf/epubcheck/util/css/CssGrammar.java index 96e958ba1..76ad868a2 100644 --- a/src/main/java/org/idpf/epubcheck/util/css/CssGrammar.java +++ b/src/main/java/org/idpf/epubcheck/util/css/CssGrammar.java @@ -130,7 +130,7 @@ public enum Type /** * A CssConstruct that is composed by a single token. */ - static abstract class CssAtomicConstruct extends CssConstruct + public static abstract class CssAtomicConstruct extends CssConstruct { final String value; @@ -434,7 +434,7 @@ public String toString() * A CssConstruct that is composed a list of atomic and/or composed CssConstructs, * and optionally a name. */ - static abstract class CssComposedConstruct extends CssConstruct + public static abstract class CssComposedConstruct extends CssConstruct { final List components; final Optional name; diff --git a/src/main/resources/com/adobe/epubcheck/messages/MessageBundle.properties b/src/main/resources/com/adobe/epubcheck/messages/MessageBundle.properties index 7f07a57dd..1f6abd970 100644 --- a/src/main/resources/com/adobe/epubcheck/messages/MessageBundle.properties +++ b/src/main/resources/com/adobe/epubcheck/messages/MessageBundle.properties @@ -67,6 +67,8 @@ CSS_024_SUG=Remove unused CSS selectors. CSS_025=CSS class Selector could not be found. CSS_025_SUG=Check for typos or define a class selector to document the use of the class. CSS_028=Use of Font-face declaration. +CSS_029=Found CSS class name "%1$s" but no "%2$s" property was declared in the package document. +CSS_030=The package document declares media overlays styling class names but no CSS was found in the content document. #HTM - XHTML related messages HTM_001=Any publication resource that is an XML-based media type must be a valid XML 1.0 document. XML version found: %1$s. diff --git a/src/main/resources/com/adobe/epubcheck/schema/30/package-30.sch b/src/main/resources/com/adobe/epubcheck/schema/30/package-30.sch index b61df1421..033049c5e 100644 --- a/src/main/resources/com/adobe/epubcheck/schema/30/package-30.sch +++ b/src/main/resources/com/adobe/epubcheck/schema/30/package-30.sch @@ -417,14 +417,24 @@ + + The 'active-class' property must not occur more than one time in the package + metadata. + @refines must not be used with the media:active-class property + the 'active-class' property must define a single class name + + The 'playback-active-class' property must not occur more than one time in the package + metadata. + @refines must not be used with the media:playback-active-class property + the 'playback-active-class' property must define a single class name diff --git a/src/test/resources/epub3/09-media-overlays/files/mediaoverlays-active-class-inline-valid/EPUB/content_001.mp3 b/src/test/resources/epub3/09-media-overlays/files/mediaoverlays-active-class-inline-valid/EPUB/content_001.mp3 new file mode 100644 index 0000000000000000000000000000000000000000..3f140bbc4f2bba4396e38c140245d027a5aa5681 GIT binary patch literal 10363 zcmeI%XH*ki+bG}=T0lAhL5g(g5PA~`Jrt!&lO|n2s(>x@j?^F^y@T{Fy?2!+2uSY; zDn&Y(L!Ng%-#PDE&-%_;XT3ka`H^H#lDYRa``&wI??EUD0P2T5Rt!^%+(iv)?P2<))_ZYOPqz|Xgj@X zYm`d>Yal1=z?RdOQlMX;B+AT?E*ipA=_@}{te@(@W`8K;J%El>%26BpjsfNW9cTss zyr5w@007juWT(Z1<*e)7dWLz6va9LbqF(qIU&a%2ovcn}eoSU6On8NFyE7C)Y zV$);^sy100Dy|{0n+OHlO!SvUjy=|?a$_- ztJm&;;Yt2n<34a$m@u@t9;iboH5hE2Ga*M2rXystE4%SXOv2j>yPMGS`Qq7pPkm06 zG*ReERA;&uUWm1a+AmU^>hI=^F}Lt0Js^wUdZsX-pEP=NURY@kAor|K8U=}O`rav+ zf0nzc`pO)|Mt*^R-3jm`|C?k^KGrQON$q;>;oR{gk=J(AkopjOZu^#8P)3zy9AS-S zo)#iNr#8Rs9nZ_Hh>#bdMOvRm$|BEZ+ZG#zFrY2Yr-tbZvqsn{LX*wTgF=~duq2IJ zFj?hH)D>!RBh|ro!^>>yX=aIrxII_)DPI^x2hci*Pw{14Tl= zcXi1tk&c9uhi@=dX_AqFRg`+Bj6a9GlK+DN<`9o3UW3Tu;%Hm0 zeS8*~GauXdyIw$J163&u4n4M8nYoaY!_SVA`vq>(7?+aOW9Mc}HJpTIE{KfHb`y?2 z_+qoQb$<5?fM%V5)Po#egF3zSoV@pHuOwHYE=Z7FWIRP4ixwQSddMcgf7i~iq7?3^N+JpQzBRC5x?Aq=3!s^`8a8I0` zl-$P_G`jyLM`Cxz{t-g}xW_$(fZ7`a;%8!6{Mg=u(_~P$v61Y;Z!TBwA@=kaZMzPP zab)B*TXR)~z0iY5yG=tMLkb0QZx}@9;Uxf!t{8u%FY@-Rr855J%^a?BW!v@E8g_OJ zl@Dl6!p=!oFl*vQ#f>ODB*5F|17Sb}RMp9K)59v!i+jC9LUjc*evhe)i+DBP=xaU^ zW%aBNn9d6V$qu~GzK)zg#u8}8B-5syUvaD62Cj;lNgxunr2zT?mxO!hqSvR(pU1ZX zfMX~R7R)lhD?iUg3X*!yE4vB9Dyp)NT6-dEv?e|L3w#n=wqNA zL0}-Jf4gFx=-_~FefeLY(uOM8&fY`q{=uftX-5xB3I9BquD7O39^T12qF8pBmlG1U z5)M^c4Nun(FAJoQcq|U%fA!@(Fo9$t#OamWO&l8n0A2cmMgTZo@o@JIffQX3;(+`E zA+TE`qO0^NUJo%KLTVUC8M+70SxSZantK?%qFL%wyx#+(t{}v>8*)(EETN&ya`ZFs zU`Z#Wc=3uo=>A}lU*ykuI z&7DfZiSCnd3`CIl!?V@;f4fxvNKWI_XJR3jvqv>;J0M@@7E$7CV~t3Fx%BNJCIwa` z)FVE8FEAiV%6P&mz=#I)^EJKt_u9-7zZkJf!yY4S^X_72{y?8+78d4sNsm;Qr)Z|j z9%q$&i0+Ay_{dt~vyXu95r2F}I`lyu1p=|@lu#mA(h?9Lf8wC^U#!t&x#|MZwqq?> z#c&r4=q}xP!<FnDR|p_!iMlzZJ*C5!a!CJW@^x2xbz-p z*8(kaw)kfANDi2)u-FQAyu*2!{4z*~oODeYuJ~d!(<#aR8Sn>JSDQsMZbK@l9HB%8 zj>mv*QJ1LnVx_2ouy~G}oCv2Una@T^+VWJ*yRcni)vj(A2~-?7Xs1{&QnO~{=!ir_ zi`^zpVZFz>vWfCU0z>?M*O5U*-z1PuylGJZeusG zSf}*d4)6{oR?=@lNX6U9RZ z3_NUbhW#)+e5Ha=0uaQ9^{yoN&Oj(dnt7VpW4qB?}ozHlhAnCME83a+zPBiE&i1mR=*oM8T)G05nin zk8^hh$u6giwOJy#5g48fHY6F?cx=N{V3Y(DQyIj>H> zBs^)Zt_M&e6C4pFAR;ewf1RGs@*~0sI?`~wnA+z90L3lfPOuGj-&ZE87C!2)ny@I4 z%GHP!zumK!Jl@VaTN)PpPf5_1$z8(iQ_{8MWvXqCk`NUctiGhbMmZr$g3LNOBQlT) z0L%m9SiRY~sq&?-bcp&c=7B*ei%Z}SHx~Gf=fl&Q*TWOfB)ia$C?zBVI&pB$n5BB@_daXOn*O*&=*3HcfI?_olpH-PXHRraMybAd2?q7WfDmXWR93lh3xZbij zJsW!DsQhMlQuj&`7L2;!P^XUhpzp0-jM})2^ArC*|BRi3bG`eiZ>-)_?E-uqE;-Q7 zJtEH2exM=09t%k;4sldvYfy{$&Cf2+zjACKTpe!wgx4MeqJl~}Et)9wvAjdDBX(^@ z&KBodXn&)$oAv2*roTddc4Vo10G8CNO9!-#XTPw`Ik_zU454!|0Wym3{{ZX{h%Ocd zzPr!6Ob-s)LDF_Lg4fgu?xE=@<(~1Fm8-BYx4+_-V8DQwpjOSBX0Tv$|EcUivQ)3u zU_1llx^zPf&qd|_AO0zP{u*@>s!-qBsC4fT8$P9IU}ihM=8qGK`yzS4XU1p<#{8B2 z9s@~u-)tMrY-(gpf+^qQZ=>Im1hKbSgCN$r67M-MATG+%v=a+O2e7+nGnbF9Ch+Gq z0@$B9F%ff`D}5{gTDV_6Oq(Xi>6B)$f@t2QY zU+85otp?|oE)x$ZzGa~wR#)HsJ&X1g4n>@R88IL+=0wJvtRN%sl%b~%OVT8J6r2kh ztIeF4sSbkANlo8-DQ8Hx<`$?_=*q2TROXB$e+&i*HWL$Lfufy|KpL=GVu3~ijarG^ zgv2hFBTOk$1HMZDa6tuz(2#*~ARvW942Y1rCe7<{fCEVPvr5N#&$H2(c*Uz$4YqpZ zb{gtkG=a4$a4;vSsS5GX7#3g!fQTw6OMG@_Vi>t&m8nv%`#lQ)xONf};-aOA)n3n% zPhis|H19w|eNoN?HjQ{wSel`kH+R7|!#0JLD-Gq41c-z<&>uof9uF~cG>Y_)5EEHx zA|}wfj&aelk@$5!X^*@b)+{48(Tva%A z7bRCh8MiO4b29gOB{z>#S=kJF4FjSlmxBKWsi{h!t*&nB28{BgCDtN)lsFZ|p85uM z^fD7tVSzI?vd;KcnP9&TI2|PZ_XMr<|8>KFg#Vro{llOBKMwg1M=34EfZqN$aZ3Ml zf&PyP-al03KNm-#H}8Ky|8R!?Z@Vxl_g_=+fB5nLw9r4C6wEG6ANp@o4ql?|`Zi!D zT^Ud0#WjW46aPDs%=$Z-V=7lnbPGRiOPF)gHUUDqaWZ@1Z!~U}Nye$;q1(jt{bDu_ zD`ioejeIE%&TeUz;s4e`p7ajW#Qx5SF@h{XohcwrLdk)rjC=p9+N*L#@gwKt5HGKq?xwX(u0XByNYx9c|ypUVDw!W2e#0$CbCZ<8!@ieD%qV#m z0%DJpV`E`q4%UVf#-`Adcx9vRL7}j+d$l8agRq|L^(>E_K}?*z+bQKuSZ1AALgZ6H z^Bn-}=d<>i830%Vlw#LzuFSxJd_YfzIubZ7Sttk@xK+?`nK)j+0vckQ_&uS`tS;C# z85fi!KM0c#5==Q-*W8Ue>#F)~w8Fs^V`Hmy1j8lUQo@|LZR!^aY*?u&AQfxV^UrTO z6tmqVmft)+@TMo?YKmVD%^sD<2KH6oJ8B|Q9*kX`CMw_o@LhaI-)67xQ?f7uthU6*0hdUnK^#&GAybtl@>~$oUNNxD-1Pw%<8z z6maLySon|Bs^;H{)7#G=PgqhKac#nLKhoe>;*uu0m(bSnUve2{`w!3S)&UnNZBKS> zUwvCsvpWwS9a_sR{MZT%WOL_N@TcHMbbwoKX5b3FCD8DTU9q9yex4n~GB)~6{Oxzm zT%rQs%Nn28TBv<^W2LWSb&_n70mzoiuaeIw`ZSLZdl||uUAT@y%%aM@_wtKTz*TZp zS`0E4*3nwyqU&} z4*D%K{%DG3KBAi$0=`-(}L~dqfqNL0CSN zb0P_g=pFy+nZYAlt2vJyceX!*9Y9w$ZZHNkLRod#K;1RGOe}C>g>&yA07RGj1f6`3 z%)y3pjND|8ktGcO#2^mDUpnKiLF_=qlkvFrTd|tH27^CUHK22#r*hU6P8RIzipCuuU<<+|B049 z(H$fv?yPyQn>d~)4oq;l2rxhdgNWiA_P<+_X~v;a`#d;;ttb?%pO@39q5|G6A&mNY zZDpUJ?5b@G7N|$@;VnD~VPwi%tE#IO;;s%Z9BJ2#>e$@3zNz^F_F5C=3z@L{j z&^;eK`hKj!h~7}SYa6JuI0~d6&z9Hv{C3wk^bTPH8@~kP%D$-Z3wi4W$46-f#Gmh8 z#Ht@ZA98qS0TKtgZTA5TX!o{4_t=SF@S&Xv%l)4~+XrLBeWf_ufM)TVFzAVCFVB+U zKqUbm^p>EM{0eU84MuFeNhwskrsdMpAI*|7(+zj|5yB+>VvUhVgYee8vJcFFe7Mht zyg&_3cwHRe;C~AP+NN%@ zCaYF+CUWro>jJ(*wc0=1E{tP{jkw4ZzH{f>YQp8KN?pyJRRhD4=p||XC#?xYzQ=FB z?WpJ5hxoSpyh{UG(|q5dZ`oRCJbQnE;Pp9R?kf0kS9gday0YBiB#0fvNXy^^lVqmp zWIt9iCngoG50rl*LrF%Em+(z1%-@LFRLh5LJjpDaptY2#d*FT))DGNR=HKt0HjIO~ zs7nwWA;h%MI(y)YLyK5naMQVOjtqp^StKgnQjq?$9!k?fdy=>Rky6b0@~LabI!>Q; zg=~5B*M8+E1IJ%aX@AU}O_w`X9x;lF1D|D))1m-y_x8w)JI!+t=&4H!t9!j(gVCO~ zsHC4722{d+$en?D?+Zd{vVY<|-xW1;j|@ywnS*$cdFw;;gjsYFR!bPx5bGKba|p60 z^*(XQIP_0`iqw{cgj0+eE}k=H`FKr!Mecmn^v;qq|DxRY_4<2T*1Q0KzIV|gk_GIb zs{YTnAg2?D2=CJvC(bLzwu1D=Vf0JOj?#wsUp)2|CdgszDwY5HZEg z$Zq};N37WXmCz!`V!mD^AK<>(HXPu9dcxyy?%E+PC9|hnPaNVWAc7#-8=eab(N_m9 z$R^%>m?(8M$U05eiYl$@Jpnjfk^w%l|Odr%7qI`x`&e5h5%hR3<5Ub?Uq9}FZ!Fz$oet8!Fl#A}%8jjv8F9HBvc+~g8Gq}cPlAMY8MpXKzYE2k*uucpf|vpf3@(Z)nY_9?E_$k$s%x(nC!BBSdxGO8g_iR+e-^Al4}vlm#CYnI47#sZ(B*9-7Omr-KEa zXD#u^fk2Y&lDHBYm~L}=jr`O&j?*wP==q>{o@PbGhqdEJ4)pEj#ag6CnL?117HY^| z6WySSZ_h*sQCGGhl$dC?8X@YaZ_`mvZ4OI)E*%u0blHjl8BkcSk%&Q5&=56R9+75)3Y&XL)%jZVTflr2nDq);Qrwl$m(=m~563I3M z6H|C7JME%`6ogq*Q~X?-{lbS5$!f?ajdLl8&L#%r2?cvBL1}tlJu2XGgJ{m^a;k<5 z2WF2wudT3wg~-Xb&4_8gRR`tERBV=9hk<;z7de3M+@er7QKpySLP`$W# z`|Kut-ezNx=tKhAy(bI+3L{d-rGGv8Oks}{nzl&w1!J2TuEN!~TtSU^cbcG7pJ8)_$rfF#s2>B%QdRopadR{Imv9$3c&-K2r`1%Q5CFQLFxZv`Y zbeJ)H1}Mn{PTJLsPkQW%ZOiu8gEceuBk-q=SR;^^ArFJfO!JZF7W)>r*Mqr8w>*T( z<^amO^w&+N?ErvXBmkVhlo?C$0G37@)^t>mK+nRE&c_*p!nY&xAc{oY;RS!XT;6Pk z%`Shtth`UCiFm)(Ek{cSY)lI=(aly&A!F4*tdQY|-xpZ@-&`0!GOXtw9p}ZL=Ng1A z?iBYIuT^^2eZL3n_W;Y*vK=1+$CH+lO}mEx=^>bA(*? zAHzOAJGJP%m7AMjg_}5Cp*Iikj6mLByWKSf3ln}y6G^_8B<$x9v1D!VulD$`XT3OC zc!*-aiG!QNMbg)N63Ft#2`MTb-*b%a`1GIw5RK|M6PH8I)Vp$!8ebrR=~!U+ChLB< zD<@asj>T7bbz(q-RB*xhVms zh;ElCOd+FQSv$v%zGjx1p z21v4yU-i3ck$*lTyE*hP&h>05V3t8ey9Y8wh{`{KF&CsA!<^&_x$1?v+#oD5pMRws zg0a)!rn5$DlZCi}16LC$$*q|2QVfVzTLno@CZAY+Cs3lTmciYd*yO-B8vhqwmRHU96L1$o9f|{(9e~xuHLkO?tC=#8VtN znc+hoh!q}l(-5;S*kEaXlGwmiTjA%UdjyYaYN_~ehk`zgv(W?tVx*i~EWSw}@RT5V z+!%*cm~N#)Qh|WN2A9SIU6j8mkTYuvTr(V&H2}cQ&9t=M-wQ^7PttS85#bk LR + + + + + + + diff --git a/src/test/resources/epub3/09-media-overlays/files/mediaoverlays-active-class-inline-valid/EPUB/content_001.xhtml b/src/test/resources/epub3/09-media-overlays/files/mediaoverlays-active-class-inline-valid/EPUB/content_001.xhtml new file mode 100644 index 000000000..548004b57 --- /dev/null +++ b/src/test/resources/epub3/09-media-overlays/files/mediaoverlays-active-class-inline-valid/EPUB/content_001.xhtml @@ -0,0 +1,19 @@ + + + + + Minimal EPUB + + + +

Loomings

+

Call me Ishmael.

+ + diff --git a/src/test/resources/epub3/09-media-overlays/files/mediaoverlays-active-class-inline-valid/EPUB/nav.xhtml b/src/test/resources/epub3/09-media-overlays/files/mediaoverlays-active-class-inline-valid/EPUB/nav.xhtml new file mode 100644 index 000000000..240745e63 --- /dev/null +++ b/src/test/resources/epub3/09-media-overlays/files/mediaoverlays-active-class-inline-valid/EPUB/nav.xhtml @@ -0,0 +1,14 @@ + + + + + Minimal Nav + + + + + diff --git a/src/test/resources/epub3/09-media-overlays/files/mediaoverlays-active-class-inline-valid/EPUB/package.opf b/src/test/resources/epub3/09-media-overlays/files/mediaoverlays-active-class-inline-valid/EPUB/package.opf new file mode 100644 index 000000000..4fc6162e6 --- /dev/null +++ b/src/test/resources/epub3/09-media-overlays/files/mediaoverlays-active-class-inline-valid/EPUB/package.opf @@ -0,0 +1,22 @@ + + + + Minimal EPUB 3.0 + en + NOID + 2017-06-14T00:00:01Z + 2.5s + 2.5s + -epub-media-overlay-active + -epub-media-overlay-playing + + + + + + + + + + + \ No newline at end of file diff --git a/src/test/resources/epub3/09-media-overlays/files/mediaoverlays-active-class-inline-valid/META-INF/container.xml b/src/test/resources/epub3/09-media-overlays/files/mediaoverlays-active-class-inline-valid/META-INF/container.xml new file mode 100644 index 000000000..318782179 --- /dev/null +++ b/src/test/resources/epub3/09-media-overlays/files/mediaoverlays-active-class-inline-valid/META-INF/container.xml @@ -0,0 +1,6 @@ + + + + + + diff --git a/src/test/resources/epub3/09-media-overlays/files/mediaoverlays-active-class-inline-valid/mimetype b/src/test/resources/epub3/09-media-overlays/files/mediaoverlays-active-class-inline-valid/mimetype new file mode 100644 index 000000000..57ef03f24 --- /dev/null +++ b/src/test/resources/epub3/09-media-overlays/files/mediaoverlays-active-class-inline-valid/mimetype @@ -0,0 +1 @@ +application/epub+zip \ No newline at end of file diff --git a/src/test/resources/epub3/09-media-overlays/files/mediaoverlays-active-class-multiple-class-names-error.opf b/src/test/resources/epub3/09-media-overlays/files/mediaoverlays-active-class-multiple-class-names-error.opf new file mode 100644 index 000000000..cb9b57577 --- /dev/null +++ b/src/test/resources/epub3/09-media-overlays/files/mediaoverlays-active-class-multiple-class-names-error.opf @@ -0,0 +1,21 @@ + + + + Title + en + NOID + 2019-01-01T12:00:00Z + class1 class2 + + 10min + 10min + + + + + + + + + \ No newline at end of file diff --git a/src/test/resources/epub3/09-media-overlays/files/mediaoverlays-active-class-style-not-found-error/EPUB/content_001.mp3 b/src/test/resources/epub3/09-media-overlays/files/mediaoverlays-active-class-style-not-found-error/EPUB/content_001.mp3 new file mode 100644 index 0000000000000000000000000000000000000000..3f140bbc4f2bba4396e38c140245d027a5aa5681 GIT binary patch literal 10363 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 LR + + + + + + + diff --git a/src/test/resources/epub3/09-media-overlays/files/mediaoverlays-active-class-style-not-found-error/EPUB/content_001.xhtml b/src/test/resources/epub3/09-media-overlays/files/mediaoverlays-active-class-style-not-found-error/EPUB/content_001.xhtml new file mode 100644 index 000000000..28757800c --- /dev/null +++ b/src/test/resources/epub3/09-media-overlays/files/mediaoverlays-active-class-style-not-found-error/EPUB/content_001.xhtml @@ -0,0 +1,11 @@ + + + + + Minimal EPUB + + +

Loomings

+

Call me Ishmael.

+ + diff --git a/src/test/resources/epub3/09-media-overlays/files/mediaoverlays-active-class-style-not-found-error/EPUB/nav.xhtml b/src/test/resources/epub3/09-media-overlays/files/mediaoverlays-active-class-style-not-found-error/EPUB/nav.xhtml new file mode 100644 index 000000000..240745e63 --- /dev/null +++ b/src/test/resources/epub3/09-media-overlays/files/mediaoverlays-active-class-style-not-found-error/EPUB/nav.xhtml @@ -0,0 +1,14 @@ + + + + + Minimal Nav + + + + + diff --git a/src/test/resources/epub3/09-media-overlays/files/mediaoverlays-active-class-style-not-found-error/EPUB/package.opf b/src/test/resources/epub3/09-media-overlays/files/mediaoverlays-active-class-style-not-found-error/EPUB/package.opf new file mode 100644 index 000000000..59cf7463f --- /dev/null +++ b/src/test/resources/epub3/09-media-overlays/files/mediaoverlays-active-class-style-not-found-error/EPUB/package.opf @@ -0,0 +1,21 @@ + + + + Minimal EPUB 3.0 + en + NOID + 2017-06-14T00:00:01Z + 2.5s + 2.5s + -epub-media-overlay-active + + + + + + + + + + + \ No newline at end of file diff --git a/src/test/resources/epub3/09-media-overlays/files/mediaoverlays-active-class-style-not-found-error/META-INF/container.xml b/src/test/resources/epub3/09-media-overlays/files/mediaoverlays-active-class-style-not-found-error/META-INF/container.xml new file mode 100644 index 000000000..318782179 --- /dev/null +++ b/src/test/resources/epub3/09-media-overlays/files/mediaoverlays-active-class-style-not-found-error/META-INF/container.xml @@ -0,0 +1,6 @@ + + + + + + diff --git a/src/test/resources/epub3/09-media-overlays/files/mediaoverlays-active-class-style-not-found-error/mimetype b/src/test/resources/epub3/09-media-overlays/files/mediaoverlays-active-class-style-not-found-error/mimetype new file mode 100644 index 000000000..57ef03f24 --- /dev/null +++ b/src/test/resources/epub3/09-media-overlays/files/mediaoverlays-active-class-style-not-found-error/mimetype @@ -0,0 +1 @@ +application/epub+zip \ No newline at end of file diff --git a/src/test/resources/epub3/09-media-overlays/files/mediaoverlays-active-class-stylesheet-undeclared-valid/EPUB/content_001.mp3 b/src/test/resources/epub3/09-media-overlays/files/mediaoverlays-active-class-stylesheet-undeclared-valid/EPUB/content_001.mp3 new file mode 100644 index 0000000000000000000000000000000000000000..3f140bbc4f2bba4396e38c140245d027a5aa5681 GIT binary patch literal 10363 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 LR + + + + + + + diff --git a/src/test/resources/epub3/09-media-overlays/files/mediaoverlays-active-class-stylesheet-undeclared-valid/EPUB/content_001.xhtml b/src/test/resources/epub3/09-media-overlays/files/mediaoverlays-active-class-stylesheet-undeclared-valid/EPUB/content_001.xhtml new file mode 100644 index 000000000..28757800c --- /dev/null +++ b/src/test/resources/epub3/09-media-overlays/files/mediaoverlays-active-class-stylesheet-undeclared-valid/EPUB/content_001.xhtml @@ -0,0 +1,11 @@ + + + + + Minimal EPUB + + +

Loomings

+

Call me Ishmael.

+ + diff --git a/src/test/resources/epub3/09-media-overlays/files/mediaoverlays-active-class-stylesheet-undeclared-valid/EPUB/nav.xhtml b/src/test/resources/epub3/09-media-overlays/files/mediaoverlays-active-class-stylesheet-undeclared-valid/EPUB/nav.xhtml new file mode 100644 index 000000000..240745e63 --- /dev/null +++ b/src/test/resources/epub3/09-media-overlays/files/mediaoverlays-active-class-stylesheet-undeclared-valid/EPUB/nav.xhtml @@ -0,0 +1,14 @@ + + + + + Minimal Nav + + + + + diff --git a/src/test/resources/epub3/09-media-overlays/files/mediaoverlays-active-class-stylesheet-undeclared-valid/EPUB/package.opf b/src/test/resources/epub3/09-media-overlays/files/mediaoverlays-active-class-stylesheet-undeclared-valid/EPUB/package.opf new file mode 100644 index 000000000..a6a4c9dd2 --- /dev/null +++ b/src/test/resources/epub3/09-media-overlays/files/mediaoverlays-active-class-stylesheet-undeclared-valid/EPUB/package.opf @@ -0,0 +1,21 @@ + + + + Minimal EPUB 3.0 + en + NOID + 2017-06-14T00:00:01Z + 2.5s + 2.5s + + + + + + + + + + + + \ No newline at end of file diff --git a/src/test/resources/epub3/09-media-overlays/files/mediaoverlays-active-class-stylesheet-undeclared-valid/EPUB/styles.css b/src/test/resources/epub3/09-media-overlays/files/mediaoverlays-active-class-stylesheet-undeclared-valid/EPUB/styles.css new file mode 100644 index 000000000..2062937c2 --- /dev/null +++ b/src/test/resources/epub3/09-media-overlays/files/mediaoverlays-active-class-stylesheet-undeclared-valid/EPUB/styles.css @@ -0,0 +1,6 @@ +.-epub-media-overlay-active { + background-color: yellow; +} +.-epub-media-overlay-playing { + color: gray; +} \ No newline at end of file diff --git a/src/test/resources/epub3/09-media-overlays/files/mediaoverlays-active-class-stylesheet-undeclared-valid/META-INF/container.xml b/src/test/resources/epub3/09-media-overlays/files/mediaoverlays-active-class-stylesheet-undeclared-valid/META-INF/container.xml new file mode 100644 index 000000000..318782179 --- /dev/null +++ b/src/test/resources/epub3/09-media-overlays/files/mediaoverlays-active-class-stylesheet-undeclared-valid/META-INF/container.xml @@ -0,0 +1,6 @@ + + + + + + diff --git a/src/test/resources/epub3/09-media-overlays/files/mediaoverlays-active-class-stylesheet-undeclared-valid/mimetype b/src/test/resources/epub3/09-media-overlays/files/mediaoverlays-active-class-stylesheet-undeclared-valid/mimetype new file mode 100644 index 000000000..57ef03f24 --- /dev/null +++ b/src/test/resources/epub3/09-media-overlays/files/mediaoverlays-active-class-stylesheet-undeclared-valid/mimetype @@ -0,0 +1 @@ +application/epub+zip \ No newline at end of file diff --git a/src/test/resources/epub3/09-media-overlays/files/mediaoverlays-active-class-stylesheet-valid/EPUB/content_001.mp3 b/src/test/resources/epub3/09-media-overlays/files/mediaoverlays-active-class-stylesheet-valid/EPUB/content_001.mp3 new file mode 100644 index 0000000000000000000000000000000000000000..3f140bbc4f2bba4396e38c140245d027a5aa5681 GIT binary patch literal 10363 zcmeI%XH*ki+bG}=T0lAhL5g(g5PA~`Jrt!&lO|n2s(>x@j?^F^y@T{Fy?2!+2uSY; zDn&Y(L!Ng%-#PDE&-%_;XT3ka`H^H#lDYRa``&wI??EUD0P2T5Rt!^%+(iv)?P2<))_ZYOPqz|Xgj@X zYm`d>Yal1=z?RdOQlMX;B+AT?E*ipA=_@}{te@(@W`8K;J%El>%26BpjsfNW9cTss zyr5w@007juWT(Z1<*e)7dWLz6va9LbqF(qIU&a%2ovcn}eoSU6On8NFyE7C)Y zV$);^sy100Dy|{0n+OHlO!SvUjy=|?a$_- ztJm&;;Yt2n<34a$m@u@t9;iboH5hE2Ga*M2rXystE4%SXOv2j>yPMGS`Qq7pPkm06 zG*ReERA;&uUWm1a+AmU^>hI=^F}Lt0Js^wUdZsX-pEP=NURY@kAor|K8U=}O`rav+ zf0nzc`pO)|Mt*^R-3jm`|C?k^KGrQON$q;>;oR{gk=J(AkopjOZu^#8P)3zy9AS-S zo)#iNr#8Rs9nZ_Hh>#bdMOvRm$|BEZ+ZG#zFrY2Yr-tbZvqsn{LX*wTgF=~duq2IJ zFj?hH)D>!RBh|ro!^>>yX=aIrxII_)DPI^x2hci*Pw{14Tl= zcXi1tk&c9uhi@=dX_AqFRg`+Bj6a9GlK+DN<`9o3UW3Tu;%Hm0 zeS8*~GauXdyIw$J163&u4n4M8nYoaY!_SVA`vq>(7?+aOW9Mc}HJpTIE{KfHb`y?2 z_+qoQb$<5?fM%V5)Po#egF3zSoV@pHuOwHYE=Z7FWIRP4ixwQSddMcgf7i~iq7?3^N+JpQzBRC5x?Aq=3!s^`8a8I0` zl-$P_G`jyLM`Cxz{t-g}xW_$(fZ7`a;%8!6{Mg=u(_~P$v61Y;Z!TBwA@=kaZMzPP zab)B*TXR)~z0iY5yG=tMLkb0QZx}@9;Uxf!t{8u%FY@-Rr855J%^a?BW!v@E8g_OJ zl@Dl6!p=!oFl*vQ#f>ODB*5F|17Sb}RMp9K)59v!i+jC9LUjc*evhe)i+DBP=xaU^ zW%aBNn9d6V$qu~GzK)zg#u8}8B-5syUvaD62Cj;lNgxunr2zT?mxO!hqSvR(pU1ZX zfMX~R7R)lhD?iUg3X*!yE4vB9Dyp)NT6-dEv?e|L3w#n=wqNA zL0}-Jf4gFx=-_~FefeLY(uOM8&fY`q{=uftX-5xB3I9BquD7O39^T12qF8pBmlG1U z5)M^c4Nun(FAJoQcq|U%fA!@(Fo9$t#OamWO&l8n0A2cmMgTZo@o@JIffQX3;(+`E zA+TE`qO0^NUJo%KLTVUC8M+70SxSZantK?%qFL%wyx#+(t{}v>8*)(EETN&ya`ZFs zU`Z#Wc=3uo=>A}lU*ykuI z&7DfZiSCnd3`CIl!?V@;f4fxvNKWI_XJR3jvqv>;J0M@@7E$7CV~t3Fx%BNJCIwa` z)FVE8FEAiV%6P&mz=#I)^EJKt_u9-7zZkJf!yY4S^X_72{y?8+78d4sNsm;Qr)Z|j z9%q$&i0+Ay_{dt~vyXu95r2F}I`lyu1p=|@lu#mA(h?9Lf8wC^U#!t&x#|MZwqq?> z#c&r4=q}xP!<FnDR|p_!iMlzZJ*C5!a!CJW@^x2xbz-p z*8(kaw)kfANDi2)u-FQAyu*2!{4z*~oODeYuJ~d!(<#aR8Sn>JSDQsMZbK@l9HB%8 zj>mv*QJ1LnVx_2ouy~G}oCv2Una@T^+VWJ*yRcni)vj(A2~-?7Xs1{&QnO~{=!ir_ zi`^zpVZFz>vWfCU0z>?M*O5U*-z1PuylGJZeusG zSf}*d4)6{oR?=@lNX6U9RZ z3_NUbhW#)+e5Ha=0uaQ9^{yoN&Oj(dnt7VpW4qB?}ozHlhAnCME83a+zPBiE&i1mR=*oM8T)G05nin zk8^hh$u6giwOJy#5g48fHY6F?cx=N{V3Y(DQyIj>H> zBs^)Zt_M&e6C4pFAR;ewf1RGs@*~0sI?`~wnA+z90L3lfPOuGj-&ZE87C!2)ny@I4 z%GHP!zumK!Jl@VaTN)PpPf5_1$z8(iQ_{8MWvXqCk`NUctiGhbMmZr$g3LNOBQlT) z0L%m9SiRY~sq&?-bcp&c=7B*ei%Z}SHx~Gf=fl&Q*TWOfB)ia$C?zBVI&pB$n5BB@_daXOn*O*&=*3HcfI?_olpH-PXHRraMybAd2?q7WfDmXWR93lh3xZbij zJsW!DsQhMlQuj&`7L2;!P^XUhpzp0-jM})2^ArC*|BRi3bG`eiZ>-)_?E-uqE;-Q7 zJtEH2exM=09t%k;4sldvYfy{$&Cf2+zjACKTpe!wgx4MeqJl~}Et)9wvAjdDBX(^@ z&KBodXn&)$oAv2*roTddc4Vo10G8CNO9!-#XTPw`Ik_zU454!|0Wym3{{ZX{h%Ocd zzPr!6Ob-s)LDF_Lg4fgu?xE=@<(~1Fm8-BYx4+_-V8DQwpjOSBX0Tv$|EcUivQ)3u zU_1llx^zPf&qd|_AO0zP{u*@>s!-qBsC4fT8$P9IU}ihM=8qGK`yzS4XU1p<#{8B2 z9s@~u-)tMrY-(gpf+^qQZ=>Im1hKbSgCN$r67M-MATG+%v=a+O2e7+nGnbF9Ch+Gq z0@$B9F%ff`D}5{gTDV_6Oq(Xi>6B)$f@t2QY zU+85otp?|oE)x$ZzGa~wR#)HsJ&X1g4n>@R88IL+=0wJvtRN%sl%b~%OVT8J6r2kh ztIeF4sSbkANlo8-DQ8Hx<`$?_=*q2TROXB$e+&i*HWL$Lfufy|KpL=GVu3~ijarG^ zgv2hFBTOk$1HMZDa6tuz(2#*~ARvW942Y1rCe7<{fCEVPvr5N#&$H2(c*Uz$4YqpZ zb{gtkG=a4$a4;vSsS5GX7#3g!fQTw6OMG@_Vi>t&m8nv%`#lQ)xONf};-aOA)n3n% zPhis|H19w|eNoN?HjQ{wSel`kH+R7|!#0JLD-Gq41c-z<&>uof9uF~cG>Y_)5EEHx zA|}wfj&aelk@$5!X^*@b)+{48(Tva%A z7bRCh8MiO4b29gOB{z>#S=kJF4FjSlmxBKWsi{h!t*&nB28{BgCDtN)lsFZ|p85uM z^fD7tVSzI?vd;KcnP9&TI2|PZ_XMr<|8>KFg#Vro{llOBKMwg1M=34EfZqN$aZ3Ml zf&PyP-al03KNm-#H}8Ky|8R!?Z@Vxl_g_=+fB5nLw9r4C6wEG6ANp@o4ql?|`Zi!D zT^Ud0#WjW46aPDs%=$Z-V=7lnbPGRiOPF)gHUUDqaWZ@1Z!~U}Nye$;q1(jt{bDu_ zD`ioejeIE%&TeUz;s4e`p7ajW#Qx5SF@h{XohcwrLdk)rjC=p9+N*L#@gwKt5HGKq?xwX(u0XByNYx9c|ypUVDw!W2e#0$CbCZ<8!@ieD%qV#m z0%DJpV`E`q4%UVf#-`Adcx9vRL7}j+d$l8agRq|L^(>E_K}?*z+bQKuSZ1AALgZ6H z^Bn-}=d<>i830%Vlw#LzuFSxJd_YfzIubZ7Sttk@xK+?`nK)j+0vckQ_&uS`tS;C# z85fi!KM0c#5==Q-*W8Ue>#F)~w8Fs^V`Hmy1j8lUQo@|LZR!^aY*?u&AQfxV^UrTO z6tmqVmft)+@TMo?YKmVD%^sD<2KH6oJ8B|Q9*kX`CMw_o@LhaI-)67xQ?f7uthU6*0hdUnK^#&GAybtl@>~$oUNNxD-1Pw%<8z z6maLySon|Bs^;H{)7#G=PgqhKac#nLKhoe>;*uu0m(bSnUve2{`w!3S)&UnNZBKS> zUwvCsvpWwS9a_sR{MZT%WOL_N@TcHMbbwoKX5b3FCD8DTU9q9yex4n~GB)~6{Oxzm zT%rQs%Nn28TBv<^W2LWSb&_n70mzoiuaeIw`ZSLZdl||uUAT@y%%aM@_wtKTz*TZp zS`0E4*3nwyqU&} z4*D%K{%DG3KBAi$0=`-(}L~dqfqNL0CSN zb0P_g=pFy+nZYAlt2vJyceX!*9Y9w$ZZHNkLRod#K;1RGOe}C>g>&yA07RGj1f6`3 z%)y3pjND|8ktGcO#2^mDUpnKiLF_=qlkvFrTd|tH27^CUHK22#r*hU6P8RIzipCuuU<<+|B049 z(H$fv?yPyQn>d~)4oq;l2rxhdgNWiA_P<+_X~v;a`#d;;ttb?%pO@39q5|G6A&mNY zZDpUJ?5b@G7N|$@;VnD~VPwi%tE#IO;;s%Z9BJ2#>e$@3zNz^F_F5C=3z@L{j z&^;eK`hKj!h~7}SYa6JuI0~d6&z9Hv{C3wk^bTPH8@~kP%D$-Z3wi4W$46-f#Gmh8 z#Ht@ZA98qS0TKtgZTA5TX!o{4_t=SF@S&Xv%l)4~+XrLBeWf_ufM)TVFzAVCFVB+U zKqUbm^p>EM{0eU84MuFeNhwskrsdMpAI*|7(+zj|5yB+>VvUhVgYee8vJcFFe7Mht zyg&_3cwHRe;C~AP+NN%@ zCaYF+CUWro>jJ(*wc0=1E{tP{jkw4ZzH{f>YQp8KN?pyJRRhD4=p||XC#?xYzQ=FB z?WpJ5hxoSpyh{UG(|q5dZ`oRCJbQnE;Pp9R?kf0kS9gday0YBiB#0fvNXy^^lVqmp zWIt9iCngoG50rl*LrF%Em+(z1%-@LFRLh5LJjpDaptY2#d*FT))DGNR=HKt0HjIO~ zs7nwWA;h%MI(y)YLyK5naMQVOjtqp^StKgnQjq?$9!k?fdy=>Rky6b0@~LabI!>Q; zg=~5B*M8+E1IJ%aX@AU}O_w`X9x;lF1D|D))1m-y_x8w)JI!+t=&4H!t9!j(gVCO~ zsHC4722{d+$en?D?+Zd{vVY<|-xW1;j|@ywnS*$cdFw;;gjsYFR!bPx5bGKba|p60 z^*(XQIP_0`iqw{cgj0+eE}k=H`FKr!Mecmn^v;qq|DxRY_4<2T*1Q0KzIV|gk_GIb zs{YTnAg2?D2=CJvC(bLzwu1D=Vf0JOj?#wsUp)2|CdgszDwY5HZEg z$Zq};N37WXmCz!`V!mD^AK<>(HXPu9dcxyy?%E+PC9|hnPaNVWAc7#-8=eab(N_m9 z$R^%>m?(8M$U05eiYl$@Jpnjfk^w%l|Odr%7qI`x`&e5h5%hR3<5Ub?Uq9}FZ!Fz$oet8!Fl#A}%8jjv8F9HBvc+~g8Gq}cPlAMY8MpXKzYE2k*uucpf|vpf3@(Z)nY_9?E_$k$s%x(nC!BBSdxGO8g_iR+e-^Al4}vlm#CYnI47#sZ(B*9-7Omr-KEa zXD#u^fk2Y&lDHBYm~L}=jr`O&j?*wP==q>{o@PbGhqdEJ4)pEj#ag6CnL?117HY^| z6WySSZ_h*sQCGGhl$dC?8X@YaZ_`mvZ4OI)E*%u0blHjl8BkcSk%&Q5&=56R9+75)3Y&XL)%jZVTflr2nDq);Qrwl$m(=m~563I3M z6H|C7JME%`6ogq*Q~X?-{lbS5$!f?ajdLl8&L#%r2?cvBL1}tlJu2XGgJ{m^a;k<5 z2WF2wudT3wg~-Xb&4_8gRR`tERBV=9hk<;z7de3M+@er7QKpySLP`$W# z`|Kut-ezNx=tKhAy(bI+3L{d-rGGv8Oks}{nzl&w1!J2TuEN!~TtSU^cbcG7pJ8)_$rfF#s2>B%QdRopadR{Imv9$3c&-K2r`1%Q5CFQLFxZv`Y zbeJ)H1}Mn{PTJLsPkQW%ZOiu8gEceuBk-q=SR;^^ArFJfO!JZF7W)>r*Mqr8w>*T( z<^amO^w&+N?ErvXBmkVhlo?C$0G37@)^t>mK+nRE&c_*p!nY&xAc{oY;RS!XT;6Pk z%`Shtth`UCiFm)(Ek{cSY)lI=(aly&A!F4*tdQY|-xpZ@-&`0!GOXtw9p}ZL=Ng1A z?iBYIuT^^2eZL3n_W;Y*vK=1+$CH+lO}mEx=^>bA(*? zAHzOAJGJP%m7AMjg_}5Cp*Iikj6mLByWKSf3ln}y6G^_8B<$x9v1D!VulD$`XT3OC zc!*-aiG!QNMbg)N63Ft#2`MTb-*b%a`1GIw5RK|M6PH8I)Vp$!8ebrR=~!U+ChLB< zD<@asj>T7bbz(q-RB*xhVms zh;ElCOd+FQSv$v%zGjx1p z21v4yU-i3ck$*lTyE*hP&h>05V3t8ey9Y8wh{`{KF&CsA!<^&_x$1?v+#oD5pMRws zg0a)!rn5$DlZCi}16LC$$*q|2QVfVzTLno@CZAY+Cs3lTmciYd*yO-B8vhqwmRHU96L1$o9f|{(9e~xuHLkO?tC=#8VtN znc+hoh!q}l(-5;S*kEaXlGwmiTjA%UdjyYaYN_~ehk`zgv(W?tVx*i~EWSw}@RT5V z+!%*cm~N#)Qh|WN2A9SIU6j8mkTYuvTr(V&H2}cQ&9t=M-wQ^7PttS85#bk LR + + + + + + + diff --git a/src/test/resources/epub3/09-media-overlays/files/mediaoverlays-active-class-stylesheet-valid/EPUB/content_001.xhtml b/src/test/resources/epub3/09-media-overlays/files/mediaoverlays-active-class-stylesheet-valid/EPUB/content_001.xhtml new file mode 100644 index 000000000..6636c4c72 --- /dev/null +++ b/src/test/resources/epub3/09-media-overlays/files/mediaoverlays-active-class-stylesheet-valid/EPUB/content_001.xhtml @@ -0,0 +1,12 @@ + + + + + Minimal EPUB + + + +

Loomings

+

Call me Ishmael.

+ + diff --git a/src/test/resources/epub3/09-media-overlays/files/mediaoverlays-active-class-stylesheet-valid/EPUB/nav.xhtml b/src/test/resources/epub3/09-media-overlays/files/mediaoverlays-active-class-stylesheet-valid/EPUB/nav.xhtml new file mode 100644 index 000000000..240745e63 --- /dev/null +++ b/src/test/resources/epub3/09-media-overlays/files/mediaoverlays-active-class-stylesheet-valid/EPUB/nav.xhtml @@ -0,0 +1,14 @@ + + + + + Minimal Nav + + + + + diff --git a/src/test/resources/epub3/09-media-overlays/files/mediaoverlays-active-class-stylesheet-valid/EPUB/package.opf b/src/test/resources/epub3/09-media-overlays/files/mediaoverlays-active-class-stylesheet-valid/EPUB/package.opf new file mode 100644 index 000000000..24d2f2667 --- /dev/null +++ b/src/test/resources/epub3/09-media-overlays/files/mediaoverlays-active-class-stylesheet-valid/EPUB/package.opf @@ -0,0 +1,23 @@ + + + + Minimal EPUB 3.0 + en + NOID + 2017-06-14T00:00:01Z + 2.5s + 2.5s + -epub-media-overlay-active + -epub-media-overlay-playing + + + + + + + + + + + + \ No newline at end of file diff --git a/src/test/resources/epub3/09-media-overlays/files/mediaoverlays-active-class-stylesheet-valid/EPUB/styles.css b/src/test/resources/epub3/09-media-overlays/files/mediaoverlays-active-class-stylesheet-valid/EPUB/styles.css new file mode 100644 index 000000000..2062937c2 --- /dev/null +++ b/src/test/resources/epub3/09-media-overlays/files/mediaoverlays-active-class-stylesheet-valid/EPUB/styles.css @@ -0,0 +1,6 @@ +.-epub-media-overlay-active { + background-color: yellow; +} +.-epub-media-overlay-playing { + color: gray; +} \ No newline at end of file diff --git a/src/test/resources/epub3/09-media-overlays/files/mediaoverlays-active-class-stylesheet-valid/META-INF/container.xml b/src/test/resources/epub3/09-media-overlays/files/mediaoverlays-active-class-stylesheet-valid/META-INF/container.xml new file mode 100644 index 000000000..318782179 --- /dev/null +++ b/src/test/resources/epub3/09-media-overlays/files/mediaoverlays-active-class-stylesheet-valid/META-INF/container.xml @@ -0,0 +1,6 @@ + + + + + + diff --git a/src/test/resources/epub3/09-media-overlays/files/mediaoverlays-active-class-stylesheet-valid/mimetype b/src/test/resources/epub3/09-media-overlays/files/mediaoverlays-active-class-stylesheet-valid/mimetype new file mode 100644 index 000000000..57ef03f24 --- /dev/null +++ b/src/test/resources/epub3/09-media-overlays/files/mediaoverlays-active-class-stylesheet-valid/mimetype @@ -0,0 +1 @@ +application/epub+zip \ No newline at end of file diff --git a/src/test/resources/epub3/09-media-overlays/files/mediaoverlays-playback-active-class-multiple-class-names-error.opf b/src/test/resources/epub3/09-media-overlays/files/mediaoverlays-playback-active-class-multiple-class-names-error.opf new file mode 100644 index 000000000..cbb58d04b --- /dev/null +++ b/src/test/resources/epub3/09-media-overlays/files/mediaoverlays-playback-active-class-multiple-class-names-error.opf @@ -0,0 +1,21 @@ + + + + Title + en + NOID + 2019-01-01T12:00:00Z + class1 class2 + + 10min + 10min + + + + + + + + + \ No newline at end of file diff --git a/src/test/resources/epub3/09-media-overlays/files/mediaoverlays-playback-active-class-refines-error.opf b/src/test/resources/epub3/09-media-overlays/files/mediaoverlays-playback-active-class-refines-error.opf index 620b0393e..f6c385508 100644 --- a/src/test/resources/epub3/09-media-overlays/files/mediaoverlays-playback-active-class-refines-error.opf +++ b/src/test/resources/epub3/09-media-overlays/files/mediaoverlays-playback-active-class-refines-error.opf @@ -6,7 +6,7 @@ en NOID 2019-01-01T12:00:00Z - -epub-media-overlay-playing + -epub-media-overlay-playing 10min 10min diff --git a/src/test/resources/epub3/09-media-overlays/files/mediaoverlays-playback-active-class-style-not-found-error/EPUB/content_001.mp3 b/src/test/resources/epub3/09-media-overlays/files/mediaoverlays-playback-active-class-style-not-found-error/EPUB/content_001.mp3 new file mode 100644 index 0000000000000000000000000000000000000000..3f140bbc4f2bba4396e38c140245d027a5aa5681 GIT binary patch literal 10363 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 LR + + + + + + + diff --git a/src/test/resources/epub3/09-media-overlays/files/mediaoverlays-playback-active-class-style-not-found-error/EPUB/content_001.xhtml b/src/test/resources/epub3/09-media-overlays/files/mediaoverlays-playback-active-class-style-not-found-error/EPUB/content_001.xhtml new file mode 100644 index 000000000..28757800c --- /dev/null +++ b/src/test/resources/epub3/09-media-overlays/files/mediaoverlays-playback-active-class-style-not-found-error/EPUB/content_001.xhtml @@ -0,0 +1,11 @@ + + + + + Minimal EPUB + + +

Loomings

+

Call me Ishmael.

+ + diff --git a/src/test/resources/epub3/09-media-overlays/files/mediaoverlays-playback-active-class-style-not-found-error/EPUB/nav.xhtml b/src/test/resources/epub3/09-media-overlays/files/mediaoverlays-playback-active-class-style-not-found-error/EPUB/nav.xhtml new file mode 100644 index 000000000..240745e63 --- /dev/null +++ b/src/test/resources/epub3/09-media-overlays/files/mediaoverlays-playback-active-class-style-not-found-error/EPUB/nav.xhtml @@ -0,0 +1,14 @@ + + + + + Minimal Nav + + + + + diff --git a/src/test/resources/epub3/09-media-overlays/files/mediaoverlays-playback-active-class-style-not-found-error/EPUB/package.opf b/src/test/resources/epub3/09-media-overlays/files/mediaoverlays-playback-active-class-style-not-found-error/EPUB/package.opf new file mode 100644 index 000000000..5893b6b90 --- /dev/null +++ b/src/test/resources/epub3/09-media-overlays/files/mediaoverlays-playback-active-class-style-not-found-error/EPUB/package.opf @@ -0,0 +1,21 @@ + + + + Minimal EPUB 3.0 + en + NOID + 2017-06-14T00:00:01Z + 2.5s + 2.5s + -epub-media-overlay-playing + + + + + + + + + + + \ No newline at end of file diff --git a/src/test/resources/epub3/09-media-overlays/files/mediaoverlays-playback-active-class-style-not-found-error/META-INF/container.xml b/src/test/resources/epub3/09-media-overlays/files/mediaoverlays-playback-active-class-style-not-found-error/META-INF/container.xml new file mode 100644 index 000000000..318782179 --- /dev/null +++ b/src/test/resources/epub3/09-media-overlays/files/mediaoverlays-playback-active-class-style-not-found-error/META-INF/container.xml @@ -0,0 +1,6 @@ + + + + + + diff --git a/src/test/resources/epub3/09-media-overlays/files/mediaoverlays-playback-active-class-style-not-found-error/mimetype b/src/test/resources/epub3/09-media-overlays/files/mediaoverlays-playback-active-class-style-not-found-error/mimetype new file mode 100644 index 000000000..57ef03f24 --- /dev/null +++ b/src/test/resources/epub3/09-media-overlays/files/mediaoverlays-playback-active-class-style-not-found-error/mimetype @@ -0,0 +1 @@ +application/epub+zip \ No newline at end of file diff --git a/src/test/resources/epub3/09-media-overlays/media-overlays.feature b/src/test/resources/epub3/09-media-overlays/media-overlays.feature index a67609eb2..d06245211 100644 --- a/src/test/resources/epub3/09-media-overlays/media-overlays.feature +++ b/src/test/resources/epub3/09-media-overlays/media-overlays.feature @@ -174,6 +174,36 @@ Feature: EPUB 3 — Media Overlays ### 9.3.4 Associating style information + + @spec @xref:sec-docs-assoc-style + Scenario: Verify 'media:active-class' and 'media:playback-active-class' properties referring to classes defined in a stylesheet + Given the reporting level is set to USAGE + When checking EPUB 'mediaoverlays-active-class-stylesheet-valid' + Then usage CSS-029 is reported 0 times + And no errors or warnings are reported + + @spec @xref:sec-docs-assoc-style + Scenario: Verify 'media:active-class' and 'media:playback-active-class' properties referring to classes defined inline + When checking EPUB 'mediaoverlays-active-class-inline-valid' + Then no errors or warnings are reported + + Scenario: Report when well-known class names are found in CSS but not declared in the package document + Given the reporting level is set to USAGE + When checking EPUB 'mediaoverlays-active-class-stylesheet-undeclared-valid' + Then usage CSS-029 is reported 2 times + But no errors or warnings are reported + + @spec @xref:sec-docs-assoc-style + Scenario: Report when 'media:active-class' is defined but no CSS was found in the content document + When checking EPUB 'mediaoverlays-active-class-style-not-found-error' + Then error CSS-030 is reported + And no other errors or warnings are reported + + @spec @xref:sec-docs-assoc-style + Scenario: Report when 'media:playback-active-class' is defined but no CSS was found in the content document + When checking EPUB 'mediaoverlays-playback-active-class-style-not-found-error' + Then error CSS-030 is reported + And no other errors or warnings are reported @spec @xref:sec-docs-assoc-style Scenario: Report a 'media:active-class' property with a refines attribute @@ -189,6 +219,21 @@ Feature: EPUB 3 — Media Overlays And the message contains "must not be used with the media:playback-active-class property" And no other errors or warnings are reported + @spec @xref:sec-docs-assoc-style + Scenario: Report a 'media:active-class' property that defines more than one class + When checking file 'mediaoverlays-active-class-multiple-class-names-error.opf' + Then error RSC-005 is reported + And the message contains "must define a single class name" + And no other errors or warnings are reported + + @spec @xref:sec-docs-assoc-style + Scenario: Report a 'media:playback-active-class' property that defines more than one class + When checking file 'mediaoverlays-playback-active-class-multiple-class-names-error.opf' + Then error RSC-005 is reported + And the message contains "must define a single class name" + And no other errors or warnings are reported + + #Scenario: Detect when media overlays class are declared in the publication but no CSS is found ### 9.3.5 Media overlays packaging diff --git a/src/test/resources/epub3/D-vocabularies/files/mediaoverlays-active-class-more-than-once-error.opf b/src/test/resources/epub3/D-vocabularies/files/mediaoverlays-active-class-more-than-once-error.opf new file mode 100644 index 000000000..add7bed35 --- /dev/null +++ b/src/test/resources/epub3/D-vocabularies/files/mediaoverlays-active-class-more-than-once-error.opf @@ -0,0 +1,22 @@ + + + + Title + en + NOID + 2019-01-01T12:00:00Z + + 0:01:30.200 + 0:01:30.200 + class1 + class2 + + + + + + + + + \ No newline at end of file diff --git a/src/test/resources/epub3/D-vocabularies/files/mediaoverlays-playback-active-class-more-than-once-error.opf b/src/test/resources/epub3/D-vocabularies/files/mediaoverlays-playback-active-class-more-than-once-error.opf new file mode 100644 index 000000000..10dd235df --- /dev/null +++ b/src/test/resources/epub3/D-vocabularies/files/mediaoverlays-playback-active-class-more-than-once-error.opf @@ -0,0 +1,22 @@ + + + + Title + en + NOID + 2019-01-01T12:00:00Z + + 0:01:30.200 + 0:01:30.200 + class1 + class2 + + + + + + + + + \ No newline at end of file diff --git a/src/test/resources/epub3/D-vocabularies/media-overlays.feature b/src/test/resources/epub3/D-vocabularies/media-overlays.feature index 644967d6b..5d9741736 100644 --- a/src/test/resources/epub3/D-vocabularies/media-overlays.feature +++ b/src/test/resources/epub3/D-vocabularies/media-overlays.feature @@ -10,6 +10,15 @@ Feature: EPUB 3 — Vocabularies — Media overlays vocabulary And EPUBCheck with default settings ## D.8 Media Overlays Metadata Vocabulary + + ### D.8.1 active-class + + @spec @xref:sec-active-class + Scenario: Report a 'media:active-class' property defined more than once + When checking file 'mediaoverlays-active-class-more-than-once-error.opf' + Then error RSC-005 is reported + And the message contains "The 'active-class' property must not occur more than one time" + And no other errors or warnings are reported ### D.8.2 duration @@ -30,4 +39,14 @@ Feature: EPUB 3 — Vocabularies — Media overlays vocabulary | RSC-005 | must be a valid SMIL3 clock value | | RSC-005 | must be a valid SMIL3 clock value | | RSC-005 | must be a valid SMIL3 clock value | + And no other errors or warnings are reported + + + ### D.8.1 playback-active-class + + @spec @xref:sec-playback-active-class + Scenario: Report a 'media:playback-active-class' property defined more than once + When checking file 'mediaoverlays-playback-active-class-more-than-once-error.opf' + Then error RSC-005 is reported + And the message contains "The 'playback-active-class' property must not occur more than one time" And no other errors or warnings are reported \ No newline at end of file