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 000000000..3f140bbc4 Binary files /dev/null and b/src/test/resources/epub3/09-media-overlays/files/mediaoverlays-active-class-inline-valid/EPUB/content_001.mp3 differ diff --git a/src/test/resources/epub3/09-media-overlays/files/mediaoverlays-active-class-inline-valid/EPUB/content_001.smil b/src/test/resources/epub3/09-media-overlays/files/mediaoverlays-active-class-inline-valid/EPUB/content_001.smil new file mode 100644 index 000000000..11a9a791c --- /dev/null +++ b/src/test/resources/epub3/09-media-overlays/files/mediaoverlays-active-class-inline-valid/EPUB/content_001.smil @@ -0,0 +1,9 @@ + + + + + + + + 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 000000000..3f140bbc4 Binary files /dev/null and b/src/test/resources/epub3/09-media-overlays/files/mediaoverlays-active-class-style-not-found-error/EPUB/content_001.mp3 differ diff --git a/src/test/resources/epub3/09-media-overlays/files/mediaoverlays-active-class-style-not-found-error/EPUB/content_001.smil b/src/test/resources/epub3/09-media-overlays/files/mediaoverlays-active-class-style-not-found-error/EPUB/content_001.smil new file mode 100644 index 000000000..11a9a791c --- /dev/null +++ b/src/test/resources/epub3/09-media-overlays/files/mediaoverlays-active-class-style-not-found-error/EPUB/content_001.smil @@ -0,0 +1,9 @@ + + + + + + + + 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 000000000..3f140bbc4 Binary files /dev/null and b/src/test/resources/epub3/09-media-overlays/files/mediaoverlays-active-class-stylesheet-undeclared-valid/EPUB/content_001.mp3 differ diff --git a/src/test/resources/epub3/09-media-overlays/files/mediaoverlays-active-class-stylesheet-undeclared-valid/EPUB/content_001.smil b/src/test/resources/epub3/09-media-overlays/files/mediaoverlays-active-class-stylesheet-undeclared-valid/EPUB/content_001.smil new file mode 100644 index 000000000..11a9a791c --- /dev/null +++ b/src/test/resources/epub3/09-media-overlays/files/mediaoverlays-active-class-stylesheet-undeclared-valid/EPUB/content_001.smil @@ -0,0 +1,9 @@ + + + + + + + + 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 000000000..3f140bbc4 Binary files /dev/null and b/src/test/resources/epub3/09-media-overlays/files/mediaoverlays-active-class-stylesheet-valid/EPUB/content_001.mp3 differ diff --git a/src/test/resources/epub3/09-media-overlays/files/mediaoverlays-active-class-stylesheet-valid/EPUB/content_001.smil b/src/test/resources/epub3/09-media-overlays/files/mediaoverlays-active-class-stylesheet-valid/EPUB/content_001.smil new file mode 100644 index 000000000..11a9a791c --- /dev/null +++ b/src/test/resources/epub3/09-media-overlays/files/mediaoverlays-active-class-stylesheet-valid/EPUB/content_001.smil @@ -0,0 +1,9 @@ + + + + + + + + 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 000000000..3f140bbc4 Binary files /dev/null and b/src/test/resources/epub3/09-media-overlays/files/mediaoverlays-playback-active-class-style-not-found-error/EPUB/content_001.mp3 differ diff --git a/src/test/resources/epub3/09-media-overlays/files/mediaoverlays-playback-active-class-style-not-found-error/EPUB/content_001.smil b/src/test/resources/epub3/09-media-overlays/files/mediaoverlays-playback-active-class-style-not-found-error/EPUB/content_001.smil new file mode 100644 index 000000000..11a9a791c --- /dev/null +++ b/src/test/resources/epub3/09-media-overlays/files/mediaoverlays-playback-active-class-style-not-found-error/EPUB/content_001.smil @@ -0,0 +1,9 @@ + + + + + + + + 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