tests: Make some other tests auto-update with BINDGEN_OVERWRITE_EXPECTED=1
diff --git a/tests/tests.rs b/tests/tests.rs
index 5611baa..cc64cfd 100644
--- a/tests/tests.rs
+++ b/tests/tests.rs
@@ -115,6 +115,62 @@
(bindings, stderr)
}
+fn should_overwrite_expected() -> bool {
+ if let Some(var) = env::var_os("BINDGEN_OVERWRITE_EXPECTED") {
+ if var == "1" {
+ return true;
+ }
+ if var != "0" && var != "" {
+ panic!("Invalid value of BINDGEN_OVERWRITE_EXPECTED");
+ }
+ }
+ false
+}
+
+fn error_diff_mismatch(
+ actual: &str,
+ expected: &str,
+ header: Option<&Path>,
+ filename: &Path,
+) -> Result<(), Error> {
+ println!("diff expected generated");
+ println!("--- expected: {:?}", filename);
+ if let Some(header) = header {
+ println!("+++ generated from: {:?}", header);
+ }
+
+ for diff in diff::lines(&expected, &actual) {
+ match diff {
+ diff::Result::Left(l) => println!("-{}", l),
+ diff::Result::Both(l, _) => println!(" {}", l),
+ diff::Result::Right(r) => println!("+{}", r),
+ }
+ }
+
+ if should_overwrite_expected() {
+ // Overwrite the expectation with actual output.
+ let mut expectation_file = fs::File::create(filename)?;
+ expectation_file.write_all(actual.as_bytes())?;
+ }
+
+ if let Some(var) = env::var_os("BINDGEN_TESTS_DIFFTOOL") {
+ //usecase: var = "meld" -> You can hand check differences
+ let name = match filename.components().last() {
+ Some(std::path::Component::Normal(name)) => name,
+ _ => panic!("Why is the header variable so weird?"),
+ };
+ let actual_result_path =
+ PathBuf::from(env::var("OUT_DIR").unwrap()).join(name);
+ let mut actual_result_file = fs::File::create(&actual_result_path)?;
+ actual_result_file.write_all(actual.as_bytes())?;
+ std::process::Command::new(var)
+ .args(&[filename, &actual_result_path])
+ .output()?;
+ }
+
+ return Err(Error::new(ErrorKind::Other, "Header and binding differ! Run with BINDGEN_OVERWRITE_EXPECTED=1 in the environment to automatically overwrite the expectation or with BINDGEN_TESTS_DIFFTOOL=meld to do this manually."));
+}
+
fn compare_generated_header(
header: &Path,
builder: BuilderState,
@@ -211,46 +267,12 @@
if actual != expected {
println!("{}", rustfmt_stderr);
-
- println!("diff expected generated");
- println!("--- expected: {:?}", looked_at.last().unwrap());
- println!("+++ generated from: {:?}", header);
-
- for diff in diff::lines(&expected, &actual) {
- match diff {
- diff::Result::Left(l) => println!("-{}", l),
- diff::Result::Both(l, _) => println!(" {}", l),
- diff::Result::Right(r) => println!("+{}", r),
- }
- }
-
- if let Some(var) = env::var_os("BINDGEN_OVERWRITE_EXPECTED") {
- if var == "1" {
- // Overwrite the expectation with actual output.
- let mut expectation_file =
- fs::File::create(looked_at.last().unwrap())?;
- expectation_file.write_all(actual.as_bytes())?;
- } else if var != "0" && var != "" {
- panic!("Invalid value of BINDGEN_OVERWRITE_EXPECTED");
- }
- }
-
- if let Some(var) = env::var_os("BINDGEN_TESTS_DIFFTOOL") {
- //usecase: var = "meld" -> You can hand check differences
- let filename = match header.components().last() {
- Some(std::path::Component::Normal(name)) => name,
- _ => panic!("Why is the header variable so weird?"),
- };
- let actual_result_path =
- PathBuf::from(env::var("OUT_DIR").unwrap()).join(filename);
- let mut actual_result_file = fs::File::create(&actual_result_path)?;
- actual_result_file.write_all(actual.as_bytes())?;
- std::process::Command::new(var)
- .args(&[looked_at.last().unwrap(), &actual_result_path])
- .output()?;
- }
-
- return Err(Error::new(ErrorKind::Other, "Header and binding differ! Run with BINDGEN_OVERWRITE_EXPECTED=1 in the environment to automatically overwrite the expectation or with BINDGEN_TESTS_DIFFTOOL=meld to do this manually."));
+ return error_diff_mismatch(
+ &actual,
+ &expected,
+ Some(header),
+ looked_at.last().unwrap(),
+ );
}
if let Some(roundtrip_builder) = roundtrip_builder {
@@ -485,6 +507,10 @@
let (actual, stderr) = rustfmt(actual);
println!("{}", stderr);
+ let expected_filename = concat!(
+ env!("CARGO_MANIFEST_DIR"),
+ "/tests/expectations/tests/test_multiple_header_calls_in_builder.rs"
+ );
let expected = include_str!(concat!(
env!("CARGO_MANIFEST_DIR"),
"/tests/expectations/tests/test_multiple_header_calls_in_builder.rs"
@@ -493,16 +519,13 @@
if actual != expected {
println!("Generated bindings differ from expected!");
-
- for diff in diff::lines(&actual, &expected) {
- match diff {
- diff::Result::Left(l) => println!("-{}", l),
- diff::Result::Both(l, _) => println!(" {}", l),
- diff::Result::Right(r) => println!("+{}", r),
- }
- }
-
- panic!();
+ error_diff_mismatch(
+ &actual,
+ &expected,
+ None,
+ Path::new(expected_filename),
+ )
+ .unwrap();
}
}
@@ -551,13 +574,24 @@
let (actual, stderr) = rustfmt(actual);
println!("{}", stderr);
+ let expected_filename = concat!(
+ env!("CARGO_MANIFEST_DIR"),
+ "/tests/expectations/tests/test_mixed_header_and_header_contents.rs"
+ );
let expected = include_str!(concat!(
env!("CARGO_MANIFEST_DIR"),
"/tests/expectations/tests/test_mixed_header_and_header_contents.rs"
));
let (expected, _) = rustfmt(expected.to_string());
-
- assert_eq!(expected, actual);
+ if expected != actual {
+ error_diff_mismatch(
+ &actual,
+ &expected,
+ None,
+ Path::new(expected_filename),
+ )
+ .unwrap();
+ }
}
#[test]