1import pytest 2from _pytest.store import Store 3from _pytest.store import StoreKey 4 5 6def test_store() -> None: 7 store = Store() 8 9 key1 = StoreKey[str]() 10 key2 = StoreKey[int]() 11 12 # Basic functionality - single key. 13 assert key1 not in store 14 store[key1] = "hello" 15 assert key1 in store 16 assert store[key1] == "hello" 17 assert store.get(key1, None) == "hello" 18 store[key1] = "world" 19 assert store[key1] == "world" 20 # Has correct type (no mypy error). 21 store[key1] + "string" 22 23 # No interaction with another key. 24 assert key2 not in store 25 assert store.get(key2, None) is None 26 with pytest.raises(KeyError): 27 store[key2] 28 with pytest.raises(KeyError): 29 del store[key2] 30 store[key2] = 1 31 assert store[key2] == 1 32 # Has correct type (no mypy error). 33 store[key2] + 20 34 del store[key1] 35 with pytest.raises(KeyError): 36 del store[key1] 37 with pytest.raises(KeyError): 38 store[key1] 39 40 # setdefault 41 store[key1] = "existing" 42 assert store.setdefault(key1, "default") == "existing" 43 assert store[key1] == "existing" 44 key_setdefault = StoreKey[bytes]() 45 assert store.setdefault(key_setdefault, b"default") == b"default" 46 assert store[key_setdefault] == b"default" 47 48 # Can't accidentally add attributes to store object itself. 49 with pytest.raises(AttributeError): 50 store.foo = "nope" # type: ignore[attr-defined] 51 52 # No interaction with anoter store. 53 store2 = Store() 54 key3 = StoreKey[int]() 55 assert key2 not in store2 56 store2[key2] = 100 57 store2[key3] = 200 58 assert store2[key2] + store2[key3] == 300 59 assert store[key2] == 1 60 assert key3 not in store 61