/* * Copyright (c) 2011-2013 The original author or authors * ------------------------------------------------------ * All rights reserved. This program and the accompanying materials * are made available under the terms of the Eclipse Public License v1.0 * and Apache License v2.0 which accompanies this distribution. * * The Eclipse Public License is available at * http://www.eclipse.org/legal/epl-v10.html * * The Apache License v2.0 is available at * http://www.opensource.org/licenses/apache2.0.php * * You may elect to redistribute this code under either of these licenses. */ package io.vertx.test.core; import io.vertx.core.http.impl.HttpUtils; import org.junit.Test; import java.net.URI; import static org.junit.Assert.assertEquals; /** * @author <a href="mailto:julien@julienviet.com">Julien Viet</a> */ public class URITest { @Test public void testResolve() throws Exception { assertResolve("http://a/b/c/g", "http://a/b/c/d;p?q", "g"); assertResolve("http://a/b/c/g", "http://a/b/c/d;p?q", "./g"); assertResolve("http://a/b/c/g/", "http://a/b/c/d;p?q", "g/"); assertResolve("http://a/g", "http://a/b/c/d;p?q", "/g"); assertResolve("http://g", "http://a/b/c/d;p?q", "//g"); assertResolve("http://a/b/c/d;p?y", "http://a/b/c/d;p?q", "?y"); assertResolve("http://a/b/c/g?y", "http://a/b/c/d;p?q", "g?y"); assertResolve("http://a/b/c/d;p?q#s", "http://a/b/c/d;p?q", "#s"); assertResolve("http://a/b/c/g#s", "http://a/b/c/d;p?q", "g#s"); assertResolve("http://a/b/c/;x", "http://a/b/c/d;p?q", ";x"); assertResolve("http://a/b/c/g;x", "http://a/b/c/d;p?q", "g;x"); assertResolve("http://a/b/c/g;x?y#s", "http://a/b/c/d;p?q", "g;x?y#s"); assertResolve("http://a/b/c/d;p?q", "http://a/b/c/d;p?q", ""); assertResolve("http://a/b/c/", "http://a/b/c/d;p?q", "."); assertResolve("http://a/b/c/", "http://a/b/c/d;p?q", "./"); assertResolve("http://a/b/", "http://a/b/c/d;p?q", ".."); assertResolve("http://a/", "http://a/b/c/d;p?q", "../.."); assertResolve("http://a/", "http://a/b/c/d;p?q", "../../"); assertResolve("http://a/g", "http://a/b/c/d;p?q", "../../g"); assertResolve("http://a/g", "http://a/b/c/d;p?q", "../../../g"); assertResolve("http://a/g", "http://a/b/c/d;p?q", "../../../../g"); assertResolve("http://example.com/path", "https://example.com/path", "http://example.com/path"); assertResolve("https://example.com/relativeUrl", "https://example.com/path?q=2", "/relativeUrl"); assertResolve("https://example.com/path?q=2#test", "https://example.com/path?q=2", "#test"); // correct ? assertResolve("https://example.com/relativePath?q=3", "https://example.com/path?q=2", "/relativePath?q=3"); assertResolve("https://example.com/path?q=3", "https://example.com/path?q=2", "?q=3"); // correct ? } private void assertResolve(String expected, String base, String rel) throws Exception { URI resolved = HttpUtils.resolveURIReference(base, rel); assertEquals(URI.create(expected), resolved); } }