Skip to content

Commit 31c6734

Browse files
committed
Add auto capitalization unit tests
1 parent 8643bb4 commit 31c6734

File tree

2 files changed

+144
-1
lines changed

2 files changed

+144
-1
lines changed
Lines changed: 115 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,115 @@
1+
package com.codename1.samples;
2+
3+
import com.codename1.junit.FormTest;
4+
import com.codename1.junit.UITestBase;
5+
import com.codename1.ui.DisplayTest;
6+
import com.codename1.ui.Form;
7+
import com.codename1.ui.Label;
8+
import com.codename1.ui.TextArea;
9+
import com.codename1.ui.TextField;
10+
import com.codename1.ui.layouts.BoxLayout;
11+
12+
import static org.junit.jupiter.api.Assertions.*;
13+
14+
class AutoCapitalizationSampleTest extends UITestBase {
15+
16+
@FormTest
17+
void sentenceConstraintCapitalizesFirstLetters() {
18+
implementation.setDisplaySize(1080, 1920);
19+
20+
Form form = new Form("Hi World", BoxLayout.y());
21+
form.add(new Label("Hi World"));
22+
TextField textField = createSampleField(TextArea.INITIAL_CAPS_SENTENCE);
23+
form.add(textField);
24+
25+
form.show();
26+
startEditing(textField);
27+
28+
implementation.dispatchKeyPress('h');
29+
implementation.dispatchKeyPress('e');
30+
implementation.dispatchKeyPress('l');
31+
implementation.dispatchKeyPress('l');
32+
implementation.dispatchKeyPress('o');
33+
implementation.dispatchKeyPress('.');
34+
implementation.dispatchKeyPress(' ');
35+
implementation.dispatchKeyPress('n');
36+
implementation.dispatchKeyPress('e');
37+
implementation.dispatchKeyPress('x');
38+
implementation.dispatchKeyPress('t');
39+
implementation.dispatchKeyPress(' ');
40+
implementation.dispatchKeyPress('s');
41+
implementation.dispatchKeyPress('e');
42+
implementation.dispatchKeyPress('n');
43+
implementation.dispatchKeyPress('t');
44+
implementation.dispatchKeyPress('e');
45+
implementation.dispatchKeyPress('n');
46+
implementation.dispatchKeyPress('c');
47+
implementation.dispatchKeyPress('e');
48+
49+
assertEquals("Hello. Next sentence", textField.getText());
50+
}
51+
52+
@FormTest
53+
void wordConstraintCapitalizesEachWordAcrossLines() {
54+
implementation.setDisplaySize(1080, 1920);
55+
56+
Form form = new Form("Hi World", BoxLayout.y());
57+
form.add(new Label("Hi World"));
58+
TextField textField = createSampleField(TextArea.INITIAL_CAPS_WORD);
59+
form.add(textField);
60+
61+
form.show();
62+
startEditing(textField);
63+
64+
implementation.dispatchKeyPress('m');
65+
implementation.dispatchKeyPress('u');
66+
implementation.dispatchKeyPress('l');
67+
implementation.dispatchKeyPress('t');
68+
implementation.dispatchKeyPress('i');
69+
implementation.dispatchKeyPress(' ');
70+
implementation.dispatchKeyPress('l');
71+
implementation.dispatchKeyPress('i');
72+
implementation.dispatchKeyPress('n');
73+
implementation.dispatchKeyPress('e');
74+
implementation.dispatchKeyPress('\n');
75+
implementation.dispatchKeyPress('a');
76+
implementation.dispatchKeyPress('u');
77+
implementation.dispatchKeyPress('t');
78+
implementation.dispatchKeyPress('o');
79+
implementation.dispatchKeyPress(' ');
80+
implementation.dispatchKeyPress('c');
81+
implementation.dispatchKeyPress('a');
82+
implementation.dispatchKeyPress('p');
83+
implementation.dispatchKeyPress('i');
84+
implementation.dispatchKeyPress('t');
85+
implementation.dispatchKeyPress('a');
86+
implementation.dispatchKeyPress('l');
87+
implementation.dispatchKeyPress('i');
88+
implementation.dispatchKeyPress('z');
89+
implementation.dispatchKeyPress('a');
90+
implementation.dispatchKeyPress('t');
91+
implementation.dispatchKeyPress('i');
92+
implementation.dispatchKeyPress('o');
93+
implementation.dispatchKeyPress('n');
94+
95+
assertEquals("Multi Line\nAuto Capitalization", textField.getText());
96+
}
97+
98+
private void startEditing(TextField textField) {
99+
textField.startEditingAsync();
100+
flushSerialCalls();
101+
DisplayTest.flushEdt();
102+
flushSerialCalls();
103+
}
104+
105+
private TextField createSampleField(int constraint) {
106+
TextField textField = new TextField();
107+
textField.setSingleLineTextArea(false);
108+
textField.setConstraint(constraint);
109+
textField.setGrowLimit(-1);
110+
textField.setMaxSize(1600);
111+
textField.setHint("Type Something...");
112+
textField.setQwertyInput(true);
113+
return textField;
114+
}
115+
}

maven/core-unittests/src/test/java/com/codename1/testing/TestCodenameOneImplementation.java

Lines changed: 29 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1109,15 +1109,43 @@ private void insertCharacter(TextArea area, char character, int maxSize) {
11091109
if (cursor < 0 || cursor > current.length()) {
11101110
cursor = current.length();
11111111
}
1112+
char adjustedCharacter = applyAutoCapitalization(area, character, current, cursor);
11121113
StringBuilder sb = new StringBuilder(current.length() + 1);
11131114
sb.append(current, 0, cursor);
1114-
sb.append(character);
1115+
sb.append(adjustedCharacter);
11151116
if (cursor < current.length()) {
11161117
sb.append(current.substring(cursor));
11171118
}
11181119
area.setText(sb.toString());
11191120
}
11201121

1122+
private char applyAutoCapitalization(TextArea area, char character, String currentText, int cursorPosition) {
1123+
if (!Character.isLetter(character)) {
1124+
return character;
1125+
}
1126+
int constraint = area.getConstraint();
1127+
boolean initialCapsSentence = (constraint & TextArea.INITIAL_CAPS_SENTENCE) == TextArea.INITIAL_CAPS_SENTENCE;
1128+
boolean initialCapsWord = (constraint & TextArea.INITIAL_CAPS_WORD) == TextArea.INITIAL_CAPS_WORD;
1129+
if (!initialCapsSentence && !initialCapsWord) {
1130+
return character;
1131+
}
1132+
int index = cursorPosition - 1;
1133+
if (initialCapsSentence) {
1134+
while (index >= 0 && Character.isWhitespace(currentText.charAt(index))) {
1135+
index--;
1136+
}
1137+
if (index < 0 || currentText.charAt(index) == '.' || currentText.charAt(index) == '!' || currentText.charAt(index) == '?') {
1138+
return Character.toUpperCase(character);
1139+
}
1140+
}
1141+
if (initialCapsWord) {
1142+
if (index < 0 || Character.isWhitespace(currentText.charAt(index))) {
1143+
return Character.toUpperCase(character);
1144+
}
1145+
}
1146+
return character;
1147+
}
1148+
11211149
@Override
11221150
public boolean isAsyncEditMode() {
11231151
return true;

0 commit comments

Comments
 (0)