/*******************************************************************************
 * Copyright (c) 2010-2014 SAP AG 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:
 *     SAP AG - initial API and implementation
 *******************************************************************************/
package org.eclipse.skalli.commons;

import org.junit.Assert;
import org.junit.Test;

@SuppressWarnings("nls")
public class URLUtilsTest {

    @Test
    public void testStringToURL() throws Exception {
        Assert.assertEquals("http://host:8080/firstsecond",
                URLUtils.asURL("http://host:8080/firstsecond").toExternalForm());
        Assert.assertEquals("http://host:8080/first%20second",
                URLUtils.asURL("http://host:8080/first%20second").toExternalForm());
        Assert.assertEquals("http://host:8080/first+second",
                URLUtils.asURL("http://host:8080/first+second").toExternalForm());
        Assert.assertEquals("http://host:8080/first%20second",
                URLUtils.asURL("http://host:8080/first second").toExternalForm());
        Assert.assertEquals("http://host:8080/first%20second/third",
                URLUtils.asURL("http://host:8080/first second/third").toExternalForm());
        Assert.assertEquals("http://host:8080/=$%20%25:%C3%A4",
                URLUtils.asURL("http://host:8080/=$ %:ä").toExternalForm());
        Assert.assertEquals("http://host:8080/=$%20%25%2520:%C3%A4",
                URLUtils.asURL("http://host:8080/=$ %%20:ä").toExternalForm());
        Assert.assertEquals("http://host:8080/path?query",
                URLUtils.asURL("http://host:8080/path?query").toExternalForm());
        Assert.assertEquals("http://host:8080/path?a&b&c",
                URLUtils.asURL("http://host:8080/path?a&b&c").toExternalForm());
        Assert.assertEquals("http://host:8080/path?ab%20c",
                URLUtils.asURL("http://host:8080/path?ab c").toExternalForm());
        Assert.assertEquals("http://host:8080/path?ab%C3%A4c",
                URLUtils.asURL("http://host:8080/path?abäc").toExternalForm());
        Assert.assertNull(URLUtils.asURL(null));
        Assert.assertNull(URLUtils.asURL(""));
    }

    @Test
    public void testRemoveSlashStartEnd() throws Exception {
        Assert.assertNull(URLUtils.removeSlashStartEnd(null));
        Assert.assertEquals("", URLUtils.removeSlashStartEnd(""));
        Assert.assertEquals("", URLUtils.removeSlashStartEnd("/"));
        Assert.assertEquals("", URLUtils.removeSlashStartEnd(" // "));
        Assert.assertEquals("foobar", URLUtils.removeSlashStartEnd("foobar"));
        Assert.assertEquals("foobar", URLUtils.removeSlashStartEnd("/foobar"));
        Assert.assertEquals("foobar", URLUtils.removeSlashStartEnd("foobar/"));
        Assert.assertEquals("foobar", URLUtils.removeSlashStartEnd("/foobar/"));
        Assert.assertEquals("foo/bar", URLUtils.removeSlashStartEnd("/foo/bar/"));
        Assert.assertEquals("foo/bar", URLUtils.removeSlashStartEnd("//foo/bar///"));
        Assert.assertEquals("foo/bar", URLUtils.removeSlashStartEnd(" \t /foo/bar/ \n "));
        Assert.assertEquals("foo\\bar", URLUtils.removeSlashStartEnd(" \t /foo\\bar/ \n "));
        Assert.assertEquals(" foobar ", URLUtils.removeSlashStartEnd(" / foobar / "));
    }

    @Test
    public void testConcat() throws Exception {
        Assert.assertEquals("", URLUtils.concat(null, (Object[])null));
        Assert.assertEquals("", URLUtils.concat(null, (Object[])null));
        Assert.assertEquals("", URLUtils.concat("", (Object[])null));
        Assert.assertEquals("", URLUtils.concat(null, new Object[0]));
        Assert.assertEquals("", URLUtils.concat("", new Object[0]));
        Assert.assertEquals("http://host:8080", URLUtils.concat("http://host:8080", (Object[])null));
        Assert.assertEquals("http://host:8080", URLUtils.concat("http://host:8080/", (Object[])null));
        Assert.assertEquals("http://host:8080", URLUtils.concat("  http://host:8080// \n", (Object[])null));
        Assert.assertEquals("http://host:8080/a", URLUtils.concat("http://host:8080", "a"));
        Assert.assertEquals("http://host:8080", URLUtils.concat("http://host:8080", "/"));
        Assert.assertEquals("http://host:8080", URLUtils.concat("http://host:8080", "/\n/"));
        Assert.assertEquals("http://host:8080/a/b", URLUtils.concat("http://host:8080", "/a/", "b"));
        Assert.assertEquals("http://host:8080/a/b/c", URLUtils.concat("http://host:8080", "\t a/", " \n/b/c/  "));
        Assert.assertEquals("http://host:8080/a/4711", URLUtils.concat("http://host:8080", "a", new Integer(4711)));

    }
}
