| /* |
| * Licensed to the Apache Software Foundation (ASF) under one |
| * or more contributor license agreements. See the NOTICE file |
| * distributed with this work for additional information |
| * regarding copyright ownership. The ASF 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 |
| * |
| * http://www.apache.org/licenses/LICENSE-2.0 |
| * |
| * 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.apache.felix.http.base.internal.util; |
| |
| import static org.apache.felix.http.base.internal.util.UriUtils.compactPath; |
| import static org.apache.felix.http.base.internal.util.UriUtils.concat; |
| import static org.apache.felix.http.base.internal.util.UriUtils.decodePath; |
| import static org.apache.felix.http.base.internal.util.UriUtils.relativePath; |
| import static org.apache.felix.http.base.internal.util.UriUtils.removeDotSegments; |
| import static org.junit.Assert.assertEquals; |
| |
| import org.junit.Test; |
| |
| /** |
| * Test cases for {@link UriUtils}. |
| */ |
| public class UriUtilsTest |
| { |
| @Test |
| public void testCompactPath() |
| { |
| assertEquals(null, compactPath(null)); |
| assertEquals("", compactPath("")); |
| assertEquals("/", compactPath("/")); |
| assertEquals("/", compactPath("//")); |
| assertEquals("/foo/", compactPath("/foo//")); |
| assertEquals("/foo/", compactPath("//foo/")); |
| assertEquals("/foo/bar", compactPath("/foo/bar")); |
| assertEquals("/foo/bar", compactPath("//foo//bar")); |
| assertEquals("/foo/bar", compactPath("/foo///bar")); |
| assertEquals("/foo/bar?qux=quu//baz", compactPath("/foo/bar?qux=quu//baz")); |
| } |
| |
| @Test |
| public void testRelativePath() |
| { |
| assertEquals("", relativePath("/foo", null)); |
| assertEquals("", relativePath("/foo", "")); |
| assertEquals("", relativePath("/foo", "/foo")); |
| assertEquals("", relativePath("/foo", "/foo/")); // XXX or "/"? |
| assertEquals("/foo", relativePath("/", "/foo")); |
| assertEquals("/foo/", relativePath("/", "/foo/")); |
| assertEquals("/foo/", relativePath(null, "/foo/")); |
| assertEquals("/bar", relativePath("/foo", "/foo/bar")); |
| assertEquals("/bar/foo", relativePath("/foo", "/bar/foo")); |
| assertEquals("/bar", relativePath("/foo/", "/foo/bar")); |
| assertEquals("/foobar", relativePath("/foo", "/foobar")); |
| } |
| |
| @Test |
| public void testConcatOk() |
| { |
| assertEquals(null, concat(null, null)); |
| assertEquals("", concat(null, "")); |
| assertEquals("/", concat(null, "/")); |
| assertEquals("foo", concat(null, "foo")); |
| assertEquals("/foo", concat(null, "/foo")); |
| |
| assertEquals("", concat("", null)); |
| assertEquals("/", concat("/", null)); |
| assertEquals("foo", concat("foo", null)); |
| assertEquals("/foo", concat("/foo", null)); |
| |
| assertEquals("", concat("", "")); |
| assertEquals("foo", concat("", "foo")); |
| assertEquals("/", concat("", "/")); |
| assertEquals("/foo", concat("", "/foo")); |
| |
| assertEquals("foo", concat("foo", "")); |
| assertEquals("/", concat("/", "")); |
| assertEquals("/foo", concat("/foo", "")); |
| |
| assertEquals("foo", concat("foo", "")); |
| assertEquals("foo/bar", concat("foo", "bar")); |
| assertEquals("foo/", concat("foo", "/")); |
| assertEquals("foo/bar", concat("foo", "/bar")); |
| |
| assertEquals("/foo", concat("/", "foo")); |
| assertEquals("/", concat("/", "/")); |
| assertEquals("/bar", concat("/", "/bar")); |
| |
| assertEquals("foo/", concat("foo/", null)); |
| assertEquals("foo/", concat("foo/", "")); |
| assertEquals("foo/bar", concat("foo/", "bar")); |
| assertEquals("foo/", concat("foo/", "/")); |
| assertEquals("foo/bar", concat("foo/", "/bar")); |
| |
| assertEquals("?quu=1", concat("?quu=1", null)); |
| assertEquals("?quu=1", concat("?quu=1", "")); |
| assertEquals("foo?quu=1", concat("?quu=1", "foo")); |
| assertEquals("/?quu=1", concat("?quu=1", "/")); |
| assertEquals("/foo?quu=1", concat("?quu=1", "/foo")); |
| |
| assertEquals("foo?quu=1", concat("foo?quu=1", null)); |
| assertEquals("foo?quu=1", concat("foo?quu=1", "")); |
| assertEquals("foo/bar?quu=1", concat("foo?quu=1", "bar")); |
| assertEquals("foo/?quu=1", concat("foo?quu=1", "/")); |
| assertEquals("foo/bar?quu=1", concat("foo?quu=1", "/bar")); |
| |
| assertEquals("foo/?quu=1", concat("foo/?quu=1", null)); |
| assertEquals("foo/?quu=1", concat("foo/?quu=1", "")); |
| assertEquals("foo/bar?quu=1", concat("foo/?quu=1", "bar")); |
| assertEquals("foo/?quu=1", concat("foo/?quu=1", "/")); |
| assertEquals("foo/bar?quu=1", concat("foo/?quu=1", "/bar")); |
| } |
| |
| @Test |
| public void testDecodePathOk() |
| { |
| assertEquals(null, decodePath(null)); |
| assertEquals("foo bar", decodePath("foo%20bar")); |
| assertEquals("foo%23;,:=b a r", decodePath("foo%2523%3b%2c:%3db%20a%20r")); |
| assertEquals("f\u00e4\u00e4%23;,:=b a r=", decodePath("f\u00e4\u00e4%2523%3b%2c:%3db%20a%20r%3D")); |
| assertEquals("f\u0629\u0629%23;,:=b a r", decodePath("f%d8%a9%d8%a9%2523%3b%2c:%3db%20a%20r")); |
| } |
| |
| @Test |
| public void testRemoveDotSegmentsOk() |
| { |
| assertEquals(null, removeDotSegments(null)); |
| assertEquals("", removeDotSegments("")); |
| assertEquals("", removeDotSegments(".")); |
| assertEquals("", removeDotSegments("..")); |
| assertEquals("/", removeDotSegments("/")); |
| assertEquals("/", removeDotSegments("/.")); |
| assertEquals("", removeDotSegments("/..")); |
| assertEquals("foo", removeDotSegments("./foo")); |
| assertEquals("/bar/", removeDotSegments("./foo/../bar/")); |
| assertEquals("foo", removeDotSegments("../foo")); |
| assertEquals("/", removeDotSegments("/foo/..")); |
| assertEquals("/foo/", removeDotSegments("/foo/.")); |
| assertEquals("/foo/bar", removeDotSegments("/foo/./bar")); |
| assertEquals("/bar", removeDotSegments("/foo/../bar")); |
| assertEquals("/bar", removeDotSegments("/foo/./../bar")); |
| assertEquals("/foo/bar", removeDotSegments("/foo/././bar")); |
| assertEquals("/qux", removeDotSegments("/foo/bar/../../qux")); |
| assertEquals("/foo/qux/quu", removeDotSegments("/foo/bar/../qux/././quu")); |
| assertEquals("/bar//", removeDotSegments("/foo/./../bar//")); |
| assertEquals("/", removeDotSegments("/foo/../bar/..")); |
| assertEquals("/foo/quu", removeDotSegments("/foo/bar/qux/./../../quu")); |
| assertEquals("mid/6", removeDotSegments("mid/content=5/../6")); |
| assertEquals("//bar/qux/file.ext", removeDotSegments("foo/.././/bar/qux/file.ext")); |
| // weird cases |
| assertEquals("..foo", removeDotSegments("..foo")); |
| assertEquals("foo..", removeDotSegments("foo..")); |
| assertEquals("foo.", removeDotSegments("foo.")); |
| assertEquals("/.foo", removeDotSegments("/.foo")); |
| assertEquals("/..foo", removeDotSegments("/..foo")); |
| |
| // FELIX-4440 |
| assertEquals("foo.bar", removeDotSegments("foo.bar")); |
| assertEquals("/test.jsp", removeDotSegments("/test.jsp")); |
| assertEquals("http://foo/bar./qux.quu", removeDotSegments("http://foo/bar./qux.quu")); |
| assertEquals("http://foo/bar.qux/quu", removeDotSegments("http://foo/bar.qux/quu")); |
| } |
| } |