use crate::{IndentError, IndentStack};
#[test]
fn plain() {
let mut is = IndentStack::default_inconsistent_indents();
assert_eq!(is.accept(""), Ok(0));
assert_eq!(is.accept(""), Ok(0));
assert_eq!(is.accept(""), Ok(0));
}
#[test]
fn indent() {
let mut is = IndentStack::default_inconsistent_indents();
assert_eq!(is.accept(""), Ok(0));
assert_eq!(is.accept(" "), Ok(1));
assert_eq!(is.accept(" "), Ok(0));
assert_eq!(is.accept(" "), Ok(0));
let mut is = IndentStack::default_inconsistent_indents();
assert_eq!(is.accept(" "), Ok(1));
assert_eq!(is.accept(" "), Ok(0));
}
#[test]
fn dedent() {
let mut is = IndentStack::default_inconsistent_indents();
assert_eq!(is.accept(""), Ok(0));
assert_eq!(is.accept(" "), Ok(1));
assert_eq!(is.accept(""), Ok(-1));
assert_eq!(is.accept(""), Ok(0));
let mut is = IndentStack::default_inconsistent_indents();
assert_eq!(is.accept(" "), Ok(1));
assert_eq!(is.accept(" \t"), Ok(1));
assert_eq!(is.accept(""), Ok(-2));
assert_eq!(is.accept(""), Ok(0));
}
#[test]
fn wrong_indent() {
let mut is = IndentStack::default_inconsistent_indents();
assert_eq!(is.accept(" "), Ok(1));
assert_eq!(is.accept("\t"), Err(IndentError::MixedIndent));
let mut is = IndentStack::default_inconsistent_indents();
assert_eq!(is.accept("\t"), Ok(1));
assert_eq!(is.accept(" "), Err(IndentError::MixedIndent));
}
#[test]
fn two_inconsistent_indents() {
let mut is = IndentStack::default_inconsistent_indents();
assert_eq!(is.accept(" "), Ok(1));
assert_eq!(is.accept(" \t"), Ok(1));
assert_eq!(is.accept(" "), Ok(-1));
assert_eq!(is.accept(""), Ok(-1));
assert_eq!(is.accept(""), Ok(0));
}
#[test]
fn multi_wrong_indent() {
let mut is = IndentStack::default_inconsistent_indents();
assert_eq!(is.accept(" "), Ok(1));
assert_eq!(is.accept(" \t"), Ok(1));
assert_eq!(is.accept("\t"), Err(IndentError::MixedIndent));
let mut is = IndentStack::default_inconsistent_indents();
assert_eq!(is.accept("\t"), Ok(1));
assert_eq!(is.accept("\t "), Ok(1));
assert_eq!(is.accept(" "), Err(IndentError::MixedIndent));
}
#[test]
fn inconsistent_indents_mixed() {
let mut is = IndentStack::default();
assert_eq!(is.accept(" "), Ok(1));
assert_eq!(is.accept(" \t"), Err(IndentError::InconsistentIndent));
}
#[test]
fn inconsistent_indents_prefix() {
let mut is = IndentStack::default();
assert_eq!(is.accept(" "), Ok(1));
assert_eq!(is.accept(" "), Err(IndentError::InconsistentIndent));
}
#[test]
fn inconsistent_indents_suffix() {
let mut is = IndentStack::default();
assert_eq!(is.accept(" "), Ok(1));
assert_eq!(is.accept(" "), Err(IndentError::InconsistentIndent));
}