Skip to content

Commit fcea7fa

Browse files
Ported 9 UI samples to core-unittests. (#4225)
* Ported samples to unit tests under `maven/core-unittests/src/test/java/com/codename1/samples/`. * Adapted logic to fit `UITestBase` and JUnit 5 assertions. * Fixed package-private access issues in `TextComponentSample2745Test` by using `getPropertyValue`. * Fixed timing issues in `TabsAnimationSample2957Test` by disabling animation in `setSelectedIndex`. * Samples ported: * TabIteratorSample2775 * TabsAnimationSample2957 * TabsWithSpanLabelsTest * TestCSSRegression3077 * TestTextComponentPassword2976 * TextAreaSample * TextComponentSample2745 * TextFieldCaretColorTest2780 * TextFieldHintStylingTest Co-authored-by: google-labs-jules[bot] <161369871+google-labs-jules[bot]@users.noreply.github.com>
1 parent ab1aa23 commit fcea7fa

9 files changed

+373
-0
lines changed
Lines changed: 55 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,55 @@
1+
package com.codename1.samples;
2+
3+
import com.codename1.ui.CheckBox;
4+
import com.codename1.ui.Form;
5+
import com.codename1.ui.TextField;
6+
import com.codename1.ui.layouts.BoxLayout;
7+
import com.codename1.ui.spinner.Picker;
8+
import com.codename1.junit.UITestBase;
9+
import com.codename1.junit.FormTest;
10+
import com.codename1.ui.Display;
11+
import static com.codename1.ui.ComponentSelector.$;
12+
import static org.junit.jupiter.api.Assertions.*;
13+
14+
public class TabIteratorSample2775Test extends UITestBase {
15+
16+
@FormTest
17+
public void testTabIterator() {
18+
Form hi = new Form("Hi World", BoxLayout.y());
19+
TextField tf1 = new TextField("Text 1");
20+
hi.add(tf1);
21+
Picker p1 = new Picker();
22+
p1.setType(Display.PICKER_TYPE_STRINGS);
23+
p1.setStrings("Red", "Green", "Blue", "Orange");
24+
hi.add(p1);
25+
hi.add(new TextField("Text 2"));
26+
27+
CheckBox enableTabsCheckBox = new CheckBox("Enable Tabbing");
28+
enableTabsCheckBox.setSelected(true);
29+
enableTabsCheckBox.addActionListener(e->{
30+
$("*", hi).each(c->{
31+
c.setPreferredTabIndex(enableTabsCheckBox.isSelected() ? 0 : -1);
32+
});
33+
});
34+
hi.add(enableTabsCheckBox);
35+
hi.show();
36+
37+
// Initially selected
38+
assertTrue(enableTabsCheckBox.isSelected());
39+
// Since we didn't run the listener yet (it's only on action), and the component doesn't call it on init,
40+
// we should verify initial state if relevant, but the logic is inside the listener.
41+
// Let's trigger it.
42+
43+
enableTabsCheckBox.pressed();
44+
enableTabsCheckBox.released();
45+
46+
assertFalse(enableTabsCheckBox.isSelected());
47+
assertEquals(-1, tf1.getPreferredTabIndex());
48+
49+
enableTabsCheckBox.pressed();
50+
enableTabsCheckBox.released();
51+
52+
assertTrue(enableTabsCheckBox.isSelected());
53+
assertEquals(0, tf1.getPreferredTabIndex());
54+
}
55+
}
Lines changed: 59 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,59 @@
1+
package com.codename1.samples;
2+
3+
import com.codename1.components.SpanLabel;
4+
import com.codename1.ui.Container;
5+
import com.codename1.ui.Form;
6+
import com.codename1.ui.Tabs;
7+
import com.codename1.ui.layouts.BorderLayout;
8+
import com.codename1.ui.layouts.BoxLayout;
9+
import com.codename1.junit.UITestBase;
10+
import com.codename1.junit.FormTest;
11+
import static org.junit.jupiter.api.Assertions.*;
12+
13+
public class TabsAnimationSample2957Test extends UITestBase {
14+
15+
@FormTest
16+
public void testTabsAnimation() {
17+
Form hi = new Form("Tabs", new BorderLayout());
18+
Tabs t = new Tabs();
19+
SpanLabel t1 = new SpanLabel("Blue");
20+
t1.getAllStyles().setBgColor(0xff);
21+
t1.getAllStyles().setBgTransparency(255);
22+
Container cont1 = new Container(new BoxLayout(BoxLayout.Y_AXIS));
23+
cont1.add(t1);
24+
SpanLabel t2 = new SpanLabel("Green");
25+
t2.getAllStyles().setBgColor(0xff00);
26+
t2.getAllStyles().setBgTransparency(255);
27+
Container cont2 = new Container(new BoxLayout(BoxLayout.Y_AXIS));
28+
cont2.add(t2);
29+
SpanLabel t3 = new SpanLabel("Red");
30+
t3.getAllStyles().setBgColor(0xff0000);
31+
t3.getAllStyles().setBgTransparency(255);
32+
Container cont3 = new Container(new BoxLayout(BoxLayout.Y_AXIS));
33+
cont3.add(t3);
34+
t.addTab("Blue", cont1);
35+
t.addTab("Green", cont2);
36+
t.addTab("Red", cont3);
37+
38+
hi.add(BorderLayout.CENTER, t);
39+
hi.show();
40+
41+
// Simulate timer logic
42+
int idx = t.getSelectedIndex() + 1;
43+
if (idx >= t.getTabCount()) {
44+
idx = 0;
45+
}
46+
t.setSelectedIndex(idx);
47+
48+
assertEquals(1, t.getSelectedIndex());
49+
50+
idx = t.getSelectedIndex() + 1;
51+
t.setSelectedIndex(idx);
52+
assertEquals(2, t.getSelectedIndex());
53+
54+
idx = t.getSelectedIndex() + 1;
55+
if (idx >= t.getTabCount()) idx = 0;
56+
t.setSelectedIndex(idx);
57+
assertEquals(0, t.getSelectedIndex());
58+
}
59+
}
Lines changed: 64 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,64 @@
1+
package com.codename1.samples;
2+
3+
import com.codename1.components.SpanButton;
4+
import com.codename1.ui.Button;
5+
import com.codename1.ui.Component;
6+
import com.codename1.ui.Container;
7+
import com.codename1.ui.Form;
8+
import com.codename1.ui.Image;
9+
import com.codename1.ui.Label;
10+
import com.codename1.ui.Tabs;
11+
import com.codename1.ui.events.ActionListener;
12+
import com.codename1.ui.layouts.BorderLayout;
13+
import com.codename1.junit.UITestBase;
14+
import com.codename1.junit.FormTest;
15+
import static org.junit.jupiter.api.Assertions.*;
16+
17+
public class TabsWithSpanLabelsTestTest extends UITestBase {
18+
19+
@FormTest
20+
public void testTabsWithSpanLabels() {
21+
Form hi = new Form("Custom Tabs", new BorderLayout());
22+
Tabs tb = new Tabs(Component.TOP) {
23+
@Override
24+
protected Component createTab(String title, Image icon) {
25+
SpanButton custom = new SpanButton(title);
26+
custom.setName("SpanButton");
27+
custom.setIcon(icon);
28+
custom.setUIID("Container");
29+
custom.setTextUIID("mpiTabMetalUnSelected");
30+
custom.setIconPosition(BorderLayout.NORTH);
31+
return custom;
32+
}
33+
34+
@Override
35+
public String getTabTitle(Component tab) {
36+
return ((SpanButton) tab).getText();
37+
}
38+
39+
@Override
40+
protected void bindTabActionListener(Component tab, ActionListener l) {
41+
((SpanButton) tab).addActionListener(l);
42+
}
43+
44+
@Override
45+
protected void selectTab(Component tab) {
46+
// Simplified logic for test
47+
((SpanButton)tab).setTextUIID("mpiTabMetalSelected");
48+
}
49+
};
50+
51+
tb.setTabUIID(null);
52+
Button btn = new Button("Any Button Action");
53+
tb.addTab("Tab 1", btn);
54+
tb.addTab("Really long\ntext in tab", new Label("T2"));
55+
56+
hi.add(BorderLayout.CENTER, tb);
57+
hi.show();
58+
59+
assertEquals(2, tb.getTabCount());
60+
61+
tb.setSelectedIndex(1);
62+
assertEquals(1, tb.getSelectedIndex());
63+
}
64+
}
Lines changed: 42 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,42 @@
1+
package com.codename1.samples;
2+
3+
import com.codename1.ui.Button;
4+
import com.codename1.ui.Form;
5+
import com.codename1.ui.TextField;
6+
import com.codename1.ui.layouts.BoxLayout;
7+
import com.codename1.ui.plaf.Style;
8+
import com.codename1.ui.plaf.UIManager;
9+
import com.codename1.junit.UITestBase;
10+
import com.codename1.junit.FormTest;
11+
import static org.junit.jupiter.api.Assertions.*;
12+
13+
public class TestCSSRegression3077Test extends UITestBase {
14+
15+
@FormTest
16+
public void testCSSRegression() {
17+
// Let's set up the styles manually in UIManager to mimic the CSS
18+
Style buttonStyle = UIManager.getInstance().getComponentStyle("Button");
19+
buttonStyle.setBgColor(0x16D173);
20+
21+
UIManager.getInstance().setComponentStyle("Button", buttonStyle);
22+
23+
// LinkButton derives from Button
24+
Style linkButtonStyle = new Style(buttonStyle);
25+
linkButtonStyle.setBorder(null);
26+
UIManager.getInstance().setComponentStyle("LinkButton", linkButtonStyle);
27+
28+
Form hi = new Form("Hi World", BoxLayout.y());
29+
TextField textField = new TextField();
30+
Button button = new Button("Button", "Button");
31+
Button linkButton = new Button("Link Button", "LinkButton");
32+
33+
hi.add(textField);
34+
hi.add(button);
35+
hi.add(linkButton);
36+
hi.show();
37+
38+
assertEquals("LinkButton", linkButton.getUIID());
39+
// Verify style application
40+
assertEquals(linkButton.getStyle().getBorder(), null);
41+
}
42+
}
Lines changed: 27 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,27 @@
1+
package com.codename1.samples;
2+
3+
import com.codename1.ui.Form;
4+
import com.codename1.ui.TextComponent;
5+
import com.codename1.ui.TextComponentPassword;
6+
import com.codename1.ui.layouts.TextModeLayout;
7+
import com.codename1.junit.UITestBase;
8+
import com.codename1.junit.FormTest;
9+
import static org.junit.jupiter.api.Assertions.*;
10+
11+
public class TestTextComponentPassword2976Test extends UITestBase {
12+
13+
@FormTest
14+
public void testTextComponentPassword() {
15+
TextModeLayout tl = new TextModeLayout(2, 1);
16+
Form f = new Form("Pixel Perfect", tl);
17+
18+
TextComponent user = new TextComponent();
19+
TextComponentPassword pass = new TextComponentPassword();
20+
21+
f.addAll(user, pass);
22+
f.show();
23+
24+
assertTrue(f.contains(user));
25+
assertTrue(f.contains(pass));
26+
}
27+
}
Lines changed: 28 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,28 @@
1+
package com.codename1.samples;
2+
3+
import com.codename1.ui.Display;
4+
import com.codename1.ui.Form;
5+
import com.codename1.ui.TextArea;
6+
import com.codename1.ui.layouts.BorderLayout;
7+
import com.codename1.junit.UITestBase;
8+
import com.codename1.junit.FormTest;
9+
import static org.junit.jupiter.api.Assertions.*;
10+
11+
public class TextAreaSampleTest extends UITestBase {
12+
13+
@FormTest
14+
public void testTextArea() {
15+
Form hi = new Form("Hi World", new BorderLayout());
16+
TextArea ta = new TextArea();
17+
18+
hi.add(BorderLayout.CENTER, ta);
19+
hi.show();
20+
21+
Display.getInstance().callSerially(()->ta.setText("Some Text"));
22+
23+
// Process serial calls
24+
com.codename1.ui.DisplayTest.flushEdt();
25+
26+
assertEquals("Some Text", ta.getText());
27+
}
28+
}
Lines changed: 29 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,29 @@
1+
package com.codename1.samples;
2+
3+
import com.codename1.ui.Form;
4+
import com.codename1.ui.TextComponent;
5+
import com.codename1.ui.layouts.TextModeLayout;
6+
import com.codename1.junit.UITestBase;
7+
import com.codename1.junit.FormTest;
8+
import static org.junit.jupiter.api.Assertions.*;
9+
10+
public class TextComponentSample2745Test extends UITestBase {
11+
12+
@FormTest
13+
public void testTextComponent() {
14+
Form hi = new Form("Hi World", new TextModeLayout(2, 1));
15+
TextComponent cmp1 = new TextComponent().label("label1");
16+
TextComponent cmp2 = new TextComponent().label("label2");
17+
hi.add(cmp1);
18+
hi.add(cmp2);
19+
hi.show();
20+
21+
cmp1.text("text1");
22+
cmp2.text("text2");
23+
hi.revalidate();
24+
25+
assertEquals("text1", cmp1.getText());
26+
assertEquals("text2", cmp2.getText());
27+
assertEquals("label1", cmp1.getPropertyValue("label"));
28+
}
29+
}
Lines changed: 39 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,39 @@
1+
package com.codename1.samples;
2+
3+
import com.codename1.ui.Form;
4+
import com.codename1.ui.Label;
5+
import com.codename1.ui.TextArea;
6+
import com.codename1.ui.TextField;
7+
import com.codename1.ui.layouts.BoxLayout;
8+
import com.codename1.ui.plaf.Style;
9+
import com.codename1.junit.UITestBase;
10+
import com.codename1.junit.FormTest;
11+
import static com.codename1.ui.ComponentSelector.$;
12+
import static org.junit.jupiter.api.Assertions.*;
13+
14+
public class TextFieldCaretColorTest2780Test extends UITestBase {
15+
16+
@FormTest
17+
public void testTextFieldCaretColor() {
18+
Form hi = new Form("Hi World", BoxLayout.y());
19+
hi.add(new Label("Hi World"));
20+
TextField tf1 = new TextField();
21+
TextField tf2 = new TextField();
22+
TextArea ta1 = new TextArea();
23+
TextArea ta2 = new TextArea();
24+
ta1.setRows(5);
25+
ta2.setRows(5);
26+
27+
$(tf2, ta2).selectAllStyles()
28+
.setBgColor(0x0000ff)
29+
.setFgColor(0xffffff)
30+
.setBgTransparency(0xff)
31+
.setBackgroundType(Style.BACKGROUND_NONE);
32+
33+
hi.addAll(tf1, tf2, ta1, ta2);
34+
hi.show();
35+
36+
assertEquals(0x0000ff, tf2.getStyle().getBgColor());
37+
assertEquals(0xffffff, tf2.getStyle().getFgColor());
38+
}
39+
}
Lines changed: 30 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,30 @@
1+
package com.codename1.samples;
2+
3+
import com.codename1.ui.Form;
4+
import com.codename1.ui.TextArea;
5+
import com.codename1.ui.TextField;
6+
import com.codename1.ui.layouts.BoxLayout;
7+
import com.codename1.junit.UITestBase;
8+
import com.codename1.junit.FormTest;
9+
import static org.junit.jupiter.api.Assertions.*;
10+
11+
public class TextFieldHintStylingTestTest extends UITestBase {
12+
13+
@FormTest
14+
public void testTextFieldHintStyling() {
15+
Form hi = new Form("Hi World", BoxLayout.y());
16+
TextField text = new TextField("", "Email or Username", 20, TextArea.ANY);
17+
18+
text.getAllStyles().setBgColor(0xff0000);
19+
text.getAllStyles().setFgColor(0x00ff00);
20+
21+
text.getHintLabel().getAllStyles().setBgColor(0xcccccc);
22+
text.getHintLabel().getAllStyles().setFgColor(0x0000ff);
23+
24+
hi.add(text);
25+
hi.show();
26+
27+
assertEquals(0xff0000, text.getStyle().getBgColor());
28+
assertEquals(0xcccccc, text.getHintLabel().getStyle().getBgColor());
29+
}
30+
}

0 commit comments

Comments
 (0)