Blame tests/run/unbound_special_methods.pyx

Packit 562c7a
# mode: run
Packit 562c7a
# tag: special_method
Packit 562c7a
Packit 562c7a
cimport cython
Packit 562c7a
Packit 562c7a
text = u'ab jd  sdflk as sa  sadas asdas fsdf '
Packit 562c7a
Packit 562c7a
Packit 562c7a
@cython.test_fail_if_path_exists(
Packit 562c7a
    "//CoerceFromPyTypeNode")
Packit 562c7a
@cython.test_assert_path_exists(
Packit 562c7a
    "//CoerceToPyTypeNode",
Packit 562c7a
    "//AttributeNode",
Packit 562c7a
    "//AttributeNode[@entry.cname = 'PyUnicode_Contains']")
Packit 562c7a
def unicode_contains(unicode s, substring):
Packit 562c7a
    """
Packit 562c7a
    >>> unicode_contains(text, 'fl')
Packit 562c7a
    True
Packit 562c7a
    >>> unicode_contains(text, 'XYZ')
Packit 562c7a
    False
Packit 562c7a
    >>> unicode_contains(None, 'XYZ')
Packit 562c7a
    Traceback (most recent call last):
Packit 562c7a
    AttributeError: 'NoneType' object has no attribute '__contains__'
Packit 562c7a
    """
Packit 562c7a
    return s.__contains__(substring)
Packit 562c7a
Packit 562c7a
Packit 562c7a
@cython.test_fail_if_path_exists(
Packit 562c7a
    "//CoerceFromPyTypeNode")
Packit 562c7a
@cython.test_assert_path_exists(
Packit 562c7a
#    "//CoerceToPyTypeNode",
Packit 562c7a
    "//NameNode[@entry.cname = 'PyUnicode_Contains']")
Packit 562c7a
def unicode_contains_unbound(unicode s, substring):
Packit 562c7a
    """
Packit 562c7a
    >>> unicode_contains_unbound(text, 'fl')
Packit 562c7a
    True
Packit 562c7a
    >>> unicode_contains_unbound(text, 'XYZ')
Packit 562c7a
    False
Packit 562c7a
    >>> unicode_contains_unbound(None, 'XYZ')   # doctest: +ELLIPSIS
Packit 562c7a
    Traceback (most recent call last):
Packit 562c7a
    TypeError: descriptor '__contains__' requires a '...' object but received a 'NoneType'
Packit 562c7a
    """
Packit 562c7a
    return unicode.__contains__(s, substring)
Packit 562c7a
Packit 562c7a
Packit 562c7a
cdef class UnicodeSubclass(unicode):
Packit 562c7a
    """
Packit 562c7a
    >>> u = UnicodeSubclass(text)
Packit 562c7a
    >>> 'fl' in u
Packit 562c7a
    False
Packit 562c7a
    >>> 'XYZ' in u
Packit 562c7a
    True
Packit 562c7a
    >>> u.method('fl')
Packit 562c7a
    False
Packit 562c7a
    >>> u.method('XYZ')
Packit 562c7a
    True
Packit 562c7a
    >>> u.operator('fl')
Packit 562c7a
    False
Packit 562c7a
    >>> u.operator('XYZ')
Packit 562c7a
    True
Packit 562c7a
    """
Packit 562c7a
    def __contains__(self, substring):
Packit 562c7a
        return substring not in (self + u'x')
Packit 562c7a
Packit 562c7a
    def method(self, other):
Packit 562c7a
        return self.__contains__(other)
Packit 562c7a
Packit 562c7a
    def operator(self, other):
Packit 562c7a
        return other in self