diff --git a/src/main/java/com/adobe/epubcheck/messages/DefaultSeverities.java b/src/main/java/com/adobe/epubcheck/messages/DefaultSeverities.java index 2695ecbfc..78dea852e 100644 --- a/src/main/java/com/adobe/epubcheck/messages/DefaultSeverities.java +++ b/src/main/java/com/adobe/epubcheck/messages/DefaultSeverities.java @@ -146,6 +146,10 @@ private void initialize() severities.put(MessageId.MED_007, Severity.ERROR); severities.put(MessageId.MED_008, Severity.ERROR); severities.put(MessageId.MED_009, Severity.ERROR); + severities.put(MessageId.MED_010, Severity.ERROR); + severities.put(MessageId.MED_011, Severity.ERROR); + severities.put(MessageId.MED_012, Severity.ERROR); + severities.put(MessageId.MED_013, Severity.ERROR); // NAV severities.put(MessageId.NAV_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 e13a69d6d..41ebb0ee5 100644 --- a/src/main/java/com/adobe/epubcheck/messages/MessageId.java +++ b/src/main/java/com/adobe/epubcheck/messages/MessageId.java @@ -140,6 +140,10 @@ public enum MessageId implements Comparable MED_007("MED_007"), MED_008("MED-008"), MED_009("MED-009"), + MED_010("MED_010"), + MED_011("MED_011"), + MED_012("MED_012"), + MED_013("MED_013"), // Epub3 based table of content errors NAV_001("NAV-001"), diff --git a/src/main/java/com/adobe/epubcheck/opf/OPFChecker.java b/src/main/java/com/adobe/epubcheck/opf/OPFChecker.java index e0c2ac3fb..2fa135853 100755 --- a/src/main/java/com/adobe/epubcheck/opf/OPFChecker.java +++ b/src/main/java/com/adobe/epubcheck/opf/OPFChecker.java @@ -43,6 +43,7 @@ import com.adobe.epubcheck.ocf.OCFPackage; import com.adobe.epubcheck.opf.ValidationContext.ValidationContextBuilder; import com.adobe.epubcheck.ops.OPSCheckerFactory; +import com.adobe.epubcheck.overlay.OverlayTextChecker; import com.adobe.epubcheck.util.EPUBVersion; import com.adobe.epubcheck.util.FeatureEnum; import com.adobe.epubcheck.util.PathUtil; @@ -114,6 +115,7 @@ public OPFChecker(ValidationContext context) newContext.pubTypes(opfData != null ? opfData.getTypes() : null); newContext.xrefChecker(new XRefChecker(context.ocf.get(), context.report, context.version)); newContext.profile(EPUBProfile.makeOPFCompatible(context.profile, opfData, path, report)); + newContext.overlayTextChecker(new OverlayTextChecker()); } this.context = newContext.build(); diff --git a/src/main/java/com/adobe/epubcheck/opf/OPFChecker30.java b/src/main/java/com/adobe/epubcheck/opf/OPFChecker30.java index cfd4ae982..c3efaa470 100644 --- a/src/main/java/com/adobe/epubcheck/opf/OPFChecker30.java +++ b/src/main/java/com/adobe/epubcheck/opf/OPFChecker30.java @@ -40,6 +40,7 @@ import com.adobe.epubcheck.opf.ResourceCollection.Roles; import com.adobe.epubcheck.ops.OPSCheckerFactory; import com.adobe.epubcheck.overlay.OverlayCheckerFactory; +import com.adobe.epubcheck.overlay.OverlayTextChecker; import com.adobe.epubcheck.util.EPUBVersion; import com.adobe.epubcheck.util.FeatureEnum; import com.adobe.epubcheck.util.PathUtil; @@ -182,6 +183,29 @@ else if (xrefChecker.getTypes(item.getPath()).isEmpty()) } } } + + if (isBlessedItemType(mediatype, version)) { + // check whether media-overlay attribute needs to be specified + OverlayTextChecker overlayTextChecker = context.overlayTextChecker.get(); + String mo = item.getMediaOverlay(); + String docpath = item.getPath(); + if (overlayTextChecker.isReferencedByOverlay(docpath)) { + if (Strings.isNullOrEmpty(mo)) { + // missing media-overlay attribute + report.message(MessageId.MED_010, EPUBLocation.create(path, item.getLineNumber(), item.getColumnNumber(), item.getPath())); + } + else if (!overlayTextChecker.isCorrectOverlay(docpath,mo)) { + // media-overlay attribute references the wrong media overlay + report.message(MessageId.MED_012, EPUBLocation.create(path, item.getLineNumber(), item.getColumnNumber(), item.getPath())); + } + } + else { + if (!Strings.isNullOrEmpty(mo)) { + // referenced overlay does not reference this content document + report.message(MessageId.MED_013, EPUBLocation.create(path, item.getLineNumber(), item.getColumnNumber(), item.getPath())); + } + } + } } @Override diff --git a/src/main/java/com/adobe/epubcheck/opf/OPFHandler.java b/src/main/java/com/adobe/epubcheck/opf/OPFHandler.java index f4492b9a2..a246236fb 100755 --- a/src/main/java/com/adobe/epubcheck/opf/OPFHandler.java +++ b/src/main/java/com/adobe/epubcheck/opf/OPFHandler.java @@ -314,6 +314,9 @@ else if (name.equals("item")) itemBuilders.put(id.trim(), itemBuilder); itemBuildersByPath.put(href, itemBuilder); + String mediaOverlay = e.getAttribute("media-overlay"); + itemBuilder.mediaOverlay(mediaOverlay); + report.info(href, FeatureEnum.UNIQUE_IDENT, id); } } diff --git a/src/main/java/com/adobe/epubcheck/opf/OPFItem.java b/src/main/java/com/adobe/epubcheck/opf/OPFItem.java index 3508df1c2..e281f11b8 100755 --- a/src/main/java/com/adobe/epubcheck/opf/OPFItem.java +++ b/src/main/java/com/adobe/epubcheck/opf/OPFItem.java @@ -54,10 +54,11 @@ public class OPFItem private final boolean scripted; private final boolean linear; private final boolean fixedLayout; + private final String mediaOverlay; private OPFItem(String id, String path, String mimetype, int lineNumber, int columnNumber, Optional fallback, Optional fallbackStyle, Set properties, - boolean ncx, int spinePosition, boolean nav, boolean scripted, boolean linear, boolean fxl) + boolean ncx, int spinePosition, boolean nav, boolean scripted, boolean linear, boolean fxl, String mediaOverlay) { this.id = id; this.path = path; @@ -74,6 +75,7 @@ private OPFItem(String id, String path, String mimetype, int lineNumber, int col this.scripted = scripted; this.linear = linear; this.fixedLayout = fxl; + this.mediaOverlay = mediaOverlay; } /** @@ -240,6 +242,11 @@ public boolean isFixedLayout() return fixedLayout; } + public String getMediaOverlay() + { + return mediaOverlay; + } + @Override public String toString() { @@ -293,6 +300,7 @@ public static final class Builder private boolean linear = true; private int spinePosition = -1; private boolean fxl = false; + private String mediaOverlay; private ImmutableSet.Builder propertiesBuilder = new ImmutableSet.Builder(); /** @@ -339,6 +347,12 @@ public Builder fixedLayout() } + public Builder mediaOverlay(String path) + { + this.mediaOverlay = path; + return this; + } + public Builder ncx() { this.ncx = true; @@ -388,7 +402,7 @@ public OPFItem build() properties, ncx, spinePosition, properties.contains(PackageVocabs.ITEM_VOCAB.get(PackageVocabs.ITEM_PROPERTIES.NAV)), properties.contains(PackageVocabs.ITEM_VOCAB.get(PackageVocabs.ITEM_PROPERTIES.SCRIPTED)), - linear, fxl); + linear, fxl, mediaOverlay); } } } diff --git a/src/main/java/com/adobe/epubcheck/opf/ValidationContext.java b/src/main/java/com/adobe/epubcheck/opf/ValidationContext.java index 5922e0429..9d06e5b66 100644 --- a/src/main/java/com/adobe/epubcheck/opf/ValidationContext.java +++ b/src/main/java/com/adobe/epubcheck/opf/ValidationContext.java @@ -10,6 +10,7 @@ import com.adobe.epubcheck.api.LocalizableReport; import com.adobe.epubcheck.api.Report; import com.adobe.epubcheck.ocf.OCFPackage; +import com.adobe.epubcheck.overlay.OverlayTextChecker; import com.adobe.epubcheck.util.EPUBVersion; import com.adobe.epubcheck.util.GenericResourceProvider; import com.adobe.epubcheck.vocab.Property; @@ -77,6 +78,10 @@ public final class ValidationContext * The cross-reference checker, absent for single-file validation. */ public final Optional xrefChecker; + /** + * The src checker for media overlay text elements, absent for single-file validation + */ + public final Optional overlayTextChecker; /** * The set of 'dc:type' values declared at the OPF level. Guaranteed non-null, * can be empty. @@ -90,7 +95,7 @@ public final class ValidationContext private ValidationContext(String path, String mimeType, EPUBVersion version, EPUBProfile profile, Report report, Locale locale, FeatureReport featureReport, GenericResourceProvider resourceProvider, Optional opfItem, Optional ocf, - Optional xrefChecker, Set pubTypes, Set properties) + Optional xrefChecker, Optional overlayTextChecker, Set pubTypes, Set properties) { super(); this.path = path; @@ -104,6 +109,7 @@ private ValidationContext(String path, String mimeType, EPUBVersion version, EPU this.opfItem = opfItem; this.ocf = ocf; this.xrefChecker = xrefChecker; + this.overlayTextChecker = overlayTextChecker; this.pubTypes = pubTypes; this.properties = properties; } @@ -125,6 +131,7 @@ public static final class ValidationContextBuilder private GenericResourceProvider resourceProvider = null; private OCFPackage ocf = null; private XRefChecker xrefChecker = null; + private OverlayTextChecker overlayTextChecker = null; private Set pubTypes = null; private ImmutableSet.Builder properties = ImmutableSet. builder(); @@ -148,6 +155,7 @@ public ValidationContextBuilder copy(ValidationContext context) resourceProvider = context.resourceProvider; ocf = context.ocf.orNull(); xrefChecker = context.xrefChecker.orNull(); + overlayTextChecker = context.overlayTextChecker.orNull(); pubTypes = context.pubTypes; properties = ImmutableSet. builder().addAll(context.properties); return this; @@ -207,6 +215,12 @@ public ValidationContextBuilder xrefChecker(XRefChecker xrefChecker) return this; } + public ValidationContextBuilder overlayTextChecker(OverlayTextChecker overlayTextChecker) + { + this.overlayTextChecker = overlayTextChecker; + return this; + } + public ValidationContextBuilder pubTypes(Set pubTypes) { this.pubTypes = pubTypes; @@ -243,7 +257,7 @@ public ValidationContext build() profile != null ? profile : EPUBProfile.DEFAULT, report, locale, featureReport != null ? featureReport : new FeatureReport(), resourceProvider, (xrefChecker != null) ? xrefChecker.getResource(path) : Optional. absent(), - Optional.fromNullable(ocf), Optional.fromNullable(xrefChecker), + Optional.fromNullable(ocf), Optional.fromNullable(xrefChecker), Optional.fromNullable(overlayTextChecker), pubTypes != null ? ImmutableSet.copyOf(pubTypes) : ImmutableSet. of(), properties.build()); } diff --git a/src/main/java/com/adobe/epubcheck/overlay/OverlayHandler.java b/src/main/java/com/adobe/epubcheck/overlay/OverlayHandler.java index 02f2de055..c5f9f4217 100644 --- a/src/main/java/com/adobe/epubcheck/overlay/OverlayHandler.java +++ b/src/main/java/com/adobe/epubcheck/overlay/OverlayHandler.java @@ -1,5 +1,6 @@ package com.adobe.epubcheck.overlay; +import java.util.HashSet; import java.util.Map; import java.util.Set; @@ -20,6 +21,7 @@ import com.adobe.epubcheck.xml.XMLElement; import com.adobe.epubcheck.xml.XMLHandler; import com.adobe.epubcheck.xml.XMLParser; +import com.google.common.base.Strings; import com.google.common.collect.ImmutableMap; import com.google.common.collect.ImmutableSet; @@ -40,6 +42,8 @@ public class OverlayHandler implements XMLHandler private Map vocabs = RESERVED_VOCABS; + private Set resourceRefs = new HashSet(); + public OverlayHandler(ValidationContext context, XMLParser parser) { this.context = context; @@ -158,6 +162,14 @@ private void processRef(String ref, XRefChecker.Type type) report.message(MessageId.MED_005, EPUBLocation.create(path, parser.getLineNumber(), parser.getColumnNumber()), ref, mimeType); } } + else { + String uniqueResource = PathUtil.removeFragment(ref); + if (!Strings.isNullOrEmpty(uniqueResource)) { + if (!context.overlayTextChecker.get().add(uniqueResource, context.opfItem.get().getId())) { + report.message(MessageId.MED_011, EPUBLocation.create(path, parser.getLineNumber(), parser.getColumnNumber()), ref); + } + } + } context.xrefChecker.get().registerReference(path, parser.getLineNumber(), parser.getColumnNumber(), ref, type); } @@ -176,6 +188,12 @@ public void characters(char[] chars, int arg1, int arg2) public void endElement() { + XMLElement e = parser.getCurrentElement(); + String name = e.getName(); + if (name.equals("smil")) + { + checkItemReferences(); + } } public void ignorableWhitespace(char[] chars, int arg1, int arg2) @@ -185,4 +203,13 @@ public void ignorableWhitespace(char[] chars, int arg1, int arg2) public void processingInstruction(String arg0, String arg1) { } + + private void checkItemReferences() { + + if(this.resourceRefs.isEmpty()) { + return; + } + + } + } diff --git a/src/main/java/com/adobe/epubcheck/overlay/OverlayTextChecker.java b/src/main/java/com/adobe/epubcheck/overlay/OverlayTextChecker.java new file mode 100644 index 000000000..f69f30bc3 --- /dev/null +++ b/src/main/java/com/adobe/epubcheck/overlay/OverlayTextChecker.java @@ -0,0 +1,35 @@ +package com.adobe.epubcheck.overlay; + +import java.util.Map; +import java.util.HashMap; + +public class OverlayTextChecker { + + private Map refs; + + public OverlayTextChecker() { + refs = new HashMap(); + } + + public boolean add(String ref, String overlay) { + if (!refs.containsKey(ref)) { + refs.put(ref, overlay); + return true; + } + else if (!refs.get(ref).equalsIgnoreCase(overlay)) { + return false; + } + return true; + } + + public boolean isReferencedByOverlay(String path) { + if (path == null || path.equals("")) { + return false; + } + return refs.containsKey(path) ? true : false; + } + + public boolean isCorrectOverlay(String path, String overlay) { + return overlay.equalsIgnoreCase(refs.get(path)) ? true : false; + } +} diff --git a/src/main/resources/com/adobe/epubcheck/messages/MessageBundle.properties b/src/main/resources/com/adobe/epubcheck/messages/MessageBundle.properties index f81bc1628..41cd66183 100644 --- a/src/main/resources/com/adobe/epubcheck/messages/MessageBundle.properties +++ b/src/main/resources/com/adobe/epubcheck/messages/MessageBundle.properties @@ -133,6 +133,10 @@ MED_006=Some browsers do not support rendering SVG images which use a filename i MED_007=Foreign resources can only be referenced from "source" elements with an explicit "type" attribute; found resource "%1$s" of foreign type "%2$s". MED_008=The time specified in the clipBegin attribute must not be after clipEnd. MED_009=The time specified in the clipBegin attribute must not be the same as clipEnd. +MED_010=EPUB Content Documents referenced from a Media Overlay must specify the "media-overlay" attribute. +MED_011=EPUB Content Document referenced from multiple Media Overlay Documents. +MED_012=The "media-overlay" attribute does not match the ID of the Media Overlay that refers to this document. +MED_013=Media Overlay Document referenced from the "media-overlay" attribute does not contain a reference to this Content Document. #NAV EPUB v3 Table of contents NAV_001=The nav file is not supported for EPUB v2. diff --git a/src/test/resources/epub3/files/epub/mediaoverlays-incorrect-overlay-ref-error/EPUB/content.mp3 b/src/test/resources/epub3/files/epub/mediaoverlays-incorrect-overlay-ref-error/EPUB/content.mp3 new file mode 100644 index 000000000..3f140bbc4 Binary files /dev/null and b/src/test/resources/epub3/files/epub/mediaoverlays-incorrect-overlay-ref-error/EPUB/content.mp3 differ diff --git a/src/test/resources/epub3/files/epub/mediaoverlays-incorrect-overlay-ref-error/EPUB/content_001.smil b/src/test/resources/epub3/files/epub/mediaoverlays-incorrect-overlay-ref-error/EPUB/content_001.smil new file mode 100644 index 000000000..910599254 --- /dev/null +++ b/src/test/resources/epub3/files/epub/mediaoverlays-incorrect-overlay-ref-error/EPUB/content_001.smil @@ -0,0 +1,13 @@ + + + + + + + + + + + diff --git a/src/test/resources/epub3/files/epub/mediaoverlays-incorrect-overlay-ref-error/EPUB/content_001.xhtml b/src/test/resources/epub3/files/epub/mediaoverlays-incorrect-overlay-ref-error/EPUB/content_001.xhtml new file mode 100644 index 000000000..28757800c --- /dev/null +++ b/src/test/resources/epub3/files/epub/mediaoverlays-incorrect-overlay-ref-error/EPUB/content_001.xhtml @@ -0,0 +1,11 @@ + + + + + Minimal EPUB + + +

Loomings

+

Call me Ishmael.

+ + diff --git a/src/test/resources/epub3/files/epub/mediaoverlays-incorrect-overlay-ref-error/EPUB/content_002.smil b/src/test/resources/epub3/files/epub/mediaoverlays-incorrect-overlay-ref-error/EPUB/content_002.smil new file mode 100644 index 000000000..3aa2096c7 --- /dev/null +++ b/src/test/resources/epub3/files/epub/mediaoverlays-incorrect-overlay-ref-error/EPUB/content_002.smil @@ -0,0 +1,9 @@ + + + + + + + + diff --git a/src/test/resources/epub3/files/epub/mediaoverlays-incorrect-overlay-ref-error/EPUB/content_002.xhtml b/src/test/resources/epub3/files/epub/mediaoverlays-incorrect-overlay-ref-error/EPUB/content_002.xhtml new file mode 100644 index 000000000..c1cb51cb1 --- /dev/null +++ b/src/test/resources/epub3/files/epub/mediaoverlays-incorrect-overlay-ref-error/EPUB/content_002.xhtml @@ -0,0 +1,11 @@ + + + + + Minimal EPUB + + +

Loomings

+

Call me Ishmael.

+ + diff --git a/src/test/resources/epub3/files/epub/mediaoverlays-incorrect-overlay-ref-error/EPUB/content_003.xhtml b/src/test/resources/epub3/files/epub/mediaoverlays-incorrect-overlay-ref-error/EPUB/content_003.xhtml new file mode 100644 index 000000000..03a5a4c63 --- /dev/null +++ b/src/test/resources/epub3/files/epub/mediaoverlays-incorrect-overlay-ref-error/EPUB/content_003.xhtml @@ -0,0 +1,11 @@ + + + + + Minimal EPUB + + +

Loomings

+

Call me Ishmael.

+ + diff --git a/src/test/resources/epub3/files/epub/mediaoverlays-incorrect-overlay-ref-error/EPUB/nav.xhtml b/src/test/resources/epub3/files/epub/mediaoverlays-incorrect-overlay-ref-error/EPUB/nav.xhtml new file mode 100644 index 000000000..c76461e83 --- /dev/null +++ b/src/test/resources/epub3/files/epub/mediaoverlays-incorrect-overlay-ref-error/EPUB/nav.xhtml @@ -0,0 +1,16 @@ + + + + + Minimal Nav + + + + + diff --git a/src/test/resources/epub3/files/epub/mediaoverlays-incorrect-overlay-ref-error/EPUB/package.opf b/src/test/resources/epub3/files/epub/mediaoverlays-incorrect-overlay-ref-error/EPUB/package.opf new file mode 100644 index 000000000..285a05886 --- /dev/null +++ b/src/test/resources/epub3/files/epub/mediaoverlays-incorrect-overlay-ref-error/EPUB/package.opf @@ -0,0 +1,26 @@ + + + + Minimal EPUB 3.0 + en + NOID + 2017-06-14T00:00:01Z + 5s + 2.5s + 2.5s + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/src/test/resources/epub3/files/epub/mediaoverlays-incorrect-overlay-ref-error/META-INF/container.xml b/src/test/resources/epub3/files/epub/mediaoverlays-incorrect-overlay-ref-error/META-INF/container.xml new file mode 100644 index 000000000..318782179 --- /dev/null +++ b/src/test/resources/epub3/files/epub/mediaoverlays-incorrect-overlay-ref-error/META-INF/container.xml @@ -0,0 +1,6 @@ + + + + + + diff --git a/src/test/resources/epub3/files/epub/mediaoverlays-incorrect-overlay-ref-error/mimetype b/src/test/resources/epub3/files/epub/mediaoverlays-incorrect-overlay-ref-error/mimetype new file mode 100644 index 000000000..57ef03f24 --- /dev/null +++ b/src/test/resources/epub3/files/epub/mediaoverlays-incorrect-overlay-ref-error/mimetype @@ -0,0 +1 @@ +application/epub+zip \ No newline at end of file diff --git a/src/test/resources/epub3/files/epub/mediaoverlays-missing-mo-attr-error/EPUB/content_001.mp3 b/src/test/resources/epub3/files/epub/mediaoverlays-missing-mo-attr-error/EPUB/content_001.mp3 new file mode 100644 index 000000000..3f140bbc4 Binary files /dev/null and b/src/test/resources/epub3/files/epub/mediaoverlays-missing-mo-attr-error/EPUB/content_001.mp3 differ diff --git a/src/test/resources/epub3/files/epub/mediaoverlays-missing-mo-attr-error/EPUB/content_001.smil b/src/test/resources/epub3/files/epub/mediaoverlays-missing-mo-attr-error/EPUB/content_001.smil new file mode 100644 index 000000000..11a9a791c --- /dev/null +++ b/src/test/resources/epub3/files/epub/mediaoverlays-missing-mo-attr-error/EPUB/content_001.smil @@ -0,0 +1,9 @@ + + + + + + + + diff --git a/src/test/resources/epub3/files/epub/mediaoverlays-missing-mo-attr-error/EPUB/content_001.xhtml b/src/test/resources/epub3/files/epub/mediaoverlays-missing-mo-attr-error/EPUB/content_001.xhtml new file mode 100644 index 000000000..28757800c --- /dev/null +++ b/src/test/resources/epub3/files/epub/mediaoverlays-missing-mo-attr-error/EPUB/content_001.xhtml @@ -0,0 +1,11 @@ + + + + + Minimal EPUB + + +

Loomings

+

Call me Ishmael.

+ + diff --git a/src/test/resources/epub3/files/epub/mediaoverlays-missing-mo-attr-error/EPUB/nav.xhtml b/src/test/resources/epub3/files/epub/mediaoverlays-missing-mo-attr-error/EPUB/nav.xhtml new file mode 100644 index 000000000..240745e63 --- /dev/null +++ b/src/test/resources/epub3/files/epub/mediaoverlays-missing-mo-attr-error/EPUB/nav.xhtml @@ -0,0 +1,14 @@ + + + + + Minimal Nav + + + + + diff --git a/src/test/resources/epub3/files/epub/mediaoverlays-missing-mo-attr-error/EPUB/package.opf b/src/test/resources/epub3/files/epub/mediaoverlays-missing-mo-attr-error/EPUB/package.opf new file mode 100644 index 000000000..66adf4ecf --- /dev/null +++ b/src/test/resources/epub3/files/epub/mediaoverlays-missing-mo-attr-error/EPUB/package.opf @@ -0,0 +1,20 @@ + + + + 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/files/epub/mediaoverlays-missing-mo-attr-error/META-INF/container.xml b/src/test/resources/epub3/files/epub/mediaoverlays-missing-mo-attr-error/META-INF/container.xml new file mode 100644 index 000000000..318782179 --- /dev/null +++ b/src/test/resources/epub3/files/epub/mediaoverlays-missing-mo-attr-error/META-INF/container.xml @@ -0,0 +1,6 @@ + + + + + + diff --git a/src/test/resources/epub3/files/epub/mediaoverlays-missing-mo-attr-error/mimetype b/src/test/resources/epub3/files/epub/mediaoverlays-missing-mo-attr-error/mimetype new file mode 100644 index 000000000..57ef03f24 --- /dev/null +++ b/src/test/resources/epub3/files/epub/mediaoverlays-missing-mo-attr-error/mimetype @@ -0,0 +1 @@ +application/epub+zip \ No newline at end of file diff --git a/src/test/resources/epub3/files/epub/mediaoverlays-multiple-overlay-ref-error/EPUB/content_001.mp3 b/src/test/resources/epub3/files/epub/mediaoverlays-multiple-overlay-ref-error/EPUB/content_001.mp3 new file mode 100644 index 000000000..3f140bbc4 Binary files /dev/null and b/src/test/resources/epub3/files/epub/mediaoverlays-multiple-overlay-ref-error/EPUB/content_001.mp3 differ diff --git a/src/test/resources/epub3/files/epub/mediaoverlays-multiple-overlay-ref-error/EPUB/content_001.smil b/src/test/resources/epub3/files/epub/mediaoverlays-multiple-overlay-ref-error/EPUB/content_001.smil new file mode 100644 index 000000000..11a9a791c --- /dev/null +++ b/src/test/resources/epub3/files/epub/mediaoverlays-multiple-overlay-ref-error/EPUB/content_001.smil @@ -0,0 +1,9 @@ + + + + + + + + diff --git a/src/test/resources/epub3/files/epub/mediaoverlays-multiple-overlay-ref-error/EPUB/content_001.xhtml b/src/test/resources/epub3/files/epub/mediaoverlays-multiple-overlay-ref-error/EPUB/content_001.xhtml new file mode 100644 index 000000000..28757800c --- /dev/null +++ b/src/test/resources/epub3/files/epub/mediaoverlays-multiple-overlay-ref-error/EPUB/content_001.xhtml @@ -0,0 +1,11 @@ + + + + + Minimal EPUB + + +

Loomings

+

Call me Ishmael.

+ + diff --git a/src/test/resources/epub3/files/epub/mediaoverlays-multiple-overlay-ref-error/EPUB/content_002.mp3 b/src/test/resources/epub3/files/epub/mediaoverlays-multiple-overlay-ref-error/EPUB/content_002.mp3 new file mode 100644 index 000000000..3f140bbc4 Binary files /dev/null and b/src/test/resources/epub3/files/epub/mediaoverlays-multiple-overlay-ref-error/EPUB/content_002.mp3 differ diff --git a/src/test/resources/epub3/files/epub/mediaoverlays-multiple-overlay-ref-error/EPUB/content_002.smil b/src/test/resources/epub3/files/epub/mediaoverlays-multiple-overlay-ref-error/EPUB/content_002.smil new file mode 100644 index 000000000..fd383ba59 --- /dev/null +++ b/src/test/resources/epub3/files/epub/mediaoverlays-multiple-overlay-ref-error/EPUB/content_002.smil @@ -0,0 +1,13 @@ + + + + + + + + + + + diff --git a/src/test/resources/epub3/files/epub/mediaoverlays-multiple-overlay-ref-error/EPUB/content_002.xhtml b/src/test/resources/epub3/files/epub/mediaoverlays-multiple-overlay-ref-error/EPUB/content_002.xhtml new file mode 100644 index 000000000..c1cb51cb1 --- /dev/null +++ b/src/test/resources/epub3/files/epub/mediaoverlays-multiple-overlay-ref-error/EPUB/content_002.xhtml @@ -0,0 +1,11 @@ + + + + + Minimal EPUB + + +

Loomings

+

Call me Ishmael.

+ + diff --git a/src/test/resources/epub3/files/epub/mediaoverlays-multiple-overlay-ref-error/EPUB/nav.xhtml b/src/test/resources/epub3/files/epub/mediaoverlays-multiple-overlay-ref-error/EPUB/nav.xhtml new file mode 100644 index 000000000..efd4ff1f0 --- /dev/null +++ b/src/test/resources/epub3/files/epub/mediaoverlays-multiple-overlay-ref-error/EPUB/nav.xhtml @@ -0,0 +1,15 @@ + + + + + Minimal Nav + + + + + diff --git a/src/test/resources/epub3/files/epub/mediaoverlays-multiple-overlay-ref-error/EPUB/package.opf b/src/test/resources/epub3/files/epub/mediaoverlays-multiple-overlay-ref-error/EPUB/package.opf new file mode 100644 index 000000000..d83e5c213 --- /dev/null +++ b/src/test/resources/epub3/files/epub/mediaoverlays-multiple-overlay-ref-error/EPUB/package.opf @@ -0,0 +1,25 @@ + + + + Minimal EPUB 3.0 + en + NOID + 2017-06-14T00:00:01Z + 5s + 2.5s + 2.5s + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/src/test/resources/epub3/files/epub/mediaoverlays-multiple-overlay-ref-error/META-INF/container.xml b/src/test/resources/epub3/files/epub/mediaoverlays-multiple-overlay-ref-error/META-INF/container.xml new file mode 100644 index 000000000..318782179 --- /dev/null +++ b/src/test/resources/epub3/files/epub/mediaoverlays-multiple-overlay-ref-error/META-INF/container.xml @@ -0,0 +1,6 @@ + + + + + + diff --git a/src/test/resources/epub3/files/epub/mediaoverlays-multiple-overlay-ref-error/mimetype b/src/test/resources/epub3/files/epub/mediaoverlays-multiple-overlay-ref-error/mimetype new file mode 100644 index 000000000..57ef03f24 --- /dev/null +++ b/src/test/resources/epub3/files/epub/mediaoverlays-multiple-overlay-ref-error/mimetype @@ -0,0 +1 @@ +application/epub+zip \ No newline at end of file diff --git a/src/test/resources/epub3/files/epub/mediaoverlays-no-overlay-ref-error/EPUB/content.mp3 b/src/test/resources/epub3/files/epub/mediaoverlays-no-overlay-ref-error/EPUB/content.mp3 new file mode 100644 index 000000000..3f140bbc4 Binary files /dev/null and b/src/test/resources/epub3/files/epub/mediaoverlays-no-overlay-ref-error/EPUB/content.mp3 differ diff --git a/src/test/resources/epub3/files/epub/mediaoverlays-no-overlay-ref-error/EPUB/content.smil b/src/test/resources/epub3/files/epub/mediaoverlays-no-overlay-ref-error/EPUB/content.smil new file mode 100644 index 000000000..4a617c263 --- /dev/null +++ b/src/test/resources/epub3/files/epub/mediaoverlays-no-overlay-ref-error/EPUB/content.smil @@ -0,0 +1,9 @@ + + + + + + + + diff --git a/src/test/resources/epub3/files/epub/mediaoverlays-no-overlay-ref-error/EPUB/content_001.xhtml b/src/test/resources/epub3/files/epub/mediaoverlays-no-overlay-ref-error/EPUB/content_001.xhtml new file mode 100644 index 000000000..28757800c --- /dev/null +++ b/src/test/resources/epub3/files/epub/mediaoverlays-no-overlay-ref-error/EPUB/content_001.xhtml @@ -0,0 +1,11 @@ + + + + + Minimal EPUB + + +

Loomings

+

Call me Ishmael.

+ + diff --git a/src/test/resources/epub3/files/epub/mediaoverlays-no-overlay-ref-error/EPUB/content_002.xhtml b/src/test/resources/epub3/files/epub/mediaoverlays-no-overlay-ref-error/EPUB/content_002.xhtml new file mode 100644 index 000000000..c1cb51cb1 --- /dev/null +++ b/src/test/resources/epub3/files/epub/mediaoverlays-no-overlay-ref-error/EPUB/content_002.xhtml @@ -0,0 +1,11 @@ + + + + + Minimal EPUB + + +

Loomings

+

Call me Ishmael.

+ + diff --git a/src/test/resources/epub3/files/epub/mediaoverlays-no-overlay-ref-error/EPUB/nav.xhtml b/src/test/resources/epub3/files/epub/mediaoverlays-no-overlay-ref-error/EPUB/nav.xhtml new file mode 100644 index 000000000..efd4ff1f0 --- /dev/null +++ b/src/test/resources/epub3/files/epub/mediaoverlays-no-overlay-ref-error/EPUB/nav.xhtml @@ -0,0 +1,15 @@ + + + + + Minimal Nav + + + + + diff --git a/src/test/resources/epub3/files/epub/mediaoverlays-no-overlay-ref-error/EPUB/package.opf b/src/test/resources/epub3/files/epub/mediaoverlays-no-overlay-ref-error/EPUB/package.opf new file mode 100644 index 000000000..f89ba372b --- /dev/null +++ b/src/test/resources/epub3/files/epub/mediaoverlays-no-overlay-ref-error/EPUB/package.opf @@ -0,0 +1,22 @@ + + + + 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/files/epub/mediaoverlays-no-overlay-ref-error/META-INF/container.xml b/src/test/resources/epub3/files/epub/mediaoverlays-no-overlay-ref-error/META-INF/container.xml new file mode 100644 index 000000000..318782179 --- /dev/null +++ b/src/test/resources/epub3/files/epub/mediaoverlays-no-overlay-ref-error/META-INF/container.xml @@ -0,0 +1,6 @@ + + + + + + diff --git a/src/test/resources/epub3/files/epub/mediaoverlays-no-overlay-ref-error/mimetype b/src/test/resources/epub3/files/epub/mediaoverlays-no-overlay-ref-error/mimetype new file mode 100644 index 000000000..57ef03f24 --- /dev/null +++ b/src/test/resources/epub3/files/epub/mediaoverlays-no-overlay-ref-error/mimetype @@ -0,0 +1 @@ +application/epub+zip \ No newline at end of file diff --git a/src/test/resources/epub3/mediaoverlays-publication.feature b/src/test/resources/epub3/mediaoverlays-publication.feature index 7bde9e62e..1a6bc4201 100644 --- a/src/test/resources/epub3/mediaoverlays-publication.feature +++ b/src/test/resources/epub3/mediaoverlays-publication.feature @@ -12,7 +12,6 @@ Feature: EPUB 3 ▸ Media Overlays ▸ Full Publication Checks Given EPUB test files located at '/epub3/files/epub/' And EPUBCheck with default settings - ## 1. Introduction Scenario: Verify a minimal EPUB 3 publication with Media Overlays @@ -21,6 +20,13 @@ Feature: EPUB 3 ▸ Media Overlays ▸ Full Publication Checks ## 2. Media Overlay Document Definition + + ### 2.2 Content Conformance + + Scenario: Report an EPUB content document that is declared in more than one overlay + When checking EPUB 'mediaoverlays-multiple-overlay-ref-error' + Then error MED-011 is reported + And no other errors or warnings are reported ### The audio Element @@ -28,3 +34,22 @@ Feature: EPUB 3 ▸ Media Overlays ▸ Full Publication Checks When checking EPUB 'mediaoverlays-audio-non-cmt-error' Then error MED-005 is reported And no other errors or warnings are reported + + ## 3. Creating Media Overlays + + ### 3.5.1 Including Media Overlays + + Scenario: Report an EPUB content document referenced from an overlay that is missing its media-overlay attribute + When checking EPUB 'mediaoverlays-missing-mo-attr-error' + Then error MED-010 is reported + And no other errors or warnings are reported + + Scenario: Report an EPUB content document that references the wrong overlay + When checking EPUB 'mediaoverlays-incorrect-overlay-ref-error' + Then error MED-012 is reported + And no other errors or warnings are reported + + Scenario: Report an EPUB content document that declares a media-overlay attribute but is not referenced from the overlay + When checking EPUB 'mediaoverlays-no-overlay-ref-error' + Then error MED-013 is reported + And no other errors or warnings are reported