@@ -537,6 +537,71 @@ public void MergeHeaderMap_WithNullTargetMap_ShouldThrowArgumentNullException()
537537 Assert . Throws < ArgumentNullException > ( ( ) => targetMap ! . MergeHeaderMap ( sourceMap ) ) ;
538538 }
539539
540+ [ Test ]
541+ public void MergeHeaderMap_WithOverwriteConflictsFalse_ShouldPreserveTargetValues ( )
542+ {
543+ // Arrange
544+ var targetMap = new CoseHeaderMap ( ) ;
545+ targetMap . Add ( new CoseHeaderLabel ( "shared-key" ) , CoseHeaderValue . FromString ( "target-value" ) ) ;
546+ targetMap . Add ( new CoseHeaderLabel ( "target-only" ) , CoseHeaderValue . FromInt32 ( 100 ) ) ;
547+
548+ var sourceMap = new CoseHeaderMap ( ) ;
549+ sourceMap . Add ( new CoseHeaderLabel ( "shared-key" ) , CoseHeaderValue . FromString ( "source-value" ) ) ;
550+ sourceMap . Add ( new CoseHeaderLabel ( "source-only" ) , CoseHeaderValue . FromInt32 ( 200 ) ) ;
551+
552+ // Act
553+ CoseHeaderMap result = targetMap . MergeHeaderMap ( sourceMap , overwriteConflicts : false ) ;
554+
555+ // Assert
556+ Assert . That ( result , Is . SameAs ( targetMap ) ) ;
557+ Assert . That ( result . Count , Is . EqualTo ( 3 ) ) ;
558+ Assert . That ( result [ new CoseHeaderLabel ( "shared-key" ) ] . GetValueAsString ( ) , Is . EqualTo ( "target-value" ) ) ;
559+ Assert . That ( result [ new CoseHeaderLabel ( "target-only" ) ] . GetValueAsInt32 ( ) , Is . EqualTo ( 100 ) ) ;
560+ Assert . That ( result [ new CoseHeaderLabel ( "source-only" ) ] . GetValueAsInt32 ( ) , Is . EqualTo ( 200 ) ) ;
561+ }
562+
563+ [ Test ]
564+ public void MergeHeaderMap_WithOverwriteConflictsTrue_ShouldReplaceTargetValues ( )
565+ {
566+ // Arrange
567+ var targetMap = new CoseHeaderMap ( ) ;
568+ targetMap . Add ( new CoseHeaderLabel ( "shared-key" ) , CoseHeaderValue . FromString ( "target-value" ) ) ;
569+ targetMap . Add ( new CoseHeaderLabel ( "target-only" ) , CoseHeaderValue . FromInt32 ( 100 ) ) ;
570+
571+ var sourceMap = new CoseHeaderMap ( ) ;
572+ sourceMap . Add ( new CoseHeaderLabel ( "shared-key" ) , CoseHeaderValue . FromString ( "source-value" ) ) ;
573+ sourceMap . Add ( new CoseHeaderLabel ( "source-only" ) , CoseHeaderValue . FromInt32 ( 200 ) ) ;
574+
575+ // Act
576+ CoseHeaderMap result = targetMap . MergeHeaderMap ( sourceMap , overwriteConflicts : true ) ;
577+
578+ // Assert
579+ Assert . That ( result , Is . SameAs ( targetMap ) ) ;
580+ Assert . That ( result . Count , Is . EqualTo ( 3 ) ) ;
581+ Assert . That ( result [ new CoseHeaderLabel ( "shared-key" ) ] . GetValueAsString ( ) , Is . EqualTo ( "source-value" ) ) ;
582+ Assert . That ( result [ new CoseHeaderLabel ( "target-only" ) ] . GetValueAsInt32 ( ) , Is . EqualTo ( 100 ) ) ;
583+ Assert . That ( result [ new CoseHeaderLabel ( "source-only" ) ] . GetValueAsInt32 ( ) , Is . EqualTo ( 200 ) ) ;
584+ }
585+
586+ [ Test ]
587+ public void MergeHeaderMap_WithDefaultParameter_ShouldOverwriteConflicts ( )
588+ {
589+ // Arrange
590+ var targetMap = new CoseHeaderMap ( ) ;
591+ targetMap . Add ( new CoseHeaderLabel ( "key" ) , CoseHeaderValue . FromString ( "target-value" ) ) ;
592+
593+ var sourceMap = new CoseHeaderMap ( ) ;
594+ sourceMap . Add ( new CoseHeaderLabel ( "key" ) , CoseHeaderValue . FromString ( "source-value" ) ) ;
595+
596+ // Act - Using default parameter (should overwrite)
597+ CoseHeaderMap result = targetMap . MergeHeaderMap ( sourceMap ) ;
598+
599+ // Assert
600+ Assert . That ( result , Is . SameAs ( targetMap ) ) ;
601+ Assert . That ( result . Count , Is . EqualTo ( 1 ) ) ;
602+ Assert . That ( result [ new CoseHeaderLabel ( "key" ) ] . GetValueAsString ( ) , Is . EqualTo ( "source-value" ) ) ;
603+ }
604+
540605 [ Test ]
541606 public void ToCoseHeaderMap_WithHeadersContainingNullLabel_ShouldSkipThem ( )
542607 {
0 commit comments