Changes to support an internal only harness

PiperOrigin-RevId: 1010865365
diff --git a/rust/e2e_tests/testdata/fuzz_tests_as_gtests.rs b/rust/e2e_tests/testdata/fuzz_tests_as_gtests.rs
index d50cf14..27d7cb0 100644
--- a/rust/e2e_tests/testdata/fuzz_tests_as_gtests.rs
+++ b/rust/e2e_tests/testdata/fuzz_tests_as_gtests.rs
@@ -30,3 +30,20 @@
     _c = Arbitrary::<bool>::default(),
 )]
 fn multi_arg_fuzz_test(_a: i32, _b: f32, _c: bool) {}
+
+mod sub {
+    use super::*;
+
+    #[fuzztest(_a = Arbitrary::<bool>::default())]
+    fn bool_fuzz_test(_a: bool) {
+        static ONCE: Once = Once::new();
+        ONCE.call_once(|| {
+            println!("sub::bool_fuzz_test property function ran...");
+        });
+    }
+}
+
+#[googletest::prelude::gtest]
+fn regular_gtest() {
+    println!("regular_gtest ran...");
+}
diff --git a/rust/src/options.rs b/rust/src/options.rs
index 956d090..6ff836e 100644
--- a/rust/src/options.rs
+++ b/rust/src/options.rs
@@ -160,7 +160,8 @@
         let argv0 = env::args().next().context("while attempting to get argv[0]")?;
 
         let stripped_test_name = strip_crate_name(current_test_name);
-        add_arg(format!("--binary={argv0} {stripped_test_name} --exact --nocapture"))?;
+        // Under libtest harness, will parse everything until the first `--`.
+        add_arg(format!("--binary={argv0} {stripped_test_name} --exact --nocapture --"))?;
         let normalized_test_name = current_test_name.replace("::", ".");
         add_arg(format!("--test_name={normalized_test_name}"))?;
 
@@ -205,7 +206,7 @@
         // ==============================================================================
         // 3. Common Environment Variables Differential
         // ==============================================================================
-        let env_diff = Self::default_env_diff();
+        let env_diff = Self::default_env_diff(current_test_name);
         add_arg(format!("--env_diff_for_binaries={}", env_diff.join(",")))?;
 
         // ==============================================================================
@@ -303,7 +304,7 @@
     /// could cause the subprocess to think it's running in a sharded environment, try to
     /// write to restricted output files, or trigger other harness-specific behavior that
     /// interferes with fuzzing.
-    fn default_env_diff() -> Vec<String> {
+    fn default_env_diff(current_test_name: &str) -> Vec<String> {
             let env_diff = vec![
             "-TEST_DIAGNOSTICS_OUTPUT_DIR".to_string(),
             "-TEST_INFRASTRUCTURE_FAILURE_FILE".to_string(),
@@ -319,6 +320,7 @@
             "-TEST_WARNINGS_OUTPUT_FILE".to_string(),
             "-GTEST_OUTPUT".to_string(),
             "-XML_OUTPUT_FILE".to_string(),
+            format!("TESTBRIDGE_TEST_ONLY={current_test_name}"),
         ];
 
         env_diff
@@ -482,7 +484,8 @@
 
         expect_true!(args_str
             .iter()
-            .any(|s| s.starts_with("--binary=") && s.contains("my_mod::my_test --exact")));
+            .any(|s| s.starts_with("--binary=")
+                && s.contains("my_mod::my_test --exact --nocapture --")));
 
         expect_true!(args_str.contains(&"--stop_after=10s"));
         expect_true!(args_str.contains(&"--test_name=my_crate.my_mod.my_test"));
@@ -563,6 +566,7 @@
 
         expect_true!(env_diff_arg.contains("-TEST_SHARD_INDEX"));
         expect_true!(env_diff_arg.contains("-XML_OUTPUT_FILE"));
+        expect_true!(env_diff_arg.contains("TESTBRIDGE_TEST_ONLY=my_crate::my_mod::my_test"));
         expect_true!(env_diff_arg.contains("-GTEST_OUTPUT"));
     }
 
@@ -594,8 +598,15 @@
             args._c_strings.iter().map(|s| s.to_str().expect("invalid utf8")).collect();
 
         expect_true!(args_str.iter().any(|s| s.starts_with("--binary=")
-            && s.contains("outer::inner::__fuzztest_mod__foo::foo --exact")));
+            && s.contains("outer::inner::__fuzztest_mod__foo::foo --exact --nocapture --")));
         expect_true!(args_str.contains(&"--test_name=my_crate.outer.inner.__fuzztest_mod__foo.foo"));
+
+        let env_diff_arg = args_str
+            .iter()
+            .find(|s| s.starts_with("--env_diff_for_binaries="))
+            .expect("missing --env_diff_for_binaries arg");
+        expect_true!(env_diff_arg
+            .contains("TESTBRIDGE_TEST_ONLY=my_crate::outer::inner::__fuzztest_mod__foo::foo"));
     }
 
     #[gtest]
@@ -662,9 +673,10 @@
         let args_str: Vec<&str> =
             args._c_strings.iter().map(|s| s.to_str().expect("invalid utf8")).collect();
 
-        assert!(args_str
+        expect_true!(args_str
             .iter()
-            .any(|s| s.starts_with("--binary=") && s.contains("my_mod::my_test --exact")));
+            .any(|s| s.starts_with("--binary=")
+                && s.contains("my_mod::my_test --exact --nocapture --")));
         assert!(args_str.contains(&"--fuzztest_only_replay=true"));
         assert!(args_str.contains(&"--fuzztest_time_limit_per_test=10s"));
         assert!(!args_str.iter().any(|s| s.starts_with("--j=")));
@@ -709,9 +721,10 @@
         let args_str: Vec<&str> =
             args._c_strings.iter().map(|s| s.to_str().expect("invalid utf8")).collect();
 
-        assert!(args_str
+        expect_true!(args_str
             .iter()
-            .any(|s| s.starts_with("--binary=") && s.contains("my_mod::my_test --exact")));
+            .any(|s| s.starts_with("--binary=")
+                && s.contains("my_mod::my_test --exact --nocapture --")));
         assert!(args_str.contains(&"--fuzztest_only_replay=true"));
         assert!(args_str.contains(&"--fuzztest_replay_coverage_inputs=true"));
         assert!(args_str.contains(&"--load_shards_only=true"));