@@ -1135,3 +1135,59 @@ def test_make_attrstring_function_directly(self) -> None:
1135
1135
empty_attrs : dict [str , Any ] = {}
1136
1136
result = make_attrstring (empty_attrs )
1137
1137
assert result == ""
1138
+
1139
+ def test_get_unique_id_collision_coverage (self ) -> None :
1140
+ """Test get_unique_id to cover line 50 - the collision case."""
1141
+ import json2xml .dicttoxml as module
1142
+
1143
+ # Clear the global _used_ids set to start fresh
1144
+ original_used_ids = module ._used_ids .copy ()
1145
+ module ._used_ids .clear ()
1146
+
1147
+ # Mock make_id to return the same ID twice, then a different one
1148
+ original_make_id = module .make_id
1149
+ call_count = 0
1150
+
1151
+ def mock_make_id (element : str , start : int = 100000 , end : int = 999999 ) -> str :
1152
+ nonlocal call_count
1153
+ call_count += 1
1154
+ if call_count == 1 :
1155
+ return "test_123456" # First call - will be added to _used_ids
1156
+ elif call_count == 2 :
1157
+ return "test_123456" # Second call - will collide, triggering line 50
1158
+ else :
1159
+ return "test_789012" # Third call - unique
1160
+
1161
+ module .make_id = mock_make_id
1162
+
1163
+ try :
1164
+ # First call - adds "test_123456" to _used_ids
1165
+ result1 = dicttoxml .get_unique_id ("test" )
1166
+ assert result1 == "test_123456"
1167
+
1168
+ # Reset call count for second test
1169
+ call_count = 0
1170
+
1171
+ # Second call - should trigger collision and regenerate
1172
+ result2 = dicttoxml .get_unique_id ("test" )
1173
+ assert result2 == "test_789012"
1174
+ assert call_count == 3 # Should have called make_id 3 times
1175
+ finally :
1176
+ module .make_id = original_make_id
1177
+ module ._used_ids .clear ()
1178
+ module ._used_ids .update (original_used_ids )
1179
+
1180
+ def test_get_xml_type_numbers_number_coverage (self ) -> None :
1181
+ """Test get_xml_type to cover line 90 - numbers.Number that's not int/float."""
1182
+ import decimal
1183
+ import fractions
1184
+
1185
+ # Test with Decimal (numbers.Number but not int/float)
1186
+ decimal_val = decimal .Decimal ('3.14159' )
1187
+ result = dicttoxml .get_xml_type (decimal_val )
1188
+ assert result == "number"
1189
+
1190
+ # Test with Fraction (numbers.Number but not int/float)
1191
+ fraction_val = fractions .Fraction (22 , 7 )
1192
+ result = dicttoxml .get_xml_type (fraction_val )
1193
+ assert result == "number"
0 commit comments