use super::parse; use super::parsed_statement::ParsedStatement; use crate::parsing::lexer::lex_tokens::{LexToken, TokenType}; use crate::span::Span; fn create_tokens(types: Vec) -> Vec { let mut v = Vec::with_capacity(types.len()); for t in types { v.push(LexToken { token_type: t, span: Span::new(0, 0), }); } v } #[test] fn test_empty_namespace() { let script = parse(create_tokens(vec![ TokenType::NamespaceKeyword, TokenType::WhiteSpace, TokenType::Identifier("foo".to_string()), TokenType::WhiteSpace, TokenType::OpenCurlyBracket, TokenType::CloseCurlyBracket, TokenType::EndOfFile, ])); if let ParsedStatement::Script(inner) = script.as_ref() { assert_eq!(1, inner.len()); if let ParsedStatement::Namespace(identifier, inner_script) = inner[0].as_ref() { assert_eq!(identifier, "foo"); if let ParsedStatement::Script(inner) = inner_script.as_ref() { assert_eq!(0, inner.len()); } else { unreachable!(); } } else { unreachable!() } } else { unreachable!(); } }