#[cfg(test)]
mod context;
mod pattern;
#[cfg(test)]
pub use self::context::SyntaxTestContext;
pub use self::pattern::Pattern;
#[macro_export]
macro_rules! regex {
($source:literal) => {
$crate::testing::Pattern::regex($source)
};
($source:expr) => {
$crate::testing::Pattern::regex($source)
};
}
#[macro_export]
macro_rules! source_file {
($context:expr, $source:literal) => {
$context.source_manager().load(
$crate::debuginfo::SourceLanguage::Masm,
concat!("test", line!()).into(),
$source.to_string(),
)
};
($context:expr, $source:expr) => {
$context.source_manager().load(
$crate::debuginfo::SourceLanguage::Masm,
concat!("test", line!()).into(),
$source.to_string(),
)
};
}
#[macro_export]
macro_rules! assert_diagnostic {
($diagnostic:expr, $expected:literal) => {{
let actual = format!(
"{}",
$crate::diagnostics::reporting::PrintDiagnostic::new_without_color($diagnostic)
);
$crate::testing::Pattern::from($expected).assert_match(actual);
}};
($diagnostic:expr, $expected:expr) => {{
let actual = format!(
"{}",
$crate::diagnostics::reporting::PrintDiagnostic::new_without_color($diagnostic)
);
$crate::testing::Pattern::from($expected).assert_match(actual);
}};
}
#[macro_export]
macro_rules! assert_diagnostic_lines {
($diagnostic:expr, $($expected_lines:expr),+) => {{
let full_output = format!("{}", $crate::diagnostics::reporting::PrintDiagnostic::new_without_color($diagnostic));
let lines: Vec<_> = full_output.lines().filter(|l| !l.trim().is_empty()).collect();
let patterns = [$($crate::testing::Pattern::from($expected_lines)),*];
if lines.len() != patterns.len() {
panic!(
"expected {} lines, but got {}:\n{}",
patterns.len(),
lines.len(),
full_output
);
}
let lines_and_patterns = lines.into_iter().zip(patterns.into_iter());
for (actual_line, expected_pattern) in lines_and_patterns {
expected_pattern.assert_match_with_context(actual_line, &full_output);
}
}};
}
#[macro_export]
macro_rules! parse_module {
($context:expr, $path:literal, $source:expr) => {{
let path = $crate::Path::new($path).to_absolute();
let source_file = $context.source_manager().load(
$crate::debuginfo::SourceLanguage::Masm,
concat!("test", line!()).into(),
::alloc::string::String::from($source),
);
$crate::ast::Module::parse(
path,
$crate::ast::ModuleKind::Library,
source_file,
$context.source_manager(),
)
.expect("failed to parse module")
}};
}