#![cfg(not(any(
feature = "parser_tests",
feature = "analyzer_tests",
feature = "codegen_tests",
feature = "interpreter_tests",
feature = "conformance_tests",
feature = "integration_tests",
)))]
use windjammer::lexer::Lexer;
use windjammer::parser::ast::*;
use windjammer::parser_impl::Parser;
fn parse_program(input: &str) -> Result<Program<'_>, String> {
let mut lexer = Lexer::new(input);
let tokens = lexer.tokenize_with_locations();
let mut parser = Parser::new(tokens);
parser.parse()
}
#[test]
fn test_pub_type_alias_quest_status() {
let source = r#"
pub enum QuestState {
NotStarted,
Active,
Completed,
Failed,
}
pub type QuestStatus = QuestState
"#;
let result = parse_program(source);
assert!(
result.is_ok(),
"pub type alias should parse. Error: {:?}",
result.err()
);
let program = result.unwrap();
assert_eq!(program.items.len(), 2, "Expected enum and type alias");
let type_alias = &program.items[1];
assert!(
matches!(type_alias, Item::TypeAlias { .. }),
"Second item should be TypeAlias, got {:?}",
type_alias
);
}
#[test]
fn test_pub_type_alias_objective() {
let source = r#"
pub struct Objective {
id: u32,
}
pub type QuestObjective = Objective
"#;
let result = parse_program(source);
assert!(
result.is_ok(),
"pub type alias should parse. Error: {:?}",
result.err()
);
}