logiguard fork: GPUI xdg-activation keyboard-focus serial fix
Some checks failed
Update All Top Ranking Issues / update_top_ranking_issues (push) Has been cancelled
Triage Project Sync (#84) / Sync triage project (push) Has been cancelled
release_nightly / notify_on_failure (push) Has been cancelled
release_nightly / check_style (push) Has been cancelled
release_nightly / run_tests_windows (push) Has been cancelled
release_nightly / clippy_windows (push) Has been cancelled
release_nightly / bundle_linux_aarch64 (push) Has been cancelled
release_nightly / bundle_linux_x86_64 (push) Has been cancelled
release_nightly / bundle_mac_aarch64 (push) Has been cancelled
release_nightly / bundle_mac_x86_64 (push) Has been cancelled
release_nightly / bundle_windows_aarch64 (push) Has been cancelled
release_nightly / bundle_windows_x86_64 (push) Has been cancelled
release_nightly / build_nix_linux_x86_64 (push) Has been cancelled
release_nightly / build_nix_mac_aarch64 (push) Has been cancelled
release_nightly / update_nightly_tag (push) Has been cancelled
Hotfix Review Monitor / check-hotfix-reviews (push) Has been cancelled
Stale PR Review Reminder / check-stale-prs (push) Has been cancelled
Update Weekly Top Ranking Issues / update_top_ranking_issues (push) Has been cancelled
Bump collab-staging Tag / update-collab-staging-tag (push) Has been cancelled
compliance_check / scheduled_compliance_check (push) Has been cancelled
Some checks failed
Update All Top Ranking Issues / update_top_ranking_issues (push) Has been cancelled
Triage Project Sync (#84) / Sync triage project (push) Has been cancelled
release_nightly / notify_on_failure (push) Has been cancelled
release_nightly / check_style (push) Has been cancelled
release_nightly / run_tests_windows (push) Has been cancelled
release_nightly / clippy_windows (push) Has been cancelled
release_nightly / bundle_linux_aarch64 (push) Has been cancelled
release_nightly / bundle_linux_x86_64 (push) Has been cancelled
release_nightly / bundle_mac_aarch64 (push) Has been cancelled
release_nightly / bundle_mac_x86_64 (push) Has been cancelled
release_nightly / bundle_windows_aarch64 (push) Has been cancelled
release_nightly / bundle_windows_x86_64 (push) Has been cancelled
release_nightly / build_nix_linux_x86_64 (push) Has been cancelled
release_nightly / build_nix_mac_aarch64 (push) Has been cancelled
release_nightly / update_nightly_tag (push) Has been cancelled
Hotfix Review Monitor / check-hotfix-reviews (push) Has been cancelled
Stale PR Review Reminder / check-stale-prs (push) Has been cancelled
Update Weekly Top Ranking Issues / update_top_ranking_issues (push) Has been cancelled
Bump collab-staging Tag / update-collab-staging-tag (push) Has been cancelled
compliance_check / scheduled_compliance_check (push) Has been cancelled
Single-commit orphan branch: full zed-industries/zed @ 8c74db0 source tree with a 3-file patch applied (no upstream history). Patch (crates/gpui_linux/src/linux/wayland/): - serial.rs: add SerialKind::KeyboardEnter - client.rs: store wl_keyboard.enter serial; add latest_serial_of() - window.rs: activate() uses keyboard-enter serial (Mutter focus gate) Mutter honors window activation only when the token carries the keyboard- focus serial from wl_keyboard.enter; GPUI used a stale mouse-press serial. See docs/tray-window-focus-wayland.md in logiguard. Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
This commit is contained in:
151
crates/project/tests/integration/search_history.rs
Normal file
151
crates/project/tests/integration/search_history.rs
Normal file
@@ -0,0 +1,151 @@
|
||||
use project::search_history::{QueryInsertionBehavior, SearchHistory, SearchHistoryCursor};
|
||||
|
||||
#[test]
|
||||
fn test_add() {
|
||||
const MAX_HISTORY_LEN: usize = 20;
|
||||
let mut search_history = SearchHistory::new(
|
||||
Some(MAX_HISTORY_LEN),
|
||||
QueryInsertionBehavior::ReplacePreviousIfContains,
|
||||
);
|
||||
let mut cursor = SearchHistoryCursor::default();
|
||||
|
||||
assert_eq!(
|
||||
search_history.current(&cursor),
|
||||
None,
|
||||
"No current selection should be set for the default search history"
|
||||
);
|
||||
|
||||
search_history.add(&mut cursor, "rust".to_string());
|
||||
assert_eq!(
|
||||
search_history.current(&cursor),
|
||||
Some("rust"),
|
||||
"Newly added item should be selected"
|
||||
);
|
||||
|
||||
// check if duplicates are not added
|
||||
search_history.add(&mut cursor, "rust".to_string());
|
||||
assert_eq!(search_history.len(), 1, "Should not add a duplicate");
|
||||
assert_eq!(search_history.current(&cursor), Some("rust"));
|
||||
|
||||
// check if new string containing the previous string replaces it
|
||||
search_history.add(&mut cursor, "rustlang".to_string());
|
||||
assert_eq!(
|
||||
search_history.len(),
|
||||
1,
|
||||
"Should replace previous item if it's a substring"
|
||||
);
|
||||
assert_eq!(search_history.current(&cursor), Some("rustlang"));
|
||||
|
||||
// add item when it equals to current item if it's not the last one
|
||||
search_history.add(&mut cursor, "php".to_string());
|
||||
search_history.previous(&mut cursor, "");
|
||||
assert_eq!(search_history.current(&cursor), Some("rustlang"));
|
||||
search_history.add(&mut cursor, "rustlang".to_string());
|
||||
assert_eq!(search_history.len(), 3, "Should add item");
|
||||
assert_eq!(search_history.current(&cursor), Some("rustlang"));
|
||||
|
||||
// push enough items to test SEARCH_HISTORY_LIMIT
|
||||
for i in 0..MAX_HISTORY_LEN * 2 {
|
||||
search_history.add(&mut cursor, format!("item{i}"));
|
||||
}
|
||||
assert!(search_history.len() <= MAX_HISTORY_LEN);
|
||||
}
|
||||
|
||||
#[test]
|
||||
fn test_next_and_previous() {
|
||||
let mut search_history = SearchHistory::new(None, QueryInsertionBehavior::AlwaysInsert);
|
||||
let mut cursor = SearchHistoryCursor::default();
|
||||
|
||||
assert_eq!(
|
||||
search_history.next(&mut cursor),
|
||||
None,
|
||||
"Default search history should not have a next item"
|
||||
);
|
||||
|
||||
search_history.add(&mut cursor, "Rust".to_string());
|
||||
assert_eq!(search_history.next(&mut cursor), None);
|
||||
search_history.add(&mut cursor, "JavaScript".to_string());
|
||||
assert_eq!(search_history.next(&mut cursor), None);
|
||||
search_history.add(&mut cursor, "TypeScript".to_string());
|
||||
assert_eq!(search_history.next(&mut cursor), None);
|
||||
|
||||
assert_eq!(search_history.current(&cursor), Some("TypeScript"));
|
||||
|
||||
assert_eq!(search_history.previous(&mut cursor, ""), Some("JavaScript"));
|
||||
assert_eq!(search_history.current(&cursor), Some("JavaScript"));
|
||||
|
||||
assert_eq!(search_history.previous(&mut cursor, ""), Some("Rust"));
|
||||
assert_eq!(search_history.current(&cursor), Some("Rust"));
|
||||
|
||||
assert_eq!(search_history.previous(&mut cursor, ""), None);
|
||||
assert_eq!(search_history.current(&cursor), Some("Rust"));
|
||||
|
||||
assert_eq!(search_history.next(&mut cursor), Some("JavaScript"));
|
||||
assert_eq!(search_history.current(&cursor), Some("JavaScript"));
|
||||
|
||||
assert_eq!(search_history.next(&mut cursor), Some("TypeScript"));
|
||||
assert_eq!(search_history.current(&cursor), Some("TypeScript"));
|
||||
|
||||
assert_eq!(search_history.next(&mut cursor), None);
|
||||
assert_eq!(search_history.current(&cursor), Some("TypeScript"));
|
||||
}
|
||||
|
||||
#[test]
|
||||
fn test_reset_selection() {
|
||||
let mut search_history = SearchHistory::new(None, QueryInsertionBehavior::AlwaysInsert);
|
||||
let mut cursor = SearchHistoryCursor::default();
|
||||
|
||||
search_history.add(&mut cursor, "Rust".to_string());
|
||||
search_history.add(&mut cursor, "JavaScript".to_string());
|
||||
search_history.add(&mut cursor, "TypeScript".to_string());
|
||||
|
||||
assert_eq!(search_history.current(&cursor), Some("TypeScript"));
|
||||
cursor.reset();
|
||||
assert_eq!(search_history.current(&cursor), None);
|
||||
assert_eq!(
|
||||
search_history.previous(&mut cursor, ""),
|
||||
Some("TypeScript"),
|
||||
"Should start from the end after reset on previous item query"
|
||||
);
|
||||
|
||||
search_history.previous(&mut cursor, "");
|
||||
assert_eq!(search_history.current(&cursor), Some("JavaScript"));
|
||||
search_history.previous(&mut cursor, "");
|
||||
assert_eq!(search_history.current(&cursor), Some("Rust"));
|
||||
|
||||
cursor.reset();
|
||||
assert_eq!(search_history.current(&cursor), None);
|
||||
}
|
||||
|
||||
#[test]
|
||||
fn test_multiple_cursors() {
|
||||
let mut search_history = SearchHistory::new(None, QueryInsertionBehavior::AlwaysInsert);
|
||||
let mut cursor1 = SearchHistoryCursor::default();
|
||||
let mut cursor2 = SearchHistoryCursor::default();
|
||||
|
||||
search_history.add(&mut cursor1, "Rust".to_string());
|
||||
search_history.add(&mut cursor1, "JavaScript".to_string());
|
||||
search_history.add(&mut cursor1, "TypeScript".to_string());
|
||||
|
||||
search_history.add(&mut cursor2, "Python".to_string());
|
||||
search_history.add(&mut cursor2, "Java".to_string());
|
||||
search_history.add(&mut cursor2, "C++".to_string());
|
||||
|
||||
assert_eq!(search_history.current(&cursor1), Some("TypeScript"));
|
||||
assert_eq!(search_history.current(&cursor2), Some("C++"));
|
||||
|
||||
assert_eq!(
|
||||
search_history.previous(&mut cursor1, ""),
|
||||
Some("JavaScript")
|
||||
);
|
||||
assert_eq!(search_history.previous(&mut cursor2, ""), Some("Java"));
|
||||
|
||||
assert_eq!(search_history.next(&mut cursor1), Some("TypeScript"));
|
||||
assert_eq!(search_history.next(&mut cursor1), Some("Python"));
|
||||
|
||||
cursor1.reset();
|
||||
cursor2.reset();
|
||||
|
||||
assert_eq!(search_history.current(&cursor1), None);
|
||||
assert_eq!(search_history.current(&cursor2), None);
|
||||
}
|
||||
Reference in New Issue
Block a user