use oak_testing::building::BuilderTester;
use oak_valkyrie::{ValkyrieBuilder, ValkyrieLanguage};
use std::time::Duration;
#[test]
fn test_valkyrie_builder() -> Result<(), oak_core::OakError> {
let language = ValkyrieLanguage::default();
let builder = ValkyrieBuilder::new(&language);
let test_runner = BuilderTester::new("tests/builder/test_files").with_extension("valkyrie").with_timeout(Duration::from_secs(5));
test_runner.run_tests::<ValkyrieLanguage, _>(&builder)
}
#[test]
fn test_flags_builder() {
use oak_core::{Builder, SourceText};
let language = ValkyrieLanguage::default();
let builder = ValkyrieBuilder::new(&language);
let source = SourceText::new("flags Permissions { Read, Write, Execute }");
println!("Testing builder with flags");
let mut cache = oak_core::parser::ParseSession::<ValkyrieLanguage>::default();
let diagnostics = builder.build(&source, &[], &mut cache);
match diagnostics.result {
Ok(typed_root) => {
println!("Successfully built flags typed root: {:?}", typed_root);
let has_flags = typed_root.items.iter().any(|item| matches!(item, oak_valkyrie::ast::Item::Flags(_)));
assert!(has_flags, "Builder should have generated a Flags item")
}
Err(e) => {
panic!("Flags build failed with error: {}", e)
}
}
}
#[test]
fn test_valkyrie_builder_single_file() {
use oak_core::{Builder, SourceText};
let language = ValkyrieLanguage::default();
let builder = ValkyrieBuilder::new(&language);
let source = SourceText::new("micro add(x: i32, y: i32) -> i32 { x + y }");
println!("Testing builder with micro function");
let mut cache = oak_core::parser::ParseSession::<ValkyrieLanguage>::default();
let diagnostics = builder.build(&source, &[], &mut cache);
match diagnostics.result {
Ok(typed_root) => {
println!("Successfully built typed root: {:?}", typed_root)
}
Err(e) => {
println!("Build failed with error: {}", e)
}
}
if !diagnostics.diagnostics.is_empty() {
println!("Build diagnostics: {:?}", diagnostics.diagnostics)
}
assert!(true, "Single file builder test placeholder")
}
#[test]
fn test_valkyrie_builder_namespace() {
use oak_core::{Builder, SourceText};
let language = ValkyrieLanguage::default();
let builder = ValkyrieBuilder::new(&language);
let source = SourceText::new("namespace Test { micro main() { let x = 42 } }");
println!("Testing builder with namespace");
let mut cache = oak_core::parser::ParseSession::<ValkyrieLanguage>::default();
let diagnostics = builder.build(&source, &[], &mut cache);
match diagnostics.result {
Ok(typed_root) => {
println!("Successfully built namespace typed root: {:?}", typed_root)
}
Err(e) => {
println!("Namespace build failed with error: {}", e)
}
}
assert!(true, "Namespace builder test placeholder")
}