forked from aio-libs/multidict
-
Notifications
You must be signed in to change notification settings - Fork 0
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
🧪 Rewire pytest fixtures avoiding import loops
This patch also refactors and reduces the duplication of the previously existing fixtures for retrieving different multidict module implementations and makes the c-extension testing controllable by a CLI option on the pytest level. Fixes aio-libs#837
- Loading branch information
Showing
35 changed files
with
889 additions
and
748 deletions.
There are no files selected for viewing
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -1,79 +1,38 @@ | ||
import copy | ||
|
||
import pytest | ||
|
||
from multidict._compat import USE_EXTENSIONS | ||
from multidict._multidict_py import CIMultiDict as PyCIMultiDict | ||
from multidict._multidict_py import CIMultiDictProxy as PyCIMultiDictProxy | ||
from multidict._multidict_py import MultiDict as PyMultiDict # noqa: E402 | ||
from multidict._multidict_py import MultiDictProxy as PyMultiDictProxy | ||
|
||
if USE_EXTENSIONS: | ||
from multidict._multidict import ( # type: ignore | ||
CIMultiDict, | ||
CIMultiDictProxy, | ||
MultiDict, | ||
MultiDictProxy, | ||
) | ||
|
||
|
||
@pytest.fixture( | ||
params=([MultiDict, CIMultiDict] if USE_EXTENSIONS else []) | ||
+ [PyMultiDict, PyCIMultiDict], | ||
ids=(["MultiDict", "CIMultiDict"] if USE_EXTENSIONS else []) | ||
+ ["PyMultiDict", "PyCIMultiDict"], | ||
) | ||
def cls(request): | ||
return request.param | ||
|
||
|
||
@pytest.fixture( | ||
params=( | ||
[(MultiDictProxy, MultiDict), (CIMultiDictProxy, CIMultiDict)] | ||
if USE_EXTENSIONS | ||
else [] | ||
) | ||
+ [(PyMultiDictProxy, PyMultiDict), (PyCIMultiDictProxy, PyCIMultiDict)], | ||
ids=(["MultiDictProxy", "CIMultiDictProxy"] if USE_EXTENSIONS else []) | ||
+ ["PyMultiDictProxy", "PyCIMultiDictProxy"], | ||
) | ||
def proxy_classes(request): | ||
return request.param | ||
|
||
|
||
def test_copy(cls): | ||
d = cls() | ||
def test_copy(multidict_class): | ||
d = multidict_class() | ||
d["foo"] = 6 | ||
d2 = d.copy() | ||
d2["foo"] = 7 | ||
assert d["foo"] == 6 | ||
assert d2["foo"] == 7 | ||
|
||
|
||
def test_copy_proxy(proxy_classes): | ||
proxy_cls, dict_cls = proxy_classes | ||
d = dict_cls() | ||
def test_copy_proxy(multidict_class, any_multidict_proxy_class): | ||
d = multidict_class() | ||
d["foo"] = 6 | ||
p = proxy_cls(d) | ||
p = any_multidict_proxy_class(d) | ||
d2 = p.copy() | ||
d2["foo"] = 7 | ||
assert d["foo"] == 6 | ||
assert p["foo"] == 6 | ||
assert d2["foo"] == 7 | ||
|
||
|
||
def test_copy_std_copy(cls): | ||
d = cls() | ||
def test_copy_std_copy(multidict_class): | ||
d = multidict_class() | ||
d["foo"] = 6 | ||
d2 = copy.copy(d) | ||
d2["foo"] = 7 | ||
assert d["foo"] == 6 | ||
assert d2["foo"] == 7 | ||
|
||
|
||
def test_ci_multidict_clone(cls): | ||
d = cls(foo=6) | ||
d2 = cls(d) | ||
def test_ci_multidict_clone(multidict_class): | ||
d = multidict_class(foo=6) | ||
d2 = multidict_class(d) | ||
d2["foo"] = 7 | ||
assert d["foo"] == 6 | ||
assert d2["foo"] == 7 |
Oops, something went wrong.