/******************************************************************************* * Copyright (c) 2011, 2013 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.core; import java.io.IOException; import java.io.StringReader; import javax.xml.parsers.ParserConfigurationException; import junit.framework.TestCase; import org.eclipse.emf.common.util.EList; import org.eclipse.mylyn.docs.epub.ncx.NCXFactory; import org.eclipse.mylyn.docs.epub.ncx.NavMap; import org.eclipse.mylyn.docs.epub.ncx.NavPoint; import org.eclipse.mylyn.docs.epub.ncx.Ncx; import org.eclipse.mylyn.internal.docs.epub.core.TOCGenerator; import org.junit.Test; import org.xml.sax.InputSource; import org.xml.sax.SAXException; /** * Tests for the table of contents generator. * * @author Torkild U. Resheim */ @SuppressWarnings({ "restriction", "nls" }) public class TestTOCGenerator extends TestCase { @Test public void testNormal() throws ParserConfigurationException, SAXException, IOException { String html = "<body>" + "<h1 id='h1-1'>test</h1>" + "<h2 id='h2-1'>test</h2>" + "<h2 id='h2-2'>test</h2>" + "<h3 id='h3-1'>test</h3>" + "<h1 id='h1-2'>test</h1>" + "</body>"; Ncx ncx = createNcx(); TOCGenerator.parse(new InputSource(new StringReader(html)), "test.html", ncx, 0); EList<NavPoint> points = ncx.getNavMap().getNavPoints(); assertEquals(2, points.size()); assertEquals(2, points.get(0).getNavPoints().size()); assertEquals(1, points.get(0).getNavPoints().get(1).getNavPoints().size()); } @Test public void testMissingIdentifier() throws ParserConfigurationException, SAXException, IOException { String html = "<body>" + "<h1 id='h1-1'>test</h1>" + "<h2>test</h2>" + "<h1 id='h1-2'>test</h1>" + "</body>"; Ncx ncx = createNcx(); TOCGenerator.parse(new InputSource(new StringReader(html)), "test.html", ncx, 0); EList<NavPoint> points = ncx.getNavMap().getNavPoints(); assertEquals(2, points.size()); // "h2" will be added as a sub-node to the first "h1" regardless of the // missing identifier. assertEquals(1, points.get(0).getNavPoints().size()); } /** * All items should be placed at the root. * * @throws ParserConfigurationException * @throws SAXException * @throws IOException */ @Test public void testCrazyStructure() throws ParserConfigurationException, SAXException, IOException { String html = "<body>" + "<h3 id='h3-1'>test</h3>" + "<h2 id='h2-1'>test</h2>" + "<h1 id='h1-1'>test</h1>" + "</body>"; Ncx ncx = createNcx(); TOCGenerator.parse(new InputSource(new StringReader(html)), "test.html", ncx, 0); EList<NavPoint> points = ncx.getNavMap().getNavPoints(); // "h3" will be created as a "h1" and "h2" added to it assertEquals(2, points.size()); } @Test public void testMissingParent() throws ParserConfigurationException, SAXException, IOException { String html = "<body>" + "<h1 id='h1-1'>test</h1>" + "<h3 id='h3-1'>test</h3>" + "<h1 id='h1-2'>test</h1>" + "</body>"; Ncx ncx = createNcx(); TOCGenerator.parse(new InputSource(new StringReader(html)), "test.html", ncx, 0); EList<NavPoint> points = ncx.getNavMap().getNavPoints(); assertEquals(2, points.size()); assertEquals(1, points.get(0).getNavPoints().size()); } private Ncx createNcx() { Ncx ncx = NCXFactory.eINSTANCE.createNcx(); NavMap navMap = NCXFactory.eINSTANCE.createNavMap(); ncx.setNavMap(navMap); return ncx; } }