209 lines
5.9 KiB
Rust
209 lines
5.9 KiB
Rust
use super::*;
|
|
|
|
#[test]
|
|
fn vim_inner_paragraph_empty_buffer() {
|
|
assert_eq!(vim_inner_paragraph("", 0), Some(0.into()..0.into()));
|
|
assert_eq!(vim_inner_paragraph("", 1), None);
|
|
}
|
|
|
|
#[test]
|
|
fn vim_a_paragraph_empty_buffer() {
|
|
assert_eq!(vim_a_paragraph("", 0), Some(0.into()..0.into()));
|
|
assert_eq!(vim_a_paragraph("", 1), None);
|
|
}
|
|
|
|
#[test]
|
|
fn vim_inner_paragraph_single_paragraph() {
|
|
let text = "foo bar\nnext line\n";
|
|
|
|
for (i, ch) in text.chars().enumerate() {
|
|
if ch != '\n' {
|
|
let range = vim_inner_paragraph(text, i).unwrap();
|
|
assert_eq!(range, 0.into()..text.len().into());
|
|
}
|
|
}
|
|
}
|
|
|
|
#[test]
|
|
fn vim_a_paragraph_single_paragraph() {
|
|
let text = "foo bar\nnext line\n";
|
|
|
|
for (i, ch) in text.chars().enumerate() {
|
|
if ch != '\n' {
|
|
let range = vim_a_paragraph(text, i).unwrap();
|
|
assert_eq!(range, 0.into()..text.len().into());
|
|
}
|
|
}
|
|
}
|
|
|
|
#[test]
|
|
fn vim_inner_paragraph_two_paragraphs() {
|
|
let text = "first line\nof first para\n\nsecond para line\n";
|
|
let blank_index = text.find("\n\n").unwrap();
|
|
let second_start = blank_index + 2;
|
|
|
|
for (i, ch) in text.chars().take(blank_index).enumerate() {
|
|
if ch != '\n' {
|
|
let range = vim_inner_paragraph(text, i).unwrap();
|
|
assert_eq!(range, 0.into()..blank_index.into());
|
|
}
|
|
}
|
|
|
|
for (i, ch) in text.chars().enumerate().skip(second_start) {
|
|
if ch != '\n' {
|
|
let range = vim_inner_paragraph(text, i).unwrap();
|
|
assert_eq!(range, second_start.into()..text.len().into());
|
|
}
|
|
}
|
|
}
|
|
|
|
#[test]
|
|
fn vim_inner_paragraph_three_paragraphs() {
|
|
let text = "first\n\nsecond\n\nthird\n";
|
|
let (first_blank, second_blank) = {
|
|
let mut it = text.match_indices("\n\n");
|
|
(it.next().unwrap().0, it.next().unwrap().0)
|
|
};
|
|
let second_start = first_blank + 2;
|
|
let third_start = second_blank + 2;
|
|
|
|
for (i, ch) in text.chars().take(first_blank).enumerate() {
|
|
if ch != '\n' {
|
|
let range = vim_inner_paragraph(text, i).unwrap();
|
|
assert_eq!(range, 0.into()..first_blank.into());
|
|
}
|
|
}
|
|
|
|
for (i, ch) in text
|
|
.chars()
|
|
.enumerate()
|
|
.skip(second_start)
|
|
.take(second_blank - second_start)
|
|
{
|
|
if ch != '\n' {
|
|
let range = vim_inner_paragraph(text, i).unwrap();
|
|
assert_eq!(range, second_start.into()..second_blank.into());
|
|
}
|
|
}
|
|
|
|
for (i, ch) in text.chars().enumerate().skip(third_start) {
|
|
if ch != '\n' {
|
|
let range = vim_inner_paragraph(text, i).unwrap();
|
|
assert_eq!(range, third_start.into()..text.len().into());
|
|
}
|
|
}
|
|
}
|
|
|
|
#[test]
|
|
fn vim_a_paragraph_two_paragraphs() {
|
|
let text = "first line\nof first para\n\nsecond para line\n";
|
|
let blank_index = text.find("\n\n").unwrap();
|
|
|
|
for (i, ch) in text.chars().take(blank_index).enumerate() {
|
|
if ch != '\n' {
|
|
let range = vim_a_paragraph(text, i).unwrap();
|
|
assert_eq!(range, 0.into()..(blank_index + 1).into());
|
|
}
|
|
}
|
|
|
|
let second_range_start = (blank_index + 1).into();
|
|
let second_range_end = text.len().into();
|
|
let second_start = blank_index + 2;
|
|
|
|
for (i, ch) in text.chars().enumerate().skip(second_start) {
|
|
if ch != '\n' {
|
|
let range = vim_a_paragraph(text, i).unwrap();
|
|
assert_eq!(range, second_range_start..second_range_end);
|
|
}
|
|
}
|
|
}
|
|
|
|
#[test]
|
|
fn vim_a_paragraph_three_paragraphs() {
|
|
let text = "first\n\nsecond\n\nthird\n";
|
|
let (first_blank, second_blank) = {
|
|
let mut it = text.match_indices("\n\n");
|
|
(it.next().unwrap().0, it.next().unwrap().0)
|
|
};
|
|
let second_start = first_blank + 2;
|
|
let third_start = second_blank + 2;
|
|
|
|
for (i, ch) in text.chars().take(first_blank).enumerate() {
|
|
if ch != '\n' {
|
|
let range = vim_a_paragraph(text, i).unwrap();
|
|
assert_eq!(range, 0.into()..(first_blank + 1).into());
|
|
}
|
|
}
|
|
|
|
for (i, ch) in text
|
|
.chars()
|
|
.enumerate()
|
|
.skip(second_start)
|
|
.take(second_blank - second_start)
|
|
{
|
|
if ch != '\n' {
|
|
let range = vim_a_paragraph(text, i).unwrap();
|
|
assert_eq!(range, second_start.into()..(second_blank + 1).into());
|
|
}
|
|
}
|
|
|
|
let last_range = (second_blank + 1).into()..text.len().into();
|
|
for (i, ch) in text.chars().enumerate().skip(third_start) {
|
|
if ch != '\n' {
|
|
let range = vim_a_paragraph(text, i).unwrap();
|
|
assert_eq!(range, last_range);
|
|
}
|
|
}
|
|
}
|
|
|
|
#[test]
|
|
fn vim_inner_paragraph_blank_lines() {
|
|
let text = "first\n\n\nsecond\n";
|
|
|
|
for offset in 5..=7 {
|
|
let range = vim_inner_paragraph(text, offset).unwrap();
|
|
assert_eq!(range, 6.into()..7.into());
|
|
}
|
|
}
|
|
|
|
#[test]
|
|
fn vim_a_paragraph_blank_lines() {
|
|
let text = "first\n\n\nsecond\n";
|
|
|
|
for offset in 5..=7 {
|
|
let range = vim_a_paragraph(text, offset).unwrap();
|
|
assert_eq!(range, 6.into()..text.len().into());
|
|
}
|
|
}
|
|
|
|
#[test]
|
|
fn vim_a_paragraph_many_trailing_blank_lines() {
|
|
let text = "first\n\n\nsecond\n\n\n\n\nthird";
|
|
|
|
for offset in 0..=4 {
|
|
let range = vim_a_paragraph(text, offset).unwrap();
|
|
assert_eq!(range, 0.into()..7.into());
|
|
}
|
|
|
|
for offset in 8..=13 {
|
|
let range = vim_a_paragraph(text, offset).unwrap();
|
|
assert_eq!(range, 8.into()..18.into());
|
|
}
|
|
|
|
for offset in 19..=23 {
|
|
let range = vim_a_paragraph(text, offset).unwrap();
|
|
assert_eq!(range, 15.into()..24.into());
|
|
}
|
|
}
|
|
|
|
#[test]
|
|
fn vim_paragraph_lines_with_spaces_included() {
|
|
// Despite being invisible, a line containing spaces still counts as "content".
|
|
let text = "first\n\n \nsecond";
|
|
|
|
let range = vim_a_paragraph(text, 3).unwrap();
|
|
assert_eq!(range, 0.into()..6.into());
|
|
let range = vim_a_paragraph(text, 14).unwrap();
|
|
assert_eq!(range, 6.into()..18.into());
|
|
}
|