# -*- coding: utf-8 -*-

u"""A module to test whether doctest recognizes some 2.2 features,

like static and class methods.



>>> print 'yup'  # 1

yup



We include some (random) encoded (utf-8) text in the text surrounding

the example.  It should be ignored:



ЉЊЈЁЂ



"""



from test import test_support



class C(object):

    u"""Class C.



    >>> print C()  # 2

    42





    We include some (random) encoded (utf-8) text in the text surrounding

    the example.  It should be ignored:



        ЉЊЈЁЂ



    """



    def __init__(self):

        """C.__init__.



        >>> print C() # 3

        42

        """



    def __str__(self):

        """

        >>> print C() # 4

        42

        """

        return "42"



    class D(object):

        """A nested D class.



        >>> print "In D!"   # 5

        In D!

        """



        def nested(self):

            """

            >>> print 3 # 6

            3

            """



    def getx(self):

        """

        >>> c = C()    # 7

        >>> c.x = 12   # 8

        >>> print c.x  # 9

        -12

        """

        return -self._x



    def setx(self, value):

        """

        >>> c = C()     # 10

        >>> c.x = 12    # 11

        >>> print c.x   # 12

        -12

        """

        self._x = value



    x = property(getx, setx, doc="""\

        >>> c = C()    # 13

        >>> c.x = 12   # 14

        >>> print c.x  # 15

        -12

        """)



    @staticmethod

    def statm():

        """

        A static method.



        >>> print C.statm()    # 16

        666

        >>> print C().statm()  # 17

        666

        """

        return 666



    @classmethod

    def clsm(cls, val):

        """

        A class method.



        >>> print C.clsm(22)    # 18

        22

        >>> print C().clsm(23)  # 19

        23

        """

        return val



def test_main():

    from test import test_doctest2

    EXPECTED = 19

    f, t = test_support.run_doctest(test_doctest2)

    if t != EXPECTED:

        raise test_support.TestFailed("expected %d tests to run, not %d" %

                                      (EXPECTED, t))



# Pollute the namespace with a bunch of imported functions and classes,

# to make sure they don't get tested.

from doctest import *



if __name__ == '__main__':

    test_main()

