cpp_rs 0.1.0

[Not currently ready] A C Preprocessor library and associated binary.
Documentation
use crate::lexer::{Error, StrTokenizer, Token, TokenType, Tokenizer};
use std::borrow::Cow;

#[test]
fn escape_newline_eof() {
    let _ = env_logger::try_init();
    let mut tokenizer: StrTokenizer<'static> = Tokenizer::new("\\\n");

    assert_eq!(
        tokenizer.get_next_token().unwrap(),
        Token {
            token_type: TokenType::EOF,
            start_byte: 2,
            end_byte: 2,
            text: Cow::Borrowed(""),
        }
    );
}

#[test]
fn escape_identifier() {
    let _ = env_logger::try_init();
    let mut tokenizer: StrTokenizer<'static> = Tokenizer::new("Foo\\\nBar");

    assert_eq!(
        tokenizer.get_next_token().unwrap(),
        Token {
            token_type: TokenType::Identifier,
            start_byte: 0,
            end_byte: 7,
            text: Cow::Borrowed("FooBar"),
        }
    );
}

#[test]
fn string_literal_with_escaped_newline() {
    let _ = env_logger::try_init();
    let mut tokenizer: StrTokenizer<'static> = Tokenizer::new("\"foo\\\nbar\"");

    assert_eq!(
        tokenizer.get_next_token().unwrap(),
        Token {
            token_type: TokenType::StringLiteral,
            start_byte: 0,
            end_byte: 9,
            text: Cow::Borrowed("\"foobar\""),
        }
    );
}

#[test]
fn ident_to_num_with_escaped_newline() {
    let _ = env_logger::try_init();
    let mut tokenizer: StrTokenizer<'static> = Tokenizer::new("Foobar\\\n.0foo");

    assert_eq!(
        tokenizer.get_next_token().unwrap(),
        Token {
            token_type: TokenType::Identifier,
            start_byte: 0,
            end_byte: 5,
            text: Cow::Borrowed("Foobar"),
        }
    );

    assert_eq!(
        tokenizer.get_next_token().unwrap(),
        Token {
            token_type: TokenType::PPNumber,
            start_byte: 8,
            end_byte: 12,
            text: Cow::Borrowed(".0foo"),
        }
    );
}

#[test]
fn comment_with_escaped_line() {
    let _ = env_logger::try_init();
    let mut tokenizer: StrTokenizer<'static> = Tokenizer::new("//foo\\\nbar");

    assert_eq!(
        tokenizer.get_next_token().unwrap(),
        Token {
            token_type: TokenType::Comment,
            start_byte: 0,
            end_byte: 9,
            text: Cow::Borrowed("//foobar"),
        }
    );

    assert_eq!(
        tokenizer.get_next_token().unwrap(),
        Token {
            token_type: TokenType::EOF,
            start_byte: 10,
            end_byte: 10,
            text: Cow::Borrowed(""),
        }
    );
}