Skip to content

Commit

Permalink
Upgrade to 5.1.0 with corresponding code changes
Browse files Browse the repository at this point in the history
The following changes were made to support EPUBCheck 5.1.0:
1. New version lists resources with fragments making resource list much longer without reflecting new files in the package. Added logic to remove resources with fragments and only list base URL.
2. EPUBLocation changed slightly, updated code to manage support that change.
3. Some redundant messages were removed, which changed some message counts in tests - fixed message counts to reflect correct output.
4. Update validation version to 3.3 - there is no way to determine the minor version number in an EPUB, so validation is always against whatever the latest is.
5. CREATION_DATE is missing from the report, I've logged an issue and commented out the relevant lines in tests. It will be fixed in the next maintenance release and I will move to 5.1.1 when available to add creation date back in.
6. A file that was being used to test title has flipped from Well Formed and Valid to Well Formed and Not Valid according to current criteria - updated the test to reflect this.
  • Loading branch information
karenhanson committed Nov 15, 2023
1 parent 07cbcd7 commit 5989de2
Show file tree
Hide file tree
Showing 4 changed files with 28 additions and 25 deletions.
2 changes: 1 addition & 1 deletion jhove-ext-modules/pom.xml
Original file line number Diff line number Diff line change
Expand Up @@ -13,7 +13,7 @@

<properties>
<jwat.version>1.0.3</jwat.version>
<epubcheck.version>4.2.6</epubcheck.version>
<epubcheck.version>5.1.0</epubcheck.version>
</properties>

<build>
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -72,6 +72,8 @@ public class JhoveRepInfoReport extends MasterReport {
protected static final String ISO_DATE_PATTERN = "yyyy-MM-dd'T'HH:mm:ss'Z'";
protected static final String FALLBACK_FORMAT = "application/octet-stream";

protected static final String FRAGMENT_START = "#";

public JhoveRepInfoReport(String ePubName) {
this.setEpubFileName(PathUtil.removeWorkingDirectory(ePubName));

Expand Down Expand Up @@ -146,7 +148,8 @@ public void info(String resource, FeatureEnum feature, String value) {
this.references.add(value);
break;
case RESOURCE:
this.resources.add(value);
String no_fragment = value.split(FRAGMENT_START)[0];
this.resources.add(no_fragment);
break;
case DC_LANGUAGE:
this.language = value;
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -74,7 +74,7 @@ public class EpubModuleTest {
private static final String EPUB3_TITLE_ENCODING = "src/test/resources/epub/epub3-multiple-renditions.epub";

private static final String EXPECTED_MEDIATYPE = "application/epub+zip";
private static final String EXPECTED_VERSION_3_2 = "3.2";
private static final String EXPECTED_VERSION_3_3 = "3.3";
private static final String PNG_MIMETYPE = "image/png";
private static final String XHTML_MIMETYPE = "application/xhtml+xml";
private static final String NCX_MIMETYPE = "application/x-dtbncx+xml";
Expand All @@ -99,9 +99,11 @@ public void parseValidEpub3PropertiesTest() throws Exception {
assertEquals(0, info.getMessage().size()); // no errors
assertEquals("EPUB", info.getFormat());
assertEquals(EXPECTED_MEDIATYPE, info.getMimeType());
assertEquals(EXPECTED_VERSION_3_2, info.getVersion());
assertEquals(EXPECTED_VERSION_3_3, info.getVersion());
// these may change, so just check they aren't null
assertNotNull(info.getCreated());
// note: this property is missing in 5.1.0 of epubcheck but
// due for fix in next maintence release, uncomment when fixed.
//assertNotNull(info.getCreated());
assertNotNull(info.getLastModified());

Property metadata = info.getProperty(EPUBMETADATA_KEY);
Expand Down Expand Up @@ -248,7 +250,9 @@ public void parseValidEpub2PropertiesTest() throws Exception {
assertEquals(EXPECTED_MEDIATYPE, info.getMimeType());
assertEquals("2.0.1", info.getVersion());
// may change, so just check it isn't null
assertNotNull(info.getCreated());
// note: this property is missing in 5.1.0 of epubcheck but
// due for fix in next maintence release, uncomment when fixed.
//assertNotNull(info.getCreated());

Property metadata = info.getProperty(EPUBMETADATA_KEY);
Map<String, Object> props = toMap(metadata);
Expand Down Expand Up @@ -397,7 +401,7 @@ public void parseImproperlyCompressedEpubTest() throws Exception {
File epubFile = new File(ZIPPED_EPUB_FILEPATH);
RepInfo info = parseAndCheckValidity(epubFile, RepInfo.FALSE, RepInfo.FALSE);
assertEquals(EXPECTED_MEDIATYPE, info.getMimeType());
assertEquals(EXPECTED_VERSION_3_2, info.getVersion());
assertEquals(EXPECTED_VERSION_3_3, info.getVersion());
assertEquals(1, info.getMessage().size());
assertEquals("PKG-006", info.getMessage().get(0).getId());
}
Expand Down Expand Up @@ -425,7 +429,7 @@ public void parseNonEpubTest() throws Exception {
File epubFile = new File(WRONG_EXT_NOT_AN_EPUB_FILEPATH);
RepInfo info = parseAndCheckValidity(epubFile, RepInfo.FALSE, RepInfo.FALSE);
List<Message> msgs = info.getMessage();
final int expectedNumMessages = 3;
final int expectedNumMessages = 2;
assertEquals(expectedNumMessages, msgs.size());
}

Expand All @@ -451,7 +455,7 @@ public void parseNonEpubWithEpubExtensionTest() throws Exception {
RepInfo info = parseAndCheckValidity(epubFile, RepInfo.FALSE, RepInfo.FALSE);
assertEquals(OCTET_MIMETYPE, info.getMimeType());
List<Message> msgs = info.getMessage();
final int expectedNumMessages = 3;
final int expectedNumMessages = 2;
assertEquals(expectedNumMessages, msgs.size());
}

Expand Down Expand Up @@ -508,7 +512,7 @@ public void parseEpubWithMissingFontsTest() throws Exception {
Map<String, Object> fontinfo = new HashMap<String, Object>();
font.forEach(f -> fontinfo.put(f.getName(), f.getValue()));

// only one font in this file, listed but missing.
// a single font file is listed - it is supposed to be embedded but is missing.
assertEquals("Courier", fontinfo.get(PROPNAME_FONTNAME));
assertEquals(true, fontinfo.get(PROPNAME_FONTFILE));

Expand Down Expand Up @@ -579,18 +583,12 @@ public void parseEpubMissingOpfTest() throws Exception {
File epubFile = new File(EPUB2_MISSING_OPF_FILEPATH);
RepInfo info = parseAndCheckValidity(epubFile, RepInfo.FALSE, RepInfo.FALSE);

assertEquals(OCTET_MIMETYPE, info.getMimeType());

Set<String> msgCodes = new HashSet<String>();
assertEquals(2, info.getMessage().size());
Message msg1 = info.getMessage().get(0);
Message msg2 = info.getMessage().get(1);
assertTrue(msg1 instanceof ErrorMessage);
msgCodes.add(msg1.getId());
assertTrue(msg2 instanceof ErrorMessage);
msgCodes.add(msg2.getId());
assertEquals(1, info.getMessage().size());
Message msg = info.getMessage().get(0);
assertTrue(msg instanceof ErrorMessage);
msgCodes.add(msg.getId());
assertTrue(msgCodes.contains("OPF-002"));
assertTrue(msgCodes.contains("RSC-001"));
}

/**
Expand Down Expand Up @@ -665,8 +663,8 @@ public void checkSignaturesEpub2WithEncryptionTest() throws Exception {
public void parseEpub3TitleEncodingTest() throws Exception {
File epubFile = new File(EPUB3_TITLE_ENCODING);
String expectedTitle = "महाभारत";
// well formed and valid
RepInfo info = parseAndCheckValidity(epubFile, RepInfo.TRUE, RepInfo.TRUE);
// well formed but not valid (this is inconsequential to the test, we're just checking title)
RepInfo info = parseAndCheckValidity(epubFile, RepInfo.TRUE, RepInfo.FALSE);

Property metadata = info.getProperty(PROPNAME_EPUB_METADATA);
Map<String, Object> props = toMap(metadata);
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -4,6 +4,7 @@
import static org.junit.Assert.assertEquals;
import static org.junit.Assert.assertTrue;

import java.io.File;
import java.text.SimpleDateFormat;
import java.util.Arrays;
import java.util.Date;
Expand Down Expand Up @@ -45,9 +46,10 @@ public class JhoveRepInfoReportTest {
private static final MessageId WARN_MSG_ID = MessageId.CHK_001;
private static final String WARN_MSG = "Consider yourself warned";
private static final String WARN_MSG_SUGGEST = "Don't do it again!";

private EPUBLocation messageLoc = EPUBLocation.create("epub.opf");
private EPUBLocation messageLoc2 = EPUBLocation.create("content.xhtml");

private EPUBLocation messageLoc = EPUBLocation.of(new File("epub.opf"));
private EPUBLocation messageLoc2 = EPUBLocation.of(new File("content.xhtml"));

private String messageArg = "fakearg";


Expand Down

0 comments on commit 5989de2

Please sign in to comment.