/******************************************************************************* * 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.core; import java.io.IOException; import java.io.StringReader; import javax.xml.parsers.ParserConfigurationException; import junit.framework.TestCase; import org.eclipse.mylyn.internal.docs.epub.core.OPSValidator; import org.junit.Test; import org.xml.sax.InputSource; import org.xml.sax.SAXException; /** * Tests for the OPS validator. * * @author Torkild U. Resheim * @see http://idpf.org/epub/20/spec/OPS_2.0.1_draft.htm */ @SuppressWarnings({ "restriction", "nls" }) public class TestOPSValidator extends TestCase { private final String[] illegalAttributes = new String[] { "anything", "goes", "in", "here" }; private final String[] illegalElements = new String[] { "anything", "goes", "in", "here" }; private final String[] legalAttributes = new String[] { "accesskey", "charset", "class", "coords", "dir", "href", "hreflang", "id", "rel", "rev", "shape", "style", "tabindex", "target", "title", "type", "xml:lang" }; /** * A list of legal elements according to the EPUB 2.0.1 specification * * @see http://idpf.org/epub/20/spec/OPS_2.0.1_draft.htm#Section1.3.4 * @see http://idpf.org/epub/20/spec/OPS_2.0.1_draft.htm#Section2.2 */ private final String[] legalElements = new String[] { "body", "head", "html", "title", "abbr", "acronym", "address", "blockquote", "br", "cite", "code", "dfn", "div", "em", "h1", "h2", "h3", "h4", "h5", "h6", "kbd", "p", "pre", "q", "samp", "span", "strong", "var", "a", "dl", "dt", "dd", "ol", "ul", "li", "object", "param", "b", "big", "hr", "i", "small", "sub", "sup", "tt", "del", "ins", "bdo", "caption", "col", "colgroup", "table", "tbody", "td", "tfoot", "th", "thead", "tr", "img", "area", "map", "style", "link", "base" }; @Test public void testIllegalAttributes() throws ParserConfigurationException, SAXException, IOException { for (String attr : illegalAttributes) { String in = "<html><body><div " + attr + "=\"test\">content</div></body></html>"; String expected = "<html><body><div>content</div></body></html>"; String out = OPSValidator.clean(new InputSource(new StringReader(in)), "test.html"); assertEquals(expected, out); } } @Test public void testIllegalElements() throws ParserConfigurationException, SAXException, IOException { for (String element : illegalElements) { String in = "<html><body><" + element + "></" + element + "></body></html>"; String result = "<html><body></body></html>"; String out = OPSValidator.clean(new InputSource(new StringReader(in)), "test.html"); assertEquals(result, out); } } @Test public void testLegalAttributes() throws ParserConfigurationException, SAXException, IOException { for (String attr : legalAttributes) { String in = "<html><body><div " + attr + "=\"test\"></div></body></html>"; String out = OPSValidator.clean(new InputSource(new StringReader(in)), "test.html"); assertEquals(in, out); } } @Test public void testLegalElements() throws ParserConfigurationException, SAXException, IOException { for (String element : legalElements) { String in = "<html><body><" + element + ">content</" + element + "></body></html>"; String out = OPSValidator.clean(new InputSource(new StringReader(in)), "test.html"); assertEquals(in, out); } } @Test public void testNormal() throws ParserConfigurationException, SAXException, IOException { String in = "<body><h1 id=\"h1-1\">test</h1></body>"; String out = OPSValidator.clean(new InputSource(new StringReader(in)), "test.html"); assertEquals(in, out); } }