/* * Copyright (c) 2013 – 2015 Ricki Hirner (bitfire web engineering). * All rights reserved. This program and the accompanying materials * are made available under the terms of the GNU Public License v3.0 * which accompanies this distribution, and is available at * http://www.gnu.org/licenses/gpl.html */ package at.bitfire.davdroid; import java.net.URI; import junit.framework.TestCase; import at.bitfire.davdroid.URIUtils; public class URLUtilsTest extends TestCase { /* RFC 1738 p17 HTTP URLs: hpath = hsegment *[ "/" hsegment ] hsegment = *[ uchar | ";" | ":" | "@" | "&" | "=" ] uchar = unreserved | escape unreserved = alpha | digit | safe | extra alpha = lowalpha | hialpha lowalpha = ... hialpha = ... digit = "0" | "1" | "2" | "3" | "4" | "5" | "6" | "7" | "8" | "9" safe = "$" | "-" | "_" | "." | "+" extra = "!" | "*" | "'" | "(" | ")" | "," escape = "%" hex hex */ public void testEnsureTrailingSlash() throws Exception { assertEquals("/test/", URIUtils.ensureTrailingSlash("/test")); assertEquals("/test/", URIUtils.ensureTrailingSlash("/test/")); String withoutSlash = "http://www.test.example/dav/collection", withSlash = withoutSlash + "/"; assertEquals(new URI(withSlash), URIUtils.ensureTrailingSlash(new URI(withoutSlash))); assertEquals(new URI(withSlash), URIUtils.ensureTrailingSlash(new URI(withSlash))); } public void testParseURI() throws Exception { // don't escape valid characters String validPath = "/;:@&=$-_.+!*'(),"; assertEquals(new URI("https://www.test.example:123" + validPath), URIUtils.parseURI("https://www.test.example:123" + validPath, false)); assertEquals(new URI(validPath), URIUtils.parseURI(validPath, true)); // keep literal IPv6 addresses (only in host name) assertEquals(new URI("https://[1:2::1]/"), URIUtils.parseURI("https://[1:2::1]/", false)); // "~" as home directory (valid) assertEquals(new URI("http://www.test.example/~user1/"), URIUtils.parseURI("http://www.test.example/~user1/", false)); assertEquals(new URI("/~user1/"), URIUtils.parseURI("/%7euser1/", true)); // "@" in path names (valid) assertEquals(new URI("http://www.test.example/user@server.com/"), URIUtils.parseURI("http://www.test.example/user@server.com/", false)); assertEquals(new URI("/user@server.com/"), URIUtils.parseURI("/user%40server.com/", true)); assertEquals(new URI("user@server.com"), URIUtils.parseURI("user%40server.com", true)); // ":" in path names (valid) assertEquals(new URI("http://www.test.example/my:cal.ics"), URIUtils.parseURI("http://www.test.example/my:cal.ics", false)); assertEquals(new URI("/my:cal.ics"), URIUtils.parseURI("/my%3Acal.ics", true)); assertEquals(new URI(null, null, "my:cal.ics", null, null), URIUtils.parseURI("my%3Acal.ics", true)); // common invalid path names assertEquals(new URI(null, null, "my cal.ics", null, null), URIUtils.parseURI("my cal.ics", true)); assertEquals(new URI(null, null, "{1234}.vcf", null, null), URIUtils.parseURI("{1234}.vcf", true)); } }