[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),