[Zope-Checkins] CVS: Zope3/lib/python/Zope/App/Publisher/Browser/tests - testI18nFileResource.py:1.1 testDirectives.py:1.10

Marius Gedminas mgedmin@delfi.lt
Tue, 25 Jun 2002 10:30:09 -0400


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

Modified Files:
	testDirectives.py 
Added Files:
	testI18nFileResource.py 
Log Message:
Added <browser:i18n-resource> ZCML directive.


=== Added File Zope3/lib/python/Zope/App/Publisher/Browser/tests/testI18nFileResource.py ===
##############################################################################
#
# Copyright (c) 2001, 2002 Zope Corporation and Contributors.
# All Rights Reserved.
#
# This software is subject to the provisions of the Zope Public License,
# Version 2.0 (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.
#
##############################################################################
"""

Revision information:
$Id: testI18nFileResource.py,v 1.1 2002/06/25 14:30:08 mgedmin Exp $
"""

from unittest import TestSuite, main, makeSuite

import os

from Zope.Exceptions import NotFoundError

from Zope.ComponentArchitecture.tests.PlacelessSetup import PlacelessSetup
from Zope.ComponentArchitecture.GlobalResourceService import provideResource
from Zope.ComponentArchitecture.GlobalAdapterService import provideAdapter

from Zope.I18n.IUserPreferredCharsets import IUserPreferredCharsets
from Zope.I18n.IUserPreferredLanguages import IUserPreferredLanguages

from Zope.Publisher.HTTP.HTTPRequest import IHTTPRequest
from Zope.Publisher.HTTP.HTTPCharsets import HTTPCharsets
from Zope.Publisher.Browser.BrowserLanguages import BrowserLanguages
from Zope.Publisher.Browser.BrowserRequest import TestRequest

from Zope.App.Publisher.Browser.I18nFileResource import I18nFileResource, \
     I18nFileResourceFactory
from Zope.App.Publisher.FileResource import File, Image
import Zope.App.Publisher.Browser.tests as p

from Zope.App.ComponentArchitecture.metaConfigure import \
     provideService, managerHandler
from Zope.I18n.INegotiator import INegotiator
from Zope.I18n.Negotiator import negotiator

from Zope.I18n.tests.testII18nAware import TestII18nAware

test_directory = os.path.split(p.__file__)[0]


class Test(PlacelessSetup, TestII18nAware):

    def setUp(self):
        PlacelessSetup.setUp(self)
        TestII18nAware.setUp(self)
        provideAdapter(IHTTPRequest, IUserPreferredCharsets, HTTPCharsets)
        provideAdapter(IHTTPRequest, IUserPreferredLanguages, BrowserLanguages)
        # Setup the negotiator service registry entry
        managerHandler('defineService', 'LanguageNegotiation', INegotiator)
        provideService('LanguageNegotiation', negotiator, 'Zope.Public')


    def _createObject(self):
        obj = I18nFileResource({'en':None, 'lt':None, 'fr':None},
                               TestRequest(), 'fr')
        return obj


    def _createDict(self, filename1='test.pt', filename2='test2.pt'):
        path1 = os.path.join(test_directory, filename1)
        path2 = os.path.join(test_directory, filename2)
        return { 'en': File(path1),
                 'fr': File(path2) }


    def testNoTraversal(self):

        resource = I18nFileResourceFactory(self._createDict(), 'en')\
                                          (TestRequest())

        self.assertRaises(NotFoundError,
                          resource.publishTraverse,
                          resource.request,
                          '_testData')

    def testFileGET(self):

        # case 1: no language preference, should get en
        path = os.path.join(test_directory, 'test.txt')

        resource = I18nFileResourceFactory(self._createDict('test.txt'), 'en')\
                                          (TestRequest())


        self.assertEqual(resource.GET(), open(path, 'rb').read())

        response = resource.request.response
        self.assertEqual(response.getHeader('Content-Type'), 'text/plain')

        # case 2: prefer lt, have only en and fr, should get en
        resource = I18nFileResourceFactory(
                        self._createDict('test.txt'), 'en')\
                        (TestRequest(HTTP_ACCEPT_LANGUAGE='lt'))

        self.assertEqual(resource.GET(), open(path, 'rb').read())

        response = resource.request.response
        self.assertEqual(response.getHeader('Content-Type'), 'text/plain')

        # case 3: prefer fr, have it, should get fr
        path = os.path.join(test_directory, 'test2.pt')
        resource = I18nFileResourceFactory(
                        self._createDict('test.pt', 'test2.pt'), 'en')\
                        (TestRequest(HTTP_ACCEPT_LANGUAGE='fr'))

        self.assertEqual(resource.GET(), open(path, 'rb').read())

        response = resource.request.response
        self.assertEqual(response.getHeader('Content-Type'), 'text/html')


    def testFileHEAD(self):

        # case 1: no language preference, should get en
        resource = I18nFileResourceFactory(self._createDict('test.txt'), 'en')\
                                          (TestRequest())

        self.assertEqual(resource.HEAD(), '')

        response = resource.request.response
        self.assertEqual(response.getHeader('Content-Type'), 'text/plain')

        # case 2: prefer lt, have only en and fr, should get en
        resource = I18nFileResourceFactory(
                        self._createDict('test.txt'), 'en')\
                        (TestRequest(HTTP_ACCEPT_LANGUAGE='lt'))

        self.assertEqual(resource.HEAD(), '')

        response = resource.request.response
        self.assertEqual(response.getHeader('Content-Type'), 'text/plain')

        # case 3: prefer fr, have it, should get fr
        resource = I18nFileResourceFactory(
                        self._createDict('test.pt', 'test2.pt'), 'en')\
                        (TestRequest(HTTP_ACCEPT_LANGUAGE='fr'))

        self.assertEqual(resource.HEAD(), '')

        response = resource.request.response
        self.assertEqual(response.getHeader('Content-Type'), 'text/html')


def test_suite():
    return TestSuite((
        makeSuite(Test),
        ))

if __name__=='__main__':
    main(defaultTest='test_suite')


=== Zope3/lib/python/Zope/App/Publisher/Browser/tests/testDirectives.py 1.9 => 1.10 ===
 from Zope.Publisher.Browser.IBrowserPresentation import IBrowserPresentation
 
+from Zope.App.Publisher.Browser.I18nFileResource import I18nFileResource
+
 import Zope.App.Publisher.Browser
 
 tests_path = os.path.join(
@@ -102,7 +104,7 @@
                                  ), 'test')
                                  
       
-    def testSKinView(self):
+    def testSkinView(self):
         self.assertEqual(queryView(ob, 'test', request,
                                    None), None)
 
@@ -142,7 +144,31 @@
         self.assertEqual(
             queryResource(ob, 'test', request).__class__,
             R1)
-         
+
+    def testI18nResource(self):
+        self.assertEqual(queryResource(ob, 'test', request,
+                                       None),
+                         None)
+
+        path1 = os.path.join(tests_path, 'test.pt')
+        path2 = os.path.join(tests_path, 'test2.pt')
+
+        xmlconfig(StringIO(template % (
+            """
+            <browser:i18n-resource name="test" defaultLanguage="fr">
+              <browser:translation language="en" file="%s" />
+              <browser:translation language="fr" file="%s" />
+            </browser:i18n-resource>
+            """ % (path1, path2)
+            )))
+
+        v = getResource(ob, 'test', request)
+        self.assertEqual(
+            queryResource(ob, 'test', request).__class__,
+            I18nFileResource)
+        self.assertEqual(v._testData('en'), open(path1, 'rb').read())
+        self.assertEqual(v._testData('fr'), open(path2, 'rb').read())
+
     def testSkinResource(self):
         self.assertEqual(
             queryResource(ob, 'test', request, None),