[Checkins] SVN: z3c.language/trunk/src/z3c/language/negotiator/ Remove unused sessionLanguage attribute from local INegotiator implementation

Roger Ineichen roger at projekt01.ch
Tue Nov 14 23:43:02 EST 2006


Log message for revision 71125:
  Remove unused sessionLanguage attribute from local INegotiator implementation
  Added more tests
  Added generation
  Added generation tests

Changed:
  U   z3c.language/trunk/src/z3c/language/negotiator/README.txt
  U   z3c.language/trunk/src/z3c/language/negotiator/app.py
  U   z3c.language/trunk/src/z3c/language/negotiator/browser/views.py
  A   z3c.language/trunk/src/z3c/language/negotiator/browser.txt
  U   z3c.language/trunk/src/z3c/language/negotiator/ftests.py
  U   z3c.language/trunk/src/z3c/language/negotiator/generations/__init__.py
  A   z3c.language/trunk/src/z3c/language/negotiator/generations/evolve1.py
  A   z3c.language/trunk/src/z3c/language/negotiator/generations/evolve1.txt
  A   z3c.language/trunk/src/z3c/language/negotiator/generations/tests/
  A   z3c.language/trunk/src/z3c/language/negotiator/generations/tests/__init__.py
  A   z3c.language/trunk/src/z3c/language/negotiator/generations/tests/generation-0.fs
  A   z3c.language/trunk/src/z3c/language/negotiator/generations/tests/generation-0.fs.index
  A   z3c.language/trunk/src/z3c/language/negotiator/generations/tests/generation-0.fs.lock
  A   z3c.language/trunk/src/z3c/language/negotiator/generations/tests/generation-0.fs.tmp
  A   z3c.language/trunk/src/z3c/language/negotiator/generations/tests/test_evolve.py
  U   z3c.language/trunk/src/z3c/language/negotiator/interfaces.py
  A   z3c.language/trunk/src/z3c/language/negotiator/testing.py
  U   z3c.language/trunk/src/z3c/language/negotiator/tests.py
  U   z3c.language/trunk/src/z3c/language/negotiator/vocabulary.py

-=-
Modified: z3c.language/trunk/src/z3c/language/negotiator/README.txt
===================================================================
--- z3c.language/trunk/src/z3c/language/negotiator/README.txt	2006-11-15 04:41:49 UTC (rev 71124)
+++ z3c.language/trunk/src/z3c/language/negotiator/README.txt	2006-11-15 04:43:00 UTC (rev 71125)
@@ -2,76 +2,93 @@
 Negotiator
 ==========
 
-Setup testbrowser for Negotiator functional tests.
+This package provides a local implementation of a INegotiator defined in 
+zope.i18n.interfaces. The negotiator implementation offers soem additional
+usefull attributes which are explained later. This INegotiator is also used
+in the z3c.language.switch package.
 
-  >>> from zope.testbrowser.testing import Browser
-  >>> browser = Browser()
-  >>> browser.addHeader('Authorization', 'Basic mgr:mgrpw')
-  >>> browser.handleErrors = False
+Let's setup a negotiator:
 
-Start Zope3 an go to the root.
+  >>> from z3c.language.negotiator import app
+  >>> negotiator = app.Negotiator()
 
-  >>> browser.open('http://localhost/@@contents.html')
-  >>> browser.url
-  'http://localhost/@@contents.html'
+Such a negotiator provides the following interfaces:
 
-Add a negotiator.
+  >>> from zope.i18n.interfaces import INegotiator
+  >>> from z3c.language.negotiator.interfaces import INegotiatorManager
 
-  >>> browser.open('http://localhost/++etc++site/default/@@contents.html?type_name=BrowserAdd__z3c.language.negotiator.app.Negotiator')
-  >>> browser.url
-  'http://localhost/++etc++site/default/@@contents.html?type_name=BrowserAdd__z3c.language.negotiator.app.Negotiator'
-  >>> browser.getControl(name='new_value').value = ''
-  >>> browser.getControl('Apply').click()
-  >>> browser.url
-  'http://localhost/++etc++site/default/Negotiator/@@registration.html'
+  >>> INegotiator.providedBy(negotiator)
+  True
+  >>> 
+  >>> INegotiatorManager.providedBy(negotiator)
+  True
+  >>>
 
-And register the added negotiator utility.
+By default a negotiator has the following values:
 
-  >>> browser.handleErrors = False
-  >>> "This object isn't yet registered." in browser.contents
-  True
-  >>> browser.getLink('Registration').click()
-  >>> browser.getControl('Register this object').click()
-  >>> browser.url
-  'http://localhost/++etc++site/default/Negotiator/@@addRegistration.html'
-  >>> browser.getControl(
-  ...     'Provided interface').value = ['zope.i18n.interfaces.INegotiator']
-  >>> browser.getControl('Register As').value = ''
-  >>> browser.getControl('Comment').value = 'A local negotiator'
-  >>> browser.getControl('Register', index=1).click()
-  >>> browser.url
-  'http://localhost/++etc++site/default/Negotiator/@@registration.html'
+  >>> negotiator.policy
+  'session --> browser --> server'
 
-Now we see the edit form of the added and registred negotiator instance called
-Negotiator. Set the language lookup policy to 'server'.
+  >>> negotiator.serverLanguage
+  u'en'
 
-  >>> browser.open('http://localhost/++etc++site/default/Negotiator/'
-  ...    '@@edit.html')
-  >>> browser.getControl(name='field.policy').value = ['server']
+  >>> negotiator.offeredLanguages
+  []
 
-and set a default server language called 'de'.
+If we set a policy with a wrong value, we will get a ValueError:
 
-  >>> browser.getControl(name='field.serverLanguage').value = 'de'
+  >>> negotiator.policy = u'wrong'
+  Traceback (most recent call last):
+  ...
+  ValueError: ('Not a valid policy name.', u'wrong')
 
-and save this part.
+Let's add the negotiator to the site root:
 
-  >>> browser.getControl(name='UPDATE_SUBMIT').click()
+  >>> rootFolder['negotiator'] = negotiator
 
-Now we add a session language via the used sequence list widget.
+And register the negotiator as a utility:
 
-  >>> browser.getControl(name='field.sessionLanguages.add').click()
-  >>> browser.getControl(name='field.sessionLanguages.0.').value = 'fr'
+  >>> import zope.component
+  >>> sitemanager = zope.component.getSiteManager(rootFolder)
+  >>> sitemanager.registerUtility(negotiator, INegotiator)
 
-And we also add a offered language.
+After register the negotiator as a utility, we can use the vocabulary and see
+what offered languages are available:
 
-  >>> browser.getControl(name='field.offeredLanguages.add').click()
-  >>> browser.getControl(name='field.offeredLanguages.0.').value = 'de'
+  >>> from z3c.language.negotiator import vocabulary
+  >>> vocab = vocabulary.OfferedLanguagesVocabulary(None)
+  >>> vocab
+  <z3c.language.negotiator.vocabulary.OfferedLanguagesVocabulary object at ...>
 
-And as last, we save the changes.
+  >>> vocab._terms
+  []
 
-  >>> browser.getControl(name='UPDATE_SUBMIT').click()
+Add some offered languages and check the vocabulary again:
 
-Now check if the set language is german. See the label at the submit button.
+  >>> negotiator.offeredLanguages = [u'de', u'fr']
+  >>> negotiator.offeredLanguages
+  [u'de', u'fr']
 
-  >>> browser.getControl(name='UPDATE_SUBMIT').value
-  'Abschicken'
+Try to get the utility and ceck the offeredLanguages again:
+
+  >>> util = zope.component.getUtility(INegotiator)
+  >>> util.offeredLanguages
+  [u'de', u'fr']
+
+Now check the vocabulary again:
+
+  >>> vocab = vocabulary.OfferedLanguagesVocabulary(None)
+  >>> vocab._terms[0].value
+  u'de'
+  >>> vocab._terms[0].token
+  'de'
+  >>> vocab._terms[0].title
+  u'de'
+  >>> vocab._terms[1].value
+  u'fr'
+  >>> vocab._terms[1].token
+  'fr'
+  >>> vocab._terms[1].title
+  u'fr'
+
+See tests.py for more tests

Modified: z3c.language/trunk/src/z3c/language/negotiator/app.py
===================================================================
--- z3c.language/trunk/src/z3c/language/negotiator/app.py	2006-11-15 04:41:49 UTC (rev 71124)
+++ z3c.language/trunk/src/z3c/language/negotiator/app.py	2006-11-15 04:43:00 UTC (rev 71125)
@@ -20,6 +20,7 @@
 import persistent
 import zope.interface
 
+from zope.schema.fieldproperty import FieldProperty
 from zope.i18n.interfaces import IUserPreferredLanguages
 from zope.i18n.interfaces import INegotiator
 from zope.i18n.negotiator import negotiator
@@ -59,59 +60,26 @@
 
     zope.interface.implements(INegotiator, INegotiatorManager)
 
+    serverLanguage = FieldProperty(INegotiatorManager['serverLanguage'])
+    offeredLanguages = FieldProperty(INegotiatorManager['offeredLanguages'])
+
     def __init__(self):
         self._policy = 'session --> browser --> server'
-        self._serverLanguage = None
-        self._sessionLanguages = []
-        self._offeredLanguages = []
 
-    def _getLanguagePolicy(self):
-        """Returns the language policy."""
-        return self._policy
+    @apply
+    def policy():
+        def get(self):
+            """Returns the language policy."""
+            return self._policy
+    
+        def set(self, policy):
+            """Set the language policy."""
+            if policy not in language_policies:
+                policies = str(language_policies)
+                raise ValueError('Not a valid policy name.', policy)
+            self._policy = policy
+        return property(get, set)
 
-    def _setLanguagePolicy(self, policy):
-        """Set the language policy."""
-        if policy not in language_policies:
-            policies = str(language_policies)
-            msg = "Only %s are valide policy names." % policies
-            raise ValueError(msg, policy)
-        self._policy = policy
-
-    policy = property(_getLanguagePolicy, _setLanguagePolicy)
-
-    def _getServerLanguage(self):
-        """Returns the language for server policy."""
-        return self._serverLanguage
-
-    def _setServerLanguage(self, language):
-        """Set the language for server policy."""
-        self._serverLanguage = language
-
-    serverLanguage = property(_getServerLanguage, _setServerLanguage)
-
-    def _getSessionLanguages(self):
-        """Returns the language for server policy."""
-        return self._sessionLanguages
-
-    def _setSessionLanguages(self, languages):
-        """Set the language for server policy."""
-        self._sessionLanguages = languages
-
-    sessionLanguages = property(_getSessionLanguages, _setSessionLanguages)
-
-    # TODO: 
-    # perhaps we can make a relation to the translation domains
-    # and dymanicly find out what language we support in the domains.
-    def _getOfferedLanguages(self):
-        """Returns the language for server policy."""
-        return self._offeredLanguages
-
-    def _setOfferedLanguages(self, languages):
-        """Set the language for server policy."""
-        self._offeredLanguages = languages
-
-    offeredLanguages = property(_getOfferedLanguages, _setOfferedLanguages)
-
     def getLanguage(self, languages, request):
         """Returns the language dependent on the policy."""
         policyList = self._policy.split(' --> ')
@@ -127,13 +95,13 @@
             elif policy == 'session':
                 session = ILanguageSession(request)
                 lang = session.getLanguage()
-                if lang != None:
+                if lang is not None:
                     return lang
 
             # the language is handled by the browsers language settings
             elif policy == 'browser':
                 lang = negotiator.getLanguage(languages, request)
-                if lang != None:
+                if lang is not None:
                     return lang
 
         return None

Modified: z3c.language/trunk/src/z3c/language/negotiator/browser/views.py
===================================================================
--- z3c.language/trunk/src/z3c/language/negotiator/browser/views.py	2006-11-15 04:41:49 UTC (rev 71124)
+++ z3c.language/trunk/src/z3c/language/negotiator/browser/views.py	2006-11-15 04:43:00 UTC (rev 71125)
@@ -26,7 +26,6 @@
 from z3c.language.negotiator import IOfferedLanguages
 
 
-
 class NegotiatorView(BrowserView):
 
     implements(IOfferedLanguages)

Added: z3c.language/trunk/src/z3c/language/negotiator/browser.txt
===================================================================
--- z3c.language/trunk/src/z3c/language/negotiator/browser.txt	2006-11-15 04:41:49 UTC (rev 71124)
+++ z3c.language/trunk/src/z3c/language/negotiator/browser.txt	2006-11-15 04:43:00 UTC (rev 71125)
@@ -0,0 +1,72 @@
+==========
+Negotiator
+==========
+
+Setup testbrowser for Negotiator functional tests.
+
+  >>> from zope.testbrowser.testing import Browser
+  >>> browser = Browser()
+  >>> browser.addHeader('Authorization', 'Basic mgr:mgrpw')
+  >>> browser.handleErrors = False
+
+Start Zope3 an go to the root.
+
+  >>> browser.open('http://localhost/@@contents.html')
+  >>> browser.url
+  'http://localhost/@@contents.html'
+
+Add a negotiator.
+
+  >>> browser.open('http://localhost/++etc++site/default/@@contents.html?type_name=BrowserAdd__z3c.language.negotiator.app.Negotiator')
+  >>> browser.url
+  'http://localhost/++etc++site/default/@@contents.html?type_name=BrowserAdd__z3c.language.negotiator.app.Negotiator'
+  >>> browser.getControl(name='new_value').value = ''
+  >>> browser.getControl('Apply').click()
+  >>> browser.url
+  'http://localhost/++etc++site/default/Negotiator/@@registration.html'
+
+And register the added negotiator utility.
+
+  >>> browser.handleErrors = False
+  >>> "This object isn't yet registered." in browser.contents
+  True
+  >>> browser.getLink('Registration').click()
+  >>> browser.getControl('Register this object').click()
+  >>> browser.url
+  'http://localhost/++etc++site/default/Negotiator/@@addRegistration.html'
+  >>> browser.getControl(
+  ...     'Provided interface').value = ['zope.i18n.interfaces.INegotiator']
+  >>> browser.getControl('Register As').value = ''
+  >>> browser.getControl('Comment').value = 'A local negotiator'
+  >>> browser.getControl('Register', index=1).click()
+  >>> browser.url
+  'http://localhost/++etc++site/default/Negotiator/@@registration.html'
+
+Now we see the edit form of the added and registred negotiator instance called
+Negotiator. Set the language lookup policy to 'server'.
+
+  >>> browser.open('http://localhost/++etc++site/default/Negotiator/'
+  ...    '@@edit.html')
+  >>> browser.getControl(name='field.policy').value = ['server']
+
+and set a default server language called 'de'.
+
+  >>> browser.getControl(name='field.serverLanguage').value = 'de'
+
+and save this part.
+
+  >>> browser.getControl(name='UPDATE_SUBMIT').click()
+
+Now we also add a offered language.
+
+  >>> browser.getControl(name='field.offeredLanguages.add').click()
+  >>> browser.getControl(name='field.offeredLanguages.0.').value = 'de'
+
+And as last, we save the changes.
+
+  >>> browser.getControl(name='UPDATE_SUBMIT').click()
+
+Now check if the set language is german. See the label at the submit button.
+
+  >>> browser.getControl(name='UPDATE_SUBMIT').value
+  'Abschicken'


Property changes on: z3c.language/trunk/src/z3c/language/negotiator/browser.txt
___________________________________________________________________
Name: svn:eol-style
   + native

Modified: z3c.language/trunk/src/z3c/language/negotiator/ftests.py
===================================================================
--- z3c.language/trunk/src/z3c/language/negotiator/ftests.py	2006-11-15 04:41:49 UTC (rev 71124)
+++ z3c.language/trunk/src/z3c/language/negotiator/ftests.py	2006-11-15 04:43:00 UTC (rev 71125)
@@ -25,7 +25,7 @@
 def test_suite():
     return unittest.TestSuite((
         functional.FunctionalDocFileSuite(
-            "README.txt",
+            "browser.txt",
             optionflags=doctest.ELLIPSIS | doctest.NORMALIZE_WHITESPACE),
         ))
 

Modified: z3c.language/trunk/src/z3c/language/negotiator/generations/__init__.py
===================================================================
--- z3c.language/trunk/src/z3c/language/negotiator/generations/__init__.py	2006-11-15 04:41:49 UTC (rev 71124)
+++ z3c.language/trunk/src/z3c/language/negotiator/generations/__init__.py	2006-11-15 04:43:00 UTC (rev 71125)
@@ -14,7 +14,6 @@
 """
 $Id$
 """
-
 __docformat__ = "reStructuredText"
 
 from zope.app.generations.generations import SchemaManager
@@ -24,5 +23,5 @@
 
 schemaManager = SchemaManager(
     minimum_generation=0,
-    generation=0,
+    generation=1,
     package_name=pkg)

Added: z3c.language/trunk/src/z3c/language/negotiator/generations/evolve1.py
===================================================================
--- z3c.language/trunk/src/z3c/language/negotiator/generations/evolve1.py	2006-11-15 04:41:49 UTC (rev 71124)
+++ z3c.language/trunk/src/z3c/language/negotiator/generations/evolve1.py	2006-11-15 04:43:00 UTC (rev 71125)
@@ -0,0 +1,61 @@
+##############################################################################
+#
+# Copyright (c) 2005 Zope Foundation and Contributors.
+# All Rights Reserved.
+#
+# This software is subject to the provisions of the Zope Public License,
+# Version 2.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.
+#
+##############################################################################
+"""
+$Id$
+"""
+__docformat__ = "reStructuredText"
+
+import zope.component
+from zope.i18n.interfaces import INegotiator
+from zope.app.component import hooks
+from zope.app.generations.utility import findObjectsProviding
+from zope.app.zopeappgenerations import getRootFolder
+from zope.app.component.interfaces import ISite
+
+from z3c.language.negotiator import interfaces
+
+
+def evolve(context):
+    """Evolve the ZODB.
+
+    - Remove sessionLanguage from INegotiator utilities
+
+    - Convert _offeredLangauges attribute to offeredLangauges property
+
+    """
+    root = getRootFolder(context)
+
+    for site in findObjectsProviding(root, ISite):
+        originalSite = hooks.getSite()
+        hooks.setSite(site)
+
+        # check if we got the right object
+        obj = zope.component.queryUtility(INegotiator)
+        if interfaces.INegotiatorManager.providedBy(obj):
+
+            # remove old unused ``sessionLanguages`` attr from all objects
+            delattr(obj, '_sessionLanguages')
+
+            # migrate ``_serverLanguage`` to ``serverLanguage``
+            serverLanguage = getattr(obj, '_serverLanguage')
+            setattr(obj, 'serverLanguage', serverLanguage)
+            delattr(obj, '_serverLanguage')
+
+            # migrate ``_offeredLanguages`` to ``offeredLanguages``
+            offeredLanguages = getattr(obj, '_offeredLanguages')
+            setattr(obj, 'offeredLanguages', offeredLanguages)
+            delattr(obj, '_offeredLanguages')
+
+        # set the site back to the original site
+        hooks.setSite(originalSite)


Property changes on: z3c.language/trunk/src/z3c/language/negotiator/generations/evolve1.py
___________________________________________________________________
Name: svn:keywords
   + Id
Name: svn:eol-style
   + native

Added: z3c.language/trunk/src/z3c/language/negotiator/generations/evolve1.txt
===================================================================
--- z3c.language/trunk/src/z3c/language/negotiator/generations/evolve1.txt	2006-11-15 04:41:49 UTC (rev 71124)
+++ z3c.language/trunk/src/z3c/language/negotiator/generations/evolve1.txt	2006-11-15 04:43:00 UTC (rev 71125)
@@ -0,0 +1,58 @@
+=========================
+Evolution to generation 1
+=========================
+
+Let's open the original generation 0 database:
+
+  >>> from z3c.language.negotiator.generations import tests
+  >>> db = getDB('generation-0.fs', package=tests)
+  >>> rootFolder = getDBRoot(db)
+
+Let's get the INegotiator from the test site,
+
+  >>> site = rootFolder['site']
+  >>> sm = site.getSiteManager()
+  >>> default = sm['default']
+  >>> negotiator = default['Negotiator']
+
+Check the old negotiator:
+
+  >>> negotiator._policy
+  'session --> server'
+
+  >>> negotiator._serverLanguage
+  u'de'
+
+  >>> negotiator._offeredLanguages
+  [u'de', u'en', u'fr']
+
+  >>> negotiator._sessionLanguages
+  [u'de', u'en', u'it']
+
+Evolve to generation 1:
+
+  >>> from z3c.testing import ContextStub
+  >>> context = ContextStub(rootFolder, db)
+  >>> from z3c.language.negotiator.generations.evolve1 import evolve
+  >>> evolve(context)
+
+Check the evolved negotiator:
+
+  >>> negotiator.policy
+  'session --> server'
+
+  >>> negotiator.serverLanguage
+  u'de'
+
+  >>> negotiator._serverLanguage
+  Traceback (most recent call last):
+  ...
+  AttributeError: 'Negotiator' object has no attribute '_serverLanguage'
+
+  >>> negotiator.offeredLanguages
+  [u'de', u'en', u'fr']
+
+  >>> negotiator._sessionLanguages
+  Traceback (most recent call last):
+  ...
+  AttributeError: 'Negotiator' object has no attribute '_sessionLanguages'


Property changes on: z3c.language/trunk/src/z3c/language/negotiator/generations/evolve1.txt
___________________________________________________________________
Name: svn:eol-style
   + native

Added: z3c.language/trunk/src/z3c/language/negotiator/generations/tests/__init__.py
===================================================================
--- z3c.language/trunk/src/z3c/language/negotiator/generations/tests/__init__.py	2006-11-15 04:41:49 UTC (rev 71124)
+++ z3c.language/trunk/src/z3c/language/negotiator/generations/tests/__init__.py	2006-11-15 04:43:00 UTC (rev 71125)
@@ -0,0 +1,17 @@
+##############################################################################
+#
+# Copyright (c) 2005 Zope Foundation and Contributors.
+# All Rights Reserved.
+#
+# This software is subject to the provisions of the Zope Public License,
+# Version 2.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.
+#
+##############################################################################
+"""
+$Id$
+"""
+__docformat__ = "reStructuredText"


Property changes on: z3c.language/trunk/src/z3c/language/negotiator/generations/tests/__init__.py
___________________________________________________________________
Name: svn:keywords
   + Id
Name: svn:eol-style
   + native

Added: z3c.language/trunk/src/z3c/language/negotiator/generations/tests/generation-0.fs
===================================================================
(Binary files differ)


Property changes on: z3c.language/trunk/src/z3c/language/negotiator/generations/tests/generation-0.fs
___________________________________________________________________
Name: svn:mime-type
   + application/octet-stream

Added: z3c.language/trunk/src/z3c/language/negotiator/generations/tests/generation-0.fs.index
===================================================================
(Binary files differ)


Property changes on: z3c.language/trunk/src/z3c/language/negotiator/generations/tests/generation-0.fs.index
___________________________________________________________________
Name: svn:mime-type
   + application/octet-stream

Added: z3c.language/trunk/src/z3c/language/negotiator/generations/tests/generation-0.fs.lock
===================================================================
--- z3c.language/trunk/src/z3c/language/negotiator/generations/tests/generation-0.fs.lock	2006-11-15 04:41:49 UTC (rev 71124)
+++ z3c.language/trunk/src/z3c/language/negotiator/generations/tests/generation-0.fs.lock	2006-11-15 04:43:00 UTC (rev 71125)
@@ -0,0 +1 @@
+4508

Added: z3c.language/trunk/src/z3c/language/negotiator/generations/tests/generation-0.fs.tmp
===================================================================

Added: z3c.language/trunk/src/z3c/language/negotiator/generations/tests/test_evolve.py
===================================================================
--- z3c.language/trunk/src/z3c/language/negotiator/generations/tests/test_evolve.py	2006-11-15 04:41:49 UTC (rev 71124)
+++ z3c.language/trunk/src/z3c/language/negotiator/generations/tests/test_evolve.py	2006-11-15 04:43:00 UTC (rev 71125)
@@ -0,0 +1,43 @@
+##############################################################################
+#
+# Copyright (c) 2005 Zope Foundation and Contributors.
+# All Rights Reserved.
+#
+# This software is subject to the provisions of the Zope Public License,
+# Version 2.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.
+#
+##############################################################################
+"""
+$Id$
+"""
+__docformat__ = "reStructuredText"
+
+import unittest
+import zope.component
+from zope.testing import doctest
+from zope.testing import doctestunit
+from zope.app.testing import setup
+
+from z3c import testing
+
+docTestPaths = ('../evolve1.txt',)
+
+
+def test_suite():
+    suites = []
+    for filename in docTestPaths:
+        suites.append(doctestunit.DocFileSuite(
+            filename,
+            setUp=testing.setUpGeneration, tearDown=testing.tearDownGeneration,
+            globs = {'getDBRoot': testing.getDBRoot,
+                     'getDB': testing.getDB},
+            optionflags=doctest.NORMALIZE_WHITESPACE|doctest.ELLIPSIS,
+            ))
+    return unittest.TestSuite(suites)
+
+if __name__ == '__main__':
+    unittest.main(defaultTest='test_suite')


Property changes on: z3c.language/trunk/src/z3c/language/negotiator/generations/tests/test_evolve.py
___________________________________________________________________
Name: svn:keywords
   + Id
Name: svn:eol-style
   + native

Modified: z3c.language/trunk/src/z3c/language/negotiator/interfaces.py
===================================================================
--- z3c.language/trunk/src/z3c/language/negotiator/interfaces.py	2006-11-15 04:41:49 UTC (rev 71124)
+++ z3c.language/trunk/src/z3c/language/negotiator/interfaces.py	2006-11-15 04:43:00 UTC (rev 71125)
@@ -49,23 +49,14 @@
         required=True,
         )
 
-    sessionLanguages = zope.schema.List(
-        title=_(u"Session languages"),
-        description=_(u"A list of available languages in session policy."),
-        value_type = zope.schema.TextLine(title=_(u"A i18n language."),
-            description=_(u"""A i18n language definition string used in 
-                sessions.""")),
-        required=False,
-        )
-
     offeredLanguages = zope.schema.List(
         title=_(u"Offered languages"),
-        description=_(u"""A list of offered languages in the skin for the 
-            user to select."""),
+        description=_(u"A list of offered languages. Can be used for "
+                      "let the user to select languages which are offered in "
+                      "a skin."""),
         value_type = zope.schema.TextLine(title=_(u"A i18n language."),
-            description=_(u"""
-                A i18n language definition string offerd in the skin for the 
-                user to select.""")),
+            description=_(u"A i18n locale string.")),
+        default=[],
         required=False,
         )
 
@@ -73,11 +64,20 @@
 class IOfferedLanguages(zope.interface.Interface):
 
     def getOfferedLanguages():
-        """View for listing  available (offered) languages."""
+        """A list of available (offered) languages."""
 
     def hasOfferedLanguages():
-        """View for to check if we have i18n session support."""
+        """Retruns a boolean for available offered languages."""
 
 
+class IOfferedLanguagesVocabulary(IVocabularyTokenized):
+    """A vocabulary of available (offered) languages."""
+
+
 class IAvailableTranslationDomainLanguagesVocabulary(IVocabularyTokenized):
-    """Available languages."""
+    """Available translation domain languages.
+    
+    If you use this, take care on that you use the right translation domain.
+    So you probably have to implement your own vocabulary for your ``correct``
+    translation domain.
+    """

Added: z3c.language/trunk/src/z3c/language/negotiator/testing.py
===================================================================
--- z3c.language/trunk/src/z3c/language/negotiator/testing.py	2006-11-15 04:41:49 UTC (rev 71124)
+++ z3c.language/trunk/src/z3c/language/negotiator/testing.py	2006-11-15 04:43:00 UTC (rev 71125)
@@ -0,0 +1,109 @@
+##############################################################################
+#
+# Copyright (c) 2005 Zope Foundation and Contributors.
+# All Rights Reserved.
+#
+# This software is subject to the provisions of the Zope Public License,
+# Version 2.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.
+#
+##############################################################################
+
+"""
+$Id$
+"""
+__docformat__ = 'restructuredtext'
+
+import zope.interface
+import zope.component
+from zope.schema import vocabulary
+from zope.i18n.interfaces import IUserPreferredLanguages
+from zope.publisher.interfaces import IRequest
+from zope.app.authentication.tests import TestClientId
+from zope.app.session.interfaces import IClientId
+from zope.app.session.interfaces import IClientIdManager
+from zope.app.session.interfaces import ISessionDataContainer
+from zope.app.session.http import CookieClientIdManager
+from zope.app.session import session
+
+from z3c import testing
+from z3c.language.session.interfaces import ILanguageSession
+from z3c.language.session.app import LanguageSession
+from z3c.language.negotiator import interfaces
+from z3c.language.negotiator.vocabulary import OfferedLanguagesVocabulary
+
+
+###############################################################################
+#
+# Test component
+#
+###############################################################################
+
+class LanguageSessionStub(object):
+    
+    zope.interface.implements(ILanguageSession)
+    zope.component.adapts(IUserPreferredLanguages)
+
+    def __init__(self, request):
+        pass
+
+    def getLanguage(self):
+        return 'fr'
+
+
+class EnvStub(object):
+    zope.interface.implements(IUserPreferredLanguages)
+
+    def __init__(self, langs=()):
+        self.langs = langs
+
+    def getPreferredLanguages(self):
+        return self.langs
+
+
+###############################################################################
+#
+# placeful setup
+#
+###############################################################################
+
+from zope.app.testing import setup
+
+def doctestSetUp(test):
+    site = setup.placefulSetUp(site=True)
+    test.globs['rootFolder'] = site
+
+    # session setup
+    zope.component.provideAdapter(TestClientId, (IRequest,), IClientId)
+    zope.component.provideAdapter(LanguageSession, (IRequest,), 
+        ILanguageSession)
+    zope.component.provideUtility(CookieClientIdManager(), IClientIdManager)
+    rsdc = session.RAMSessionDataContainer()
+    zope.component.provideUtility(rsdc, ISessionDataContainer, '')
+
+    # register vocabularies
+    vocabulary.setVocabularyRegistry(None)
+    vocabulary._clear()
+    vr = vocabulary.getVocabularyRegistry()
+    
+    vr.register('Offered Languages', OfferedLanguagesVocabulary)
+
+def doctestTearDown(test):
+    setup.placefulTearDown()
+    vocabulary._clear()
+
+
+###############################################################################
+#
+# Public base tests
+#
+###############################################################################
+
+class BaseTestINegotiator(testing.InterfaceBaseTest):
+    """Resuable INegotiator base test."""
+
+    def getTestInterface(self):
+        return interfaces.INegotiator


Property changes on: z3c.language/trunk/src/z3c/language/negotiator/testing.py
___________________________________________________________________
Name: svn:keywords
   + Id
Name: svn:eol-style
   + native

Modified: z3c.language/trunk/src/z3c/language/negotiator/tests.py
===================================================================
--- z3c.language/trunk/src/z3c/language/negotiator/tests.py	2006-11-15 04:41:49 UTC (rev 71124)
+++ z3c.language/trunk/src/z3c/language/negotiator/tests.py	2006-11-15 04:43:00 UTC (rev 71125)
@@ -19,56 +19,29 @@
 
 import unittest
 
-import zope.interface
 import zope.component
-from zope.app.testing import ztapi
+from zope.testing import doctest
+from zope.testing.doctestunit import DocFileSuite
 
-from zope.i18n.interfaces import IUserPreferredLanguages
+from z3c.language.negotiator import testing
+from z3c.language.negotiator import app
+from z3c.language.negotiator import testing
 
-from z3c.language.session.interfaces import ILanguageSession
-from z3c.language.negotiator.app import Negotiator
 
+class NegotiatorBaseTest(testing.BaseTestINegotiator):
 
-class TestLanguageSession(object):
-    
-    zope.interface.implements(ILanguageSession)
-    zope.component.adapts(IUserPreferredLanguages)
+    def getTestClass(self):
+        return app.Negotiator
 
-    def __init__(self, request):
-        pass
 
-    def getLanguage(self):
-        return 'fr'
-
-
-class Env(object):
-    zope.interface.implements(IUserPreferredLanguages)
-
-    def __init__(self, langs=()):
-        self.langs = langs
-
-    def getPreferredLanguages(self):
-        return self.langs
-
-
 class NegotiatorTest(zope.component.testing.PlacelessSetup, 
     unittest.TestCase):
 
     def setUp(self):
         super(NegotiatorTest, self).setUp()
-        self.negotiator = Negotiator()
-        zope.component.provideAdapter(TestLanguageSession)
+        self.negotiator = app.Negotiator()
+        zope.component.provideAdapter(testing.LanguageSessionStub)
 
-    def test__getLanguagePolicy(self):
-        default = 'session --> browser --> server'
-        self.assertEqual(self.negotiator._getLanguagePolicy(), default)
-
-    def test__setLanguagePolicy(self):
-        self.negotiator.policy = 'server'
-        self.assertEqual(self.negotiator.policy, 'server')
-        self.assertRaises(
-            ValueError, self.negotiator._setLanguagePolicy, 'undefined')
-
     def test_policy(self):
         default = 'session --> browser --> server'
         self.assertEqual(self.negotiator.policy, default)
@@ -76,19 +49,14 @@
         self.assertEqual(self.negotiator.policy, 'server')
 
     def test_serverLanguage(self):
-        self.assertEqual(self.negotiator.serverLanguage, None)
-        self.negotiator.serverLanguage = 'de'
-        self.assertEqual(self.negotiator.serverLanguage, 'de')
+        self.assertEqual(self.negotiator.serverLanguage, u'en')
+        self.negotiator.serverLanguage = u'de'
+        self.assertEqual(self.negotiator.serverLanguage, u'de')
 
-    def test_sessionLanguages(self):
-        self.assertEqual(self.negotiator.sessionLanguages, [])
-        self.negotiator.sessionLanguages = ['de', 'en']
-        self.assertEqual(self.negotiator.sessionLanguages, ['de', 'en'])
-
     def test_offeredLanguages(self):
         self.assertEqual(self.negotiator.offeredLanguages, [])
-        self.negotiator.offeredLanguages = ['de', 'en']
-        self.assertEqual(self.negotiator.offeredLanguages, ['de', 'en'])
+        self.negotiator.offeredLanguages = [u'de', u'en']
+        self.assertEqual(self.negotiator.offeredLanguages, [u'de', u'en'])
 
     def test_getLanguages(self):
         # first set the default policy to 'browser'
@@ -104,14 +72,20 @@
             )
 
         for user_pref_langs, obj_langs, expected in _cases:
-            env = Env(user_pref_langs)
+            env = testing.EnvStub(user_pref_langs)
             self.assertEqual(self.negotiator.getLanguage(obj_langs, env),
                              expected)
 
 
 def test_suite():
     return unittest.TestSuite((
+        unittest.makeSuite(NegotiatorBaseTest),
         unittest.makeSuite(NegotiatorTest),
+        DocFileSuite('README.txt',
+                     setUp=testing.doctestSetUp,
+                     tearDown=testing.doctestTearDown,
+                     optionflags=doctest.NORMALIZE_WHITESPACE|doctest.ELLIPSIS,
+                     ),
                            ))
 
 if __name__ == '__main__':

Modified: z3c.language/trunk/src/z3c/language/negotiator/vocabulary.py
===================================================================
--- z3c.language/trunk/src/z3c/language/negotiator/vocabulary.py	2006-11-15 04:41:49 UTC (rev 71124)
+++ z3c.language/trunk/src/z3c/language/negotiator/vocabulary.py	2006-11-15 04:43:00 UTC (rev 71125)
@@ -27,15 +27,32 @@
 from zope.app.zapi import getUtility
 from zope.app.i18n.interfaces import ILocalTranslationDomain
 
-from z3c.language.negotiator import \
-    IAvailableTranslationDomainLanguagesVocabulary
+from z3c.language.negotiator import interfaces
 
 
+class OfferedLanguagesVocabulary(SimpleVocabulary):
+    """A vocabulary of available (offered) languages."""
 
+    implements(interfaces.IOfferedLanguagesVocabulary)
+
+    def __init__(self, context):
+        terms = []
+        
+        # collect offered languages
+        negotiator = getUtility(interfaces.INegotiator)
+        languages = negotiator.offeredLanguages
+
+        for lang in languages:
+            terms.append(SimpleTerm(lang, lang, lang))
+
+        terms.sort(lambda lhs, rhs: cmp(lhs.title, rhs.title))
+        super(OfferedLanguagesVocabulary, self).__init__(terms)
+
+
 class AvailableTranslationDomainLanguagesVocabulary(SimpleVocabulary):
     """A vocabular of available languages from a translation domain."""
 
-    implements(IAvailableTranslationDomainLanguagesVocabulary)
+    implements(interfaces.IAvailableTranslationDomainLanguagesVocabulary)
 
     def __init__(self, context, domain='zope'):
         terms = []
@@ -52,7 +69,6 @@
             terms)
 
 
-
 class AvailableTranslationDomainLanguagesVocabularyForZ3C(
     AvailableTranslationDomainLanguagesVocabulary):
     """AvailableTranslationDomainLanguagesVocabulary for z3c domain."""
@@ -62,4 +78,3 @@
     def __init__(self, context, ):
         super(AvailableTranslationDomainLanguagesVocabulary,self).__init__(
             context, domain='z3c')
-    



More information about the Checkins mailing list