Skip to content
This repository was archived by the owner on Jun 17, 2026. It is now read-only.

Commit 830cef3

Browse files
Copilotedburns
andauthored
Add tests for exit-plan-mode and auto-mode-switch handler APIs
Co-authored-by: edburns <75821+edburns@users.noreply.github.com>
1 parent b01df0a commit 830cef3

2 files changed

Lines changed: 167 additions & 0 deletions

File tree

src/test/java/com/github/copilot/sdk/ConfigCloneTest.java

Lines changed: 31 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -26,6 +26,9 @@
2626
import com.github.copilot.sdk.json.SystemMessageConfig;
2727
import com.github.copilot.sdk.json.TelemetryConfig;
2828

29+
import com.github.copilot.sdk.json.AutoModeSwitchResponse;
30+
import com.github.copilot.sdk.json.ExitPlanModeResult;
31+
2932
class ConfigCloneTest {
3033

3134
@Test
@@ -375,4 +378,32 @@ void copilotClientOptionsSessionIdleTimeoutCloned() {
375378

376379
assertEquals(600, cloned.getSessionIdleTimeoutSeconds());
377380
}
381+
382+
@Test
383+
void sessionConfigModeSwitchHandlersCloned() {
384+
SessionConfig original = new SessionConfig();
385+
original.setOnExitPlanMode(
386+
(request, invocation) -> CompletableFuture.completedFuture(new ExitPlanModeResult()));
387+
original.setOnAutoModeSwitch(
388+
(request, invocation) -> CompletableFuture.completedFuture(AutoModeSwitchResponse.NO));
389+
390+
SessionConfig cloned = original.clone();
391+
392+
assertSame(original.getOnExitPlanMode(), cloned.getOnExitPlanMode());
393+
assertSame(original.getOnAutoModeSwitch(), cloned.getOnAutoModeSwitch());
394+
}
395+
396+
@Test
397+
void resumeSessionConfigModeSwitchHandlersCloned() {
398+
ResumeSessionConfig original = new ResumeSessionConfig();
399+
original.setOnExitPlanMode(
400+
(request, invocation) -> CompletableFuture.completedFuture(new ExitPlanModeResult()));
401+
original.setOnAutoModeSwitch(
402+
(request, invocation) -> CompletableFuture.completedFuture(AutoModeSwitchResponse.NO));
403+
404+
ResumeSessionConfig cloned = original.clone();
405+
406+
assertSame(original.getOnExitPlanMode(), cloned.getOnExitPlanMode());
407+
assertSame(original.getOnAutoModeSwitch(), cloned.getOnAutoModeSwitch());
408+
}
378409
}

src/test/java/com/github/copilot/sdk/SessionRequestBuilderTest.java

Lines changed: 136 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -12,11 +12,15 @@
1212

1313
import org.junit.jupiter.api.Test;
1414

15+
import com.github.copilot.sdk.json.AutoModeSwitchHandler;
16+
import com.github.copilot.sdk.json.AutoModeSwitchResponse;
1517
import com.github.copilot.sdk.json.CreateSessionRequest;
1618
import com.github.copilot.sdk.json.DefaultAgentConfig;
1719
import com.github.copilot.sdk.json.ElicitationHandler;
1820
import com.github.copilot.sdk.json.ElicitationResult;
1921
import com.github.copilot.sdk.json.ElicitationResultAction;
22+
import com.github.copilot.sdk.json.ExitPlanModeHandler;
23+
import com.github.copilot.sdk.json.ExitPlanModeResult;
2024
import com.github.copilot.sdk.json.ResumeSessionConfig;
2125
import com.github.copilot.sdk.json.ResumeSessionRequest;
2226
import com.github.copilot.sdk.json.SessionConfig;
@@ -535,4 +539,136 @@ void testResumeRequestOmitsEnableSessionTelemetryWhenNull() throws Exception {
535539
var json = mapper.writeValueAsString(request);
536540
assertFalse(json.contains("enableSessionTelemetry"), "enableSessionTelemetry should be omitted when null");
537541
}
542+
543+
@Test
544+
void buildCreateRequest_setsRequestExitPlanModeWhenHandlerPresent() {
545+
var config = new SessionConfig().setOnExitPlanMode(
546+
(request, invocation) -> CompletableFuture.completedFuture(new ExitPlanModeResult()));
547+
548+
CreateSessionRequest result = SessionRequestBuilder.buildCreateRequest(config, "sess-epm");
549+
550+
assertEquals(true, result.getRequestExitPlanMode());
551+
}
552+
553+
@Test
554+
void buildCreateRequest_omitsRequestExitPlanModeWhenNoHandler() {
555+
var config = new SessionConfig();
556+
557+
CreateSessionRequest result = SessionRequestBuilder.buildCreateRequest(config, "sess-epm-none");
558+
559+
assertNull(result.getRequestExitPlanMode());
560+
}
561+
562+
@Test
563+
void buildCreateRequest_setsRequestAutoModeSwitchWhenHandlerPresent() {
564+
var config = new SessionConfig().setOnAutoModeSwitch(
565+
(request, invocation) -> CompletableFuture.completedFuture(AutoModeSwitchResponse.NO));
566+
567+
CreateSessionRequest result = SessionRequestBuilder.buildCreateRequest(config, "sess-ams");
568+
569+
assertEquals(true, result.getRequestAutoModeSwitch());
570+
}
571+
572+
@Test
573+
void buildCreateRequest_omitsRequestAutoModeSwitchWhenNoHandler() {
574+
var config = new SessionConfig();
575+
576+
CreateSessionRequest result = SessionRequestBuilder.buildCreateRequest(config, "sess-ams-none");
577+
578+
assertNull(result.getRequestAutoModeSwitch());
579+
}
580+
581+
@Test
582+
void buildResumeRequest_setsRequestExitPlanModeWhenHandlerPresent() {
583+
var config = new ResumeSessionConfig().setOnExitPlanMode(
584+
(request, invocation) -> CompletableFuture.completedFuture(new ExitPlanModeResult()));
585+
586+
ResumeSessionRequest result = SessionRequestBuilder.buildResumeRequest("sess-epm", config);
587+
588+
assertEquals(true, result.getRequestExitPlanMode());
589+
}
590+
591+
@Test
592+
void buildResumeRequest_setsRequestAutoModeSwitchWhenHandlerPresent() {
593+
var config = new ResumeSessionConfig().setOnAutoModeSwitch(
594+
(request, invocation) -> CompletableFuture.completedFuture(AutoModeSwitchResponse.YES));
595+
596+
ResumeSessionRequest result = SessionRequestBuilder.buildResumeRequest("sess-ams", config);
597+
598+
assertEquals(true, result.getRequestAutoModeSwitch());
599+
}
600+
601+
@Test
602+
void configureSessionWithExitPlanModeHandler_registersHandler() {
603+
CopilotSession session = new CopilotSession("session-1", null);
604+
605+
ExitPlanModeHandler handler = (request, invocation) -> CompletableFuture
606+
.completedFuture(new ExitPlanModeResult());
607+
var config = new SessionConfig().setOnExitPlanMode(handler);
608+
609+
SessionRequestBuilder.configureSession(session, config);
610+
}
611+
612+
@Test
613+
void configureSessionWithAutoModeSwitchHandler_registersHandler() {
614+
CopilotSession session = new CopilotSession("session-1", null);
615+
616+
AutoModeSwitchHandler handler = (request, invocation) -> CompletableFuture
617+
.completedFuture(AutoModeSwitchResponse.NO);
618+
var config = new SessionConfig().setOnAutoModeSwitch(handler);
619+
620+
SessionRequestBuilder.configureSession(session, config);
621+
}
622+
623+
@Test
624+
void configureResumedSessionWithExitPlanModeHandler_registersHandler() {
625+
CopilotSession session = new CopilotSession("session-1", null);
626+
627+
ExitPlanModeHandler handler = (request, invocation) -> CompletableFuture
628+
.completedFuture(new ExitPlanModeResult());
629+
var config = new ResumeSessionConfig().setOnExitPlanMode(handler);
630+
631+
SessionRequestBuilder.configureSession(session, config);
632+
}
633+
634+
@Test
635+
void configureResumedSessionWithAutoModeSwitchHandler_registersHandler() {
636+
CopilotSession session = new CopilotSession("session-1", null);
637+
638+
AutoModeSwitchHandler handler = (request, invocation) -> CompletableFuture
639+
.completedFuture(AutoModeSwitchResponse.YES);
640+
var config = new ResumeSessionConfig().setOnAutoModeSwitch(handler);
641+
642+
SessionRequestBuilder.configureSession(session, config);
643+
}
644+
645+
@Test
646+
void buildCreateRequest_serializesExitPlanModeAndAutoModeSwitchFlags() throws Exception {
647+
var config = new SessionConfig()
648+
.setOnExitPlanMode((request, invocation) -> CompletableFuture.completedFuture(new ExitPlanModeResult()))
649+
.setOnAutoModeSwitch(
650+
(request, invocation) -> CompletableFuture.completedFuture(AutoModeSwitchResponse.NO));
651+
652+
CreateSessionRequest result = SessionRequestBuilder.buildCreateRequest(config, "sess-flags");
653+
654+
var mapper = JsonRpcClient.getObjectMapper();
655+
var json = mapper.writeValueAsString(result);
656+
assertTrue(json.contains("\"requestExitPlanMode\":true"));
657+
assertTrue(json.contains("\"requestAutoModeSwitch\":true"));
658+
}
659+
660+
@Test
661+
void buildResumeRequest_serializesExitPlanModeAndAutoModeSwitchFlags() throws Exception {
662+
var config = new ResumeSessionConfig()
663+
.setOnExitPlanMode((request, invocation) -> CompletableFuture.completedFuture(new ExitPlanModeResult()))
664+
.setOnAutoModeSwitch(
665+
(request, invocation) -> CompletableFuture.completedFuture(AutoModeSwitchResponse.YES));
666+
667+
ResumeSessionRequest result = SessionRequestBuilder.buildResumeRequest("sess-flags", config);
668+
669+
var mapper = JsonRpcClient.getObjectMapper();
670+
var json = mapper.writeValueAsString(result);
671+
assertTrue(json.contains("\"requestExitPlanMode\":true"));
672+
assertTrue(json.contains("\"requestAutoModeSwitch\":true"));
673+
}
538674
}

0 commit comments

Comments
 (0)