blob: 60666347665f9a85d6331111e1d35e9ecf1af884 [file] [log] [blame]
/*******************************************************************************
* Copyright (c) 2011-2014 Torkild U. Resheim.
*
* All rights reserved. This program and the accompanying materials are made
* available under the terms of the Eclipse Public License v1.0 which
* accompanies this distribution, and is available at
* http://www.eclipse.org/legal/epl-v10.html
*
* Contributors:
* Torkild U. Resheim - initial API and implementation
*******************************************************************************/
package org.eclipse.mylyn.docs.epub.tests.api;
import java.io.File;
import java.io.FileWriter;
import java.io.IOException;
import java.util.List;
import java.util.Locale;
import org.eclipse.emf.common.util.Diagnostic;
import org.eclipse.emf.common.util.EList;
import org.eclipse.mylyn.docs.epub.core.EPUB;
import org.eclipse.mylyn.docs.epub.core.OPSPublication;
import org.eclipse.mylyn.docs.epub.core.Publication;
import org.eclipse.mylyn.docs.epub.core.ValidationException;
import org.eclipse.mylyn.docs.epub.dc.Contributor;
import org.eclipse.mylyn.docs.epub.dc.Coverage;
import org.eclipse.mylyn.docs.epub.dc.Date;
import org.eclipse.mylyn.docs.epub.dc.Description;
import org.eclipse.mylyn.docs.epub.dc.Identifier;
import org.eclipse.mylyn.docs.epub.dc.Publisher;
import org.eclipse.mylyn.docs.epub.dc.Relation;
import org.eclipse.mylyn.docs.epub.dc.Rights;
import org.eclipse.mylyn.docs.epub.dc.Source;
import org.eclipse.mylyn.docs.epub.dc.Subject;
import org.eclipse.mylyn.docs.epub.dc.Title;
import org.eclipse.mylyn.docs.epub.opf.Item;
import org.eclipse.mylyn.docs.epub.opf.Role;
import org.junit.Assert;
import org.junit.Test;
import com.adobe.epubcheck.api.EpubCheck;
import com.adobe.epubcheck.api.Report;
import com.adobe.epubcheck.util.DefaultReportImpl;
/**
* Tests features and regressions for all versions of the OPS supporting implementation {@link Publication}.
*
* @author Torkild U. Resheim
*/
@SuppressWarnings("nls")
public class TestOPSPublication extends AbstractTest {
/**
* Test method for
* {@link org.eclipse.mylyn.docs.epub.core.Publication#addContributor(java.lang.String, java.util.Locale, java.lang.String, org.eclipse.mylyn.docs.epub.opf.Role, java.lang.String)}
* .
*/
@Test
public final void testAddContributor() {
Contributor contributor = oebps.addContributor("Nomen Nescio");
contributor.setRole(Role.AUTHOR);
oebps.addContributor(null, null, "Nomen Nescio", Role.AUTHOR, null);
}
/**
* Test method for
* {@link org.eclipse.mylyn.docs.epub.core.Publication#addCoverage(java.lang.String, java.util.Locale, java.lang.String)}
* .
*/
@Test
public final void testAddCoverage() {
oebps.addCoverage("Coverage", Locale.CANADA_FRENCH, "My Coverage");
oebps.addCoverage(null, Locale.CANADA_FRENCH, "My Coverage");
oebps.addCoverage(null, null, "My Coverage");
EList<Coverage> Coverages = oebps.getPackage().getMetadata().getCoverages();
Assert.assertEquals("Coverage", Coverages.get(0).getId());
Assert.assertEquals("fr_CA", Coverages.get(0).getLang());
Assert.assertEquals("My Coverage", getText(Coverages.get(0)));
Assert.assertEquals(null, Coverages.get(1).getId());
Assert.assertEquals("fr_CA", Coverages.get(1).getLang());
Assert.assertEquals("My Coverage", getText(Coverages.get(1)));
Assert.assertEquals(null, Coverages.get(2).getId());
Assert.assertEquals(null, Coverages.get(2).getLang());
Assert.assertEquals("My Coverage", getText(Coverages.get(2)));
try {
oebps.addCoverage(null, null, null);
fail();
} catch (IllegalArgumentException e) {
}
}
/**
* Test method for
* {@link org.eclipse.mylyn.docs.epub.core.Publication#addCreator(java.lang.String, java.util.Locale, java.lang.String, org.eclipse.mylyn.docs.epub.opf.Role, java.lang.String)}
* .
*/
@Test
public final void testAddCreator() {
// TODO
}
/**
* Test method for
* {@link org.eclipse.mylyn.docs.epub.core.Publication#addDate(java.lang.String, java.util.Date, java.lang.String)}
* .
*/
@Test
public final void testAddDateStringDateString() {
// TODO
}
/**
* Test method for
* {@link org.eclipse.mylyn.docs.epub.core.Publication#addDate(java.lang.String, java.lang.String, java.lang.String)}
* .
*/
@Test
public final void testAddDateStringStringString() {
oebps.addDate(null, "1969", null);
oebps.addDate(null, "1969-03", null);
oebps.addDate(null, "1969-03-14", null);
oebps.addDate(null, "1969-03-14", "event");
EList<Date> dates = oebps.getPackage().getMetadata().getDates();
assertEquals("1969", getText(dates.get(0)));
assertEquals("1969-03", getText(dates.get(1)));
assertEquals("1969-03-14", getText(dates.get(2)));
assertEquals("event", dates.get(3).getEvent());
try {
oebps.addDate(null, (String) null, null);
fail();
} catch (IllegalArgumentException e) {
}
}
/**
* Test method for
* {@link org.eclipse.mylyn.docs.epub.core.Publication#addDescription(java.lang.String, java.util.Locale, java.lang.String)}
* .
*/
@Test
public final void testAddDescription() {
oebps.addDescription("Description", Locale.CANADA_FRENCH, "My Description");
oebps.addDescription(null, Locale.CANADA_FRENCH, "My Description");
oebps.addDescription(null, null, "My Description");
EList<Description> Descriptions = oebps.getPackage().getMetadata().getDescriptions();
Assert.assertEquals("Description", Descriptions.get(0).getId());
Assert.assertEquals("fr_CA", Descriptions.get(0).getLang());
Assert.assertEquals("My Description", getText(Descriptions.get(0)));
Assert.assertEquals(null, Descriptions.get(1).getId());
Assert.assertEquals("fr_CA", Descriptions.get(1).getLang());
Assert.assertEquals("My Description", getText(Descriptions.get(1)));
Assert.assertEquals(null, Descriptions.get(2).getId());
Assert.assertEquals(null, Descriptions.get(2).getLang());
Assert.assertEquals("My Description", getText(Descriptions.get(2)));
try {
oebps.addDescription(null, null, null);
fail();
} catch (IllegalArgumentException e) {
}
}
/**
* Test method for
* {@link org.eclipse.mylyn.docs.epub.core.Publication#addFormat(java.lang.String, java.lang.String)} .
*/
@Test
public final void testAddFormat() {
oebps.addDescription("Description", Locale.CANADA_FRENCH, "My Description");
oebps.addDescription(null, Locale.CANADA_FRENCH, "My Description");
oebps.addDescription(null, null, "My Description");
EList<Description> Descriptions = oebps.getPackage().getMetadata().getDescriptions();
Assert.assertEquals("Description", Descriptions.get(0).getId());
Assert.assertEquals("fr_CA", Descriptions.get(0).getLang());
Assert.assertEquals("My Description", getText(Descriptions.get(0)));
Assert.assertEquals(null, Descriptions.get(1).getId());
Assert.assertEquals("fr_CA", Descriptions.get(1).getLang());
Assert.assertEquals("My Description", getText(Descriptions.get(1)));
Assert.assertEquals(null, Descriptions.get(2).getId());
Assert.assertEquals(null, Descriptions.get(2).getLang());
Assert.assertEquals("My Description", getText(Descriptions.get(2)));
try {
oebps.addDescription(null, null, null);
fail();
} catch (IllegalArgumentException e) {
}
}
/**
* Test method for
* {@link org.eclipse.mylyn.docs.epub.core.Publication#addIdentifier(java.lang.String, java.lang.String, java.lang.String)}
* .
*/
@Test
public final void testAddIdentifier() {
oebps.addIdentifier("Identifier", "ID", "My Identifier");
oebps.addIdentifier(null, "ID", "My Identifier");
oebps.addIdentifier(null, null, "My Identifier");
EList<Identifier> Identifiers = oebps.getPackage().getMetadata().getIdentifiers();
Assert.assertEquals("Identifier", Identifiers.get(0).getId());
Assert.assertEquals("ID", Identifiers.get(0).getScheme());
Assert.assertEquals("My Identifier", getText(Identifiers.get(0)));
Assert.assertEquals(null, Identifiers.get(1).getId());
Assert.assertEquals("ID", Identifiers.get(1).getScheme());
Assert.assertEquals("My Identifier", getText(Identifiers.get(1)));
Assert.assertEquals(null, Identifiers.get(2).getId());
Assert.assertEquals(null, Identifiers.get(2).getScheme());
Assert.assertEquals("My Identifier", getText(Identifiers.get(2)));
try {
oebps.addIdentifier(null, null, null);
fail();
} catch (IllegalArgumentException e) {
}
}
/**
* Test method for {@link org.eclipse.mylyn.docs.epub.core.Publication#addItem(java.io.File)} .
*/
@Test
public final void testAddItemFile() {
// TODO
}
/**
* Test method for
* {@link org.eclipse.mylyn.docs.epub.core.Publication#addItem(java.lang.String, java.util.Locale, java.io.File, java.lang.String, java.lang.String, boolean, boolean, boolean)}
* .
*/
@Test
public final void testAddItemStringLocaleFileStringStringBooleanBooleanBoolean() {
// TODO
}
/**
* Test method for
* {@link org.eclipse.mylyn.docs.epub.core.Publication#addLanguage(java.lang.String, java.lang.String)} .
*/
@Test
public final void testAddLanguage() {
oebps.addLanguage(null, "no");
oebps.addLanguage("id", "no");
Assert.assertEquals("no", getText(oebps.getPackage().getMetadata().getLanguages().get(0)));
Assert.assertEquals("id", oebps.getPackage().getMetadata().getLanguages().get(1).getId());
try {
oebps.addLanguage(null, null);
fail();
} catch (IllegalArgumentException e) {
}
}
/**
* Test method for
* {@link org.eclipse.mylyn.docs.epub.core.Publication#addMeta(java.lang.String, java.lang.String)} .
*/
@Test
public final void testAddMeta() {
oebps.addMeta("name", "value");
assertEquals("name", oebps.getPackage().getMetadata().getMetas().get(0).getName());
assertEquals("value", oebps.getPackage().getMetadata().getMetas().get(0).getContent());
try {
oebps.addMeta(null, "value");
fail();
} catch (IllegalArgumentException e) {
}
try {
oebps.addMeta("name", null);
fail();
} catch (IllegalArgumentException e) {
}
}
/**
* Test method for
* {@link org.eclipse.mylyn.docs.epub.core.Publication#addPublisher(java.lang.String, java.util.Locale, java.lang.String)}
* .
*/
@Test
public final void testAddPublisher() {
oebps.addPublisher("Publisher", Locale.CANADA_FRENCH, "My Publisher");
oebps.addPublisher(null, Locale.CANADA_FRENCH, "My Publisher");
oebps.addPublisher(null, null, "My Publisher");
EList<Publisher> Publishers = oebps.getPackage().getMetadata().getPublishers();
Assert.assertEquals("Publisher", Publishers.get(0).getId());
Assert.assertEquals("fr_CA", Publishers.get(0).getLang());
Assert.assertEquals("My Publisher", getText(Publishers.get(0)));
Assert.assertEquals(null, Publishers.get(1).getId());
Assert.assertEquals("fr_CA", Publishers.get(1).getLang());
Assert.assertEquals("My Publisher", getText(Publishers.get(1)));
Assert.assertEquals(null, Publishers.get(2).getId());
Assert.assertEquals(null, Publishers.get(2).getLang());
Assert.assertEquals("My Publisher", getText(Publishers.get(2)));
try {
oebps.addPublisher(null, null, null);
fail();
} catch (IllegalArgumentException e) {
}
}
/**
* Test method for
* {@link org.eclipse.mylyn.docs.epub.core.Publication#addReference(java.lang.String, java.lang.String, org.eclipse.mylyn.docs.epub.opf.Type)}
* .
*/
@Test
public final void testAddReference() {
// TODO
}
/**
* Test method for
* {@link org.eclipse.mylyn.docs.epub.core.Publication#addRelation(java.lang.String, java.util.Locale, java.lang.String)}
* .
*/
@Test
public final void testAddRelation() {
oebps.addRelation("Relation", Locale.CANADA_FRENCH, "My Relation");
oebps.addRelation(null, Locale.CANADA_FRENCH, "My Relation");
oebps.addRelation(null, null, "My Relation");
EList<Relation> Relations = oebps.getPackage().getMetadata().getRelations();
Assert.assertEquals("Relation", Relations.get(0).getId());
Assert.assertEquals("fr_CA", Relations.get(0).getLang());
Assert.assertEquals("My Relation", getText(Relations.get(0)));
Assert.assertEquals(null, Relations.get(1).getId());
Assert.assertEquals("fr_CA", Relations.get(1).getLang());
Assert.assertEquals("My Relation", getText(Relations.get(1)));
Assert.assertEquals(null, Relations.get(2).getId());
Assert.assertEquals(null, Relations.get(2).getLang());
Assert.assertEquals("My Relation", getText(Relations.get(2)));
try {
oebps.addRelation(null, null, null);
fail();
} catch (IllegalArgumentException e) {
}
}
/**
* Test method for
* {@link org.eclipse.mylyn.docs.epub.core.Publication#addRights(java.lang.String, java.util.Locale, java.lang.String)}
* .
*/
@Test
public final void testAddRights() {
oebps.addRights("Rights", Locale.CANADA_FRENCH, "My Rights");
oebps.addRights(null, Locale.CANADA_FRENCH, "My Rights");
oebps.addRights(null, null, "My Rights");
EList<Rights> Rightss = oebps.getPackage().getMetadata().getRights();
Assert.assertEquals("Rights", Rightss.get(0).getId());
Assert.assertEquals("fr_CA", Rightss.get(0).getLang());
Assert.assertEquals("My Rights", getText(Rightss.get(0)));
Assert.assertEquals(null, Rightss.get(1).getId());
Assert.assertEquals("fr_CA", Rightss.get(1).getLang());
Assert.assertEquals("My Rights", getText(Rightss.get(1)));
Assert.assertEquals(null, Rightss.get(2).getId());
Assert.assertEquals(null, Rightss.get(2).getLang());
Assert.assertEquals("My Rights", getText(Rightss.get(2)));
try {
oebps.addRights(null, null, null);
fail();
} catch (IllegalArgumentException e) {
}
}
/**
* Test method for
* {@link org.eclipse.mylyn.docs.epub.core.Publication#addSource(java.lang.String, java.util.Locale, java.lang.String)}
* .
*/
@Test
public final void testAddSource() {
oebps.addSource("Source", Locale.CANADA_FRENCH, "My Source");
oebps.addSource(null, Locale.CANADA_FRENCH, "My Source");
oebps.addSource(null, null, "My Source");
EList<Source> Sources = oebps.getPackage().getMetadata().getSources();
Assert.assertEquals("Source", Sources.get(0).getId());
Assert.assertEquals("fr_CA", Sources.get(0).getLang());
Assert.assertEquals("My Source", getText(Sources.get(0)));
Assert.assertEquals(null, Sources.get(1).getId());
Assert.assertEquals("fr_CA", Sources.get(1).getLang());
Assert.assertEquals("My Source", getText(Sources.get(1)));
Assert.assertEquals(null, Sources.get(2).getId());
Assert.assertEquals(null, Sources.get(2).getLang());
Assert.assertEquals("My Source", getText(Sources.get(2)));
// An IllegalArgumentException is expected
try {
oebps.addSource(null, null, null);
fail();
} catch (IllegalArgumentException e) {
}
}
/**
* Test method for
* {@link org.eclipse.mylyn.docs.epub.core.Publication#addSubject(java.lang.String, java.util.Locale, java.lang.String)}
* .
*/
@Test
public final void testAddSubject() {
oebps.addSubject("Subject", Locale.CANADA_FRENCH, "My Subject");
oebps.addSubject(null, Locale.CANADA_FRENCH, "My Subject");
oebps.addSubject(null, null, "My Subject");
EList<Subject> subjects = oebps.getPackage().getMetadata().getSubjects();
Assert.assertEquals("Subject", subjects.get(0).getId());
Assert.assertEquals("fr_CA", subjects.get(0).getLang());
Assert.assertEquals("My Subject", getText(subjects.get(0)));
Assert.assertEquals(null, subjects.get(1).getId());
Assert.assertEquals("fr_CA", subjects.get(1).getLang());
Assert.assertEquals("My Subject", getText(subjects.get(1)));
Assert.assertEquals(null, subjects.get(2).getId());
Assert.assertEquals(null, subjects.get(2).getLang());
Assert.assertEquals("My Subject", getText(subjects.get(2)));
try {
oebps.addSubject(null, null, null);
fail();
} catch (IllegalArgumentException e) {
}
}
/**
* Test method for
* {@link org.eclipse.mylyn.docs.epub.core.Publication#addTitle(java.lang.String, java.util.Locale, java.lang.String)}
* .
*/
@Test
public final void testAddTitle() {
oebps.addTitle("Title", Locale.CANADA_FRENCH, "My Title");
oebps.addTitle(null, Locale.CANADA_FRENCH, "My Title");
oebps.addTitle(null, null, "My Title");
EList<Title> titles = oebps.getPackage().getMetadata().getTitles();
Assert.assertEquals("Title", titles.get(0).getId());
Assert.assertEquals("fr_CA", titles.get(0).getLang());
Assert.assertEquals("My Title", getText(titles.get(0)));
Assert.assertEquals(null, titles.get(1).getId());
Assert.assertEquals("fr_CA", titles.get(1).getLang());
Assert.assertEquals("My Title", getText(titles.get(1)));
Assert.assertEquals(null, titles.get(2).getId());
Assert.assertEquals(null, titles.get(2).getLang());
Assert.assertEquals("My Title", getText(titles.get(2)));
try {
oebps.addTitle(null, null, null);
fail();
} catch (IllegalArgumentException e) {
}
}
/**
* Test method for
* {@link org.eclipse.mylyn.docs.epub.core.Publication#addType(java.lang.String, java.lang.String)} .
*/
@Test
public final void testAddType() {
oebps.addType("Type", "My Type");
oebps.addType(null, "My Type");
EList<org.eclipse.mylyn.docs.epub.dc.Type> Types = oebps.getPackage().getMetadata().getTypes();
Assert.assertEquals("Type", Types.get(0).getId());
Assert.assertEquals("My Type", getText(Types.get(0)));
Assert.assertEquals(null, Types.get(1).getId());
Assert.assertEquals("My Type", getText(Types.get(1)));
try {
oebps.addType(null, null);
fail();
} catch (IllegalArgumentException e) {
}
}
/**
* Test method for {@link org.eclipse.mylyn.docs.epub.core.Publication#generateTableOfContents()} .
*/
@Test
public final void testGenerateTableOfContents() {
// TODO
}
/**
* Test method for {@link org.eclipse.mylyn.docs.epub.core.Publication#getIdentifier()}.
*/
@Test
public final void testGetIdentifier() {
// TODO
}
/**
* Test method for {@link org.eclipse.mylyn.docs.epub.core.Publication#getItemById(java.lang.String)} .
*/
@Test
public final void testGetItemById() {
// TODO
}
/**
* Test method for {@link org.eclipse.mylyn.docs.epub.core.Publication#getItemsByMIMEType(java.lang.String)} .
*/
@Test
public final void testGetItemsByMIMEType() {
Item i_in_1 = oebps.addItem(new File("testdata/images/subfolder-drawing.svg"));
Item i_in_2 = oebps.addItem(new File("testdata/plain-page.xhtml"));
List<Item> i_out_1 = oebps.getItemsByMIMEType("image/svg+xml");
assertEquals(1, i_out_1.size());
assertEquals(i_in_1, i_out_1.get(0));
List<Item> i_out_2 = oebps.getItemsByMIMEType("application/xhtml+xml");
assertEquals(1, i_out_2.size());
assertEquals(i_in_2, i_out_2.get(0));
}
/**
* Test method for {@link org.eclipse.mylyn.docs.epub.core.Publication#getPackage()}.
*/
@Test
public final void testGetOpfPackage() {
// TODO
}
/**
* Test method for {@link org.eclipse.mylyn.docs.epub.core.Publication#getRootFolder()}.
*/
@Test
public final void testGetRootFolder() {
// TODO
}
/**
* Test method for {@link org.eclipse.mylyn.docs.epub.core.Publication#getSpine()}.
*/
@Test
public final void testGetSpine() {
// TODO
}
/**
* Test method for {@link org.eclipse.mylyn.docs.epub.core.Publication#getTableOfContents()} .
*/
@Test
public final void testGetTableOfContents() {
// TODO
}
/**
* Test method for {@link org.eclipse.mylyn.docs.epub.core.Publication#getValidationMessages()} .
*/
@Test
public final void testGetValidationMessages() {
// TODO
}
/**
* Test method for {@link org.eclipse.mylyn.docs.epub.core.Publication#pack(java.io.File)}. An EPUB where only a
* single page has been added shall be packed without issues
*
* @throws Exception
*/
@Test
public final void testPack_EPUB2() throws Exception {
oebps.addItem(new File("testdata/plain-page.xhtml"));
epub.add(oebps);
epub.pack(epubFile);
oebps.validateMetadata();
Report report = new DefaultReportImpl(epubFile.toString());
EpubCheck checker = new EpubCheck(epubFile, report);
System.out.println("Validating plain EPUB 2.0.1 file");
System.out.println("Using version " + EpubCheck.VERSION + " of EpubCheck.");
Assert.assertTrue(checker.validate());
}
/**
* Test method for {@link org.eclipse.mylyn.docs.epub.core.Publication#pack(java.io.File)}. An EPUB with no
* content shall fail when packed.
*
* @throws Exception
*/
@Test
public final void testPack_Empty() throws Exception {
epub.add(new OPSPublication());
try {
epubFile.delete();
epub.pack(epubFile);
fail();
} catch (ValidationException e) {
}
}
/**
* Test method for {@link org.eclipse.mylyn.docs.epub.core.Publication#readTableOfContents(java.io.File)} .
*/
@Test
public final void testReadTableOfContents() {
// TODO
}
/**
* Test method for {@link org.eclipse.mylyn.docs.epub.core.Publication#setCover(java.io.File, java.lang.String)}
* .
* <ul>
* <li>Cover page SVG shall exist in the unpacked folder</li>
* <li>Cover page HTML shall exist in the unpacked folder</li>
* </ul>
*
* @throws Exception
*/
@Test
public final void testSetCover() throws Exception {
oebps.setCover(new File("testdata/drawing.svg"), "Title");
oebps.addItem(new File("testdata/plain-page.xhtml"));
epub.add(oebps);
epub.pack(epubFile);
EPUB epub2 = new EPUB();
epub2.unpack(epubFile, epubFolder);
oebps = epub2.getOPSPublications().get(0);
File root = oebps.getRootFolder();
File svg = new File(root.getAbsolutePath() + File.separator + "drawing.svg");
Assert.assertTrue(svg.exists());
File html = new File(root.getAbsolutePath() + File.separator + "cover-page.xhtml");
Assert.assertTrue(html.exists());
}
/**
* Test method for {@link org.eclipse.mylyn.docs.epub.core.Publication#setGenerateToc(boolean)} .
*/
@Test
public final void testSetGenerateToc() {
// TODO
}
/**
* Test method for {@link org.eclipse.mylyn.docs.epub.core.Publication#setIdentifierId(java.lang.String)} .
*/
@Test
public final void testSetIdentifierId() {
// TODO
}
/**
* Test method for {@link org.eclipse.mylyn.docs.epub.core.Publication#setIncludeReferencedResources(boolean)}.
* This is determining whether or not the referenced resources has been picked up and included in the resulting
* EPUB. Also handles <a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=375795">bug 375795</a>: [epub][patch]
* Automatic inclusion of referenced resources fail on anchor references
*
* @throws Exception
*/
@Test
public final void testSetIncludeReferencedResources() throws Exception {
oebps.setIncludeReferencedResources(true);
oebps.addItem(new File("testdata/plain-page_link.xhtml"));
epub.add(oebps);
// Included resources will only be added when we pack
epub.pack(epubFile);
EPUB epub2 = new EPUB();
epub2.unpack(epubFile, epubFolder);
oebps = epub2.getOPSPublications().get(0);
File root = oebps.getRootFolder();
File svg = new File(root.getAbsolutePath() + File.separator + "drawing.svg");
Assert.assertTrue(svg.exists());
File svg2 = new File(root.getAbsolutePath() + File.separator + "images" + File.separator
+ "subfolder-drawing.svg");
Assert.assertTrue(svg2.exists());
File html = new File(root.getAbsolutePath() + File.separator + "plain-page_no-header.xhtml");
Assert.assertTrue(html.exists());
File html2 = new File(root.getAbsolutePath() + File.separator + "plain-page.xhtml");
Assert.assertTrue(html2.exists());
// The manifest shall only contain the items we have linked to in addition to the toc.ncx and the file that we
// started from -- a total of six files.
Assert.assertEquals(6, oebps.getPackage().getManifest().getItems().size());
}
/**
* Test method for <a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=380016">bug 380016</a>: Reference scanner
* should also include referenced CSS style sheets
*
* @throws Exception
*/
@Test
public final void test_Bug380016() throws Exception {
setErrorExpected();
oebps.setIncludeReferencedResources(true);
oebps.addItem(new File("testdata/OPF-Tests/Bug_380016/chapter.xhtml"));
epub.add(oebps);
epub.pack(epubFile);
EPUB epub2 = new EPUB();
epub2.unpack(epubFile, epubFolder);
oebps = epub2.getOPSPublications().get(0);
File root = oebps.getRootFolder();
File svg = new File(root.getAbsolutePath() + File.separator + "style.css");
Assert.assertTrue(svg.exists());
}
/**
* Test method for <a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=360701">bug 360701</a>: [epub] Automatic
* inclusion of referenced resources don't work for WikiText generated HTML.
*
* @throws Exception
*/
@Test
public final void test_Bug360701() throws Exception {
setErrorExpected();
oebps.setIncludeReferencedResources(true);
// This page is similar to what WikiText would generate
oebps.addItem(new File("testdata/plain-page_link.html"));
epub.add(oebps);
// Included resources will only be added when we pack
epub.pack(epubFile);
EPUB epub2 = new EPUB();
epub2.unpack(epubFile, epubFolder);
oebps = epub2.getOPSPublications().get(0);
File root = oebps.getRootFolder();
File svg = new File(root.getAbsolutePath() + File.separator + "drawing.svg");
Assert.assertTrue(svg.exists());
File svg2 = new File(root.getAbsolutePath() + File.separator + "images" + File.separator
+ "subfolder-drawing.svg");
Assert.assertTrue(svg2.exists());
File html = new File(root.getAbsolutePath() + File.separator + "plain-page_no-header.html");
Assert.assertTrue(html.exists());
}
/**
* Test method for <a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=373052">bug 373052</a>: [epub] Reference
* scanner does not handle absolute paths
*
* @throws Exception
*/
@Test
public final void test_Bug373052() throws Exception {
setErrorExpected();
// We need to link to a absolute file so we create a temporary HTML file
// in which we have the link.m
File htmlFile = File.createTempFile("temp", ".xhtml");
File svgFile = new File("testdata/drawing.svg");
FileWriter fw = new FileWriter(htmlFile);
fw.write("<html><body>");
fw.write("<img src=\"" + svgFile.getAbsolutePath() + "\"/>");
fw.write("</body></html>");
fw.close();
oebps.setIncludeReferencedResources(true);
oebps.addItem(htmlFile);
epub.add(oebps);
epub.pack(epubFile);
htmlFile.delete();
EPUB epub2 = new EPUB();
epub2.unpack(epubFile, epubFolder);
oebps = epub2.getOPSPublications().get(0);
File root = oebps.getRootFolder();
File svg = new File(root.getAbsolutePath() + File.separator + "drawing.svg");
Assert.assertTrue(svg.exists());
}
/**
* Test method for <a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=376312">bug 376312</a>: [epub] Automatic
* inclusion of detected resources may add the same resource twice or more
* <p>
* File A references file C as do file B. File C references file A. Before the fix there would be two instances of
* file C.
* </p>
*
* @throws Exception
*/
public final void test_Bug376312() throws Exception {
setErrorExpected();
oebps.setIncludeReferencedResources(true);
oebps.addItem(new File("testdata/circular/file-a.xhtml"));
oebps.addItem(new File("testdata/circular/file-b.xhtml"));
epub.add(oebps);
epub.pack(epubFile);
EList<Item> items = oebps.getPackage().getManifest().getItems();
// File A, B, C and the NCX
assertEquals(4, items.size());
}
/**
* Test method for {@link org.eclipse.mylyn.docs.epub.core.Publication#setTableOfContents(java.io.File)} .
*
* @see TestOPS2Publication#testSetTableOfContents()
*/
@Test
public final void testSetTableOfContents() {
// Handled by subclass test.
}
/**
* Test method for {@link org.eclipse.mylyn.docs.epub.core.Publication#unpack(java.io.File)} .
*/
@Test
public final void testUnpack() {
// TODO
}
/**
* Test method for {@link org.eclipse.mylyn.docs.epub.core.Publication#validateContents()} .
*/
@Test
public final void testValidateContents() {
// TODO
}
/**
* Test method for {@link org.eclipse.mylyn.docs.epub.core.Publication#validateMetadata()} .
*/
@Test
public final void testValidateMetadata() {
// TODO
}
/**
* Test method for {@link org.eclipse.mylyn.docs.epub.core.Publication#writeTableOfContents(java.io.File)} .
*/
@Test
public final void testWriteTableOfContents() {
// TODO
}
private class EPUB_OPF_Test extends OPSPublication {
public void testReadOPF(File rootFile) throws IOException {
readOPF(rootFile);
}
}
/**
* See if the OPF file generated by this tooling can be read.
*
* @throws Exception
*/
@Test
public final void testReadOCF_Dogfood() throws Exception {
File rootFile = new File("testdata/OPF-Tests/Dogfood/content.opf");
EPUB_OPF_Test epub = new EPUB_OPF_Test();
epub.testReadOPF(rootFile);
}
/**
* This case was discovered when testing an EPUB file generated by DocBook Reading the OPF fails with a
* java.net.SocketException: Unexpected end of file from server. On closer inspection we can see that the file is
* declared as XHTML (which it of course is not). This is probably due to an issue in DocBook XSL 1.76.1
*
* @see http://sourceforge.net/tracker/index.php?func=detail&aid=3353537 &group_id=21935&atid=373747.
* @throws Exception
*/
@Test
public final void testReadOCF_SocketException() throws Exception {
File rootFile = new File("testdata/OPF-Tests/SocketException/content.opf");
EPUB_OPF_Test oebps = new EPUB_OPF_Test();
oebps.testReadOPF(rootFile);
}
/**
* Test method for <a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=380729">bug 380729</a>: Allow reference
* elements to have "other." types
*
* @throws Exception
*/
@Test
public final void test_Bug380729() throws Exception {
// Validation is normally not performed when loading content. However
// the previous implementation of the reference type was an
// enumeration so it would fail when attempting to set it and there
// was no matching item. Hence this code should now pass as the OPF
// contains previously invalid values.
File rootFile = new File("testdata/OPF-Tests/Bug_380729/content.opf");
EPUB_OPF_Test oebps = new EPUB_OPF_Test();
oebps.testReadOPF(rootFile);
// This is required for validation
oebps.addSubject(null, null, "Required subject");
// Validate that "cover" and "other.ms-coverpage" already read from
// the OPF file is OK.
List<Diagnostic> problems = oebps.validateMetadata();
assertEquals(problems.size(), 0);
// Add illegal reference type and see that we get an error
oebps.addReference("cover-page.xhtml", "cover", "invalid");
problems = oebps.validateMetadata();
assertEquals(problems.size(), 1);
}
}