diff options
3 files changed, 187 insertions, 0 deletions
diff --git a/org.eclipse.ua.tests/help/org/eclipse/ua/tests/help/remote/AllRemoteTests.java b/org.eclipse.ua.tests/help/org/eclipse/ua/tests/help/remote/AllRemoteTests.java index c211a6628..948b0d685 100755 --- a/org.eclipse.ua.tests/help/org/eclipse/ua/tests/help/remote/AllRemoteTests.java +++ b/org.eclipse.ua.tests/help/org/eclipse/ua/tests/help/remote/AllRemoteTests.java @@ -32,6 +32,7 @@ public class AllRemoteTests extends TestSuite { addTestSuite(RemotePreferenceTest.class); addTestSuite(TocServletTest.class); addTestSuite(SearchServletTest.class); + addTestSuite(IndexServletTest.class); addTestSuite(SearchUsingRemoteHelp.class); addTestSuite(LoadTocUsingRemoteHelp.class); } diff --git a/org.eclipse.ua.tests/help/org/eclipse/ua/tests/help/remote/IndexServletTest.java b/org.eclipse.ua.tests/help/org/eclipse/ua/tests/help/remote/IndexServletTest.java new file mode 100644 index 000000000..67c0494a6 --- /dev/null +++ b/org.eclipse.ua.tests/help/org/eclipse/ua/tests/help/remote/IndexServletTest.java @@ -0,0 +1,164 @@ +/******************************************************************************* + * Copyright (c) 2009 IBM Corporation and others. + * 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: + * IBM Corporation - initial API and implementation + *******************************************************************************/ +package org.eclipse.ua.tests.help.remote; + +import java.io.InputStream; +import java.net.URL; +import java.util.ArrayList; +import java.util.List; + +import javax.xml.parsers.DocumentBuilder; +import javax.xml.parsers.DocumentBuilderFactory; + +import junit.framework.TestCase; + +import org.eclipse.help.internal.base.BaseHelpSystem; +import org.eclipse.help.internal.entityresolver.LocalEntityResolver; +import org.eclipse.help.internal.server.WebappManager; +import org.w3c.dom.Document; +import org.w3c.dom.Element; +import org.w3c.dom.Node; +import org.w3c.dom.NodeList; +import org.xml.sax.InputSource; + +public class IndexServletTest extends TestCase { + + private int mode; + + protected void setUp() throws Exception { + BaseHelpSystem.ensureWebappRunning(); + mode = BaseHelpSystem.getMode(); + BaseHelpSystem.setMode(BaseHelpSystem.MODE_INFOCENTER); + } + + protected void tearDown() throws Exception { + BaseHelpSystem.setMode(mode); + } + + public void testIndexServletContainsSimpleWord() throws Exception { + Node root = getIndexContributions("en"); + Element[] UARoot = findEntryInAllContributions(root, "xyz"); + assertEquals(1, UARoot.length); + } + + public void testIndexServletContainsWordWithAccent() throws Exception { + Node root = getIndexContributions("en"); + Element[] UARoot = findEntryInAllContributions(root, "\u00E1mbito"); + assertEquals(1, UARoot.length); + } + + public void testIndexServletContainsWordWithGt() throws Exception { + Node root = getIndexContributions("en"); + Element[] UARoot = findEntryInAllContributions(root, "character >"); + assertEquals(1, UARoot.length); + } + + public void testIndexServletContainsWordWithLt() throws Exception { + Node root = getIndexContributions("en"); + Element[] UARoot = findEntryInAllContributions(root, "character <"); + assertEquals(1, UARoot.length); + } + public void testIndexServletContainsWordWithAmp() throws Exception { + Node root = getIndexContributions("en"); + Element[] UARoot = findEntryInAllContributions(root, "character &"); + assertEquals(1, UARoot.length); + } + public void testIndexServletContainsWordWithQuot() throws Exception { + Node root = getIndexContributions("en"); + Element[] UARoot = findEntryInAllContributions(root, "character \""); + assertEquals(1, UARoot.length); + } + public void testIndexServletContainsWordWithApostrophe() throws Exception { + Node root = getIndexContributions("en"); + Element[] UARoot = findEntryInAllContributions(root, "character '"); + assertEquals(1, UARoot.length); + } + + public void testDeWordNotInEnIndex() throws Exception { + Node root = getIndexContributions("en"); + Element[] UARoot = findEntryInAllContributions(root, "munich"); + assertEquals(0, UARoot.length); + } + + public void testWordInDeIndex() throws Exception { + Node root = getIndexContributions("de"); + Element[] UARoot = findEntryInAllContributions(root, "munich"); + assertEquals(1, UARoot.length); + } + + public void testWordNotInDeIndex() throws Exception { + Node root = getIndexContributions("de"); + Element[] UARoot = findEntryInAllContributions(root, "xyz"); + assertEquals(0, UARoot.length); + } + + private Element[] findEntryInAllContributions(Node parent, String keyword) { + NodeList contributions = parent.getChildNodes(); + List results = new ArrayList(); + for (int i = 0; i < contributions.getLength(); i++) { + Node next = contributions.item(i); + if (next instanceof Element) { + Element nextElement = (Element)next; + if ("indexContribution".equals(nextElement.getTagName())) { + findEntryInIndexContribution(nextElement, keyword, results); + } + } + } + return (Element[]) results.toArray(new Element[results.size()]); + } + + private void findEntryInIndexContribution(Element parent, String keyword, + List results) { + NodeList indexes = parent.getChildNodes(); + for (int i = 0; i < indexes.getLength(); i++) { + Node next = indexes.item(i); + if (next instanceof Element) { + Element nextElement = (Element) next; + if ("index".equals(nextElement.getTagName())) { + findMatchingChildEntry(nextElement, keyword, results); + } + } + } + } + + private void findMatchingChildEntry(Element parent, String keyword, + List results) { + NodeList topLevelEntries = parent.getChildNodes(); + for (int i = 0; i < topLevelEntries.getLength(); i++) { + Node next = topLevelEntries.item(i); + if (next instanceof Element) { + Element nextElement = (Element) next; + if ("entry".equals(nextElement.getTagName()) + && keyword.equals(nextElement + .getAttribute("keyword"))) { + + results.add(next); + } + } + } + } + + private Node getIndexContributions( String locale) + throws Exception { + int port = WebappManager.getPort(); + URL url = new URL("http", "localhost", port, "/help/index?lang=" + locale); + InputStream is = url.openStream(); + InputSource inputSource = new InputSource(is); + DocumentBuilder documentBuilder = DocumentBuilderFactory.newInstance().newDocumentBuilder(); + documentBuilder.setEntityResolver(new LocalEntityResolver()); + Document document = documentBuilder.parse(inputSource); + Node root = document.getFirstChild(); + is.close(); + assertEquals("indexContributions", root.getNodeName()); + return root; + } + +} diff --git a/org.eclipse.ua.tests/nl/de/data/help/index/index.xml b/org.eclipse.ua.tests/nl/de/data/help/index/index.xml new file mode 100644 index 000000000..c9d6d9de6 --- /dev/null +++ b/org.eclipse.ua.tests/nl/de/data/help/index/index.xml @@ -0,0 +1,22 @@ +<?xml version="1.0" encoding="UTF-8"?>
<!-- + Copyright (c) 2009 IBM Corporation and others. + 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: + IBM Corporation - initial API and implementation + --> + +<index> + <entry keyword="dusseldorf"> + <topic href="data/help/index/topic1.html"/> + </entry> + <entry keyword="munich"> + <topic href="data/help/index/topic2.html#someAnchor"/> + </entry> + <entry keyword="bavaria"> + <topic href="data/help/index/topic2.html"/> + </entry> +</index> |