Source code for contracts.testing.test_idioms

import unittest

from contracts import (check, ContractNotRespected, Contract, parse,
                       check_multiple, ContractSyntaxError, fail)


[docs]class TestIdioms(unittest.TestCase):
[docs] def test_check_1(self): res = check('tuple(int,int)', (2, 2)) assert isinstance(res, dict)
[docs] def test_check_1a(self): self.assertRaises(ValueError, check, 1, 2)
[docs] def test_parse_1(self): contract = parse('>0') assert isinstance(contract, Contract) contract.check(2) self.assertRaises(ContractNotRespected, contract.check, 'ciao')
[docs] def test_parse_2(self): self.assertRaises(ContractSyntaxError, parse, '>>')
[docs] def test_check_2(self): self.assertRaises(ContractNotRespected, check, 'tuple(int,int)', (None, 2))
[docs] def test_check_3(self): self.assertRaises(ContractSyntaxError, check, 'tuple(>>int,int)', (None, 2))
[docs] def test_check_4(self): score = (2, None) msg = 'Player score must be a tuple of 2 int.' try: check('tuple(int,int)', score, msg) except ContractNotRespected as e: s = str(e) assert msg in s else: assert False
[docs] def test_repr_1(self): contract = parse(' list[N](int), N > 0') ("%s" % contract) # => 'list[N](int),N>0' ("%r" % contract) # => And([List(BindVariable('N',int),...
[docs] def test_binding(self): context = check('list[N](str), N>0', ['a', 'b', 'c']) self.assertTrue('N' in context) self.assertTrue(context['N'] == 3)
[docs] def test_check_multiple_1(self): data = [[1, 2, 3], [4, 5, 6]] row_labels = ['first season', 'second season'] col_labels = ['Team1', 'Team2', 'Team3'] spec = [('list[C](str),C>0', col_labels), ('list[R](str),R>0', row_labels), ('list[R](list[C])', data)] check_multiple(spec) # now with description check_multiple(spec, 'I expect col_labels, row_labels, data to ' 'have coherent dimensions.') data = [[1, 2, 3], [1, 2]] spec = [('list[C](str),C>0', col_labels), ('list[R](str),R>0', row_labels), ('list[R](list[C])', data)] self.assertRaises(ContractNotRespected, check_multiple, spec) self.assertRaises(ContractNotRespected, check_multiple, spec, 'my message')
# def test_symbols(self): # from contracts import contract_expression # @UnusedImport # TODO: type
[docs] def test_equality_contract(self): c1 = parse('list[C](str),C>0') c2 = parse('list[C](str),C>0') c3 = parse('list[R](str),R>0') self.assertEqual(c1, c2) self.assertNotEqual(c1, c3)
[docs] def test_equality_rvalue(self): c1 = parse('N+1') c2 = parse('N+2') c3 = parse('P+1') self.assertEqual(c1, c1) self.assertEqual(c2, c2) self.assertEqual(c3, c3) self.assertNotEqual(c1, c2) self.assertNotEqual(c1, c3) self.assertNotEqual(c2, c3)
[docs] def test_check_context(self): check('N', 1, N=1) fail('N', 1, N=2) self.assertRaises(ContractNotRespected, check, 'N', 1, N=2) self.assertRaises(ValueError, fail, 'N', 1, N=1)
[docs] def test_check_context2(self): """ Variable names must have only one letter. """ self.assertRaises(ValueError, check, 'N', 1, NN=2) self.assertRaises(ValueError, check, 'N', 1, nn=2)