39
|
1 import unittest
|
|
2
|
|
3 from trac.test import Mock
|
|
4 from trac.wiki.tests import formatter
|
|
5 from trac.versioncontrol.web_ui import *
|
|
6
|
|
7 CHANGESET_TEST_CASES="""
|
|
8 ============================== changeset: link resolver
|
|
9 changeset:1
|
|
10 changeset:12
|
|
11 changeset:abc
|
|
12 changeset:1, changeset:1/README.txt
|
|
13 ------------------------------
|
|
14 <p>
|
|
15 <a class="missing changeset" href="/changeset/1" rel="nofollow">changeset:1</a>
|
|
16 <a class="missing changeset" href="/changeset/12" rel="nofollow">changeset:12</a>
|
|
17 <a class="missing changeset" href="/changeset/abc" rel="nofollow">changeset:abc</a>
|
|
18 <a class="missing changeset" href="/changeset/1" rel="nofollow">changeset:1</a>, <a class="missing changeset" href="/changeset/1/README.txt" rel="nofollow">changeset:1/README.txt</a>
|
|
19 </p>
|
|
20 ------------------------------
|
|
21 ============================== changeset shorthand syntax
|
|
22 [1], r1
|
|
23 [12], r12, rABC
|
|
24 [1/README.txt]
|
|
25 ------------------------------
|
|
26 <p>
|
|
27 <a class="missing changeset" href="/changeset/1" rel="nofollow">[1]</a>, <a class="missing changeset" href="/changeset/1" rel="nofollow">r1</a>
|
|
28 <a class="missing changeset" href="/changeset/12" rel="nofollow">[12]</a>, <a class="missing changeset" href="/changeset/12" rel="nofollow">r12</a>, rABC
|
|
29 <a class="missing changeset" href="/changeset/1/README.txt" rel="nofollow">[1/README.txt]</a>
|
|
30 </p>
|
|
31 ------------------------------
|
|
32 ============================== escaping the above
|
|
33 ![1], !r1
|
|
34 ------------------------------
|
|
35 <p>
|
|
36 [1], r1
|
|
37 </p>
|
|
38 ------------------------------
|
|
39 [1], r1
|
|
40 ============================== Link resolver counter examples
|
|
41 Change:[10] There should be a link to changeset [10]
|
|
42
|
|
43 rfc and rfc:4180 should not be changeset links
|
|
44 ------------------------------
|
|
45 <p>
|
|
46 Change:<a class="missing changeset" href="/changeset/10" rel="nofollow">[10]</a> There should be a link to changeset <a class="missing changeset" href="/changeset/10" rel="nofollow">[10]</a>
|
|
47 </p>
|
|
48 <p>
|
|
49 rfc and rfc:4180 should not be changeset links
|
|
50 </p>
|
|
51 ------------------------------
|
|
52 Change:<a class="missing changeset" href="/changeset/10" rel="nofollow">[10]</a> There should be a link to changeset <a class="missing changeset" href="/changeset/10" rel="nofollow">[10]</a>
|
|
53
|
|
54 rfc and rfc:4180 should not be changeset links
|
|
55 ============================== InterTrac for changesets
|
|
56 trac:changeset:2081
|
|
57 [trac:changeset:2081 Trac r2081]
|
|
58 ------------------------------
|
|
59 <p>
|
|
60 <a class="ext-link" href="http://projects.edgewall.com/trac/changeset/2081" title="changeset:2081 in Trac's Trac"><span class="icon">trac:changeset:2081</span></a>
|
|
61 <a class="ext-link" href="http://projects.edgewall.com/trac/changeset/2081" title="changeset:2081 in Trac's Trac"><span class="icon">Trac r2081</span></a>
|
|
62 </p>
|
|
63 ------------------------------
|
|
64 ============================== Changeset InterTrac shorthands
|
|
65 [T2081]
|
|
66 [trac 2081]
|
|
67 [trac 2081/trunk]
|
|
68 T:r2081
|
|
69 ------------------------------
|
|
70 <p>
|
|
71 <a class="ext-link" href="http://projects.edgewall.com/trac/changeset/2081" title="changeset:2081 in Trac's Trac"><span class="icon">[T2081]</span></a>
|
|
72 <a class="ext-link" href="http://projects.edgewall.com/trac/changeset/2081" title="changeset:2081 in Trac's Trac"><span class="icon">[trac 2081]</span></a>
|
|
73 <a class="ext-link" href="http://projects.edgewall.com/trac/changeset/2081/trunk" title="changeset:2081/trunk in Trac\'s Trac"><span class="icon">[trac 2081/trunk]</span></a>
|
|
74 <a class="ext-link" href="http://projects.edgewall.com/trac/search?q=r2081" title="r2081 in Trac's Trac"><span class="icon">T:r2081</span></a>
|
|
75 </p>
|
|
76 ------------------------------
|
|
77 """ #'
|
|
78
|
|
79 def _get_changeset(self, x):
|
|
80 raise TracError("No changeset")
|
|
81
|
|
82 def _get_repository(self):
|
|
83 return Mock(get_changeset=_get_changeset)
|
|
84
|
|
85 def changeset_setup(tc):
|
|
86 setattr(tc.env, 'get_repository', _get_repository)
|
|
87
|
|
88
|
|
89 LOG_TEST_CASES="""
|
|
90 ============================== Log range TracLinks
|
|
91 [1:2], r1:2, [12:23], r12:23
|
|
92 [1:2/trunk]
|
|
93 ------------------------------
|
|
94 <p>
|
|
95 <a class="source" href="/log/?rev=2&stop_rev=1">[1:2]</a>, <a class="source" href="/log/?rev=2&stop_rev=1">r1:2</a>, <a class="source" href="/log/?rev=23&stop_rev=12">[12:23]</a>, <a class="source" href="/log/?rev=23&stop_rev=12">r12:23</a>
|
|
96 <a class="source" href="/log/trunk?rev=2&stop_rev=1">[1:2/trunk]</a>
|
|
97 </p>
|
|
98 ------------------------------
|
|
99 ============================== Escaping Log range TracLinks
|
|
100 ![1:2], !r1:2, ![12:23], !r12:23
|
|
101 ------------------------------
|
|
102 <p>
|
|
103 [1:2], r1:2, [12:23], r12:23
|
|
104 </p>
|
|
105 ------------------------------
|
|
106 [1:2], r1:2, [12:23], r12:23
|
|
107 ============================== log: link resolver
|
|
108 log:@12
|
|
109 log:trunk
|
|
110 log:trunk@12
|
|
111 log:trunk@12:23
|
|
112 log:trunk@12-23
|
|
113 log:trunk:12:23
|
|
114 log:trunk:12-23
|
|
115 ------------------------------
|
|
116 <p>
|
|
117 <a class="source" href="/log/?rev=12">log:@12</a>
|
|
118 <a class="source" href="/log/trunk">log:trunk</a>
|
|
119 <a class="source" href="/log/trunk?rev=12">log:trunk@12</a>
|
|
120 <a class="source" href="/log/trunk?rev=23&stop_rev=12">log:trunk@12:23</a>
|
|
121 <a class="source" href="/log/trunk?rev=23&stop_rev=12">log:trunk@12-23</a>
|
|
122 <a class="source" href="/log/trunk?rev=23&stop_rev=12">log:trunk:12:23</a>
|
|
123 <a class="source" href="/log/trunk?rev=23&stop_rev=12">log:trunk:12-23</a>
|
|
124 </p>
|
|
125 ------------------------------
|
|
126 ============================== Link resolver counter examples
|
|
127 rfc:4180 should not be a log link
|
|
128 ------------------------------
|
|
129 <p>
|
|
130 rfc:4180 should not be a log link
|
|
131 </p>
|
|
132 ------------------------------
|
|
133 ============================== Log range InterTrac shorthands
|
|
134 [T3317:3318]
|
|
135 [trac 3317:3318]
|
|
136 [trac 3317:3318/trunk]
|
|
137 ------------------------------
|
|
138 <p>
|
|
139 <a class="ext-link" href="http://projects.edgewall.com/trac/log/?rev=3318&stop_rev=3317" title="log:?rev=3318&stop_rev=3317 in Trac\'s Trac"><span class="icon">[T3317:3318]</span></a>
|
|
140 <a class="ext-link" href="http://projects.edgewall.com/trac/log/?rev=3318&stop_rev=3317" title="log:?rev=3318&stop_rev=3317 in Trac\'s Trac"><span class="icon">[trac 3317:3318]</span></a>
|
|
141 <a class="ext-link" href="http://projects.edgewall.com/trac/log/trunk?rev=3318&stop_rev=3317" title="log:trunk?rev=3318&stop_rev=3317 in Trac\'s Trac"><span class="icon">[trac 3317:3318/trunk]</span></a>
|
|
142 </p>
|
|
143 ------------------------------
|
|
144 """
|
|
145
|
|
146
|
|
147 DIFF_TEST_CASES="""
|
|
148 ============================== diff: link resolver
|
|
149 diff:trunk//branch
|
|
150 diff:trunk@12//branch@23
|
|
151 diff:trunk@12:23
|
|
152 diff:@12:23
|
|
153 ------------------------------
|
|
154 <p>
|
|
155 <a class="changeset" href="/changeset?new_path=branch&old_path=trunk" title="Diff from trunk@latest to branch@latest">diff:trunk//branch</a>
|
|
156 <a class="changeset" href="/changeset?new=23&new_path=branch&old=12&old_path=trunk" title="Diff from trunk@12 to branch@23">diff:trunk@12//branch@23</a>
|
|
157 <a class="changeset" href="/changeset?new=23&new_path=trunk&old=12&old_path=trunk" title="Diff r12:23 for trunk">diff:trunk@12:23</a>
|
|
158 <a class="changeset" href="/changeset?new=23&old=12" title="Diff r12:23 for /">diff:@12:23</a>
|
|
159 </p>
|
|
160 ------------------------------
|
|
161 """
|
|
162
|
|
163
|
|
164 SOURCE_TEST_CASES="""
|
|
165 ============================== source: link resolver
|
|
166 source:/foo/bar
|
|
167 source:/foo/bar#42
|
|
168 source:/foo/bar#head
|
|
169 source:/foo/bar@42
|
|
170 source:/foo/bar@head
|
|
171 source:/foo%20bar/baz%2Bquux
|
|
172 source:/foo%2520bar/baz%252Bquux#42
|
|
173 source:#42
|
|
174 source:@42
|
|
175 source:/foo/bar@42#L20
|
|
176 source:/foo/bar@head#L20
|
|
177 ------------------------------
|
|
178 <p>
|
|
179 <a class="source" href="/browser/foo/bar">source:/foo/bar</a>
|
|
180 <a class="source" href="/browser/foo/bar?rev=42">source:/foo/bar#42</a>
|
|
181 <a class="source" href="/browser/foo/bar?rev=head">source:/foo/bar#head</a>
|
|
182 <a class="source" href="/browser/foo/bar?rev=42">source:/foo/bar@42</a>
|
|
183 <a class="source" href="/browser/foo/bar?rev=head">source:/foo/bar@head</a>
|
|
184 <a class="source" href="/browser/foo%20bar/baz%2Bquux">source:/foo%20bar/baz%2Bquux</a>
|
|
185 <a class="source" href="/browser/foo%2520bar/baz%252Bquux?rev=42">source:/foo%2520bar/baz%252Bquux#42</a>
|
|
186 <a class="source" href="/browser/?rev=42">source:#42</a>
|
|
187 <a class="source" href="/browser/?rev=42">source:@42</a>
|
|
188 <a class="source" href="/browser/foo/bar?rev=42#L20">source:/foo/bar@42#L20</a>
|
|
189 <a class="source" href="/browser/foo/bar?rev=head#L20">source:/foo/bar@head#L20</a>
|
|
190 </p>
|
|
191 ------------------------------
|
|
192 ============================== source: provider, with quoting
|
|
193 source:'even with whitespaces'
|
|
194 source:"even with whitespaces"
|
|
195 [source:'even with whitespaces' Path with spaces]
|
|
196 [source:"even with whitespaces" Path with spaces]
|
|
197 ------------------------------
|
|
198 <p>
|
|
199 <a class="source" href="/browser/even%20with%20whitespaces">source:'even with whitespaces'</a>
|
|
200 <a class="source" href="/browser/even%20with%20whitespaces">source:"even with whitespaces"</a>
|
|
201 <a class="source" href="/browser/even%20with%20whitespaces">Path with spaces</a>
|
|
202 <a class="source" href="/browser/even%20with%20whitespaces">Path with spaces</a>
|
|
203 </p>
|
|
204 ------------------------------
|
|
205 """ # " (be Emacs friendly...)
|
|
206
|
|
207
|
|
208
|
|
209 def suite():
|
|
210 suite = unittest.TestSuite()
|
|
211 suite.addTest(formatter.suite(CHANGESET_TEST_CASES, changeset_setup,
|
|
212 __file__))
|
|
213 suite.addTest(formatter.suite(LOG_TEST_CASES, file=__file__))
|
|
214 suite.addTest(formatter.suite(DIFF_TEST_CASES, file=__file__))
|
|
215 suite.addTest(formatter.suite(SOURCE_TEST_CASES, file=__file__))
|
|
216 return suite
|
|
217
|
|
218 if __name__ == '__main__':
|
|
219 unittest.main(defaultTest='suite')
|