shulkerscript-lang/tests/parsing/main.rs

65 lines
1.9 KiB
Rust
Raw Permalink Normal View History

2024-06-24 21:37:02 +02:00
use std::path::Path;
use shulkerbox::virtual_fs::{VFile, VFolder};
use shulkerscript::{
base::{source_file::SourceElement, PrintHandler},
2024-06-24 21:37:02 +02:00
syntax::syntax_tree::{declaration::Declaration, statement::Statement},
};
#[test]
fn parsing_test1() {
let source = include_str!("./test1.shu");
let mut dir = VFolder::new();
dir.add_file("test1.shu", VFile::Text(source.to_string()));
let parsed = shulkerscript::parse(
&PrintHandler::default(),
&dir,
Path::new("test1.shu"),
"test1".to_string(),
)
.expect("Failed to parse");
2024-06-24 21:37:02 +02:00
assert_eq!(
parsed.namespace().namespace_name().str_content(),
"parsing-test"
);
let declarations = parsed.declarations();
assert_eq!(declarations.len(), 1);
let main_fn = declarations.first().unwrap();
if let Declaration::Function(func) = main_fn {
assert!(!func.is_public());
assert_eq!(func.identifier().span().str(), "main");
assert!(func.parameters().is_none());
let annotations = func.annotations();
assert!(annotations.is_empty());
let statements = func.block().statements();
assert_eq!(statements.len(), 1);
let hello_cmd = statements.first().unwrap();
if let Statement::LiteralCommand(hello_cmd) = hello_cmd {
assert_eq!(hello_cmd.span().str(), "/say Hello, World!");
} else {
panic!("Expected hello command");
}
} else {
panic!("Expected main function declaration");
}
}
#[test]
fn parsing_invalid() {
let source = include_str!("./invalid.shu");
let mut dir = VFolder::new();
dir.add_file("invalid.shu", VFile::Text(source.to_string()));
shulkerscript::parse(
&PrintHandler::default(),
&dir,
Path::new("invalid.shu"),
"invalid".to_string(),
)
.expect_err("Expecting parsing failure");
2024-06-24 21:37:02 +02:00
}