#![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::config::ParserConfig;
use zerodds_idl_java::{JavaGenOptions, generate_java_files, generate_java_files_with_amqp};
fn gen_default(src: &str) -> String {
let opts = JavaGenOptions {
emit_typesupport: false,
..Default::default()
};
let ast = zerodds_idl::parse(src, &ParserConfig::default()).expect("parse");
let files = generate_java_files(&ast, &opts).expect("gen");
let mut combined = String::new();
for f in &files {
combined.push_str(&format!(
"// === FILE: {}/{}.java ===\n",
f.package_path, f.class_name
));
combined.push_str(&f.source);
combined.push('\n');
}
combined
}
fn gen_with_amqp(src: &str) -> String {
let opts = JavaGenOptions {
emit_typesupport: false,
..Default::default()
};
let ast = zerodds_idl::parse(src, &ParserConfig::default()).expect("parse");
let files = generate_java_files_with_amqp(&ast, &opts).expect("gen");
let mut combined = String::new();
for f in &files {
combined.push_str(&format!(
"// === FILE: {}/{}.java ===\n",
f.package_path, f.class_name
));
combined.push_str(&f.source);
combined.push('\n');
}
combined
}
#[test]
fn snapshot_simple_struct() {
insta::assert_snapshot!(gen_default("struct Point { long x; long y; };"));
}
#[test]
fn snapshot_struct_with_string_and_sequence() {
insta::assert_snapshot!(gen_default(
"struct Bag { string name; sequence<long> ids; };"
));
}
#[test]
fn snapshot_module_nesting() {
insta::assert_snapshot!(gen_default(
"module Outer { module Inner { struct S { long x; }; }; };"
));
}
#[test]
fn snapshot_enum() {
insta::assert_snapshot!(gen_default("enum Color { RED, GREEN, BLUE };"));
}
#[test]
fn snapshot_union() {
insta::assert_snapshot!(gen_default(
"union U switch (long) { case 1: long a; case 2: double b; default: octet c; };"
));
}
#[test]
fn snapshot_inheritance() {
insta::assert_snapshot!(gen_default(
"struct Base { long base_field; }; struct Child : Base { long child_field; };"
));
}
#[test]
fn snapshot_amqp_helpers_struct() {
insta::assert_snapshot!(gen_with_amqp("struct Sensor { long id; double temp; };"));
}
#[test]
fn snapshot_amqp_helpers_union() {
insta::assert_snapshot!(gen_with_amqp(
"union U switch (long) { case 1: long a; case 2: double b; };"
));
}
fn gen_typesupport(src: &str) -> String {
let ast = zerodds_idl::parse(src, &ParserConfig::default()).expect("parse");
let files = generate_java_files(&ast, &JavaGenOptions::default()).expect("gen");
let mut combined = String::new();
for f in &files {
if !f.class_name.ends_with("TypeSupport") {
continue;
}
combined.push_str(&format!(
"// === FILE: {}/{}.java ===\n",
f.package_path, f.class_name
));
combined.push_str(&f.source);
combined.push('\n');
}
combined
}
#[test]
fn snapshot_typesupport_final_struct() {
insta::assert_snapshot!(gen_typesupport("@final struct Point { long x; long y; };"));
}
#[test]
fn snapshot_typesupport_keyed_struct() {
insta::assert_snapshot!(gen_typesupport(
"@final struct Sensor { @key long id; double value; };"
));
}
#[test]
fn snapshot_typesupport_mutable_struct() {
insta::assert_snapshot!(gen_typesupport(
"@mutable struct M { @id(1) long a; @id(2) string b; };"
));
}