Author: jure
Date: Tue Mar 12 09:01:24 2013
New Revision: 1455452

URL: http://svn.apache.org/r1455452
Log:
#390, product extensions to ticket wiki syntax (short JIRA syntax), patch 
t390_r1453952_product_ticket_jira.diff applied (from Olemis)


Added:
    
incubator/bloodhound/branches/bep_0003_multiproduct/bloodhound_multiproduct/tests/product-nomatch-link-tests.txt
    
incubator/bloodhound/branches/bep_0003_multiproduct/bloodhound_multiproduct/tests/product-ticket-jira-tests.txt
Modified:
    
incubator/bloodhound/branches/bep_0003_multiproduct/bloodhound_multiproduct/multiproduct/api.py
    
incubator/bloodhound/branches/bep_0003_multiproduct/bloodhound_multiproduct/tests/wikisyntax.py

Modified: 
incubator/bloodhound/branches/bep_0003_multiproduct/bloodhound_multiproduct/multiproduct/api.py
URL: 
http://svn.apache.org/viewvc/incubator/bloodhound/branches/bep_0003_multiproduct/bloodhound_multiproduct/multiproduct/api.py?rev=1455452&r1=1455451&r2=1455452&view=diff
==============================================================================
--- 
incubator/bloodhound/branches/bep_0003_multiproduct/bloodhound_multiproduct/multiproduct/api.py
 (original)
+++ 
incubator/bloodhound/branches/bep_0003_multiproduct/bloodhound_multiproduct/multiproduct/api.py
 Tue Mar 12 09:01:24 2013
@@ -338,16 +338,27 @@ class MultiProductSystem(Component):
         return bool(products)
 
     # IWikiSyntaxProvider methods
-    PRODUCT_SYNTAX_DELIMITER = u'-'
 
-    def get_wiki_syntax(self):
-        return []
+    short_syntax_delimiter = u'->'
 
+    def get_wiki_syntax(self):
+        if self.env[ProductTicketModule] is not None:
+            yield (r"(?<!\S)!?(?P<jtp>()(?!\d)\w+)-(?P<jtt>\d+)"
+                   r"(?P<jtf>[?#]\S+)?",
+                   lambda f, m, fm : 
+                        self._format_link(f, 'product', 
+                                          '%s:ticket:%s' % 
+                                                (fm.group('jtp'), 
+                                                 fm.group('jtt') +
+                                                 (fm.group('jtf') or '')), 
+                                          m, fm))
+ 
     def get_link_resolvers(self):
         yield ('global', self._format_link)
         yield ('product', self._format_link)
 
     # Internal methods
+
     def _render_link(self, context, name, label, extra='', prefix=None):
         """Render link to product page.
         """
@@ -455,7 +466,8 @@ class MultiProductSystem(Component):
         return subformatter.match(sublink + extra)
 
 
-PRODUCT_SYNTAX_DELIMITER = MultiProductSystem.PRODUCT_SYNTAX_DELIMITER
+PRODUCT_SYNTAX_DELIMITER = MultiProductSystem.short_syntax_delimiter
 
 from multiproduct.env import ProductEnvironment, lookup_product_env, \
         resolve_product_href
+from multiproduct.ticket.web_ui import ProductTicketModule

Added: 
incubator/bloodhound/branches/bep_0003_multiproduct/bloodhound_multiproduct/tests/product-nomatch-link-tests.txt
URL: 
http://svn.apache.org/viewvc/incubator/bloodhound/branches/bep_0003_multiproduct/bloodhound_multiproduct/tests/product-nomatch-link-tests.txt?rev=1455452&view=auto
==============================================================================
--- 
incubator/bloodhound/branches/bep_0003_multiproduct/bloodhound_multiproduct/tests/product-nomatch-link-tests.txt
 (added)
+++ 
incubator/bloodhound/branches/bep_0003_multiproduct/bloodhound_multiproduct/tests/product-nomatch-link-tests.txt
 Tue Mar 12 09:01:24 2013
@@ -0,0 +1,48 @@
+============================================================
+
+        JIRA compact syntax with leading digit
+
+============================== leading digit - JIRA syntax link resolver
+0abc-1
+0abc-12
+0abc-abc
+------------------------------
+<p>
+0abc-1
+0abc-12
+0abc-abc
+</p>
+------------------------------
+============================== leading digit - JIRA syntax link resolver + 
arguments
+0abc-1?format=csv
+0abc-1#comment:3
+------------------------------
+<p>
+0abc-1?format=csv
+0abc-1#comment:3
+</p>
+------------------------------
+============================== leading digit - JIRA syntax link shorthand form
+0abc-1, 0abc-2
+0abc-12, 0abc-abc
+------------------------------
+<p>
+0abc-1, 0abc-2
+0abc-12, 0abc-abc
+</p>
+------------------------------
+============================== leading digit - JIRA syntax escaping the above
+!0abc-1
+------------------------------
+<p>
+!0abc-1
+</p>
+------------------------------
+!0abc-1
+============================== leading digit - JIRA syntax with unicode digits
+0abc-⁴²
+------------------------------
+<p>
+0abc-⁴²
+</p>
+------------------------------

Added: 
incubator/bloodhound/branches/bep_0003_multiproduct/bloodhound_multiproduct/tests/product-ticket-jira-tests.txt
URL: 
http://svn.apache.org/viewvc/incubator/bloodhound/branches/bep_0003_multiproduct/bloodhound_multiproduct/tests/product-ticket-jira-tests.txt?rev=1455452&view=auto
==============================================================================
--- 
incubator/bloodhound/branches/bep_0003_multiproduct/bloodhound_multiproduct/tests/product-ticket-jira-tests.txt
 (added)
+++ 
incubator/bloodhound/branches/bep_0003_multiproduct/bloodhound_multiproduct/tests/product-ticket-jira-tests.txt
 Tue Mar 12 09:01:24 2013
@@ -0,0 +1,63 @@
+============================================================
+
+        A subset of product ticket links rewritten using JIRA compact syntax
+
+============================== %(tc_title_prefix)s - JIRA syntax link resolver
+%(setup_product)s-1
+%(setup_product)s-12
+%(setup_product)s-abc
+------------------------------
+<p>
+<a class="new ticket" href="%(path_prefix)s/ticket/1" 
title="%(link_title_prefix)sThis is the summary (new)">%(setup_product)s-1</a>
+<a class="missing ticket">%(setup_product)s-12</a>
+%(setup_product)s-abc
+</p>
+------------------------------
+============================== %(tc_title_prefix)s - JIRA syntax link resolver 
+ arguments
+%(setup_product)s-1?format=csv
+%(setup_product)s-1#comment:3
+------------------------------
+<p>
+<a class="new ticket" href="%(path_prefix)s/ticket/1?format=csv" 
title="%(link_title_prefix)sThis is the summary 
(new)">%(setup_product)s-1?format=csv</a>
+<a class="new ticket" href="%(path_prefix)s/ticket/1#comment:3" 
title="%(link_title_prefix)sThis is the summary 
(new)">%(setup_product)s-1#comment:3</a>
+</p>
+------------------------------
+============================== %(tc_title_prefix)s - JIRA syntax link 
shorthand form
+%(setup_product)s-1, %(setup_product)s-2
+%(setup_product)s-12, %(setup_product)s-abc
+------------------------------
+<p>
+<a class="new ticket" href="%(path_prefix)s/ticket/1" 
title="%(link_title_prefix)sThis is the summary (new)">%(setup_product)s-1</a>, 
<a class="missing ticket">%(setup_product)s-2</a>
+<a class="missing ticket">%(setup_product)s-12</a>, %(setup_product)s-abc
+</p>
+------------------------------
+============================== %(tc_title_prefix)s - JIRA syntax escaping the 
above
+!%(setup_product)s-1
+------------------------------
+<p>
+%(setup_product)s-1
+</p>
+------------------------------
+%(setup_product)s-1
+============================== %(tc_title_prefix)s - JIRA syntax InterTrac for 
tickets
+%(link_prefix)strac-2041
+[%(link_prefix)strac-2041 Trac #2041]
+%(link_prefix)sT-2041
+------------------------------
+<p>
+<a class="missing product">trac-2041</a>
+<a class="missing product">trac-2041</a>
+<a class="missing product">T-2041</a>
+</p>
+------------------------------
+============================== %(tc_title_prefix)s - JIRA syntax with unicode 
digits
+%(setup_product)s-⁴²
+%(link_prefix)sT-²⁰⁴¹
+%(link_prefix)strac-²⁰⁴¹
+------------------------------
+<p>
+<a class="missing ticket">%(setup_product)s-⁴²</a>
+<a class="missing product">T-²⁰⁴¹</a>
+<a class="missing product">trac-²⁰⁴¹</a>
+</p>
+------------------------------

Modified: 
incubator/bloodhound/branches/bep_0003_multiproduct/bloodhound_multiproduct/tests/wikisyntax.py
URL: 
http://svn.apache.org/viewvc/incubator/bloodhound/branches/bep_0003_multiproduct/bloodhound_multiproduct/tests/wikisyntax.py?rev=1455452&r1=1455451&r2=1455452&view=diff
==============================================================================
--- 
incubator/bloodhound/branches/bep_0003_multiproduct/bloodhound_multiproduct/tests/wikisyntax.py
 (original)
+++ 
incubator/bloodhound/branches/bep_0003_multiproduct/bloodhound_multiproduct/tests/wikisyntax.py
 Tue Mar 12 09:01:24 2013
@@ -77,6 +77,8 @@ PRODUCT_SEARCH_LINKS = to_unicode(pkg_re
         __name__, 'product-search-link-tests.txt'))
 PRODUCT_TICKET_LINKS = to_unicode(pkg_resources.resource_string(
         __name__, 'product-ticket-link-tests.txt'))
+PRODUCT_TICKET_JIRA = to_unicode(pkg_resources.resource_string(
+        __name__, 'product-ticket-jira-tests.txt'))
 #PRODUCT_REPORT_LINKS = to_unicode(pkg_resources.resource_string(
 #        __name__, 'product-report-link-tests.txt'))
 PRODUCT_MILESTONE_LINKS = to_unicode(pkg_resources.resource_string(
@@ -87,6 +89,8 @@ PRODUCT_QUERY2_LINKS = to_unicode(pkg_re
         __name__, 'product-query2-link-tests.txt'))
 PRODUCT_COMMENT_LINKS = to_unicode(pkg_resources.resource_string(
         __name__, 'product-comment-link-tests.txt'))
+PRODUCT_NOMATCH_LINKS = to_unicode(pkg_resources.resource_string(
+        __name__, 'product-nomatch-link-tests.txt'))
 
 PRODUCT_PREFIXES = MultiproductTestCase.PRODUCT_DATA.keys()
 PRODUCT_PREFIXES.remove(MultiproductTestCase.default_product)
@@ -131,21 +135,22 @@ def link_mp_setup(_setup):
 # load_products         : optional product prefixes list to load at setup time
 # *_product_name        : target product name (e.g. setup_product_name ) 
 TEST_PRODUCT_CONTEXTS = [
-                         {'tc_title_prefix' : 'product: links',
-                          'link_prefix' : 'product:tp1:',
-                          'link_prefix_quote' : 'product:"tp1:',
-                          'path_prefix' : '/products/tp1',
-                          'main_product' : 'tp2',
-                          'link_title_prefix' : '[tp1] ',
-                          },
-                         {'tc_title_prefix' : 'product: links unicode prefix',
-                          'link_prefix' : u'product:xü:',
-                          'link_prefix_quote' : u'product:"xü:',
-                          'path_prefix' : '/products/x%C3%BC',
-                          'main_product' : 'tp2',
-                          'setup_product' : u'xü',
-                          'link_title_prefix' : u'[xü] ',
-                          },
+#                         {'tc_title_prefix' : 'product: links',
+#                          'link_prefix' : 'product:tp1:',
+#                          'link_prefix_quote' : 'product:"tp1:',
+#                          'path_prefix' : '/products/tp1',
+#                          'main_product' : 'tp2',
+#                          'setup_product' : 'tp1',
+#                          'link_title_prefix' : '[tp1] ',
+#                          },
+#                         {'tc_title_prefix' : 'product: links unicode prefix',
+#                          'link_prefix' : u'product:xü:',
+#                          'link_prefix_quote' : u'product:"xü:',
+#                          'path_prefix' : '/products/x%C3%BC',
+#                          'main_product' : 'tp2',
+#                          'setup_product' : u'xü',
+#                          'link_title_prefix' : u'[xü] ',
+#                          },
 
                          # Ignored as TracLinks resolver won't match expression
                          #{'tc_title_prefix' : 'product:: refs to global',
@@ -156,25 +161,25 @@ TEST_PRODUCT_CONTEXTS = [
                          # 'link_title_prefix' : '<global> '
                          # },
 
-                         {'tc_title_prefix' : 'global: links',
-                          'link_prefix' : 'global:',
-                          'link_prefix_quote' : 'global:"',
-                          'path_prefix' : '',
-                          'main_product' : 'tp2',
-                          'setup_product' : '',
-                          'link_title_prefix' : '&lt;global&gt; ',
-                          },
-#                          {'tc_title_prefix' : 'short product syntax',
-#                          'link_prefix' : 'tp1' + PRODUCT_SYNTAX_DELIMITER,
-#                          'path_prefix' : '/products/tp1',
+#                         {'tc_title_prefix' : 'global: links',
+#                          'link_prefix' : 'global:',
+#                          'link_prefix_quote' : 'global:"',
+#                          'path_prefix' : '',
 #                          'main_product' : 'tp2',
+#                          'setup_product' : '',
+#                          'link_title_prefix' : '&lt;global&gt; ',
 #                          },
-#                         {'tc_title_prefix' : 'short product syntax unicode 
prefix',
-#                          'link_prefix' : u'xü' + PRODUCT_SYNTAX_DELIMITER,
-#                          'path_prefix' : '/products/x%C3%BC',
-#                          'main_product' : 'tp2',
-#                          'setup_product' : u'xü',
-#                          },
+                          {'tc_title_prefix' : 'short product syntax',
+                          'link_prefix' : 'tp1' + PRODUCT_SYNTAX_DELIMITER,
+                          'path_prefix' : '/products/tp1',
+                          'main_product' : 'tp2',
+                          },
+                         {'tc_title_prefix' : 'short product syntax unicode 
prefix',
+                          'link_prefix' : u'xü' + PRODUCT_SYNTAX_DELIMITER,
+                          'path_prefix' : '/products/x%C3%BC',
+                          'main_product' : 'tp2',
+                          'setup_product' : u'xü',
+                          },
                         ]
 for _ctx in TEST_PRODUCT_CONTEXTS:
     _product_names = {}
@@ -206,7 +211,7 @@ def test_suite():
                                   file=wikisyntax.__file__,
                                   context=wikisyntax.email_default_context(),
                                   
setup=wikisyntax.email_never_obfuscate_setup))
-    
+
     # Product wiki syntax
     suite.addTest(formatter.test_suite(PRODUCT_LINKS, 
                                   setup=load_products_setup(PRODUCT_PREFIXES),
@@ -232,6 +237,14 @@ def test_suite():
                                   # ticket_wikisyntax.ticket_teardown,
                                   mpctx=ctx)
                    for ctx in TEST_PRODUCT_CONTEXTS)
+    suite.addTests(formatter.test_suite(PRODUCT_TICKET_JIRA % ctx, 
+                                  
link_mp_setup(ticket_wikisyntax.ticket_setup), 
+                                  __file__,
+                                  # No need to invoke it anymore
+                                  # ticket_wikisyntax.ticket_teardown,
+                                  mpctx=ctx)
+                   for ctx in TEST_PRODUCT_CONTEXTS 
+                   if ctx['path_prefix'])
 #    suite.addTests(formatter.test_suite(PRODUCT_REPORT_LINKS % ctx, 
 #                                  
link_mp_setup(ticket_wikisyntax.report_setup), 
 #                                  __file__,
@@ -260,6 +273,10 @@ def test_suite():
                                   __file__,
                                   mpctx=ctx)
                    for ctx in TEST_PRODUCT_CONTEXTS)
+
+    suite.addTest(formatter.test_suite(PRODUCT_NOMATCH_LINKS,
+                                  file=__file__))
+
     return suite
 
 


Reply via email to