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