windows: Fix tests on Windows (#22616)
Release Notes: - N/A --------- Co-authored-by: Mikayla <mikayla.c.maki@gmail.com>
This commit is contained in:
parent
c252b5db16
commit
74c4dbd237
56 changed files with 1540 additions and 856 deletions
|
@ -1106,8 +1106,13 @@ impl ProjectPanel {
|
|||
let worktree_id = edit_state.worktree_id;
|
||||
let is_new_entry = edit_state.is_new_entry();
|
||||
let filename = self.filename_editor.read(cx).text(cx);
|
||||
edit_state.is_dir = edit_state.is_dir
|
||||
|| (edit_state.is_new_entry() && filename.ends_with(std::path::MAIN_SEPARATOR));
|
||||
#[cfg(not(target_os = "windows"))]
|
||||
let filename_indicates_dir = filename.ends_with("/");
|
||||
// On Windows, path separator could be either `/` or `\`.
|
||||
#[cfg(target_os = "windows")]
|
||||
let filename_indicates_dir = filename.ends_with("/") || filename.ends_with("\\");
|
||||
edit_state.is_dir =
|
||||
edit_state.is_dir || (edit_state.is_new_entry() && filename_indicates_dir);
|
||||
let is_dir = edit_state.is_dir;
|
||||
let worktree = self.project.read(cx).worktree_for_id(worktree_id, cx)?;
|
||||
let entry = worktree.read(cx).entry_for_id(edit_state.entry_id)?.clone();
|
||||
|
@ -4793,6 +4798,7 @@ mod tests {
|
|||
use serde_json::json;
|
||||
use settings::SettingsStore;
|
||||
use std::path::{Path, PathBuf};
|
||||
use util::{path, separator};
|
||||
use workspace::{
|
||||
item::{Item, ProjectItem},
|
||||
register_project_item, AppState,
|
||||
|
@ -4894,7 +4900,7 @@ mod tests {
|
|||
|
||||
let fs = FakeFs::new(cx.executor().clone());
|
||||
fs.insert_tree(
|
||||
"/src",
|
||||
path!("/src"),
|
||||
json!({
|
||||
"test": {
|
||||
"first.rs": "// First Rust file",
|
||||
|
@ -4905,7 +4911,7 @@ mod tests {
|
|||
)
|
||||
.await;
|
||||
|
||||
let project = Project::test(fs.clone(), ["/src".as_ref()], cx).await;
|
||||
let project = Project::test(fs.clone(), [path!("/src").as_ref()], cx).await;
|
||||
let workspace =
|
||||
cx.add_window(|window, cx| Workspace::test_new(project.clone(), window, cx));
|
||||
let cx = &mut VisualTestContext::from_window(*workspace, cx);
|
||||
|
@ -5066,7 +5072,7 @@ mod tests {
|
|||
|
||||
let fs = FakeFs::new(cx.executor().clone());
|
||||
fs.insert_tree(
|
||||
"/root1",
|
||||
path!("/root1"),
|
||||
json!({
|
||||
"dir_1": {
|
||||
"nested_dir_1": {
|
||||
|
@ -5088,7 +5094,7 @@ mod tests {
|
|||
)
|
||||
.await;
|
||||
fs.insert_tree(
|
||||
"/root2",
|
||||
path!("/root2"),
|
||||
json!({
|
||||
"dir_2": {
|
||||
"file_1.java": "// File contents",
|
||||
|
@ -5097,7 +5103,12 @@ mod tests {
|
|||
)
|
||||
.await;
|
||||
|
||||
let project = Project::test(fs.clone(), ["/root1".as_ref(), "/root2".as_ref()], cx).await;
|
||||
let project = Project::test(
|
||||
fs.clone(),
|
||||
[path!("/root1").as_ref(), path!("/root2").as_ref()],
|
||||
cx,
|
||||
)
|
||||
.await;
|
||||
let workspace =
|
||||
cx.add_window(|window, cx| Workspace::test_new(project.clone(), window, cx));
|
||||
let cx = &mut VisualTestContext::from_window(*workspace, cx);
|
||||
|
@ -5115,10 +5126,10 @@ mod tests {
|
|||
assert_eq!(
|
||||
visible_entries_as_strings(&panel, 0..10, cx),
|
||||
&[
|
||||
"v root1",
|
||||
" > dir_1/nested_dir_1/nested_dir_2/nested_dir_3",
|
||||
"v root2",
|
||||
" > dir_2",
|
||||
separator!("v root1"),
|
||||
separator!(" > dir_1/nested_dir_1/nested_dir_2/nested_dir_3"),
|
||||
separator!("v root2"),
|
||||
separator!(" > dir_2"),
|
||||
]
|
||||
);
|
||||
|
||||
|
@ -5130,14 +5141,14 @@ mod tests {
|
|||
assert_eq!(
|
||||
visible_entries_as_strings(&panel, 0..10, cx),
|
||||
&[
|
||||
"v root1",
|
||||
" v dir_1/nested_dir_1/nested_dir_2/nested_dir_3 <== selected",
|
||||
" > nested_dir_4/nested_dir_5",
|
||||
" file_a.java",
|
||||
" file_b.java",
|
||||
" file_c.java",
|
||||
"v root2",
|
||||
" > dir_2",
|
||||
separator!("v root1"),
|
||||
separator!(" v dir_1/nested_dir_1/nested_dir_2/nested_dir_3 <== selected"),
|
||||
separator!(" > nested_dir_4/nested_dir_5"),
|
||||
separator!(" file_a.java"),
|
||||
separator!(" file_b.java"),
|
||||
separator!(" file_c.java"),
|
||||
separator!("v root2"),
|
||||
separator!(" > dir_2"),
|
||||
]
|
||||
);
|
||||
|
||||
|
@ -5149,31 +5160,31 @@ mod tests {
|
|||
assert_eq!(
|
||||
visible_entries_as_strings(&panel, 0..10, cx),
|
||||
&[
|
||||
"v root1",
|
||||
" v dir_1/nested_dir_1/nested_dir_2/nested_dir_3",
|
||||
" v nested_dir_4/nested_dir_5 <== selected",
|
||||
" file_d.java",
|
||||
" file_a.java",
|
||||
" file_b.java",
|
||||
" file_c.java",
|
||||
"v root2",
|
||||
" > dir_2",
|
||||
separator!("v root1"),
|
||||
separator!(" v dir_1/nested_dir_1/nested_dir_2/nested_dir_3"),
|
||||
separator!(" v nested_dir_4/nested_dir_5 <== selected"),
|
||||
separator!(" file_d.java"),
|
||||
separator!(" file_a.java"),
|
||||
separator!(" file_b.java"),
|
||||
separator!(" file_c.java"),
|
||||
separator!("v root2"),
|
||||
separator!(" > dir_2"),
|
||||
]
|
||||
);
|
||||
toggle_expand_dir(&panel, "root2/dir_2", cx);
|
||||
assert_eq!(
|
||||
visible_entries_as_strings(&panel, 0..10, cx),
|
||||
&[
|
||||
"v root1",
|
||||
" v dir_1/nested_dir_1/nested_dir_2/nested_dir_3",
|
||||
" v nested_dir_4/nested_dir_5",
|
||||
" file_d.java",
|
||||
" file_a.java",
|
||||
" file_b.java",
|
||||
" file_c.java",
|
||||
"v root2",
|
||||
" v dir_2 <== selected",
|
||||
" file_1.java",
|
||||
separator!("v root1"),
|
||||
separator!(" v dir_1/nested_dir_1/nested_dir_2/nested_dir_3"),
|
||||
separator!(" v nested_dir_4/nested_dir_5"),
|
||||
separator!(" file_d.java"),
|
||||
separator!(" file_a.java"),
|
||||
separator!(" file_b.java"),
|
||||
separator!(" file_c.java"),
|
||||
separator!("v root2"),
|
||||
separator!(" v dir_2 <== selected"),
|
||||
separator!(" file_1.java"),
|
||||
]
|
||||
);
|
||||
}
|
||||
|
@ -5682,7 +5693,7 @@ mod tests {
|
|||
|
||||
let fs = FakeFs::new(cx.executor().clone());
|
||||
fs.insert_tree(
|
||||
"/root1",
|
||||
path!("/root1"),
|
||||
json!({
|
||||
".dockerignore": "",
|
||||
".git": {
|
||||
|
@ -5692,7 +5703,7 @@ mod tests {
|
|||
)
|
||||
.await;
|
||||
|
||||
let project = Project::test(fs.clone(), ["/root1".as_ref()], cx).await;
|
||||
let project = Project::test(fs.clone(), [path!("/root1").as_ref()], cx).await;
|
||||
let workspace =
|
||||
cx.add_window(|window, cx| Workspace::test_new(project.clone(), window, cx));
|
||||
let cx = &mut VisualTestContext::from_window(*workspace, cx);
|
||||
|
@ -5727,9 +5738,10 @@ mod tests {
|
|||
);
|
||||
|
||||
let confirm = panel.update_in(cx, |panel, window, cx| {
|
||||
// If we want to create a subdirectory, there should be no prefix slash.
|
||||
panel
|
||||
.filename_editor
|
||||
.update(cx, |editor, cx| editor.set_text("/new_dir/", window, cx));
|
||||
.update(cx, |editor, cx| editor.set_text("new_dir/", window, cx));
|
||||
panel.confirm_edit(window, cx).unwrap()
|
||||
});
|
||||
|
||||
|
@ -5738,14 +5750,14 @@ mod tests {
|
|||
&[
|
||||
"v root1",
|
||||
" > .git",
|
||||
" [PROCESSING: '/new_dir/'] <== selected",
|
||||
" [PROCESSING: 'new_dir/'] <== selected",
|
||||
" .dockerignore",
|
||||
]
|
||||
);
|
||||
|
||||
confirm.await.unwrap();
|
||||
assert_eq!(
|
||||
visible_entries_as_strings(&panel, 0..13, cx),
|
||||
visible_entries_as_strings(&panel, 0..10, cx),
|
||||
&[
|
||||
"v root1",
|
||||
" > .git",
|
||||
|
@ -5753,6 +5765,54 @@ mod tests {
|
|||
" .dockerignore",
|
||||
]
|
||||
);
|
||||
|
||||
// Test filename with whitespace
|
||||
select_path(&panel, "root1", cx);
|
||||
panel.update_in(cx, |panel, window, cx| panel.new_file(&NewFile, window, cx));
|
||||
let confirm = panel.update_in(cx, |panel, window, cx| {
|
||||
// If we want to create a subdirectory, there should be no prefix slash.
|
||||
panel
|
||||
.filename_editor
|
||||
.update(cx, |editor, cx| editor.set_text("new dir 2/", window, cx));
|
||||
panel.confirm_edit(window, cx).unwrap()
|
||||
});
|
||||
confirm.await.unwrap();
|
||||
assert_eq!(
|
||||
visible_entries_as_strings(&panel, 0..10, cx),
|
||||
&[
|
||||
"v root1",
|
||||
" > .git",
|
||||
" v new dir 2 <== selected",
|
||||
" v new_dir",
|
||||
" .dockerignore",
|
||||
]
|
||||
);
|
||||
|
||||
// Test filename ends with "\"
|
||||
#[cfg(target_os = "windows")]
|
||||
{
|
||||
select_path(&panel, "root1", cx);
|
||||
panel.update_in(cx, |panel, window, cx| panel.new_file(&NewFile, window, cx));
|
||||
let confirm = panel.update_in(cx, |panel, window, cx| {
|
||||
// If we want to create a subdirectory, there should be no prefix slash.
|
||||
panel
|
||||
.filename_editor
|
||||
.update(cx, |editor, cx| editor.set_text("new_dir_3\\", window, cx));
|
||||
panel.confirm_edit(window, cx).unwrap()
|
||||
});
|
||||
confirm.await.unwrap();
|
||||
assert_eq!(
|
||||
visible_entries_as_strings(&panel, 0..10, cx),
|
||||
&[
|
||||
"v root1",
|
||||
" > .git",
|
||||
" v new dir 2",
|
||||
" v new_dir",
|
||||
" v new_dir_3 <== selected",
|
||||
" .dockerignore",
|
||||
]
|
||||
);
|
||||
}
|
||||
}
|
||||
|
||||
#[gpui::test]
|
||||
|
@ -6409,7 +6469,7 @@ mod tests {
|
|||
|
||||
let fs = FakeFs::new(cx.executor().clone());
|
||||
fs.insert_tree(
|
||||
"/src",
|
||||
path!("/src"),
|
||||
json!({
|
||||
"test": {
|
||||
"first.rs": "// First Rust file",
|
||||
|
@ -6420,7 +6480,7 @@ mod tests {
|
|||
)
|
||||
.await;
|
||||
|
||||
let project = Project::test(fs.clone(), ["/src".as_ref()], cx).await;
|
||||
let project = Project::test(fs.clone(), [path!("/src").as_ref()], cx).await;
|
||||
let workspace =
|
||||
cx.add_window(|window, cx| Workspace::test_new(project.clone(), window, cx));
|
||||
let cx = &mut VisualTestContext::from_window(*workspace, cx);
|
||||
|
@ -8545,7 +8605,7 @@ mod tests {
|
|||
|
||||
let fs = FakeFs::new(cx.executor().clone());
|
||||
fs.insert_tree(
|
||||
"/root",
|
||||
path!("/root"),
|
||||
json!({
|
||||
".gitignore": "**/ignored_dir\n**/ignored_nested",
|
||||
"dir1": {
|
||||
|
@ -8573,7 +8633,7 @@ mod tests {
|
|||
)
|
||||
.await;
|
||||
|
||||
let project = Project::test(fs.clone(), ["/root".as_ref()], cx).await;
|
||||
let project = Project::test(fs.clone(), [path!("/root").as_ref()], cx).await;
|
||||
let workspace =
|
||||
cx.add_window(|window, cx| Workspace::test_new(project.clone(), window, cx));
|
||||
let cx = &mut VisualTestContext::from_window(*workspace, cx);
|
||||
|
@ -8602,12 +8662,12 @@ mod tests {
|
|||
assert_eq!(
|
||||
visible_entries_as_strings(&panel, 0..20, cx),
|
||||
&[
|
||||
"v root",
|
||||
" v dir1 <== selected",
|
||||
" > empty1/empty2/empty3",
|
||||
" > ignored_dir",
|
||||
" > subdir1",
|
||||
" .gitignore",
|
||||
separator!("v root"),
|
||||
separator!(" v dir1 <== selected"),
|
||||
separator!(" > empty1/empty2/empty3"),
|
||||
separator!(" > ignored_dir"),
|
||||
separator!(" > subdir1"),
|
||||
separator!(" .gitignore"),
|
||||
],
|
||||
"Should show first level with auto-folded dirs and ignored dir visible"
|
||||
);
|
||||
|
@ -8624,18 +8684,18 @@ mod tests {
|
|||
assert_eq!(
|
||||
visible_entries_as_strings(&panel, 0..20, cx),
|
||||
&[
|
||||
"v root",
|
||||
" v dir1 <== selected",
|
||||
" v empty1",
|
||||
" v empty2",
|
||||
" v empty3",
|
||||
" file.txt",
|
||||
" > ignored_dir",
|
||||
" v subdir1",
|
||||
" > ignored_nested",
|
||||
" file1.txt",
|
||||
" file2.txt",
|
||||
" .gitignore",
|
||||
separator!("v root"),
|
||||
separator!(" v dir1 <== selected"),
|
||||
separator!(" v empty1"),
|
||||
separator!(" v empty2"),
|
||||
separator!(" v empty3"),
|
||||
separator!(" file.txt"),
|
||||
separator!(" > ignored_dir"),
|
||||
separator!(" v subdir1"),
|
||||
separator!(" > ignored_nested"),
|
||||
separator!(" file1.txt"),
|
||||
separator!(" file2.txt"),
|
||||
separator!(" .gitignore"),
|
||||
],
|
||||
"After expand_all with auto-fold: should not expand ignored_dir, should expand folded dirs, and should not expand ignored_nested"
|
||||
);
|
||||
|
@ -8660,12 +8720,12 @@ mod tests {
|
|||
assert_eq!(
|
||||
visible_entries_as_strings(&panel, 0..20, cx),
|
||||
&[
|
||||
"v root",
|
||||
" v dir1 <== selected",
|
||||
" > empty1",
|
||||
" > ignored_dir",
|
||||
" > subdir1",
|
||||
" .gitignore",
|
||||
separator!("v root"),
|
||||
separator!(" v dir1 <== selected"),
|
||||
separator!(" > empty1"),
|
||||
separator!(" > ignored_dir"),
|
||||
separator!(" > subdir1"),
|
||||
separator!(" .gitignore"),
|
||||
],
|
||||
"With auto-fold disabled: should show all directories separately"
|
||||
);
|
||||
|
@ -8682,18 +8742,18 @@ mod tests {
|
|||
assert_eq!(
|
||||
visible_entries_as_strings(&panel, 0..20, cx),
|
||||
&[
|
||||
"v root",
|
||||
" v dir1 <== selected",
|
||||
" v empty1",
|
||||
" v empty2",
|
||||
" v empty3",
|
||||
" file.txt",
|
||||
" > ignored_dir",
|
||||
" v subdir1",
|
||||
" > ignored_nested",
|
||||
" file1.txt",
|
||||
" file2.txt",
|
||||
" .gitignore",
|
||||
separator!("v root"),
|
||||
separator!(" v dir1 <== selected"),
|
||||
separator!(" v empty1"),
|
||||
separator!(" v empty2"),
|
||||
separator!(" v empty3"),
|
||||
separator!(" file.txt"),
|
||||
separator!(" > ignored_dir"),
|
||||
separator!(" v subdir1"),
|
||||
separator!(" > ignored_nested"),
|
||||
separator!(" file1.txt"),
|
||||
separator!(" file2.txt"),
|
||||
separator!(" .gitignore"),
|
||||
],
|
||||
"After expand_all without auto-fold: should expand all dirs normally, \
|
||||
expand ignored_dir itself but not its subdirs, and not expand ignored_nested"
|
||||
|
@ -8712,20 +8772,20 @@ mod tests {
|
|||
assert_eq!(
|
||||
visible_entries_as_strings(&panel, 0..20, cx),
|
||||
&[
|
||||
"v root",
|
||||
" v dir1 <== selected",
|
||||
" v empty1",
|
||||
" v empty2",
|
||||
" v empty3",
|
||||
" file.txt",
|
||||
" v ignored_dir",
|
||||
" v subdir",
|
||||
" deep_file.txt",
|
||||
" v subdir1",
|
||||
" > ignored_nested",
|
||||
" file1.txt",
|
||||
" file2.txt",
|
||||
" .gitignore",
|
||||
separator!("v root"),
|
||||
separator!(" v dir1 <== selected"),
|
||||
separator!(" v empty1"),
|
||||
separator!(" v empty2"),
|
||||
separator!(" v empty3"),
|
||||
separator!(" file.txt"),
|
||||
separator!(" v ignored_dir"),
|
||||
separator!(" v subdir"),
|
||||
separator!(" deep_file.txt"),
|
||||
separator!(" v subdir1"),
|
||||
separator!(" > ignored_nested"),
|
||||
separator!(" file1.txt"),
|
||||
separator!(" file2.txt"),
|
||||
separator!(" .gitignore"),
|
||||
],
|
||||
"After expand_all on ignored_dir: should expand all contents of the ignored directory"
|
||||
);
|
||||
|
@ -8737,7 +8797,7 @@ mod tests {
|
|||
|
||||
let fs = FakeFs::new(cx.executor().clone());
|
||||
fs.insert_tree(
|
||||
"/root",
|
||||
path!("/root"),
|
||||
json!({
|
||||
"dir1": {
|
||||
"subdir1": {
|
||||
|
@ -8759,7 +8819,7 @@ mod tests {
|
|||
)
|
||||
.await;
|
||||
|
||||
let project = Project::test(fs.clone(), ["/root".as_ref()], cx).await;
|
||||
let project = Project::test(fs.clone(), [path!("/root").as_ref()], cx).await;
|
||||
let workspace =
|
||||
cx.add_window(|window, cx| Workspace::test_new(project.clone(), window, cx));
|
||||
let cx = &mut VisualTestContext::from_window(*workspace, cx);
|
||||
|
@ -8776,15 +8836,15 @@ mod tests {
|
|||
assert_eq!(
|
||||
visible_entries_as_strings(&panel, 0..20, cx),
|
||||
&[
|
||||
"v root",
|
||||
" v dir1",
|
||||
" v subdir1",
|
||||
" v nested1",
|
||||
" file1.txt",
|
||||
" file2.txt",
|
||||
" v subdir2 <== selected",
|
||||
" file4.txt",
|
||||
" > dir2",
|
||||
separator!("v root"),
|
||||
separator!(" v dir1"),
|
||||
separator!(" v subdir1"),
|
||||
separator!(" v nested1"),
|
||||
separator!(" file1.txt"),
|
||||
separator!(" file2.txt"),
|
||||
separator!(" v subdir2 <== selected"),
|
||||
separator!(" file4.txt"),
|
||||
separator!(" > dir2"),
|
||||
],
|
||||
"Initial state with everything expanded"
|
||||
);
|
||||
|
@ -8826,13 +8886,13 @@ mod tests {
|
|||
assert_eq!(
|
||||
visible_entries_as_strings(&panel, 0..20, cx),
|
||||
&[
|
||||
"v root",
|
||||
" v dir1",
|
||||
" v subdir1/nested1 <== selected",
|
||||
" file1.txt",
|
||||
" file2.txt",
|
||||
" > subdir2",
|
||||
" > dir2/single_file",
|
||||
separator!("v root"),
|
||||
separator!(" v dir1"),
|
||||
separator!(" v subdir1/nested1 <== selected"),
|
||||
separator!(" file1.txt"),
|
||||
separator!(" file2.txt"),
|
||||
separator!(" > subdir2"),
|
||||
separator!(" > dir2/single_file"),
|
||||
],
|
||||
"Initial state with some dirs expanded"
|
||||
);
|
||||
|
@ -8849,11 +8909,11 @@ mod tests {
|
|||
assert_eq!(
|
||||
visible_entries_as_strings(&panel, 0..20, cx),
|
||||
&[
|
||||
"v root",
|
||||
" v dir1 <== selected",
|
||||
" > subdir1/nested1",
|
||||
" > subdir2",
|
||||
" > dir2/single_file",
|
||||
separator!("v root"),
|
||||
separator!(" v dir1 <== selected"),
|
||||
separator!(" > subdir1/nested1"),
|
||||
separator!(" > subdir2"),
|
||||
separator!(" > dir2/single_file"),
|
||||
],
|
||||
"Subdirs should be collapsed and folded with auto-fold enabled"
|
||||
);
|
||||
|
@ -8881,14 +8941,14 @@ mod tests {
|
|||
assert_eq!(
|
||||
visible_entries_as_strings(&panel, 0..20, cx),
|
||||
&[
|
||||
"v root",
|
||||
" v dir1",
|
||||
" v subdir1",
|
||||
" v nested1 <== selected",
|
||||
" file1.txt",
|
||||
" file2.txt",
|
||||
" > subdir2",
|
||||
" > dir2",
|
||||
separator!("v root"),
|
||||
separator!(" v dir1"),
|
||||
separator!(" v subdir1"),
|
||||
separator!(" v nested1 <== selected"),
|
||||
separator!(" file1.txt"),
|
||||
separator!(" file2.txt"),
|
||||
separator!(" > subdir2"),
|
||||
separator!(" > dir2"),
|
||||
],
|
||||
"Initial state with some dirs expanded and auto-fold disabled"
|
||||
);
|
||||
|
@ -8905,11 +8965,11 @@ mod tests {
|
|||
assert_eq!(
|
||||
visible_entries_as_strings(&panel, 0..20, cx),
|
||||
&[
|
||||
"v root",
|
||||
" v dir1 <== selected",
|
||||
" > subdir1",
|
||||
" > subdir2",
|
||||
" > dir2",
|
||||
separator!("v root"),
|
||||
separator!(" v dir1 <== selected"),
|
||||
separator!(" > subdir1"),
|
||||
separator!(" > subdir2"),
|
||||
separator!(" > dir2"),
|
||||
],
|
||||
"Subdirs should be collapsed but not folded with auto-fold disabled"
|
||||
);
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue