View Javadoc
1   /*
2    * Licensed to the Apache Software Foundation (ASF) under one or more
3    * contributor license agreements.  See the NOTICE file distributed with
4    * this work for additional information regarding copyright ownership.
5    * The ASF licenses this file to You under the Apache License, Version 2.0
6    * (the "License"); you may not use this file except in compliance with
7    * the License.  You may obtain a copy of the License at
8    *
9    *      https://www.apache.org/licenses/LICENSE-2.0
10   *
11   * Unless required by applicable law or agreed to in writing, software
12   * distributed under the License is distributed on an "AS IS" BASIS,
13   * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
14   * See the License for the specific language governing permissions and
15   * limitations under the License.
16   */
17  
18  package org.apache.commons.codec.language;
19  
20  import static org.junit.jupiter.api.Assertions.assertFalse;
21  import static org.junit.jupiter.api.Assertions.assertTrue;
22  
23  import org.apache.commons.codec.AbstractStringEncoderTest;
24  import org.apache.commons.codec.EncoderException;
25  import org.junit.jupiter.api.Test;
26  
27  /**
28   * Tests Caverphone2.
29   */
30  class Caverphone2Test extends AbstractStringEncoderTest<Caverphone2> {
31  
32      @Override
33      protected Caverphone2 createStringEncoder() {
34          return new Caverphone2();
35      }
36  
37      /**
38       * See https://caversham.otago.ac.nz/files/working/ctp150804.pdf
39       *
40       * AT11111111 words: add, aid, at, art, eat, earth, head, hit, hot, hold, hard, heart, it, out, old
41       *
42       * @throws EncoderException for some failure scenarios     */
43      @Test
44      void testCaverphoneRevisitedCommonCodeAT11111111() throws EncoderException {
45          checkEncodingVariations("AT11111111", new String[]{
46              "add",
47              "aid",
48              "at",
49              "art",
50              "eat",
51              "earth",
52              "head",
53              "hit",
54              "hot",
55              "hold",
56              "hard",
57              "heart",
58              "it",
59              "out",
60              "old"});
61      }
62  
63      /**
64       * See https://caversham.otago.ac.nz/files/working/ctp150804.pdf
65       *
66       * @throws EncoderException for some failure scenarios     */
67      @Test
68      void testCaverphoneRevisitedExamples() throws EncoderException {
69          final String[][] data = {{"Stevenson", "STFNSN1111"}, {"Peter", "PTA1111111"}};
70          checkEncodings(data);
71      }
72  
73      /**
74       * See https://caversham.otago.ac.nz/files/working/ctp150804.pdf
75       *
76       * @throws EncoderException for some failure scenarios     */
77      @Test
78      void testCaverphoneRevisitedRandomNameKLN1111111() throws EncoderException {
79          checkEncodingVariations("KLN1111111", new String[]{
80              "Cailean",
81              "Calan",
82              "Calen",
83              "Callahan",
84              "Callan",
85              "Callean",
86              "Carleen",
87              "Carlen",
88              "Carlene",
89              "Carlin",
90              "Carline",
91              "Carlyn",
92              "Carlynn",
93              "Carlynne",
94              "Charlean",
95              "Charleen",
96              "Charlene",
97              "Charline",
98              "Cherlyn",
99              "Chirlin",
100             "Clein",
101             "Cleon",
102             "Cline",
103             "Cohleen",
104             "Colan",
105             "Coleen",
106             "Colene",
107             "Colin",
108             "Colleen",
109             "Collen",
110             "Collin",
111             "Colline",
112             "Colon",
113             "Cullan",
114             "Cullen",
115             "Cullin",
116             "Gaelan",
117             "Galan",
118             "Galen",
119             "Garlan",
120             "Garlen",
121             "Gaulin",
122             "Gayleen",
123             "Gaylene",
124             "Giliane",
125             "Gillan",
126             "Gillian",
127             "Glen",
128             "Glenn",
129             "Glyn",
130             "Glynn",
131             "Gollin",
132             "Gorlin",
133             "Kalin",
134             "Karlan",
135             "Karleen",
136             "Karlen",
137             "Karlene",
138             "Karlin",
139             "Karlyn",
140             "Kaylyn",
141             "Keelin",
142             "Kellen",
143             "Kellene",
144             "Kellyann",
145             "Kellyn",
146             "Khalin",
147             "Kilan",
148             "Kilian",
149             "Killen",
150             "Killian",
151             "Killion",
152             "Klein",
153             "Kleon",
154             "Kline",
155             "Koerlin",
156             "Kylen",
157             "Kylynn",
158             "Quillan",
159             "Quillon",
160             "Qulllon",
161             "Xylon"});
162     }
163 
164     /**
165      * See https://caversham.otago.ac.nz/files/working/ctp150804.pdf
166      *
167      * @throws EncoderException for some failure scenarios     */
168     @Test
169     void testCaverphoneRevisitedRandomNameTN11111111() throws EncoderException {
170         checkEncodingVariations("TN11111111", new String[]{
171             "Dan",
172             "Dane",
173             "Dann",
174             "Darn",
175             "Daune",
176             "Dawn",
177             "Ddene",
178             "Dean",
179             "Deane",
180             "Deanne",
181             "DeeAnn",
182             "Deeann",
183             "Deeanne",
184             "Deeyn",
185             "Den",
186             "Dene",
187             "Denn",
188             "Deonne",
189             "Diahann",
190             "Dian",
191             "Diane",
192             "Diann",
193             "Dianne",
194             "Diannne",
195             "Dine",
196             "Dion",
197             "Dione",
198             "Dionne",
199             "Doane",
200             "Doehne",
201             "Don",
202             "Donn",
203             "Doone",
204             "Dorn",
205             "Down",
206             "Downe",
207             "Duane",
208             "Dun",
209             "Dunn",
210             "Duyne",
211             "Dyan",
212             "Dyane",
213             "Dyann",
214             "Dyanne",
215             "Dyun",
216             "Tan",
217             "Tann",
218             "Teahan",
219             "Ten",
220             "Tenn",
221             "Terhune",
222             "Thain",
223             "Thaine",
224             "Thane",
225             "Thanh",
226             "Thayne",
227             "Theone",
228             "Thin",
229             "Thorn",
230             "Thorne",
231             "Thun",
232             "Thynne",
233             "Tien",
234             "Tine",
235             "Tjon",
236             "Town",
237             "Towne",
238             "Turne",
239             "Tyne"});
240     }
241 
242     /**
243      * See https://caversham.otago.ac.nz/files/working/ctp150804.pdf
244      *
245      * @throws EncoderException for some failure scenarios     */
246     @Test
247     void testCaverphoneRevisitedRandomNameTTA1111111() throws EncoderException {
248         checkEncodingVariations("TTA1111111", new String[]{
249             "Darda",
250             "Datha",
251             "Dedie",
252             "Deedee",
253             "Deerdre",
254             "Deidre",
255             "Deirdre",
256             "Detta",
257             "Didi",
258             "Didier",
259             "Dido",
260             "Dierdre",
261             "Dieter",
262             "Dita",
263             "Ditter",
264             "Dodi",
265             "Dodie",
266             "Dody",
267             "Doherty",
268             "Dorthea",
269             "Dorthy",
270             "Doti",
271             "Dotti",
272             "Dottie",
273             "Dotty",
274             "Doty",
275             "Doughty",
276             "Douty",
277             "Dowdell",
278             "Duthie",
279             "Tada",
280             "Taddeo",
281             "Tadeo",
282             "Tadio",
283             "Tati",
284             "Teador",
285             "Tedda",
286             "Tedder",
287             "Teddi",
288             "Teddie",
289             "Teddy",
290             "Tedi",
291             "Tedie",
292             "Teeter",
293             "Teodoor",
294             "Teodor",
295             "Terti",
296             "Theda",
297             "Theodor",
298             "Theodore",
299             "Theta",
300             "Thilda",
301             "Thordia",
302             "Tilda",
303             "Tildi",
304             "Tildie",
305             "Tildy",
306             "Tita",
307             "Tito",
308             "Tjader",
309             "Toddie",
310             "Toddy",
311             "Torto",
312             "Tuddor",
313             "Tudor",
314             "Turtle",
315             "Tuttle",
316             "Tutto"});
317     }
318 
319     /**
320      * See https://caversham.otago.ac.nz/files/working/ctp150804.pdf
321      *
322      * @throws EncoderException for some failure scenarios     */
323     @Test
324     void testCaverphoneRevisitedRandomWords() throws EncoderException {
325         checkEncodingVariations("RTA1111111", new String[]{"rather", "ready", "writer"});
326         checkEncoding("SSA1111111", "social");
327         checkEncodingVariations("APA1111111", new String[]{"able", "appear"});
328     }
329 
330     @Test
331     void testEndMb() throws EncoderException {
332         final String[][] data = {{"mb", "M111111111"}, {"mbmb", "MPM1111111"}};
333         checkEncodings(data);
334     }
335 
336     // Caverphone Revisited
337     @Test
338     void testIsCaverphoneEquals() throws EncoderException {
339         final Caverphone2 caverphone = new Caverphone2();
340         assertFalse(caverphone.isEncodeEqual("Peter", "Stevenson"), "Caverphone encodings should not be equal");
341         assertTrue(caverphone.isEncodeEqual("Peter", "Peady"), "Caverphone encodings should be equal");
342     }
343 
344     @Test
345     void testSpecificationExamples() throws EncoderException {
346         final String[][] data = {
347             {"Peter", "PTA1111111"},
348             {"ready", "RTA1111111"},
349             {"social", "SSA1111111"},
350             {"able", "APA1111111"},
351             {"Tedder", "TTA1111111"},
352             {"Karleen", "KLN1111111"},
353             {"Dyun", "TN11111111"}};
354         checkEncodings(data);
355     }
356 
357 }