# Simple test suite for Cookie.py



from test.test_support import run_unittest, run_doctest

import unittest

import Cookie



import warnings

warnings.filterwarnings("ignore",

                        ".* class is insecure.*",

                        DeprecationWarning)



class CookieTests(unittest.TestCase):

    # Currently this only tests SimpleCookie

    def test_basic(self):

        cases = [

            { 'data': 'chips=ahoy; vienna=finger',

              'dict': {'chips':'ahoy', 'vienna':'finger'},

              'repr': "<SimpleCookie: chips='ahoy' vienna='finger'>",

              'output': 'Set-Cookie: chips=ahoy\nSet-Cookie: vienna=finger',

            },



            { 'data': 'keebler="E=mc2; L=\\"Loves\\"; fudge=\\012;"',

              'dict': {'keebler' : 'E=mc2; L="Loves"; fudge=\012;'},

              'repr': '''<SimpleCookie: keebler='E=mc2; L="Loves"; fudge=\\n;'>''',

              'output': 'Set-Cookie: keebler="E=mc2; L=\\"Loves\\"; fudge=\\012;"',

            },



            # Check illegal cookies that have an '=' char in an unquoted value

            { 'data': 'keebler=E=mc2',

              'dict': {'keebler' : 'E=mc2'},

              'repr': "<SimpleCookie: keebler='E=mc2'>",

              'output': 'Set-Cookie: keebler=E=mc2',

            }

        ]



        for case in cases:

            C = Cookie.SimpleCookie()

            C.load(case['data'])

            self.assertEqual(repr(C), case['repr'])

            self.assertEqual(C.output(sep='\n'), case['output'])

            for k, v in sorted(case['dict'].iteritems()):

                self.assertEqual(C[k].value, v)



    def test_load(self):

        C = Cookie.SimpleCookie()

        C.load('Customer="WILE_E_COYOTE"; Version=1; Path=/acme')



        self.assertEqual(C['Customer'].value, 'WILE_E_COYOTE')

        self.assertEqual(C['Customer']['version'], '1')

        self.assertEqual(C['Customer']['path'], '/acme')



        self.assertEqual(C.output(['path']),

            'Set-Cookie: Customer="WILE_E_COYOTE"; Path=/acme')

        self.assertEqual(C.js_output(), """

        <script type="text/javascript">

        <!-- begin hiding

        document.cookie = "Customer="WILE_E_COYOTE"; Path=/acme; Version=1";

        // end hiding -->

        </script>

        """)

        self.assertEqual(C.js_output(['path']), """

        <script type="text/javascript">

        <!-- begin hiding

        document.cookie = "Customer="WILE_E_COYOTE"; Path=/acme";

        // end hiding -->

        </script>

        """)



    def test_quoted_meta(self):

        # Try cookie with quoted meta-data

        C = Cookie.SimpleCookie()

        C.load('Customer="WILE_E_COYOTE"; Version="1"; Path="/acme"')

        self.assertEqual(C['Customer'].value, 'WILE_E_COYOTE')

        self.assertEqual(C['Customer']['version'], '1')

        self.assertEqual(C['Customer']['path'], '/acme')



def test_main():

    run_unittest(CookieTests)

    run_doctest(Cookie)



if __name__ == '__main__':

    test_main()

