Source code for contracts.testing.test_class_contracts
from contracts import contract, new_contract, ContractNotRespected
import unittest
[docs]class ClassContractsTests(unittest.TestCase):
[docs] def test_class_contract1(self):
class Game(object):
def __init__(self, legal):
self.legal = legal
@new_contract
def legal_move1(self, move):
return move in self.legal
@contract(move='legal_move1')
def take_turn(self, move):
pass
g1 = Game([1, 2])
g1.take_turn(1)
g1.take_turn(2)
self.assertRaises(ContractNotRespected, g1.take_turn, 3)
[docs] def test_class_contract2(self):
class Game(object):
def __init__(self, legal):
self.legal = legal
@new_contract
def legal_move2(self, move):
return move in self.legal
@contract(move='legal_move2')
def take_turn(self, move):
pass
g1 = Game([1, 2])
g1.take_turn(1)
g1.take_turn(2)
self.assertRaises(ContractNotRespected, g1.take_turn, 3)
[docs] def test_class_contract3(self):
class Game(object):
def __init__(self, legal):
self.legal = legal
def legal_move(self, move):
return move in self.legal
new_contract('alegalmove', legal_move)
@contract(move='alegalmove')
def take_turn(self, move):
pass
g1 = Game([1, 2])
g1.take_turn(1)
g1.take_turn(2)
self.assertRaises(ContractNotRespected, g1.take_turn, 3)
[docs] def test_class_contract1_bad(self):
""" example of bad usage, using the contract from outside """
class Game(object):
def __init__(self, legal):
self.legal = legal
@new_contract
def legal_move4(self, move):
return move in self.legal
def go():
@contract(move='legal_move4')
def take_turn(move):
pass
take_turn(0)
self.assertRaises(ContractNotRespected, go)