|
2 | 2 |
|
3 | 3 | import gc |
4 | 4 | import operator |
| 5 | +import platform |
5 | 6 | import sys |
6 | 7 | import weakref |
7 | 8 | from collections import deque |
|
22 | 23 | ) |
23 | 24 |
|
24 | 25 | _T = TypeVar("_T") |
| 26 | +IS_PYPY = platform.python_implementation() == "PyPy" |
25 | 27 |
|
26 | 28 |
|
27 | 29 | def chained_callable( |
@@ -1272,3 +1274,38 @@ def test_convert_multidict_to_cimultidict_eq( |
1272 | 1274 | ) == case_insensitive_multidict_class( |
1273 | 1275 | [("H1", "header1"), ("H2", "header2"), ("H3", "header3")] |
1274 | 1276 | ) |
| 1277 | + |
| 1278 | + |
| 1279 | +@pytest.mark.skipif(IS_PYPY, reason="getrefcount is not supported on PyPy") |
| 1280 | +def test_extend_does_not_alter_refcount( |
| 1281 | + case_sensitive_multidict_class: type[MultiDict[str]], |
| 1282 | +) -> None: |
| 1283 | + """Test that extending a MultiDict with a MultiDict does not alter the refcount of the original.""" |
| 1284 | + original = case_sensitive_multidict_class([("h1", "header1")]) |
| 1285 | + new = case_sensitive_multidict_class([("h2", "header2")]) |
| 1286 | + original_refcount = sys.getrefcount(original) |
| 1287 | + new.extend(original) |
| 1288 | + assert sys.getrefcount(original) == original_refcount |
| 1289 | + |
| 1290 | + |
| 1291 | +@pytest.mark.skipif(IS_PYPY, reason="getrefcount is not supported on PyPy") |
| 1292 | +def test_update_does_not_alter_refcount( |
| 1293 | + case_sensitive_multidict_class: type[MultiDict[str]], |
| 1294 | +) -> None: |
| 1295 | + """Test that updating a MultiDict with a MultiDict does not alter the refcount of the original.""" |
| 1296 | + original = case_sensitive_multidict_class([("h1", "header1")]) |
| 1297 | + new = case_sensitive_multidict_class([("h2", "header2")]) |
| 1298 | + original_refcount = sys.getrefcount(original) |
| 1299 | + new.update(original) |
| 1300 | + assert sys.getrefcount(original) == original_refcount |
| 1301 | + |
| 1302 | + |
| 1303 | +@pytest.mark.skipif(IS_PYPY, reason="getrefcount is not supported on PyPy") |
| 1304 | +def test_init_does_not_alter_refcount( |
| 1305 | + case_sensitive_multidict_class: type[MultiDict[str]], |
| 1306 | +) -> None: |
| 1307 | + """Test that initializing a MultiDict with a MultiDict does not alter the refcount of the original.""" |
| 1308 | + original = case_sensitive_multidict_class([("h1", "header1")]) |
| 1309 | + original_refcount = sys.getrefcount(original) |
| 1310 | + case_sensitive_multidict_class(original) |
| 1311 | + assert sys.getrefcount(original) == original_refcount |
0 commit comments