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
018package org.apache.commons.codec.language;
019
020import org.junit.Assert;
021
022import org.apache.commons.codec.EncoderException;
023import org.apache.commons.codec.StringEncoderAbstractTest;
024import org.junit.Test;
025
026/**
027 * Tests Caverphone2.
028 *
029 * @version $Id: Caverphone2Test.html 891688 2013-12-24 20:49:46Z ggregory $
030 * @since 1.5
031 */
032public 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}