54ba62a2c6e74332ffc742cb23faf21615b5d39fLubos Kosco/*
54ba62a2c6e74332ffc742cb23faf21615b5d39fLubos Kosco * CDDL HEADER START
54ba62a2c6e74332ffc742cb23faf21615b5d39fLubos Kosco *
54ba62a2c6e74332ffc742cb23faf21615b5d39fLubos Kosco * The contents of this file are subject to the terms of the
54ba62a2c6e74332ffc742cb23faf21615b5d39fLubos Kosco * Common Development and Distribution License (the "License").
54ba62a2c6e74332ffc742cb23faf21615b5d39fLubos Kosco * You may not use this file except in compliance with the License.
54ba62a2c6e74332ffc742cb23faf21615b5d39fLubos Kosco *
54ba62a2c6e74332ffc742cb23faf21615b5d39fLubos Kosco * See LICENSE.txt included in this distribution for the specific
54ba62a2c6e74332ffc742cb23faf21615b5d39fLubos Kosco * language governing permissions and limitations under the License.
54ba62a2c6e74332ffc742cb23faf21615b5d39fLubos Kosco *
54ba62a2c6e74332ffc742cb23faf21615b5d39fLubos Kosco * When distributing Covered Code, include this CDDL HEADER in each
54ba62a2c6e74332ffc742cb23faf21615b5d39fLubos Kosco * file and include the License file at LICENSE.txt.
54ba62a2c6e74332ffc742cb23faf21615b5d39fLubos Kosco * If applicable, add the following below this CDDL HEADER, with the
54ba62a2c6e74332ffc742cb23faf21615b5d39fLubos Kosco * fields enclosed by brackets "[]" replaced with your own identifying
54ba62a2c6e74332ffc742cb23faf21615b5d39fLubos Kosco * information: Portions Copyright [yyyy] [name of copyright owner]
54ba62a2c6e74332ffc742cb23faf21615b5d39fLubos Kosco *
54ba62a2c6e74332ffc742cb23faf21615b5d39fLubos Kosco * CDDL HEADER END
54ba62a2c6e74332ffc742cb23faf21615b5d39fLubos Kosco */
54ba62a2c6e74332ffc742cb23faf21615b5d39fLubos Kosco
54ba62a2c6e74332ffc742cb23faf21615b5d39fLubos Kosco/*
d137c0bf04fcd2fd174ec2ef1d94bcb7669d6b4eVladimir Kotal * Copyright (c) 2007, 2015, Oracle and/or its affiliates. All rights reserved.
54ba62a2c6e74332ffc742cb23faf21615b5d39fLubos Kosco */
2b05b66980319619ab632014c44321e0d4adc9d8Knut Anders Hatlenpackage org.opensolaris.opengrok.web;
2b05b66980319619ab632014c44321e0d4adc9d8Knut Anders Hatlen
d7632865cbb23540feb5b66d1c3f8569bbac6c61Knut Anders Hatlenimport java.io.ByteArrayInputStream;
a39bcfe2e58183496eab6572675e2896e5045fa7Knut Anders Hatlenimport java.io.IOException;
2b05b66980319619ab632014c44321e0d4adc9d8Knut Anders Hatlenimport java.io.StringWriter;
2b05b66980319619ab632014c44321e0d4adc9d8Knut Anders Hatlenimport java.util.Locale;
d7632865cbb23540feb5b66d1c3f8569bbac6c61Knut Anders Hatlenimport javax.xml.parsers.DocumentBuilderFactory;
2b05b66980319619ab632014c44321e0d4adc9d8Knut Anders Hatlenimport org.junit.AfterClass;
2b05b66980319619ab632014c44321e0d4adc9d8Knut Anders Hatlenimport org.junit.BeforeClass;
2b05b66980319619ab632014c44321e0d4adc9d8Knut Anders Hatlenimport org.junit.Test;
2b05b66980319619ab632014c44321e0d4adc9d8Knut Anders Hatlenimport static org.junit.Assert.*;
2b05b66980319619ab632014c44321e0d4adc9d8Knut Anders Hatlen
2b05b66980319619ab632014c44321e0d4adc9d8Knut Anders Hatlen/**
2b05b66980319619ab632014c44321e0d4adc9d8Knut Anders Hatlen * Test of the methods in <code>org.opensolaris.opengrok.web.Util</code>.
2b05b66980319619ab632014c44321e0d4adc9d8Knut Anders Hatlen */
2b05b66980319619ab632014c44321e0d4adc9d8Knut Anders Hatlenpublic class UtilTest {
2b05b66980319619ab632014c44321e0d4adc9d8Knut Anders Hatlen private static Locale savedLocale;
2b05b66980319619ab632014c44321e0d4adc9d8Knut Anders Hatlen
2b05b66980319619ab632014c44321e0d4adc9d8Knut Anders Hatlen @BeforeClass
2b05b66980319619ab632014c44321e0d4adc9d8Knut Anders Hatlen public static void setUpClass() {
2b05b66980319619ab632014c44321e0d4adc9d8Knut Anders Hatlen // Some of the methods have different results in different locales.
2b05b66980319619ab632014c44321e0d4adc9d8Knut Anders Hatlen // Set locale to en_US for these tests.
2b05b66980319619ab632014c44321e0d4adc9d8Knut Anders Hatlen savedLocale = Locale.getDefault();
2b05b66980319619ab632014c44321e0d4adc9d8Knut Anders Hatlen Locale.setDefault(Locale.US);
2b05b66980319619ab632014c44321e0d4adc9d8Knut Anders Hatlen }
2b05b66980319619ab632014c44321e0d4adc9d8Knut Anders Hatlen
2b05b66980319619ab632014c44321e0d4adc9d8Knut Anders Hatlen @AfterClass
2b05b66980319619ab632014c44321e0d4adc9d8Knut Anders Hatlen public static void tearDownClass() {
2b05b66980319619ab632014c44321e0d4adc9d8Knut Anders Hatlen Locale.setDefault(savedLocale);
2b05b66980319619ab632014c44321e0d4adc9d8Knut Anders Hatlen savedLocale = null;
2b05b66980319619ab632014c44321e0d4adc9d8Knut Anders Hatlen }
2b05b66980319619ab632014c44321e0d4adc9d8Knut Anders Hatlen
2b05b66980319619ab632014c44321e0d4adc9d8Knut Anders Hatlen @Test
a39bcfe2e58183496eab6572675e2896e5045fa7Knut Anders Hatlen public void htmlize() throws IOException {
2b05b66980319619ab632014c44321e0d4adc9d8Knut Anders Hatlen String[][] input_output = {
54ba62a2c6e74332ffc742cb23faf21615b5d39fLubos Kosco {"This is a test", "This is a test" },
54ba62a2c6e74332ffc742cb23faf21615b5d39fLubos Kosco {"Newline\nshould become <br/>",
2b05b66980319619ab632014c44321e0d4adc9d8Knut Anders Hatlen "Newline<br/>should become &lt;br/&gt;" },
54ba62a2c6e74332ffc742cb23faf21615b5d39fLubos Kosco {"Open & Grok", "Open &amp; Grok" },
54ba62a2c6e74332ffc742cb23faf21615b5d39fLubos Kosco {"&amp;&lt;&gt;", "&amp;amp;&amp;lt;&amp;gt;" },
2b05b66980319619ab632014c44321e0d4adc9d8Knut Anders Hatlen };
2b05b66980319619ab632014c44321e0d4adc9d8Knut Anders Hatlen for (String[] in_out : input_output) {
2b05b66980319619ab632014c44321e0d4adc9d8Knut Anders Hatlen // 1 arg
8ec10d6d3956617da0e3ad8e5d88e4821458739cJorgen Austvik assertEquals(in_out[1], Util.htmlize(in_out[0]));
2b05b66980319619ab632014c44321e0d4adc9d8Knut Anders Hatlen // 2 args
2b05b66980319619ab632014c44321e0d4adc9d8Knut Anders Hatlen StringBuilder sb = new StringBuilder();
8ec10d6d3956617da0e3ad8e5d88e4821458739cJorgen Austvik Util.htmlize(in_out[0], sb);
2b05b66980319619ab632014c44321e0d4adc9d8Knut Anders Hatlen assertEquals(in_out[1], sb.toString());
2b05b66980319619ab632014c44321e0d4adc9d8Knut Anders Hatlen }
2b05b66980319619ab632014c44321e0d4adc9d8Knut Anders Hatlen }
2b05b66980319619ab632014c44321e0d4adc9d8Knut Anders Hatlen
2b05b66980319619ab632014c44321e0d4adc9d8Knut Anders Hatlen @Test
2b05b66980319619ab632014c44321e0d4adc9d8Knut Anders Hatlen public void breadcrumbPath() {
2b05b66980319619ab632014c44321e0d4adc9d8Knut Anders Hatlen assertEquals(null, Util.breadcrumbPath("/root/", null));
2b05b66980319619ab632014c44321e0d4adc9d8Knut Anders Hatlen
2b05b66980319619ab632014c44321e0d4adc9d8Knut Anders Hatlen assertEquals("", Util.breadcrumbPath("/root/", ""));
2b05b66980319619ab632014c44321e0d4adc9d8Knut Anders Hatlen
50203181d8c071cfd69cb197b5da0eda5c4d6372Jens Elkner assertEquals("<a href=\"/root/x\">x</a>",
50203181d8c071cfd69cb197b5da0eda5c4d6372Jens Elkner Util.breadcrumbPath("/root/", "x"));
2b05b66980319619ab632014c44321e0d4adc9d8Knut Anders Hatlen assertEquals("<a href=\"/root/xx\">xx</a>",
2b05b66980319619ab632014c44321e0d4adc9d8Knut Anders Hatlen Util.breadcrumbPath("/root/", "xx"));
2b05b66980319619ab632014c44321e0d4adc9d8Knut Anders Hatlen
50203181d8c071cfd69cb197b5da0eda5c4d6372Jens Elkner // parent directories have a trailing slash in href
50203181d8c071cfd69cb197b5da0eda5c4d6372Jens Elkner assertEquals("<a href=\"/r/a/\">a</a>/<a href=\"/r/a/b\">b</a>",
2b05b66980319619ab632014c44321e0d4adc9d8Knut Anders Hatlen Util.breadcrumbPath("/r/", "a/b"));
50203181d8c071cfd69cb197b5da0eda5c4d6372Jens Elkner // if basename is a dir (ends with file seperator), href link also
50203181d8c071cfd69cb197b5da0eda5c4d6372Jens Elkner // ends with a '/'
50203181d8c071cfd69cb197b5da0eda5c4d6372Jens Elkner assertEquals("<a href=\"/r/a/\">a</a>/<a href=\"/r/a/b/\">b</a>/",
d36f40a61716737597bb3c0e4c4270468d1c70fcKnut Anders Hatlen Util.breadcrumbPath("/r/", "a/b/"));
50203181d8c071cfd69cb197b5da0eda5c4d6372Jens Elkner // should work the same way with a '.' as file separator
50203181d8c071cfd69cb197b5da0eda5c4d6372Jens Elkner assertEquals("<a href=\"/r/java/\">java</a>." +
50203181d8c071cfd69cb197b5da0eda5c4d6372Jens Elkner "<a href=\"/r/java/lang/\">lang</a>." +
5e65d0a72b5378ea6f3cd9ad6b39499af081c2b4Knut Anders Hatlen "<a href=\"/r/java/lang/String\">String</a>",
5e65d0a72b5378ea6f3cd9ad6b39499af081c2b4Knut Anders Hatlen Util.breadcrumbPath("/r/", "java.lang.String", '.'));
50203181d8c071cfd69cb197b5da0eda5c4d6372Jens Elkner // suffix added to the link?
5e65d0a72b5378ea6f3cd9ad6b39499af081c2b4Knut Anders Hatlen assertEquals("<a href=\"/root/xx&project=y\">xx</a>",
5e65d0a72b5378ea6f3cd9ad6b39499af081c2b4Knut Anders Hatlen Util.breadcrumbPath("/root/", "xx", '/', "&project=y", false));
50203181d8c071cfd69cb197b5da0eda5c4d6372Jens Elkner // compact: path needs to be resolved to /xx and no link is added
50203181d8c071cfd69cb197b5da0eda5c4d6372Jens Elkner // for the virtual root directory (parent) but emitted as plain text.
50203181d8c071cfd69cb197b5da0eda5c4d6372Jens Elkner // Prefix gets just prefixed as is and not mangled wrt. path -> "//"
50203181d8c071cfd69cb197b5da0eda5c4d6372Jens Elkner assertEquals("/<a href=\"/root//xx&project=y\">xx</a>",
50203181d8c071cfd69cb197b5da0eda5c4d6372Jens Elkner Util.breadcrumbPath("/root/", "../xx", '/', "&project=y", true));
50203181d8c071cfd69cb197b5da0eda5c4d6372Jens Elkner // relative pathes are resolved wrt. / , so path resolves to /a/c/d
50203181d8c071cfd69cb197b5da0eda5c4d6372Jens Elkner assertEquals("/<a href=\"/r//a/\">a</a>/" +
50203181d8c071cfd69cb197b5da0eda5c4d6372Jens Elkner "<a href=\"/r//a/c/\">c</a>/" +
50203181d8c071cfd69cb197b5da0eda5c4d6372Jens Elkner "<a href=\"/r//a/c/d\">d</a>",
5e65d0a72b5378ea6f3cd9ad6b39499af081c2b4Knut Anders Hatlen Util.breadcrumbPath("/r/", "../a/b/../c//d", '/', "", true));
2b05b66980319619ab632014c44321e0d4adc9d8Knut Anders Hatlen }
2b05b66980319619ab632014c44321e0d4adc9d8Knut Anders Hatlen
2b05b66980319619ab632014c44321e0d4adc9d8Knut Anders Hatlen @Test
2b05b66980319619ab632014c44321e0d4adc9d8Knut Anders Hatlen public void redableSize() {
50203181d8c071cfd69cb197b5da0eda5c4d6372Jens Elkner assertEquals("0 ", Util.readableSize(0));
50203181d8c071cfd69cb197b5da0eda5c4d6372Jens Elkner assertEquals("1 ", Util.readableSize(1));
50203181d8c071cfd69cb197b5da0eda5c4d6372Jens Elkner assertEquals("-1 ", Util.readableSize(-1));
50203181d8c071cfd69cb197b5da0eda5c4d6372Jens Elkner assertEquals("1,000 ", Util.readableSize(1000));
50203181d8c071cfd69cb197b5da0eda5c4d6372Jens Elkner assertEquals("1 KiB", Util.readableSize(1024));
50203181d8c071cfd69cb197b5da0eda5c4d6372Jens Elkner assertEquals("2.4 KiB", Util.readableSize(2500));
50203181d8c071cfd69cb197b5da0eda5c4d6372Jens Elkner assertEquals("<b>1.4 MiB</b>", Util.readableSize(1474560));
d137c0bf04fcd2fd174ec2ef1d94bcb7669d6b4eVladimir Kotal assertEquals("<b>3.5 GiB</b>", Util.readableSize(3758489600L));
d137c0bf04fcd2fd174ec2ef1d94bcb7669d6b4eVladimir Kotal assertEquals("<b>8,589,934,592 GiB</b>",
d137c0bf04fcd2fd174ec2ef1d94bcb7669d6b4eVladimir Kotal Util.readableSize(Long.MAX_VALUE));
2b05b66980319619ab632014c44321e0d4adc9d8Knut Anders Hatlen }
2b05b66980319619ab632014c44321e0d4adc9d8Knut Anders Hatlen
2b05b66980319619ab632014c44321e0d4adc9d8Knut Anders Hatlen @Test
2b05b66980319619ab632014c44321e0d4adc9d8Knut Anders Hatlen public void readableLine() throws Exception {
2b05b66980319619ab632014c44321e0d4adc9d8Knut Anders Hatlen StringWriter out = new StringWriter();
0e56cda5a5a6d63b1040e8658697b8d8abd3afd5Vladimir Kotal // hmmm - where do meaningful tests start?
0e56cda5a5a6d63b1040e8658697b8d8abd3afd5Vladimir Kotal Util.readableLine(42, out, null, null, null, null);
50203181d8c071cfd69cb197b5da0eda5c4d6372Jens Elkner assertEquals("\n<a class=\"l\" name=\"42\" href=\"#42\">42</a>",
2b05b66980319619ab632014c44321e0d4adc9d8Knut Anders Hatlen out.toString());
2b05b66980319619ab632014c44321e0d4adc9d8Knut Anders Hatlen
2b05b66980319619ab632014c44321e0d4adc9d8Knut Anders Hatlen out.getBuffer().setLength(0); // clear buffer
0e56cda5a5a6d63b1040e8658697b8d8abd3afd5Vladimir Kotal Util.readableLine(110, out, null, null, null, null);
50203181d8c071cfd69cb197b5da0eda5c4d6372Jens Elkner assertEquals("\n<a class=\"hl\" name=\"110\" href=\"#110\">110</a>",
2b05b66980319619ab632014c44321e0d4adc9d8Knut Anders Hatlen out.toString());
2b05b66980319619ab632014c44321e0d4adc9d8Knut Anders Hatlen }
2b05b66980319619ab632014c44321e0d4adc9d8Knut Anders Hatlen
2b05b66980319619ab632014c44321e0d4adc9d8Knut Anders Hatlen @Test
50203181d8c071cfd69cb197b5da0eda5c4d6372Jens Elkner public void path2uid() {
2b05b66980319619ab632014c44321e0d4adc9d8Knut Anders Hatlen assertEquals("\u0000etc\u0000passwd\u0000date",
50203181d8c071cfd69cb197b5da0eda5c4d6372Jens Elkner Util.path2uid("/etc/passwd", "date"));
2b05b66980319619ab632014c44321e0d4adc9d8Knut Anders Hatlen }
2b05b66980319619ab632014c44321e0d4adc9d8Knut Anders Hatlen
2b05b66980319619ab632014c44321e0d4adc9d8Knut Anders Hatlen @Test
2b05b66980319619ab632014c44321e0d4adc9d8Knut Anders Hatlen public void uid2url() {
2b05b66980319619ab632014c44321e0d4adc9d8Knut Anders Hatlen assertEquals("/etc/passwd", Util.uid2url(
50203181d8c071cfd69cb197b5da0eda5c4d6372Jens Elkner Util.path2uid("/etc/passwd", "date")));
2b05b66980319619ab632014c44321e0d4adc9d8Knut Anders Hatlen }
2b05b66980319619ab632014c44321e0d4adc9d8Knut Anders Hatlen
2b05b66980319619ab632014c44321e0d4adc9d8Knut Anders Hatlen @Test
2b05b66980319619ab632014c44321e0d4adc9d8Knut Anders Hatlen public void URIEncode() {
2b05b66980319619ab632014c44321e0d4adc9d8Knut Anders Hatlen assertEquals("", Util.URIEncode(""));
2b05b66980319619ab632014c44321e0d4adc9d8Knut Anders Hatlen assertEquals("a+b", Util.URIEncode("a b"));
2b05b66980319619ab632014c44321e0d4adc9d8Knut Anders Hatlen assertEquals("a%23b", Util.URIEncode("a#b"));
2b05b66980319619ab632014c44321e0d4adc9d8Knut Anders Hatlen assertEquals("a%2Fb", Util.URIEncode("a/b"));
2b05b66980319619ab632014c44321e0d4adc9d8Knut Anders Hatlen assertEquals("README.txt", Util.URIEncode("README.txt"));
2b05b66980319619ab632014c44321e0d4adc9d8Knut Anders Hatlen }
2b05b66980319619ab632014c44321e0d4adc9d8Knut Anders Hatlen
2b05b66980319619ab632014c44321e0d4adc9d8Knut Anders Hatlen @Test
2b05b66980319619ab632014c44321e0d4adc9d8Knut Anders Hatlen public void URIEncodePath() {
2b05b66980319619ab632014c44321e0d4adc9d8Knut Anders Hatlen assertEquals("", Util.URIEncodePath(""));
2b05b66980319619ab632014c44321e0d4adc9d8Knut Anders Hatlen assertEquals("/", Util.URIEncodePath("/"));
2b05b66980319619ab632014c44321e0d4adc9d8Knut Anders Hatlen assertEquals("a", Util.URIEncodePath("a"));
6c04396026ca8a1c008bb758da8e8b95c94dba5bKnut Anders Hatlen assertEquals("%09", Util.URIEncodePath("\t"));
6c04396026ca8a1c008bb758da8e8b95c94dba5bKnut Anders Hatlen assertEquals("a%2Bb", Util.URIEncodePath("a+b"));
35e0fa4bfb195dedab509c7df1cb15b696cbda92Trond Norbye assertEquals("a%20b", Util.URIEncodePath("a b"));
35e0fa4bfb195dedab509c7df1cb15b696cbda92Trond Norbye assertEquals("/a//x/yz/%23%23/%20/%20%3F",
35e0fa4bfb195dedab509c7df1cb15b696cbda92Trond Norbye Util.URIEncodePath("/a//x/yz/##/ / ?"));
6c04396026ca8a1c008bb758da8e8b95c94dba5bKnut Anders Hatlen assertEquals("foo%3A%3Abar%3A%3Atest.js",
6c04396026ca8a1c008bb758da8e8b95c94dba5bKnut Anders Hatlen Util.URIEncodePath("foo::bar::test.js"));
6c04396026ca8a1c008bb758da8e8b95c94dba5bKnut Anders Hatlen assertEquals("bl%C3%A5b%C3%A6rsyltet%C3%B8y",
6c04396026ca8a1c008bb758da8e8b95c94dba5bKnut Anders Hatlen Util.URIEncodePath("bl\u00E5b\u00E6rsyltet\u00F8y"));
2b05b66980319619ab632014c44321e0d4adc9d8Knut Anders Hatlen }
2b05b66980319619ab632014c44321e0d4adc9d8Knut Anders Hatlen
2b05b66980319619ab632014c44321e0d4adc9d8Knut Anders Hatlen @Test
2b05b66980319619ab632014c44321e0d4adc9d8Knut Anders Hatlen public void formQuoteEscape() {
2b05b66980319619ab632014c44321e0d4adc9d8Knut Anders Hatlen assertEquals("", Util.formQuoteEscape(null));
2b05b66980319619ab632014c44321e0d4adc9d8Knut Anders Hatlen assertEquals("abc", Util.formQuoteEscape("abc"));
2b05b66980319619ab632014c44321e0d4adc9d8Knut Anders Hatlen assertEquals("&quot;abc&quot;", Util.formQuoteEscape("\"abc\""));
ceddad3a2fabdcc5b60631501187f9e8b4b43a3bKnut Anders Hatlen assertEquals("&amp;aring;", Util.formQuoteEscape("&aring;"));
2b05b66980319619ab632014c44321e0d4adc9d8Knut Anders Hatlen }
bb742941612ab119288533d2e66dc1dd1509b32bLubos Kosco
bb742941612ab119288533d2e66dc1dd1509b32bLubos Kosco @Test
bb742941612ab119288533d2e66dc1dd1509b32bLubos Kosco public void diffline() {
50203181d8c071cfd69cb197b5da0eda5c4d6372Jens Elkner String[][] tests = {
55ca23edd10d48a1f4683d6071955db3683a3b69Vladimir Kotal {
55ca23edd10d48a1f4683d6071955db3683a3b69Vladimir Kotal "if (a < b && foo < bar && c > d)",
55ca23edd10d48a1f4683d6071955db3683a3b69Vladimir Kotal "if (a < b && foo > bar && c > d)",
55ca23edd10d48a1f4683d6071955db3683a3b69Vladimir Kotal
55ca23edd10d48a1f4683d6071955db3683a3b69Vladimir Kotal "if (a &lt; b &amp;&amp; foo <span class=\"d\">&lt;</span> bar &amp;&amp; c &gt; d)",
55ca23edd10d48a1f4683d6071955db3683a3b69Vladimir Kotal "if (a &lt; b &amp;&amp; foo <span class=\"a\">&gt;</span> bar &amp;&amp; c &gt; d)"
55ca23edd10d48a1f4683d6071955db3683a3b69Vladimir Kotal },
55ca23edd10d48a1f4683d6071955db3683a3b69Vladimir Kotal {
55ca23edd10d48a1f4683d6071955db3683a3b69Vladimir Kotal "foo << 1",
55ca23edd10d48a1f4683d6071955db3683a3b69Vladimir Kotal "foo >> 1",
55ca23edd10d48a1f4683d6071955db3683a3b69Vladimir Kotal
55ca23edd10d48a1f4683d6071955db3683a3b69Vladimir Kotal "foo <span class=\"d\">&lt;&lt;</span> 1",
55ca23edd10d48a1f4683d6071955db3683a3b69Vladimir Kotal "foo <span class=\"a\">&gt;&gt;</span> 1"
55ca23edd10d48a1f4683d6071955db3683a3b69Vladimir Kotal },
50203181d8c071cfd69cb197b5da0eda5c4d6372Jens Elkner {
50203181d8c071cfd69cb197b5da0eda5c4d6372Jens Elkner "\"(ses_id, mer_id, pass_id, \" + refCol +\" , mer_ref, amnt, "
50203181d8c071cfd69cb197b5da0eda5c4d6372Jens Elkner + "cur, ps_id, ret_url, d_req_time, d_req_mil, h_resp_time, "
50203181d8c071cfd69cb197b5da0eda5c4d6372Jens Elkner + "h_resp_mil) \"",
50203181d8c071cfd69cb197b5da0eda5c4d6372Jens Elkner "\"(ses_id, mer_id, pass_id, \" + refCol +\" , mer_ref, amnt, "
50203181d8c071cfd69cb197b5da0eda5c4d6372Jens Elkner + "cur, ps_id, ret_url, exp_url, d_req_time, d_req_mil, "
50203181d8c071cfd69cb197b5da0eda5c4d6372Jens Elkner + "h_resp_time, h_resp_mil) \"",
50203181d8c071cfd69cb197b5da0eda5c4d6372Jens Elkner
55ca23edd10d48a1f4683d6071955db3683a3b69Vladimir Kotal "\"(ses_id, mer_id, pass_id, \" + refCol +\" , mer_ref, amnt, "
55ca23edd10d48a1f4683d6071955db3683a3b69Vladimir Kotal + "cur, ps_id, ret_url, d_req_time, d_req_mil, h_resp_time, "
55ca23edd10d48a1f4683d6071955db3683a3b69Vladimir Kotal + "h_resp_mil) \"",
50203181d8c071cfd69cb197b5da0eda5c4d6372Jens Elkner "\"(ses_id, mer_id, pass_id, \" + refCol +\" , mer_ref, amnt, "
50203181d8c071cfd69cb197b5da0eda5c4d6372Jens Elkner + "cur, ps_id, ret_url, <span class=\"a\">exp_url, "
50203181d8c071cfd69cb197b5da0eda5c4d6372Jens Elkner + "</span>d_req_time, d_req_mil, h_resp_time, h_resp_mil) \""
50203181d8c071cfd69cb197b5da0eda5c4d6372Jens Elkner },
50203181d8c071cfd69cb197b5da0eda5c4d6372Jens Elkner {
50203181d8c071cfd69cb197b5da0eda5c4d6372Jens Elkner "\"VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)\", values);",
50203181d8c071cfd69cb197b5da0eda5c4d6372Jens Elkner "\"VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)\", values);",
55ca23edd10d48a1f4683d6071955db3683a3b69Vladimir Kotal
55ca23edd10d48a1f4683d6071955db3683a3b69Vladimir Kotal "\"VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)\", values);",
50203181d8c071cfd69cb197b5da0eda5c4d6372Jens Elkner "\"VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?<span "
50203181d8c071cfd69cb197b5da0eda5c4d6372Jens Elkner + "class=\"a\">, ?</span>)\", values);"
50203181d8c071cfd69cb197b5da0eda5c4d6372Jens Elkner },
50203181d8c071cfd69cb197b5da0eda5c4d6372Jens Elkner {
50203181d8c071cfd69cb197b5da0eda5c4d6372Jens Elkner "char *config_list = NULL;",
50203181d8c071cfd69cb197b5da0eda5c4d6372Jens Elkner "char **config_list = NULL;",
55ca23edd10d48a1f4683d6071955db3683a3b69Vladimir Kotal
55ca23edd10d48a1f4683d6071955db3683a3b69Vladimir Kotal "char *config_list = NULL;",
50203181d8c071cfd69cb197b5da0eda5c4d6372Jens Elkner "char *<span class=\"a\">*</span>config_list = NULL;"
50203181d8c071cfd69cb197b5da0eda5c4d6372Jens Elkner },
55ca23edd10d48a1f4683d6071955db3683a3b69Vladimir Kotal {
55ca23edd10d48a1f4683d6071955db3683a3b69Vladimir Kotal "char **config_list = NULL;",
55ca23edd10d48a1f4683d6071955db3683a3b69Vladimir Kotal "char *config_list = NULL;",
55ca23edd10d48a1f4683d6071955db3683a3b69Vladimir Kotal
55ca23edd10d48a1f4683d6071955db3683a3b69Vladimir Kotal "char *<span class=\"d\">*</span>config_list = NULL;",
55ca23edd10d48a1f4683d6071955db3683a3b69Vladimir Kotal "char *config_list = NULL;"
55ca23edd10d48a1f4683d6071955db3683a3b69Vladimir Kotal },
50203181d8c071cfd69cb197b5da0eda5c4d6372Jens Elkner {
50203181d8c071cfd69cb197b5da0eda5c4d6372Jens Elkner "* An error occured or there is non-numeric stuff at the end",
50203181d8c071cfd69cb197b5da0eda5c4d6372Jens Elkner "* An error occurred or there is non-numeric stuff at the end",
55ca23edd10d48a1f4683d6071955db3683a3b69Vladimir Kotal
55ca23edd10d48a1f4683d6071955db3683a3b69Vladimir Kotal "* An error occured or there is non-numeric stuff at the end",
50203181d8c071cfd69cb197b5da0eda5c4d6372Jens Elkner "* An error occur<span class=\"a\">r</span>ed or there is "
50203181d8c071cfd69cb197b5da0eda5c4d6372Jens Elkner + "non-numeric stuff at the end"
50203181d8c071cfd69cb197b5da0eda5c4d6372Jens Elkner }
50203181d8c071cfd69cb197b5da0eda5c4d6372Jens Elkner };
50203181d8c071cfd69cb197b5da0eda5c4d6372Jens Elkner for (int i=0; i < tests.length; i++) {
55ca23edd10d48a1f4683d6071955db3683a3b69Vladimir Kotal String[] strings=Util.diffline(
55ca23edd10d48a1f4683d6071955db3683a3b69Vladimir Kotal new StringBuilder(tests[i][0]),
50203181d8c071cfd69cb197b5da0eda5c4d6372Jens Elkner new StringBuilder(tests[i][1]));
55ca23edd10d48a1f4683d6071955db3683a3b69Vladimir Kotal assertEquals(""+ i + "," + 0, tests[i][2], strings[0]);
55ca23edd10d48a1f4683d6071955db3683a3b69Vladimir Kotal assertEquals(""+ i + "," + 1, tests[i][3], strings[1]);
50203181d8c071cfd69cb197b5da0eda5c4d6372Jens Elkner }
bb742941612ab119288533d2e66dc1dd1509b32bLubos Kosco }
d7632865cbb23540feb5b66d1c3f8569bbac6c61Knut Anders Hatlen
d7632865cbb23540feb5b66d1c3f8569bbac6c61Knut Anders Hatlen @Test
d7632865cbb23540feb5b66d1c3f8569bbac6c61Knut Anders Hatlen public void dumpConfiguration() throws Exception {
d7632865cbb23540feb5b66d1c3f8569bbac6c61Knut Anders Hatlen StringBuilder out = new StringBuilder();
d7632865cbb23540feb5b66d1c3f8569bbac6c61Knut Anders Hatlen Util.dumpConfiguration(out);
d7632865cbb23540feb5b66d1c3f8569bbac6c61Knut Anders Hatlen String s = out.toString();
d7632865cbb23540feb5b66d1c3f8569bbac6c61Knut Anders Hatlen
d7632865cbb23540feb5b66d1c3f8569bbac6c61Knut Anders Hatlen // Verify that we got a table.
d7632865cbb23540feb5b66d1c3f8569bbac6c61Knut Anders Hatlen assertTrue(s.startsWith("<table"));
d7632865cbb23540feb5b66d1c3f8569bbac6c61Knut Anders Hatlen
d7632865cbb23540feb5b66d1c3f8569bbac6c61Knut Anders Hatlen // Verify that the output is well-formed.
d7632865cbb23540feb5b66d1c3f8569bbac6c61Knut Anders Hatlen String xml = "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n" + s;
d7632865cbb23540feb5b66d1c3f8569bbac6c61Knut Anders Hatlen DocumentBuilderFactory.newInstance().newDocumentBuilder().parse(
d7632865cbb23540feb5b66d1c3f8569bbac6c61Knut Anders Hatlen new ByteArrayInputStream(xml.getBytes("UTF-8")));
d7632865cbb23540feb5b66d1c3f8569bbac6c61Knut Anders Hatlen }
0b2af20036cd228afb7d7003a07c16522f944ea1Knut Anders Hatlen
0b2af20036cd228afb7d7003a07c16522f944ea1Knut Anders Hatlen @Test
0b2af20036cd228afb7d7003a07c16522f944ea1Knut Anders Hatlen public void jsStringLiteral() {
0b2af20036cd228afb7d7003a07c16522f944ea1Knut Anders Hatlen assertEquals("\"abc\\n\\r\\\"\\\\\"",
0b2af20036cd228afb7d7003a07c16522f944ea1Knut Anders Hatlen Util.jsStringLiteral("abc\n\r\"\\"));
0b2af20036cd228afb7d7003a07c16522f944ea1Knut Anders Hatlen }
07f0be6fc0c78e3446f89b4a28384dbf35fe19e3Knut Anders Hatlen
07f0be6fc0c78e3446f89b4a28384dbf35fe19e3Knut Anders Hatlen @Test
07f0be6fc0c78e3446f89b4a28384dbf35fe19e3Knut Anders Hatlen public void stripPathPrefix() {
07f0be6fc0c78e3446f89b4a28384dbf35fe19e3Knut Anders Hatlen assertEquals("/", Util.stripPathPrefix("/", "/"));
07f0be6fc0c78e3446f89b4a28384dbf35fe19e3Knut Anders Hatlen assertEquals("/abc", Util.stripPathPrefix("/abc", "/abc"));
07f0be6fc0c78e3446f89b4a28384dbf35fe19e3Knut Anders Hatlen assertEquals("/abc/", Util.stripPathPrefix("/abc", "/abc/"));
07f0be6fc0c78e3446f89b4a28384dbf35fe19e3Knut Anders Hatlen assertEquals("/abc", Util.stripPathPrefix("/abc/", "/abc"));
07f0be6fc0c78e3446f89b4a28384dbf35fe19e3Knut Anders Hatlen assertEquals("/abc/", Util.stripPathPrefix("/abc/", "/abc/"));
07f0be6fc0c78e3446f89b4a28384dbf35fe19e3Knut Anders Hatlen assertEquals("abc", Util.stripPathPrefix("/", "/abc"));
07f0be6fc0c78e3446f89b4a28384dbf35fe19e3Knut Anders Hatlen assertEquals("abc/def", Util.stripPathPrefix("/", "/abc/def"));
07f0be6fc0c78e3446f89b4a28384dbf35fe19e3Knut Anders Hatlen assertEquals("def", Util.stripPathPrefix("/abc", "/abc/def"));
07f0be6fc0c78e3446f89b4a28384dbf35fe19e3Knut Anders Hatlen assertEquals("def", Util.stripPathPrefix("/abc/", "/abc/def"));
07f0be6fc0c78e3446f89b4a28384dbf35fe19e3Knut Anders Hatlen assertEquals("/abcdef", Util.stripPathPrefix("/abc", "/abcdef"));
07f0be6fc0c78e3446f89b4a28384dbf35fe19e3Knut Anders Hatlen assertEquals("/abcdef", Util.stripPathPrefix("/abc/", "/abcdef"));
07f0be6fc0c78e3446f89b4a28384dbf35fe19e3Knut Anders Hatlen assertEquals("def/ghi", Util.stripPathPrefix("/abc", "/abc/def/ghi"));
07f0be6fc0c78e3446f89b4a28384dbf35fe19e3Knut Anders Hatlen assertEquals("def/ghi", Util.stripPathPrefix("/abc/", "/abc/def/ghi"));
07f0be6fc0c78e3446f89b4a28384dbf35fe19e3Knut Anders Hatlen }
54ba62a2c6e74332ffc742cb23faf21615b5d39fLubos Kosco}
bb742941612ab119288533d2e66dc1dd1509b32bLubos Kosco