annotate examples/trac/trac/wiki/tests/formatter.py @ 39:93b4dcbafd7b trunk

Copy Trac to main branch.
author cmlenz
date Mon, 03 Jul 2006 18:53:27 +0000
parents
children
rev   line source
39
93b4dcbafd7b Copy Trac to main branch.
cmlenz
parents:
diff changeset
1 import os
93b4dcbafd7b Copy Trac to main branch.
cmlenz
parents:
diff changeset
2 import inspect
93b4dcbafd7b Copy Trac to main branch.
cmlenz
parents:
diff changeset
3 import StringIO
93b4dcbafd7b Copy Trac to main branch.
cmlenz
parents:
diff changeset
4 import unittest
93b4dcbafd7b Copy Trac to main branch.
cmlenz
parents:
diff changeset
5
93b4dcbafd7b Copy Trac to main branch.
cmlenz
parents:
diff changeset
6 from trac.core import *
93b4dcbafd7b Copy Trac to main branch.
cmlenz
parents:
diff changeset
7 from trac.wiki.api import IWikiSyntaxProvider
93b4dcbafd7b Copy Trac to main branch.
cmlenz
parents:
diff changeset
8 from trac.wiki.formatter import Formatter, OneLinerFormatter
93b4dcbafd7b Copy Trac to main branch.
cmlenz
parents:
diff changeset
9 from trac.wiki.macros import WikiMacroBase
93b4dcbafd7b Copy Trac to main branch.
cmlenz
parents:
diff changeset
10 from trac.test import Mock, EnvironmentStub
93b4dcbafd7b Copy Trac to main branch.
cmlenz
parents:
diff changeset
11 from trac.util.text import to_unicode
93b4dcbafd7b Copy Trac to main branch.
cmlenz
parents:
diff changeset
12 from trac.util.markup import html
93b4dcbafd7b Copy Trac to main branch.
cmlenz
parents:
diff changeset
13
93b4dcbafd7b Copy Trac to main branch.
cmlenz
parents:
diff changeset
14 # We need to supply our own macro because the real macros
93b4dcbafd7b Copy Trac to main branch.
cmlenz
parents:
diff changeset
15 # can not be loaded using our 'fake' environment.
93b4dcbafd7b Copy Trac to main branch.
cmlenz
parents:
diff changeset
16
93b4dcbafd7b Copy Trac to main branch.
cmlenz
parents:
diff changeset
17 class HelloWorldMacro(WikiMacroBase):
93b4dcbafd7b Copy Trac to main branch.
cmlenz
parents:
diff changeset
18 """A dummy macro used by the unit test."""
93b4dcbafd7b Copy Trac to main branch.
cmlenz
parents:
diff changeset
19
93b4dcbafd7b Copy Trac to main branch.
cmlenz
parents:
diff changeset
20 def render_macro(self, req, name, content):
93b4dcbafd7b Copy Trac to main branch.
cmlenz
parents:
diff changeset
21 return 'Hello World, args = ' + content
93b4dcbafd7b Copy Trac to main branch.
cmlenz
parents:
diff changeset
22
93b4dcbafd7b Copy Trac to main branch.
cmlenz
parents:
diff changeset
23 class DivHelloWorldMacro(WikiMacroBase):
93b4dcbafd7b Copy Trac to main branch.
cmlenz
parents:
diff changeset
24 """A dummy macro returning a div block, used by the unit test."""
93b4dcbafd7b Copy Trac to main branch.
cmlenz
parents:
diff changeset
25
93b4dcbafd7b Copy Trac to main branch.
cmlenz
parents:
diff changeset
26 def render_macro(self, req, name, content):
93b4dcbafd7b Copy Trac to main branch.
cmlenz
parents:
diff changeset
27 return '<div>Hello World, args = %s</div>' % content
93b4dcbafd7b Copy Trac to main branch.
cmlenz
parents:
diff changeset
28
93b4dcbafd7b Copy Trac to main branch.
cmlenz
parents:
diff changeset
29 class DivCodeMacro(WikiMacroBase):
93b4dcbafd7b Copy Trac to main branch.
cmlenz
parents:
diff changeset
30 """A dummy macro returning a div block, used by the unit test."""
93b4dcbafd7b Copy Trac to main branch.
cmlenz
parents:
diff changeset
31
93b4dcbafd7b Copy Trac to main branch.
cmlenz
parents:
diff changeset
32 def render_macro(self, req, name, content):
93b4dcbafd7b Copy Trac to main branch.
cmlenz
parents:
diff changeset
33 return '<div class="code">Hello World, args = %s</div>' % content
93b4dcbafd7b Copy Trac to main branch.
cmlenz
parents:
diff changeset
34
93b4dcbafd7b Copy Trac to main branch.
cmlenz
parents:
diff changeset
35 class DivCodeElementMacro(WikiMacroBase):
93b4dcbafd7b Copy Trac to main branch.
cmlenz
parents:
diff changeset
36 """A dummy macro returning a div block, used by the unit test."""
93b4dcbafd7b Copy Trac to main branch.
cmlenz
parents:
diff changeset
37
93b4dcbafd7b Copy Trac to main branch.
cmlenz
parents:
diff changeset
38 def render_macro(self, req, name, content):
93b4dcbafd7b Copy Trac to main branch.
cmlenz
parents:
diff changeset
39 return html.DIV('Hello World, args = ', content, class_="code")
93b4dcbafd7b Copy Trac to main branch.
cmlenz
parents:
diff changeset
40
93b4dcbafd7b Copy Trac to main branch.
cmlenz
parents:
diff changeset
41 class SampleResolver(Component):
93b4dcbafd7b Copy Trac to main branch.
cmlenz
parents:
diff changeset
42 """A dummy macro returning a div block, used by the unit test."""
93b4dcbafd7b Copy Trac to main branch.
cmlenz
parents:
diff changeset
43
93b4dcbafd7b Copy Trac to main branch.
cmlenz
parents:
diff changeset
44 implements(IWikiSyntaxProvider)
93b4dcbafd7b Copy Trac to main branch.
cmlenz
parents:
diff changeset
45
93b4dcbafd7b Copy Trac to main branch.
cmlenz
parents:
diff changeset
46 def get_wiki_syntax(self):
93b4dcbafd7b Copy Trac to main branch.
cmlenz
parents:
diff changeset
47 return []
93b4dcbafd7b Copy Trac to main branch.
cmlenz
parents:
diff changeset
48
93b4dcbafd7b Copy Trac to main branch.
cmlenz
parents:
diff changeset
49 def get_link_resolvers(self):
93b4dcbafd7b Copy Trac to main branch.
cmlenz
parents:
diff changeset
50 yield ('link', self._format_link)
93b4dcbafd7b Copy Trac to main branch.
cmlenz
parents:
diff changeset
51
93b4dcbafd7b Copy Trac to main branch.
cmlenz
parents:
diff changeset
52 def _format_link(self, formatter, ns, target, label):
93b4dcbafd7b Copy Trac to main branch.
cmlenz
parents:
diff changeset
53 kind, module = 'text', 'stuff'
93b4dcbafd7b Copy Trac to main branch.
cmlenz
parents:
diff changeset
54 try:
93b4dcbafd7b Copy Trac to main branch.
cmlenz
parents:
diff changeset
55 kind = int(target) % 2 and 'odd' or 'even'
93b4dcbafd7b Copy Trac to main branch.
cmlenz
parents:
diff changeset
56 module = 'thing'
93b4dcbafd7b Copy Trac to main branch.
cmlenz
parents:
diff changeset
57 except ValueError:
93b4dcbafd7b Copy Trac to main branch.
cmlenz
parents:
diff changeset
58 pass
93b4dcbafd7b Copy Trac to main branch.
cmlenz
parents:
diff changeset
59 return html.A(label, class_='%s resolver' % kind,
93b4dcbafd7b Copy Trac to main branch.
cmlenz
parents:
diff changeset
60 href=formatter.href(module, target))
93b4dcbafd7b Copy Trac to main branch.
cmlenz
parents:
diff changeset
61
93b4dcbafd7b Copy Trac to main branch.
cmlenz
parents:
diff changeset
62
93b4dcbafd7b Copy Trac to main branch.
cmlenz
parents:
diff changeset
63 class WikiTestCase(unittest.TestCase):
93b4dcbafd7b Copy Trac to main branch.
cmlenz
parents:
diff changeset
64
93b4dcbafd7b Copy Trac to main branch.
cmlenz
parents:
diff changeset
65 def __init__(self, input, correct, file, line):
93b4dcbafd7b Copy Trac to main branch.
cmlenz
parents:
diff changeset
66 unittest.TestCase.__init__(self, 'test')
93b4dcbafd7b Copy Trac to main branch.
cmlenz
parents:
diff changeset
67 self.title, self.input = input.split('\n', 1)
93b4dcbafd7b Copy Trac to main branch.
cmlenz
parents:
diff changeset
68 if self.title:
93b4dcbafd7b Copy Trac to main branch.
cmlenz
parents:
diff changeset
69 self.title = self.title.strip()
93b4dcbafd7b Copy Trac to main branch.
cmlenz
parents:
diff changeset
70 self.correct = correct
93b4dcbafd7b Copy Trac to main branch.
cmlenz
parents:
diff changeset
71 self.file = file
93b4dcbafd7b Copy Trac to main branch.
cmlenz
parents:
diff changeset
72 self.line = line
93b4dcbafd7b Copy Trac to main branch.
cmlenz
parents:
diff changeset
73
93b4dcbafd7b Copy Trac to main branch.
cmlenz
parents:
diff changeset
74 self.env = EnvironmentStub()
93b4dcbafd7b Copy Trac to main branch.
cmlenz
parents:
diff changeset
75 # -- macros support
93b4dcbafd7b Copy Trac to main branch.
cmlenz
parents:
diff changeset
76 self.env.path = ''
93b4dcbafd7b Copy Trac to main branch.
cmlenz
parents:
diff changeset
77 # -- intertrac support
93b4dcbafd7b Copy Trac to main branch.
cmlenz
parents:
diff changeset
78 self.env.config.set('intertrac', 'trac.title', "Trac's Trac")
93b4dcbafd7b Copy Trac to main branch.
cmlenz
parents:
diff changeset
79 self.env.config.set('intertrac', 'trac.url',
93b4dcbafd7b Copy Trac to main branch.
cmlenz
parents:
diff changeset
80 "http://projects.edgewall.com/trac")
93b4dcbafd7b Copy Trac to main branch.
cmlenz
parents:
diff changeset
81 self.env.config.set('intertrac', 't', 'trac')
93b4dcbafd7b Copy Trac to main branch.
cmlenz
parents:
diff changeset
82
93b4dcbafd7b Copy Trac to main branch.
cmlenz
parents:
diff changeset
83 from trac.web.href import Href
93b4dcbafd7b Copy Trac to main branch.
cmlenz
parents:
diff changeset
84 self.req = Mock(href = Href('/'),
93b4dcbafd7b Copy Trac to main branch.
cmlenz
parents:
diff changeset
85 abs_href = Href('http://www.example.com/'))
93b4dcbafd7b Copy Trac to main branch.
cmlenz
parents:
diff changeset
86 # TODO: remove the following lines in order to discover
93b4dcbafd7b Copy Trac to main branch.
cmlenz
parents:
diff changeset
87 # all the places were we should use the req.href
93b4dcbafd7b Copy Trac to main branch.
cmlenz
parents:
diff changeset
88 # instead of env.href (will be solved by the Wikifier patch)
93b4dcbafd7b Copy Trac to main branch.
cmlenz
parents:
diff changeset
89 self.env.href = self.req.href
93b4dcbafd7b Copy Trac to main branch.
cmlenz
parents:
diff changeset
90 self.env.abs_href = self.req.abs_href
93b4dcbafd7b Copy Trac to main branch.
cmlenz
parents:
diff changeset
91
93b4dcbafd7b Copy Trac to main branch.
cmlenz
parents:
diff changeset
92 def test(self):
93b4dcbafd7b Copy Trac to main branch.
cmlenz
parents:
diff changeset
93 """Testing WikiFormatter"""
93b4dcbafd7b Copy Trac to main branch.
cmlenz
parents:
diff changeset
94 out = StringIO.StringIO()
93b4dcbafd7b Copy Trac to main branch.
cmlenz
parents:
diff changeset
95 formatter = self.formatter()
93b4dcbafd7b Copy Trac to main branch.
cmlenz
parents:
diff changeset
96 formatter.format(self.input, out)
93b4dcbafd7b Copy Trac to main branch.
cmlenz
parents:
diff changeset
97 v = out.getvalue().replace('\r','')
93b4dcbafd7b Copy Trac to main branch.
cmlenz
parents:
diff changeset
98 try:
93b4dcbafd7b Copy Trac to main branch.
cmlenz
parents:
diff changeset
99 self.assertEquals(self.correct, v)
93b4dcbafd7b Copy Trac to main branch.
cmlenz
parents:
diff changeset
100 except AssertionError, e:
93b4dcbafd7b Copy Trac to main branch.
cmlenz
parents:
diff changeset
101 msg = to_unicode(e)
93b4dcbafd7b Copy Trac to main branch.
cmlenz
parents:
diff changeset
102 import re
93b4dcbafd7b Copy Trac to main branch.
cmlenz
parents:
diff changeset
103 match = re.match(r"u?'(.*)' != u?'(.*)'", msg)
93b4dcbafd7b Copy Trac to main branch.
cmlenz
parents:
diff changeset
104 if match:
93b4dcbafd7b Copy Trac to main branch.
cmlenz
parents:
diff changeset
105 sep = '-' * 15
93b4dcbafd7b Copy Trac to main branch.
cmlenz
parents:
diff changeset
106 msg = '\n%s expected:\n%s\n%s actual:\n%s\n%s\n' \
93b4dcbafd7b Copy Trac to main branch.
cmlenz
parents:
diff changeset
107 % (sep, match.group(1), sep, match.group(2), sep)
93b4dcbafd7b Copy Trac to main branch.
cmlenz
parents:
diff changeset
108 # Tip: sometimes, 'expected' and 'actual' differ only by whitespace,
93b4dcbafd7b Copy Trac to main branch.
cmlenz
parents:
diff changeset
109 # then replace the above line by those two:
93b4dcbafd7b Copy Trac to main branch.
cmlenz
parents:
diff changeset
110 # % (sep, match.group(1).replace(' ', '.'),
93b4dcbafd7b Copy Trac to main branch.
cmlenz
parents:
diff changeset
111 # sep, match.group(2).replace(' ', '.'), sep)
93b4dcbafd7b Copy Trac to main branch.
cmlenz
parents:
diff changeset
112 msg = msg.replace(r'\n', '\n')
93b4dcbafd7b Copy Trac to main branch.
cmlenz
parents:
diff changeset
113 raise AssertionError( # See below for details
93b4dcbafd7b Copy Trac to main branch.
cmlenz
parents:
diff changeset
114 '%s\n\n%s:%s: "%s" (%s flavor)' \
93b4dcbafd7b Copy Trac to main branch.
cmlenz
parents:
diff changeset
115 % (msg, self.file, self.line, self.title, formatter.flavor))
93b4dcbafd7b Copy Trac to main branch.
cmlenz
parents:
diff changeset
116
93b4dcbafd7b Copy Trac to main branch.
cmlenz
parents:
diff changeset
117 def formatter(self):
93b4dcbafd7b Copy Trac to main branch.
cmlenz
parents:
diff changeset
118 return Formatter(self.env, self.req)
93b4dcbafd7b Copy Trac to main branch.
cmlenz
parents:
diff changeset
119
93b4dcbafd7b Copy Trac to main branch.
cmlenz
parents:
diff changeset
120 def shortDescription(self):
93b4dcbafd7b Copy Trac to main branch.
cmlenz
parents:
diff changeset
121 return 'Test ' + self.title
93b4dcbafd7b Copy Trac to main branch.
cmlenz
parents:
diff changeset
122
93b4dcbafd7b Copy Trac to main branch.
cmlenz
parents:
diff changeset
123
93b4dcbafd7b Copy Trac to main branch.
cmlenz
parents:
diff changeset
124 class OneLinerTestCase(WikiTestCase):
93b4dcbafd7b Copy Trac to main branch.
cmlenz
parents:
diff changeset
125 def formatter(self):
93b4dcbafd7b Copy Trac to main branch.
cmlenz
parents:
diff changeset
126 return OneLinerFormatter(self.env) # TODO: self.req
93b4dcbafd7b Copy Trac to main branch.
cmlenz
parents:
diff changeset
127
93b4dcbafd7b Copy Trac to main branch.
cmlenz
parents:
diff changeset
128
93b4dcbafd7b Copy Trac to main branch.
cmlenz
parents:
diff changeset
129 def suite(data=None, setup=None, file=__file__):
93b4dcbafd7b Copy Trac to main branch.
cmlenz
parents:
diff changeset
130 suite = unittest.TestSuite()
93b4dcbafd7b Copy Trac to main branch.
cmlenz
parents:
diff changeset
131 if not data:
93b4dcbafd7b Copy Trac to main branch.
cmlenz
parents:
diff changeset
132 file = os.path.join(os.path.split(file)[0], 'wiki-tests.txt')
93b4dcbafd7b Copy Trac to main branch.
cmlenz
parents:
diff changeset
133 data = open(file, 'r').read().decode('utf-8')
93b4dcbafd7b Copy Trac to main branch.
cmlenz
parents:
diff changeset
134 tests = data.split('=' * 30)
93b4dcbafd7b Copy Trac to main branch.
cmlenz
parents:
diff changeset
135 next_line = 1
93b4dcbafd7b Copy Trac to main branch.
cmlenz
parents:
diff changeset
136 line = 0
93b4dcbafd7b Copy Trac to main branch.
cmlenz
parents:
diff changeset
137 for test in tests:
93b4dcbafd7b Copy Trac to main branch.
cmlenz
parents:
diff changeset
138 if line != next_line:
93b4dcbafd7b Copy Trac to main branch.
cmlenz
parents:
diff changeset
139 line = next_line
93b4dcbafd7b Copy Trac to main branch.
cmlenz
parents:
diff changeset
140 if not test or test == '\n':
93b4dcbafd7b Copy Trac to main branch.
cmlenz
parents:
diff changeset
141 continue
93b4dcbafd7b Copy Trac to main branch.
cmlenz
parents:
diff changeset
142 next_line += len(test.split('\n')) - 1
93b4dcbafd7b Copy Trac to main branch.
cmlenz
parents:
diff changeset
143 blocks = test.split('-' * 30 + '\n')
93b4dcbafd7b Copy Trac to main branch.
cmlenz
parents:
diff changeset
144 if len(blocks) != 3:
93b4dcbafd7b Copy Trac to main branch.
cmlenz
parents:
diff changeset
145 continue
93b4dcbafd7b Copy Trac to main branch.
cmlenz
parents:
diff changeset
146 input, page, oneliner = blocks
93b4dcbafd7b Copy Trac to main branch.
cmlenz
parents:
diff changeset
147 tc = WikiTestCase(input, page, file, line)
93b4dcbafd7b Copy Trac to main branch.
cmlenz
parents:
diff changeset
148 if setup:
93b4dcbafd7b Copy Trac to main branch.
cmlenz
parents:
diff changeset
149 setup(tc)
93b4dcbafd7b Copy Trac to main branch.
cmlenz
parents:
diff changeset
150 suite.addTest(tc)
93b4dcbafd7b Copy Trac to main branch.
cmlenz
parents:
diff changeset
151 if oneliner:
93b4dcbafd7b Copy Trac to main branch.
cmlenz
parents:
diff changeset
152 tc = OneLinerTestCase(input, oneliner[:-1], file, line)
93b4dcbafd7b Copy Trac to main branch.
cmlenz
parents:
diff changeset
153 if setup:
93b4dcbafd7b Copy Trac to main branch.
cmlenz
parents:
diff changeset
154 setup(tc)
93b4dcbafd7b Copy Trac to main branch.
cmlenz
parents:
diff changeset
155 suite.addTest(tc)
93b4dcbafd7b Copy Trac to main branch.
cmlenz
parents:
diff changeset
156 return suite
93b4dcbafd7b Copy Trac to main branch.
cmlenz
parents:
diff changeset
157
93b4dcbafd7b Copy Trac to main branch.
cmlenz
parents:
diff changeset
158 if __name__ == '__main__':
93b4dcbafd7b Copy Trac to main branch.
cmlenz
parents:
diff changeset
159 unittest.main(defaultTest='suite')
Copyright (C) 2012-2017 Edgewall Software