diff options
author | robot-piglet <[email protected]> | 2025-07-09 10:22:03 +0300 |
---|---|---|
committer | robot-piglet <[email protected]> | 2025-07-09 10:41:10 +0300 |
commit | f91edcd669b2b4e97378bae7b57f6589e68a538f (patch) | |
tree | c76a2875faa0ec6ab7d4cfe245ba138114447041 /contrib/python/multidict/tests | |
parent | f979375c0346ff1acee7005d4c0d22d954d4dfa3 (diff) |
Intermediate changes
commit_hash:d8fa10d7fba592f861e1470374c72cf22f0d5a2b
Diffstat (limited to 'contrib/python/multidict/tests')
-rw-r--r-- | contrib/python/multidict/tests/cimultidict-c.pickle.0 (renamed from contrib/python/multidict/tests/cimultidict-c-extension.pickle.0) | 0 | ||||
-rw-r--r-- | contrib/python/multidict/tests/cimultidict-c.pickle.1 (renamed from contrib/python/multidict/tests/cimultidict-c-extension.pickle.1) | bin | 71 -> 71 bytes | |||
-rw-r--r-- | contrib/python/multidict/tests/cimultidict-c.pickle.2 (renamed from contrib/python/multidict/tests/cimultidict-c-extension.pickle.2) | bin | 70 -> 70 bytes | |||
-rw-r--r-- | contrib/python/multidict/tests/cimultidict-c.pickle.3 (renamed from contrib/python/multidict/tests/cimultidict-c-extension.pickle.3) | bin | 70 -> 70 bytes | |||
-rw-r--r-- | contrib/python/multidict/tests/cimultidict-c.pickle.4 (renamed from contrib/python/multidict/tests/cimultidict-c-extension.pickle.4) | bin | 73 -> 73 bytes | |||
-rw-r--r-- | contrib/python/multidict/tests/cimultidict-c.pickle.5 (renamed from contrib/python/multidict/tests/cimultidict-c-extension.pickle.5) | bin | 73 -> 73 bytes | |||
-rw-r--r-- | contrib/python/multidict/tests/cimultidict-py.pickle.0 (renamed from contrib/python/multidict/tests/cimultidict-pure-python.pickle.0) | 0 | ||||
-rw-r--r-- | contrib/python/multidict/tests/cimultidict-py.pickle.1 (renamed from contrib/python/multidict/tests/cimultidict-pure-python.pickle.1) | bin | 74 -> 74 bytes | |||
-rw-r--r-- | contrib/python/multidict/tests/cimultidict-py.pickle.2 (renamed from contrib/python/multidict/tests/cimultidict-pure-python.pickle.2) | bin | 73 -> 73 bytes | |||
-rw-r--r-- | contrib/python/multidict/tests/cimultidict-py.pickle.3 (renamed from contrib/python/multidict/tests/cimultidict-pure-python.pickle.3) | bin | 73 -> 73 bytes | |||
-rw-r--r-- | contrib/python/multidict/tests/cimultidict-py.pickle.4 (renamed from contrib/python/multidict/tests/cimultidict-pure-python.pickle.4) | bin | 76 -> 76 bytes | |||
-rw-r--r-- | contrib/python/multidict/tests/cimultidict-py.pickle.5 (renamed from contrib/python/multidict/tests/cimultidict-pure-python.pickle.5) | bin | 76 -> 76 bytes | |||
-rw-r--r-- | contrib/python/multidict/tests/conftest.py | 6 | ||||
-rw-r--r-- | contrib/python/multidict/tests/istr-c.pickle.0 (renamed from contrib/python/multidict/tests/istr-c-extension.pickle.0) | 0 | ||||
-rw-r--r-- | contrib/python/multidict/tests/istr-c.pickle.1 (renamed from contrib/python/multidict/tests/istr-c-extension.pickle.1) | bin | 47 -> 47 bytes | |||
-rw-r--r-- | contrib/python/multidict/tests/istr-c.pickle.2 (renamed from contrib/python/multidict/tests/istr-c-extension.pickle.2) | bin | 48 -> 48 bytes | |||
-rw-r--r-- | contrib/python/multidict/tests/istr-c.pickle.3 (renamed from contrib/python/multidict/tests/istr-c-extension.pickle.3) | bin | 48 -> 48 bytes | |||
-rw-r--r-- | contrib/python/multidict/tests/istr-c.pickle.4 (renamed from contrib/python/multidict/tests/istr-c-extension.pickle.4) | bin | 54 -> 54 bytes | |||
-rw-r--r-- | contrib/python/multidict/tests/istr-c.pickle.5 (renamed from contrib/python/multidict/tests/istr-c-extension.pickle.5) | bin | 54 -> 54 bytes | |||
-rw-r--r-- | contrib/python/multidict/tests/istr-py.pickle.0 (renamed from contrib/python/multidict/tests/istr-pure-python.pickle.0) | 0 | ||||
-rw-r--r-- | contrib/python/multidict/tests/istr-py.pickle.1 (renamed from contrib/python/multidict/tests/istr-pure-python.pickle.1) | bin | 100 -> 100 bytes | |||
-rw-r--r-- | contrib/python/multidict/tests/istr-py.pickle.2 (renamed from contrib/python/multidict/tests/istr-pure-python.pickle.2) | bin | 51 -> 51 bytes | |||
-rw-r--r-- | contrib/python/multidict/tests/istr-py.pickle.3 (renamed from contrib/python/multidict/tests/istr-pure-python.pickle.3) | bin | 51 -> 51 bytes | |||
-rw-r--r-- | contrib/python/multidict/tests/istr-py.pickle.4 (renamed from contrib/python/multidict/tests/istr-pure-python.pickle.4) | bin | 57 -> 57 bytes | |||
-rw-r--r-- | contrib/python/multidict/tests/istr-py.pickle.5 (renamed from contrib/python/multidict/tests/istr-pure-python.pickle.5) | bin | 57 -> 57 bytes | |||
-rw-r--r-- | contrib/python/multidict/tests/multidict-c.pickle.0 (renamed from contrib/python/multidict/tests/multidict-c-extension.pickle.0) | 0 | ||||
-rw-r--r-- | contrib/python/multidict/tests/multidict-c.pickle.1 (renamed from contrib/python/multidict/tests/multidict-c-extension.pickle.1) | bin | 69 -> 69 bytes | |||
-rw-r--r-- | contrib/python/multidict/tests/multidict-c.pickle.2 (renamed from contrib/python/multidict/tests/multidict-c-extension.pickle.2) | bin | 68 -> 68 bytes | |||
-rw-r--r-- | contrib/python/multidict/tests/multidict-c.pickle.3 (renamed from contrib/python/multidict/tests/multidict-c-extension.pickle.3) | bin | 68 -> 68 bytes | |||
-rw-r--r-- | contrib/python/multidict/tests/multidict-c.pickle.4 (renamed from contrib/python/multidict/tests/multidict-c-extension.pickle.4) | bin | 71 -> 71 bytes | |||
-rw-r--r-- | contrib/python/multidict/tests/multidict-c.pickle.5 (renamed from contrib/python/multidict/tests/multidict-c-extension.pickle.5) | bin | 71 -> 71 bytes | |||
-rw-r--r-- | contrib/python/multidict/tests/multidict-py.pickle.0 (renamed from contrib/python/multidict/tests/multidict-pure-python.pickle.0) | 0 | ||||
-rw-r--r-- | contrib/python/multidict/tests/multidict-py.pickle.1 (renamed from contrib/python/multidict/tests/multidict-pure-python.pickle.1) | bin | 72 -> 72 bytes | |||
-rw-r--r-- | contrib/python/multidict/tests/multidict-py.pickle.2 (renamed from contrib/python/multidict/tests/multidict-pure-python.pickle.2) | bin | 71 -> 71 bytes | |||
-rw-r--r-- | contrib/python/multidict/tests/multidict-py.pickle.3 (renamed from contrib/python/multidict/tests/multidict-pure-python.pickle.3) | bin | 71 -> 71 bytes | |||
-rw-r--r-- | contrib/python/multidict/tests/multidict-py.pickle.4 (renamed from contrib/python/multidict/tests/multidict-pure-python.pickle.4) | bin | 74 -> 74 bytes | |||
-rw-r--r-- | contrib/python/multidict/tests/multidict-py.pickle.5 (renamed from contrib/python/multidict/tests/multidict-pure-python.pickle.5) | bin | 74 -> 74 bytes | |||
-rw-r--r-- | contrib/python/multidict/tests/test_circular_imports.py | 12 | ||||
-rw-r--r-- | contrib/python/multidict/tests/test_multidict.py | 24 | ||||
-rw-r--r-- | contrib/python/multidict/tests/test_multidict_benchmarks.py | 12 | ||||
-rw-r--r-- | contrib/python/multidict/tests/test_mutable_multidict.py | 91 | ||||
-rw-r--r-- | contrib/python/multidict/tests/test_types.py | 3 | ||||
-rw-r--r-- | contrib/python/multidict/tests/test_update.py | 29 |
43 files changed, 152 insertions, 25 deletions
diff --git a/contrib/python/multidict/tests/cimultidict-c-extension.pickle.0 b/contrib/python/multidict/tests/cimultidict-c.pickle.0 index 7b2ed008451..7b2ed008451 100644 --- a/contrib/python/multidict/tests/cimultidict-c-extension.pickle.0 +++ b/contrib/python/multidict/tests/cimultidict-c.pickle.0 diff --git a/contrib/python/multidict/tests/cimultidict-c-extension.pickle.1 b/contrib/python/multidict/tests/cimultidict-c.pickle.1 Binary files differindex 225458ba299..225458ba299 100644 --- a/contrib/python/multidict/tests/cimultidict-c-extension.pickle.1 +++ b/contrib/python/multidict/tests/cimultidict-c.pickle.1 diff --git a/contrib/python/multidict/tests/cimultidict-c-extension.pickle.2 b/contrib/python/multidict/tests/cimultidict-c.pickle.2 Binary files differindex d33600e615a..d33600e615a 100644 --- a/contrib/python/multidict/tests/cimultidict-c-extension.pickle.2 +++ b/contrib/python/multidict/tests/cimultidict-c.pickle.2 diff --git a/contrib/python/multidict/tests/cimultidict-c-extension.pickle.3 b/contrib/python/multidict/tests/cimultidict-c.pickle.3 Binary files differindex cbb8624db07..cbb8624db07 100644 --- a/contrib/python/multidict/tests/cimultidict-c-extension.pickle.3 +++ b/contrib/python/multidict/tests/cimultidict-c.pickle.3 diff --git a/contrib/python/multidict/tests/cimultidict-c-extension.pickle.4 b/contrib/python/multidict/tests/cimultidict-c.pickle.4 Binary files differindex 1f5164ca37b..1f5164ca37b 100644 --- a/contrib/python/multidict/tests/cimultidict-c-extension.pickle.4 +++ b/contrib/python/multidict/tests/cimultidict-c.pickle.4 diff --git a/contrib/python/multidict/tests/cimultidict-c-extension.pickle.5 b/contrib/python/multidict/tests/cimultidict-c.pickle.5 Binary files differindex 11bf552c436..11bf552c436 100644 --- a/contrib/python/multidict/tests/cimultidict-c-extension.pickle.5 +++ b/contrib/python/multidict/tests/cimultidict-c.pickle.5 diff --git a/contrib/python/multidict/tests/cimultidict-pure-python.pickle.0 b/contrib/python/multidict/tests/cimultidict-py.pickle.0 index bd39b6db202..bd39b6db202 100644 --- a/contrib/python/multidict/tests/cimultidict-pure-python.pickle.0 +++ b/contrib/python/multidict/tests/cimultidict-py.pickle.0 diff --git a/contrib/python/multidict/tests/cimultidict-pure-python.pickle.1 b/contrib/python/multidict/tests/cimultidict-py.pickle.1 Binary files differindex 866003d26ca..866003d26ca 100644 --- a/contrib/python/multidict/tests/cimultidict-pure-python.pickle.1 +++ b/contrib/python/multidict/tests/cimultidict-py.pickle.1 diff --git a/contrib/python/multidict/tests/cimultidict-pure-python.pickle.2 b/contrib/python/multidict/tests/cimultidict-py.pickle.2 Binary files differindex c9e43fef9c9..c9e43fef9c9 100644 --- a/contrib/python/multidict/tests/cimultidict-pure-python.pickle.2 +++ b/contrib/python/multidict/tests/cimultidict-py.pickle.2 diff --git a/contrib/python/multidict/tests/cimultidict-pure-python.pickle.3 b/contrib/python/multidict/tests/cimultidict-py.pickle.3 Binary files differindex 821659fe0c5..821659fe0c5 100644 --- a/contrib/python/multidict/tests/cimultidict-pure-python.pickle.3 +++ b/contrib/python/multidict/tests/cimultidict-py.pickle.3 diff --git a/contrib/python/multidict/tests/cimultidict-pure-python.pickle.4 b/contrib/python/multidict/tests/cimultidict-py.pickle.4 Binary files differindex a17c6e9b731..a17c6e9b731 100644 --- a/contrib/python/multidict/tests/cimultidict-pure-python.pickle.4 +++ b/contrib/python/multidict/tests/cimultidict-py.pickle.4 diff --git a/contrib/python/multidict/tests/cimultidict-pure-python.pickle.5 b/contrib/python/multidict/tests/cimultidict-py.pickle.5 Binary files differindex 479bfe3a5d3..479bfe3a5d3 100644 --- a/contrib/python/multidict/tests/cimultidict-pure-python.pickle.5 +++ b/contrib/python/multidict/tests/cimultidict-py.pickle.5 diff --git a/contrib/python/multidict/tests/conftest.py b/contrib/python/multidict/tests/conftest.py index a37f58f2d1f..dfc1a6703cd 100644 --- a/contrib/python/multidict/tests/conftest.py +++ b/contrib/python/multidict/tests/conftest.py @@ -39,7 +39,7 @@ class MultidictImplementation: @cached_property def tag(self) -> str: """Return a text representation of the pure-python attribute.""" - return "pure-python" if self.is_pure_python else "c-extension" + return "py" if self.is_pure_python else "c" @cached_property def imported_module(self) -> ModuleType: @@ -49,7 +49,7 @@ class MultidictImplementation: def __str__(self) -> str: """Render the implementation facade instance as a string.""" - return f"{self.tag}-module" + return self.tag @pytest.fixture( @@ -79,7 +79,7 @@ def multidict_module( @pytest.fixture( scope="session", params=("MultiDict", "CIMultiDict"), - ids=("case-sensitive", "case-insensitive"), + ids=("cs", "ci"), ) def any_multidict_class_name(request: pytest.FixtureRequest) -> str: """Return a class name of a mutable multidict implementation.""" diff --git a/contrib/python/multidict/tests/istr-c-extension.pickle.0 b/contrib/python/multidict/tests/istr-c.pickle.0 index 2be573802a5..2be573802a5 100644 --- a/contrib/python/multidict/tests/istr-c-extension.pickle.0 +++ b/contrib/python/multidict/tests/istr-c.pickle.0 diff --git a/contrib/python/multidict/tests/istr-c-extension.pickle.1 b/contrib/python/multidict/tests/istr-c.pickle.1 Binary files differindex 206775444b5..206775444b5 100644 --- a/contrib/python/multidict/tests/istr-c-extension.pickle.1 +++ b/contrib/python/multidict/tests/istr-c.pickle.1 diff --git a/contrib/python/multidict/tests/istr-c-extension.pickle.2 b/contrib/python/multidict/tests/istr-c.pickle.2 Binary files differindex 5c038d23faf..5c038d23faf 100644 --- a/contrib/python/multidict/tests/istr-c-extension.pickle.2 +++ b/contrib/python/multidict/tests/istr-c.pickle.2 diff --git a/contrib/python/multidict/tests/istr-c-extension.pickle.3 b/contrib/python/multidict/tests/istr-c.pickle.3 Binary files differindex a9184bb4c32..a9184bb4c32 100644 --- a/contrib/python/multidict/tests/istr-c-extension.pickle.3 +++ b/contrib/python/multidict/tests/istr-c.pickle.3 diff --git a/contrib/python/multidict/tests/istr-c-extension.pickle.4 b/contrib/python/multidict/tests/istr-c.pickle.4 Binary files differindex d6c52d24491..d6c52d24491 100644 --- a/contrib/python/multidict/tests/istr-c-extension.pickle.4 +++ b/contrib/python/multidict/tests/istr-c.pickle.4 diff --git a/contrib/python/multidict/tests/istr-c-extension.pickle.5 b/contrib/python/multidict/tests/istr-c.pickle.5 Binary files differindex fce4bc01efc..fce4bc01efc 100644 --- a/contrib/python/multidict/tests/istr-c-extension.pickle.5 +++ b/contrib/python/multidict/tests/istr-c.pickle.5 diff --git a/contrib/python/multidict/tests/istr-pure-python.pickle.0 b/contrib/python/multidict/tests/istr-py.pickle.0 index 9e3f0a2a6b7..9e3f0a2a6b7 100644 --- a/contrib/python/multidict/tests/istr-pure-python.pickle.0 +++ b/contrib/python/multidict/tests/istr-py.pickle.0 diff --git a/contrib/python/multidict/tests/istr-pure-python.pickle.1 b/contrib/python/multidict/tests/istr-py.pickle.1 Binary files differindex 88b7a9d434a..88b7a9d434a 100644 --- a/contrib/python/multidict/tests/istr-pure-python.pickle.1 +++ b/contrib/python/multidict/tests/istr-py.pickle.1 diff --git a/contrib/python/multidict/tests/istr-pure-python.pickle.2 b/contrib/python/multidict/tests/istr-py.pickle.2 Binary files differindex 9f17e5997e7..9f17e5997e7 100644 --- a/contrib/python/multidict/tests/istr-pure-python.pickle.2 +++ b/contrib/python/multidict/tests/istr-py.pickle.2 diff --git a/contrib/python/multidict/tests/istr-pure-python.pickle.3 b/contrib/python/multidict/tests/istr-py.pickle.3 Binary files differindex 09f70c0ae81..09f70c0ae81 100644 --- a/contrib/python/multidict/tests/istr-pure-python.pickle.3 +++ b/contrib/python/multidict/tests/istr-py.pickle.3 diff --git a/contrib/python/multidict/tests/istr-pure-python.pickle.4 b/contrib/python/multidict/tests/istr-py.pickle.4 Binary files differindex d092a4eb550..d092a4eb550 100644 --- a/contrib/python/multidict/tests/istr-pure-python.pickle.4 +++ b/contrib/python/multidict/tests/istr-py.pickle.4 diff --git a/contrib/python/multidict/tests/istr-pure-python.pickle.5 b/contrib/python/multidict/tests/istr-py.pickle.5 Binary files differindex b8f03af6562..b8f03af6562 100644 --- a/contrib/python/multidict/tests/istr-pure-python.pickle.5 +++ b/contrib/python/multidict/tests/istr-py.pickle.5 diff --git a/contrib/python/multidict/tests/multidict-c-extension.pickle.0 b/contrib/python/multidict/tests/multidict-c.pickle.0 index eb979fcf725..eb979fcf725 100644 --- a/contrib/python/multidict/tests/multidict-c-extension.pickle.0 +++ b/contrib/python/multidict/tests/multidict-c.pickle.0 diff --git a/contrib/python/multidict/tests/multidict-c-extension.pickle.1 b/contrib/python/multidict/tests/multidict-c.pickle.1 Binary files differindex a4f211d7b1b..a4f211d7b1b 100644 --- a/contrib/python/multidict/tests/multidict-c-extension.pickle.1 +++ b/contrib/python/multidict/tests/multidict-c.pickle.1 diff --git a/contrib/python/multidict/tests/multidict-c-extension.pickle.2 b/contrib/python/multidict/tests/multidict-c.pickle.2 Binary files differindex b4563f879d0..b4563f879d0 100644 --- a/contrib/python/multidict/tests/multidict-c-extension.pickle.2 +++ b/contrib/python/multidict/tests/multidict-c.pickle.2 diff --git a/contrib/python/multidict/tests/multidict-c-extension.pickle.3 b/contrib/python/multidict/tests/multidict-c.pickle.3 Binary files differindex 415960a3eed..415960a3eed 100644 --- a/contrib/python/multidict/tests/multidict-c-extension.pickle.3 +++ b/contrib/python/multidict/tests/multidict-c.pickle.3 diff --git a/contrib/python/multidict/tests/multidict-c-extension.pickle.4 b/contrib/python/multidict/tests/multidict-c.pickle.4 Binary files differindex 00ef17c3f7f..00ef17c3f7f 100644 --- a/contrib/python/multidict/tests/multidict-c-extension.pickle.4 +++ b/contrib/python/multidict/tests/multidict-c.pickle.4 diff --git a/contrib/python/multidict/tests/multidict-c-extension.pickle.5 b/contrib/python/multidict/tests/multidict-c.pickle.5 Binary files differindex 2c4ae0a0d38..2c4ae0a0d38 100644 --- a/contrib/python/multidict/tests/multidict-c-extension.pickle.5 +++ b/contrib/python/multidict/tests/multidict-c.pickle.5 diff --git a/contrib/python/multidict/tests/multidict-pure-python.pickle.0 b/contrib/python/multidict/tests/multidict-py.pickle.0 index e91023ecf97..e91023ecf97 100644 --- a/contrib/python/multidict/tests/multidict-pure-python.pickle.0 +++ b/contrib/python/multidict/tests/multidict-py.pickle.0 diff --git a/contrib/python/multidict/tests/multidict-pure-python.pickle.1 b/contrib/python/multidict/tests/multidict-py.pickle.1 Binary files differindex acce9bf7939..acce9bf7939 100644 --- a/contrib/python/multidict/tests/multidict-pure-python.pickle.1 +++ b/contrib/python/multidict/tests/multidict-py.pickle.1 diff --git a/contrib/python/multidict/tests/multidict-pure-python.pickle.2 b/contrib/python/multidict/tests/multidict-py.pickle.2 Binary files differindex 900446ad8da..900446ad8da 100644 --- a/contrib/python/multidict/tests/multidict-pure-python.pickle.2 +++ b/contrib/python/multidict/tests/multidict-py.pickle.2 diff --git a/contrib/python/multidict/tests/multidict-pure-python.pickle.3 b/contrib/python/multidict/tests/multidict-py.pickle.3 Binary files differindex 9b9073515a7..9b9073515a7 100644 --- a/contrib/python/multidict/tests/multidict-pure-python.pickle.3 +++ b/contrib/python/multidict/tests/multidict-py.pickle.3 diff --git a/contrib/python/multidict/tests/multidict-pure-python.pickle.4 b/contrib/python/multidict/tests/multidict-py.pickle.4 Binary files differindex db363f8d3c3..db363f8d3c3 100644 --- a/contrib/python/multidict/tests/multidict-pure-python.pickle.4 +++ b/contrib/python/multidict/tests/multidict-py.pickle.4 diff --git a/contrib/python/multidict/tests/multidict-pure-python.pickle.5 b/contrib/python/multidict/tests/multidict-py.pickle.5 Binary files differindex 7dc772d58fb..7dc772d58fb 100644 --- a/contrib/python/multidict/tests/multidict-pure-python.pickle.5 +++ b/contrib/python/multidict/tests/multidict-py.pickle.5 diff --git a/contrib/python/multidict/tests/test_circular_imports.py b/contrib/python/multidict/tests/test_circular_imports.py index f6ea323ee22..75741388b0b 100644 --- a/contrib/python/multidict/tests/test_circular_imports.py +++ b/contrib/python/multidict/tests/test_circular_imports.py @@ -82,8 +82,10 @@ def test_no_warnings(import_path: str) -> None: # fmt: off sys.executable, "-I", - "-W", "error", - "-c", f"import {import_path!s}", + "-W", + "error", + "-c", + f"import {import_path!s}", # fmt: on ) @@ -99,8 +101,10 @@ def test_c_extension_preferred_by_default(monkeypatch: pytest.MonkeyPatch) -> No # fmt: off sys.executable, "-I", - "-W", "error", - "-c", "import multidict; raise SystemExit(int(" + "-W", + "error", + "-c", + "import multidict; raise SystemExit(int(" "multidict.istr.__module__ != 'multidict._multidict' " "or multidict.USE_EXTENSIONS is not True))", # fmt: on diff --git a/contrib/python/multidict/tests/test_multidict.py b/contrib/python/multidict/tests/test_multidict.py index d1539fb45d2..eec0b862cd6 100644 --- a/contrib/python/multidict/tests/test_multidict.py +++ b/contrib/python/multidict/tests/test_multidict.py @@ -58,7 +58,7 @@ def chained_callable( @pytest.fixture -def cls( # type: ignore[misc] +def cls( request: pytest.FixtureRequest, multidict_module: ModuleType, ) -> Callable[..., MultiMapping[int | str] | MutableMultiMapping[int | str]]: @@ -708,7 +708,7 @@ class TestMultiDict(BaseMultiDictTest): ("MultiDict", "MultiDictProxy"), ], ) - def cls( # type: ignore[misc] + def cls( self, request: pytest.FixtureRequest, multidict_module: ModuleType, @@ -800,7 +800,7 @@ class TestCIMultiDict(BaseMultiDictTest): ("CIMultiDict", "CIMultiDictProxy"), ], ) - def cls( # type: ignore[misc] + def cls( self, request: pytest.FixtureRequest, multidict_module: ModuleType, @@ -1093,17 +1093,19 @@ class TestCIMultiDict(BaseMultiDictTest): assert arg & d.items() == expected def test_items_case_insensitive_or(self, cls: type[CIMultiDict[str]]) -> None: - d = cls([("KEY", "one")]) + d = cls([("K", "v"), ("KEY", "one")]) assert d.items() | {("key", "one"), ("other", "two")} == { + ("K", "v"), ("KEY", "one"), ("other", "two"), } def test_items_case_insensitive_ror(self, cls: type[CIMultiDict[str]]) -> None: - d = cls([("KEY", "one"), ("KEY2", "three")]) + d = cls([("K", "v"), ("KEY", "one"), ("KEY2", "three")]) assert [("key", "one"), ("other", "two")] | d.items() == { + ("K", "v"), ("key", "one"), ("other", "two"), ("KEY2", "three"), @@ -1333,13 +1335,19 @@ def test_view_direct_instantiation_segfault() -> None: This test only applies to the C extension implementation. """ # Test that _ItemsView cannot be instantiated directly - with pytest.raises(TypeError, match="cannot create '.*_ItemsView' instances directly"): + with pytest.raises( + TypeError, match="cannot create '.*_ItemsView' instances directly" + ): multidict._ItemsView() # type: ignore[attr-defined] # Test that _KeysView cannot be instantiated directly - with pytest.raises(TypeError, match="cannot create '.*_KeysView' instances directly"): + with pytest.raises( + TypeError, match="cannot create '.*_KeysView' instances directly" + ): multidict._KeysView() # type: ignore[attr-defined] # Test that _ValuesView cannot be instantiated directly - with pytest.raises(TypeError, match="cannot create '.*_ValuesView' instances directly"): + with pytest.raises( + TypeError, match="cannot create '.*_ValuesView' instances directly" + ): multidict._ValuesView() # type: ignore[attr-defined] diff --git a/contrib/python/multidict/tests/test_multidict_benchmarks.py b/contrib/python/multidict/tests/test_multidict_benchmarks.py index b5cc193c6af..b27041493ba 100644 --- a/contrib/python/multidict/tests/test_multidict_benchmarks.py +++ b/contrib/python/multidict/tests/test_multidict_benchmarks.py @@ -261,7 +261,8 @@ def test_multidict_getall_str_hit( @benchmark def _run() -> None: - md.getall("key3") + for i in range(30): + md.getall("key3") def test_multidict_getall_str_miss( @@ -273,7 +274,8 @@ def test_multidict_getall_str_miss( @benchmark def _run() -> None: - md.getall("miss", ()) + for i in range(30): + md.getall("miss", ()) def test_cimultidict_getall_istr_hit( @@ -287,7 +289,8 @@ def test_cimultidict_getall_istr_hit( @benchmark def _run() -> None: - md.getall(all_istr) + for i in range(30): + md.getall(all_istr) def test_cimultidict_getall_istr_miss( @@ -301,7 +304,8 @@ def test_cimultidict_getall_istr_miss( @benchmark def _run() -> None: - md.getall(miss_istr, ()) + for i in range(30): + md.getall(miss_istr, ()) def test_multidict_fetch( diff --git a/contrib/python/multidict/tests/test_mutable_multidict.py b/contrib/python/multidict/tests/test_mutable_multidict.py index 74bbd697fee..d6fe42fc255 100644 --- a/contrib/python/multidict/tests/test_mutable_multidict.py +++ b/contrib/python/multidict/tests/test_mutable_multidict.py @@ -34,8 +34,7 @@ class TestMutableMultiDict: d = case_sensitive_multidict_class([("key", "one"), ("key", "two")]) expected = ( - f"<{case_sensitive_multidict_class.__name__}" - "('key': 'one', 'key': 'two')>" + f"<{case_sensitive_multidict_class.__name__}('key': 'one', 'key': 'two')>" ) assert str(d) == expected @@ -174,6 +173,21 @@ class TestMutableMultiDict: d.add("key", "val2") assert ("key", "val2") == d.popitem() + assert len(d) == 1 + assert [("key", "val1")] == list(d.items()) + + def test_popitem2( + self, + case_sensitive_multidict_class: type[CIMultiDict[str]], + ) -> None: + d = case_sensitive_multidict_class() + d.add("key", "val1") + d.add("key", "val2") + d.add("key2", "val3") + + del d["key2"] # make dummy at the end + + assert ("key", "val2") == d.popitem() assert [("key", "val1")] == list(d.items()) def test_popitem_empty_multidict( @@ -365,6 +379,56 @@ class TestMutableMultiDict: with pytest.raises(TypeError): d.update("foo", "bar") # type: ignore[arg-type, call-arg] + def test_repr_with_dummy( + self, case_sensitive_multidict_class: type[MultiDict[int]] + ) -> None: + d = case_sensitive_multidict_class({"a": 1, "b": 2, "c": 3}) + cls = d.__class__.__name__ + del d["b"] # make a dummy entry + assert repr(d) == f"<{cls}('a': 1, 'c': 3)>" + + def test_items_repr_with_dummy( + self, case_sensitive_multidict_class: type[MultiDict[int]] + ) -> None: + d = case_sensitive_multidict_class({"a": 1, "b": 2, "c": 3}) + del d["b"] # make a dummy entry + cls = d.items().__class__.__name__ + assert repr(d.items()) == f"<{cls}('a': 1, 'c': 3)>" + + def test_keys_repr_with_dummy( + self, case_sensitive_multidict_class: type[MultiDict[int]] + ) -> None: + d = case_sensitive_multidict_class({"a": 1, "b": 2, "c": 3}) + del d["b"] # make a dummy entry + cls = d.keys().__class__.__name__ + assert repr(d.keys()) == f"<{cls}('a', 'c')>" + + def test_values_repr_with_dummy( + self, case_sensitive_multidict_class: type[MultiDict[int]] + ) -> None: + d = case_sensitive_multidict_class({"a": 1, "b": 2, "c": 3}) + del d["b"] # make a dummy entry + cls = d.values().__class__.__name__ + assert repr(d.values()) == f"<{cls}(1, 3)>" + + def test_huge_md( + self, + case_sensitive_multidict_class: type[MultiDict[int]], + ) -> None: + size = 1 << 16 + d = case_sensitive_multidict_class((str(i), i) for i in range(size)) + assert d[str(size // 2)] == size // 2 + + def test_create_from_proxy( + self, + case_sensitive_multidict_class: type[MultiDict[int]], + case_sensitive_multidict_proxy_class: type[MultiDictProxy[int]], + ) -> None: + d = case_sensitive_multidict_class({"a": 1, "b": 2, "c": 3}) + p = case_sensitive_multidict_proxy_class(d) + d2 = case_sensitive_multidict_class(p) + assert d2 == d + class TestCIMutableMultiDict: def test_getall( @@ -429,8 +493,7 @@ class TestCIMutableMultiDict: d = case_insensitive_multidict_class([("KEY", "one"), ("KEY", "two")]) expected = ( - f"<{case_insensitive_multidict_class.__name__}" - "('KEY': 'one', 'KEY': 'two')>" + f"<{case_insensitive_multidict_class.__name__}('KEY': 'one', 'KEY': 'two')>" ) assert str(d) == expected @@ -730,3 +793,23 @@ class TestCIMutableMultiDict: k, v = d.popitem() assert type(k) is case_insensitive_str_class + + def test_issue_1195( + self, case_insensitive_multidict_class: type[CIMultiDict[bytes]] + ) -> None: + md = case_insensitive_multidict_class( + { + "User-Agent": b"Bacon/1.0", + "Cookie": b"valued-visitor=yes;foo=bar", + "X-Bar": b"Foo", + "X-Foo": b"Bar", + "Referer": b"https://httpie.org/", + } + ) + + md2 = md.copy() + + md.popone("User-Agent") + assert md.keys() == md2.keys() - {"User-Agent"} + md.update([("User-Agent", b"Bacon/1.0")]) + assert md.keys() == md2.keys() diff --git a/contrib/python/multidict/tests/test_types.py b/contrib/python/multidict/tests/test_types.py index 6339006b68f..65f83f66a2a 100644 --- a/contrib/python/multidict/tests/test_types.py +++ b/contrib/python/multidict/tests/test_types.py @@ -75,8 +75,7 @@ def test_create_cimultidict_proxy_from_nonmultidict( with pytest.raises( TypeError, match=( - "ctor requires CIMultiDict or CIMultiDictProxy instance, " - "not <class 'dict'>" + "ctor requires CIMultiDict or CIMultiDictProxy instance, not <class 'dict'>" ), ): multidict_module.CIMultiDictProxy({}) diff --git a/contrib/python/multidict/tests/test_update.py b/contrib/python/multidict/tests/test_update.py index 46ab30a08bd..a1d8814a3b2 100644 --- a/contrib/python/multidict/tests/test_update.py +++ b/contrib/python/multidict/tests/test_update.py @@ -119,3 +119,32 @@ def test_update_deque_arg_and_kwds(any_multidict_class: _MD_Classes) -> None: obj.update(arg, b=2) assert list(obj.items()) == [("a", 1), ("b", 2)] assert arg == deque([("a", 1)]) + + +def test_update_with_second_md(any_multidict_class: _MD_Classes) -> None: + obj1 = any_multidict_class() + obj2 = any_multidict_class([("a", 2)]) + obj1.update(obj2) + assert obj1 == obj2 + + +def test_compact_after_deletion(any_multidict_class: _MD_Classes) -> None: + # multidict is resized when it is filled up to 2/3 of the index table size + NUM = 16 * 2 // 3 + obj = any_multidict_class((str(i), i) for i in range(NUM - 1)) + # keys.usable == 0 + # delete items, it adds empty entries but not reduce keys.usable + for i in range(5): + del obj[str(i)] + # adding an entry requres keys resizing to remove empty entries + dct = {str(i): i for i in range(100, 105)} + obj.extend(dct) + assert obj == {str(i): i for i in range(5, NUM - 1)} | dct + + +def test_update_with_empty_slots(any_multidict_class: _MD_Classes) -> None: + # multidict is resized when it is filled up to 2/3 of the index table size + obj = any_multidict_class([("0", 0), ("1", 1), ("1", 2)]) + del obj["0"] + obj.update({"1": 100}) + assert obj == {"1": 100} |