use crate::parser::*;
use pretty_assertions::assert_eq;
#[test]
fn test_token()
{
assert_eq!(token(Span::new("")).map(|s| *s.fragment()), None);
assert_eq!(token(Span::new("42")).map(|s| *s.fragment()), Some("42"));
assert_eq!(token(Span::new("-5")).map(|s| *s.fragment()), Some("-5"));
assert_eq!(
token(Span::new("hello")).map(|s| *s.fragment()),
Some("hello")
);
assert_eq!(token(Span::new("+")).map(|s| *s.fragment()), Some("+"));
assert_eq!(token(Span::new("*")).map(|s| *s.fragment()), Some("*"));
assert_eq!(token(Span::new("(")).map(|s| *s.fragment()), Some("("));
assert_eq!(token(Span::new(")")).map(|s| *s.fragment()), Some(")"));
assert_eq!(token(Span::new("{")).map(|s| *s.fragment()), Some("{"));
assert_eq!(token(Span::new("}")).map(|s| *s.fragment()), Some("}"));
assert_eq!(token(Span::new("[")).map(|s| *s.fragment()), Some("["));
assert_eq!(token(Span::new("]")).map(|s| *s.fragment()), Some("]"));
assert_eq!(token(Span::new("@")).map(|s| *s.fragment()), Some("@"));
}
#[test]
fn test_identifier_trailing_whitespace()
{
let span = Span::new("hello )");
let (residue, result) = identifier(span).unwrap();
assert_eq!(*result.fragment(), "hello");
assert_eq!(*residue.fragment(), " )");
let span = Span::new("foo +");
let (residue, result) = identifier(span).unwrap();
assert_eq!(*result.fragment(), "foo");
assert_eq!(*residue.fragment(), " +");
assert_eq!(residue.location_offset(), 3, "Residue offset after 'foo'");
let span = Span::new("ab )");
let (residue, result) = identifier(span).unwrap();
assert_eq!(*result.fragment(), "ab");
assert_eq!(*residue.fragment(), " )");
assert_eq!(residue.location_offset(), 2, "Residue offset after 'ab'");
let span = Span::new("bar\t}");
let (residue, result) = identifier(span).unwrap();
assert_eq!(*result.fragment(), "bar");
assert_eq!(*residue.fragment(), "\t}");
let span = Span::new("baz)");
let (residue, result) = identifier(span).unwrap();
assert_eq!(*result.fragment(), "baz");
assert_eq!(*residue.fragment(), ")");
}