use lalrpop_util::lalrpop_mod;
lalrpop_mod!(pub midl);
pub mod codegen;
pub mod parser;
#[cfg(feature = "cargo")]
pub mod cargo;
#[cfg(test)]
mod tests {
use crate::midl;
#[test]
fn import_include() {
midl::ImportParser::new()
.parse("import \"iunknown.idl\"")
.unwrap();
midl::IncludeParser::new()
.parse("include \"iunknown.idl\", \"blah.idl\", \"file with spaces.idl\"")
.unwrap();
assert!(midl::ImportParser::new()
.parse("import \"unfinished")
.is_err());
}
#[test]
fn ctype() {
midl::CtypeParser::new().parse("int").unwrap();
midl::CtypeParser::new().parse("int *").unwrap();
midl::CtypeParser::new().parse("int ***").unwrap();
midl::CtypeParser::new()
.parse("const int *const *")
.unwrap();
midl::CtypeParser::new()
.parse("int **const *const **")
.unwrap();
assert!(midl::CtypeParser::new().parse("const int const").is_err());
assert!(midl::CtypeParser::new()
.parse("int const * const const")
.is_err());
}
#[test]
fn function() {
midl::FnArgParser::new().parse("int x").unwrap();
midl::FnArgParser::new().parse("int y").unwrap();
midl::FunctionParser::new().parse("int AddRef()").unwrap();
midl::FunctionParser::new()
.parse("[ptr] void *QueryInterface([in] const IID *itf_type)")
.unwrap();
}
#[test]
fn interface() {
midl::InterfaceParser::new()
.parse("[object] interface IUnknown {}")
.unwrap();
}
#[test]
fn it_works() {
let res = midl::FileParser::new().parse(include_str!("test.idl"));
match res {
Err(e) => {
println!("{}", e);
panic!();
}
Ok(v) => {
println!("{:?}", v);
}
}
}
}