SeraphScript/src/integration_tests/enum_definition.rs

460 lines
8.9 KiB
Rust

////////////////////////////
// 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<LexToken> =
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<ParsedStatement> =
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);
}
}