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.StringEncoder;
024 import org.apache.commons.codec.StringEncoderAbstractTest;
025 import org.junit.Test;
026
027 /**
028 * Tests RefinedSoundex.
029 *
030 * @version $Id: RefinedSoundexTest.html 889935 2013-12-11 05:05:13Z ggregory $
031 */
032 public class RefinedSoundexTest extends StringEncoderAbstractTest {
033
034 @Override
035 protected StringEncoder createStringEncoder() {
036 return new RefinedSoundex();
037 }
038
039 /**
040 * @return Returns the encoder.
041 */
042 private RefinedSoundex getRefinedSoundex() {
043 return (RefinedSoundex)this.getStringEncoder();
044 }
045
046 @Test
047 public void testDifference() throws EncoderException {
048 // Edge cases
049 assertEquals(0, this.getRefinedSoundex().difference(null, null));
050 assertEquals(0, this.getRefinedSoundex().difference("", ""));
051 assertEquals(0, this.getRefinedSoundex().difference(" ", " "));
052 // Normal cases
053 assertEquals(6, this.getRefinedSoundex().difference("Smith", "Smythe"));
054 assertEquals(3, this.getRefinedSoundex().difference("Ann", "Andrew"));
055 assertEquals(1, this.getRefinedSoundex().difference("Margaret", "Andrew"));
056 assertEquals(1, this.getRefinedSoundex().difference("Janet", "Margaret"));
057 // Examples from
058 // http://msdn.microsoft.com/library/default.asp?url=/library/en-us/tsqlref/ts_de-dz_8co5.asp
059 assertEquals(5, this.getRefinedSoundex().difference("Green", "Greene"));
060 assertEquals(1, this.getRefinedSoundex().difference("Blotchet-Halls", "Greene"));
061 // Examples from
062 // http://msdn.microsoft.com/library/default.asp?url=/library/en-us/tsqlref/ts_setu-sus_3o6w.asp
063 assertEquals(6, this.getRefinedSoundex().difference("Smith", "Smythe"));
064 assertEquals(8, this.getRefinedSoundex().difference("Smithers", "Smythers"));
065 assertEquals(5, this.getRefinedSoundex().difference("Anothers", "Brothers"));
066 }
067
068 @Test
069 public void testEncode() {
070 assertEquals("T6036084", this.getRefinedSoundex().encode("testing"));
071 assertEquals("T6036084", this.getRefinedSoundex().encode("TESTING"));
072 assertEquals("T60", this.getRefinedSoundex().encode("The"));
073 assertEquals("Q503", this.getRefinedSoundex().encode("quick"));
074 assertEquals("B1908", this.getRefinedSoundex().encode("brown"));
075 assertEquals("F205", this.getRefinedSoundex().encode("fox"));
076 assertEquals("J408106", this.getRefinedSoundex().encode("jumped"));
077 assertEquals("O0209", this.getRefinedSoundex().encode("over"));
078 assertEquals("T60", this.getRefinedSoundex().encode("the"));
079 assertEquals("L7050", this.getRefinedSoundex().encode("lazy"));
080 assertEquals("D6043", this.getRefinedSoundex().encode("dogs"));
081
082 // Testing CODEC-56
083 assertEquals("D6043", RefinedSoundex.US_ENGLISH.encode("dogs"));
084 }
085
086 @Test
087 public void testGetMappingCodeNonLetter() {
088 char code = this.getRefinedSoundex().getMappingCode('#');
089 assertEquals("Code does not equals zero", 0, code);
090 }
091
092 @Test
093 public void testNewInstance() {
094 assertEquals("D6043", new RefinedSoundex().soundex("dogs"));
095 }
096
097 @Test
098 public void testNewInstance2() {
099 assertEquals("D6043", new RefinedSoundex(RefinedSoundex.US_ENGLISH_MAPPING_STRING.toCharArray()).soundex("dogs"));
100 }
101
102 @Test
103 public void testNewInstance3() {
104 assertEquals("D6043", new RefinedSoundex(RefinedSoundex.US_ENGLISH_MAPPING_STRING).soundex("dogs"));
105 }
106 }