blob: cccd12fe2ea715491ea577fff16c5ca2a2e6a231 [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.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);
}
}