1 // Copyright 2010-2018, Google Inc.
2 // All rights reserved.
3 //
4 // Redistribution and use in source and binary forms, with or without
5 // modification, are permitted provided that the following conditions are
6 // met:
7 //
8 //     * Redistributions of source code must retain the above copyright
9 // notice, this list of conditions and the following disclaimer.
10 //     * Redistributions in binary form must reproduce the above
11 // copyright notice, this list of conditions and the following disclaimer
12 // in the documentation and/or other materials provided with the
13 // distribution.
14 //     * Neither the name of Google Inc. nor the names of its
15 // contributors may be used to endorse or promote products derived from
16 // this software without specific prior written permission.
17 //
18 // THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
19 // "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
20 // LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
21 // A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
22 // OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
23 // SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
24 // LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
25 // DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
26 // THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
27 // (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
28 // OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
29 
30 #include "converter/key_corrector.h"
31 
32 #include <string>
33 
34 #include "base/port.h"
35 #include "testing/base/public/gunit.h"
36 
37 namespace mozc {
38 namespace {
39 
TEST(KeyCorrectorTest,KeyCorrectorBasicTest)40 TEST(KeyCorrectorTest, KeyCorrectorBasicTest) {
41   EXPECT_FALSE(KeyCorrector::IsValidPosition(
42       KeyCorrector::InvalidPosition()));
43 
44   EXPECT_TRUE(KeyCorrector::IsInvalidPosition(
45       KeyCorrector::InvalidPosition()));
46 
47   {
48     KeyCorrector corrector("", KeyCorrector::KANA, 0);
49     EXPECT_EQ(KeyCorrector::KANA, corrector.mode());
50     EXPECT_FALSE(corrector.IsAvailable());
51   }
52 
53   {
54     KeyCorrector corrector("", KeyCorrector::ROMAN, 0);
55     EXPECT_EQ(KeyCorrector::ROMAN, corrector.mode());
56     EXPECT_FALSE(corrector.IsAvailable());
57   }
58 
59   {
60     KeyCorrector corrector("てすと", KeyCorrector::ROMAN, 0);
61     EXPECT_TRUE(corrector.IsAvailable());
62     EXPECT_EQ("てすと", corrector.original_key());
63     corrector.Clear();
64     EXPECT_FALSE(corrector.IsAvailable());
65   }
66 }
67 
TEST(KeyCorrectorTest,KeyCorrectorKanaTest)68 TEST(KeyCorrectorTest, KeyCorrectorKanaTest) {
69   const string input = "みんあであそぼう";
70   KeyCorrector corrector(input, KeyCorrector::KANA, 0);
71   EXPECT_FALSE(corrector.IsAvailable());
72   EXPECT_EQ("", corrector.corrected_key());
73   EXPECT_EQ("", corrector.original_key());
74 
75   EXPECT_EQ(KeyCorrector::InvalidPosition(),
76             corrector.GetCorrectedPosition(0));
77 
78   EXPECT_EQ(KeyCorrector::InvalidPosition(),
79             corrector.GetOriginalPosition(0));
80 }
81 
TEST(KeyCorrectorTest,KeyCorrectorRomanTest)82 TEST(KeyCorrectorTest, KeyCorrectorRomanTest) {
83   {
84     const string input = "ん";
85     KeyCorrector corrector(input, KeyCorrector::ROMAN, 0);
86     EXPECT_TRUE(corrector.IsAvailable());
87     EXPECT_EQ("ん", corrector.corrected_key());
88   }
89 
90   {
91     const string input = "かん";
92     KeyCorrector corrector(input, KeyCorrector::ROMAN, 0);
93     EXPECT_TRUE(corrector.IsAvailable());
94     EXPECT_EQ("かん", corrector.corrected_key());
95     EXPECT_EQ(input, corrector.original_key());
96   }
97 
98   {
99     const string input = "かに";
100     KeyCorrector corrector(input, KeyCorrector::ROMAN, 0);
101     EXPECT_TRUE(corrector.IsAvailable());
102     EXPECT_EQ("かに", corrector.corrected_key());
103   }
104 
105   {
106     const string input = "かm";
107     KeyCorrector corrector(input, KeyCorrector::ROMAN, 0);
108     EXPECT_TRUE(corrector.IsAvailable());
109     EXPECT_EQ("かm", corrector.corrected_key());
110   }
111 
112   {
113     const string input = "みんあであそぼう";
114     KeyCorrector corrector(input, KeyCorrector::ROMAN, 0);
115     EXPECT_TRUE(corrector.IsAvailable());
116     EXPECT_EQ("みんなであそぼう", corrector.corrected_key());
117     EXPECT_EQ(input, corrector.original_key());
118   }
119 
120   {
121     // don't rewrite 1st "ん"
122     const string input = "んあであそぼう";
123     KeyCorrector corrector(input, KeyCorrector::ROMAN, 0);
124     EXPECT_TRUE(corrector.IsAvailable());
125     EXPECT_EQ("んあであそぼう", corrector.corrected_key());
126     EXPECT_EQ(input, corrector.original_key());
127   }
128 
129   {
130     const string input = "こんかいのみんあはこんんでた";
131     KeyCorrector corrector(input, KeyCorrector::ROMAN, 0);
132     EXPECT_TRUE(corrector.IsAvailable());
133     EXPECT_EQ("こんかいのみんなはこんでた", corrector.corrected_key());
134     EXPECT_EQ(input, corrector.original_key());
135   }
136 
137   {
138     const string input = "みんあみんいみんうみんえみんおみんんか";
139     KeyCorrector corrector(input, KeyCorrector::ROMAN, 0);
140     EXPECT_TRUE(corrector.IsAvailable());
141     EXPECT_EQ("みんなみんにみんぬみんねみんのみんか",
142               corrector.corrected_key());
143     EXPECT_EQ(input, corrector.original_key());
144   }
145 
146   {
147     const string input = "こんんにちは";
148     KeyCorrector corrector(input, KeyCorrector::ROMAN, 0);
149     EXPECT_TRUE(corrector.IsAvailable());
150     EXPECT_EQ("こんにちは", corrector.corrected_key());
151     EXPECT_EQ(input, corrector.original_key());
152   }
153 
154   {
155     const string input = "こんんいちは";
156     KeyCorrector corrector(input, KeyCorrector::ROMAN, 0);
157     EXPECT_TRUE(corrector.IsAvailable());
158     EXPECT_EQ("こんにちは", corrector.corrected_key());
159     EXPECT_EQ(input, corrector.original_key());
160   }
161 
162   {
163     const string input = "しぜんんお";
164     KeyCorrector corrector(input, KeyCorrector::ROMAN, 0);
165     EXPECT_TRUE(corrector.IsAvailable());
166     EXPECT_EQ("しぜんの", corrector.corrected_key());
167     EXPECT_EQ(input, corrector.original_key());
168   }
169 
170   {
171     const string input = "あんんんたい";
172     KeyCorrector corrector(input, KeyCorrector::ROMAN, 0);
173     EXPECT_TRUE(corrector.IsAvailable());
174     EXPECT_EQ("あんんんたい", corrector.corrected_key());
175     EXPECT_EQ(input, corrector.original_key());
176   }
177 
178   {
179     const string input = "せにょう";
180     KeyCorrector corrector(input, KeyCorrector::ROMAN, 0);
181     EXPECT_TRUE(corrector.IsAvailable());
182     EXPECT_EQ("せんよう", corrector.corrected_key());
183     EXPECT_EQ(input, corrector.original_key());
184   }
185 
186   {
187     const string input = "せにゃうせにゅうせにょう";
188     KeyCorrector corrector(input, KeyCorrector::ROMAN, 0);
189     EXPECT_TRUE(corrector.IsAvailable());
190     EXPECT_EQ("せんやうせんゆうせんよう", corrector.corrected_key());
191     EXPECT_EQ(input, corrector.original_key());
192   }
193 
194   {
195     const string input = "こんんにちはせにょう";
196     KeyCorrector corrector(input, KeyCorrector::ROMAN, 0);
197     EXPECT_TRUE(corrector.IsAvailable());
198     EXPECT_EQ("こんにちはせんよう", corrector.corrected_key());
199     EXPECT_EQ(input, corrector.original_key());
200   }
201 
202   {
203     const string input = "おんあのここんいちは";
204     KeyCorrector corrector(input, KeyCorrector::ROMAN, 0);
205     EXPECT_TRUE(corrector.IsAvailable());
206     EXPECT_EQ("おんなのここんにちは", corrector.corrected_key());
207     EXPECT_EQ(input, corrector.original_key());
208   }
209 
210   {
211     const string input = "きっって";
212     KeyCorrector corrector(input, KeyCorrector::ROMAN, 0);
213     EXPECT_TRUE(corrector.IsAvailable());
214     EXPECT_EQ("きって", corrector.corrected_key());
215     EXPECT_EQ(input, corrector.original_key());
216   }
217 
218   {
219     const string input = "きっっって";
220     KeyCorrector corrector(input, KeyCorrector::ROMAN, 0);
221     EXPECT_TRUE(corrector.IsAvailable());
222     EXPECT_EQ("きっっって", corrector.corrected_key());
223     EXPECT_EQ(input, corrector.original_key());
224   }
225 
226   {
227     const string input = "きっっっ";
228     KeyCorrector corrector(input, KeyCorrector::ROMAN, 0);
229     EXPECT_TRUE(corrector.IsAvailable());
230     EXPECT_EQ("きっっっ", corrector.corrected_key());
231     EXPECT_EQ(input, corrector.original_key());
232   }
233 
234   {
235     const string input = "っっ";
236     KeyCorrector corrector(input, KeyCorrector::ROMAN, 0);
237     EXPECT_TRUE(corrector.IsAvailable());
238     EXPECT_EQ("っっ", corrector.corrected_key());
239     EXPECT_EQ(input, corrector.original_key());
240   }
241 
242   {
243     const string input = "しmばし";
244     KeyCorrector corrector(input, KeyCorrector::ROMAN, 0);
245     EXPECT_TRUE(corrector.IsAvailable());
246     EXPECT_EQ("しんばし", corrector.corrected_key());
247     EXPECT_EQ(input, corrector.original_key());
248   }
249 
250   {
251     const string input = "しmはししmぱしー";
252     KeyCorrector corrector(input, KeyCorrector::ROMAN, 0);
253     EXPECT_TRUE(corrector.IsAvailable());
254     EXPECT_EQ("しmはししんぱしー", corrector.corrected_key());
255     EXPECT_EQ(input, corrector.original_key());
256   }
257 
258   {
259     const string input = "ちゅごく";
260     KeyCorrector corrector(input, KeyCorrector::ROMAN, 0);
261     EXPECT_TRUE(corrector.IsAvailable());
262     EXPECT_EQ("ちゅうごく", corrector.corrected_key());
263     EXPECT_EQ(input, corrector.original_key());
264   }
265 
266   {
267     const string input = "きゅきゅしゃ";
268     KeyCorrector corrector(input, KeyCorrector::ROMAN, 0);
269     EXPECT_TRUE(corrector.IsAvailable());
270     EXPECT_EQ("きゅうきゅうしゃ", corrector.corrected_key());
271     EXPECT_EQ(input, corrector.original_key());
272   }
273 }
274 
TEST(KeyCorrectorTest,KeyCorrectorRomanPositionTest)275 TEST(KeyCorrectorTest, KeyCorrectorRomanPositionTest) {
276   {
277     const string input = "みんあであそぼう";
278     KeyCorrector corrector(input, KeyCorrector::ROMAN, 0);
279     EXPECT_TRUE(corrector.IsAvailable());
280     EXPECT_EQ("みんなであそぼう", corrector.corrected_key());
281 
282     EXPECT_EQ(0, corrector.GetCorrectedPosition(0));
283     EXPECT_EQ(1, corrector.GetCorrectedPosition(1));
284 
285     EXPECT_EQ(3, corrector.GetCorrectedPosition(3));
286     EXPECT_EQ(6, corrector.GetCorrectedPosition(6));
287 
288     EXPECT_EQ(9, corrector.GetCorrectedPosition(9));
289     EXPECT_EQ(12, corrector.GetCorrectedPosition(12));
290     EXPECT_EQ(KeyCorrector::InvalidPosition(),
291               corrector.GetCorrectedPosition(30));
292 
293     EXPECT_EQ(0, corrector.GetOriginalPosition(0));
294     EXPECT_EQ(1, corrector.GetOriginalPosition(1));
295 
296     EXPECT_EQ(3, corrector.GetOriginalPosition(3));
297     EXPECT_EQ(6, corrector.GetOriginalPosition(6));
298 
299     EXPECT_EQ(9, corrector.GetOriginalPosition(9));
300     EXPECT_EQ(12, corrector.GetOriginalPosition(12));
301     EXPECT_EQ(KeyCorrector::InvalidPosition(),
302               corrector.GetOriginalPosition(30));
303   }
304 
305   {
306     const string input = "こんんにちは";
307     KeyCorrector corrector(input, KeyCorrector::ROMAN, 0);
308     EXPECT_TRUE(corrector.IsAvailable());
309     EXPECT_EQ("こんにちは", corrector.corrected_key());
310 
311     EXPECT_EQ(0, corrector.GetCorrectedPosition(0));
312     EXPECT_EQ(KeyCorrector::InvalidPosition(),
313               corrector.GetCorrectedPosition(1));
314 
315     EXPECT_EQ(KeyCorrector::InvalidPosition(),
316               corrector.GetCorrectedPosition(3));
317     EXPECT_EQ(KeyCorrector::InvalidPosition(),
318               corrector.GetCorrectedPosition(6));
319 
320     EXPECT_EQ(6, corrector.GetCorrectedPosition(9));
321     EXPECT_EQ(9, corrector.GetCorrectedPosition(12));
322     EXPECT_EQ(KeyCorrector::InvalidPosition(),
323               corrector.GetCorrectedPosition(30));
324 
325     EXPECT_EQ(0, corrector.GetOriginalPosition(0));
326     EXPECT_EQ(KeyCorrector::InvalidPosition(),
327               corrector.GetOriginalPosition(1));
328 
329     EXPECT_EQ(KeyCorrector::InvalidPosition(),
330               corrector.GetOriginalPosition(3));
331     EXPECT_EQ(9, corrector.GetOriginalPosition(6));
332 
333     EXPECT_EQ(12, corrector.GetOriginalPosition(9));
334     EXPECT_EQ(15, corrector.GetOriginalPosition(12));
335     EXPECT_EQ(KeyCorrector::InvalidPosition(),
336               corrector.GetOriginalPosition(30));
337   }
338 
339   {
340     const string input = "こんんにちはせにょう";
341     KeyCorrector corrector(input, KeyCorrector::ROMAN, 0);
342     EXPECT_TRUE(corrector.IsAvailable());
343     EXPECT_EQ("こんにちはせんよう", corrector.corrected_key());
344 
345     EXPECT_EQ(0, corrector.GetCorrectedPosition(0));
346     EXPECT_EQ(KeyCorrector::InvalidPosition(),
347               corrector.GetCorrectedPosition(3));
348     EXPECT_EQ(6, corrector.GetCorrectedPosition(9));
349     EXPECT_EQ(9, corrector.GetCorrectedPosition(12));
350     EXPECT_EQ(21, corrector.GetCorrectedPosition(24));
351     EXPECT_EQ(24, corrector.GetCorrectedPosition(27));
352 
353     EXPECT_EQ(0, corrector.GetOriginalPosition(0));
354     EXPECT_EQ(KeyCorrector::InvalidPosition(),
355               corrector.GetOriginalPosition(3));
356     EXPECT_EQ(9, corrector.GetOriginalPosition(6));
357     EXPECT_EQ(27, corrector.GetOriginalPosition(24));
358     EXPECT_EQ(24, corrector.GetOriginalPosition(21));
359   }
360 }
361 
TEST(KeyCorrectorTest,KeyCorrectorRomanCorrectedPrefixTest)362 TEST(KeyCorrectorTest, KeyCorrectorRomanCorrectedPrefixTest) {
363   {
364     const string input = "てすと";
365     KeyCorrector corrector(input, KeyCorrector::ROMAN, 0);
366     EXPECT_TRUE(corrector.IsAvailable());
367     size_t length = 0;
368 
369     // same as the original key
370     EXPECT_TRUE(NULL == corrector.GetCorrectedPrefix(0, &length));
371     EXPECT_TRUE(NULL == corrector.GetCorrectedPrefix(1, &length));
372     EXPECT_TRUE(NULL == corrector.GetCorrectedPrefix(2, &length));
373     EXPECT_TRUE(NULL == corrector.GetCorrectedPrefix(3, &length));
374   }
375 
376   {
377     const string input = "みんあであそぼう";
378     KeyCorrector corrector(input, KeyCorrector::ROMAN, 0);
379     EXPECT_TRUE(corrector.IsAvailable());
380     EXPECT_EQ("みんなであそぼう", corrector.corrected_key());
381 
382     const char *output = NULL;
383     size_t length = 0;
384 
385     output = corrector.GetCorrectedPrefix(0, &length);
386     EXPECT_EQ("みんなであそぼう", string(output, length));
387 
388     output = corrector.GetCorrectedPrefix(3, &length);
389     EXPECT_EQ("んなであそぼう", string(output, length));
390 
391     output = corrector.GetCorrectedPrefix(6, &length);
392     EXPECT_EQ("なであそぼう", string(output, length));
393 
394     output = corrector.GetCorrectedPrefix(9, &length);
395     // same
396     EXPECT_TRUE(NULL == output);
397   }
398 
399   {
400     const string input = "こんんにちは";
401     KeyCorrector corrector(input, KeyCorrector::ROMAN, 0);
402     EXPECT_TRUE(corrector.IsAvailable());
403     EXPECT_EQ("こんにちは", corrector.corrected_key());
404 
405     const char *output = NULL;
406     size_t length = 0;
407 
408     output = corrector.GetCorrectedPrefix(0, &length);
409     EXPECT_EQ("こんにちは", string(output, length));
410 
411     output = corrector.GetCorrectedPrefix(3, &length);
412     EXPECT_TRUE(NULL == output);
413 
414     output = corrector.GetCorrectedPrefix(6, &length);
415     EXPECT_TRUE(NULL == output);
416 
417     output = corrector.GetCorrectedPrefix(9, &length);
418     EXPECT_TRUE(NULL == output);
419   }
420 
421   {
422     const string input = "こんんにちはせにょう";
423     KeyCorrector corrector(input, KeyCorrector::ROMAN, 0);
424     EXPECT_TRUE(corrector.IsAvailable());
425     EXPECT_EQ("こんにちはせんよう", corrector.corrected_key());
426 
427     const char *output = NULL;
428     size_t length = 0;
429 
430     output = corrector.GetCorrectedPrefix(0, &length);
431     EXPECT_EQ("こんにちはせんよう", string(output, length));
432 
433     output = corrector.GetCorrectedPrefix(3, &length);
434     EXPECT_TRUE(NULL == output);
435 
436     output = corrector.GetCorrectedPrefix(6, &length);
437     EXPECT_TRUE(NULL == output);
438 
439     output = corrector.GetCorrectedPrefix(9, &length);
440     EXPECT_EQ("にちはせんよう", string(output, length));
441   }
442 }
443 
TEST(KeyCorrectorTest,KeyCorrectorRomanGetOriginalOffsetTest)444 TEST(KeyCorrectorTest, KeyCorrectorRomanGetOriginalOffsetTest) {
445   {
446     const string input = "てすと";
447     KeyCorrector corrector(input, KeyCorrector::ROMAN, 0);
448     EXPECT_TRUE(corrector.IsAvailable());
449     EXPECT_EQ(3, corrector.GetOriginalOffset(0, 3));
450     EXPECT_EQ(6, corrector.GetOriginalOffset(0, 6));
451     EXPECT_EQ(9, corrector.GetOriginalOffset(0, 9));
452 
453     EXPECT_EQ(3, corrector.GetOriginalOffset(3, 3));
454     EXPECT_EQ(6, corrector.GetOriginalOffset(3, 6));
455   }
456 
457   {
458     const string input = "みんあ";
459     KeyCorrector corrector(input, KeyCorrector::ROMAN, 0);
460     EXPECT_TRUE(corrector.IsAvailable());
461     EXPECT_EQ(3, corrector.GetOriginalOffset(0, 3));
462     EXPECT_EQ(6, corrector.GetOriginalOffset(0, 6));
463     EXPECT_EQ(9, corrector.GetOriginalOffset(0, 9));
464   }
465 
466   {
467     const string input = "きっって";
468     KeyCorrector corrector(input, KeyCorrector::ROMAN, 0);
469     EXPECT_TRUE(corrector.IsAvailable());
470     EXPECT_EQ(12, corrector.GetOriginalOffset(0, 9));
471   }
472 
473   {
474     const string input = "こんんにちは";
475     KeyCorrector corrector(input, KeyCorrector::ROMAN, 0);
476     EXPECT_TRUE(corrector.IsAvailable());
477     EXPECT_EQ("こんにちは", corrector.corrected_key());
478 
479     EXPECT_EQ(KeyCorrector::InvalidPosition(),
480               corrector.GetOriginalOffset(0, 3));
481     EXPECT_EQ(9, corrector.GetOriginalOffset(0, 6));
482     EXPECT_EQ(12, corrector.GetOriginalOffset(0, 9));
483 
484     EXPECT_EQ(KeyCorrector::InvalidPosition(),
485               corrector.GetOriginalOffset(3, 3));
486 
487     EXPECT_EQ(KeyCorrector::InvalidPosition(),
488               corrector.GetOriginalOffset(3, 6));
489 
490     EXPECT_EQ(KeyCorrector::InvalidPosition(),
491               corrector.GetOriginalOffset(6, 3));
492 
493     EXPECT_EQ(3, corrector.GetOriginalOffset(9, 3));
494 
495     EXPECT_EQ(6, corrector.GetOriginalOffset(9, 6));
496   }
497 }
498 
499 // Check if UCS4 is supported. b/3386634
TEST(KeyCorrectorTest,UCS4IsAvailable)500 TEST(KeyCorrectorTest, UCS4IsAvailable) {
501   {
502     const string input = "��";  // UCS4 char in UTF8
503     KeyCorrector corrector(input, KeyCorrector::ROMAN, 0);
504     EXPECT_TRUE(corrector.IsAvailable());
505   }
506 
507   {
508     const string input = "こ";      // UCS2 char in UTF8
509     KeyCorrector corrector(input, KeyCorrector::ROMAN, 0);
510     EXPECT_TRUE(corrector.IsAvailable());
511   }
512 }
513 
TEST(KeyCorrectorTest,UCS4Test)514 TEST(KeyCorrectorTest, UCS4Test) {
515   {
516     const string input = "��みんあ";
517     KeyCorrector corrector(input, KeyCorrector::ROMAN, 0);
518     EXPECT_TRUE(corrector.IsAvailable());
519     EXPECT_EQ(7, corrector.GetOriginalOffset(0, 7));
520     EXPECT_EQ(10, corrector.GetOriginalOffset(0, 10));
521     EXPECT_EQ(13, corrector.GetOriginalOffset(0, 13));
522   }
523 }
524 
525 // Should not rewrite the character which is at the beginning of current input
TEST(KeyCorrectorTest,Bug3046266Test)526 TEST(KeyCorrectorTest, Bug3046266Test) {
527   {
528     const string input = "かんあか";
529     KeyCorrector corrector(input, KeyCorrector::ROMAN, 6);  // history_size = 6
530     EXPECT_TRUE(corrector.IsAvailable());
531     size_t length = 0;
532 
533     // same as the original key
534     EXPECT_TRUE(NULL == corrector.GetCorrectedPrefix(0, &length));
535     EXPECT_TRUE(NULL == corrector.GetCorrectedPrefix(1, &length));
536     EXPECT_TRUE(NULL == corrector.GetCorrectedPrefix(2, &length));
537     EXPECT_TRUE(NULL == corrector.GetCorrectedPrefix(3, &length));
538   }
539 }
540 
541 }  // namespace
542 }  // namespace mozc
543