From 8f44b74b331d4977c89cc928791905840f29d7f6 Mon Sep 17 00:00:00 2001 From: Jon Parise Date: Tue, 23 Dec 2025 12:22:29 -0500 Subject: [PATCH] shell-integration: add failure regression test Add a unit test to prevent regressions in our failure state. For example, we always want to set GHOSTTY_SHELL_FEATURES, even if automatic shell integration fails, because it's also used for manual shell integration (e.g. #5048). --- src/termio/shell_integration.zig | 26 ++++++++++++++++++++++++-- 1 file changed, 24 insertions(+), 2 deletions(-) diff --git a/src/termio/shell_integration.zig b/src/termio/shell_integration.zig index 3a541dcae..dba4a8f32 100644 --- a/src/termio/shell_integration.zig +++ b/src/termio/shell_integration.zig @@ -70,7 +70,6 @@ pub fn setup( exe, ); - // Setup our feature env vars try setupFeatures(env, features); return result; @@ -168,6 +167,29 @@ test "force shell" { } } +test "shell integration failure" { + const testing = std.testing; + + var arena = ArenaAllocator.init(testing.allocator); + defer arena.deinit(); + const alloc = arena.allocator(); + + var env = EnvMap.init(alloc); + defer env.deinit(); + + const result = try setup( + alloc, + "/nonexistent", + .{ .shell = "sh" }, + &env, + null, + .{ .cursor = true, .title = false, .path = false }, + ); + + try testing.expect(result == null); + try testing.expectEqualStrings("cursor", env.get("GHOSTTY_SHELL_FEATURES").?); +} + /// Set up the shell integration features environment variable. pub fn setupFeatures( env: *EnvMap, @@ -234,7 +256,7 @@ test "setup features" { var env = EnvMap.init(alloc); defer env.deinit(); - try setupFeatures(&env, .{ .cursor = false, .sudo = false, .title = false, .@"ssh-env" = false, .@"ssh-terminfo" = false, .path = false }); + try setupFeatures(&env, std.mem.zeroes(config.ShellIntegrationFeatures)); try testing.expect(env.get("GHOSTTY_SHELL_FEATURES") == null); }