示例#1
0
def test_attrrollback_unset_error() -> None:
    obj = SimpleNamespace(foo=42)
    with pytest.raises(RuntimeError, match="Catch this!"):
        with attrrollback(obj, "bar"):
            assert not hasattr(obj, "bar")
            raise RuntimeError("Catch this!")
    assert not hasattr(obj, "bar")
示例#2
0
def test_attrrollback_nop_error() -> None:
    obj = SimpleNamespace(foo=42)
    with pytest.raises(RuntimeError, match="Catch this!"):
        with attrrollback(obj, "foo"):
            assert obj.foo == 42
            raise RuntimeError("Catch this!")
    assert obj.foo == 42
示例#3
0
def test_attrrollback_no_copy_error() -> None:
    obj = SimpleNamespace(foo={"bar": [1, 2, 3], "quux": ["a", "b", "c"]})
    with pytest.raises(RuntimeError, match="Catch this!"):
        with attrrollback(obj, "foo"):
            obj.foo["bar"].append(4)
            obj.foo["quux"] = ["x", "y", "z"]
            raise RuntimeError("Catch this!")
    assert obj.foo == {"bar": [1, 2, 3, 4], "quux": ["x", "y", "z"]}
示例#4
0
def test_attrrollback_no_copy() -> None:
    obj = SimpleNamespace(foo={"bar": [1, 2, 3], "quux": ["a", "b", "c"]})
    with attrrollback(obj, "foo"):
        obj.foo["bar"].append(4)
        obj.foo["quux"] = ["x", "y", "z"]
    assert obj.foo == {"bar": [1, 2, 3, 4], "quux": ["x", "y", "z"]}
示例#5
0
def test_attrrollback_unset_modify() -> None:
    obj = SimpleNamespace(foo=42)
    with attrrollback(obj, "bar"):
        assert not hasattr(obj, "bar")
        obj.bar = [3.14]
    assert not hasattr(obj, "bar")
示例#6
0
def test_attrrollback_unset() -> None:
    obj = SimpleNamespace(foo=42)
    with attrrollback(obj, "bar"):
        assert not hasattr(obj, "bar")
    assert not hasattr(obj, "bar")
示例#7
0
def test_attrrollback_nop() -> None:
    obj = SimpleNamespace(foo=42)
    with attrrollback(obj, "foo"):
        assert obj.foo == 42
    assert obj.foo == 42
示例#8
0
def test_attrrollback_modify() -> None:
    obj = SimpleNamespace(foo=42)
    with attrrollback(obj, "foo"):
        assert obj.foo == 42
        obj.foo = [3.14]
    assert obj.foo == 42  # type: ignore[comparison-overlap]
示例#9
0
def test_attrrollback_deepcopy(copy: bool) -> None:
    obj = SimpleNamespace(foo={"bar": [1, 2, 3], "quux": ["a", "b", "c"]})
    with attrrollback(obj, "foo", copy=copy, deepcopy=True):
        obj.foo["bar"].append(4)
        obj.foo["quux"] = ["x", "y", "z"]
    assert obj.foo == {"bar": [1, 2, 3], "quux": ["a", "b", "c"]}