Initial public release of Warp.
Repo-Sync-Origin: warpdotdev/warp-internal@12af1d983b
This commit is contained in:
@@ -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());
|
||||
}
|
||||
Reference in New Issue
Block a user