Initial public release of Warp.
Repo-Sync-Origin: warpdotdev/warp-internal@12af1d983b
This commit is contained in:
@@ -0,0 +1,118 @@
|
||||
use std::fs;
|
||||
use std::path::Path;
|
||||
|
||||
use super::migrate_config_dir_via_symlinks;
|
||||
|
||||
fn is_symlink_to(link: &Path, expected_target: &Path) -> bool {
|
||||
match fs::read_link(link) {
|
||||
Ok(target) => target == expected_target,
|
||||
Err(_) => false,
|
||||
}
|
||||
}
|
||||
|
||||
#[test]
|
||||
fn creates_symlinks_for_top_level_entries() {
|
||||
let tmp = tempfile::tempdir().unwrap();
|
||||
let old_dir = tmp.path().join(".warp");
|
||||
let new_dir = tmp.path().join(".warp-preview");
|
||||
|
||||
fs::create_dir(&old_dir).unwrap();
|
||||
fs::write(old_dir.join("keybindings.yaml"), "bindings").unwrap();
|
||||
fs::create_dir(old_dir.join("themes")).unwrap();
|
||||
fs::write(old_dir.join("themes").join("dark.yaml"), "theme").unwrap();
|
||||
|
||||
migrate_config_dir_via_symlinks(&old_dir, &new_dir);
|
||||
|
||||
assert!(new_dir.is_dir());
|
||||
assert!(is_symlink_to(
|
||||
&new_dir.join("keybindings.yaml"),
|
||||
&old_dir.join("keybindings.yaml"),
|
||||
));
|
||||
assert!(is_symlink_to(
|
||||
&new_dir.join("themes"),
|
||||
&old_dir.join("themes"),
|
||||
));
|
||||
// Content is reachable through the symlink.
|
||||
assert_eq!(
|
||||
fs::read_to_string(new_dir.join("keybindings.yaml")).unwrap(),
|
||||
"bindings",
|
||||
);
|
||||
}
|
||||
|
||||
#[test]
|
||||
fn skips_when_new_dir_already_exists() {
|
||||
let tmp = tempfile::tempdir().unwrap();
|
||||
let old_dir = tmp.path().join(".warp");
|
||||
let new_dir = tmp.path().join(".warp-preview");
|
||||
|
||||
fs::create_dir(&old_dir).unwrap();
|
||||
fs::write(old_dir.join("keybindings.yaml"), "bindings").unwrap();
|
||||
fs::create_dir(&new_dir).unwrap();
|
||||
|
||||
migrate_config_dir_via_symlinks(&old_dir, &new_dir);
|
||||
|
||||
// new_dir should remain empty — no symlinks created.
|
||||
assert_eq!(fs::read_dir(&new_dir).unwrap().count(), 0);
|
||||
}
|
||||
|
||||
#[test]
|
||||
fn skips_when_old_dir_does_not_exist() {
|
||||
let tmp = tempfile::tempdir().unwrap();
|
||||
let old_dir = tmp.path().join(".warp");
|
||||
let new_dir = tmp.path().join(".warp-preview");
|
||||
|
||||
// old_dir intentionally not created.
|
||||
migrate_config_dir_via_symlinks(&old_dir, &new_dir);
|
||||
|
||||
assert!(!new_dir.exists());
|
||||
}
|
||||
|
||||
#[test]
|
||||
fn skips_ds_store_and_dot_underscore_files() {
|
||||
let tmp = tempfile::tempdir().unwrap();
|
||||
let old_dir = tmp.path().join(".warp");
|
||||
let new_dir = tmp.path().join(".warp-preview");
|
||||
|
||||
fs::create_dir(&old_dir).unwrap();
|
||||
fs::write(old_dir.join(".DS_Store"), "metadata").unwrap();
|
||||
fs::write(old_dir.join("._somefile"), "resource fork").unwrap();
|
||||
fs::write(old_dir.join("keybindings.yaml"), "bindings").unwrap();
|
||||
|
||||
migrate_config_dir_via_symlinks(&old_dir, &new_dir);
|
||||
|
||||
assert!(!new_dir.join(".DS_Store").exists());
|
||||
assert!(!new_dir.join("._somefile").exists());
|
||||
assert!(new_dir.join("keybindings.yaml").exists());
|
||||
}
|
||||
|
||||
#[test]
|
||||
fn skips_excluded_files() {
|
||||
let tmp = tempfile::tempdir().unwrap();
|
||||
let old_dir = tmp.path().join(".warp");
|
||||
let new_dir = tmp.path().join(".warp-preview");
|
||||
|
||||
fs::create_dir(&old_dir).unwrap();
|
||||
fs::write(old_dir.join("settings.toml"), "[settings]").unwrap();
|
||||
fs::write(old_dir.join("keybindings.yaml"), "bindings").unwrap();
|
||||
|
||||
migrate_config_dir_via_symlinks(&old_dir, &new_dir);
|
||||
|
||||
assert!(!new_dir.join("settings.toml").exists());
|
||||
assert!(new_dir.join("keybindings.yaml").exists());
|
||||
}
|
||||
|
||||
#[test]
|
||||
fn is_idempotent() {
|
||||
let tmp = tempfile::tempdir().unwrap();
|
||||
let old_dir = tmp.path().join(".warp");
|
||||
let new_dir = tmp.path().join(".warp-preview");
|
||||
|
||||
fs::create_dir(&old_dir).unwrap();
|
||||
fs::write(old_dir.join("keybindings.yaml"), "bindings").unwrap();
|
||||
|
||||
migrate_config_dir_via_symlinks(&old_dir, &new_dir);
|
||||
// Second call should be a no-op (new_dir already exists).
|
||||
migrate_config_dir_via_symlinks(&old_dir, &new_dir);
|
||||
|
||||
assert_eq!(fs::read_dir(&new_dir).unwrap().count(), 1);
|
||||
}
|
||||
Reference in New Issue
Block a user