?? wikisyntax.py
字號(hào):
import unittestfrom trac.test import Mockfrom trac.wiki.tests import formatterfrom trac.versioncontrol import NoSuchChangesetfrom trac.versioncontrol.web_ui import *def _get_changeset(rev): if rev == '1': return Mock(message="start") else: raise NoSuchChangeset(rev)def _normalize_rev(rev): try: return int(rev) except ValueError: if rev == 'head': return '200' else: raise NoSuchChangeset(rev) def _get_repository(authname=None): return Mock(get_changeset=_get_changeset, youngest_rev='200', normalize_rev=_normalize_rev)def repository_setup(tc): setattr(tc.env, 'get_repository', _get_repository)CHANGESET_TEST_CASES="""============================== changeset: link resolverchangeset:1changeset:12changeset:abcchangeset:1, changeset:1/README.txt------------------------------<p><a class="changeset" href="/changeset/1" title="start">changeset:1</a><a class="missing changeset" href="/changeset/12" rel="nofollow" title="No changeset 12 in the repository">changeset:12</a><a class="missing changeset" href="/changeset/abc" rel="nofollow" title="No changeset abc in the repository">changeset:abc</a><a class="changeset" href="/changeset/1" title="start">changeset:1</a>, <a class="changeset" href="/changeset/1/README.txt" title="start">changeset:1/README.txt</a></p>------------------------------============================== changeset: link resolver + query and fragmentchangeset:1?format=diffchangeset:1#file0------------------------------<p><a class="changeset" href="/changeset/1?format=diff" title="start">changeset:1?format=diff</a><a class="changeset" href="/changeset/1#file0" title="start">changeset:1#file0</a></p>------------------------------============================== changeset shorthand syntax[1], r1[12], r12, rABC[1/README.txt]------------------------------<p><a class="changeset" href="/changeset/1" title="start">[1]</a>, <a class="changeset" href="/changeset/1" title="start">r1</a><a class="missing changeset" href="/changeset/12" rel="nofollow" title="No changeset 12 in the repository">[12]</a>, <a class="missing changeset" href="/changeset/12" rel="nofollow" title="No changeset 12 in the repository">r12</a>, rABC<a class="changeset" href="/changeset/1/README.txt" title="start">[1/README.txt]</a></p>------------------------------============================== changeset shorthand syntax + query and fragment[1?format=diff][1#file0][1/README.txt?format=diff][1/README.txt#file0]------------------------------<p><a class="changeset" href="/changeset/1?format=diff" title="start">[1?format=diff]</a><a class="changeset" href="/changeset/1#file0" title="start">[1#file0]</a><a class="changeset" href="/changeset/1/README.txt?format=diff" title="start">[1/README.txt?format=diff]</a><a class="changeset" href="/changeset/1/README.txt#file0" title="start">[1/README.txt#file0]</a></p>------------------------------============================== escaping the above![1], !r1------------------------------<p>[1], r1</p>------------------------------[1], r1============================== Link resolver counter examplesChange:[10] There should be a link to changeset [10]rfc and rfc:4180 should not be changeset links, neither should rfc4180------------------------------<p>Change:<a class="missing changeset" href="/changeset/10" rel="nofollow" title="No changeset 10 in the repository">[10]</a> There should be a link to changeset <a class="missing changeset" href="/changeset/10" rel="nofollow" title="No changeset 10 in the repository">[10]</a></p><p>rfc and rfc:4180 should not be changeset links, neither should rfc4180</p>------------------------------Change:<a class="missing changeset" href="/changeset/10" rel="nofollow" title="No changeset 10 in the repository">[10]</a> There should be a link to changeset <a class="missing changeset" href="/changeset/10" rel="nofollow" title="No changeset 10 in the repository">[10]</a>rfc and rfc:4180 should not be changeset links, neither should rfc4180============================== InterTrac for changesetstrac:changeset:2081[trac:changeset:2081 Trac r2081]------------------------------<p><a class="ext-link" href="http://trac.edgewall.org/intertrac/changeset%3A2081" title="changeset:2081 in Trac's Trac"><span class="icon">trac:changeset:2081</span></a><a class="ext-link" href="http://trac.edgewall.org/intertrac/changeset%3A2081" title="changeset:2081 in Trac's Trac"><span class="icon">Trac r2081</span></a></p>------------------------------============================== Changeset InterTrac shorthands[T2081][trac 2081][trac 2081/trunk]T:r2081------------------------------<p><a class="ext-link" href="http://trac.edgewall.org/intertrac/changeset%3A2081" title="changeset:2081 in Trac's Trac"><span class="icon">[T2081]</span></a><a class="ext-link" href="http://trac.edgewall.org/intertrac/changeset%3A2081" title="changeset:2081 in Trac's Trac"><span class="icon">[trac 2081]</span></a><a class="ext-link" href="http://trac.edgewall.org/intertrac/changeset%3A2081/trunk" title="changeset:2081/trunk in Trac\'s Trac"><span class="icon">[trac 2081/trunk]</span></a><a class="ext-link" href="http://trac.edgewall.org/intertrac/r2081" title="r2081 in Trac's Trac"><span class="icon">T:r2081</span></a></p>------------------------------""" #"LOG_TEST_CASES="""============================== Log range TracLinks[1:2], r1:2, [12:23], r12:23[1:2/trunk]------------------------------<p><a class="source" href="/log/?revs=1-2">[1:2]</a>, <a class="source" href="/log/?revs=1-2">r1:2</a>, <a class="source" href="/log/?revs=12-23">[12:23]</a>, <a class="source" href="/log/?revs=12-23">r12:23</a><a class="source" href="/log/trunk?revs=1-2">[1:2/trunk]</a></p>------------------------------============================== Escaping Log range TracLinks![1:2], !r1:2, ![12:23], !r12:23------------------------------<p>[1:2], r1:2, [12:23], r12:23</p>------------------------------[1:2], r1:2, [12:23], r12:23============================== log: link resolverlog:@12log:trunklog:trunk@12log:trunk@12:23log:trunk@12-23log:trunk:12:23log:trunk:12-23log:trunk:12-headlog:trunk:12@23 (bad, but shouldn't error out)------------------------------<p><a class="source" href="/log/?revs=12">log:@12</a><a class="source" href="/log/trunk">log:trunk</a><a class="source" href="/log/trunk?revs=12">log:trunk@12</a><a class="source" href="/log/trunk?revs=12-23">log:trunk@12:23</a><a class="source" href="/log/trunk?revs=12-23">log:trunk@12-23</a><a class="source" href="/log/trunk?revs=12-23">log:trunk:12:23</a><a class="source" href="/log/trunk?revs=12-23">log:trunk:12-23</a><a class="source" href="/log/trunk?revs=12-200">log:trunk:12-head</a><a class="source" href="/log/trunk">log:trunk:12@23</a> (bad, but shouldn't error out)</p>------------------------------============================== log: link resolver + querylog:?limit=10log:@12?limit=10log:trunk?limit=10log:trunk@12?limit=10[10:20?verbose=yes&format=changelog][10:20/trunk?verbose=yes&format=changelog]------------------------------<p><a class="source" href="/log/?limit=10">log:?limit=10</a><a class="source" href="/log/?revs=12&limit=10">log:@12?limit=10</a><a class="source" href="/log/trunk?limit=10">log:trunk?limit=10</a><a class="source" href="/log/trunk?revs=12&limit=10">log:trunk@12?limit=10</a><a class="source" href="/log/?revs=10-20&verbose=yes&format=changelog">[10:20?verbose=yes&format=changelog]</a><a class="source" href="/log/trunk?revs=10-20&verbose=yes&format=changelog">[10:20/trunk?verbose=yes&format=changelog]</a></p>------------------------------============================== Multiple Log rangesr12:20,25,35:56,68,69,100-120[12:20,25,35:56,68,69,100-120][12:20,25,88:head,68,69] (not supported)------------------------------<p><a class="source" href="/log/?revs=12-20%2C25%2C35-56%2C68-69%2C100-120">r12:20,25,35:56,68,69,100-120</a><a class="source" href="/log/?revs=12-20%2C25%2C35-56%2C68-69%2C100-120">[12:20,25,35:56,68,69,100-120]</a>[12:20,25,88:head,68,69] (not supported)</p>------------------------------============================== Link resolver counter examplesrfc:4180 should not be a log link------------------------------<p>rfc:4180 should not be a log link</p>------------------------------============================== Log range InterTrac shorthands[T3317:3318][trac 3317:3318][trac 3317:3318/trunk]------------------------------<p><a class="ext-link" href="http://trac.edgewall.org/intertrac/log%3A/%403317%3A3318" title="log:/@3317:3318 in Trac\'s Trac"><span class="icon">[T3317:3318]</span></a><a class="ext-link" href="http://trac.edgewall.org/intertrac/log%3A/%403317%3A3318" title="log:/@3317:3318 in Trac\'s Trac"><span class="icon">[trac 3317:3318]</span></a><a class="ext-link" href="http://trac.edgewall.org/intertrac/log%3A/trunk%403317%3A3318" title="log:/trunk@3317:3318 in Trac\'s Trac"><span class="icon">[trac 3317:3318/trunk]</span></a></p>------------------------------"""DIFF_TEST_CASES="""============================== diff: link resolverdiff:trunk//branchdiff:trunk@12//branch@23diff:trunk@12:23diff:@12:23------------------------------<p><a class="changeset" href="/changeset?new_path=branch&old_path=trunk" title="Diff from trunk@latest to branch@latest">diff:trunk//branch</a><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><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><a class="changeset" href="/changeset?new=23&old=12" title="Diff r12:23 for /">diff:@12:23</a></p>------------------------------============================== diff: link resolver + querydiff:trunk//branch?format=diff------------------------------<p><a class="changeset" href="/changeset?new_path=branch&old_path=trunk&format=diff" title="Diff from trunk@latest to branch@latest">diff:trunk//branch?format=diff</a></p>------------------------------============================== diff: link, empty diffdiff://------------------------------<p><a class="changeset" title="Diff rlatest:latest for /">diff://</a></p>------------------------------"""SOURCE_TEST_CASES="""============================== source: link resolversource:/foo/barsource:/foo/bar#42 # no long works as rev specsource:/foo/bar#head #source:/foo/bar@42source:/foo/bar@headsource:/foo%20bar/baz%2Bquuxsource:@42source:/foo/bar@42#L20source:/foo/bar@head#L20source:/foo/bar@#L20------------------------------<p><a class="source" href="/browser/foo/bar">source:/foo/bar</a><a class="source" href="/browser/foo/bar#42">source:/foo/bar#42</a> # no long works as rev spec<a class="source" href="/browser/foo/bar#head">source:/foo/bar#head</a> #<a class="source" href="/browser/foo/bar?rev=42">source:/foo/bar@42</a><a class="source" href="/browser/foo/bar?rev=head">source:/foo/bar@head</a><a class="source" href="/browser/foo%2520bar/baz%252Bquux">source:/foo%20bar/baz%2Bquux</a><a class="source" href="/browser/?rev=42">source:@42</a><a class="source" href="/browser/foo/bar?rev=42#L20">source:/foo/bar@42#L20</a><a class="source" href="/browser/foo/bar?rev=head#L20">source:/foo/bar@head#L20</a><a class="source" href="/browser/foo/bar#L20">source:/foo/bar@#L20</a></p>------------------------------============================== source: link resolver + query source:/foo?order=size&desc=1source:/foo/bar?format=raw------------------------------<p><a class="source" href="/browser/foo?order=size&desc=1">source:/foo?order=size&desc=1</a><a class="source" href="/browser/foo/bar?format=raw">source:/foo/bar?format=raw</a></p>------------------------------============================== source: provider, with quotingsource:'even with whitespaces'source:"even with whitespaces"[source:'even with whitespaces' Path with spaces][source:"even with whitespaces" Path with spaces]------------------------------<p><a class="source" href="/browser/even%20with%20whitespaces">source:'even with whitespaces'</a><a class="source" href="/browser/even%20with%20whitespaces">source:"even with whitespaces"</a><a class="source" href="/browser/even%20with%20whitespaces">Path with spaces</a><a class="source" href="/browser/even%20with%20whitespaces">Path with spaces</a></p>------------------------------============================== export: link resolverexport:/foo/bar.htmlexport:123:/foo/pict.gifexport:/foo/pict.gif@123------------------------------<p><a class="source" href="/export/200/foo/bar.html">export:/foo/bar.html</a><a class="source" href="/export/123/foo/pict.gif">export:123:/foo/pict.gif</a><a class="source" href="/export/123/foo/pict.gif">export:/foo/pict.gif@123</a></p>------------------------------============================== export: link resolver + fragmentexport:/foo/bar.html#header------------------------------<p><a class="source" href="/export/200/foo/bar.html#header">export:/foo/bar.html#header</a></p>------------------------------""" # " (be Emacs friendly...)def suite(): suite = unittest.TestSuite() suite.addTest(formatter.suite(CHANGESET_TEST_CASES, repository_setup, __file__)) suite.addTest(formatter.suite(LOG_TEST_CASES, repository_setup, file=__file__)) suite.addTest(formatter.suite(DIFF_TEST_CASES, file=__file__)) suite.addTest(formatter.suite(SOURCE_TEST_CASES, repository_setup, file=__file__)) return suiteif __name__ == '__main__': unittest.main(defaultTest='suite')
?? 快捷鍵說明
復(fù)制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號(hào)
Ctrl + =
減小字號(hào)
Ctrl + -