css_math 1.0.0

Tokenizes and validates strings as CSS Math statements
Documentation
use crate::token::Token;

mod tokenizer;
use tokenizer::Tokenizer;
mod error;
use error::TokenizationError;


pub(crate) fn tokenize(input: &str) -> Result<Vec<Token>, TokenizationError> {
    let tokenizer = Tokenizer::new(input);
    let tokens: Result<Vec<Token>, _> = tokenizer.collect();
    tokens
}

#[cfg(test)]
mod tests {
    use super::*;
	use test_case::test_case;

	#[test_case("5 + 10px", vec![Token::Number(String::from("5")),Token::Operator(String::from("+")),Token::Number(String::from("10")),Token::Unit(String::from("px"))] ; "5 + 10px")]
	#[test_case("5vh - 10px + 100%", vec![Token::Number(String::from("5")), Token::Unit(String::from("vh")), Token::Operator(String::from("-")), Token::Number(String::from("10")), Token::Unit(String::from("px")), Token::Operator(String::from("+")), Token::Number(String::from("100")), Token::Unit(String::from("%"))] ; "5vh - 10px + 100%")]
	#[test_case("(2 * 10ch) + 4px", vec![Token::LeftParen,Token::Number(String::from("2")),Token::Operator(String::from("*")),Token::Number(String::from("10")),Token::Unit(String::from("ch")),Token::RightParen,Token::Operator(String::from("+")),Token::Number(String::from("4")),Token::Unit(String::from("px"))] ; "(2 * 10ch) + 4px")]
	#[test_case("10 - -1", vec![Token::Number(String::from("10")),Token::Operator(String::from("-")),Token::Number(String::from("-1"))] ; "10 - -1")]
	#[test_case("(400 / -23) * 1", vec![Token::LeftParen,Token::Number(String::from("400")),Token::Operator(String::from("/")),Token::Number(String::from("-23")),Token::RightParen,Token::Operator(String::from("*")),Token::Number(String::from("1"))] ; "(400 / -23) * 1")]
	fn test_output(input: &str, expected: Vec<Token>) {
		assert_eq!(tokenize(input).unwrap(), expected);
	}
}