use udled::{prelude::*, Char, Input, Span};
#[test]
fn parse_char_and_string() {
let mut input = Input::new("abc");
let a = input.parse(Char).expect("expected char");
assert_eq!(a.value, 'a');
assert_eq!(a.span, Span::new(0, 1));
let s = input.parse("bc").expect("expected string");
assert_eq!(s.value, "bc");
assert_eq!(s.span, Span::new(1, 3));
}
#[test]
fn many_into_integer() {
use udled::tokenizers::Digit;
let mut input = Input::new("1234");
let tok = (
Digit::default(),
Digit::default(),
Digit::default(),
Digit::default(),
)
.into_integer(10);
let item = input.parse(tok).expect("expected integer");
assert_eq!(item.value, 1234i128);
assert_eq!(item.span, Span::new(0, 4));
}
#[test]
fn optional_tokenizer() {
let mut input = Input::new("");
let none = input.parse(Char.optional()).expect("optional failed");
assert!(none.is_none());
let mut input = Input::new("z");
let some = input
.parse(Char.optional())
.expect("optional failed")
.unwrap();
assert_eq!(some.value, 'z');
}
#[test]
fn punctuated_parse() {
use udled::tokenizers::Digit;
let mut input = Input::new("1,2,3");
let punct = ',';
let tok: udled::tokenizers::Punctuated<udled::tokenizers::Digit, char> =
udled::tokenizers::Punctuated::new(Digit::default(), punct);
let list = input.parse(tok).expect("punctuated failed");
let items: Vec<u32> = list.into_items().map(|it| it.value).collect();
assert_eq!(items, vec![1, 2, 3]);
}
#[test]
fn slice_combinator() {
let mut input = Input::new("hello");
let item = input.parse("hell".slice()).expect("slice failed");
assert_eq!(item.value, "hell");
assert_eq!(item.span, Span::new(0, 4));
}