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 junit.framework.Assert;
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 Caverphone2.
029     *
030     * @version $Id: Caverphone2Test.html 889935 2013-12-11 05:05:13Z ggregory $
031     * @since 1.5
032     */
033    public class Caverphone2Test extends StringEncoderAbstractTest {
034    
035        @Override
036        protected StringEncoder createStringEncoder() {
037            return new Caverphone2();
038        }
039    
040        /**
041         * See http://caversham.otago.ac.nz/files/working/ctp150804.pdf
042         *
043         * AT11111111 words: add, aid, at, art, eat, earth, head, hit, hot, hold, hard, heart, it, out, old
044         *
045         * @throws EncoderException
046         */
047        @Test
048        public void testCaverphoneRevisitedCommonCodeAT11111111() throws EncoderException {
049            this.checkEncodingVariations("AT11111111", new String[]{
050                "add",
051                "aid",
052                "at",
053                "art",
054                "eat",
055                "earth",
056                "head",
057                "hit",
058                "hot",
059                "hold",
060                "hard",
061                "heart",
062                "it",
063                "out",
064                "old"});
065        }
066    
067        /**
068         * See http://caversham.otago.ac.nz/files/working/ctp150804.pdf
069         *
070         * @throws EncoderException
071         */
072        @Test
073        public void testCaverphoneRevisitedExamples() throws EncoderException {
074            String[][] data = {{"Stevenson", "STFNSN1111"}, {"Peter", "PTA1111111"}};
075            this.checkEncodings(data);
076        }
077    
078        /**
079         * See http://caversham.otago.ac.nz/files/working/ctp150804.pdf
080         *
081         * @throws EncoderException
082         */
083        @Test
084        public void testCaverphoneRevisitedRandomNameKLN1111111() throws EncoderException {
085            this.checkEncodingVariations("KLN1111111", new String[]{
086                "Cailean",
087                "Calan",
088                "Calen",
089                "Callahan",
090                "Callan",
091                "Callean",
092                "Carleen",
093                "Carlen",
094                "Carlene",
095                "Carlin",
096                "Carline",
097                "Carlyn",
098                "Carlynn",
099                "Carlynne",
100                "Charlean",
101                "Charleen",
102                "Charlene",
103                "Charline",
104                "Cherlyn",
105                "Chirlin",
106                "Clein",
107                "Cleon",
108                "Cline",
109                "Cohleen",
110                "Colan",
111                "Coleen",
112                "Colene",
113                "Colin",
114                "Colleen",
115                "Collen",
116                "Collin",
117                "Colline",
118                "Colon",
119                "Cullan",
120                "Cullen",
121                "Cullin",
122                "Gaelan",
123                "Galan",
124                "Galen",
125                "Garlan",
126                "Garlen",
127                "Gaulin",
128                "Gayleen",
129                "Gaylene",
130                "Giliane",
131                "Gillan",
132                "Gillian",
133                "Glen",
134                "Glenn",
135                "Glyn",
136                "Glynn",
137                "Gollin",
138                "Gorlin",
139                "Kalin",
140                "Karlan",
141                "Karleen",
142                "Karlen",
143                "Karlene",
144                "Karlin",
145                "Karlyn",
146                "Kaylyn",
147                "Keelin",
148                "Kellen",
149                "Kellene",
150                "Kellyann",
151                "Kellyn",
152                "Khalin",
153                "Kilan",
154                "Kilian",
155                "Killen",
156                "Killian",
157                "Killion",
158                "Klein",
159                "Kleon",
160                "Kline",
161                "Koerlin",
162                "Kylen",
163                "Kylynn",
164                "Quillan",
165                "Quillon",
166                "Qulllon",
167                "Xylon"});
168        }
169    
170        /**
171         * See http://caversham.otago.ac.nz/files/working/ctp150804.pdf
172         *
173         * @throws EncoderException
174         */
175        @Test
176        public void testCaverphoneRevisitedRandomNameTN11111111() throws EncoderException {
177            this.checkEncodingVariations("TN11111111", new String[]{
178                "Dan",
179                "Dane",
180                "Dann",
181                "Darn",
182                "Daune",
183                "Dawn",
184                "Ddene",
185                "Dean",
186                "Deane",
187                "Deanne",
188                "DeeAnn",
189                "Deeann",
190                "Deeanne",
191                "Deeyn",
192                "Den",
193                "Dene",
194                "Denn",
195                "Deonne",
196                "Diahann",
197                "Dian",
198                "Diane",
199                "Diann",
200                "Dianne",
201                "Diannne",
202                "Dine",
203                "Dion",
204                "Dione",
205                "Dionne",
206                "Doane",
207                "Doehne",
208                "Don",
209                "Donn",
210                "Doone",
211                "Dorn",
212                "Down",
213                "Downe",
214                "Duane",
215                "Dun",
216                "Dunn",
217                "Duyne",
218                "Dyan",
219                "Dyane",
220                "Dyann",
221                "Dyanne",
222                "Dyun",
223                "Tan",
224                "Tann",
225                "Teahan",
226                "Ten",
227                "Tenn",
228                "Terhune",
229                "Thain",
230                "Thaine",
231                "Thane",
232                "Thanh",
233                "Thayne",
234                "Theone",
235                "Thin",
236                "Thorn",
237                "Thorne",
238                "Thun",
239                "Thynne",
240                "Tien",
241                "Tine",
242                "Tjon",
243                "Town",
244                "Towne",
245                "Turne",
246                "Tyne"});
247        }
248    
249        /**
250         * See http://caversham.otago.ac.nz/files/working/ctp150804.pdf
251         *
252         * @throws EncoderException
253         */
254        @Test
255        public void testCaverphoneRevisitedRandomNameTTA1111111() throws EncoderException {
256            this.checkEncodingVariations("TTA1111111", new String[]{
257                "Darda",
258                "Datha",
259                "Dedie",
260                "Deedee",
261                "Deerdre",
262                "Deidre",
263                "Deirdre",
264                "Detta",
265                "Didi",
266                "Didier",
267                "Dido",
268                "Dierdre",
269                "Dieter",
270                "Dita",
271                "Ditter",
272                "Dodi",
273                "Dodie",
274                "Dody",
275                "Doherty",
276                "Dorthea",
277                "Dorthy",
278                "Doti",
279                "Dotti",
280                "Dottie",
281                "Dotty",
282                "Doty",
283                "Doughty",
284                "Douty",
285                "Dowdell",
286                "Duthie",
287                "Tada",
288                "Taddeo",
289                "Tadeo",
290                "Tadio",
291                "Tati",
292                "Teador",
293                "Tedda",
294                "Tedder",
295                "Teddi",
296                "Teddie",
297                "Teddy",
298                "Tedi",
299                "Tedie",
300                "Teeter",
301                "Teodoor",
302                "Teodor",
303                "Terti",
304                "Theda",
305                "Theodor",
306                "Theodore",
307                "Theta",
308                "Thilda",
309                "Thordia",
310                "Tilda",
311                "Tildi",
312                "Tildie",
313                "Tildy",
314                "Tita",
315                "Tito",
316                "Tjader",
317                "Toddie",
318                "Toddy",
319                "Torto",
320                "Tuddor",
321                "Tudor",
322                "Turtle",
323                "Tuttle",
324                "Tutto"});
325        }
326    
327        /**
328         * See http://caversham.otago.ac.nz/files/working/ctp150804.pdf
329         *
330         * @throws EncoderException
331         */
332        @Test
333        public void testCaverphoneRevisitedRandomWords() throws EncoderException {
334            this.checkEncodingVariations("RTA1111111", new String[]{"rather", "ready", "writer"});
335            this.checkEncoding("SSA1111111", "social");
336            this.checkEncodingVariations("APA1111111", new String[]{"able", "appear"});
337        }
338    
339        @Test
340        public void testEndMb() throws EncoderException {
341            String[][] data = {{"mb", "M111111111"}, {"mbmb", "MPM1111111"}};
342            this.checkEncodings(data);
343        }
344    
345        // Caverphone Revisited
346        @Test
347        public void testIsCaverphoneEquals() throws EncoderException {
348            Caverphone2 caverphone = new Caverphone2();
349            Assert.assertFalse("Caverphone encodings should not be equal", caverphone.isEncodeEqual("Peter", "Stevenson"));
350            Assert.assertTrue("Caverphone encodings should be equal", caverphone.isEncodeEqual("Peter", "Peady"));
351        }
352    
353        @Test
354        public void testSpecificationExamples() throws EncoderException {
355            String[][] data = {
356                {"Peter", "PTA1111111"},
357                {"ready", "RTA1111111"},
358                {"social", "SSA1111111"},
359                {"able", "APA1111111"},
360                {"Tedder", "TTA1111111"},
361                {"Karleen", "KLN1111111"},
362                {"Dyun", "TN11111111"}};
363            this.checkEncodings(data);
364        }
365    
366    }