//////////////////////////// // Automatically Generated// //////////////////////////// use crate::logger::messages::Message; use crate::parsing::lexer::lex; use crate::parsing::lexer::lex_tokens::LexToken; use crate::parsing::parser::parse; use crate::parsing::parser::parsed_statement::ParsedStatement; use crate::span::Span; fn ignore_error(_msg: Message, _: Span) { } fn panic_on_error(msg: Message, _: Span) { std::panic::panic_any(msg.stringify()); } #[test] fn integration_enum_definition() { let script = "enum TestEnum : uint8 { a, b, c, d = 128, e }"; let lexed_tokens = lex(script, &mut panic_on_error); println!("{}", serde_json::to_string(&lexed_tokens).unwrap()); let expected_tokens: Vec = serde_json::from_str(r#"[ { "token_type": "EnumKeyword", "span": { "start": 0, "end": 4 } }, { "token_type": "WhiteSpace", "span": { "start": 4, "end": 5 } }, { "token_type": { "Identifier": "TestEnum" }, "span": { "start": 5, "end": 13 } }, { "token_type": "WhiteSpace", "span": { "start": 13, "end": 14 } }, { "token_type": "Colon", "span": { "start": 14, "end": 15 } }, { "token_type": "WhiteSpace", "span": { "start": 15, "end": 16 } }, { "token_type": "Uint8Keyword", "span": { "start": 16, "end": 21 } }, { "token_type": "WhiteSpace", "span": { "start": 21, "end": 22 } }, { "token_type": "OpenCurlyBracket", "span": { "start": 22, "end": 23 } }, { "token_type": "WhiteSpace", "span": { "start": 23, "end": 24 } }, { "token_type": "WhiteSpace", "span": { "start": 24, "end": 25 } }, { "token_type": "WhiteSpace", "span": { "start": 25, "end": 26 } }, { "token_type": "WhiteSpace", "span": { "start": 26, "end": 27 } }, { "token_type": "WhiteSpace", "span": { "start": 27, "end": 28 } }, { "token_type": { "Identifier": "a" }, "span": { "start": 28, "end": 29 } }, { "token_type": "Comma", "span": { "start": 29, "end": 30 } }, { "token_type": "WhiteSpace", "span": { "start": 30, "end": 31 } }, { "token_type": "WhiteSpace", "span": { "start": 31, "end": 32 } }, { "token_type": "WhiteSpace", "span": { "start": 32, "end": 33 } }, { "token_type": "WhiteSpace", "span": { "start": 33, "end": 34 } }, { "token_type": "WhiteSpace", "span": { "start": 34, "end": 35 } }, { "token_type": { "Identifier": "b" }, "span": { "start": 35, "end": 36 } }, { "token_type": "Comma", "span": { "start": 36, "end": 37 } }, { "token_type": "WhiteSpace", "span": { "start": 37, "end": 38 } }, { "token_type": "WhiteSpace", "span": { "start": 38, "end": 39 } }, { "token_type": "WhiteSpace", "span": { "start": 39, "end": 40 } }, { "token_type": "WhiteSpace", "span": { "start": 40, "end": 41 } }, { "token_type": "WhiteSpace", "span": { "start": 41, "end": 42 } }, { "token_type": { "Identifier": "c" }, "span": { "start": 42, "end": 43 } }, { "token_type": "Comma", "span": { "start": 43, "end": 44 } }, { "token_type": "WhiteSpace", "span": { "start": 44, "end": 45 } }, { "token_type": "WhiteSpace", "span": { "start": 45, "end": 46 } }, { "token_type": "WhiteSpace", "span": { "start": 46, "end": 47 } }, { "token_type": "WhiteSpace", "span": { "start": 47, "end": 48 } }, { "token_type": "WhiteSpace", "span": { "start": 48, "end": 49 } }, { "token_type": { "Identifier": "d" }, "span": { "start": 49, "end": 50 } }, { "token_type": "WhiteSpace", "span": { "start": 50, "end": 51 } }, { "token_type": "Equals", "span": { "start": 51, "end": 52 } }, { "token_type": "WhiteSpace", "span": { "start": 52, "end": 53 } }, { "token_type": { "IntegerLiteral": 128 }, "span": { "start": 53, "end": 56 } }, { "token_type": "Comma", "span": { "start": 56, "end": 57 } }, { "token_type": "WhiteSpace", "span": { "start": 57, "end": 58 } }, { "token_type": "WhiteSpace", "span": { "start": 58, "end": 59 } }, { "token_type": "WhiteSpace", "span": { "start": 59, "end": 60 } }, { "token_type": "WhiteSpace", "span": { "start": 60, "end": 61 } }, { "token_type": "WhiteSpace", "span": { "start": 61, "end": 62 } }, { "token_type": { "Identifier": "e" }, "span": { "start": 62, "end": 63 } }, { "token_type": "WhiteSpace", "span": { "start": 63, "end": 64 } }, { "token_type": "CloseCurlyBracket", "span": { "start": 64, "end": 65 } }, { "token_type": "EndOfFile", "span": { "start": 65, "end": 65 } } ]"#).unwrap(); assert_eq!(lexed_tokens, expected_tokens); let parsed_tree = parse(lexed_tokens, &mut panic_on_error); println!("{}", serde_json::to_string(&parsed_tree).unwrap()); let expected_tree: Box = serde_json::from_str(r#"{ "Script": { "statements": [ { "EnumDeclaration": { "modifiers": 0, "identifier": "TestEnum", "base_type": { "DataTypePrimType": { "prim_type": "UInt8" } }, "values": [ [ "a", null ], [ "b", null ], [ "c", null ], [ "d", { "IntegerLiteral": 128 } ], [ "e", null ] ] } } ] } }"#).unwrap(); assert_eq!(parsed_tree, expected_tree); } // A substring of a script should never panic, even though it might be completely invalid. #[test] fn integration_enum_definition_substring() { let mut script = "enum TestEnum : uint8 { a, b, c, d = 128, e }".to_string(); for _ in 0..script.len() { script.pop(); let lexed_tokens = lex(script.as_str(), &mut ignore_error); let _parsed_tree = parse(lexed_tokens, &mut ignore_error); } }