package nl.siegmann.epublib.epub;
import static org.junit.Assert.assertEquals;
import java.io.File;
import java.io.FileInputStream;
import java.io.IOException;
import nl.siegmann.epublib.domain.Book;
import nl.siegmann.epublib.domain.Resource;
import nl.siegmann.epublib.service.MediatypeService;
import nl.siegmann.epublib.util.IOUtil;
import org.junit.After;
import org.junit.AfterClass;
import org.junit.Before;
import org.junit.BeforeClass;
import org.junit.Test;
public class NCXDocumentTest {
byte[] ncxData;
public NCXDocumentTest() {
}
@BeforeClass
public static void setUpClass() {
}
@AfterClass
public static void tearDownClass() {
}
@Before
public void setUp() throws IOException {
ncxData = IOUtil.toByteArray(new FileInputStream(new File("src/test/resources/toc.xml")));
}
@After
public void tearDown() {
}
private void addResource(Book book, String filename) {
Resource chapterResource = new Resource("id1", "Hello, world !".getBytes(), filename, MediatypeService.XHTML);
book.addResource(chapterResource);
book.getSpine().addResource(chapterResource);
}
/**
* Test of read method, of class NCXDocument.
*/
@Test
public void testReadWithNonRootLevelTOC() {
// If the tox.ncx file is not in the root, the hrefs it refers to need to preserve its path.
Book book = new Book();
Resource ncxResource = new Resource(ncxData, "xhtml/toc.ncx");
addResource(book, "xhtml/chapter1.html");
addResource(book, "xhtml/chapter2.html");
addResource(book, "xhtml/chapter2_1.html");
addResource(book, "xhtml/chapter3.html");
book.setNcxResource(ncxResource);
book.getSpine().setTocResource(ncxResource);
NCXDocument.read(book, new EpubReader());
assertEquals("xhtml/chapter1.html", book.getTableOfContents().getTocReferences().get(0).getCompleteHref());
}
}