use rstest::rstest;
use syster::parser::{AstNode, SourceFile, parse_sysml};
fn parses_sysml(input: &str) -> bool {
let parsed = parse_sysml(input);
SourceFile::cast(parsed.syntax()).is_some()
}
#[rstest]
#[case("view def MyView;")]
#[case("view def MyView {}")]
#[case("view def MyView { expose MyElement; }")]
fn test_view_def(#[case] input: &str) {
assert!(parses_sysml(input), "Failed to parse: {}", input);
}
#[rstest]
#[case("package P { view myView; }")]
#[case("package P { view myView { } }")]
fn test_view_usage(#[case] input: &str) {
assert!(parses_sysml(input), "Failed to parse: {}", input);
}
#[rstest]
#[case("viewpoint def MyViewpoint;")]
#[case("viewpoint def MyViewpoint {}")]
fn test_viewpoint_def(#[case] input: &str) {
assert!(parses_sysml(input), "Failed to parse: {}", input);
}
#[rstest]
#[case("rendering def MyRendering;")]
#[case("rendering def MyRendering {}")]
fn test_rendering_def(#[case] input: &str) {
assert!(parses_sysml(input), "Failed to parse: {}", input);
}
#[rstest]
#[case("metadata def MyMetadata;")]
#[case("metadata def MyMetadata {}")]
fn test_metadata_def(#[case] input: &str) {
assert!(parses_sysml(input), "Failed to parse: {}", input);
}
#[rstest]
#[case("#MyMeta part def P;")]
#[case("@MyAnnotation part def P;")]
fn test_metadata_annotations(#[case] input: &str) {
assert!(parses_sysml(input), "Failed to parse: {}", input);
}
#[rstest]
#[case("view def V { expose MyElement; }")]
#[case("view def V { expose MyElement::member; }")]
#[case("view def V { expose MyNamespace::*; }")]
fn test_expose(#[case] input: &str) {
assert!(parses_sysml(input), "Failed to parse: {}", input);
}
#[rstest]
#[case("view def V { filter @MyMeta; }")]
fn test_filter(#[case] input: &str) {
assert!(parses_sysml(input), "Failed to parse: {}", input);
}
#[rstest]
#[case("view def V { render myRendering; }")]
fn test_render(#[case] input: &str) {
assert!(parses_sysml(input), "Failed to parse: {}", input);
}