/** * Licensed to Apereo under one or more contributor license agreements. See the NOTICE file * distributed with this work for additional information regarding copyright ownership. Apereo * licenses this file to you under the Apache License, Version 2.0 (the "License"); you may not use * this file except in compliance with the License. You may obtain a copy of the License at the * following location: * * <p>http://www.apache.org/licenses/LICENSE-2.0 * * <p>Unless required by applicable law or agreed to in writing, software distributed under the * License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either * express or implied. See the License for the specific language governing permissions and * limitations under the License. */ package org.apereo.portal.url; import java.util.Arrays; import java.util.LinkedHashMap; import java.util.List; import java.util.Map; import org.junit.Assert; import org.junit.Test; /** */ public class UrlStringBuilderTest { @Test public void testInvalidEncoding() { try { new UrlStringBuilder("NOT VALID", null); Assert.fail("Encoding 'NOT VALID' should throw an exception"); } catch (RuntimeException re) { //expected } } @Test public void testEmptyBuilder() { final UrlStringBuilder builder = new UrlStringBuilder("UTF-8", null); final String url = builder.toString(); Assert.assertEquals("/", url); } @Test public void testParameterEmptyBuilder() { final UrlStringBuilder builder = new UrlStringBuilder("UTF-8", null); builder.addParameter("p1", "v1", null, "v2"); builder.addParameter("p2"); builder.addParameter("p2", (List<String>) null); builder.setParameter("p2", Arrays.asList("va,?", "v b")); final String url = builder.toString(); Assert.assertEquals("/?p1=v1&p1=&p1=v2&p2=va%2C%3F&p2=v+b", url); } @Test public void testParameterProtocolHostPortBuilder() { final UrlStringBuilder builder = new UrlStringBuilder("UTF-8", "uPortal"); builder.addParameter("p1", "v1", null, "v2"); builder.setParameter("p0"); builder.addParameter("p2", (String) null); builder.setParameter("p2", Arrays.asList("va,?", "v b")); final String url = builder.toString(); Assert.assertEquals("/uPortal?p1=v1&p1=&p1=v2&p0&p2=va%2C%3F&p2=v+b", url); } @Test public void testParametersBuilder() { final UrlStringBuilder builder = new UrlStringBuilder("UTF-8", null); final Map<String, List<String>> p0 = new LinkedHashMap<String, List<String>>(); p0.put("notSeen", Arrays.asList("b", "c")); builder.setParameters(p0); builder.addParameters(p0); final Map<String, List<String>> p1 = new LinkedHashMap<String, List<String>>(); p1.put("a", Arrays.asList("b", "c")); p1.put("b", Arrays.asList(null, "d")); p1.put("c", null); builder.setParameters(p1); builder.addParameters("uP_", p1); final String url = builder.toString(); Assert.assertEquals("/?a=b&a=c&b=&b=d&c&uP_a=b&uP_a=c&uP_b=&uP_b=d&uP_c", url); } @Test public void testPathEmptyBuilder() { final UrlStringBuilder builder = new UrlStringBuilder("UTF-8", null); builder.addPath("portal"); builder.addPath("home"); builder.addPath("normal", "render.uP"); final String url = builder.toString(); Assert.assertEquals("/portal/home/normal/render.uP", url); } @Test public void testParameterPathEmptyBuilder() { final UrlStringBuilder builder = new UrlStringBuilder("UTF-8", null); builder.addParameter("p1", "v1", null, "v2"); builder.addParameter("p2", (String) null); builder.setParameter("p2", Arrays.asList("va,?", "v b")); builder.setPath(); builder.addPath("portal"); builder.setPath("foo", "bar"); builder.addPath("home"); builder.addPath("normal", "render.uP"); final String url = builder.toString(); Assert.assertEquals( "/foo/bar/home/normal/render.uP?p1=v1&p1=&p1=v2&p2=va%2C%3F&p2=v+b", url); } @Test public void testCloneParameterPathEmptyBuilder() { final UrlStringBuilder builder = new UrlStringBuilder("UTF-8", null); builder.addParameter("p1", "v1", null, "v2"); builder.addParameter("p2", (String) null); builder.setParameter("p2", Arrays.asList("va,?", "v b")); builder.setPath(); builder.addPath("portal"); builder.setPath("foo", "bar"); builder.addPath("home"); builder.addPath("normal", "render.uP"); final UrlStringBuilder builder2 = (UrlStringBuilder) builder.clone(); Assert.assertEquals(builder, builder2); Assert.assertEquals(builder.hashCode(), builder2.hashCode()); builder2.setPath(); Assert.assertNotSame(builder, builder2); Assert.assertNotSame(builder.hashCode(), builder2.hashCode()); final String url = builder.toString(); Assert.assertEquals( "/foo/bar/home/normal/render.uP?p1=v1&p1=&p1=v2&p2=va%2C%3F&p2=v+b", url); final String url2 = builder2.toString(); Assert.assertEquals("/?p1=v1&p1=&p1=v2&p2=va%2C%3F&p2=v+b", url2); } }