Skip to content

Commit

Permalink
Merge 03a0d91 into f05bd28
Browse files Browse the repository at this point in the history
  • Loading branch information
mristin committed Sep 30, 2018
2 parents f05bd28 + 03a0d91 commit a42fa2a
Showing 1 changed file with 101 additions and 0 deletions.
101 changes: 101 additions & 0 deletions tests/test_icontract.py
Original file line number Diff line number Diff line change
Expand Up @@ -1606,6 +1606,107 @@ def func(self, x: int) -> int:
"accept all possible input since the preconditions are OR'ed and no precondition implies a dummy "
"precondition which is always fulfilled.", str(type_error))

# TODO(marko): also test TestPostconditionInheritanceProperty
class TestPreconditionInheritanceProperty(unittest.TestCase):
def test_getter(self):
class SomeBase(icontract.DBC):
def __init__(self) -> None:
self.toggled = True

@property
@icontract.pre(lambda self: not self.toggled)
def some_prop(self) -> int:
return 0

class SomeClass(SomeBase):
@property
def some_prop(self) -> int:
return 0

def __repr__(self):
return self.__class__.__name__

some_inst = SomeClass()

icontract_violation_error = None # type: Optional[icontract.ViolationError]
try:
_ = some_inst.some_prop
except icontract.ViolationError as err:
icontract_violation_error = err

self.assertIsNotNone(icontract_violation_error)
self.assertEqual('not self.toggled:\n'
'self was SomeClass\n'
'self.toggled was True', str(icontract_violation_error))

# TODO(marko): test
def test_setter(self):
class SomeBase(icontract.DBC):
@property
def some_prop(self) -> int:
return 0

@some_prop.setter
@icontract.pre(lambda value: value > 0)
def some_prop(self, value: int) -> None:
pass

class SomeClass(SomeBase):
@SomeBase.some_prop.setter
def some_prop(self, value: int) -> None:
pass

def __repr__(self):
return self.__class__.__name__

some_inst = SomeClass()

icontract_violation_error = None # type: Optional[icontract.ViolationError]
try:
some_inst.some_prop = 0
except icontract.ViolationError as err:
icontract_violation_error = err

self.assertIsNotNone(icontract_violation_error)
self.assertEqual('', str(icontract_violation_error))

# TODO(marko): test
def test_deleter(self):
class SomeBase(icontract.DBC):
def __init__(self):
self.toggled = True

@property
def some_prop(self) -> int:
return 0

@some_prop.deleter
@icontract.pre(lambda self: not self.toggled)
def some_prop(self) -> None:
pass

class SomeClass(SomeBase):
def __repr__(self):
return self.__class__.__name__

@SomeBase.some_prop.deleter
def some_prop(self) -> None:
pass


some_inst = SomeClass()

icontract_violation_error = None # type: Optional[icontract.ViolationError]
try:
del some_inst.some_prop
except icontract.ViolationError as err:
icontract_violation_error = err

self.assertIsNotNone(icontract_violation_error)
self.assertEqual('not self.toggled:\n'
'self was SomeClass\n'
'self.toggled was True', str(icontract_violation_error))


class TestPreconditionInheritanceProperty(unittest.TestCase):
def test_getter_setter_deleter_valid(self):
Expand Down

0 comments on commit a42fa2a

Please sign in to comment.