[Zope-Checkins] CVS: Zope3/lib/python/Zope/Publisher/tests - testPublisher.py:1.1.2.1

Shane Hathaway shane@digicool.com
Tue, 20 Nov 2001 16:32:56 -0500


Update of /cvs-repository/Zope3/lib/python/Zope/Publisher/tests
In directory cvs.zope.org:/tmp/cvs-serv17151/tests

Added Files:
      Tag: Zope-3x-branch
	testPublisher.py 
Log Message:
Simple publisher tests.


=== Added File Zope3/lib/python/Zope/Publisher/tests/testPublisher.py ===
# Copyright (c) 2001 Zope Corporation and Contributors.  All Rights Reserved.
# 
# This software is subject to the provisions of the Zope Public License,
# Version 1.1 (ZPL).  A copy of the ZPL should accompany this distribution.
# THIS SOFTWARE IS PROVIDED "AS IS" AND ANY AND ALL EXPRESS OR IMPLIED
# WARRANTIES ARE DISCLAIMED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
# WARRANTIES OF TITLE, MERCHANTABILITY, AGAINST INFRINGEMENT, AND FITNESS 
# FOR A PARTICULAR PURPOSE.

import unittest

from Zope.Publisher.Publish import publish
from Zope.Publisher.BaseRequest import BaseRequest
from Zope.Publisher.BaseResponse import BaseResponse
from Zope.Publisher.DefaultPublication import DefaultPublication
from Zope.Publisher.Exceptions import Retry
from Zope.Publisher.mapply import mapply

from StringIO import StringIO


class PublisherTests(unittest.TestCase):

    def setUp(self):
        class AppRoot:
            " "

        class Folder:
            " "

        class Item:
            " "
            def __call__(self):
                return "item"

        self.app = AppRoot()
        self.app.folder = Folder()
        self.app.folder.item = Item()

    def _createRequest(self, path):
        publication = DefaultPublication(self.app)
        outstream = StringIO()
        response = BaseResponse(outstream)
        instream = StringIO("")
        request = BaseRequest(response, instream, publication)
        request.other['PATH_INFO'] = path
        return request

    def _publisherResults(self, path):
        request = self._createRequest(path)
        publish(request)
        return request.response.outstream.getvalue()

    def testTraversalToItem(self):
        res = self._publisherResults('/folder/item')
        self.failUnlessEqual(res, 'item')
        res = self._publisherResults('/folder/item/')
        self.failUnlessEqual(res, 'item')
        res = self._publisherResults('/folder/./item')
        self.failUnlessEqual(res, 'item')
        res = self._publisherResults('/folder/../folder/item/../item')
        self.failUnlessEqual(res, 'item')
        res = self._publisherResults('folder/item')
        self.failUnlessEqual(res, 'item')

    def testMapply(self):
        def compute(a,b,c=4):
            return '%d%d%d' % (a, b, c)
        values = {'a':2, 'b':3, 'c':5}
        v = mapply(compute, (), values)
        self.failUnlessEqual(v, '235')

        v = mapply(compute, (7,), values)
        self.failUnlessEqual(v, '735')

        class c:
            a = 3
            def __call__(self, b, c=4):
                return '%d%d%d' % (self.a, b, c)
            compute = __call__
        cc = c()
        v = mapply(cc, (), values)
        self.failUnlessEqual(v, '335')

        del values['c']
        v = mapply(cc.compute, (), values)
        self.failUnlessEqual(v, '334')

        class c2: pass
        c2inst = c2()
        c2inst.__call__ = cc
        v = mapply(c2inst, (), values)
        self.failUnlessEqual(v, '334')


def test_suite():
    loader = unittest.TestLoader()
    return loader.loadTestsFromTestCase(PublisherTests)

if __name__=='__main__':
    unittest.TextTestRunner().run( test_suite() )