def test_eq_must_specified(self): """ `total_ordering` requires `__eq__` to be specified. """ with pytest.raises(ValueError) as ei: cmp_using(lt=lambda a, b: a < b) assert ei.value.args[0] == ( "eq must be define is order to complete ordering from " "lt, le, gt, ge.")
class TestDundersUnnamedClass(object): """ Tests for dunder attributes of unnamed classes. """ cls = cmp_using(eq=lambda a, b: a == b) def test_class(self): """ Class name and qualified name should be well behaved. """ assert self.cls.__name__ == "Comparable" if not PY2: assert self.cls.__qualname__ == "Comparable" def test_eq(self): """ __eq__ docstring and qualified name should be well behaved. """ method = self.cls.__eq__ assert method.__doc__.strip() == "Return a == b. Computed by attrs." assert method.__name__ == "__eq__" def test_ne(self): """ __ne__ docstring and qualified name should be well behaved. """ method = self.cls.__ne__ assert method.__doc__.strip() == ( "Check equality and either forward a NotImplemented or\n" " return the result negated.") assert method.__name__ == "__ne__"
def test_not_implemented_is_propagated(self): """ If the comparison function returns NotImplemented, the dunder method should too. """ C = cmp_using(eq=lambda a, b: NotImplemented if a == 1 else a == b) assert C(2) == C(2) assert C(1) != C(1)
""" Tests for methods from `attrib._cmp`. """ from __future__ import absolute_import, division, print_function import pytest from attr._cmp import cmp_using from attr._compat import PY2 # Test parameters. EqCSameType = cmp_using(eq=lambda a, b: a == b, class_name="EqCSameType") PartialOrderCSameType = cmp_using( eq=lambda a, b: a == b, lt=lambda a, b: a < b, class_name="PartialOrderCSameType", ) FullOrderCSameType = cmp_using( eq=lambda a, b: a == b, lt=lambda a, b: a < b, le=lambda a, b: a <= b, gt=lambda a, b: a > b, ge=lambda a, b: a >= b, class_name="FullOrderCSameType", ) EqCAnyType = cmp_using(eq=lambda a, b: a == b, require_same_type=False, class_name="EqCAnyType") PartialOrderCAnyType = cmp_using(