@@ -708,3 +708,58 @@ fn serde_indexmap_roundtrip() -> Result<(), Box<dyn Error>> {
708708 ) ;
709709 Ok ( ( ) )
710710}
711+
712+ #[ test]
713+ #[ cfg( feature = "serde" ) ]
714+ fn serde_multiline_roundtrip ( ) -> Result < ( ) , Box < dyn Error > > {
715+ // 1. Build a case-sensitive Ini with multiline enabled
716+ let mut orig = Ini :: new ( ) ;
717+ orig. set_multiline ( true ) ;
718+
719+ // 2. Load the multiline fixture
720+ let map1 = orig. load ( "tests/test_multiline.ini" ) ?;
721+ // 3. Capture the Key3 value before Serde
722+ let before = orig. get ( "Section" , "Key3" ) . unwrap ( ) ;
723+
724+ // 4. Serialize to JSON and back
725+ let json = serde_json:: to_string ( & orig) ?;
726+ let mut deser: Ini = serde_json:: from_str ( & json) ?;
727+
728+ // 5. Re-enable multiline on the deserialized Ini
729+ deser. set_multiline ( true ) ;
730+ let after = deser. get ( "Section" , "Key3" ) . unwrap ( ) ;
731+
732+ // 6. The entire map should match and Key3 must survive intact
733+ let map2 = deser. get_map ( ) . unwrap ( ) ;
734+ assert_eq ! ( map1, map2) ;
735+ assert_eq ! ( after, before) ;
736+
737+ Ok ( ( ) )
738+ }
739+
740+ #[ test]
741+ #[ cfg( feature = "serde" ) ]
742+ fn serde_case_sensitive_roundtrip ( ) -> Result < ( ) , Box < dyn Error > > {
743+ // 1. Load in case-sensitive mode
744+ let mut orig = Ini :: new_cs ( ) ;
745+ let map1 = orig. load ( "tests/test.ini" ) ?;
746+ // 2. Check that mixed-case keys work, lowercase doesn't
747+ let v1 = orig. get ( "default" , "defaultvalues" ) . unwrap ( ) ;
748+ assert ! ( orig. get( "default" , "DefaultValues" ) . is_none( ) ) ;
749+
750+ // 3. Serde round-trip
751+ let json = serde_json:: to_string ( & orig) ?;
752+ let deser_plain: Ini = serde_json:: from_str ( & json) ?;
753+ let map2 = deser_plain. get_map ( ) . unwrap ( ) ;
754+
755+ // 4. Reconstruct a case-sensitive Ini and inject the map
756+ let mut deser_cs = Ini :: new_cs ( ) ;
757+ * deser_cs. get_mut_map ( ) = map2;
758+
759+ // 5. Assert the exact-case key still exists and lowercase still fails
760+ let v2 = deser_cs. get ( "default" , "defaultvalues" ) . unwrap ( ) ;
761+ assert_eq ! ( v2, v1) ;
762+ assert ! ( deser_cs. get( "default" , "DefaultValues" ) . is_none( ) ) ;
763+
764+ Ok ( ( ) )
765+ }
0 commit comments