/* * Copyright 2000-2013 Enonic AS * http://www.enonic.com/license */ package com.enonic.cms.framework.util; import java.io.UnsupportedEncodingException; import java.net.MalformedURLException; import java.net.URLDecoder; import junit.framework.TestCase; public class UrlPathEncoderTest extends TestCase { private static final String UTF8 = "UTF-8"; private static final String ISO_8859_1 = "ISO-8859-1"; public void testEncodeUrlPathWithUTF8() { // båt assertEquals( "b%C3%A5t", UrlPathEncoder.encodeUrlPath( decode( "b%C3%A5t" ), UTF8 ) ); // båt/bjarne assertEquals( "b%C3%A5t/bjarne", UrlPathEncoder.encodeUrlPath( decode( "b%C3%A5t/bjarne" ), UTF8 ) ); // /båt/bjarne assertEquals( "/b%C3%A5t/bjarne", UrlPathEncoder.encodeUrlPath( decode( "/b%C3%A5t/bjarne" ), UTF8 ) ); // /båt/bjarne/ assertEquals( "/b%C3%A5t/bjarne/", UrlPathEncoder.encodeUrlPath( decode( "/b%C3%A5t/bjarne/" ), UTF8 ) ); // RussiskБ assertEquals( "Russisk%D0%91", UrlPathEncoder.encodeUrlPath( decode( "Russisk%D0%91" ), UTF8 ) ); } public void testEncodeUrlPathWithISO88591() throws UnsupportedEncodingException, MalformedURLException { // båt assertEquals( "b%E5t", UrlPathEncoder.encodeUrlPath( URLDecoder.decode( "b%E5t", ISO_8859_1 ), ISO_8859_1 ) ); } public void testEncodeUrlPathWithParameters() { // båt assertEquals( "b%C3%A5t?a=b", UrlPathEncoder.encodeUrlPath( decode( "b%C3%A5t?a=b" ), UTF8 ) ); // /båt/bjarne assertEquals( "/b%C3%A5t/bjarne?a=b", UrlPathEncoder.encodeUrlPath( decode( "/b%C3%A5t/bjarne?a=b" ), UTF8 ) ); // /båt/bjarne?æ=ø (skal ikke encode parametre) assertEquals( "/b%C3%A5t/bjarne?æ=ø", UrlPathEncoder.encodeUrlPath( decode( "/b%C3%A5t/bjarne?æ=ø" ), UTF8 ) ); } public void testEncodeUrlWithoutParameters() { // ? skal encodes assertEquals( "/b%E2%88%9A%E2%80%A2tEllerBil+%3F+hepp", UrlPathEncoder.encodeUrlPathNoParameters( decode( "/b%E2%88%9A%E2%80%A2tEllerBil+%3F+hepp" ), UTF8 ) ); } public void testEncodeURL() { // båt assertEquals( "http://www.domain.com/b%C3%A5t", UrlPathEncoder.encodeURL( "http://www.domain.com/" + decode( "b%C3%A5t" ) ) ); // båt assertEquals( "http://www.b%C3%A5t.com/", UrlPathEncoder.encodeURL( "http://www." + decode( "b%C3%A5t" ) + ".com/" ) ); } public void testEncodeURLWithParameters() { // båt assertEquals( "http://www.domain.com/b%C3%A5t?a=b", UrlPathEncoder.encodeURL( "http://www.domain.com/" + decode( "b%C3%A5t?a=b" ) ) ); } public void testEncodeURLWithParametersThatNeedEncoding() { assertEquals( "http://www.domain.com/News?p1=b%C3%A5t", UrlPathEncoder.encodeURL( "http://www.domain.com/News?p1=" + decode( "b%C3%A5t" ) ) ); } public void testEncodeURLWithParametersThatDoNotNeedEncoding() { assertEquals( "http://www.domain.com/News?p1=b%C3%A5t", UrlPathEncoder.encodeURL( "http://www.domain.com/News?p1=b%C3%A5t" ) ); } public void testEncodeURLWithParametersThatDoNotNeedEncodingButPathStillNeedsEncoding() { assertEquals( "http://www.domain.com/P%C3%A5melding?p1=b%C3%A5t", UrlPathEncoder.encodeURL( "http://www.domain.com/" + decode( "P%C3%A5melding" ) + "?p1=b%C3%A5t" ) ); assertEquals( "http://www.domain.com/P%C3%A5melding?p1=abc", UrlPathEncoder.encodeURL( "http://www.domain.com/" + decode( "P%C3%A5melding" ) + "?p1=abc" ) ); } public void testEncode() { assertEquals( "http%3A%2F%2Fwww.domain.com%2F", UrlPathEncoder.encode( "http://www.domain.com/" ) ); assertEquals( "http%3A%2F%2Fwww.domain.com%2FP%C3%A5melding", UrlPathEncoder.encode( "http://www.domain.com/" + decode( "P%C3%A5melding" ) ) ); assertEquals( "%2F", UrlPathEncoder.encode( "/" ) ); assertEquals( "%25", UrlPathEncoder.encode( "%" ) ); assertEquals( "http%3A%2F%2Fwww.domain.com%2FB%25C3%25A5t", UrlPathEncoder.encode( "http://www.domain.com/B%C3%A5t" ) ); } public void testEncodeOfStringAlreadyEncoded() { assertEquals( "%2F", UrlPathEncoder.encode( "/" ) ); assertEquals( "%25", UrlPathEncoder.encode( "%" ) ); assertEquals( "http%3A%2F%2Fwww.domain.com%2FB%25C3%25A5t", UrlPathEncoder.encode( "http://www.domain.com/B%C3%A5t" ) ); } private String decode( String s ) { try { return URLDecoder.decode( s, UTF8 ); } catch ( UnsupportedEncodingException e ) { throw new RuntimeException( e ); } } }