@@ -3,7 +3,9 @@ use std::path::{Path, PathBuf};
33use std:: str:: FromStr ;
44
55use forge_app:: EnvironmentInfra ;
6- use forge_domain:: { Environment , ModelId , ProviderId , RetryConfig , TlsBackend , TlsVersion } ;
6+ use forge_domain:: {
7+ AutoDumpFormat , Environment , ModelId , ProviderId , RetryConfig , TlsBackend , TlsVersion ,
8+ } ;
79use reqwest:: Url ;
810
911#[ derive( Clone ) ]
@@ -102,6 +104,7 @@ impl ForgeEnvironmentInfra {
102104 override_model,
103105 override_provider,
104106 max_extensions : parse_env :: < usize > ( "FORGE_MAX_EXTENSIONS" ) . unwrap_or ( 15 ) ,
107+ auto_dump : parse_env :: < AutoDumpFormat > ( "FORGE_AUTO_DUMP" ) ,
105108 }
106109 }
107110
@@ -183,6 +186,7 @@ impl_from_env_str_via_from_str! {
183186 String ,
184187 forge_domain:: TlsBackend ,
185188 forge_domain:: TlsVersion ,
189+ forge_domain:: AutoDumpFormat ,
186190}
187191
188192/// Parse environment variable using custom FromEnvStr trait
@@ -633,6 +637,95 @@ mod tests {
633637 }
634638 }
635639
640+ #[ test]
641+ #[ serial]
642+ fn test_auto_dump_env_var ( ) {
643+ use forge_domain:: AutoDumpFormat ;
644+ let cwd = tempdir ( ) . unwrap ( ) . path ( ) . to_path_buf ( ) ;
645+ let infra = ForgeEnvironmentInfra :: new ( false , cwd) ;
646+
647+ // Test default value when env var is not set
648+ {
649+ unsafe {
650+ env:: remove_var ( "FORGE_AUTO_DUMP" ) ;
651+ }
652+ let env = infra. get_environment ( ) ;
653+ assert_eq ! ( env. auto_dump, None ) ;
654+ }
655+
656+ // Test JSON with "json"
657+ {
658+ unsafe {
659+ env:: set_var ( "FORGE_AUTO_DUMP" , "json" ) ;
660+ }
661+ let env = infra. get_environment ( ) ;
662+ assert_eq ! ( env. auto_dump, Some ( AutoDumpFormat :: Json ) ) ;
663+ unsafe {
664+ env:: remove_var ( "FORGE_AUTO_DUMP" ) ;
665+ }
666+ }
667+
668+ // Test JSON with "true"
669+ {
670+ unsafe {
671+ env:: set_var ( "FORGE_AUTO_DUMP" , "true" ) ;
672+ }
673+ let env = infra. get_environment ( ) ;
674+ assert_eq ! ( env. auto_dump, Some ( AutoDumpFormat :: Json ) ) ;
675+ unsafe {
676+ env:: remove_var ( "FORGE_AUTO_DUMP" ) ;
677+ }
678+ }
679+
680+ // Test JSON with "1"
681+ {
682+ unsafe {
683+ env:: set_var ( "FORGE_AUTO_DUMP" , "1" ) ;
684+ }
685+ let env = infra. get_environment ( ) ;
686+ assert_eq ! ( env. auto_dump, Some ( AutoDumpFormat :: Json ) ) ;
687+ unsafe {
688+ env:: remove_var ( "FORGE_AUTO_DUMP" ) ;
689+ }
690+ }
691+
692+ // Test HTML with "html"
693+ {
694+ unsafe {
695+ env:: set_var ( "FORGE_AUTO_DUMP" , "html" ) ;
696+ }
697+ let env = infra. get_environment ( ) ;
698+ assert_eq ! ( env. auto_dump, Some ( AutoDumpFormat :: Html ) ) ;
699+ unsafe {
700+ env:: remove_var ( "FORGE_AUTO_DUMP" ) ;
701+ }
702+ }
703+
704+ // Test HTML case-insensitive "HTML"
705+ {
706+ unsafe {
707+ env:: set_var ( "FORGE_AUTO_DUMP" , "HTML" ) ;
708+ }
709+ let env = infra. get_environment ( ) ;
710+ assert_eq ! ( env. auto_dump, Some ( AutoDumpFormat :: Html ) ) ;
711+ unsafe {
712+ env:: remove_var ( "FORGE_AUTO_DUMP" ) ;
713+ }
714+ }
715+
716+ // Test disabled with invalid value
717+ {
718+ unsafe {
719+ env:: set_var ( "FORGE_AUTO_DUMP" , "invalid" ) ;
720+ }
721+ let env = infra. get_environment ( ) ;
722+ assert_eq ! ( env. auto_dump, None ) ;
723+ unsafe {
724+ env:: remove_var ( "FORGE_AUTO_DUMP" ) ;
725+ }
726+ }
727+ }
728+
636729 #[ test]
637730 #[ serial]
638731 fn test_tool_timeout_env_var ( ) {
0 commit comments