001 /*
002 * Licensed to the Apache Software Foundation (ASF) under one or more
003 * contributor license agreements. See the NOTICE file distributed with
004 * this work for additional information regarding copyright ownership.
005 * The ASF licenses this file to You under the Apache License, Version 2.0
006 * (the "License"); you may not use this file except in compliance with
007 * the License. You may obtain a copy of the License at
008 *
009 * http://www.apache.org/licenses/LICENSE-2.0
010 *
011 * Unless required by applicable law or agreed to in writing, software
012 * distributed under the License is distributed on an "AS IS" BASIS,
013 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
014 * See the License for the specific language governing permissions and
015 * limitations under the License.
016 */
017
018 package org.apache.commons.codec.language;
019
020 import static org.junit.Assert.assertEquals;
021
022 import org.apache.commons.codec.EncoderException;
023 import org.apache.commons.codec.StringEncoderAbstractTest;
024 import org.junit.Test;
025
026 /**
027 * Tests RefinedSoundex.
028 *
029 * @version $Id: RefinedSoundexTest.html 889935 2013-12-11 05:05:13Z ggregory $
030 */
031 public class RefinedSoundexTest extends StringEncoderAbstractTest<RefinedSoundex> {
032
033 @Override
034 protected RefinedSoundex createStringEncoder() {
035 return new RefinedSoundex();
036 }
037
038 @Test
039 public void testDifference() throws EncoderException {
040 // Edge cases
041 assertEquals(0, this.getStringEncoder().difference(null, null));
042 assertEquals(0, this.getStringEncoder().difference("", ""));
043 assertEquals(0, this.getStringEncoder().difference(" ", " "));
044 // Normal cases
045 assertEquals(6, this.getStringEncoder().difference("Smith", "Smythe"));
046 assertEquals(3, this.getStringEncoder().difference("Ann", "Andrew"));
047 assertEquals(1, this.getStringEncoder().difference("Margaret", "Andrew"));
048 assertEquals(1, this.getStringEncoder().difference("Janet", "Margaret"));
049 // Examples from
050 // http://msdn.microsoft.com/library/default.asp?url=/library/en-us/tsqlref/ts_de-dz_8co5.asp
051 assertEquals(5, this.getStringEncoder().difference("Green", "Greene"));
052 assertEquals(1, this.getStringEncoder().difference("Blotchet-Halls", "Greene"));
053 // Examples from
054 // http://msdn.microsoft.com/library/default.asp?url=/library/en-us/tsqlref/ts_setu-sus_3o6w.asp
055 assertEquals(6, this.getStringEncoder().difference("Smith", "Smythe"));
056 assertEquals(8, this.getStringEncoder().difference("Smithers", "Smythers"));
057 assertEquals(5, this.getStringEncoder().difference("Anothers", "Brothers"));
058 }
059
060 @Test
061 public void testEncode() {
062 assertEquals("T6036084", this.getStringEncoder().encode("testing"));
063 assertEquals("T6036084", this.getStringEncoder().encode("TESTING"));
064 assertEquals("T60", this.getStringEncoder().encode("The"));
065 assertEquals("Q503", this.getStringEncoder().encode("quick"));
066 assertEquals("B1908", this.getStringEncoder().encode("brown"));
067 assertEquals("F205", this.getStringEncoder().encode("fox"));
068 assertEquals("J408106", this.getStringEncoder().encode("jumped"));
069 assertEquals("O0209", this.getStringEncoder().encode("over"));
070 assertEquals("T60", this.getStringEncoder().encode("the"));
071 assertEquals("L7050", this.getStringEncoder().encode("lazy"));
072 assertEquals("D6043", this.getStringEncoder().encode("dogs"));
073
074 // Testing CODEC-56
075 assertEquals("D6043", RefinedSoundex.US_ENGLISH.encode("dogs"));
076 }
077
078 @Test
079 public void testGetMappingCodeNonLetter() {
080 final char code = this.getStringEncoder().getMappingCode('#');
081 assertEquals("Code does not equals zero", 0, code);
082 }
083
084 @Test
085 public void testNewInstance() {
086 assertEquals("D6043", new RefinedSoundex().soundex("dogs"));
087 }
088
089 @Test
090 public void testNewInstance2() {
091 assertEquals("D6043", new RefinedSoundex(RefinedSoundex.US_ENGLISH_MAPPING_STRING.toCharArray()).soundex("dogs"));
092 }
093
094 @Test
095 public void testNewInstance3() {
096 assertEquals("D6043", new RefinedSoundex(RefinedSoundex.US_ENGLISH_MAPPING_STRING).soundex("dogs"));
097 }
098 }