[Products.Silva][Sylvain Viollon] Extend and tests API.

[email protected] Wed, 28 Aug 2013 12:00:25 +0200
Newsgroups gmane.comp.web.zope.silva.cvs
Message-ID <[email protected]>
author:    Sylvain Viollon
date:      Wed Aug 28 12:00:22 2013 +0200
revision:  11853:7c695cc950df in Products.Silva
branch:    2.4
details:   https://hg.infrae.com/Products.Silva?cmd=changeset;node=7c695cc950df
modified:  Products/Silva/icon.py Products/Silva/tests/test_icon.py
added:     
removed:   
log:       Extend and tests API.


diffstat:

 Products/Silva/icon.py            |  20 ++++++++++-----
 Products/Silva/tests/test_icon.py |  50 +++++++++++++++++++++++++++++++++++++++
 2 files changed, 63 insertions(+), 7 deletions(-)

diffs (111 lines):

diff -r 7c450b1e9276 -r 7c695cc950df Products/Silva/icon.py
--- a/Products/Silva/icon.py	Tue Aug 27 18:23:30 2013 +0200
+++ b/Products/Silva/icon.py	Wed Aug 28 12:00:22 2013 +0200
@@ -191,23 +191,29 @@
         site = IVirtualSite(self.request)
         return site.get_root_url()
 
-    def get_tag(self, content=None, identifier=None):
+    def get_tag(self, content=None, identifier=None, default=_marker):
         if content is not None:
             icon = self.get_content(content)
             alt = getattr(content, 'meta_type', 'Missing')
         else:
-            icon = self.get_identifier(identifier)
+            icon = self.get_identifier(identifier, default=_marker)
             alt = identifier or 'Missing'
         if icon is not None:
             return icon.template.format(
                 url=icon.get_url(self, content), alt=alt)
         return u''
 
-    def get_identifier(self, identifier):
+    def get_identifier(self, identifier, default=_marker):
+        if not isinstance(identifier, tuple):
+            identifier = ('meta_type', identifier)
         try:
-            return self.sprite.get(('meta_type', identifier))
+            return self.sprite.get(identifier)
         except ValueError:
-            return self.sprite.get(('default', None), default=None)
+            if default is _marker:
+                default = ('default', None)
+            elif not isinstance(default, tuple):
+                default = ('default', default)
+            return self.sprite.get(default, default=None)
 
     def get_content(self, content):
         identifier = ('meta_type', None)
@@ -254,10 +260,10 @@
             return icon.get_url(self, content)
         return None
 
-    def get_identifier_url(self, identifier):
+    def get_identifier_url(self, identifier, default=_marker):
         """Return a URL out of a identifier.
         """
-        icon = self.get_identifier(identifier)
+        icon = self.get_identifier(identifier, default=default)
         if icon is not None:
             return icon.get_url(self, None)
         return None
diff -r 7c450b1e9276 -r 7c695cc950df Products/Silva/tests/test_icon.py
--- a/Products/Silva/tests/test_icon.py	Tue Aug 27 18:23:30 2013 +0200
+++ b/Products/Silva/tests/test_icon.py	Wed Aug 28 12:00:22 2013 +0200
@@ -108,6 +108,56 @@
             resolver.get_tag(),
             '<img height="16" width="16" src="http://localhost/root/++static++/silva.icons/missing.png" alt="Missing" />')
 
+    def test_custom_icons(self):
+        """Test registring icons with a custom namespace and looking
+        them up.
+        """
+        registry.register(('test-silva', 'model'), '++custom++foo.png')
+        registry.register(('test-silva', 'page'), '++custom++bar.jpeg')
+        registry.register(('default', 'test-silva'), '++custom++empty.gif')
+
+        resolver = queryAdapter(TestRequest(), IIconResolver)
+        self.assertTrue(verifyObject(IIconResolver, resolver))
+
+        icon = resolver.get_identifier(('test-silva', 'model'))
+        self.assertTrue(verifyObject(IIcon, icon))
+        self.assertEqual(str(icon), '++custom++foo.png')
+        self.assertEqual(
+            resolver.get_identifier_url(('test-silva', 'model')),
+            'http://localhost/root/++custom++foo.png')
+
+        icon = resolver.get_identifier(('test-silva', 'missing'))
+        self.assertTrue(verifyObject(IIcon, icon))
+        self.assertEqual(str(icon), '++static++/silva.icons/generic.gif')
+        self.assertEqual(
+            resolver.get_identifier_url(('test-silva', 'missing')),
+            'http://localhost/root/++static++/silva.icons/generic.gif')
+
+        icon = resolver.get_identifier(
+            ('test-silva', 'missing'), default='test-silva')
+        self.assertTrue(verifyObject(IIcon, icon))
+        self.assertEqual(str(icon), '++custom++empty.gif')
+        self.assertEqual(
+            resolver.get_identifier_url(
+                ('test-silva', 'missing'), default='test-silva'),
+            'http://localhost/root/++custom++empty.gif')
+
+        icon = resolver.get_identifier(
+            ('test-silva', 'missing'), default=('test-silva', 'page'))
+        self.assertTrue(verifyObject(IIcon, icon))
+        self.assertEqual(str(icon), '++custom++bar.jpeg')
+        self.assertEqual(
+            resolver.get_identifier_url(
+                ('test-silva', 'missing'), default=('test-silva', 'page')),
+            'http://localhost/root/++custom++bar.jpeg')
+
+        icon = resolver.get_identifier(
+            ('test-silva', 'missing'), default=('test-silva', 'metoo'))
+        self.assertIs(icon, None)
+        self.assertIs(
+            resolver.get_identifier_url(
+                ('test-silva', 'missing'), default=('test-silva', 'metoo')),
+            None)
 
     def test_default_icons(self):
         """Test default registered icons.