11"""Test to_dict functionality for all multidict types."""
22
3- from typing import Type , Iterable
4- from multidict import MultiMapping
5-
6-
7- from typing import Protocol
3+ from collections .abc import Iterable
4+ from typing import Protocol , Type
85
6+ import pytest
97
10- from multidict import MultiDict , CIMultiDict , MultiDictProxy , CIMultiDictProxy
8+ from multidict import (
9+ CIMultiDict ,
10+ CIMultiDictProxy ,
11+ MultiDict ,
12+ MultiDictProxy ,
13+ MultiMapping ,
14+ )
1115
1216
1317class MultidictModule (Protocol ):
@@ -20,12 +24,8 @@ class MultidictModule(Protocol):
2024class DictFactory (Protocol ):
2125 def __call__ (
2226 self , arg : Iterable [tuple [str , object ]] | None = None
23- ) -> MultiMapping [object ]: ...
24-
25-
26- import pytest
27-
28- from multidict import CIMultiDict , CIMultiDictProxy , MultiDict , MultiDictProxy
27+ ) -> MultiMapping [object ]:
28+ raise NotImplementedError
2929
3030
3131class BaseToDictTests :
@@ -49,7 +49,9 @@ def test_to_dict_empty(self, cls: DictFactory) -> None:
4949 result = d .to_dict ()
5050 assert result == {}
5151
52- def test_to_dict_returns_new_dict (self , cls : DictFactory ) -> None :
52+ def test_to_dict_returns_new_dict (
53+ self , cls : DictFactory
54+ ) -> None :
5355 """Test that each call returns a new dictionary instance."""
5456 d = cls ([("a" , 1 )])
5557 result1 = d .to_dict ()
@@ -64,7 +66,9 @@ def test_to_dict_list_is_fresh(self, cls: DictFactory) -> None:
6466 result2 = d .to_dict ()
6567 assert result1 ["a" ] is not result2 ["a" ]
6668
67- def test_to_dict_order_preservation (self , cls : DictFactory ) -> None :
69+ def test_to_dict_order_preservation (
70+ self , cls : DictFactory
71+ ) -> None :
6872 """Test that value lists maintain insertion order."""
6973 d = cls ([("x" , 3 ), ("x" , 1 ), ("x" , 2 )])
7074 result = d .to_dict ()
@@ -78,7 +82,9 @@ def test_to_dict_large_data(self, cls: DictFactory) -> None:
7882 assert len (result ) == 100
7983 assert all (len (v ) == 100 for v in result .values ())
8084
81- def test_to_dict_mixed_value_types (self , cls : DictFactory ) -> None :
85+ def test_to_dict_mixed_value_types (
86+ self , cls : DictFactory
87+ ) -> None :
8288 """Test to_dict with mixed value types (str, int) to verify generic _V."""
8389 d = cls ([("a" , 1 ), ("a" , "two" ), ("b" , 3.14 )])
8490 result = d .to_dict ()
@@ -101,7 +107,9 @@ class TestCIMultiDictToDict(BaseToDictTests):
101107 def cls (self , multidict_module : MultidictModule ) -> Type [CIMultiDict [object ]]:
102108 return multidict_module .CIMultiDict
103109
104- def test_to_dict_case_insensitive_grouping (self , cls : DictFactory ) -> None :
110+ def test_to_dict_case_insensitive_grouping (
111+ self , cls : DictFactory
112+ ) -> None :
105113 """Test that case variants are grouped under the same key."""
106114 d = cls ([("A" , 1 ), ("a" , 2 ), ("B" , 3 )])
107115 result = d .to_dict ()
@@ -119,12 +127,8 @@ class TestMultiDictProxyToDict(BaseToDictTests):
119127
120128 @pytest .fixture
121129 def cls (self , multidict_module : MultidictModule ) -> DictFactory :
122- def make_proxy (
123- arg : Iterable [tuple [str , object ]] | None = None ,
124- ) -> MultiMapping [object ]:
125- md : MultiDict [object ] = (
126- multidict_module .MultiDict (arg ) if arg else multidict_module .MultiDict ()
127- )
130+ def make_proxy (arg : Iterable [tuple [str , object ]] | None = None ) -> MultiMapping [object ]:
131+ md : MultiDict [object ] = multidict_module .MultiDict (arg ) if arg else multidict_module .MultiDict ()
128132 return multidict_module .MultiDictProxy (md )
129133
130134 return make_proxy
@@ -145,19 +149,15 @@ class TestCIMultiDictProxyToDict(BaseToDictTests):
145149
146150 @pytest .fixture
147151 def cls (self , multidict_module : MultidictModule ) -> DictFactory :
148- def make_proxy (
149- arg : Iterable [tuple [str , object ]] | None = None ,
150- ) -> MultiMapping [object ]:
151- md : CIMultiDict [object ] = (
152- multidict_module .CIMultiDict (arg )
153- if arg
154- else multidict_module .CIMultiDict ()
155- )
152+ def make_proxy (arg : Iterable [tuple [str , object ]] | None = None ) -> MultiMapping [object ]:
153+ md : CIMultiDict [object ] = multidict_module .CIMultiDict (arg ) if arg else multidict_module .CIMultiDict ()
156154 return multidict_module .CIMultiDictProxy (md )
157155
158156 return make_proxy
159157
160- def test_to_dict_case_insensitive_grouping (self , cls : DictFactory ) -> None :
158+ def test_to_dict_case_insensitive_grouping (
159+ self , cls : DictFactory
160+ ) -> None :
161161 """Test that case variants are grouped under the same key."""
162162 d = cls ([("A" , 1 ), ("a" , 2 ), ("B" , 3 )])
163163 result = d .to_dict ()
0 commit comments