This is an automated email from the ASF dual-hosted git repository.
davsclaus pushed a commit to branch main
in repository https://gitbox.apache.org/repos/asf/camel.git
The following commit(s) were added to refs/heads/main by this push:
new 1db8f5d847f0 CAMEL-25966: camel-jbang - faster tests of
camel-jbang-plugin-tui (#29742)
1db8f5d847f0 is described below
commit 1db8f5d847f034193495863fa88909c7f0ff9779
Author: Claus Ibsen <[email protected]>
AuthorDate: Thu Nov 12 20:44:23 2026 +0100
CAMEL-25966: camel-jbang - faster tests of camel-jbang-plugin-tui (#29742)
The tests of camel-jbang-plugin-tui take 20 seconds instead of 57 locally.
- A TuiAwait.await() test helper checks at once and then every 10 ms,
instead
of Awaitility's 100 ms first delay; 24 test classes use it, atMost
unchanged.
- McpFacadeConfirmTest no longer checks a chaos rule against pid 1, which
waited the full 10 second timeout.
Co-Authored-By: Claude Opus 5.5 <[email protected]>
---
.../dsl/jbang/core/commands/tui/AboutViewTest.java | 2 +-
.../core/commands/tui/AcpAgentClientTest.java | 2 +-
.../jbang/core/commands/tui/AiPanelAcpTest.java | 2 +-
.../dsl/jbang/core/commands/tui/AiPanelTest.java | 2 +-
.../core/commands/tui/ArchitectureViewTest.java | 2 +-
.../jbang/core/commands/tui/ChaosExploreTest.java | 2 +-
.../core/commands/tui/DiagramTopologyTest.java | 2 +-
.../dsl/jbang/core/commands/tui/FakeAcpAgent.java | 2 +-
.../jbang/core/commands/tui/JfrTabRenderTest.java | 2 +-
.../core/commands/tui/LaunchManagerInfraTest.java | 2 +-
.../dsl/jbang/core/commands/tui/LiveEditTest.java | 2 +-
.../core/commands/tui/McpFacadeConfirmTest.java | 15 ++++----
.../tui/MonitorContextActionFilesTest.java | 2 +-
.../commands/tui/MonitorContextRequestTest.java | 2 +-
.../core/commands/tui/MonitorStartupTest.java | 2 +-
.../core/commands/tui/MonotonicClockTest.java | 2 +-
.../commands/tui/ProjectOverviewAssistTest.java | 2 +-
.../core/commands/tui/SemanticAuditViewTest.java | 2 +-
.../core/commands/tui/SemanticImageViewTest.java | 2 +-
.../tui/SemanticMetadataCompletionTest.java | 2 +-
.../commands/tui/SemanticMonitoringViewTest.java | 2 +-
.../jbang/core/commands/tui/SemanticTabTest.java | 2 +-
.../core/commands/tui/ShellPanelLifecycleTest.java | 2 +-
.../core/commands/tui/ToolConfirmPopupTest.java | 2 +-
.../dsl/jbang/core/commands/tui/TuiAwait.java | 45 ++++++++++++++++++++++
.../jbang/core/commands/tui/WebTerminalTest.java | 2 +-
26 files changed, 77 insertions(+), 31 deletions(-)
diff --git
a/dsl/camel-jbang/camel-jbang-plugin-tui/src/test/java/org/apache/camel/dsl/jbang/core/commands/tui/AboutViewTest.java
b/dsl/camel-jbang/camel-jbang-plugin-tui/src/test/java/org/apache/camel/dsl/jbang/core/commands/tui/AboutViewTest.java
index 1be80a314444..bc92ee563b3f 100644
---
a/dsl/camel-jbang/camel-jbang-plugin-tui/src/test/java/org/apache/camel/dsl/jbang/core/commands/tui/AboutViewTest.java
+++
b/dsl/camel-jbang/camel-jbang-plugin-tui/src/test/java/org/apache/camel/dsl/jbang/core/commands/tui/AboutViewTest.java
@@ -37,8 +37,8 @@ import org.apache.camel.util.json.JsonObject;
import org.junit.jupiter.api.Test;
import org.junit.jupiter.api.io.TempDir;
+import static org.apache.camel.dsl.jbang.core.commands.tui.TuiAwait.await;
import static org.assertj.core.api.Assertions.assertThat;
-import static org.awaitility.Awaitility.await;
/**
* Overview ▸ About (CAMEL-26700): what an integration does, from its sources,
and what has happened, from its timeline.
diff --git
a/dsl/camel-jbang/camel-jbang-plugin-tui/src/test/java/org/apache/camel/dsl/jbang/core/commands/tui/AcpAgentClientTest.java
b/dsl/camel-jbang/camel-jbang-plugin-tui/src/test/java/org/apache/camel/dsl/jbang/core/commands/tui/AcpAgentClientTest.java
index bc77f198f925..7686b0c7d2c1 100644
---
a/dsl/camel-jbang/camel-jbang-plugin-tui/src/test/java/org/apache/camel/dsl/jbang/core/commands/tui/AcpAgentClientTest.java
+++
b/dsl/camel-jbang/camel-jbang-plugin-tui/src/test/java/org/apache/camel/dsl/jbang/core/commands/tui/AcpAgentClientTest.java
@@ -33,7 +33,7 @@ import org.junit.jupiter.api.Timeout;
import org.junit.jupiter.api.condition.EnabledOnOs;
import org.junit.jupiter.api.condition.OS;
-import static org.awaitility.Awaitility.await;
+import static org.apache.camel.dsl.jbang.core.commands.tui.TuiAwait.await;
import static org.junit.jupiter.api.Assertions.assertEquals;
import static org.junit.jupiter.api.Assertions.assertFalse;
import static org.junit.jupiter.api.Assertions.assertNotNull;
diff --git
a/dsl/camel-jbang/camel-jbang-plugin-tui/src/test/java/org/apache/camel/dsl/jbang/core/commands/tui/AiPanelAcpTest.java
b/dsl/camel-jbang/camel-jbang-plugin-tui/src/test/java/org/apache/camel/dsl/jbang/core/commands/tui/AiPanelAcpTest.java
index 3f733f6aa63c..38a5b727f461 100644
---
a/dsl/camel-jbang/camel-jbang-plugin-tui/src/test/java/org/apache/camel/dsl/jbang/core/commands/tui/AiPanelAcpTest.java
+++
b/dsl/camel-jbang/camel-jbang-plugin-tui/src/test/java/org/apache/camel/dsl/jbang/core/commands/tui/AiPanelAcpTest.java
@@ -39,7 +39,7 @@ import org.junit.jupiter.api.Test;
import org.junit.jupiter.api.io.TempDir;
import org.junit.jupiter.api.parallel.Isolated;
-import static org.awaitility.Awaitility.await;
+import static org.apache.camel.dsl.jbang.core.commands.tui.TuiAwait.await;
import static org.junit.jupiter.api.Assertions.assertArrayEquals;
import static org.junit.jupiter.api.Assertions.assertEquals;
import static org.junit.jupiter.api.Assertions.assertFalse;
diff --git
a/dsl/camel-jbang/camel-jbang-plugin-tui/src/test/java/org/apache/camel/dsl/jbang/core/commands/tui/AiPanelTest.java
b/dsl/camel-jbang/camel-jbang-plugin-tui/src/test/java/org/apache/camel/dsl/jbang/core/commands/tui/AiPanelTest.java
index d68ed3f48cad..1f50075211ab 100644
---
a/dsl/camel-jbang/camel-jbang-plugin-tui/src/test/java/org/apache/camel/dsl/jbang/core/commands/tui/AiPanelTest.java
+++
b/dsl/camel-jbang/camel-jbang-plugin-tui/src/test/java/org/apache/camel/dsl/jbang/core/commands/tui/AiPanelTest.java
@@ -34,7 +34,7 @@ import org.apache.camel.dsl.jbang.core.commands.LlmClient;
import org.apache.camel.util.json.JsonObject;
import org.junit.jupiter.api.Test;
-import static org.awaitility.Awaitility.await;
+import static org.apache.camel.dsl.jbang.core.commands.tui.TuiAwait.await;
import static org.junit.jupiter.api.Assertions.assertEquals;
import static org.junit.jupiter.api.Assertions.assertFalse;
import static org.junit.jupiter.api.Assertions.assertNotEquals;
diff --git
a/dsl/camel-jbang/camel-jbang-plugin-tui/src/test/java/org/apache/camel/dsl/jbang/core/commands/tui/ArchitectureViewTest.java
b/dsl/camel-jbang/camel-jbang-plugin-tui/src/test/java/org/apache/camel/dsl/jbang/core/commands/tui/ArchitectureViewTest.java
index eba0d126af16..fbd0d3feeaf6 100644
---
a/dsl/camel-jbang/camel-jbang-plugin-tui/src/test/java/org/apache/camel/dsl/jbang/core/commands/tui/ArchitectureViewTest.java
+++
b/dsl/camel-jbang/camel-jbang-plugin-tui/src/test/java/org/apache/camel/dsl/jbang/core/commands/tui/ArchitectureViewTest.java
@@ -44,7 +44,7 @@ import org.junit.jupiter.api.Timeout;
import org.junit.jupiter.api.io.TempDir;
import org.junit.jupiter.api.parallel.Isolated;
-import static org.awaitility.Awaitility.await;
+import static org.apache.camel.dsl.jbang.core.commands.tui.TuiAwait.await;
import static org.junit.jupiter.api.Assertions.assertEquals;
import static org.junit.jupiter.api.Assertions.assertFalse;
import static org.junit.jupiter.api.Assertions.assertTrue;
diff --git
a/dsl/camel-jbang/camel-jbang-plugin-tui/src/test/java/org/apache/camel/dsl/jbang/core/commands/tui/ChaosExploreTest.java
b/dsl/camel-jbang/camel-jbang-plugin-tui/src/test/java/org/apache/camel/dsl/jbang/core/commands/tui/ChaosExploreTest.java
index f52700e8436f..f39cc892188d 100644
---
a/dsl/camel-jbang/camel-jbang-plugin-tui/src/test/java/org/apache/camel/dsl/jbang/core/commands/tui/ChaosExploreTest.java
+++
b/dsl/camel-jbang/camel-jbang-plugin-tui/src/test/java/org/apache/camel/dsl/jbang/core/commands/tui/ChaosExploreTest.java
@@ -37,9 +37,9 @@ import org.apache.camel.util.json.Jsoner;
import org.junit.jupiter.api.BeforeEach;
import org.junit.jupiter.api.Test;
+import static org.apache.camel.dsl.jbang.core.commands.tui.TuiAwait.await;
import static org.assertj.core.api.Assertions.assertThat;
import static org.assertj.core.api.Assertions.tuple;
-import static org.awaitility.Awaitility.await;
/**
* Let there be chaos from the Chaos screen ({@code L}): the rules to pick
from the suggestions of the integration, the
diff --git
a/dsl/camel-jbang/camel-jbang-plugin-tui/src/test/java/org/apache/camel/dsl/jbang/core/commands/tui/DiagramTopologyTest.java
b/dsl/camel-jbang/camel-jbang-plugin-tui/src/test/java/org/apache/camel/dsl/jbang/core/commands/tui/DiagramTopologyTest.java
index bdf52a961c50..61513d09e18c 100644
---
a/dsl/camel-jbang/camel-jbang-plugin-tui/src/test/java/org/apache/camel/dsl/jbang/core/commands/tui/DiagramTopologyTest.java
+++
b/dsl/camel-jbang/camel-jbang-plugin-tui/src/test/java/org/apache/camel/dsl/jbang/core/commands/tui/DiagramTopologyTest.java
@@ -33,9 +33,9 @@ import org.apache.camel.util.json.JsonObject;
import org.apache.camel.util.json.Jsoner;
import org.junit.jupiter.api.Test;
+import static org.apache.camel.dsl.jbang.core.commands.tui.TuiAwait.await;
import static org.assertj.core.api.Assertions.assertThat;
import static org.assertj.core.api.Assertions.tuple;
-import static org.awaitility.Awaitility.await;
/**
* The diagrams ask for the structure of the routes only when the routes
change, and take the numbers from the status
diff --git
a/dsl/camel-jbang/camel-jbang-plugin-tui/src/test/java/org/apache/camel/dsl/jbang/core/commands/tui/FakeAcpAgent.java
b/dsl/camel-jbang/camel-jbang-plugin-tui/src/test/java/org/apache/camel/dsl/jbang/core/commands/tui/FakeAcpAgent.java
index 82286c937cbd..a000f3b4aff2 100644
---
a/dsl/camel-jbang/camel-jbang-plugin-tui/src/test/java/org/apache/camel/dsl/jbang/core/commands/tui/FakeAcpAgent.java
+++
b/dsl/camel-jbang/camel-jbang-plugin-tui/src/test/java/org/apache/camel/dsl/jbang/core/commands/tui/FakeAcpAgent.java
@@ -44,7 +44,7 @@ import org.apache.camel.util.json.JsonArray;
import org.apache.camel.util.json.JsonObject;
import org.apache.camel.util.json.Jsoner;
-import static org.awaitility.Awaitility.await;
+import static org.apache.camel.dsl.jbang.core.commands.tui.TuiAwait.await;
/**
* In-memory ACP agent for tests. Talks newline-delimited JSON-RPC over pipes.
Request handlers run on their own thread
diff --git
a/dsl/camel-jbang/camel-jbang-plugin-tui/src/test/java/org/apache/camel/dsl/jbang/core/commands/tui/JfrTabRenderTest.java
b/dsl/camel-jbang/camel-jbang-plugin-tui/src/test/java/org/apache/camel/dsl/jbang/core/commands/tui/JfrTabRenderTest.java
index bf4ca7633284..09bdd8744222 100644
---
a/dsl/camel-jbang/camel-jbang-plugin-tui/src/test/java/org/apache/camel/dsl/jbang/core/commands/tui/JfrTabRenderTest.java
+++
b/dsl/camel-jbang/camel-jbang-plugin-tui/src/test/java/org/apache/camel/dsl/jbang/core/commands/tui/JfrTabRenderTest.java
@@ -33,8 +33,8 @@ import org.apache.camel.util.json.JsonObject;
import org.junit.jupiter.api.BeforeEach;
import org.junit.jupiter.api.Test;
+import static org.apache.camel.dsl.jbang.core.commands.tui.TuiAwait.await;
import static org.assertj.core.api.Assertions.assertThat;
-import static org.awaitility.Awaitility.await;
class JfrTabRenderTest {
diff --git
a/dsl/camel-jbang/camel-jbang-plugin-tui/src/test/java/org/apache/camel/dsl/jbang/core/commands/tui/LaunchManagerInfraTest.java
b/dsl/camel-jbang/camel-jbang-plugin-tui/src/test/java/org/apache/camel/dsl/jbang/core/commands/tui/LaunchManagerInfraTest.java
index 21589f75a28c..9fa8b5b64f6d 100644
---
a/dsl/camel-jbang/camel-jbang-plugin-tui/src/test/java/org/apache/camel/dsl/jbang/core/commands/tui/LaunchManagerInfraTest.java
+++
b/dsl/camel-jbang/camel-jbang-plugin-tui/src/test/java/org/apache/camel/dsl/jbang/core/commands/tui/LaunchManagerInfraTest.java
@@ -25,8 +25,8 @@ import org.apache.camel.util.json.JsonObject;
import org.junit.jupiter.api.AfterEach;
import org.junit.jupiter.api.Test;
+import static org.apache.camel.dsl.jbang.core.commands.tui.TuiAwait.await;
import static org.assertj.core.api.Assertions.assertThat;
-import static org.awaitility.Awaitility.await;
/**
* The infra services an example needs may name the implementation too ({@code
aws sqs}): it is started with both, and
diff --git
a/dsl/camel-jbang/camel-jbang-plugin-tui/src/test/java/org/apache/camel/dsl/jbang/core/commands/tui/LiveEditTest.java
b/dsl/camel-jbang/camel-jbang-plugin-tui/src/test/java/org/apache/camel/dsl/jbang/core/commands/tui/LiveEditTest.java
index 2e541c01ef9e..a884e16fcd70 100644
---
a/dsl/camel-jbang/camel-jbang-plugin-tui/src/test/java/org/apache/camel/dsl/jbang/core/commands/tui/LiveEditTest.java
+++
b/dsl/camel-jbang/camel-jbang-plugin-tui/src/test/java/org/apache/camel/dsl/jbang/core/commands/tui/LiveEditTest.java
@@ -30,8 +30,8 @@ import java.util.function.Predicate;
import org.junit.jupiter.api.Test;
import org.junit.jupiter.api.io.TempDir;
+import static org.apache.camel.dsl.jbang.core.commands.tui.TuiAwait.await;
import static org.assertj.core.api.Assertions.assertThat;
-import static org.awaitility.Awaitility.await;
/**
* A live edit between the tool thread, which waits in replayFileWrite, and
the UI thread, which replays the write in
diff --git
a/dsl/camel-jbang/camel-jbang-plugin-tui/src/test/java/org/apache/camel/dsl/jbang/core/commands/tui/McpFacadeConfirmTest.java
b/dsl/camel-jbang/camel-jbang-plugin-tui/src/test/java/org/apache/camel/dsl/jbang/core/commands/tui/McpFacadeConfirmTest.java
index 2c7630f4faf5..03f17364ec5d 100644
---
a/dsl/camel-jbang/camel-jbang-plugin-tui/src/test/java/org/apache/camel/dsl/jbang/core/commands/tui/McpFacadeConfirmTest.java
+++
b/dsl/camel-jbang/camel-jbang-plugin-tui/src/test/java/org/apache/camel/dsl/jbang/core/commands/tui/McpFacadeConfirmTest.java
@@ -29,6 +29,7 @@ import org.junit.jupiter.api.Test;
import org.junit.jupiter.api.io.TempDir;
import static org.assertj.core.api.Assertions.assertThat;
+import static org.assertj.core.api.Assertions.assertThatThrownBy;
/**
* The AI tools ask the user, through the monitor, before a call that reaches
beyond the integration, may destroy data
@@ -120,7 +121,8 @@ class McpFacadeConfirmTest {
@Test
void addingAndChangingAChaosRuleAskFirstAndCheckingDoesNot() throws
Exception {
AnsweringBridge bridge = new AnsweringBridge(false);
- TuiToolRegistry registry = new TuiToolRegistry(facade(context(),
bridge));
+ MonitorContext ctx = context();
+ TuiToolRegistry registry = new TuiToolRegistry(facade(ctx, bridge));
JsonObject added = (JsonObject)
Jsoner.deserialize(registry.execute("tui_chaos_add",
new JsonObject(Map.of("rule", "route=orders error
rate=0.05"))));
@@ -134,12 +136,11 @@ class McpFacadeConfirmTest {
.containsExactly("route=orders error rate=0.05", "route=orders
error rate=0.1");
assertThat(registry.execute("tui_chaos_add", new
JsonObject(Map.of()))).isEqualTo("Error: rule is required");
- // the check only reads: it is not asked (here no integration answers
it)
- try {
- registry.execute("tui_chaos_check", new JsonObject(Map.of("rule",
"route=orders error")));
- } catch (RuntimeException e) {
- // no integration with pid 1 runs in the test
- }
+ // the check only reads: it is not asked. No integration is selected,
so it fails at once; pid 1 is a live
+ // process but no Camel, which would keep the check waiting 10 seconds
for an answer
+ ctx.selectedPid = null;
+ assertThatThrownBy(() -> registry.execute("tui_chaos_check", new
JsonObject(Map.of("rule", "route=orders error"))))
+ .hasMessageContaining("No running Camel process");
assertThat(bridge.calls).hasSize(2);
}
diff --git
a/dsl/camel-jbang/camel-jbang-plugin-tui/src/test/java/org/apache/camel/dsl/jbang/core/commands/tui/MonitorContextActionFilesTest.java
b/dsl/camel-jbang/camel-jbang-plugin-tui/src/test/java/org/apache/camel/dsl/jbang/core/commands/tui/MonitorContextActionFilesTest.java
index 394e03c2fae7..ab02ce660d34 100644
---
a/dsl/camel-jbang/camel-jbang-plugin-tui/src/test/java/org/apache/camel/dsl/jbang/core/commands/tui/MonitorContextActionFilesTest.java
+++
b/dsl/camel-jbang/camel-jbang-plugin-tui/src/test/java/org/apache/camel/dsl/jbang/core/commands/tui/MonitorContextActionFilesTest.java
@@ -33,8 +33,8 @@ import org.junit.jupiter.api.Test;
import org.junit.jupiter.api.io.TempDir;
import org.junit.jupiter.api.parallel.Isolated;
+import static org.apache.camel.dsl.jbang.core.commands.tui.TuiAwait.await;
import static org.assertj.core.api.Assertions.assertThat;
-import static org.awaitility.Awaitility.await;
/**
* The requests of the TUI to an integration of Camel 4.21 or later go in
files of their own (CAMEL-25448), so a route
diff --git
a/dsl/camel-jbang/camel-jbang-plugin-tui/src/test/java/org/apache/camel/dsl/jbang/core/commands/tui/MonitorContextRequestTest.java
b/dsl/camel-jbang/camel-jbang-plugin-tui/src/test/java/org/apache/camel/dsl/jbang/core/commands/tui/MonitorContextRequestTest.java
index 2a0dbee6b8dd..cd5873bb21da 100644
---
a/dsl/camel-jbang/camel-jbang-plugin-tui/src/test/java/org/apache/camel/dsl/jbang/core/commands/tui/MonitorContextRequestTest.java
+++
b/dsl/camel-jbang/camel-jbang-plugin-tui/src/test/java/org/apache/camel/dsl/jbang/core/commands/tui/MonitorContextRequestTest.java
@@ -30,8 +30,8 @@ import org.junit.jupiter.api.Test;
import org.junit.jupiter.api.io.TempDir;
import org.junit.jupiter.api.parallel.Isolated;
+import static org.apache.camel.dsl.jbang.core.commands.tui.TuiAwait.await;
import static org.assertj.core.api.Assertions.assertThat;
-import static org.awaitility.Awaitility.await;
@Isolated("Uses a temporary Camel home for real file IPC")
class MonitorContextRequestTest {
diff --git
a/dsl/camel-jbang/camel-jbang-plugin-tui/src/test/java/org/apache/camel/dsl/jbang/core/commands/tui/MonitorStartupTest.java
b/dsl/camel-jbang/camel-jbang-plugin-tui/src/test/java/org/apache/camel/dsl/jbang/core/commands/tui/MonitorStartupTest.java
index 5ac7d7bd2ba4..c096c0045c65 100644
---
a/dsl/camel-jbang/camel-jbang-plugin-tui/src/test/java/org/apache/camel/dsl/jbang/core/commands/tui/MonitorStartupTest.java
+++
b/dsl/camel-jbang/camel-jbang-plugin-tui/src/test/java/org/apache/camel/dsl/jbang/core/commands/tui/MonitorStartupTest.java
@@ -32,9 +32,9 @@ import org.apache.camel.test.AvailablePortFinder.Port;
import org.junit.jupiter.api.Test;
import org.junit.jupiter.api.parallel.Isolated;
+import static org.apache.camel.dsl.jbang.core.commands.tui.TuiAwait.await;
import static org.assertj.core.api.Assertions.assertThat;
import static org.assertj.core.api.Assertions.assertThatThrownBy;
-import static org.awaitility.Awaitility.await;
/**
* Tests for {@link MonitorStartup} that bind a real network port: isolated
from parallel test forks to avoid port races
diff --git
a/dsl/camel-jbang/camel-jbang-plugin-tui/src/test/java/org/apache/camel/dsl/jbang/core/commands/tui/MonotonicClockTest.java
b/dsl/camel-jbang/camel-jbang-plugin-tui/src/test/java/org/apache/camel/dsl/jbang/core/commands/tui/MonotonicClockTest.java
index a79cbcf78895..461e5d12b4dc 100644
---
a/dsl/camel-jbang/camel-jbang-plugin-tui/src/test/java/org/apache/camel/dsl/jbang/core/commands/tui/MonotonicClockTest.java
+++
b/dsl/camel-jbang/camel-jbang-plugin-tui/src/test/java/org/apache/camel/dsl/jbang/core/commands/tui/MonotonicClockTest.java
@@ -20,8 +20,8 @@ import java.util.concurrent.TimeUnit;
import org.junit.jupiter.api.Test;
+import static org.apache.camel.dsl.jbang.core.commands.tui.TuiAwait.await;
import static org.assertj.core.api.Assertions.assertThat;
-import static org.awaitility.Awaitility.await;
class MonotonicClockTest {
diff --git
a/dsl/camel-jbang/camel-jbang-plugin-tui/src/test/java/org/apache/camel/dsl/jbang/core/commands/tui/ProjectOverviewAssistTest.java
b/dsl/camel-jbang/camel-jbang-plugin-tui/src/test/java/org/apache/camel/dsl/jbang/core/commands/tui/ProjectOverviewAssistTest.java
index f9940102820d..f9571da86aa3 100644
---
a/dsl/camel-jbang/camel-jbang-plugin-tui/src/test/java/org/apache/camel/dsl/jbang/core/commands/tui/ProjectOverviewAssistTest.java
+++
b/dsl/camel-jbang/camel-jbang-plugin-tui/src/test/java/org/apache/camel/dsl/jbang/core/commands/tui/ProjectOverviewAssistTest.java
@@ -35,8 +35,8 @@ import org.junit.jupiter.api.Test;
import org.junit.jupiter.api.io.TempDir;
import org.junit.jupiter.api.parallel.Isolated;
+import static org.apache.camel.dsl.jbang.core.commands.tui.TuiAwait.await;
import static org.assertj.core.api.Assertions.assertThat;
-import static org.awaitility.Awaitility.await;
import static org.junit.jupiter.api.Assertions.assertEquals;
import static org.junit.jupiter.api.Assertions.assertFalse;
import static org.junit.jupiter.api.Assertions.assertNull;
diff --git
a/dsl/camel-jbang/camel-jbang-plugin-tui/src/test/java/org/apache/camel/dsl/jbang/core/commands/tui/SemanticAuditViewTest.java
b/dsl/camel-jbang/camel-jbang-plugin-tui/src/test/java/org/apache/camel/dsl/jbang/core/commands/tui/SemanticAuditViewTest.java
index 2d328fe1b33a..7d562a56db49 100644
---
a/dsl/camel-jbang/camel-jbang-plugin-tui/src/test/java/org/apache/camel/dsl/jbang/core/commands/tui/SemanticAuditViewTest.java
+++
b/dsl/camel-jbang/camel-jbang-plugin-tui/src/test/java/org/apache/camel/dsl/jbang/core/commands/tui/SemanticAuditViewTest.java
@@ -36,8 +36,8 @@ import org.junit.jupiter.params.provider.CsvSource;
import org.junit.jupiter.params.provider.NullSource;
import org.junit.jupiter.params.provider.ValueSource;
+import static org.apache.camel.dsl.jbang.core.commands.tui.TuiAwait.await;
import static org.assertj.core.api.Assertions.assertThat;
-import static org.awaitility.Awaitility.await;
class SemanticAuditViewTest {
private static final Instant START = Instant.parse("2026-10-14T12:00:00Z");
diff --git
a/dsl/camel-jbang/camel-jbang-plugin-tui/src/test/java/org/apache/camel/dsl/jbang/core/commands/tui/SemanticImageViewTest.java
b/dsl/camel-jbang/camel-jbang-plugin-tui/src/test/java/org/apache/camel/dsl/jbang/core/commands/tui/SemanticImageViewTest.java
index e8a019beec6b..c58a8956fcb0 100644
---
a/dsl/camel-jbang/camel-jbang-plugin-tui/src/test/java/org/apache/camel/dsl/jbang/core/commands/tui/SemanticImageViewTest.java
+++
b/dsl/camel-jbang/camel-jbang-plugin-tui/src/test/java/org/apache/camel/dsl/jbang/core/commands/tui/SemanticImageViewTest.java
@@ -36,8 +36,8 @@ import org.apache.camel.util.json.JsonObject;
import org.junit.jupiter.api.Test;
import org.junit.jupiter.api.io.TempDir;
+import static org.apache.camel.dsl.jbang.core.commands.tui.TuiAwait.await;
import static org.assertj.core.api.Assertions.assertThat;
-import static org.awaitility.Awaitility.await;
class SemanticImageViewTest {
@Test
diff --git
a/dsl/camel-jbang/camel-jbang-plugin-tui/src/test/java/org/apache/camel/dsl/jbang/core/commands/tui/SemanticMetadataCompletionTest.java
b/dsl/camel-jbang/camel-jbang-plugin-tui/src/test/java/org/apache/camel/dsl/jbang/core/commands/tui/SemanticMetadataCompletionTest.java
index 868dcb61940c..16521710bc41 100644
---
a/dsl/camel-jbang/camel-jbang-plugin-tui/src/test/java/org/apache/camel/dsl/jbang/core/commands/tui/SemanticMetadataCompletionTest.java
+++
b/dsl/camel-jbang/camel-jbang-plugin-tui/src/test/java/org/apache/camel/dsl/jbang/core/commands/tui/SemanticMetadataCompletionTest.java
@@ -33,8 +33,8 @@ import org.apache.camel.util.json.JsonObject;
import org.junit.jupiter.api.Test;
import org.junit.jupiter.api.io.TempDir;
+import static org.apache.camel.dsl.jbang.core.commands.tui.TuiAwait.await;
import static org.assertj.core.api.Assertions.assertThat;
-import static org.awaitility.Awaitility.await;
class SemanticMetadataCompletionTest {
@Test
diff --git
a/dsl/camel-jbang/camel-jbang-plugin-tui/src/test/java/org/apache/camel/dsl/jbang/core/commands/tui/SemanticMonitoringViewTest.java
b/dsl/camel-jbang/camel-jbang-plugin-tui/src/test/java/org/apache/camel/dsl/jbang/core/commands/tui/SemanticMonitoringViewTest.java
index 1781f96a59d3..6a88fda9de04 100644
---
a/dsl/camel-jbang/camel-jbang-plugin-tui/src/test/java/org/apache/camel/dsl/jbang/core/commands/tui/SemanticMonitoringViewTest.java
+++
b/dsl/camel-jbang/camel-jbang-plugin-tui/src/test/java/org/apache/camel/dsl/jbang/core/commands/tui/SemanticMonitoringViewTest.java
@@ -34,8 +34,8 @@ import org.apache.camel.util.json.JsonObject;
import org.apache.camel.util.json.Jsoner;
import org.junit.jupiter.api.Test;
+import static org.apache.camel.dsl.jbang.core.commands.tui.TuiAwait.await;
import static org.assertj.core.api.Assertions.assertThat;
-import static org.awaitility.Awaitility.await;
class SemanticMonitoringViewTest {
@Test
diff --git
a/dsl/camel-jbang/camel-jbang-plugin-tui/src/test/java/org/apache/camel/dsl/jbang/core/commands/tui/SemanticTabTest.java
b/dsl/camel-jbang/camel-jbang-plugin-tui/src/test/java/org/apache/camel/dsl/jbang/core/commands/tui/SemanticTabTest.java
index f6d03b2d3fe2..9bf8081dd487 100644
---
a/dsl/camel-jbang/camel-jbang-plugin-tui/src/test/java/org/apache/camel/dsl/jbang/core/commands/tui/SemanticTabTest.java
+++
b/dsl/camel-jbang/camel-jbang-plugin-tui/src/test/java/org/apache/camel/dsl/jbang/core/commands/tui/SemanticTabTest.java
@@ -43,8 +43,8 @@ import org.junit.jupiter.params.ParameterizedTest;
import org.junit.jupiter.params.provider.CsvSource;
import org.junit.jupiter.params.provider.ValueSource;
+import static org.apache.camel.dsl.jbang.core.commands.tui.TuiAwait.await;
import static org.assertj.core.api.Assertions.assertThat;
-import static org.awaitility.Awaitility.await;
import static org.mockito.Mockito.mock;
import static org.mockito.Mockito.verifyNoInteractions;
import static org.mockito.Mockito.when;
diff --git
a/dsl/camel-jbang/camel-jbang-plugin-tui/src/test/java/org/apache/camel/dsl/jbang/core/commands/tui/ShellPanelLifecycleTest.java
b/dsl/camel-jbang/camel-jbang-plugin-tui/src/test/java/org/apache/camel/dsl/jbang/core/commands/tui/ShellPanelLifecycleTest.java
index f247006a3854..d0cab9995c94 100644
---
a/dsl/camel-jbang/camel-jbang-plugin-tui/src/test/java/org/apache/camel/dsl/jbang/core/commands/tui/ShellPanelLifecycleTest.java
+++
b/dsl/camel-jbang/camel-jbang-plugin-tui/src/test/java/org/apache/camel/dsl/jbang/core/commands/tui/ShellPanelLifecycleTest.java
@@ -30,7 +30,7 @@ import org.junit.jupiter.api.BeforeEach;
import org.junit.jupiter.api.Test;
import org.junit.jupiter.api.parallel.ResourceLock;
-import static org.awaitility.Awaitility.await;
+import static org.apache.camel.dsl.jbang.core.commands.tui.TuiAwait.await;
import static org.junit.jupiter.api.Assertions.assertNotSame;
import static org.junit.jupiter.api.Assertions.assertSame;
import static org.junit.jupiter.api.Assertions.assertTrue;
diff --git
a/dsl/camel-jbang/camel-jbang-plugin-tui/src/test/java/org/apache/camel/dsl/jbang/core/commands/tui/ToolConfirmPopupTest.java
b/dsl/camel-jbang/camel-jbang-plugin-tui/src/test/java/org/apache/camel/dsl/jbang/core/commands/tui/ToolConfirmPopupTest.java
index a14ec921ba3b..2408b3e0a6ea 100644
---
a/dsl/camel-jbang/camel-jbang-plugin-tui/src/test/java/org/apache/camel/dsl/jbang/core/commands/tui/ToolConfirmPopupTest.java
+++
b/dsl/camel-jbang/camel-jbang-plugin-tui/src/test/java/org/apache/camel/dsl/jbang/core/commands/tui/ToolConfirmPopupTest.java
@@ -30,8 +30,8 @@ import dev.tamboui.tui.event.KeyModifiers;
import org.apache.camel.dsl.jbang.core.commands.ai.ToolConfirms;
import org.junit.jupiter.api.Test;
+import static org.apache.camel.dsl.jbang.core.commands.tui.TuiAwait.await;
import static org.assertj.core.api.Assertions.assertThat;
-import static org.awaitility.Awaitility.await;
import static org.junit.jupiter.api.Assertions.assertEquals;
import static org.junit.jupiter.api.Assertions.assertFalse;
import static org.junit.jupiter.api.Assertions.assertTrue;
diff --git
a/dsl/camel-jbang/camel-jbang-plugin-tui/src/test/java/org/apache/camel/dsl/jbang/core/commands/tui/TuiAwait.java
b/dsl/camel-jbang/camel-jbang-plugin-tui/src/test/java/org/apache/camel/dsl/jbang/core/commands/tui/TuiAwait.java
new file mode 100644
index 000000000000..6b897f0ea543
--- /dev/null
+++
b/dsl/camel-jbang/camel-jbang-plugin-tui/src/test/java/org/apache/camel/dsl/jbang/core/commands/tui/TuiAwait.java
@@ -0,0 +1,45 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements. See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package org.apache.camel.dsl.jbang.core.commands.tui;
+
+import java.time.Duration;
+
+import org.awaitility.Awaitility;
+import org.awaitility.core.ConditionFactory;
+
+/**
+ * Awaitility for the tests of the TUI: the condition is checked at once, then
every 10 ms. Awaitility waits 100 ms
+ * before its first check by default, even when the condition already holds,
and some test classes await dozens of times
+ * (CAMEL-25966).
+ */
+final class TuiAwait {
+
+ private static final Duration POLL_INTERVAL = Duration.ofMillis(10);
+
+ private TuiAwait() {
+ }
+
+ /** As {@link Awaitility#await()}, checking the condition at once and then
every 10 ms. */
+ static ConditionFactory await() {
+ return
Awaitility.await().pollDelay(Duration.ZERO).pollInterval(POLL_INTERVAL);
+ }
+
+ /** As {@link Awaitility#await(String)}, checking the condition at once
and then every 10 ms. */
+ static ConditionFactory await(String alias) {
+ return
Awaitility.await(alias).pollDelay(Duration.ZERO).pollInterval(POLL_INTERVAL);
+ }
+}
diff --git
a/dsl/camel-jbang/camel-jbang-plugin-tui/src/test/java/org/apache/camel/dsl/jbang/core/commands/tui/WebTerminalTest.java
b/dsl/camel-jbang/camel-jbang-plugin-tui/src/test/java/org/apache/camel/dsl/jbang/core/commands/tui/WebTerminalTest.java
index 014c0775324b..4245d71dc514 100644
---
a/dsl/camel-jbang/camel-jbang-plugin-tui/src/test/java/org/apache/camel/dsl/jbang/core/commands/tui/WebTerminalTest.java
+++
b/dsl/camel-jbang/camel-jbang-plugin-tui/src/test/java/org/apache/camel/dsl/jbang/core/commands/tui/WebTerminalTest.java
@@ -41,8 +41,8 @@ import org.jline.terminal.Terminal;
import org.junit.jupiter.api.AfterEach;
import org.junit.jupiter.api.Test;
+import static org.apache.camel.dsl.jbang.core.commands.tui.TuiAwait.await;
import static org.assertj.core.api.Assertions.assertThat;
-import static org.awaitility.Awaitility.await;
/**
* A browser session of {@code camel tui --web} runs on a JLine terminal fed
from the WebSocket (CAMEL-25581).