1 /*
2  * Copyright (C) 2013 The Android Open Source Project
3  *
4  * Licensed under the Apache License, Version 2.0 (the "License");
5  * you may not use this file except in compliance with the License.
6  * You may obtain a copy of the License at
7  *
8  *      http://www.apache.org/licenses/LICENSE-2.0
9  *
10  * Unless required by applicable law or agreed to in writing, software
11  * distributed under the License is distributed on an "AS IS" BASIS,
12  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13  * See the License for the specific language governing permissions and
14  * limitations under the License.
15  */
16 
17 package com.android.inputmethod.latin.utils;
18 
19 import static org.junit.Assert.assertEquals;
20 
21 import androidx.test.filters.SmallTest;
22 import androidx.test.runner.AndroidJUnit4;
23 
24 import com.android.inputmethod.latin.common.Constants;
25 
26 import org.junit.Test;
27 import org.junit.runner.RunWith;
28 
29 import java.util.Locale;
30 
31 @SmallTest
32 @RunWith(AndroidJUnit4.class)
33 public class RecapitalizeStatusTests {
34     private static final int[] SPACE = { Constants.CODE_SPACE };
35 
36     @Test
testTrim()37     public void testTrim() {
38         final RecapitalizeStatus status = new RecapitalizeStatus();
39         status.start(30, 40, "abcdefghij", Locale.ENGLISH, SPACE);
40         status.trim();
41         assertEquals("abcdefghij", status.getRecapitalizedString());
42         assertEquals(30, status.getNewCursorStart());
43         assertEquals(40, status.getNewCursorEnd());
44 
45         status.start(30, 44, "    abcdefghij", Locale.ENGLISH, SPACE);
46         status.trim();
47         assertEquals("abcdefghij", status.getRecapitalizedString());
48         assertEquals(34, status.getNewCursorStart());
49         assertEquals(44, status.getNewCursorEnd());
50 
51         status.start(30, 40, "abcdefgh  ", Locale.ENGLISH, SPACE);
52         status.trim();
53         assertEquals("abcdefgh", status.getRecapitalizedString());
54         assertEquals(30, status.getNewCursorStart());
55         assertEquals(38, status.getNewCursorEnd());
56 
57         status.start(30, 45, "   abcdefghij  ", Locale.ENGLISH, SPACE);
58         status.trim();
59         assertEquals("abcdefghij", status.getRecapitalizedString());
60         assertEquals(33, status.getNewCursorStart());
61         assertEquals(43, status.getNewCursorEnd());
62     }
63 
64     @Test
testRotate()65     public void testRotate() {
66         final RecapitalizeStatus status = new RecapitalizeStatus();
67         status.start(29, 40, "abcd efghij", Locale.ENGLISH, SPACE);
68         status.rotate();
69         assertEquals("Abcd Efghij", status.getRecapitalizedString());
70         assertEquals(29, status.getNewCursorStart());
71         assertEquals(40, status.getNewCursorEnd());
72         status.rotate();
73         assertEquals("ABCD EFGHIJ", status.getRecapitalizedString());
74         status.rotate();
75         assertEquals("abcd efghij", status.getRecapitalizedString());
76         status.rotate();
77         assertEquals("Abcd Efghij", status.getRecapitalizedString());
78 
79         status.start(29, 40, "Abcd Efghij", Locale.ENGLISH, SPACE);
80         status.rotate();
81         assertEquals("ABCD EFGHIJ", status.getRecapitalizedString());
82         assertEquals(29, status.getNewCursorStart());
83         assertEquals(40, status.getNewCursorEnd());
84         status.rotate();
85         assertEquals("abcd efghij", status.getRecapitalizedString());
86         status.rotate();
87         assertEquals("Abcd Efghij", status.getRecapitalizedString());
88         status.rotate();
89         assertEquals("ABCD EFGHIJ", status.getRecapitalizedString());
90 
91         status.start(29, 40, "ABCD EFGHIJ", Locale.ENGLISH, SPACE);
92         status.rotate();
93         assertEquals("abcd efghij", status.getRecapitalizedString());
94         assertEquals(29, status.getNewCursorStart());
95         assertEquals(40, status.getNewCursorEnd());
96         status.rotate();
97         assertEquals("Abcd Efghij", status.getRecapitalizedString());
98         status.rotate();
99         assertEquals("ABCD EFGHIJ", status.getRecapitalizedString());
100         status.rotate();
101         assertEquals("abcd efghij", status.getRecapitalizedString());
102 
103         status.start(29, 39, "AbCDefghij", Locale.ENGLISH, SPACE);
104         status.rotate();
105         assertEquals("abcdefghij", status.getRecapitalizedString());
106         assertEquals(29, status.getNewCursorStart());
107         assertEquals(39, status.getNewCursorEnd());
108         status.rotate();
109         assertEquals("Abcdefghij", status.getRecapitalizedString());
110         status.rotate();
111         assertEquals("ABCDEFGHIJ", status.getRecapitalizedString());
112         status.rotate();
113         assertEquals("AbCDefghij", status.getRecapitalizedString());
114         status.rotate();
115         assertEquals("abcdefghij", status.getRecapitalizedString());
116 
117         status.start(29, 40, "Abcd efghij", Locale.ENGLISH, SPACE);
118         status.rotate();
119         assertEquals("abcd efghij", status.getRecapitalizedString());
120         assertEquals(29, status.getNewCursorStart());
121         assertEquals(40, status.getNewCursorEnd());
122         status.rotate();
123         assertEquals("Abcd Efghij", status.getRecapitalizedString());
124         status.rotate();
125         assertEquals("ABCD EFGHIJ", status.getRecapitalizedString());
126         status.rotate();
127         assertEquals("Abcd efghij", status.getRecapitalizedString());
128         status.rotate();
129         assertEquals("abcd efghij", status.getRecapitalizedString());
130 
131         status.start(30, 34, "grüß", Locale.GERMAN, SPACE);
132         status.rotate();
133         assertEquals("Grüß", status.getRecapitalizedString());
134         assertEquals(30, status.getNewCursorStart());
135         assertEquals(34, status.getNewCursorEnd());
136         status.rotate();
137         assertEquals("GRÜSS", status.getRecapitalizedString());
138         assertEquals(30, status.getNewCursorStart());
139         assertEquals(35, status.getNewCursorEnd());
140         status.rotate();
141         assertEquals("grüß", status.getRecapitalizedString());
142         assertEquals(30, status.getNewCursorStart());
143         assertEquals(34, status.getNewCursorEnd());
144         status.rotate();
145         assertEquals("Grüß", status.getRecapitalizedString());
146         assertEquals(30, status.getNewCursorStart());
147         assertEquals(34, status.getNewCursorEnd());
148 
149         status.start(30, 33, "œuf", Locale.FRENCH, SPACE);
150         status.rotate();
151         assertEquals("Œuf", status.getRecapitalizedString());
152         assertEquals(30, status.getNewCursorStart());
153         assertEquals(33, status.getNewCursorEnd());
154         status.rotate();
155         assertEquals("ŒUF", status.getRecapitalizedString());
156         assertEquals(30, status.getNewCursorStart());
157         assertEquals(33, status.getNewCursorEnd());
158         status.rotate();
159         assertEquals("œuf", status.getRecapitalizedString());
160         assertEquals(30, status.getNewCursorStart());
161         assertEquals(33, status.getNewCursorEnd());
162         status.rotate();
163         assertEquals("Œuf", status.getRecapitalizedString());
164         assertEquals(30, status.getNewCursorStart());
165         assertEquals(33, status.getNewCursorEnd());
166 
167         status.start(30, 33, "œUf", Locale.FRENCH, SPACE);
168         status.rotate();
169         assertEquals("œuf", status.getRecapitalizedString());
170         assertEquals(30, status.getNewCursorStart());
171         assertEquals(33, status.getNewCursorEnd());
172         status.rotate();
173         assertEquals("Œuf", status.getRecapitalizedString());
174         assertEquals(30, status.getNewCursorStart());
175         assertEquals(33, status.getNewCursorEnd());
176         status.rotate();
177         assertEquals("ŒUF", status.getRecapitalizedString());
178         assertEquals(30, status.getNewCursorStart());
179         assertEquals(33, status.getNewCursorEnd());
180         status.rotate();
181         assertEquals("œUf", status.getRecapitalizedString());
182         assertEquals(30, status.getNewCursorStart());
183         assertEquals(33, status.getNewCursorEnd());
184         status.rotate();
185         assertEquals("œuf", status.getRecapitalizedString());
186         assertEquals(30, status.getNewCursorStart());
187         assertEquals(33, status.getNewCursorEnd());
188 
189         status.start(30, 35, "école", Locale.FRENCH, SPACE);
190         status.rotate();
191         assertEquals("École", status.getRecapitalizedString());
192         assertEquals(30, status.getNewCursorStart());
193         assertEquals(35, status.getNewCursorEnd());
194         status.rotate();
195         assertEquals("ÉCOLE", status.getRecapitalizedString());
196         assertEquals(30, status.getNewCursorStart());
197         assertEquals(35, status.getNewCursorEnd());
198         status.rotate();
199         assertEquals("école", status.getRecapitalizedString());
200         assertEquals(30, status.getNewCursorStart());
201         assertEquals(35, status.getNewCursorEnd());
202         status.rotate();
203         assertEquals("École", status.getRecapitalizedString());
204         assertEquals(30, status.getNewCursorStart());
205         assertEquals(35, status.getNewCursorEnd());
206     }
207 }
208