123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160 |
- # Copyright (C) Jean-Paul Calderone
- # Copyright (C) Twisted Matrix Laboratories.
- # See LICENSE for details.
- """
- Helpers for the OpenSSL test suite, largely copied from
- U{Twisted<http://twistedmatrix.com/>}.
- """
- from six import PY2
- # This is the UTF-8 encoding of the SNOWMAN unicode code point.
- NON_ASCII = b"\xe2\x98\x83".decode("utf-8")
- def is_consistent_type(theType, name, *constructionArgs):
- """
- Perform various assertions about *theType* to ensure that it is a
- well-defined type. This is useful for extension types, where it's
- pretty easy to do something wacky. If something about the type is
- unusual, an exception will be raised.
- :param theType: The type object about which to make assertions.
- :param name: A string giving the name of the type.
- :param constructionArgs: Positional arguments to use with
- *theType* to create an instance of it.
- """
- assert theType.__name__ == name
- assert isinstance(theType, type)
- instance = theType(*constructionArgs)
- assert type(instance) is theType
- return True
- class EqualityTestsMixin(object):
- """
- A mixin defining tests for the standard implementation of C{==} and C{!=}.
- """
- def anInstance(self):
- """
- Return an instance of the class under test. Each call to this method
- must return a different object. All objects returned must be equal to
- each other.
- """
- raise NotImplementedError()
- def anotherInstance(self):
- """
- Return an instance of the class under test. Each call to this method
- must return a different object. The objects must not be equal to the
- objects returned by C{anInstance}. They may or may not be equal to
- each other (they will not be compared against each other).
- """
- raise NotImplementedError()
- def test_identicalEq(self):
- """
- An object compares equal to itself using the C{==} operator.
- """
- o = self.anInstance()
- assert o == o
- def test_identicalNe(self):
- """
- An object doesn't compare not equal to itself using the C{!=} operator.
- """
- o = self.anInstance()
- assert not (o != o)
- def test_sameEq(self):
- """
- Two objects that are equal to each other compare equal to each other
- using the C{==} operator.
- """
- a = self.anInstance()
- b = self.anInstance()
- assert a == b
- def test_sameNe(self):
- """
- Two objects that are equal to each other do not compare not equal to
- each other using the C{!=} operator.
- """
- a = self.anInstance()
- b = self.anInstance()
- assert not (a != b)
- def test_differentEq(self):
- """
- Two objects that are not equal to each other do not compare equal to
- each other using the C{==} operator.
- """
- a = self.anInstance()
- b = self.anotherInstance()
- assert not (a == b)
- def test_differentNe(self):
- """
- Two objects that are not equal to each other compare not equal to each
- other using the C{!=} operator.
- """
- a = self.anInstance()
- b = self.anotherInstance()
- assert a != b
- def test_anotherTypeEq(self):
- """
- The object does not compare equal to an object of an unrelated type
- (which does not implement the comparison) using the C{==} operator.
- """
- a = self.anInstance()
- b = object()
- assert not (a == b)
- def test_anotherTypeNe(self):
- """
- The object compares not equal to an object of an unrelated type (which
- does not implement the comparison) using the C{!=} operator.
- """
- a = self.anInstance()
- b = object()
- assert a != b
- def test_delegatedEq(self):
- """
- The result of comparison using C{==} is delegated to the right-hand
- operand if it is of an unrelated type.
- """
- class Delegate(object):
- def __eq__(self, other):
- # Do something crazy and obvious.
- return [self]
- a = self.anInstance()
- b = Delegate()
- assert (a == b) == [b]
- def test_delegateNe(self):
- """
- The result of comparison using C{!=} is delegated to the right-hand
- operand if it is of an unrelated type.
- """
- class Delegate(object):
- def __ne__(self, other):
- # Do something crazy and obvious.
- return [self]
- a = self.anInstance()
- b = Delegate()
- assert (a != b) == [b]
- # The type name expected in warnings about using the wrong string type.
- if PY2:
- WARNING_TYPE_EXPECTED = "unicode"
- else:
- WARNING_TYPE_EXPECTED = "str"
|