dent-parse 0.1.0

Duck's Extensible Notation for Things (DENT) parser
Documentation
use super::*;

#[test]
fn number() {
    let mut tokenizer = Tokenizer::new("123");
    assert_eq!(tokenizer.next(), Ok(Token::Number("123")));
    assert_eq!(tokenizer.next(), Ok(Token::Eof));
}

#[test]
fn numbers() {
    let mut tokenizer = Tokenizer::new("123 1 2 3 1.0 2.0 11.2 11.");
    assert_eq!(tokenizer.next(), Ok(Token::Number("123")));
    assert_eq!(tokenizer.next(), Ok(Token::Number("1")));
    assert_eq!(tokenizer.next(), Ok(Token::Number("2")));
    assert_eq!(tokenizer.next(), Ok(Token::Number("3")));
    assert_eq!(tokenizer.next(), Ok(Token::Number("1.0")));
    assert_eq!(tokenizer.next(), Ok(Token::Number("2.0")));
    assert_eq!(tokenizer.next(), Ok(Token::Number("11.2")));
    assert_eq!(tokenizer.next(), Ok(Token::Number("11.")));
    assert_eq!(tokenizer.next(), Ok(Token::Eof));
}

#[test]
fn string() {
    let mut tokenizer = Tokenizer::new("hello");
    assert_eq!(tokenizer.next(), Ok(Token::String("hello")));
    assert_eq!(tokenizer.next(), Ok(Token::Eof));
}

#[test]
fn strings() {
    let mut tokenizer = Tokenizer::new("hello \"dear\" world");
    assert_eq!(tokenizer.next(), Ok(Token::String("hello")));
    assert_eq!(tokenizer.next(), Ok(Token::String("dear")));
    assert_eq!(tokenizer.next(), Ok(Token::String("world")));
    assert_eq!(tokenizer.next(), Ok(Token::Eof));
}

#[test]
fn bool() {
    let mut tokenizer = Tokenizer::new("true false");
    assert_eq!(tokenizer.next(), Ok(Token::Bool(true)));
    assert_eq!(tokenizer.next(), Ok(Token::Bool(false)));
    assert_eq!(tokenizer.next(), Ok(Token::Eof));
}

#[test]
fn special_characters() {
    let mut tokenizer = Tokenizer::new("[]{}@:");
    assert_eq!(tokenizer.next(), Ok(Token::OpenBracket));
    assert_eq!(tokenizer.next(), Ok(Token::CloseBracket));
    assert_eq!(tokenizer.next(), Ok(Token::OpenBrace));
    assert_eq!(tokenizer.next(), Ok(Token::CloseBrace));
    assert_eq!(tokenizer.next(), Ok(Token::At));
    assert_eq!(tokenizer.next(), Ok(Token::Colon));
    assert_eq!(tokenizer.next(), Ok(Token::Eof));
}

#[test]
fn comments() {
    let mut tokenizer = Tokenizer::new("hello # world\n");
    assert_eq!(tokenizer.next(), Ok(Token::String("hello")));
    assert_eq!(tokenizer.next(), Ok(Token::Comment));
    assert_eq!(tokenizer.next(), Ok(Token::Eof));
}

#[test]
fn comments2() {
    let mut tokenizer = Tokenizer::new("hello # world\n# comment");
    assert_eq!(tokenizer.next(), Ok(Token::String("hello")));
    assert_eq!(tokenizer.next(), Ok(Token::Comment));
    assert_eq!(tokenizer.next(), Ok(Token::Comment));
    assert_eq!(tokenizer.next(), Ok(Token::Eof));
}

#[test]
fn list() {
    let mut tokenizer = Tokenizer::new("[1 2 3] [ 1 2 a ]");

    assert_eq!(tokenizer.next(), Ok(Token::OpenBracket));
    assert_eq!(tokenizer.next(), Ok(Token::Number("1")));
    assert_eq!(tokenizer.next(), Ok(Token::Number("2")));
    assert_eq!(tokenizer.next(), Ok(Token::Number("3")));
    assert_eq!(tokenizer.next(), Ok(Token::CloseBracket));
    assert_eq!(tokenizer.next(), Ok(Token::OpenBracket));
    assert_eq!(tokenizer.next(), Ok(Token::Number("1")));
    assert_eq!(tokenizer.next(), Ok(Token::Number("2")));
    assert_eq!(tokenizer.next(), Ok(Token::String("a")));
    assert_eq!(tokenizer.next(), Ok(Token::CloseBracket));
    assert_eq!(tokenizer.next(), Ok(Token::Eof));
}

#[test]
fn dict() {
    let mut tokenizer = Tokenizer::new("{a: 1 b: 2}");
    assert_eq!(tokenizer.next(), Ok(Token::OpenBrace));
    assert_eq!(tokenizer.next(), Ok(Token::String("a")));
    assert_eq!(tokenizer.next(), Ok(Token::Colon));
    assert_eq!(tokenizer.next(), Ok(Token::Number("1")));
    assert_eq!(tokenizer.next(), Ok(Token::String("b")));
    assert_eq!(tokenizer.next(), Ok(Token::Colon));
    assert_eq!(tokenizer.next(), Ok(Token::Number("2")));
    assert_eq!(tokenizer.next(), Ok(Token::CloseBrace));
    assert_eq!(tokenizer.next(), Ok(Token::Eof));
}