package nl.siegmann.epublib.epub; import static org.junit.Assert.assertEquals; import static org.mockito.Mockito.mock; import static org.mockito.Mockito.when; import java.io.IOException; import java.util.Arrays; import java.util.Collection; import org.junit.Assert; import org.junit.Test; import org.mockito.Mockito; import org.w3c.dom.Document; import org.xml.sax.SAXException; import nl.siegmann.epublib.domain.Resource; import nl.siegmann.epublib.domain.Resources; import nl.siegmann.epublib.service.MediatypeService; public class PackageDocumentReaderTest { @Test public void testFindCoverHref_content1() throws SAXException, IOException { Document packageDocument; packageDocument = EpubProcessorSupport.createDocumentBuilder().parse(PackageDocumentReaderTest.class.getResourceAsStream("/opf/test1.opf")); Collection<String> coverHrefs = PackageDocumentReader.findCoverHrefs(packageDocument); assertEquals(1, coverHrefs.size()); assertEquals("cover.html", coverHrefs.iterator().next()); } @Test public void testFindTableOfContentsResource_simple_correct_toc_id() { // given String tocResourceId = "foo"; Resources resources = mock(Resources.class); Resource resource = mock(Resource.class); when(resources.getByIdOrHref(tocResourceId)).thenReturn(resource); // when Resource actualResult = PackageDocumentReader.findTableOfContentsResource("foo", resources); // then Assert.assertEquals(resource, actualResult); Mockito.verify(resources).getByIdOrHref(tocResourceId); Mockito.verifyNoMoreInteractions(resources); } @Test public void testFindTableOfContentsResource_NCX_media_resource() { // given String tocResourceId = "foo"; Resources resources = mock(Resources.class); Resource resource = mock(Resource.class); when(resources.getByIdOrHref(tocResourceId)).thenReturn(null); when(resources.findFirstResourceByMediaType(MediatypeService.NCX)).thenReturn(resource); // when Resource actualResult = PackageDocumentReader.findTableOfContentsResource("foo", resources); // then Assert.assertEquals(resource, actualResult); Mockito.verify(resources).getByIdOrHref(tocResourceId); Mockito.verify(resources).findFirstResourceByMediaType(MediatypeService.NCX); Mockito.verifyNoMoreInteractions(resources); } @Test public void testFindTableOfContentsResource_by_possible_id() { // given String tocResourceId = "foo"; Resources resources = mock(Resources.class); Resource resource = mock(Resource.class); when(resources.getByIdOrHref(tocResourceId)).thenReturn(null); when(resources.findFirstResourceByMediaType(MediatypeService.NCX)).thenReturn(null); when(resources.getByIdOrHref("NCX")).thenReturn(resource); // when Resource actualResult = PackageDocumentReader.findTableOfContentsResource("foo", resources); // then Assert.assertEquals(resource, actualResult); Mockito.verify(resources).getByIdOrHref(tocResourceId); Mockito.verify(resources).getByIdOrHref("toc"); Mockito.verify(resources).getByIdOrHref("TOC"); Mockito.verify(resources).getByIdOrHref("ncx"); Mockito.verify(resources).getByIdOrHref("NCX"); Mockito.verify(resources).findFirstResourceByMediaType(MediatypeService.NCX); Mockito.verifyNoMoreInteractions(resources); } @Test public void testFindTableOfContentsResource_nothing_found() { // given String tocResourceId = "foo"; Resources resources = mock(Resources.class); Resource resource = mock(Resource.class); when(resources.getByIdOrHref(Mockito.anyString())).thenReturn(null); when(resources.findFirstResourceByMediaType(MediatypeService.NCX)).thenReturn(null); // when Resource actualResult = PackageDocumentReader.findTableOfContentsResource("foo", resources); // then Assert.assertNull(actualResult); Mockito.verify(resources).getByIdOrHref(tocResourceId); Mockito.verify(resources).getByIdOrHref("toc"); Mockito.verify(resources).getByIdOrHref("TOC"); Mockito.verify(resources).getByIdOrHref("ncx"); Mockito.verify(resources).getByIdOrHref("NCX"); Mockito.verify(resources).getByIdOrHref("ncxtoc"); Mockito.verify(resources).getByIdOrHref("NCXTOC"); Mockito.verify(resources).findFirstResourceByMediaType(MediatypeService.NCX); Mockito.verifyNoMoreInteractions(resources); } @Test public void testFixHrefs_simple_correct() { // given String packageHref = "OEBPS/content.opf"; String resourceHref = "OEBPS/foo/bar.html"; Resources resources = mock(Resources.class); Resource resource = mock(Resource.class); when(resources.getAll()).thenReturn(Arrays.asList(resource)); when(resource.getHref()).thenReturn(resourceHref); // when PackageDocumentReader.fixHrefs(packageHref, resources); // then Mockito.verify(resource).setHref("foo/bar.html"); } @Test public void testFixHrefs_invalid_prefix() { // given String packageHref = "123456789/"; String resourceHref = "1/2.html"; Resources resources = mock(Resources.class); Resource resource = mock(Resource.class); when(resources.getAll()).thenReturn(Arrays.asList(resource)); when(resource.getHref()).thenReturn(resourceHref); // when PackageDocumentReader.fixHrefs(packageHref, resources); // then Assert.assertTrue(true); } }