blob: 09cd5759ed3a7820fbcc93943f31805fb715ae03 [file] [log] [blame]
/*******************************************************************************
* Copyright (c) 2009, 2016 IBM Corporation and others.
*
* This program and the accompanying materials
* are made available under the terms of the Eclipse Public License 2.0
* which accompanies this distribution, and is available at
* https://www.eclipse.org/legal/epl-2.0/
*
* SPDX-License-Identifier: EPL-2.0
*
* Contributors:
* IBM Corporation - initial API and implementation
*******************************************************************************/
package org.eclipse.ua.tests.help.webapp;
import static org.junit.Assert.assertEquals;
import static org.junit.Assert.assertNull;
import static org.junit.Assert.fail;
import java.io.ByteArrayOutputStream;
import java.io.IOException;
import java.io.OutputStream;
import javax.servlet.http.HttpServletRequest;
import org.eclipse.help.internal.webapp.servlet.PluginsRootResolvingStream;
import org.junit.Test;
/**
* Test for text matching when inserting links
*/
public class ChildLinkInsertion {
private class TestableReplacementStream extends PluginsRootResolvingStream {
public TestableReplacementStream(OutputStream out, HttpServletRequest req, String prefix) {
super(out, req, prefix);
}
@Override
protected void insertBasedOnKeyword(int index) throws IOException {
if (index == 0 ) {
out.write("<LINKS>".getBytes()); //$NON-NLS-1$
} else if (index == 1) {
out.write("<STYLE>".getBytes()); //$NON-NLS-1$
} else {
out.write("<UNKNOWN>".getBytes()); //$NON-NLS-1$
}
}
}
@Test
public void testEmpty() {
final String input = "";
checkFilter(input, input);
}
@Test
public void testNoMatch() {
final String input = "<HEAD><HEAD/>";
checkFilter(input, input);
}
@Test
public void testPartialMatch1() {
final String input = "<A href = \"PLUGINS\"><!--INSTRUCT-->";
checkFilter(input, input);
}
@Test
public void testPartialMatch2() {
final String input = "<A href = \"PLUGINS\"><!A -->";
checkFilter(input, input);
}
@Test
public void testPartialMatch3() {
final String input = "<A href = \"PLUGINS\"><!-A -->";
checkFilter(input, input);
}
@Test
public void testPartialMatch4() {
final String input = "<A href = \"PLUGINS\"><!--A-->";
checkFilter(input, input);
}
@Test
public void testEndsUnmatched() {
final String input = "<A><!--INSTR";
checkFilter(input, input);
}
@Test
public void testNotAtStart() {
final String input = "<A><!-- INSERT_CHILD_LINKS-->";
checkFilter(input, input);
}
@Test
public void testSpaceBeforeEnd() {
final String input = "<A><!-- INSERT_CHILD_LINKS -->";
checkFilter(input, input);
}
@Test
public void testTooManyCharacters_1() {
final String input = "<A><!--INSERT_CHILD_LINKSS-->";
checkFilter(input, input);
}
@Test
public void testTooManyCharacters_2() {
final String input = "<A><!--INSERT_CHILD_LINKS_STYLES-->";
checkFilter(input, input);
}
@Test
public void testAtStart() {
final String input = "<!--INSERT_CHILD_LINKS--><A>";
final String expected = "<LINKS><A>";
checkFilter(input, expected);
}
@Test
public void testChildStyle() {
final String input = "<!--INSERT_CHILD_LINK_STYLE--><A>";
final String expected = "<STYLE><A>";
checkFilter(input, expected);
}
@Test
public void testDefaultEncoding() {
final String input = "";
checkEncoding(input, null);
}
@Test
public void testEncodingUtf8() {
final String input =
"<meta http-equiv=\"Content-Type\" content=\"text/html; charset=utf-8\">";
checkEncoding(input, "utf-8");
}
@Test
public void testMetaNoEncoding() {
final String input =
"<meta http-equiv=\"Content-Type\" content=\"text/html\">";
checkEncoding(input, null);
}
@Test
public void testMultiMeta() {
final String input =
"<meta name=\"test\" content=\"test\">" +
"<meta http-equiv=\"Content-Type\" content=\"text/html; charset=utf-8\">" +
"<meta name=\"test\" content=\"test\">";
checkEncoding(input, "utf-8");
}
@Test
public void testMetaAndInsert() {
final String metaInfo = "<meta name=\"test\" content=\"test\">" +
"<meta http-equiv=\"Content-Type\" content=\"text/html; charset=utf-8\">";
final String input =
metaInfo + "<!--INSERT_CHILD_LINK_STYLE--><A>";
final String expected = metaInfo + "<STYLE><A>";
checkFilter(input, expected);
checkEncoding(input, "utf-8");
}
private void checkFilter(final String input, final String expected) {
ByteArrayOutputStream output = new ByteArrayOutputStream();
try (OutputStream filteredOutput = new TestableReplacementStream(output, null, "../")) {
filteredOutput.write(input.getBytes());
} catch (IOException e) {
fail("IO Exception");
}
assertEquals(expected, output.toString());
}
private void checkEncoding(String input, String expectedEncoding) {
try (ByteArrayOutputStream output = new ByteArrayOutputStream();
TestableReplacementStream filteredOutput = new TestableReplacementStream(output, null, "../")) {
filteredOutput.write(input.getBytes());
if (expectedEncoding == null) {
assertNull(filteredOutput.getCharset());
} else {
assertEquals(expectedEncoding, filteredOutput.getCharset());
}
} catch (IOException e) {
fail("IO Exception");
}
}
}