Initial public release of Warp.

Repo-Sync-Origin: warpdotdev/warp-internal@12af1d983b
This commit is contained in:
David Stern
2026-04-28 08:43:33 -05:00
commit 0dbd3d567a
4982 changed files with 1431549 additions and 0 deletions
+573
View File
@@ -0,0 +1,573 @@
use super::*;
// 0000000000111111111122222222223333333333444444444455555555556666666666
// 0123456789012345678901234567890123456789012345678901234567890123456789
const LINE: &str = "impl<'a, T: TextBuffer + ?Sized + 'a> Iterator for WordBoundariesVim";
/// The behavior for pressing "w".
#[test]
fn test_word_forward_heads() {
let mut iter1 = vim_word_iterator_from_offset(
0,
LINE,
Direction::Forward,
WordBound::Start,
WordType::Default,
)
.unwrap();
assert_eq!(iter1.next(), Some(4.into()));
assert_eq!(iter1.next(), Some(6.into()));
assert_eq!(iter1.next(), Some(7.into()));
assert_eq!(iter1.next(), Some(9.into()));
assert_eq!(iter1.next(), Some(10.into()));
assert_eq!(iter1.next(), Some(12.into()));
assert_eq!(iter1.next(), Some(23.into()));
assert_eq!(iter1.next(), Some(25.into()));
assert_eq!(iter1.next(), Some(26.into()));
assert_eq!(iter1.next(), Some(32.into()));
assert_eq!(iter1.next(), Some(34.into()));
assert_eq!(iter1.next(), Some(35.into()));
assert_eq!(iter1.next(), Some(36.into()));
assert_eq!(iter1.next(), Some(40.into()));
assert_eq!(iter1.next(), Some(49.into()));
assert_eq!(iter1.next(), Some(53.into()));
assert_eq!(iter1.next(), Some(70.into()));
assert_eq!(iter1.next(), None);
let mut iter2 = vim_word_iterator_from_offset(
15,
LINE,
Direction::Forward,
WordBound::Start,
WordType::Default,
)
.unwrap();
assert_eq!(iter2.next(), Some(23.into()));
let mut iter3 = vim_word_iterator_from_offset(
43,
LINE,
Direction::Forward,
WordBound::Start,
WordType::Default,
)
.unwrap();
assert_eq!(iter3.next(), Some(49.into()));
let mut iter4 = vim_word_iterator_from_offset(
38,
LINE,
Direction::Forward,
WordBound::Start,
WordType::Default,
)
.unwrap();
assert_eq!(iter4.next(), Some(40.into()));
let mut iter5 = vim_word_iterator_from_offset(
69,
LINE,
Direction::Forward,
WordBound::Start,
WordType::Default,
)
.unwrap();
assert_eq!(iter5.next(), Some(70.into()));
assert_eq!(iter5.next(), None);
}
/// The behavior for pressing "W".
#[test]
fn test_word_forward_heads_including_symbols() {
let mut iter1 = vim_word_iterator_from_offset(
0,
LINE,
Direction::Forward,
WordBound::Start,
WordType::BigWord,
)
.unwrap();
assert_eq!(iter1.next(), Some(9.into()));
assert_eq!(iter1.next(), Some(12.into()));
assert_eq!(iter1.next(), Some(23.into()));
assert_eq!(iter1.next(), Some(25.into()));
assert_eq!(iter1.next(), Some(32.into()));
assert_eq!(iter1.next(), Some(34.into()));
assert_eq!(iter1.next(), Some(40.into()));
assert_eq!(iter1.next(), Some(49.into()));
assert_eq!(iter1.next(), Some(53.into()));
assert_eq!(iter1.next(), Some(70.into()));
assert_eq!(iter1.next(), None);
let mut iter2 = vim_word_iterator_from_offset(
15,
LINE,
Direction::Forward,
WordBound::Start,
WordType::Default,
)
.unwrap();
assert_eq!(iter2.next(), Some(23.into()));
let mut iter3 = vim_word_iterator_from_offset(
43,
LINE,
Direction::Forward,
WordBound::Start,
WordType::Default,
)
.unwrap();
assert_eq!(iter3.next(), Some(49.into()));
let mut iter4 = vim_word_iterator_from_offset(
38,
LINE,
Direction::Forward,
WordBound::Start,
WordType::Default,
)
.unwrap();
assert_eq!(iter4.next(), Some(40.into()));
let mut iter5 = vim_word_iterator_from_offset(
69,
LINE,
Direction::Forward,
WordBound::Start,
WordType::Default,
)
.unwrap();
assert_eq!(iter5.next(), Some(70.into()));
assert_eq!(iter5.next(), None);
}
/// The behavior for pressing "ge"
#[test]
fn test_word_backward_heads() {
let mut iter1 = vim_word_iterator_from_offset(
69,
LINE,
Direction::Backward,
WordBound::End,
WordType::Default,
)
.unwrap();
assert_eq!(iter1.next(), Some(51.into()));
assert_eq!(iter1.next(), Some(47.into()));
assert_eq!(iter1.next(), Some(36.into()));
assert_eq!(iter1.next(), Some(35.into()));
assert_eq!(iter1.next(), Some(34.into()));
assert_eq!(iter1.next(), Some(32.into()));
assert_eq!(iter1.next(), Some(30.into()));
assert_eq!(iter1.next(), Some(25.into()));
assert_eq!(iter1.next(), Some(23.into()));
assert_eq!(iter1.next(), Some(21.into()));
assert_eq!(iter1.next(), Some(10.into()));
assert_eq!(iter1.next(), Some(9.into()));
assert_eq!(iter1.next(), Some(7.into()));
assert_eq!(iter1.next(), Some(6.into()));
assert_eq!(iter1.next(), Some(5.into()));
assert_eq!(iter1.next(), Some(3.into()));
assert_eq!(iter1.next(), Some(0.into()));
assert_eq!(iter1.next(), None);
let mut iter2 = vim_word_iterator_from_offset(
15,
LINE,
Direction::Backward,
WordBound::End,
WordType::Default,
)
.unwrap();
assert_eq!(iter2.next(), Some(10.into()));
let mut iter3 = vim_word_iterator_from_offset(
43,
LINE,
Direction::Backward,
WordBound::End,
WordType::Default,
)
.unwrap();
assert_eq!(iter3.next(), Some(36.into()));
let mut iter4 = vim_word_iterator_from_offset(
38,
LINE,
Direction::Backward,
WordBound::End,
WordType::Default,
)
.unwrap();
assert_eq!(iter4.next(), Some(36.into()));
let mut iter5 = vim_word_iterator_from_offset(
0,
LINE,
Direction::Backward,
WordBound::End,
WordType::Default,
)
.unwrap();
assert_eq!(iter5.next(), Some(0.into()));
assert_eq!(iter5.next(), None);
}
/// The behavior for pressing "gE"
#[test]
fn test_word_backward_heads_including_symbols() {
let mut iter1 = vim_word_iterator_from_offset(
69,
LINE,
Direction::Backward,
WordBound::End,
WordType::BigWord,
)
.unwrap();
assert_eq!(iter1.next(), Some(51.into()));
assert_eq!(iter1.next(), Some(47.into()));
assert_eq!(iter1.next(), Some(36.into()));
assert_eq!(iter1.next(), Some(32.into()));
assert_eq!(iter1.next(), Some(30.into()));
assert_eq!(iter1.next(), Some(23.into()));
assert_eq!(iter1.next(), Some(21.into()));
assert_eq!(iter1.next(), Some(10.into()));
assert_eq!(iter1.next(), Some(7.into()));
assert_eq!(iter1.next(), Some(0.into()));
assert_eq!(iter1.next(), None);
let mut iter2 = vim_word_iterator_from_offset(
15,
LINE,
Direction::Backward,
WordBound::End,
WordType::Default,
)
.unwrap();
assert_eq!(iter2.next(), Some(10.into()));
let mut iter3 = vim_word_iterator_from_offset(
43,
LINE,
Direction::Backward,
WordBound::End,
WordType::Default,
)
.unwrap();
assert_eq!(iter3.next(), Some(36.into()));
let mut iter4 = vim_word_iterator_from_offset(
38,
LINE,
Direction::Backward,
WordBound::End,
WordType::Default,
)
.unwrap();
assert_eq!(iter4.next(), Some(36.into()));
let mut iter5 = vim_word_iterator_from_offset(
0,
LINE,
Direction::Backward,
WordBound::End,
WordType::Default,
)
.unwrap();
assert_eq!(iter5.next(), Some(0.into()));
assert_eq!(iter5.next(), None);
}
/// The behavior for pressing "e"
#[test]
fn test_word_forward_tails() {
let mut iter1 = vim_word_iterator_from_offset(
0,
LINE,
Direction::Forward,
WordBound::End,
WordType::Default,
)
.unwrap();
assert_eq!(iter1.next(), Some(3.into()));
assert_eq!(iter1.next(), Some(5.into()));
assert_eq!(iter1.next(), Some(6.into()));
assert_eq!(iter1.next(), Some(7.into()));
assert_eq!(iter1.next(), Some(9.into()));
assert_eq!(iter1.next(), Some(10.into()));
assert_eq!(iter1.next(), Some(21.into()));
assert_eq!(iter1.next(), Some(23.into()));
assert_eq!(iter1.next(), Some(25.into()));
assert_eq!(iter1.next(), Some(30.into()));
assert_eq!(iter1.next(), Some(32.into()));
assert_eq!(iter1.next(), Some(34.into()));
assert_eq!(iter1.next(), Some(35.into()));
assert_eq!(iter1.next(), Some(36.into()));
assert_eq!(iter1.next(), Some(47.into()));
assert_eq!(iter1.next(), Some(51.into()));
assert_eq!(iter1.next(), Some(69.into()));
assert_eq!(iter1.next(), None);
let mut iter2 = vim_word_iterator_from_offset(
15,
LINE,
Direction::Forward,
WordBound::End,
WordType::Default,
)
.unwrap();
assert_eq!(iter2.next(), Some(21.into()));
let mut iter3 = vim_word_iterator_from_offset(
43,
LINE,
Direction::Forward,
WordBound::End,
WordType::Default,
)
.unwrap();
assert_eq!(iter3.next(), Some(47.into()));
let mut iter4 = vim_word_iterator_from_offset(
38,
LINE,
Direction::Forward,
WordBound::End,
WordType::Default,
)
.unwrap();
assert_eq!(iter4.next(), Some(47.into()));
let mut iter5 = vim_word_iterator_from_offset(
69,
LINE,
Direction::Forward,
WordBound::End,
WordType::Default,
)
.unwrap();
assert_eq!(iter5.next(), Some(69.into()));
assert_eq!(iter5.next(), None);
}
/// The behavior for pressing "E"
#[test]
fn test_word_forward_tails_including_symbols() {
let mut iter1 = vim_word_iterator_from_offset(
0,
LINE,
Direction::Forward,
WordBound::End,
WordType::BigWord,
)
.unwrap();
assert_eq!(iter1.next(), Some(7.into()));
assert_eq!(iter1.next(), Some(10.into()));
assert_eq!(iter1.next(), Some(21.into()));
assert_eq!(iter1.next(), Some(23.into()));
assert_eq!(iter1.next(), Some(30.into()));
assert_eq!(iter1.next(), Some(32.into()));
assert_eq!(iter1.next(), Some(36.into()));
assert_eq!(iter1.next(), Some(47.into()));
assert_eq!(iter1.next(), Some(51.into()));
assert_eq!(iter1.next(), Some(69.into()));
assert_eq!(iter1.next(), None);
let mut iter2 = vim_word_iterator_from_offset(
15,
LINE,
Direction::Forward,
WordBound::End,
WordType::Default,
)
.unwrap();
assert_eq!(iter2.next(), Some(21.into()));
let mut iter3 = vim_word_iterator_from_offset(
43,
LINE,
Direction::Forward,
WordBound::End,
WordType::Default,
)
.unwrap();
assert_eq!(iter3.next(), Some(47.into()));
let mut iter4 = vim_word_iterator_from_offset(
38,
LINE,
Direction::Forward,
WordBound::End,
WordType::Default,
)
.unwrap();
assert_eq!(iter4.next(), Some(47.into()));
let mut iter5 = vim_word_iterator_from_offset(
69,
LINE,
Direction::Forward,
WordBound::End,
WordType::Default,
)
.unwrap();
assert_eq!(iter5.next(), Some(69.into()));
assert_eq!(iter5.next(), None);
}
/// The behavior for pressing "b"
#[test]
fn test_word_backward_tails() {
let mut iter1 = vim_word_iterator_from_offset(
69,
LINE,
Direction::Backward,
WordBound::Start,
WordType::Default,
)
.unwrap();
assert_eq!(iter1.next(), Some(53.into()));
assert_eq!(iter1.next(), Some(49.into()));
assert_eq!(iter1.next(), Some(40.into()));
assert_eq!(iter1.next(), Some(36.into()));
assert_eq!(iter1.next(), Some(35.into()));
assert_eq!(iter1.next(), Some(34.into()));
assert_eq!(iter1.next(), Some(32.into()));
assert_eq!(iter1.next(), Some(26.into()));
assert_eq!(iter1.next(), Some(25.into()));
assert_eq!(iter1.next(), Some(23.into()));
assert_eq!(iter1.next(), Some(12.into()));
assert_eq!(iter1.next(), Some(10.into()));
assert_eq!(iter1.next(), Some(9.into()));
assert_eq!(iter1.next(), Some(7.into()));
assert_eq!(iter1.next(), Some(6.into()));
assert_eq!(iter1.next(), Some(4.into()));
assert_eq!(iter1.next(), Some(0.into()));
assert_eq!(iter1.next(), None);
let mut iter2 = vim_word_iterator_from_offset(
15,
LINE,
Direction::Backward,
WordBound::Start,
WordType::Default,
)
.unwrap();
assert_eq!(iter2.next(), Some(12.into()));
let mut iter3 = vim_word_iterator_from_offset(
43,
LINE,
Direction::Backward,
WordBound::Start,
WordType::Default,
)
.unwrap();
assert_eq!(iter3.next(), Some(40.into()));
let mut iter4 = vim_word_iterator_from_offset(
38,
LINE,
Direction::Backward,
WordBound::Start,
WordType::Default,
)
.unwrap();
assert_eq!(iter4.next(), Some(36.into()));
let mut iter5 = vim_word_iterator_from_offset(
0,
LINE,
Direction::Backward,
WordBound::Start,
WordType::Default,
)
.unwrap();
assert_eq!(iter5.next(), Some(0.into()));
assert_eq!(iter5.next(), None);
}
/// The behavior for pressing "B"
#[test]
fn test_word_backward_tails_including_symbols() {
let mut iter1 = vim_word_iterator_from_offset(
69,
LINE,
Direction::Backward,
WordBound::Start,
WordType::BigWord,
)
.unwrap();
assert_eq!(iter1.next(), Some(53.into()));
assert_eq!(iter1.next(), Some(49.into()));
assert_eq!(iter1.next(), Some(40.into()));
assert_eq!(iter1.next(), Some(34.into()));
assert_eq!(iter1.next(), Some(32.into()));
assert_eq!(iter1.next(), Some(25.into()));
assert_eq!(iter1.next(), Some(23.into()));
assert_eq!(iter1.next(), Some(12.into()));
assert_eq!(iter1.next(), Some(9.into()));
assert_eq!(iter1.next(), Some(0.into()));
assert_eq!(iter1.next(), None);
let mut iter2 = vim_word_iterator_from_offset(
15,
LINE,
Direction::Backward,
WordBound::Start,
WordType::Default,
)
.unwrap();
assert_eq!(iter2.next(), Some(12.into()));
let mut iter3 = vim_word_iterator_from_offset(
43,
LINE,
Direction::Backward,
WordBound::Start,
WordType::Default,
)
.unwrap();
assert_eq!(iter3.next(), Some(40.into()));
let mut iter4 = vim_word_iterator_from_offset(
38,
LINE,
Direction::Backward,
WordBound::Start,
WordType::Default,
)
.unwrap();
assert_eq!(iter4.next(), Some(36.into()));
let mut iter5 = vim_word_iterator_from_offset(
0,
LINE,
Direction::Backward,
WordBound::Start,
WordType::Default,
)
.unwrap();
assert_eq!(iter5.next(), Some(0.into()));
assert_eq!(iter5.next(), None);
}
#[test]
fn test_out_of_bounds_is_error() {
assert!(vim_word_iterator_from_offset(
70,
LINE,
Direction::Backward,
WordBound::Start,
WordType::BigWord
)
.is_err());
}