本地终端运行的程序可以写路径或命令,带参数;输入框右端的下拉列出装了的常用 shell (zsh、bash、sh、fish、nu、pwsh,从 /etc/shells、PATH 和 Homebrew 目录找),旁边 「选择文件…」用系统的文件选择框。留空是自动检测,新开和重新启动的本地终端生效。 只写一个 shell 时和默认一样按登录 shell 启动,带参数或不是 shell 的照写执行。 Windows 的默认 shell 原来是 cmd.exe,现在先用 PowerShell 7,其次 Windows PowerShell, 都没有才用 cmd.exe。 工作区改为每次打开、重启本地终端时向 LocalTerminalTransportProvider 要 factory, UI 测试注入的 FixedLocalTerminalTransportProvider 记下每次要的 shell。 Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
59 lines
1.9 KiB
Rust
59 lines
1.9 KiB
Rust
//! The credential tests' workspace and steps.
|
|
|
|
use super::*;
|
|
|
|
/// A workspace over `store`, its remote terminals recorded by `remote` and
|
|
/// its connection test answered by `tester`. Dialogs do not slide, so their
|
|
/// fields stay where they were found.
|
|
pub fn open_workspace_with_credentials(
|
|
cx: &mut TestAppContext,
|
|
store: HostStore,
|
|
remote: Arc<RecordingRemoteProvider>,
|
|
tester: Arc<FakeConnectionTester>,
|
|
) -> (WindowHandle<Root>, Entity<Workspace>) {
|
|
init_app(cx);
|
|
cx.update(|cx| cx.set_reduce_motion(true));
|
|
let mut workspace = None;
|
|
let handle = cx.open_window(size(px(1280.), px(800.)), |window, cx| {
|
|
let store = cx.new(|_| store);
|
|
let view = cx.new(|cx| {
|
|
Workspace::new_with_services(
|
|
store,
|
|
cx.new(|_| settings_store()),
|
|
remote,
|
|
fake_local_terminals(),
|
|
Arc::new(FakeSftpProvider::default()),
|
|
Arc::new(FakeLocalDirectory::default()),
|
|
tester,
|
|
Arc::new(FakeForwardProvider::default()),
|
|
window,
|
|
cx,
|
|
)
|
|
});
|
|
workspace = Some(view.clone());
|
|
Root::new(view, window, cx)
|
|
});
|
|
cx.run_until_parked();
|
|
(handle, workspace.expect("workspace created"))
|
|
}
|
|
|
|
/// Show the credential list and wait for it to be up.
|
|
pub async fn show_credentials(cx: &mut TestAppContext, handle: WindowHandle<Root>) {
|
|
in_frame(cx, handle, |window, cx| {
|
|
window.click("show-credentials", cx)
|
|
});
|
|
cx.wait_for(handle.into(), Duration::from_secs(2), |window, _| {
|
|
window.try_find("credential-search").is_some()
|
|
})
|
|
.await;
|
|
}
|
|
|
|
/// Wait for the open dialog to close.
|
|
pub async fn wait_for_dialog_to_close(cx: &mut TestAppContext, handle: WindowHandle<Root>) {
|
|
cx.wait_for(handle.into(), Duration::from_secs(2), |window, _| {
|
|
window.try_find("commit").is_none()
|
|
})
|
|
.await;
|
|
cx.run_until_parked();
|
|
}
|