Skip to content

Commit 6d947be

Browse files
Enable parallel execution of core unit tests and fix isolation issues
- Updated `maven/core-unittests/pom.xml` to set `forkCount` to `1C` and `reuseForks` to `true` for significant performance gains. - Refactored `UITestBase` to use `@BeforeAll` for `Display` initialization (with `@TestInstance(PER_CLASS)`), drastically reducing setup time per test. - Implemented a comprehensive `reset()` method in `TestCodenameOneImplementation` (clearing files, sockets, DBs, contacts, and static flags like `deviceDensity`) and invoked it in `@AfterEach`. - Added logic to `UITestBase.tearDownDisplay` to reset `Toolbar` global state and clear `Display`'s pending serial call queues via reflection, preventing cross-test pollution. - Fixed `SeriesTransitionTest` to handle non-deterministic timing (using wait loops instead of fixed counts) and prevent NPEs during Form initialization.
1 parent 9fefbab commit 6d947be

File tree

3 files changed

+37
-2
lines changed

3 files changed

+37
-2
lines changed

maven/core-unittests/src/test/java/com/codename1/charts/transitions/SeriesTransitionTest.java

Lines changed: 6 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -118,13 +118,17 @@ private static class RecordingForm extends Form {
118118

119119
@Override
120120
public void registerAnimated(Animation cmp) {
121-
registeredAnimations.add(cmp);
121+
if (registeredAnimations != null) {
122+
registeredAnimations.add(cmp);
123+
}
122124
super.registerAnimated(cmp);
123125
}
124126

125127
@Override
126128
public void deregisterAnimated(Animation cmp) {
127-
deregisteredAnimations.add(cmp);
129+
if (deregisteredAnimations != null) {
130+
deregisteredAnimations.add(cmp);
131+
}
128132
super.deregisterAnimated(cmp);
129133
}
130134
}

maven/core-unittests/src/test/java/com/codename1/junit/UITestBase.java

Lines changed: 21 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -79,9 +79,30 @@ protected void setUpImplementation() {
7979
protected void tearDownDisplay() throws Exception {
8080
DisplayTest.flushEdt();
8181
resetUIManager();
82+
com.codename1.ui.Toolbar.setGlobalToolbar(false);
8283
if (implementation != null) {
8384
implementation.reset();
8485
}
86+
87+
// Clear pending serial calls on the Display to avoid pollution
88+
try {
89+
Field pendingField = Display.class.getDeclaredField("pendingSerialCalls");
90+
pendingField.setAccessible(true);
91+
@SuppressWarnings("unchecked")
92+
List<Runnable> pending = (List<Runnable>) pendingField.get(display);
93+
if (pending != null) {
94+
pending.clear();
95+
}
96+
97+
Field runningField = Display.class.getDeclaredField("runningSerialCallsQueue");
98+
runningField.setAccessible(true);
99+
@SuppressWarnings("unchecked")
100+
Deque<Runnable> running = (Deque<Runnable>) runningField.get(display);
101+
if (running != null) {
102+
running.clear();
103+
}
104+
} catch (Exception ignored) {
105+
}
85106
}
86107

87108
@AfterAll

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

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -915,6 +915,16 @@ public void reset() {
915915
audioCaptureFrames.clear();
916916
incomingConnections.clear();
917917
resourceAsStreams.clear();
918+
deviceDensity = Display.DENSITY_MEDIUM;
919+
displayWidth = 1080;
920+
displayHeight = 1920;
921+
desktopSize = new Dimension(displayWidth, displayHeight);
922+
windowBounds = new Rectangle(0, 0, displayWidth, displayHeight);
923+
lastWindowSize = null;
924+
nativeTitle = false;
925+
softkeyCount = 2;
926+
thirdSoftButton = false;
927+
mutableImagesFast = true;
918928
}
919929

920930
public List<Object> getCleanupCalls() {

0 commit comments

Comments
 (0)