diff --git a/gen/cmd/tests/cmd_test.rs b/gen/cmd/tests/cmd_test.rs
index 7e455a2..4ec3942 100644
--- a/gen/cmd/tests/cmd_test.rs
+++ b/gen/cmd/tests/cmd_test.rs
@@ -88,7 +88,8 @@
         .arg(demo_code_dir.to_str().unwrap())
         .arg("--outdir")
         .arg(tmp_dir.path().to_str().unwrap())
-        .arg("--gen-cpp");
+        .arg("--gen-cpp")
+        .arg("--generate-cxx-h");
     cmd.arg(match rs_gen_mode {
         RsGenMode::Single => "--gen-rs-include",
         RsGenMode::Archive => "--gen-rs-archive",
@@ -109,8 +110,6 @@
 fn test_gen() -> Result<(), Box<dyn std::error::Error>> {
     let tmp_dir = tempdir()?;
     base_test(&tmp_dir, RsGenMode::Single, |_| {})?;
-    File::create(tmp_dir.path().join("cxx.h"))
-        .and_then(|mut cxx_h| cxx_h.write_all(autocxx_engine::HEADER.as_bytes()))?;
     std::env::set_var("OUT_DIR", tmp_dir.path().to_str().unwrap());
     let r = build_from_folder(
         tmp_dir.path(),
@@ -130,8 +129,6 @@
 fn test_gen_archive() -> Result<(), Box<dyn std::error::Error>> {
     let tmp_dir = tempdir()?;
     base_test(&tmp_dir, RsGenMode::Archive, |_| {})?;
-    File::create(tmp_dir.path().join("cxx.h"))
-        .and_then(|mut cxx_h| cxx_h.write_all(autocxx_engine::HEADER.as_bytes()))?;
     let r = build_from_folder(
         tmp_dir.path(),
         &tmp_dir.path().join("demo/main.rs"),
@@ -147,6 +144,54 @@
 }
 
 #[test]
+fn test_gen_archive_first_entry() -> Result<(), Box<dyn std::error::Error>> {
+    let tmp_dir = tempdir()?;
+    base_test(&tmp_dir, RsGenMode::Archive, |_| {})?;
+    let r = build_from_folder(
+        tmp_dir.path(),
+        &tmp_dir.path().join("demo/main.rs"),
+        vec![tmp_dir.path().join("gen.rs.json")],
+        &["gen0.cc"],
+        RsFindMode::Custom(Box::new(|path: &Path| {
+            std::env::set_var(
+                "AUTOCXX_RS_JSON_ARCHIVE",
+                std::env::join_paths([&path.join("gen.rs.json"), Path::new("/nonexistent")])
+                    .unwrap(),
+            )
+        })),
+    );
+    if KEEP_TEMPDIRS {
+        println!("Tempdir: {:?}", tmp_dir.into_path().to_str());
+    }
+    r.unwrap();
+    Ok(())
+}
+
+#[test]
+fn test_gen_archive_second_entry() -> Result<(), Box<dyn std::error::Error>> {
+    let tmp_dir = tempdir()?;
+    base_test(&tmp_dir, RsGenMode::Archive, |_| {})?;
+    let r = build_from_folder(
+        tmp_dir.path(),
+        &tmp_dir.path().join("demo/main.rs"),
+        vec![tmp_dir.path().join("gen.rs.json")],
+        &["gen0.cc"],
+        RsFindMode::Custom(Box::new(|path: &Path| {
+            std::env::set_var(
+                "AUTOCXX_RS_JSON_ARCHIVE",
+                std::env::join_paths([Path::new("/nonexistent"), &path.join("gen.rs.json")])
+                    .unwrap(),
+            )
+        })),
+    );
+    if KEEP_TEMPDIRS {
+        println!("Tempdir: {:?}", tmp_dir.into_path().to_str());
+    }
+    r.unwrap();
+    Ok(())
+}
+
+#[test]
 fn test_gen_multiple_in_archive() -> Result<(), Box<dyn std::error::Error>> {
     let tmp_dir = tempdir()?;
 
@@ -165,10 +210,8 @@
         files,
         vec!["directive1.rs", "directive2.rs"],
     )?;
-    File::create(tmp_dir.path().join("cxx.h"))
-        .and_then(|mut cxx_h| cxx_h.write_all(autocxx_engine::HEADER.as_bytes()))?;
     // We've asked to create 8 C++ files, mostly blank. Build 'em all.
-    let cpp_files = (0..7).map(|id| format!("gen{}.cc", id)).collect_vec();
+    let cpp_files = (0..7).map(|id| format!("gen{id}.cc")).collect_vec();
     let cpp_files = cpp_files.iter().map(|s| s.as_str()).collect_vec();
     let r = build_from_folder(
         tmp_dir.path(),
@@ -221,8 +264,6 @@
     assert_not_contentful(&tmp_dir, "autocxxgen1.h");
     assert_contentful(&tmp_dir, "gen0.include.rs");
     assert_contentful(&tmp_dir, "test.d");
-    File::create(tmp_dir.path().join("cxx.h"))
-        .and_then(|mut cxx_h| cxx_h.write_all(autocxx_engine::HEADER.as_bytes()))?;
     let r = build_from_folder(
         tmp_dir.path(),
         &tmp_dir.path().join("demo/main.rs"),
@@ -267,7 +308,7 @@
 
 fn write_to_file(dir: &Path, filename: &str, content: &[u8]) {
     let path = dir.join(filename);
-    let mut f = File::create(&path).expect("Unable to create file");
+    let mut f = File::create(path).expect("Unable to create file");
     f.write_all(content).expect("Unable to write file");
 }
 
@@ -278,8 +319,7 @@
     }
     assert!(
         p.metadata().unwrap().len() > BLANK.len().try_into().unwrap(),
-        "File {} is empty",
-        fname
+        "File {fname} is empty"
     );
 }
 
@@ -298,7 +338,7 @@
 
 fn assert_contains(outdir: &TempDir, fname: &str, pattern: &str) {
     let p = outdir.path().join(fname);
-    let content = std::fs::read_to_string(&p).expect(fname);
-    eprintln!("content = {}", content);
+    let content = std::fs::read_to_string(p).expect(fname);
+    eprintln!("content = {content}");
     assert!(content.contains(pattern));
 }
