use super::super::Position;
use super::parser::Parser;
#[test]
fn test_parser_new() {
let doc = "hello";
let parser = Parser::new(doc);
assert_eq!(parser.get_position().line, 1);
assert_eq!(parser.get_position().column, 1);
assert_eq!(parser.remain(), "hello");
assert!(!parser.is_eod());
}
#[test]
fn test_parser_advance() {
let doc = "abc\ndef";
let mut parser = Parser::new(doc);
assert_eq!(parser.advance(), Some('a'));
assert_eq!(parser.get_position().line, 1);
assert_eq!(parser.get_position().column, 2);
assert_eq!(parser.remain(), "bc\ndef");
assert_eq!(parser.advance(), Some('b'));
assert_eq!(parser.get_position().line, 1);
assert_eq!(parser.get_position().column, 3);
assert_eq!(parser.remain(), "c\ndef");
assert_eq!(parser.advance(), Some('c'));
assert_eq!(parser.get_position().line, 1);
assert_eq!(parser.get_position().column, 4);
assert_eq!(parser.remain(), "\ndef");
assert_eq!(parser.advance(), Some('\n'));
assert_eq!(parser.get_position().line, 2);
assert_eq!(parser.get_position().column, 1);
assert_eq!(parser.remain(), "def");
assert!(parser.is_begin_of_line());
assert_eq!(parser.advance(), Some('d'));
assert_eq!(parser.get_position().line, 2);
assert_eq!(parser.get_position().column, 2);
assert_eq!(parser.remain(), "ef");
assert_eq!(parser.advance(), Some('e'));
assert_eq!(parser.get_position().line, 2);
assert_eq!(parser.get_position().column, 3);
assert_eq!(parser.remain(), "f");
assert_eq!(parser.advance(), Some('f'));
assert_eq!(parser.get_position().line, 2);
assert_eq!(parser.get_position().column, 4);
assert_eq!(parser.remain(), "");
assert!(parser.is_eod());
assert_eq!(parser.advance(), None);
assert!(parser.is_eod());
}
#[test]
fn test_parser_advance_immutable() {
let doc = "ab";
let parser = Parser::new(doc);
let (c1, p1) = parser.advance_immutable().unwrap();
assert_eq!(c1, 'a');
assert_eq!(p1.remain(), "b");
assert_eq!(parser.remain(), "ab");
let (c2, p2) = p1.advance_immutable().unwrap();
assert_eq!(c2, 'b');
assert_eq!(p2.remain(), "");
assert!(p2.advance_immutable().is_none());
}
#[test]
fn test_parser_get_position() {
let doc = "a\nbc";
let mut parser = Parser::new(doc);
assert_eq!(
parser.get_position(),
Position {
offset: 0,
line: 1,
column: 1
}
);
parser.advance(); assert_eq!(
parser.get_position(),
Position {
offset: 1,
line: 1,
column: 2
}
);
parser.advance(); assert_eq!(
parser.get_position(),
Position {
offset: 2,
line: 2,
column: 1
}
);
parser.advance(); assert_eq!(
parser.get_position(),
Position {
offset: 3,
line: 2,
column: 2
}
);
}