#![allow(
clippy::expect_used,
clippy::unwrap_used,
clippy::panic,
clippy::print_stderr,
clippy::print_stdout,
clippy::field_reassign_with_default,
clippy::manual_flatten,
clippy::collapsible_if,
clippy::empty_line_after_doc_comments,
clippy::uninlined_format_args,
clippy::drop_non_drop,
missing_docs
)]
use zerodds_idl::engine::parse;
use zerodds_idl::grammar::idl42::IDL_42;
use zerodds_idl::lexer::Tokenizer;
const DDS_DCPS_IDL: &str = include_str!("fixtures/omg/zerodds_dcps.idl");
const DDS_SECURITY_IDL: &str = include_str!("fixtures/omg/zerodds_security.idl");
const DDS_XTYPES_IDL: &str = include_str!("fixtures/omg/dds_xtypes.idl");
fn parse_fixture(name: &str, src: &str) {
let tokenizer = Tokenizer::for_grammar(&IDL_42);
let stream = tokenizer
.tokenize(src)
.unwrap_or_else(|e| panic!("tokenize {name} failed: {e:?}"));
let result = parse(&IDL_42, stream.tokens());
assert!(
result.is_ok(),
"parse {name} failed: {result:?}\n\
note: this fixture is hand-crafted for IDL-4.2 grammar coverage;\n\
a parse failure means a Production is missing or buggy."
);
}
#[test]
fn lexer_handles_dds_dcps_idl() {
let tokenizer = Tokenizer::for_grammar(&IDL_42);
let result = tokenizer.tokenize(DDS_DCPS_IDL);
assert!(result.is_ok(), "tokenize failed: {result:?}");
}
#[test]
fn parses_dds_dcps_idl_directly() {
parse_fixture("zerodds_dcps.idl", DDS_DCPS_IDL);
}
#[test]
fn parses_dds_security_idl() {
parse_fixture("zerodds_security.idl", DDS_SECURITY_IDL);
}
#[test]
fn parses_dds_xtypes_idl() {
parse_fixture("dds_xtypes.idl", DDS_XTYPES_IDL);
}