/* * Copyright 2000-2013 Enonic AS * http://www.enonic.com/license */ package com.enonic.cms.core.portal; import org.junit.Test; import static org.junit.Assert.*; /** * Created by IntelliJ IDEA. * User: rmh * Date: Mar 17, 2010 * Time: 9:51:04 AM */ public class PrettyPathNameCreatorTest { public static final char[] REPLACE_WITH_HYPHENS_URL_RESERVED = {'$', '&', '+', ',', '/', ':', ';', '=', '@'}; public static final char[] REPLACE_WITH_HYPHENS_URL_UNSAFE = {' ', '\"', '>', '<', '#', '%', '{', '}', '|', '\\', '^', '~', '[', ']', '`'}; @Test public void testEmptyName() { generateAndVerify( "", PrettyPathNameCreator.DEFAULT_PATHNAME ); } @Test public void testNullName() { generateAndVerify( null, PrettyPathNameCreator.DEFAULT_PATHNAME ); } @Test public void testBlankName() { generateAndVerify( " ", PrettyPathNameCreator.DEFAULT_PATHNAME ); } @Test public void testBlankSpaces() { generateAndVerify( "test", "test" ); generateAndVerify( " test ", "test" ); generateAndVerify( " t e s t ", "t-e-s-t" ); } @Test public void testLowerCase() { generateAndVerify( "TEST", "test" ); generateAndVerify( " Test ", "test" ); generateAndVerify( " T E S T ", "t-e-s-t" ); } @Test public void testSpecialCharacters() { generateAndVerify( "test" + SpecialCharacterTestStrings.NORWEGIAN, "test" + SpecialCharacterTestStrings.NORWEGIAN.toLowerCase() ); generateAndVerify( "test" + SpecialCharacterTestStrings.CHINESE, "test" + SpecialCharacterTestStrings.CHINESE.toLowerCase() ); generateAndVerify( "test" + SpecialCharacterTestStrings.AEC_ALL, "test" + SpecialCharacterTestStrings.AEC_ALL.toLowerCase() ); } @Test public void testNiceBeginningAndEnd() { generateAndVerify( "--Donald + & + Dolly--", "donald-dolly" ); generateAndVerify( "test" + "/\\#;", "test" ); generateAndVerify( "/\\#;" + "test" + "/\\#;", "test" ); generateAndVerify( "/\\#;" + "t--e--s--t" + "/\\#;", "t-e-s-t" ); generateAndVerify( "...te-st.in-gs...--....", "te-st.in-gs" ); generateAndVerify( "___te-st.in-gs____", "te-st.in-gs" ); } @Test public void testTrailingSpaces() { generateAndVerify( "Donald + & + Dolly", "donald-dolly" ); } @Test public void testTrailingHyphens() { generateAndVerify( "Donald--Dolly -- ", "donald-dolly" ); } @Test public void testNoHyphensAroundDot() { generateAndVerify( "Donald . Dolly", "donald.dolly" ); generateAndVerify( "Donald. Dolly", "donald.dolly" ); generateAndVerify( "Donald .Dolly", "donald.dolly" ); generateAndVerify( "Donald.Dolly", "donald.dolly" ); } @Test public void testUnsafeCharacters() { generateAndVerify( "Test%/", "test" ); generateAndVerify( " -t--_e?s--_t- ", "t-es-t" ); generateAndVerify( "?t?e?s?t?", "test" ); } @Test public void testUnsafeCharactersOnly() { generateAndVerify( "%/", PrettyPathNameCreator.DEFAULT_PATHNAME ); generateAndVerify( " --?-- ", PrettyPathNameCreator.DEFAULT_PATHNAME ); generateAndVerify( "?", PrettyPathNameCreator.DEFAULT_PATHNAME ); } @Test public void testReplaceReservedWithHyphens() { doCheckArrayForHyphenReplacement( REPLACE_WITH_HYPHENS_URL_RESERVED ); } @Test public void testTrailingUnderScores() { generateAndVerify( "runar___myklebust", "runar-myklebust" ); } @Test public void testCyrillic() { generateAndVerify( "Норвегия", "норвегия" ); } @Test public void testTransliterateCyrillic() { generateWithTransliterationAndVerify( "Норвегия", "norvegija" ); } @Test public void testReplaceUnsafeWithHyphens() { doCheckArrayForHyphenReplacement( REPLACE_WITH_HYPHENS_URL_UNSAFE ); } private void doCheckArrayForHyphenReplacement( char[] replaceChars ) { StringBuffer replaced = new StringBuffer(); StringBuffer expected = new StringBuffer(); for ( char replaceChar : replaceChars ) { replaced.append( "a" ); replaced.append( replaceChar ); expected.append( "a" ); expected.append( '-' ); } replaced.append( "a" ); expected.append( "a" ); generateAndVerify( replaced.toString(), expected.toString() ); } private void generateAndVerify( String suggestedName, String result ) { final String generatedName = new PrettyPathNameCreator( false ).generatePrettyPathName( suggestedName ); assertEquals( "Unexpected result for : " + suggestedName, result, generatedName ); } private void generateWithTransliterationAndVerify( String suggestedName, String result ) { final String generatedName = new PrettyPathNameCreator( true ).generatePrettyPathName( suggestedName ); assertEquals( "Unexpected result for : " + suggestedName, result, generatedName ); } private class SpecialCharacterTestStrings { public static final String NORWEGIAN = "\u00c6\u00d8\u00c5\u00e6\u00f8\u00e5"; public static final String CHINESE = "\u306d\u304e\u30de\u30e8\u713c\u304d"; public static final String AEC_ALL = "\u0082\u0083\u0084\u0085\u0086\u0087\u0089\u008a\u008b\u008c\u0091\u0092\u0093" + "\u0094\u0095\u0096\u0097\u0098\u0099\u009a\u009b\u009c\u009f"; } }