def run_joker(examples): for s in examples: # make sure we can parse it parse(s) # now alter one letter for i in range(len(s)): s2 = replace_one(s, i, '~') try: parse(s2) except ContractSyntaxError as e: detected = e.where.col - 1 displacement = i - detected # if displacement < 0: # print displacement # print e assert displacement >= 0 value = displacement * 1.0 / len(s) if displacement > 0: print(e) # assert False yield value
def test_equality_rvalue(): c1 = parse('N+1') c2 = parse('N+2') c3 = parse('P+1') assert c1 == c1 assert c2 == c2 assert c3 == c3 assert c1 != c2 assert c1 != c3 assert c2 != c3
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)
def test_value_frozen_at_parsetime(): p = 2 c = parse('$p') p = 3 check_isinstance(c, EqualTo) assert c.rvalue.value == 2 c = parse('$p') check_isinstance(c, EqualTo) assert c.rvalue.value == 3
def test_check(): p = 2 q = 4 c = parse('list[$p](>$q)') c.check([5, 10]) c.fail([5, 3])
def test_holds_reference(): class Foo(object): pass c = parse('$Foo') check_isinstance(c, CheckType) assert c.types == Foo
def __init__(self, memberName, default, contract, readOnly, privateMemberName, memberDelegate): """ :type memberName: str :type readOnly: bool :type privateMemberName: str|None :type memberDelegate: IMemberDelegate """ if privateMemberName is None: privateMemberName = '_%s' % memberName if contract is not None: contract = parse(contract) self._memberName = memberName self._default = default self._contract = contract self._readOnly = readOnly self._privateMemberName = privateMemberName self._memberDelegate = memberDelegate
def test_as_decorator_with_kwargs(self): from contracts import parse @new_contract def less_than(value, thresh=1): return value < thresh p = parse('less_than(thresh=2)') p.check(1) p.fail(2)
def test_as_decorator(self): @new_contract def even(x): return x % 2 == 0 from contracts import parse p = parse('even') p.check(2) p.check(4) p.fail(3) p.check(2.0)
def test_as_decorator_with_args_and_kwargs(self): from contracts import parse @new_contract def less_than_all(value, a, b, c=1, d=5): return value < min(a, b, c, d) p = parse('less_than_all(3, 4, c=5)') p.check(2) p.fail(3)
def test_as_decorator_with_args(self): from contracts import parse @new_contract def greater_than(value, thresh): return value > thresh p = parse('greater_than(5)') p.check(6) p.fail(5)
def test_as_decorator_multiple(self): @new_contract @contract(x='int') def even2(x): return x % 2 == 0 from contracts import parse p = parse('even2') p.check(2) p.fail(3) p.fail(2.0) # now fails
def check_contract_pickable(contract): c = parse(contract) assert isinstance(c, Contract) try: s = pickle.dumps(c) c2 = pickle.loads(s) except TypeError as e: msg = "Could not pickle contract.\n" msg += "- string: %s\n" % c msg += "- repr: %r\n" % c msg += "Exception: %s" % e raise Exception(msg) assert c == c2
def check_contract_pickable(contract): c = parse(contract) assert isinstance(c, Contract) try: s = pickle.dumps(c) c2 = pickle.loads(s) except TypeError as e: msg = 'Could not pickle contract.\n' msg += '- string: %s\n' % c msg += '- repr: %r\n' % c msg += 'Exception: %s' % e raise Exception(msg) assert c == c2
def test_parse_1(self): contract = parse('>0') assert isinstance(contract, Contract) contract.check(2) self.assertRaises(ContractNotRespected, contract.check, 'ciao')
def test_invalid(): with raises(ContractException): parse('$not_found')
def test_algebra(): p = 2 c = parse('list[$p]') assert c.length_contract.rvalue.value == 2
def test_invalid(): parse('$not_found')
def test_raw_parse(): p = 2 c = parse('$p') assert c.rvalue.value == 2
def test_variables(self): for s in ['a', 'b', 'c', 'd', 'x', 'y']: self.assertEqual(parse(s), BindVariable(s, object)) U = s.upper() self.assertEqual(parse(U), BindVariable(U, int))
def test_holds_reference(): class Foo(object): pass assert parse('$Foo').rvalue.value is Foo
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),...
def test_binding_vs_ref2(self): self.assertEqual(parse('N'), BindVariable('N', int))
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)
def test_binding_vs_ref(): assert parse('list[N]') == List(BindVariable('N', int), None)
def test_binding_vs_ref2(): assert parse('N') == BindVariable('N', int)
def test_value_frozen_at_parsetime(): p = 2 c = parse('$p') p = 3 assert c.rvalue.value == 2
def test_binding_vs_ref(self): self.assertEqual(parse('list[N]'), List(BindVariable('N', int), None))
def test_parse_1(): contract = parse('>0') assert isinstance(contract, Contract) contract.check(2) with raises(ContractNotRespected): contract.check('ciao')
def test_repr_1(): contract = parse(' list[N](int), N > 0') ("%s" % contract) # => 'list[N](int),N>0' ("%r" % contract) # => And([List(BindVariable('N',int),...
def test_parse_2(): with raises(ContractSyntaxError): parse('>>')
def test_equality_contract(): c1 = parse('list[C](str),C>0') c2 = parse('list[C](str),C>0') c3 = parse('list[R](str),R>0') assert c1 == c2 assert c1 != c3
def __init__(self, name, default=None, contract=None): self.name = name self.value = default self.contract = parse(contract) if contract else None