- 仍是一个测试程序(tests/ui/main.rs,cargo test --test ui),每个文件单独成测试程序会再链接一遍 GPUI - 按功能分 11 个模块:host_dialog、host_tree、connection、terminal、workspace、settings、 sftp、transfer、forward、credential、update - 两个以上模块共用的夹具和假实现放进 support/:mod.rs 是公共的 use、种子 id 和通用助手, 其余按终端、SFTP、端口转发、测试连接、凭据分文件;只有一个模块用的留在那个模块里 - 纯搬移,测试逻辑不变:147 个测试名称与搬移前一致,全部通过 - CLAUDE.md 写明模块划分和新测试该放哪里,AGENTS.md、README 改路径
59 lines
2.0 KiB
Rust
59 lines
2.0 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>) {
|
|
cx.update(shellrs::init);
|
|
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(|_| SettingsStore::in_memory()),
|
|
remote,
|
|
Arc::new(FakeTerminalFactory::default()),
|
|
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();
|
|
}
|