def test_close_multiple_order(): a = MockClosable() b = MockClosable() c = MockClosable() close_multiple([a, b, c]) assert all([x.is_properly_closed for x in [a, b, c]]) assert a.relative_close_order > b.relative_close_order > c.relative_close_order
def test_resource_list_close_order(): a = MockClosable() b = MockClosable() c = MockClosable() my_list = ResourcesList(a, b, c) my_list.close() assert all([x.is_properly_closed for x in my_list.resources]) assert a.relative_close_order > b.relative_close_order > c.relative_close_order
def test_close_multiple_exceptions(): a = MockClosable() exception_1 = MockException() exception_2 = DifferentMockException() b = MockClosable(exception_on_close=exception_1) c = MockClosable() d = MockClosable(exception_on_close=exception_2) e = MockClosable() try: close_multiple([a, b, c, d, e]) except SomeCloseFailedException as last_exception: assert (d, exception_2) in last_exception.resource_close_failings assert (b, exception_1) in last_exception.resource_close_failings else: assert False, "Should have thrown" assert all([x.is_properly_closed for x in [a, b, c, d, e]]) assert a.relative_close_order > b.relative_close_order > c.relative_close_order > \ d.relative_close_order > e.relative_close_order
def test_close_nothrow_no_exception(): mock_closable = MockClosable() close_nothrow(mock_closable) assert mock_closable.is_properly_closed
def test_close_nothrow_on_exception(): with pytest.raises(MockException): MockClosable(exception_on_close=MockException()).close() mock_closable = MockClosable(exception_on_close=MockException()) close_nothrow(mock_closable) assert mock_closable.is_properly_closed
def test_iter(): a = MockClosable() b = MockClosable() c = MockClosable() for x, y in zip(ResourcesList(a, b, c), [a, b, c]): assert x == y
def multiple_mock_closables(): return [MockClosable(), MockClosable(), MockClosable(), MockClosable()]
def mock_closable(): return MockClosable()
def __init__(self): self.a = MockClosable() self.b = MockClosable() self.c = MockClosable()
def __init__(self): self.x = MyResourceOwner() self.y = MockClosable() self.z = MyResourceOwner()