mirror of
https://github.com/zed-industries/zed.git
synced 2024-09-20 02:47:34 +03:00
test_clipboard
This commit is contained in:
parent
0a1765b01f
commit
be509a5ce0
@ -12,7 +12,7 @@ use futures::StreamExt;
|
||||
use gpui::{
|
||||
div,
|
||||
serde_json::{self, json},
|
||||
Div, Flatten, TestAppContext, VisualTestContext, WindowBounds, WindowOptions,
|
||||
Div, Flatten, Platform, TestAppContext, VisualTestContext, WindowBounds, WindowOptions,
|
||||
};
|
||||
use indoc::indoc;
|
||||
use language::{
|
||||
@ -3154,88 +3154,92 @@ fn test_move_line_up_down_with_blocks(cx: &mut TestAppContext) {
|
||||
// });
|
||||
// }
|
||||
|
||||
//todo!(clipboard)
|
||||
// #[gpui::test]
|
||||
// async fn test_clipboard(cx: &mut gpui::TestAppContext) {
|
||||
// init_test(cx, |_| {});
|
||||
#[gpui::test]
|
||||
async fn test_clipboard(cx: &mut gpui::TestAppContext) {
|
||||
init_test(cx, |_| {});
|
||||
|
||||
// let mut cx = EditorTestContext::new(cx).await;
|
||||
let mut cx = EditorTestContext::new(cx).await;
|
||||
|
||||
// cx.set_state("«one✅ ˇ»two «three ˇ»four «five ˇ»six ");
|
||||
// cx.update_editor(|e, cx| e.cut(&Cut, cx));
|
||||
// cx.assert_editor_state("ˇtwo ˇfour ˇsix ");
|
||||
cx.set_state("«one✅ ˇ»two «three ˇ»four «five ˇ»six ");
|
||||
cx.update_editor(|e, cx| e.cut(&Cut, cx));
|
||||
cx.assert_editor_state("ˇtwo ˇfour ˇsix ");
|
||||
|
||||
// // Paste with three cursors. Each cursor pastes one slice of the clipboard text.
|
||||
// cx.set_state("two ˇfour ˇsix ˇ");
|
||||
// cx.update_editor(|e, cx| e.paste(&Paste, cx));
|
||||
// cx.assert_editor_state("two one✅ ˇfour three ˇsix five ˇ");
|
||||
// Paste with three cursors. Each cursor pastes one slice of the clipboard text.
|
||||
cx.set_state("two ˇfour ˇsix ˇ");
|
||||
cx.update_editor(|e, cx| e.paste(&Paste, cx));
|
||||
cx.assert_editor_state("two one✅ ˇfour three ˇsix five ˇ");
|
||||
|
||||
// // Paste again but with only two cursors. Since the number of cursors doesn't
|
||||
// // match the number of slices in the clipboard, the entire clipboard text
|
||||
// // is pasted at each cursor.
|
||||
// cx.set_state("ˇtwo one✅ four three six five ˇ");
|
||||
// cx.update_editor(|e, cx| {
|
||||
// e.handle_input("( ", cx);
|
||||
// e.paste(&Paste, cx);
|
||||
// e.handle_input(") ", cx);
|
||||
// });
|
||||
// cx.assert_editor_state(
|
||||
// &([
|
||||
// "( one✅ ",
|
||||
// "three ",
|
||||
// "five ) ˇtwo one✅ four three six five ( one✅ ",
|
||||
// "three ",
|
||||
// "five ) ˇ",
|
||||
// ]
|
||||
// .join("\n")),
|
||||
// );
|
||||
// Paste again but with only two cursors. Since the number of cursors doesn't
|
||||
// match the number of slices in the clipboard, the entire clipboard text
|
||||
// is pasted at each cursor.
|
||||
cx.set_state("ˇtwo one✅ four three six five ˇ");
|
||||
cx.update_editor(|e, cx| {
|
||||
e.handle_input("( ", cx);
|
||||
e.paste(&Paste, cx);
|
||||
e.handle_input(") ", cx);
|
||||
});
|
||||
cx.assert_editor_state(
|
||||
&([
|
||||
"( one✅ ",
|
||||
"three ",
|
||||
"five ) ˇtwo one✅ four three six five ( one✅ ",
|
||||
"three ",
|
||||
"five ) ˇ",
|
||||
]
|
||||
.join("\n")),
|
||||
);
|
||||
|
||||
// // Cut with three selections, one of which is full-line.
|
||||
// cx.set_state(indoc! {"
|
||||
// 1«2ˇ»3
|
||||
// 4ˇ567
|
||||
// «8ˇ»9"});
|
||||
// cx.update_editor(|e, cx| e.cut(&Cut, cx));
|
||||
// cx.assert_editor_state(indoc! {"
|
||||
// 1ˇ3
|
||||
// ˇ9"});
|
||||
// Cut with three selections, one of which is full-line.
|
||||
cx.set_state(indoc! {"
|
||||
1«2ˇ»3
|
||||
4ˇ567
|
||||
«8ˇ»9"});
|
||||
cx.update_editor(|e, cx| e.cut(&Cut, cx));
|
||||
cx.assert_editor_state(indoc! {"
|
||||
1ˇ3
|
||||
ˇ9"});
|
||||
|
||||
// // Paste with three selections, noticing how the copied selection that was full-line
|
||||
// // gets inserted before the second cursor.
|
||||
// cx.set_state(indoc! {"
|
||||
// 1ˇ3
|
||||
// 9ˇ
|
||||
// «oˇ»ne"});
|
||||
// cx.update_editor(|e, cx| e.paste(&Paste, cx));
|
||||
// cx.assert_editor_state(indoc! {"
|
||||
// 12ˇ3
|
||||
// 4567
|
||||
// 9ˇ
|
||||
// 8ˇne"});
|
||||
// Paste with three selections, noticing how the copied selection that was full-line
|
||||
// gets inserted before the second cursor.
|
||||
cx.set_state(indoc! {"
|
||||
1ˇ3
|
||||
9ˇ
|
||||
«oˇ»ne"});
|
||||
cx.update_editor(|e, cx| e.paste(&Paste, cx));
|
||||
cx.assert_editor_state(indoc! {"
|
||||
12ˇ3
|
||||
4567
|
||||
9ˇ
|
||||
8ˇne"});
|
||||
|
||||
// // Copy with a single cursor only, which writes the whole line into the clipboard.
|
||||
// cx.set_state(indoc! {"
|
||||
// The quick brown
|
||||
// fox juˇmps over
|
||||
// the lazy dog"});
|
||||
// cx.update_editor(|e, cx| e.copy(&Copy, cx));
|
||||
// cx.cx.assert_clipboard_content(Some("fox jumps over\n"));
|
||||
// Copy with a single cursor only, which writes the whole line into the clipboard.
|
||||
cx.set_state(indoc! {"
|
||||
The quick brown
|
||||
fox juˇmps over
|
||||
the lazy dog"});
|
||||
cx.update_editor(|e, cx| e.copy(&Copy, cx));
|
||||
assert_eq!(
|
||||
cx.test_platform
|
||||
.read_from_clipboard()
|
||||
.map(|item| item.text().to_owned()),
|
||||
Some("fox jumps over\n".to_owned())
|
||||
);
|
||||
|
||||
// // Paste with three selections, noticing how the copied full-line selection is inserted
|
||||
// // before the empty selections but replaces the selection that is non-empty.
|
||||
// cx.set_state(indoc! {"
|
||||
// Tˇhe quick brown
|
||||
// «foˇ»x jumps over
|
||||
// tˇhe lazy dog"});
|
||||
// cx.update_editor(|e, cx| e.paste(&Paste, cx));
|
||||
// cx.assert_editor_state(indoc! {"
|
||||
// fox jumps over
|
||||
// Tˇhe quick brown
|
||||
// fox jumps over
|
||||
// ˇx jumps over
|
||||
// fox jumps over
|
||||
// tˇhe lazy dog"});
|
||||
// }
|
||||
// Paste with three selections, noticing how the copied full-line selection is inserted
|
||||
// before the empty selections but replaces the selection that is non-empty.
|
||||
cx.set_state(indoc! {"
|
||||
Tˇhe quick brown
|
||||
«foˇ»x jumps over
|
||||
tˇhe lazy dog"});
|
||||
cx.update_editor(|e, cx| e.paste(&Paste, cx));
|
||||
cx.assert_editor_state(indoc! {"
|
||||
fox jumps over
|
||||
Tˇhe quick brown
|
||||
fox jumps over
|
||||
ˇx jumps over
|
||||
fox jumps over
|
||||
tˇhe lazy dog"});
|
||||
}
|
||||
|
||||
#[gpui::test]
|
||||
async fn test_paste_multiline(cx: &mut gpui::TestAppContext) {
|
||||
|
@ -1,6 +1,6 @@
|
||||
use crate::{
|
||||
AnyWindowHandle, BackgroundExecutor, CursorStyle, DisplayId, ForegroundExecutor, Platform,
|
||||
PlatformDisplay, PlatformTextSystem, TestDisplay, TestWindow, WindowOptions,
|
||||
AnyWindowHandle, BackgroundExecutor, ClipboardItem, CursorStyle, DisplayId, ForegroundExecutor,
|
||||
Platform, PlatformDisplay, PlatformTextSystem, TestDisplay, TestWindow, WindowOptions,
|
||||
};
|
||||
use anyhow::{anyhow, Result};
|
||||
use collections::VecDeque;
|
||||
@ -20,6 +20,7 @@ pub struct TestPlatform {
|
||||
active_window: Arc<Mutex<Option<AnyWindowHandle>>>,
|
||||
active_display: Rc<dyn PlatformDisplay>,
|
||||
active_cursor: Mutex<CursorStyle>,
|
||||
current_clipboard_item: Mutex<Option<ClipboardItem>>,
|
||||
pub(crate) prompts: RefCell<TestPrompts>,
|
||||
weak: Weak<Self>,
|
||||
}
|
||||
@ -39,6 +40,7 @@ impl TestPlatform {
|
||||
active_cursor: Default::default(),
|
||||
active_display: Rc::new(TestDisplay::new()),
|
||||
active_window: Default::default(),
|
||||
current_clipboard_item: Mutex::new(None),
|
||||
weak: weak.clone(),
|
||||
})
|
||||
}
|
||||
@ -236,12 +238,12 @@ impl Platform for TestPlatform {
|
||||
true
|
||||
}
|
||||
|
||||
fn write_to_clipboard(&self, _item: crate::ClipboardItem) {
|
||||
unimplemented!()
|
||||
fn write_to_clipboard(&self, item: crate::ClipboardItem) {
|
||||
*self.current_clipboard_item.lock() = Some(item);
|
||||
}
|
||||
|
||||
fn read_from_clipboard(&self) -> Option<crate::ClipboardItem> {
|
||||
unimplemented!()
|
||||
self.current_clipboard_item.lock().clone()
|
||||
}
|
||||
|
||||
fn write_credentials(&self, _url: &str, _username: &str, _password: &[u8]) -> Result<()> {
|
||||
|
Loading…
Reference in New Issue
Block a user