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]