diff --git a/src/main/java/com/adobe/epubcheck/css/CSSChecker.java b/src/main/java/com/adobe/epubcheck/css/CSSChecker.java index 5f64da66a..fa71a7ed0 100644 --- a/src/main/java/com/adobe/epubcheck/css/CSSChecker.java +++ b/src/main/java/com/adobe/epubcheck/css/CSSChecker.java @@ -45,7 +45,7 @@ public class CSSChecker extends PublicationResourceChecker private int line; // where css string occurs in host private final boolean isStyleAttribute; - private enum Mode + enum Mode { FILE, STRING @@ -94,7 +94,7 @@ protected boolean checkContent() try { - CSSHandler handler = new CSSHandler(context); + CSSHandler handler = new CSSHandler(context, mode); if (this.mode == Mode.STRING && this.line > -1) { handler.setStartingLineNumber(this.line); diff --git a/src/main/java/com/adobe/epubcheck/css/CSSHandler.java b/src/main/java/com/adobe/epubcheck/css/CSSHandler.java index 67397c17b..0899ba9e9 100644 --- a/src/main/java/com/adobe/epubcheck/css/CSSHandler.java +++ b/src/main/java/com/adobe/epubcheck/css/CSSHandler.java @@ -24,6 +24,7 @@ import com.adobe.epubcheck.api.EPUBLocation; import com.adobe.epubcheck.api.Report; +import com.adobe.epubcheck.css.CSSChecker.Mode; import com.adobe.epubcheck.messages.MessageId; import com.adobe.epubcheck.opf.OPFChecker; import com.adobe.epubcheck.opf.OPFChecker30; @@ -43,6 +44,7 @@ public class CSSHandler implements CssContentHandler, CssErrorHandler final ValidationContext context; final Report report; final EPUBVersion version; + final Mode mode; int startingLineNumber = 0; // append to line info from css parser int startingColumnNumber = 0; static final CharMatcher SPACE_AND_QUOTES = CharMatcher.anyOf(" \t\n\r\f\"'").precomputed(); @@ -64,11 +66,12 @@ public class CSSHandler implements CssContentHandler, CssErrorHandler // properties the must be declared on the related OPF item final Set detectedProperties = EnumSet.noneOf(ITEM_PROPERTIES.class); - public CSSHandler(ValidationContext context) + public CSSHandler(ValidationContext context, Mode mode) { this.context = context; this.report = context.report; this.version = context.version; + this.mode = mode; this.urlChecker = new URLChecker(context); } @@ -447,17 +450,21 @@ protected void checkProperties() EPUBLocation.of(context).at(startingLineNumber, startingColumnNumber), PackageVocabs.ITEM_VOCAB.getName(property)); } - - // Check that properties declared in the OPF item were found in the content - Set uncheckedProperties = Sets - .difference(declaredProperties, detectedProperties) - .copyInto(EnumSet.noneOf(ITEM_PROPERTIES.class)); - if (uncheckedProperties.contains(ITEM_PROPERTIES.REMOTE_RESOURCES)) - { - uncheckedProperties.remove(ITEM_PROPERTIES.REMOTE_RESOURCES); - report.message(MessageId.OPF_018, - EPUBLocation.of(context).at(startingLineNumber, startingColumnNumber)); + + if (mode == Mode.FILE) { + // Check that properties declared in the OPF item were found in the content + // We only check this for standalone CSS documents (not CSS inlined in HTML) + Set uncheckedProperties = Sets + .difference(declaredProperties, detectedProperties) + .copyInto(EnumSet.noneOf(ITEM_PROPERTIES.class)); + if (uncheckedProperties.contains(ITEM_PROPERTIES.REMOTE_RESOURCES)) + { + uncheckedProperties.remove(ITEM_PROPERTIES.REMOTE_RESOURCES); + report.message(MessageId.OPF_018, + EPUBLocation.of(context).at(startingLineNumber, startingColumnNumber)); + } } + } public void setStartingLineNumber(int offset) diff --git a/src/test/resources/epub3/05-package-document/files/package-remote-font-in-inline-css-missing-property-error/EPUB/content_001.xhtml b/src/test/resources/epub3/05-package-document/files/package-remote-font-in-inline-css-missing-property-error/EPUB/content_001.xhtml new file mode 100644 index 000000000..054410cf8 --- /dev/null +++ b/src/test/resources/epub3/05-package-document/files/package-remote-font-in-inline-css-missing-property-error/EPUB/content_001.xhtml @@ -0,0 +1,17 @@ + + + + + Minimal EPUB + + + +

Loomings

+

Call me Ishmael.

+ + diff --git a/src/test/resources/epub3/05-package-document/files/package-remote-font-in-inline-css-missing-property-error/EPUB/nav.xhtml b/src/test/resources/epub3/05-package-document/files/package-remote-font-in-inline-css-missing-property-error/EPUB/nav.xhtml new file mode 100644 index 000000000..240745e63 --- /dev/null +++ b/src/test/resources/epub3/05-package-document/files/package-remote-font-in-inline-css-missing-property-error/EPUB/nav.xhtml @@ -0,0 +1,14 @@ + + + + + Minimal Nav + + + + + diff --git a/src/test/resources/epub3/05-package-document/files/package-remote-font-in-inline-css-missing-property-error/EPUB/package.opf b/src/test/resources/epub3/05-package-document/files/package-remote-font-in-inline-css-missing-property-error/EPUB/package.opf new file mode 100644 index 000000000..9515dab81 --- /dev/null +++ b/src/test/resources/epub3/05-package-document/files/package-remote-font-in-inline-css-missing-property-error/EPUB/package.opf @@ -0,0 +1,17 @@ + + + + Minimal EPUB 3.0 + en + NOID + 2017-06-14T00:00:01Z + + + + + + + + + + \ No newline at end of file diff --git a/src/test/resources/epub3/05-package-document/files/package-remote-font-in-inline-css-missing-property-error/META-INF/container.xml b/src/test/resources/epub3/05-package-document/files/package-remote-font-in-inline-css-missing-property-error/META-INF/container.xml new file mode 100644 index 000000000..318782179 --- /dev/null +++ b/src/test/resources/epub3/05-package-document/files/package-remote-font-in-inline-css-missing-property-error/META-INF/container.xml @@ -0,0 +1,6 @@ + + + + + + diff --git a/src/test/resources/epub3/05-package-document/files/package-remote-font-in-inline-css-missing-property-error/mimetype b/src/test/resources/epub3/05-package-document/files/package-remote-font-in-inline-css-missing-property-error/mimetype new file mode 100644 index 000000000..57ef03f24 --- /dev/null +++ b/src/test/resources/epub3/05-package-document/files/package-remote-font-in-inline-css-missing-property-error/mimetype @@ -0,0 +1 @@ +application/epub+zip \ No newline at end of file diff --git a/src/test/resources/epub3/05-package-document/files/package-remote-resource-and-inline-css-valid/EPUB/content_001.xhtml b/src/test/resources/epub3/05-package-document/files/package-remote-resource-and-inline-css-valid/EPUB/content_001.xhtml new file mode 100644 index 000000000..ffd82f624 --- /dev/null +++ b/src/test/resources/epub3/05-package-document/files/package-remote-resource-and-inline-css-valid/EPUB/content_001.xhtml @@ -0,0 +1,17 @@ + + + + + Minimal EPUB + + + +

Loomings

+

Call me Ishmael.

+ + + diff --git a/src/test/resources/epub3/05-package-document/files/package-remote-resource-and-inline-css-valid/EPUB/nav.xhtml b/src/test/resources/epub3/05-package-document/files/package-remote-resource-and-inline-css-valid/EPUB/nav.xhtml new file mode 100644 index 000000000..240745e63 --- /dev/null +++ b/src/test/resources/epub3/05-package-document/files/package-remote-resource-and-inline-css-valid/EPUB/nav.xhtml @@ -0,0 +1,14 @@ + + + + + Minimal Nav + + + + + diff --git a/src/test/resources/epub3/05-package-document/files/package-remote-resource-and-inline-css-valid/EPUB/package.opf b/src/test/resources/epub3/05-package-document/files/package-remote-resource-and-inline-css-valid/EPUB/package.opf new file mode 100644 index 000000000..1f9502b4b --- /dev/null +++ b/src/test/resources/epub3/05-package-document/files/package-remote-resource-and-inline-css-valid/EPUB/package.opf @@ -0,0 +1,17 @@ + + + + Minimal EPUB 3.0 + en + NOID + 2017-06-14T00:00:01Z + + + + + + + + + + \ No newline at end of file diff --git a/src/test/resources/epub3/05-package-document/files/package-remote-resource-and-inline-css-valid/META-INF/container.xml b/src/test/resources/epub3/05-package-document/files/package-remote-resource-and-inline-css-valid/META-INF/container.xml new file mode 100644 index 000000000..318782179 --- /dev/null +++ b/src/test/resources/epub3/05-package-document/files/package-remote-resource-and-inline-css-valid/META-INF/container.xml @@ -0,0 +1,6 @@ + + + + + + diff --git a/src/test/resources/epub3/05-package-document/files/package-remote-resource-and-inline-css-valid/mimetype b/src/test/resources/epub3/05-package-document/files/package-remote-resource-and-inline-css-valid/mimetype new file mode 100644 index 000000000..57ef03f24 --- /dev/null +++ b/src/test/resources/epub3/05-package-document/files/package-remote-resource-and-inline-css-valid/mimetype @@ -0,0 +1 @@ +application/epub+zip \ No newline at end of file diff --git a/src/test/resources/epub3/05-package-document/package-document.feature b/src/test/resources/epub3/05-package-document/package-document.feature index 14eedc812..cf9991e69 100644 --- a/src/test/resources/epub3/05-package-document/package-document.feature +++ b/src/test/resources/epub3/05-package-document/package-document.feature @@ -534,6 +534,12 @@ Feature: EPUB 3 — Package document Then error OPF-014 is reported And no other errors or warnings are reported + @spec @xref:sec-item-resource-properties + Scenario: Report a missing `remote-resources` property when inline CSS has remote references + When checking EPUB 'package-remote-font-in-inline-css-missing-property-error' + Then error OPF-014 is reported + And no other errors or warnings are reported + @spec @xref:sec-item-resource-properties Scenario: Report an SVG using remote fonts without the `remote-resource` property set in the package document When checking EPUB 'package-remote-font-in-svg-missing-property-error' @@ -570,6 +576,12 @@ Feature: EPUB 3 — Package document Then error OPF-014 is reported And no other errors or warnings are reported + @spec @xref:sec-item-resource-properties + Scenario: Verify that inline CSS does not trigger an unrequired `remote-resources` property error + When checking EPUB 'package-remote-resource-and-inline-css-valid' + Then no errors or warnings are reported + + ##### scripted @spec @xref:sec-item-resource-properties