|
tw-public@0
|
1 |
# -*- coding: iso-8859-1 -*-
|
|
tw-public@0
|
2 |
"""
|
|
tw-public@0
|
3 |
MoinMoin - MoinMoin.wikiutil Tests
|
|
tw-public@0
|
4 |
|
|
tw@2454
|
5 |
@copyright: 2003-2004 by Juergen Hermann <jh@web.de>,
|
|
tw@2454
|
6 |
2007 by MoinMoin:ThomasWaldmann
|
|
tw-public@0
|
7 |
@license: GNU GPL, see COPYING for details.
|
|
tw-public@0
|
8 |
"""
|
|
tw-public@0
|
9 |
|
|
tw@2172
|
10 |
import py
|
|
tw@2454
|
11 |
|
|
florian@4199
|
12 |
from MoinMoin import config, wikiutil
|
|
tw-public@0
|
13 |
|
|
tw@4569
|
14 |
from werkzeug.utils import MultiDict
|
|
tw@4569
|
15 |
|
|
tw-public@0
|
16 |
|
|
tw@2265
|
17 |
class TestQueryStringSupport:
|
|
tw@2265
|
18 |
tests = [
|
|
tw@2265
|
19 |
('', {}, {}),
|
|
tw@2265
|
20 |
('key1=value1', {'key1': 'value1'}, {'key1': u'value1'}),
|
|
tw@2265
|
21 |
('key1=value1&key2=value2', {'key1': 'value1', 'key2': 'value2'}, {'key1': u'value1', 'key2': u'value2'}),
|
|
tw@2265
|
22 |
('rc_de=Aktuelle%C3%84nderungen', {'rc_de': 'Aktuelle\xc3\x84nderungen'}, {'rc_de': u'Aktuelle\xc4nderungen'}),
|
|
tw@2265
|
23 |
]
|
|
tw@2265
|
24 |
def testParseQueryString(self):
|
|
tw@2265
|
25 |
for qstr, expected_str, expected_unicode in self.tests:
|
|
tw@4569
|
26 |
assert wikiutil.parseQueryString(qstr) == MultiDict(expected_unicode)
|
|
tw@4569
|
27 |
assert wikiutil.parseQueryString(unicode(qstr)) == MultiDict(expected_unicode)
|
|
tw@2265
|
28 |
|
|
tw@2265
|
29 |
def testMakeQueryString(self):
|
|
tw@2265
|
30 |
for qstr, in_str, in_unicode in self.tests:
|
|
tw@4569
|
31 |
assert wikiutil.parseQueryString(wikiutil.makeQueryString(in_unicode)) == MultiDict(in_unicode)
|
|
tw@4569
|
32 |
assert wikiutil.parseQueryString(wikiutil.makeQueryString(in_str)) == MultiDict(in_unicode)
|
|
tw@2265
|
33 |
|
|
tw@2267
|
34 |
|
|
tw@2266
|
35 |
class TestTickets:
|
|
tw@2266
|
36 |
def testTickets(self):
|
|
tw@2266
|
37 |
from MoinMoin.Page import Page
|
|
tw@2266
|
38 |
# page name with double quotes
|
|
tw@2266
|
39 |
self.request.page = Page(self.request, u'bla"bla')
|
|
tw@2266
|
40 |
ticket1 = wikiutil.createTicket(self.request)
|
|
tw@2266
|
41 |
assert wikiutil.checkTicket(self.request, ticket1)
|
|
tw@2266
|
42 |
# page name with non-ASCII chars
|
|
tw@2266
|
43 |
self.request.page = Page(self.request, u'\xc4rger')
|
|
tw@2266
|
44 |
ticket2 = wikiutil.createTicket(self.request)
|
|
tw@2266
|
45 |
assert wikiutil.checkTicket(self.request, ticket2)
|
|
tw@2266
|
46 |
# same page with another action
|
|
tw@2266
|
47 |
self.request.page = Page(self.request, u'\xc4rger')
|
|
tw@2266
|
48 |
self.request.action = 'another'
|
|
tw@2266
|
49 |
ticket3 = wikiutil.createTicket(self.request)
|
|
tw@2266
|
50 |
assert wikiutil.checkTicket(self.request, ticket3)
|
|
tw@2266
|
51 |
|
|
tw@2266
|
52 |
assert ticket1 != ticket2
|
|
tw@2266
|
53 |
assert ticket2 != ticket3
|
|
tw@2266
|
54 |
|
|
tw@2266
|
55 |
|
|
tw@2267
|
56 |
class TestCleanInput:
|
|
tw@2267
|
57 |
def testCleanInput(self):
|
|
tw@2267
|
58 |
tests = [(u"", u""), # empty
|
|
tw@2267
|
59 |
(u"aaa\r\n\tbbb", u"aaa bbb"), # ws chars -> blanks
|
|
tw@2267
|
60 |
(u"aaa\x00\x01bbb", u"aaabbb"), # strip weird chars
|
|
tw@2267
|
61 |
(u"a"*500, u""), # too long
|
|
tw@2267
|
62 |
]
|
|
tw@2267
|
63 |
for instr, outstr in tests:
|
|
tw@2267
|
64 |
assert wikiutil.clean_input(instr) == outstr
|
|
tw@2267
|
65 |
|
|
tw@2267
|
66 |
|
|
tw@2267
|
67 |
class TestInterWiki:
|
|
tw@2267
|
68 |
def testSplitWiki(self):
|
|
tw@2730
|
69 |
tests = [('SomePage', ('Self', 'SomePage')),
|
|
tw@2730
|
70 |
('OtherWiki:OtherPage', ('OtherWiki', 'OtherPage')),
|
|
tw@2730
|
71 |
(':OtherPage', ('', 'OtherPage')),
|
|
tw@2730
|
72 |
# broken ('/OtherPage', ('Self', '/OtherPage')),
|
|
tw@2730
|
73 |
# wrong interpretation ('MainPage/OtherPage', ('Self', 'MainPage/OtherPage')),
|
|
tw@2267
|
74 |
]
|
|
tw@2730
|
75 |
for markup, (wikiname, pagename) in tests:
|
|
tw@2730
|
76 |
assert wikiutil.split_wiki(markup) == (wikiname, pagename)
|
|
tw@2267
|
77 |
|
|
tw@2267
|
78 |
def testJoinWiki(self):
|
|
tw@2267
|
79 |
tests = [(('http://example.org/', u'SomePage'), 'http://example.org/SomePage'),
|
|
tw@2267
|
80 |
(('http://example.org/?page=$PAGE&action=show', u'SomePage'), 'http://example.org/?page=SomePage&action=show'),
|
|
tw@2267
|
81 |
(('http://example.org/', u'Aktuelle\xc4nderungen'), 'http://example.org/Aktuelle%C3%84nderungen'),
|
|
tw@2267
|
82 |
(('http://example.org/$PAGE/show', u'Aktuelle\xc4nderungen'), 'http://example.org/Aktuelle%C3%84nderungen/show'),
|
|
tw@2267
|
83 |
]
|
|
tw@2267
|
84 |
for (baseurl, pagename), url in tests:
|
|
tw@2267
|
85 |
assert wikiutil.join_wiki(baseurl, pagename) == url
|
|
tw@2267
|
86 |
|
|
tw@2267
|
87 |
|
|
tw@2173
|
88 |
class TestSystemPagesGroup:
|
|
tw@2173
|
89 |
def testSystemPagesGroupNotEmpty(self):
|
|
tw@2173
|
90 |
assert self.request.dicts.members('SystemPagesGroup')
|
|
tw@2173
|
91 |
|
|
tw@2454
|
92 |
class TestSystemPage:
|
|
tw-public@0
|
93 |
systemPages = (
|
|
tw-public@0
|
94 |
# First level, on SystemPagesGroup
|
|
tw-public@0
|
95 |
'SystemPagesInEnglishGroup',
|
|
tw-public@0
|
96 |
# Second level, on one of the pages above
|
|
tw-public@0
|
97 |
'RecentChanges',
|
|
tw-public@0
|
98 |
'TitleIndex',
|
|
tw-public@0
|
99 |
)
|
|
tw-public@0
|
100 |
notSystemPages = (
|
|
tw-public@0
|
101 |
'NoSuchPageYetAndWillNeverBe',
|
|
tw-public@0
|
102 |
)
|
|
tw-public@0
|
103 |
|
|
tw-public@0
|
104 |
def testSystemPage(self):
|
|
tw-public@0
|
105 |
"""wikiutil: good system page names accepted, bad rejected"""
|
|
tw-public@0
|
106 |
for name in self.systemPages:
|
|
tw@2454
|
107 |
assert wikiutil.isSystemPage(self.request, name)
|
|
tw-public@0
|
108 |
for name in self.notSystemPages:
|
|
tw@2454
|
109 |
assert not wikiutil.isSystemPage(self.request, name)
|
|
tw-public@0
|
110 |
|
|
tw-public@0
|
111 |
|
|
tw@2454
|
112 |
class TestTemplatePage:
|
|
tw-public@0
|
113 |
good = (
|
|
tw-public@0
|
114 |
'aTemplate',
|
|
tw-public@0
|
115 |
'MyTemplate',
|
|
tw-public@0
|
116 |
)
|
|
tw-public@0
|
117 |
bad = (
|
|
tw-public@0
|
118 |
'Template',
|
|
tw@3573
|
119 |
'I want a Template',
|
|
tw-public@0
|
120 |
'TemplateInFront',
|
|
tw-public@0
|
121 |
'xTemplateInFront',
|
|
tw-public@0
|
122 |
'XTemplateInFront',
|
|
tw-public@0
|
123 |
)
|
|
tw-public@0
|
124 |
|
|
tw-public@0
|
125 |
def testTemplatePage(self):
|
|
tw-public@0
|
126 |
"""wikiutil: good template names accepted, bad rejected"""
|
|
tw-public@0
|
127 |
for name in self.good:
|
|
tw@2454
|
128 |
assert wikiutil.isTemplatePage(self.request, name)
|
|
tw-public@0
|
129 |
for name in self.bad:
|
|
tw@2454
|
130 |
assert not wikiutil.isTemplatePage(self.request, name)
|
|
tw-public@0
|
131 |
|
|
tw-public@0
|
132 |
|
|
tw@2453
|
133 |
class TestParmeterParser:
|
|
tw@2164
|
134 |
|
|
tw@2453
|
135 |
def testParameterParser(self):
|
|
tw@2453
|
136 |
tests = [
|
|
tw@2453
|
137 |
# trivial
|
|
tw@2455
|
138 |
('', '', 0, {}),
|
|
tw@2455
|
139 |
|
|
tw@2455
|
140 |
# fixed
|
|
tw@2455
|
141 |
('%s%i%f%b', '"test",42,23.0,True', 4, {0: 'test', 1: 42, 2: 23.0, 3: True}),
|
|
tw@2455
|
142 |
|
|
tw@2455
|
143 |
# fixed and named
|
|
tw@2455
|
144 |
('%s%(x)i%(y)i', '"test"', 1, {0: 'test', 'x': None, 'y': None}),
|
|
tw@2455
|
145 |
('%s%(x)i%(y)i', '"test",1', 1, {0: 'test', 'x': 1, 'y': None}),
|
|
tw@2455
|
146 |
('%s%(x)i%(y)i', '"test",1,2', 1, {0: 'test', 'x': 1, 'y': 2}),
|
|
tw@2455
|
147 |
('%s%(x)i%(y)i', '"test",x=1', 1, {0: 'test', 'x': 1, 'y': None}),
|
|
tw@2455
|
148 |
('%s%(x)i%(y)i', '"test",x=1,y=2', 1, {0: 'test', 'x': 1, 'y': 2}),
|
|
tw@2455
|
149 |
('%s%(x)i%(y)i', '"test",y=2', 1, {0: 'test', 'x': None, 'y': 2}),
|
|
tw@2455
|
150 |
|
|
tw@2455
|
151 |
# test mixed acceptance
|
|
tw@2455
|
152 |
("%ifs", '100', 1, {0: 100}),
|
|
tw@2455
|
153 |
("%ifs", '100.0', 1, {0: 100.0}),
|
|
tw@2455
|
154 |
("%ifs", '"100"', 1, {0: "100"}),
|
|
rb@2052
|
155 |
|
|
tw@2453
|
156 |
# boolean
|
|
tw@2455
|
157 |
("%(t)b%(f)b", '', 0, {'t': None, 'f': None}),
|
|
tw@2455
|
158 |
("%(t)b%(f)b", 't=1', 0, {'t': True, 'f': None}),
|
|
tw@2455
|
159 |
("%(t)b%(f)b", 'f=False', 0, {'t': None, 'f': False}),
|
|
tw@2455
|
160 |
("%(t)b%(f)b", 't=True, f=0', 0, {'t': True, 'f': False}),
|
|
tw@2164
|
161 |
|
|
tw@2453
|
162 |
# integer
|
|
tw@2455
|
163 |
("%(width)i%(height)i", '', 0, {'width': None, 'height': None}),
|
|
tw@2455
|
164 |
("%(width)i%(height)i", 'width=100', 0, {'width': 100, 'height': None}),
|
|
tw@2455
|
165 |
("%(width)i%(height)i", 'height=200', 0, {'width': None, 'height': 200}),
|
|
tw@2455
|
166 |
("%(width)i%(height)i", 'width=100, height=200', 0, {'width': 100, 'height': 200}),
|
|
tw@2453
|
167 |
|
|
tw@2453
|
168 |
# float
|
|
tw@2455
|
169 |
("%(width)f%(height)f", '', 0, {'width': None, 'height': None}),
|
|
tw@2455
|
170 |
("%(width)f%(height)f", 'width=100.0', 0, {'width': 100.0, 'height': None}),
|
|
tw@2455
|
171 |
("%(width)f%(height)f", 'height=2.0E2', 0, {'width': None, 'height': 200.0}),
|
|
tw@2455
|
172 |
("%(width)f%(height)f", 'width=1000.0E-1, height=200.0', 0, {'width': 100.0, 'height': 200.0}),
|
|
tw@2453
|
173 |
|
|
tw@2453
|
174 |
# string
|
|
tw@2455
|
175 |
("%(width)s%(height)s", '', 0, {'width': None, 'height': None}),
|
|
tw@2455
|
176 |
("%(width)s%(height)s", 'width="really wide"', 0, {'width': 'really wide', 'height': None}),
|
|
tw@2455
|
177 |
("%(width)s%(height)s", 'height="not too high"', 0, {'width': None, 'height': 'not too high'}),
|
|
tw@2455
|
178 |
("%(width)s%(height)s", 'width="really wide", height="not too high"', 0, {'width': 'really wide', 'height': 'not too high'}),
|
|
tw@2456
|
179 |
# conversion from given type to expected type
|
|
tw@2456
|
180 |
("%(width)s%(height)s", 'width=100', 0, {'width': '100', 'height': None}),
|
|
tw@2456
|
181 |
("%(width)s%(height)s", 'width=100, height=200', 0, {'width': '100', 'height': '200'}),
|
|
tw@2455
|
182 |
|
|
tw@2455
|
183 |
# complex test
|
|
tw@2455
|
184 |
("%i%sf%s%ifs%(a)s|%(b)s", ' 4,"DI\'NG", b=retry, a="DING"', 2, {0: 4, 1: "DI'NG", 'a': 'DING', 'b': 'retry'}),
|
|
tw@2455
|
185 |
|
|
tw@2455
|
186 |
]
|
|
tw@2455
|
187 |
for format, args, expected_fixed_count, expected_dict in tests:
|
|
tw@2453
|
188 |
argParser = wikiutil.ParameterParser(format)
|
|
tw@2455
|
189 |
fixed_count, arg_dict = argParser.parse_parameters(args)
|
|
tw@2455
|
190 |
assert (fixed_count, arg_dict) == (expected_fixed_count, expected_dict)
|
|
tw@2164
|
191 |
|
|
rb@2052
|
192 |
def testTooMuchWantedArguments(self):
|
|
rb@2052
|
193 |
args = 'width=100, height=200, alt=Example'
|
|
rb@2052
|
194 |
argParser = wikiutil.ParameterParser("%(width)s%(height)s")
|
|
tw@2453
|
195 |
py.test.raises(ValueError, argParser.parse_parameters, args)
|
|
tw@2453
|
196 |
|
|
tw@2453
|
197 |
def testMalformedArguments(self):
|
|
tw@2453
|
198 |
args = '='
|
|
tw@2453
|
199 |
argParser = wikiutil.ParameterParser("%(width)s%(height)s")
|
|
tw@2453
|
200 |
py.test.raises(ValueError, argParser.parse_parameters, args)
|
|
tw@2453
|
201 |
|
|
tw@2456
|
202 |
def testWrongTypeFixedPosArgument(self):
|
|
tw@2456
|
203 |
args = '0.0'
|
|
tw@2456
|
204 |
argParser = wikiutil.ParameterParser("%b")
|
|
tw@2456
|
205 |
py.test.raises(ValueError, argParser.parse_parameters, args)
|
|
tw@2456
|
206 |
|
|
tw@2456
|
207 |
def testWrongTypeNamedArgument(self):
|
|
tw@2456
|
208 |
args = 'flag=0.0'
|
|
tw@2456
|
209 |
argParser = wikiutil.ParameterParser("%(flag)b")
|
|
tw@2456
|
210 |
py.test.raises(ValueError, argParser.parse_parameters, args)
|
|
tw@2456
|
211 |
|
|
tw@2164
|
212 |
|
|
johannes@2507
|
213 |
class TestParamParsing:
|
|
johannes@2507
|
214 |
def testMacroArgs(self):
|
|
johannes@2507
|
215 |
abcd = [u'a', u'b', u'c', u'd']
|
|
johannes@2507
|
216 |
abcd_dict = {u'a': u'1', u'b': u'2', u'c': u'3', u'd': u'4'}
|
|
johannes@2507
|
217 |
tests = [
|
|
johannes@2507
|
218 |
# regular and quoting tests
|
|
johannes@2507
|
219 |
(u'd = 4,c=3,b=2,a= 1 ', ([], abcd_dict, [])),
|
|
johannes@2507
|
220 |
(u'a,b,c,d', (abcd, {}, [])),
|
|
johannes@2507
|
221 |
(u' a , b , c , d ', (abcd, {}, [])),
|
|
johannes@2507
|
222 |
(u' a ', ([u'a'], {}, [])),
|
|
johannes@2507
|
223 |
(u'" a "', ([u' a '], {}, [])),
|
|
johannes@2507
|
224 |
(u'a,b,c,d, "a,b,c,d"', (abcd+[u'a,b,c,d'], {}, [])),
|
|
johannes@2507
|
225 |
(u'quote " :), b', ([u'quote " :)', u'b'], {}, [])),
|
|
johannes@2507
|
226 |
(u'"quote "" :)", b', ([u'quote " :)', u'b'], {}, [])),
|
|
johannes@2507
|
227 |
(u'=7', ([], {u'': u'7'}, [])),
|
|
johannes@2507
|
228 |
(u',,', ([None, None, None], {}, [])),
|
|
johannes@2507
|
229 |
(u',"",', ([None, u'', None], {}, [])),
|
|
johannes@2507
|
230 |
(u',"", ""', ([None, u'', u''], {}, [])),
|
|
johannes@2507
|
231 |
(u' "" ,"", ""', ([u'', u'', u''], {}, [])),
|
|
johannes@2507
|
232 |
# some name=value test
|
|
johannes@2507
|
233 |
(u'd = 4,c=3,b=2,a= 1 ', ([], abcd_dict, [])),
|
|
johannes@2510
|
234 |
(u'd=d,e="a,b,c,d"', ([], {u'd': u'd',
|
|
johannes@2510
|
235 |
u'e': u'a,b,c,d'}, [])),
|
|
johannes@2510
|
236 |
(u'd = d,e = "a,b,c,d"', ([], {u'd': u'd',
|
|
johannes@2510
|
237 |
u'e': u'a,b,c,d'}, [])),
|
|
johannes@2510
|
238 |
(u'd = d, e = "a,b,c,d"', ([], {u'd': u'd',
|
|
johannes@2510
|
239 |
u'e': u'a,b,c,d'}, [])),
|
|
johannes@2510
|
240 |
(u'd = , e = "a,b,c,d"', ([], {u'd': None,
|
|
johannes@2510
|
241 |
u'e': u'a,b,c,d'}, [])),
|
|
johannes@2510
|
242 |
(u'd = "", e = "a,b,c,d"', ([], {u'd': u'',
|
|
johannes@2510
|
243 |
u'e': u'a,b,c,d'}, [])),
|
|
johannes@2510
|
244 |
(u'd = "", e = ', ([], {u'd': u'', u'e': None},
|
|
johannes@2510
|
245 |
[])),
|
|
johannes@2528
|
246 |
(u'd=""', ([], {u'd': u''}, [])),
|
|
johannes@2510
|
247 |
(u'd = "", e = ""', ([], {u'd': u'', u'e': u''},
|
|
johannes@2510
|
248 |
[])),
|
|
johannes@2510
|
249 |
# no, None as key isn't accepted
|
|
johannes@2510
|
250 |
(u' = "", e = ""', ([], {u'': u'', u'e': u''},
|
|
johannes@2510
|
251 |
[])),
|
|
johannes@2507
|
252 |
# can quote both name and value:
|
|
johannes@2510
|
253 |
(u'd = d," e "= "a,b,c,d"', ([], {u'd': u'd',
|
|
johannes@2510
|
254 |
u' e ': u'a,b,c,d'}, [])),
|
|
johannes@2507
|
255 |
# trailing args
|
|
johannes@2507
|
256 |
(u'1,2,a=b,3,4', ([u'1', u'2'], {u'a': u'b'},
|
|
johannes@2507
|
257 |
[u'3', u'4'])),
|
|
johannes@2544
|
258 |
# can quote quotes:
|
|
johannes@2544
|
259 |
(u'd = """d"', ([], {u'd': u'"d'}, [])),
|
|
johannes@2544
|
260 |
(u'd = """d"""', ([], {u'd': u'"d"'}, [])),
|
|
johannes@2544
|
261 |
(u'd = "d"" ", e=7', ([], {u'd': u'd" ', u'e': u'7'},
|
|
johannes@2544
|
262 |
[])),
|
|
johannes@2544
|
263 |
(u'd = "d""", e=8', ([], {u'd': u'd"', u'e': u'8'},
|
|
johannes@2544
|
264 |
[])),
|
|
johannes@2507
|
265 |
]
|
|
johannes@2507
|
266 |
for args, expected in tests:
|
|
johannes@2507
|
267 |
result = wikiutil.parse_quoted_separated(args)
|
|
johannes@2507
|
268 |
assert expected == result
|
|
johannes@2528
|
269 |
for val in result[0]:
|
|
johannes@2528
|
270 |
assert val is None or isinstance(val, unicode)
|
|
johannes@2528
|
271 |
for val in result[1].keys():
|
|
johannes@2528
|
272 |
assert val is None or isinstance(val, unicode)
|
|
johannes@2528
|
273 |
for val in result[1].values():
|
|
johannes@2528
|
274 |
assert val is None or isinstance(val, unicode)
|
|
johannes@2528
|
275 |
for val in result[2]:
|
|
johannes@2528
|
276 |
assert val is None or isinstance(val, unicode)
|
|
johannes@2507
|
277 |
|
|
johannes@2507
|
278 |
def testLimited(self):
|
|
johannes@2507
|
279 |
tests = [
|
|
johannes@2507
|
280 |
# regular and quoting tests
|
|
johannes@2507
|
281 |
(u'd = 4,c=3,b=2,a= 1 ', ([], {u'd': u'4',
|
|
johannes@2507
|
282 |
u'c': u'3,b=2,a= 1'}, [])),
|
|
johannes@2507
|
283 |
(u'a,b,c,d', ([u'a', u'b,c,d'], {}, [])),
|
|
johannes@2507
|
284 |
(u'a=b,b,c,d', ([], {u'a': u'b'}, [u'b,c,d'])),
|
|
johannes@2507
|
285 |
]
|
|
johannes@2507
|
286 |
for args, expected in tests:
|
|
johannes@2507
|
287 |
result = wikiutil.parse_quoted_separated(args, seplimit=1)
|
|
johannes@2507
|
288 |
assert expected == result
|
|
johannes@2528
|
289 |
for val in result[0]:
|
|
johannes@2528
|
290 |
assert val is None or isinstance(val, unicode)
|
|
johannes@2528
|
291 |
for val in result[1].keys():
|
|
johannes@2528
|
292 |
assert val is None or isinstance(val, unicode)
|
|
johannes@2528
|
293 |
for val in result[1].values():
|
|
johannes@2528
|
294 |
assert val is None or isinstance(val, unicode)
|
|
johannes@2528
|
295 |
for val in result[2]:
|
|
johannes@2528
|
296 |
assert val is None or isinstance(val, unicode)
|
|
johannes@2507
|
297 |
|
|
MoinMoinBugs/TypeErrorInWikiutils">johannes@3815
|
298 |
def testDoubleNameValueSeparator(self):
|
|
MoinMoinBugs/TypeErrorInWikiutils">johannes@3815
|
299 |
tests = [
|
|
MoinMoinBugs/TypeErrorInWikiutils">johannes@3815
|
300 |
# regular and quoting tests
|
|
MoinMoinBugs/TypeErrorInWikiutils">johannes@3815
|
301 |
(u'd==4,=3 ', ([], {u'd': u'=4', u'': u'3'}, [])),
|
|
MoinMoinBugs/TypeErrorInWikiutils">johannes@3815
|
302 |
(u'===a,b,c,d', ([], {u'': u'==a'}, [u'b', u'c', u'd'])),
|
|
MoinMoinBugs/TypeErrorInWikiutils">johannes@3815
|
303 |
(u'a,b,===,c,d', ([u'a', u'b'], {u'': u'=='}, [u'c', u'd'])),
|
|
MoinMoinBugs/TypeErrorInWikiutils">johannes@3815
|
304 |
]
|
|
MoinMoinBugs/TypeErrorInWikiutils">johannes@3815
|
305 |
|
|
MoinMoinBugs/TypeErrorInWikiutils">johannes@3815
|
306 |
def _check(a, e):
|
|
MoinMoinBugs/TypeErrorInWikiutils">johannes@3815
|
307 |
r = wikiutil.parse_quoted_separated(a)
|
|
MoinMoinBugs/TypeErrorInWikiutils">johannes@3815
|
308 |
assert r == e
|
|
MoinMoinBugs/TypeErrorInWikiutils">johannes@3815
|
309 |
|
|
MoinMoinBugs/TypeErrorInWikiutils">johannes@3815
|
310 |
for args, expected in tests:
|
|
MoinMoinBugs/TypeErrorInWikiutils">johannes@3815
|
311 |
yield _check, args, expected
|
|
MoinMoinBugs/TypeErrorInWikiutils">johannes@3815
|
312 |
|
|
johannes@2507
|
313 |
def testNoNameValue(self):
|
|
johannes@2507
|
314 |
abcd = [u'a', u'b', u'c', u'd']
|
|
johannes@2507
|
315 |
tests = [
|
|
johannes@2507
|
316 |
# regular and quoting tests
|
|
johannes@2507
|
317 |
(u'd = 4,c=3,b=2,a= 1 ', [u'd = 4', u'c=3',
|
|
johannes@2507
|
318 |
u'b=2', u'a= 1']),
|
|
johannes@2507
|
319 |
(u'a,b,c,d', abcd),
|
|
johannes@2507
|
320 |
(u' a , b , c , d ', abcd),
|
|
johannes@2507
|
321 |
(u' a ', [u'a']),
|
|
johannes@2507
|
322 |
(u'" a "', [u' a ']),
|
|
johannes@2510
|
323 |
(u'a,b,c,d, "a,b,c,d"', abcd + [u'a,b,c,d']),
|
|
johannes@2507
|
324 |
(u'quote " :), b', [u'quote " :)', u'b']),
|
|
johannes@2507
|
325 |
(u'"quote "" :)", b', [u'quote " :)', u'b']),
|
|
johannes@3404
|
326 |
(u'"unended quote', [u'"unended quote']),
|
|
johannes@3404
|
327 |
(u'"', [u'"']),
|
|
johannes@2507
|
328 |
(u'd=d,e="a,b,c,d"', [u'd=d', u'e="a', u'b',
|
|
johannes@2507
|
329 |
u'c', u'd"']),
|
|
johannes@2507
|
330 |
]
|
|
johannes@2507
|
331 |
for args, expected in tests:
|
|
johannes@2507
|
332 |
result = wikiutil.parse_quoted_separated(args, name_value=False)
|
|
johannes@2507
|
333 |
assert expected == result
|
|
johannes@2528
|
334 |
for val in result:
|
|
johannes@2528
|
335 |
assert val is None or isinstance(val, unicode)
|
|
johannes@2507
|
336 |
|
|
rb@3259
|
337 |
def testUnitArgument(self):
|
|
rb@3259
|
338 |
result = wikiutil.UnitArgument('7mm', float, ['%', 'mm'])
|
|
rb@3259
|
339 |
assert result.get_default() == (7.0, 'mm')
|
|
rb@3259
|
340 |
assert result.parse_argument('8%') == (8.0, '%')
|
|
rb@3259
|
341 |
py.test.raises(ValueError, result.parse_argument, u'7m')
|
|
rb@3259
|
342 |
py.test.raises(ValueError, result.parse_argument, u'7')
|
|
rb@3259
|
343 |
py.test.raises(ValueError, result.parse_argument, u'mm')
|
|
johannes@2507
|
344 |
|
|
johannes@3399
|
345 |
def testExtendedParser(self):
|
|
johannes@3399
|
346 |
tests = [
|
|
johannes@3399
|
347 |
(u'"a", "b", "c"', u',', None, [u'a', u'b', u'c']),
|
|
johannes@3399
|
348 |
(u'a:b, b:c, c:d', u',', u':', [(u'a', u'b'), (u'b', u'c'), (u'c', u'd')]),
|
|
johannes@3399
|
349 |
(u'a:b, b:c, c:d', u',', None, [u'a:b', u'b:c', u'c:d']),
|
|
johannes@3399
|
350 |
(u'a=b, b=c, c=d', u',', None, [u'a=b', u'b=c', u'c=d']),
|
|
johannes@3399
|
351 |
(u'a=b, b=c, c=d', u',', u'=', [(u'a', u'b'), (u'b', u'c'), (u'c', u'd')]),
|
|
johannes@3399
|
352 |
(u'"a"; "b"; "c"', u';', None, [u'a', u'b', u'c']),
|
|
johannes@3399
|
353 |
(u'a:b; b:c; c:d', u';', u':', [(u'a', u'b'), (u'b', u'c'), (u'c', u'd')]),
|
|
johannes@3399
|
354 |
(u'a:b; b:c; c:d', u';', None, [u'a:b', u'b:c', u'c:d']),
|
|
johannes@3399
|
355 |
(u'a=b; b=c; c=d', u';', None, [u'a=b', u'b=c', u'c=d']),
|
|
johannes@3399
|
356 |
(u'a=b; b=c; c=d', u';', u'=', [(u'a', u'b'), (u'b', u'c'), (u'c', u'd')]),
|
|
johannes@3399
|
357 |
(u'"a" "b" "c"', None, None, [u'a', u'b', u'c']),
|
|
johannes@3399
|
358 |
(u'" a " "b" "c"', None, None, [u' a ', u'b', u'c']),
|
|
johannes@3399
|
359 |
(u'"a " "b" "c"', None, None, [u'a ', u'b', u'c']),
|
|
johannes@3399
|
360 |
(u'" a" "b" "c"', None, None, [u' a', u'b', u'c']),
|
|
johannes@3399
|
361 |
(u'" a" "b" "c"', None, u':', [u' a', u'b', u'c']),
|
|
johannes@3399
|
362 |
(u'"a:a" "b:b" "c:b"', None, u':', [u'a:a', u'b:b', u'c:b']),
|
|
johannes@3399
|
363 |
(u' a:a ', None, u':', [None, None, None, (u'a', u'a'), None, None]),
|
|
johannes@3399
|
364 |
(u'a a: a', None, u':', [u'a', (u'a', None), u'a']),
|
|
johannes@3399
|
365 |
(u'a a:"b c d" a', None, u':', [u'a', (u'a', u'b c d'), u'a']),
|
|
johannes@3399
|
366 |
(u'a a:"b "" d" a', None, u':', [u'a', (u'a', u'b " d'), u'a']),
|
|
johannes@3399
|
367 |
(u'title:Help* dog cat', None, u':', [(u'title', u'Help*'), u'dog', u'cat']),
|
|
johannes@3399
|
368 |
(u'title:Help* "dog cat"', None, u':', [(u'title', u'Help*'), u'dog cat']),
|
|
johannes@3400
|
369 |
(u'a:b:c d:e:f', None, u':', [(u'a', u'b:c'), (u'd', 'e:f')]),
|
|
johannes@3400
|
370 |
(u'a:b:c:d', None, u':', [(u'a', u'b:c:d')]),
|
|
johannes@3399
|
371 |
]
|
|
johannes@3399
|
372 |
|
|
johannes@3399
|
373 |
def _check(args, sep, kwsep, expected):
|
|
johannes@3399
|
374 |
res = wikiutil.parse_quoted_separated_ext(args, sep, kwsep)
|
|
johannes@3399
|
375 |
assert res == expected
|
|
johannes@3399
|
376 |
|
|
johannes@3399
|
377 |
for test in tests:
|
|
johannes@3401
|
378 |
yield [_check] + list(test)
|
|
johannes@3399
|
379 |
|
|
johannes@3399
|
380 |
def testExtendedParserBracketing(self):
|
|
johannes@3399
|
381 |
tests = [
|
|
johannes@3399
|
382 |
(u'"a", "b", "c"', u',', None, [u'a', u'b', u'c']),
|
|
johannes@3402
|
383 |
(u'("a", "b", "c")', u',', None, [[u'(', u'a', u'b', u'c']]),
|
|
johannes@3402
|
384 |
(u'("a"("b", "c"))', u',', None, [[u'(', u'a', [u'(', u'b', u'c']]]),
|
|
johannes@3402
|
385 |
(u'("a"("b)))", "c"))', u',', None, [[u'(', u'a', [u'(', u'b)))', u'c']]]),
|
|
johannes@3402
|
386 |
(u'("a"("b>>> ( ab )>", "c"))', u',', None, [[u'(', u'a', [u'(', u'b>>> ( ab )>', u'c']]]),
|
|
johannes@3402
|
387 |
(u'("a" ("b" "c"))', None, None, [[u'(', u'a', [u'(', u'b', u'c']]]),
|
|
johannes@3402
|
388 |
(u'("a"("b", "c") ) ', u',', None, [[u'(', u'a', [u'(', u'b', u'c']]]),
|
|
johannes@3402
|
389 |
(u'("a", <"b", ("c")>)', u',', None, [[u'(', u'a', [u'<', u'b', [u'(', u'c']]]]),
|
|
johannes@3407
|
390 |
(u',,,(a, b, c)', u',', None, [None, None, None, [u'(', u'a', u'b', u'c']]),
|
|
johannes@3399
|
391 |
]
|
|
johannes@3399
|
392 |
|
|
johannes@3399
|
393 |
def _check(args, sep, kwsep, expected):
|
|
johannes@3399
|
394 |
res = wikiutil.parse_quoted_separated_ext(args, sep, kwsep, brackets=(u'<>', u'()'))
|
|
johannes@3399
|
395 |
assert res == expected
|
|
johannes@3399
|
396 |
|
|
johannes@3399
|
397 |
for test in tests:
|
|
johannes@3401
|
398 |
yield [_check] + list(test)
|
|
johannes@3401
|
399 |
|
|
johannes@3405
|
400 |
def testExtendedParserQuoting(self):
|
|
johannes@3405
|
401 |
tests = [
|
|
johannes@3405
|
402 |
(u'"a b" -a b-', u'"', [u'a b', u'-a', u'b-']),
|
|
johannes@3405
|
403 |
(u'"a b" -a b-', u"-", [u'"a', u'b"', u'a b']),
|
|
johannes@3405
|
404 |
(u'"a b" -a b-', u'"-', [u'a b', u'a b']),
|
|
johannes@3405
|
405 |
(u'"a- b" -a b-', u'"-', [u'a- b', u'a b']),
|
|
johannes@3405
|
406 |
(u'"a- b" -a" b-', u'"-', [u'a- b', u'a" b']),
|
|
johannes@3405
|
407 |
]
|
|
johannes@3405
|
408 |
|
|
johannes@3405
|
409 |
def _check(args, quotes, expected):
|
|
johannes@3405
|
410 |
res = wikiutil.parse_quoted_separated_ext(args, quotes=quotes)
|
|
johannes@3405
|
411 |
assert res == expected
|
|
johannes@3405
|
412 |
|
|
johannes@3405
|
413 |
for test in tests:
|
|
johannes@3405
|
414 |
yield [_check] + list(test)
|
|
johannes@3405
|
415 |
|
|
johannes@3401
|
416 |
def testExtendedParserMultikey(self):
|
|
johannes@3401
|
417 |
tests = [
|
|
johannes@3401
|
418 |
(u'"a", "b", "c"', u',', None, [u'a', u'b', u'c']),
|
|
johannes@3401
|
419 |
(u'a:b, b:c, c:d', u',', u':', [(u'a', u'b'), (u'b', u'c'), (u'c', u'd')]),
|
|
johannes@3401
|
420 |
(u'a:b, b:c, c:d', u',', None, [u'a:b', u'b:c', u'c:d']),
|
|
johannes@3401
|
421 |
(u'a=b, b=c, c=d', u',', None, [u'a=b', u'b=c', u'c=d']),
|
|
johannes@3401
|
422 |
(u'a=b, b=c, c=d', u',', u'=', [(u'a', u'b'), (u'b', u'c'), (u'c', u'd')]),
|
|
johannes@3401
|
423 |
(u'"a"; "b"; "c"', u';', None, [u'a', u'b', u'c']),
|
|
johannes@3401
|
424 |
(u'a:b; b:c; c:d', u';', u':', [(u'a', u'b'), (u'b', u'c'), (u'c', u'd')]),
|
|
johannes@3401
|
425 |
(u'a:b; b:c; c:d', u';', None, [u'a:b', u'b:c', u'c:d']),
|
|
johannes@3401
|
426 |
(u'a=b; b=c; c=d', u';', None, [u'a=b', u'b=c', u'c=d']),
|
|
johannes@3401
|
427 |
(u'a=b; b=c; c=d', u';', u'=', [(u'a', u'b'), (u'b', u'c'), (u'c', u'd')]),
|
|
johannes@3401
|
428 |
(u'"a" "b" "c"', None, None, [u'a', u'b', u'c']),
|
|
johannes@3401
|
429 |
(u'" a " "b" "c"', None, None, [u' a ', u'b', u'c']),
|
|
johannes@3401
|
430 |
(u'"a " "b" "c"', None, None, [u'a ', u'b', u'c']),
|
|
johannes@3401
|
431 |
(u'" a" "b" "c"', None, None, [u' a', u'b', u'c']),
|
|
johannes@3401
|
432 |
(u'" a" "b" "c"', None, u':', [u' a', u'b', u'c']),
|
|
johannes@3401
|
433 |
(u'"a:a" "b:b" "c:b"', None, u':', [u'a:a', u'b:b', u'c:b']),
|
|
johannes@3401
|
434 |
(u' a:a ', None, u':', [None, None, None, (u'a', u'a'), None, None]),
|
|
johannes@3401
|
435 |
(u'a a: a', None, u':', [u'a', (u'a', None), u'a']),
|
|
johannes@3401
|
436 |
(u'a a:"b c d" a', None, u':', [u'a', (u'a', u'b c d'), u'a']),
|
|
johannes@3401
|
437 |
(u'a a:"b "" d" a', None, u':', [u'a', (u'a', u'b " d'), u'a']),
|
|
johannes@3401
|
438 |
(u'title:Help* dog cat', None, u':', [(u'title', u'Help*'), u'dog', u'cat']),
|
|
johannes@3401
|
439 |
(u'title:Help* "dog cat"', None, u':', [(u'title', u'Help*'), u'dog cat']),
|
|
johannes@3401
|
440 |
(u'a:b:c d:e:f', None, u':', [(u'a', u'b', u'c'), (u'd', 'e', u'f')]),
|
|
johannes@3401
|
441 |
(u'a:b:c:d', None, u':', [(u'a', u'b', u'c', u'd')]),
|
|
johannes@3401
|
442 |
(u'a:"b:c":d', None, u':', [(u'a', u'b:c', u'd')]),
|
|
johannes@3401
|
443 |
]
|
|
johannes@3401
|
444 |
|
|
johannes@3401
|
445 |
def _check(args, sep, kwsep, expected):
|
|
johannes@3401
|
446 |
res = wikiutil.parse_quoted_separated_ext(args, sep, kwsep, multikey=True)
|
|
johannes@3401
|
447 |
assert res == expected
|
|
johannes@3401
|
448 |
|
|
johannes@3401
|
449 |
for test in tests:
|
|
johannes@3401
|
450 |
yield [_check] + list(test)
|
|
johannes@3399
|
451 |
|
|
johannes@3403
|
452 |
def testExtendedParserPrefix(self):
|
|
johannes@3403
|
453 |
P = wikiutil.ParserPrefix('+')
|
|
johannes@3403
|
454 |
M = wikiutil.ParserPrefix('-')
|
|
johannes@3403
|
455 |
tests = [
|
|
johannes@3403
|
456 |
(u'"a", "b", "c"', u',', None, [u'a', u'b', u'c']),
|
|
johannes@3403
|
457 |
(u'a:b, b:c, c:d', u',', u':', [(u'a', u'b'), (u'b', u'c'), (u'c', u'd')]),
|
|
johannes@3403
|
458 |
(u'a:b, b:c, c:d', u',', None, [u'a:b', u'b:c', u'c:d']),
|
|
johannes@3403
|
459 |
(u'a=b, b=c, c=d', u',', None, [u'a=b', u'b=c', u'c=d']),
|
|
johannes@3403
|
460 |
(u'a=b, b=c, c=d', u',', u'=', [(u'a', u'b'), (u'b', u'c'), (u'c', u'd')]),
|
|
johannes@3403
|
461 |
(u'"a"; "b"; "c"', u';', None, [u'a', u'b', u'c']),
|
|
johannes@3403
|
462 |
(u'a:b; b:c; c:d', u';', u':', [(u'a', u'b'), (u'b', u'c'), (u'c', u'd')]),
|
|
johannes@3403
|
463 |
(u'a:b; b:c; c:d', u';', None, [u'a:b', u'b:c', u'c:d']),
|
|
johannes@3403
|
464 |
(u'a=b; b=c; c=d', u';', None, [u'a=b', u'b=c', u'c=d']),
|
|
johannes@3403
|
465 |
(u'a=b; b=c; c=d', u';', u'=', [(u'a', u'b'), (u'b', u'c'), (u'c', u'd')]),
|
|
johannes@3403
|
466 |
(u'"a" "b" "c"', None, None, [u'a', u'b', u'c']),
|
|
johannes@3403
|
467 |
(u'" a " "b" "c"', None, None, [u' a ', u'b', u'c']),
|
|
johannes@3403
|
468 |
(u'"a " "b" "c"', None, None, [u'a ', u'b', u'c']),
|
|
johannes@3403
|
469 |
(u'" a" "b" "c"', None, None, [u' a', u'b', u'c']),
|
|
johannes@3403
|
470 |
(u'" a" "b" "c"', None, u':', [u' a', u'b', u'c']),
|
|
johannes@3403
|
471 |
(u'"a:a" "b:b" "c:b"', None, u':', [u'a:a', u'b:b', u'c:b']),
|
|
johannes@3403
|
472 |
(u' a:a ', None, u':', [None, None, None, (u'a', u'a'), None, None]),
|
|
johannes@3403
|
473 |
(u'a a: a', None, u':', [u'a', (u'a', None), u'a']),
|
|
johannes@3403
|
474 |
(u'a a:"b c d" a', None, u':', [u'a', (u'a', u'b c d'), u'a']),
|
|
johannes@3403
|
475 |
(u'a a:"b "" d" a', None, u':', [u'a', (u'a', u'b " d'), u'a']),
|
|
johannes@3403
|
476 |
(u'title:Help* dog cat', None, u':', [(u'title', u'Help*'), u'dog', u'cat']),
|
|
johannes@3403
|
477 |
(u'title:Help* "dog cat"', None, u':', [(u'title', u'Help*'), u'dog cat']),
|
|
johannes@3403
|
478 |
(u'a:b:c d:e:f', None, u':', [(u'a', u'b', u'c'), (u'd', 'e', u'f')]),
|
|
johannes@3403
|
479 |
(u'a:b:c:d', None, u':', [(u'a', u'b', u'c', u'd')]),
|
|
johannes@3403
|
480 |
(u'a:"b:c":d', None, u':', [(u'a', u'b:c', u'd')]),
|
|
johannes@3403
|
481 |
|
|
johannes@3403
|
482 |
(u'-a:b:d', None, u':', [(M, u'a', u'b', u'd')]),
|
|
johannes@3403
|
483 |
(u'"-a:b:d"', None, u':', [(u'-a:b:d')]),
|
|
johannes@3403
|
484 |
(u'-"a:b:d"', None, u':', [(M, u'a:b:d')]),
|
|
johannes@3403
|
485 |
(u'-a:"b:c":"d e f g"', None, u':', [(M, u'a', u'b:c', u'd e f g')]),
|
|
johannes@3403
|
486 |
(u'+-a:b:d', None, u':', [(P, u'-a', u'b', u'd')]),
|
|
johannes@3403
|
487 |
(u'-"+a:b:d"', None, u':', [(M, u'+a:b:d')]),
|
|
johannes@3403
|
488 |
# bit of a weird case...
|
|
johannes@3403
|
489 |
(u'-+"a:b:d"', None, u':', [(M, u'+"a', u'b', u'd"')]),
|
|
johannes@3403
|
490 |
(u'-a:"b:c" a +b', None, u':', [(M, u'a', u'b:c'), u'a', (P, u'b')]),
|
|
johannes@3403
|
491 |
]
|
|
johannes@3403
|
492 |
|
|
johannes@3403
|
493 |
def _check(args, sep, kwsep, expected):
|
|
johannes@3403
|
494 |
res = wikiutil.parse_quoted_separated_ext(args, sep, kwsep, multikey=True, prefixes='-+')
|
|
johannes@3403
|
495 |
assert res == expected
|
|
johannes@3403
|
496 |
|
|
johannes@3403
|
497 |
for test in tests:
|
|
johannes@3403
|
498 |
yield [_check] + list(test)
|
|
johannes@3403
|
499 |
|
|
johannes@3399
|
500 |
def testExtendedParserBracketingErrors(self):
|
|
johannes@3399
|
501 |
UCE = wikiutil.BracketUnexpectedCloseError
|
|
johannes@3399
|
502 |
MCE = wikiutil.BracketMissingCloseError
|
|
johannes@3399
|
503 |
tests = [
|
|
johannes@3399
|
504 |
(u'("a", "b", "c"', u',', None, MCE),
|
|
johannes@3399
|
505 |
(u'("a"("b", "c")', u',', None, MCE),
|
|
johannes@3399
|
506 |
(u'("a"<"b", "c")>', u',', None, UCE),
|
|
johannes@3399
|
507 |
(u')("a" ("b" "c"))', None, None, UCE),
|
|
johannes@3399
|
508 |
(u'("a", ("b", "c">))', u',', None, UCE),
|
|
johannes@3399
|
509 |
(u'("a", ("b", <"c">>))', u',', None, UCE),
|
|
johannes@3399
|
510 |
(u'(<(<)>)>', u',', None, UCE),
|
|
johannes@3399
|
511 |
]
|
|
johannes@3399
|
512 |
|
|
johannes@3399
|
513 |
def _check(args, sep, kwsep, err):
|
|
johannes@3399
|
514 |
py.test.raises(err,
|
|
johannes@3399
|
515 |
wikiutil.parse_quoted_separated_ext,
|
|
johannes@3399
|
516 |
args, sep, kwsep,
|
|
johannes@3399
|
517 |
brackets=(u'<>', u'()'))
|
|
johannes@3399
|
518 |
|
|
johannes@3399
|
519 |
for test in tests:
|
|
johannes@3401
|
520 |
yield [_check] + list(test)
|
|
johannes@3399
|
521 |
|
|
tw@2512
|
522 |
class TestArgGetters:
|
|
tw@2512
|
523 |
def testGetBoolean(self):
|
|
tw@2512
|
524 |
tests = [
|
|
tw@2512
|
525 |
# default testing for None value
|
|
tw@2512
|
526 |
(None, None, None, None),
|
|
tw@2512
|
527 |
(None, None, False, False),
|
|
tw@2512
|
528 |
(None, None, True, True),
|
|
tw@2512
|
529 |
|
|
tw@2512
|
530 |
# some real values
|
|
tw@2512
|
531 |
(u'0', None, None, False),
|
|
tw@2512
|
532 |
(u'1', None, None, True),
|
|
tw@2512
|
533 |
(u'false', None, None, False),
|
|
tw@2512
|
534 |
(u'true', None, None, True),
|
|
tw@2512
|
535 |
(u'FALSE', None, None, False),
|
|
tw@2512
|
536 |
(u'TRUE', None, None, True),
|
|
tw@2512
|
537 |
(u'no', None, None, False),
|
|
tw@2512
|
538 |
(u'yes', None, None, True),
|
|
tw@2512
|
539 |
(u'NO', None, None, False),
|
|
tw@2512
|
540 |
(u'YES', None, None, True),
|
|
tw@2512
|
541 |
]
|
|
tw@2512
|
542 |
for arg, name, default, expected in tests:
|
|
tw@2512
|
543 |
assert wikiutil.get_bool(self.request, arg, name, default) == expected
|
|
tw@2512
|
544 |
|
|
tw@2512
|
545 |
def testGetBooleanRaising(self):
|
|
tw@2512
|
546 |
# wrong default type
|
|
tw@2512
|
547 |
py.test.raises(AssertionError, wikiutil.get_bool, self.request, None, None, 42)
|
|
tw@2512
|
548 |
|
|
tw@2512
|
549 |
# anything except None or unicode raises TypeError
|
|
tw@2512
|
550 |
py.test.raises(TypeError, wikiutil.get_bool, self.request, True)
|
|
tw@2512
|
551 |
py.test.raises(TypeError, wikiutil.get_bool, self.request, 42)
|
|
tw@2512
|
552 |
py.test.raises(TypeError, wikiutil.get_bool, self.request, 42.0)
|
|
tw@2512
|
553 |
py.test.raises(TypeError, wikiutil.get_bool, self.request, '')
|
|
tw@2512
|
554 |
py.test.raises(TypeError, wikiutil.get_bool, self.request, tuple())
|
|
tw@2512
|
555 |
py.test.raises(TypeError, wikiutil.get_bool, self.request, [])
|
|
tw@2512
|
556 |
py.test.raises(TypeError, wikiutil.get_bool, self.request, {})
|
|
tw@2512
|
557 |
|
|
tw@2512
|
558 |
# any value not convertable to boolean raises ValueError
|
|
tw@2512
|
559 |
py.test.raises(ValueError, wikiutil.get_bool, self.request, u'')
|
|
tw@2512
|
560 |
py.test.raises(ValueError, wikiutil.get_bool, self.request, u'42')
|
|
tw@2512
|
561 |
py.test.raises(ValueError, wikiutil.get_bool, self.request, u'wrong')
|
|
tw@2512
|
562 |
py.test.raises(ValueError, wikiutil.get_bool, self.request, u'"True"') # must not be quoted!
|
|
tw@2512
|
563 |
|
|
tw@2512
|
564 |
def testGetInt(self):
|
|
tw@2512
|
565 |
tests = [
|
|
tw@2512
|
566 |
# default testing for None value
|
|
tw@2512
|
567 |
(None, None, None, None),
|
|
tw@2512
|
568 |
(None, None, -23, -23),
|
|
tw@2512
|
569 |
(None, None, 42, 42),
|
|
tw@2512
|
570 |
|
|
tw@2512
|
571 |
# some real values
|
|
tw@2512
|
572 |
(u'0', None, None, 0),
|
|
tw@2512
|
573 |
(u'42', None, None, 42),
|
|
tw@2512
|
574 |
(u'-23', None, None, -23),
|
|
tw@2512
|
575 |
]
|
|
tw@2512
|
576 |
for arg, name, default, expected in tests:
|
|
tw@2512
|
577 |
assert wikiutil.get_int(self.request, arg, name, default) == expected
|
|
tw@2512
|
578 |
|
|
tw@2512
|
579 |
def testGetIntRaising(self):
|
|
tw@2512
|
580 |
# wrong default type
|
|
tw@2512
|
581 |
py.test.raises(AssertionError, wikiutil.get_int, self.request, None, None, 42.23)
|
|
tw@2512
|
582 |
|
|
tw@2512
|
583 |
# anything except None or unicode raises TypeError
|
|
tw@2512
|
584 |
py.test.raises(TypeError, wikiutil.get_int, self.request, True)
|
|
tw@2512
|
585 |
py.test.raises(TypeError, wikiutil.get_int, self.request, 42)
|
|
tw@2512
|
586 |
py.test.raises(TypeError, wikiutil.get_int, self.request, 42.0)
|
|
tw@2512
|
587 |
py.test.raises(TypeError, wikiutil.get_int, self.request, '')
|
|
tw@2512
|
588 |
py.test.raises(TypeError, wikiutil.get_int, self.request, tuple())
|
|
tw@2512
|
589 |
py.test.raises(TypeError, wikiutil.get_int, self.request, [])
|
|
tw@2512
|
590 |
py.test.raises(TypeError, wikiutil.get_int, self.request, {})
|
|
tw@2512
|
591 |
|
|
tw@2512
|
592 |
# any value not convertable to int raises ValueError
|
|
tw@2512
|
593 |
py.test.raises(ValueError, wikiutil.get_int, self.request, u'')
|
|
tw@2512
|
594 |
py.test.raises(ValueError, wikiutil.get_int, self.request, u'23.42')
|
|
tw@2512
|
595 |
py.test.raises(ValueError, wikiutil.get_int, self.request, u'wrong')
|
|
tw@2512
|
596 |
py.test.raises(ValueError, wikiutil.get_int, self.request, u'"4711"') # must not be quoted!
|
|
tw@2512
|
597 |
|
|
tw@2512
|
598 |
def testGetFloat(self):
|
|
tw@2512
|
599 |
tests = [
|
|
tw@2512
|
600 |
# default testing for None value
|
|
tw@2512
|
601 |
(None, None, None, None),
|
|
tw@2512
|
602 |
(None, None, -23.42, -23.42),
|
|
tw@2512
|
603 |
(None, None, 42.23, 42.23),
|
|
tw@2512
|
604 |
|
|
tw@2512
|
605 |
# some real values
|
|
tw@2512
|
606 |
(u'0', None, None, 0),
|
|
tw@2512
|
607 |
(u'42.23', None, None, 42.23),
|
|
tw@2512
|
608 |
(u'-23.42', None, None, -23.42),
|
|
tw@2512
|
609 |
(u'-23.42E3', None, None, -23.42E3),
|
|
tw@2512
|
610 |
(u'23.42E-3', None, None, 23.42E-3),
|
|
tw@2512
|
611 |
]
|
|
tw@2512
|
612 |
for arg, name, default, expected in tests:
|
|
tw@2512
|
613 |
assert wikiutil.get_float(self.request, arg, name, default) == expected
|
|
tw@2512
|
614 |
|
|
tw@2512
|
615 |
def testGetFloatRaising(self):
|
|
tw@2512
|
616 |
# wrong default type
|
|
tw@2512
|
617 |
py.test.raises(AssertionError, wikiutil.get_float, self.request, None, None, u'42')
|
|
tw@2512
|
618 |
|
|
tw@2512
|
619 |
# anything except None or unicode raises TypeError
|
|
tw@2512
|
620 |
py.test.raises(TypeError, wikiutil.get_float, self.request, True)
|
|
tw@2512
|
621 |
py.test.raises(TypeError, wikiutil.get_float, self.request, 42)
|
|
tw@2512
|
622 |
py.test.raises(TypeError, wikiutil.get_float, self.request, 42.0)
|
|
tw@2512
|
623 |
py.test.raises(TypeError, wikiutil.get_float, self.request, '')
|
|
tw@2512
|
624 |
py.test.raises(TypeError, wikiutil.get_float, self.request, tuple())
|
|
tw@2512
|
625 |
py.test.raises(TypeError, wikiutil.get_float, self.request, [])
|
|
tw@2512
|
626 |
py.test.raises(TypeError, wikiutil.get_float, self.request, {})
|
|
tw@2512
|
627 |
|
|
tw@2512
|
628 |
# any value not convertable to int raises ValueError
|
|
tw@2512
|
629 |
py.test.raises(ValueError, wikiutil.get_float, self.request, u'')
|
|
tw@2512
|
630 |
py.test.raises(ValueError, wikiutil.get_float, self.request, u'wrong')
|
|
tw@2512
|
631 |
py.test.raises(ValueError, wikiutil.get_float, self.request, u'"47.11"') # must not be quoted!
|
|
tw@2512
|
632 |
|
|
johannes@2558
|
633 |
def testGetComplex(self):
|
|
johannes@2558
|
634 |
tests = [
|
|
johannes@2558
|
635 |
# default testing for None value
|
|
johannes@2558
|
636 |
(None, None, None, None),
|
|
johannes@2558
|
637 |
(None, None, -23.42, -23.42),
|
|
johannes@2558
|
638 |
(None, None, 42.23, 42.23),
|
|
johannes@2558
|
639 |
|
|
johannes@2558
|
640 |
# some real values
|
|
johannes@2558
|
641 |
(u'0', None, None, 0),
|
|
johannes@2558
|
642 |
(u'42.23', None, None, 42.23),
|
|
johannes@2558
|
643 |
(u'-23.42', None, None, -23.42),
|
|
johannes@2558
|
644 |
(u'-23.42E3', None, None, -23.42E3),
|
|
johannes@2558
|
645 |
(u'23.42E-3', None, None, 23.42E-3),
|
|
johannes@2558
|
646 |
(u'23.42E-3+3.04j', None, None, 23.42E-3+3.04j),
|
|
johannes@2558
|
647 |
(u'3.04j', None, None, 3.04j),
|
|
johannes@2558
|
648 |
(u'-3.04j', None, None, -3.04j),
|
|
johannes@2558
|
649 |
(u'23.42E-3+3.04i', None, None, 23.42E-3+3.04j),
|
|
johannes@2558
|
650 |
(u'3.04i', None, None, 3.04j),
|
|
johannes@2558
|
651 |
(u'-3.04i', None, None, -3.04j),
|
|
johannes@2558
|
652 |
(u'-3', None, None, -3L),
|
|
johannes@2558
|
653 |
(u'-300000000000000000000', None, None, -300000000000000000000L),
|
|
johannes@2558
|
654 |
]
|
|
johannes@2558
|
655 |
for arg, name, default, expected in tests:
|
|
johannes@2558
|
656 |
assert wikiutil.get_complex(self.request, arg, name, default) == expected
|
|
johannes@2558
|
657 |
|
|
johannes@2558
|
658 |
def testGetComplexRaising(self):
|
|
johannes@2558
|
659 |
# wrong default type
|
|
johannes@2558
|
660 |
py.test.raises(AssertionError, wikiutil.get_complex, self.request, None, None, u'42')
|
|
johannes@2558
|
661 |
|
|
johannes@2558
|
662 |
# anything except None or unicode raises TypeError
|
|
johannes@2558
|
663 |
py.test.raises(TypeError, wikiutil.get_complex, self.request, True)
|
|
johannes@2558
|
664 |
py.test.raises(TypeError, wikiutil.get_complex, self.request, 42)
|
|
johannes@2558
|
665 |
py.test.raises(TypeError, wikiutil.get_complex, self.request, 42.0)
|
|
johannes@2558
|
666 |
py.test.raises(TypeError, wikiutil.get_complex, self.request, 3j)
|
|
johannes@2558
|
667 |
py.test.raises(TypeError, wikiutil.get_complex, self.request, '')
|
|
johannes@2558
|
668 |
py.test.raises(TypeError, wikiutil.get_complex, self.request, tuple())
|
|
johannes@2558
|
669 |
py.test.raises(TypeError, wikiutil.get_complex, self.request, [])
|
|
johannes@2558
|
670 |
py.test.raises(TypeError, wikiutil.get_complex, self.request, {})
|
|
johannes@2558
|
671 |
|
|
johannes@2558
|
672 |
# any value not convertable to int raises ValueError
|
|
johannes@2558
|
673 |
py.test.raises(ValueError, wikiutil.get_complex, self.request, u'')
|
|
johannes@2558
|
674 |
py.test.raises(ValueError, wikiutil.get_complex, self.request, u'3jj')
|
|
johannes@2558
|
675 |
py.test.raises(ValueError, wikiutil.get_complex, self.request, u'3Ij')
|
|
johannes@2558
|
676 |
py.test.raises(ValueError, wikiutil.get_complex, self.request, u'3i-3i')
|
|
johannes@2558
|
677 |
py.test.raises(ValueError, wikiutil.get_complex, self.request, u'wrong')
|
|
johannes@2558
|
678 |
py.test.raises(ValueError, wikiutil.get_complex, self.request, u'"47.11"') # must not be quoted!
|
|
johannes@2558
|
679 |
|
|
tw@2512
|
680 |
def testGetUnicode(self):
|
|
tw@2512
|
681 |
tests = [
|
|
tw@2512
|
682 |
# default testing for None value
|
|
tw@2512
|
683 |
(None, None, None, None),
|
|
tw@2512
|
684 |
(None, None, u'', u''),
|
|
tw@2512
|
685 |
(None, None, u'abc', u'abc'),
|
|
tw@2512
|
686 |
|
|
tw@2512
|
687 |
# some real values
|
|
tw@2512
|
688 |
(u'', None, None, u''),
|
|
tw@2512
|
689 |
(u'abc', None, None, u'abc'),
|
|
tw@2512
|
690 |
(u'"abc"', None, None, u'"abc"'),
|
|
tw@2512
|
691 |
]
|
|
tw@2512
|
692 |
for arg, name, default, expected in tests:
|
|
tw@2512
|
693 |
assert wikiutil.get_unicode(self.request, arg, name, default) == expected
|
|
tw@2512
|
694 |
|
|
tw@2512
|
695 |
def testGetUnicodeRaising(self):
|
|
tw@2512
|
696 |
# wrong default type
|
|
tw@2512
|
697 |
py.test.raises(AssertionError, wikiutil.get_unicode, self.request, None, None, 42)
|
|
tw@2512
|
698 |
|
|
tw@2512
|
699 |
# anything except None or unicode raises TypeError
|
|
tw@2512
|
700 |
py.test.raises(TypeError, wikiutil.get_unicode, self.request, True)
|
|
tw@2512
|
701 |
py.test.raises(TypeError, wikiutil.get_unicode, self.request, 42)
|
|
tw@2512
|
702 |
py.test.raises(TypeError, wikiutil.get_unicode, self.request, 42.0)
|
|
tw@2512
|
703 |
py.test.raises(TypeError, wikiutil.get_unicode, self.request, '')
|
|
tw@2512
|
704 |
py.test.raises(TypeError, wikiutil.get_unicode, self.request, tuple())
|
|
tw@2512
|
705 |
py.test.raises(TypeError, wikiutil.get_unicode, self.request, [])
|
|
tw@2512
|
706 |
py.test.raises(TypeError, wikiutil.get_unicode, self.request, {})
|
|
tw@2512
|
707 |
|
|
tw@2512
|
708 |
|
|
johannes@2543
|
709 |
class TestExtensionInvoking:
|
|
johannes@2543
|
710 |
def _test_invoke_bool(self, b=bool):
|
|
johannes@2551
|
711 |
assert b is False
|
|
johannes@2543
|
712 |
|
|
johannes@2543
|
713 |
def _test_invoke_bool_def(self, v=bool, b=False):
|
|
johannes@2543
|
714 |
assert b == v
|
|
johannes@2543
|
715 |
assert isinstance(b, bool)
|
|
johannes@2543
|
716 |
assert isinstance(v, bool)
|
|
johannes@2543
|
717 |
|
|
johannes@2543
|
718 |
def _test_invoke_int_None(self, i=int):
|
|
johannes@2543
|
719 |
assert i == 1 or i is None
|
|
johannes@2543
|
720 |
|
|
johannes@2543
|
721 |
def _test_invoke_float_None(self, i=float):
|
|
johannes@2543
|
722 |
assert i == 1.4 or i is None
|
|
johannes@2543
|
723 |
|
|
johannes@2548
|
724 |
def _test_invoke_float_required(self, i=wikiutil.required_arg(float)):
|
|
johannes@2548
|
725 |
assert i == 1.4
|
|
johannes@2548
|
726 |
|
|
johannes@2543
|
727 |
def _test_invoke_choice(self, a, choice=[u'a', u'b', u'c']):
|
|
johannes@2543
|
728 |
assert a == 7
|
|
johannes@2543
|
729 |
assert choice == u'a'
|
|
johannes@2543
|
730 |
|
|
johannes@2543
|
731 |
def _test_invoke_choicet(self, a, choice=(u'a', u'b', u'c')):
|
|
johannes@2543
|
732 |
assert a == 7
|
|
johannes@2543
|
733 |
assert choice == u'a'
|
|
johannes@2543
|
734 |
|
|
johannes@3371
|
735 |
def _test_invoke_choice_required(self, i=wikiutil.required_arg((u'b', u'a'))):
|
|
johannes@3371
|
736 |
assert i == u'a'
|
|
johannes@3371
|
737 |
|
|
johannes@2543
|
738 |
def _test_trailing(self, a, _trailing_args=[]):
|
|
johannes@2543
|
739 |
assert _trailing_args == [u'a']
|
|
johannes@2543
|
740 |
|
|
johannes@2547
|
741 |
def _test_arbitrary_kw(self, expect, _kwargs={}):
|
|
johannes@2547
|
742 |
assert _kwargs == expect
|
|
johannes@2543
|
743 |
|
|
johannes@2543
|
744 |
def testInvoke(self):
|
|
johannes@2557
|
745 |
def _test_invoke_int(i=int):
|
|
johannes@2557
|
746 |
assert i == 1
|
|
johannes@2557
|
747 |
|
|
johannes@2557
|
748 |
def _test_invoke_int_fixed(a, b, i=int):
|
|
johannes@2557
|
749 |
assert a == 7
|
|
johannes@2557
|
750 |
assert b == 8
|
|
johannes@2557
|
751 |
assert i == 1 or i is None
|
|
johannes@2557
|
752 |
|
|
johannes@2543
|
753 |
ief = wikiutil.invoke_extension_function
|
|
johannes@2543
|
754 |
ief(self.request, self._test_invoke_bool, u'False')
|
|
johannes@2543
|
755 |
ief(self.request, self._test_invoke_bool, u'b=False')
|
|
johannes@2543
|
756 |
ief(self.request, _test_invoke_int, u'1')
|
|
johannes@2543
|
757 |
ief(self.request, _test_invoke_int, u'i=1')
|
|
johannes@2543
|
758 |
ief(self.request, self._test_invoke_bool_def, u'False, False')
|
|
johannes@2543
|
759 |
ief(self.request, self._test_invoke_bool_def, u'b=False, v=False')
|
|
johannes@2543
|
760 |
ief(self.request, self._test_invoke_bool_def, u'False')
|
|
johannes@2543
|
761 |
ief(self.request, self._test_invoke_int_None, u'i=1')
|
|
johannes@2543
|
762 |
ief(self.request, self._test_invoke_int_None, u'i=')
|
|
johannes@2543
|
763 |
ief(self.request, self._test_invoke_int_None, u'')
|
|
johannes@2543
|
764 |
py.test.raises(ValueError, ief, self.request,
|
|
johannes@2543
|
765 |
self._test_invoke_int_None, u'x')
|
|
johannes@2543
|
766 |
py.test.raises(ValueError, ief, self.request,
|
|
johannes@2543
|
767 |
self._test_invoke_int_None, u'""')
|
|
johannes@2543
|
768 |
py.test.raises(ValueError, ief, self.request,
|
|
johannes@2543
|
769 |
self._test_invoke_int_None, u'i=""')
|
|
johannes@2546
|
770 |
py.test.raises(ValueError, ief, self.request,
|
|
johannes@2543
|
771 |
_test_invoke_int_fixed, u'a=7', [7, 8])
|
|
johannes@2543
|
772 |
ief(self.request, _test_invoke_int_fixed, u'i=1', [7, 8])
|
|
johannes@2543
|
773 |
py.test.raises(ValueError, ief, self.request,
|
|
johannes@2543
|
774 |
_test_invoke_int_fixed, u'i=""', [7, 8])
|
|
johannes@2543
|
775 |
ief(self.request, _test_invoke_int_fixed, u'i=', [7, 8])
|
|
johannes@2543
|
776 |
|
|
johannes@2543
|
777 |
for choicefn in (self._test_invoke_choice, self._test_invoke_choicet):
|
|
johannes@2543
|
778 |
ief(self.request, choicefn, u'', [7])
|
|
johannes@2543
|
779 |
ief(self.request, choicefn, u'choice=a', [7])
|
|
johannes@2543
|
780 |
ief(self.request, choicefn, u'choice=', [7])
|
|
johannes@2543
|
781 |
ief(self.request, choicefn, u'choice="a"', [7])
|
|
johannes@2543
|
782 |
py.test.raises(ValueError, ief, self.request,
|
|
johannes@2543
|
783 |
choicefn, u'x', [7])
|
|
johannes@2543
|
784 |
py.test.raises(ValueError, ief, self.request,
|
|
johannes@2543
|
785 |
choicefn, u'choice=x', [7])
|
|
johannes@2543
|
786 |
|
|
johannes@2543
|
787 |
ief(self.request, self._test_invoke_float_None, u'i=1.4')
|
|
johannes@2543
|
788 |
ief(self.request, self._test_invoke_float_None, u'i=')
|
|
johannes@2543
|
789 |
ief(self.request, self._test_invoke_float_None, u'')
|
|
johannes@2543
|
790 |
ief(self.request, self._test_invoke_float_None, u'1.4')
|
|
johannes@2543
|
791 |
py.test.raises(ValueError, ief, self.request,
|
|
johannes@2543
|
792 |
self._test_invoke_float_None, u'x')
|
|
johannes@2543
|
793 |
py.test.raises(ValueError, ief, self.request,
|
|
johannes@2543
|
794 |
self._test_invoke_float_None, u'""')
|
|
johannes@2543
|
795 |
py.test.raises(ValueError, ief, self.request,
|
|
johannes@2543
|
796 |
self._test_invoke_float_None, u'i=""')
|
|
johannes@2543
|
797 |
ief(self.request, self._test_trailing, u'a=7, a')
|
|
johannes@2550
|
798 |
ief(self.request, self._test_trailing, u'7, a')
|
|
johannes@2543
|
799 |
ief(self.request, self._test_arbitrary_kw, u'test=x, \xc3=test',
|
|
johannes@2547
|
800 |
[{u'\xc3': 'test', 'test': u'x'}])
|
|
johannes@2543
|
801 |
ief(self.request, self._test_arbitrary_kw, u'test=x, "\xc3"=test',
|
|
johannes@2547
|
802 |
[{u'\xc3': 'test', 'test': u'x'}])
|
|
johannes@2543
|
803 |
ief(self.request, self._test_arbitrary_kw, u'test=x, "7 \xc3"=test',
|
|
johannes@2547
|
804 |
[{u'7 \xc3': 'test', 'test': u'x'}])
|
|
johannes@2543
|
805 |
ief(self.request, self._test_arbitrary_kw, u'test=x, 7 \xc3=test',
|
|
johannes@2547
|
806 |
[{u'7 \xc3': 'test', 'test': u'x'}])
|
|
johannes@2543
|
807 |
ief(self.request, self._test_arbitrary_kw, u'7 \xc3=test, test= x ',
|
|
johannes@2547
|
808 |
[{u'7 \xc3': 'test', 'test': u'x'}])
|
|
johannes@2548
|
809 |
py.test.raises(ValueError, ief, self.request,
|
|
johannes@2548
|
810 |
self._test_invoke_float_required, u'')
|
|
johannes@2548
|
811 |
ief(self.request, self._test_invoke_float_required, u'1.4')
|
|
johannes@2548
|
812 |
ief(self.request, self._test_invoke_float_required, u'i=1.4')
|
|
johannes@2548
|
813 |
py.test.raises(ValueError, ief, self.request,
|
|
johannes@3371
|
814 |
self._test_invoke_choice_required, u'')
|
|
johannes@3371
|
815 |
ief(self.request, self._test_invoke_choice_required, u'a')
|
|
johannes@3371
|
816 |
ief(self.request, self._test_invoke_choice_required, u'i=a')
|
|
johannes@3371
|
817 |
py.test.raises(ValueError, ief, self.request,
|
|
johannes@2548
|
818 |
self._test_invoke_float_required, u',')
|
|
johannes@2543
|
819 |
|
|
johannes@2557
|
820 |
def testConstructors(self):
|
|
johannes@2557
|
821 |
ief = wikiutil.invoke_extension_function
|
|
johannes@2557
|
822 |
|
|
johannes@2557
|
823 |
# new style class
|
|
johannes@2557
|
824 |
class TEST1(object):
|
|
johannes@2557
|
825 |
def __init__(self, a=int):
|
|
johannes@2557
|
826 |
self.constructed = True
|
|
johannes@2557
|
827 |
assert a == 7
|
|
johannes@2557
|
828 |
|
|
johannes@2557
|
829 |
class TEST2(TEST1):
|
|
johannes@2557
|
830 |
pass
|
|
johannes@2557
|
831 |
|
|
johannes@2557
|
832 |
obj = ief(self.request, TEST1, u'a=7')
|
|
johannes@2557
|
833 |
assert isinstance(obj, TEST1)
|
|
johannes@2557
|
834 |
assert obj.constructed
|
|
johannes@2557
|
835 |
py.test.raises(ValueError, ief, self.request, TEST1, u'b')
|
|
johannes@2557
|
836 |
|
|
johannes@2557
|
837 |
obj = ief(self.request, TEST2, u'a=7')
|
|
johannes@2557
|
838 |
assert isinstance(obj, TEST1)
|
|
johannes@2557
|
839 |
assert isinstance(obj, TEST2)
|
|
johannes@2557
|
840 |
assert obj.constructed
|
|
johannes@2557
|
841 |
py.test.raises(ValueError, ief, self.request, TEST2, u'b')
|
|
johannes@2557
|
842 |
|
|
johannes@2557
|
843 |
# old style class
|
|
johannes@2557
|
844 |
class TEST3:
|
|
johannes@2557
|
845 |
def __init__(self, a=int):
|
|
johannes@2557
|
846 |
self.constructed = True
|
|
johannes@2557
|
847 |
assert a == 7
|
|
johannes@2557
|
848 |
|
|
johannes@2557
|
849 |
class TEST4(TEST3):
|
|
johannes@2557
|
850 |
pass
|
|
johannes@2557
|
851 |
|
|
johannes@2557
|
852 |
obj = ief(self.request, TEST3, u'a=7')
|
|
johannes@2557
|
853 |
assert isinstance(obj, TEST3)
|
|
johannes@2557
|
854 |
assert obj.constructed
|
|
johannes@2557
|
855 |
py.test.raises(ValueError, ief, self.request, TEST3, u'b')
|
|
johannes@2557
|
856 |
|
|
johannes@2557
|
857 |
obj = ief(self.request, TEST4, u'a=7')
|
|
johannes@2557
|
858 |
assert isinstance(obj, TEST3)
|
|
johannes@2557
|
859 |
assert isinstance(obj, TEST4)
|
|
johannes@2557
|
860 |
assert obj.constructed
|
|
johannes@2557
|
861 |
py.test.raises(ValueError, ief, self.request, TEST4, u'b')
|
|
johannes@2557
|
862 |
|
|
johannes@2557
|
863 |
def testFailing(self):
|
|
johannes@2557
|
864 |
ief = wikiutil.invoke_extension_function
|
|
johannes@2557
|
865 |
|
|
johannes@2557
|
866 |
py.test.raises(TypeError, ief, self.request, hex, u'15')
|
|
johannes@2557
|
867 |
py.test.raises(TypeError, ief, self.request, cmp, u'15')
|
|
johannes@2557
|
868 |
py.test.raises(AttributeError, ief, self.request, unicode, u'15')
|
|
johannes@2557
|
869 |
|
|
johannes@2557
|
870 |
def testAllDefault(self):
|
|
johannes@2557
|
871 |
ief = wikiutil.invoke_extension_function
|
|
johannes@2557
|
872 |
|
|
johannes@2557
|
873 |
def has_many_defaults(a=1, b=2, c=3, d=4):
|
|
johannes@2557
|
874 |
assert a == 1
|
|
johannes@2557
|
875 |
assert b == 2
|
|
johannes@2557
|
876 |
assert c == 3
|
|
johannes@2557
|
877 |
assert d == 4
|
|
johannes@2557
|
878 |
return True
|
|
johannes@2557
|
879 |
|
|
johannes@2557
|
880 |
assert ief(self.request, has_many_defaults, u'1, 2, 3, 4')
|
|
johannes@2557
|
881 |
assert ief(self.request, has_many_defaults, u'2, 3, 4', [1])
|
|
johannes@2557
|
882 |
assert ief(self.request, has_many_defaults, u'3, 4', [1, 2])
|
|
johannes@2557
|
883 |
assert ief(self.request, has_many_defaults, u'4', [1, 2, 3])
|
|
johannes@2557
|
884 |
assert ief(self.request, has_many_defaults, u'', [1, 2, 3, 4])
|
|
johannes@2557
|
885 |
assert ief(self.request, has_many_defaults, u'd=4,c=3,b=2,a=1')
|
|
johannes@2557
|
886 |
assert ief(self.request, has_many_defaults, u'd=4,c=3,b=2', [1])
|
|
johannes@2557
|
887 |
assert ief(self.request, has_many_defaults, u'd=4,c=3', [1, 2])
|
|
johannes@2557
|
888 |
assert ief(self.request, has_many_defaults, u'd=4', [1, 2, 3])
|
|
johannes@2557
|
889 |
|
|
johannes@2558
|
890 |
def testInvokeComplex(self):
|
|
johannes@2558
|
891 |
ief = wikiutil.invoke_extension_function
|
|
johannes@2558
|
892 |
|
|
johannes@2558
|
893 |
def has_complex(a=complex, b=complex):
|
|
johannes@2558
|
894 |
assert a == b
|
|
johannes@2558
|
895 |
return True
|
|
johannes@2558
|
896 |
|
|
johannes@2558
|
897 |
assert ief(self.request, has_complex, u'3-3i, 3-3j')
|
|
johannes@2558
|
898 |
assert ief(self.request, has_complex, u'2i, 2j')
|
|
johannes@2558
|
899 |
assert ief(self.request, has_complex, u'b=2i, a=2j')
|
|
johannes@2558
|
900 |
assert ief(self.request, has_complex, u'2.007, 2.007')
|
|
johannes@2558
|
901 |
assert ief(self.request, has_complex, u'2.007', [2.007])
|
|
johannes@2558
|
902 |
assert ief(self.request, has_complex, u'b=2.007', [2.007])
|
|
johannes@2558
|
903 |
|
|
johannes@2557
|
904 |
|
|
johannes@2567
|
905 |
class TestAnchorNames:
|
|
johannes@2567
|
906 |
def test_anchor_name_encoding(self):
|
|
johannes@2567
|
907 |
tests = [
|
|
johannes@2567
|
908 |
# text expected output
|
|
johannes@2568
|
909 |
(u'\xf6\xf6ll\xdf\xdf', 'A.2BAPYA9g-ll.2BAN8A3w-'),
|
|
tw@4555
|
910 |
(u'level 2', 'level_2'),
|
|
tw@4555
|
911 |
(u'level_2', 'level_2'),
|
|
johannes@2568
|
912 |
(u'', 'A'),
|
|
johannes@2568
|
913 |
(u'123', 'A123'),
|
|
tw@4559
|
914 |
# make sure that a valid anchor is not modified:
|
|
tw@4559
|
915 |
(u'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789:_.-',
|
|
tw@4559
|
916 |
u'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789:_.-')
|
|
johannes@2567
|
917 |
]
|
|
johannes@2567
|
918 |
for text, expected in tests:
|
|
johannes@2567
|
919 |
yield self._check, text, expected
|
|
johannes@2567
|
920 |
|
|
johannes@2567
|
921 |
def _check(self, text, expected):
|
|
johannes@2567
|
922 |
encoded = wikiutil.anchor_name_from_text(text)
|
|
johannes@2567
|
923 |
assert expected == encoded
|
|
johannes@2567
|
924 |
|
|
tw@2771
|
925 |
class TestPageLinkMarkup:
|
|
tw@2771
|
926 |
def test_pagelinkmarkup(self):
|
|
tw@2771
|
927 |
tests = [
|
|
tw@2773
|
928 |
# pagename (no link text), expected markup
|
|
tw@2773
|
929 |
(('SomePage', ), 'SomePage'),
|
|
tw@2773
|
930 |
(('Somepage', ), '[[Somepage]]'),
|
|
tw@2773
|
931 |
(('somepage', ), '[[somepage]]'),
|
|
tw@2773
|
932 |
(('Some Page', ), '[[Some Page]]'),
|
|
tw@2773
|
933 |
# with link text
|
|
tw@2773
|
934 |
(('SomePage', 'SomePage'), 'SomePage'),
|
|
tw@2773
|
935 |
(('SomePage', 'some page'), '[[SomePage|some page]]'),
|
|
tw@2773
|
936 |
(('Some Page', 'Some Page'), '[[Some Page]]'),
|
|
tw@2773
|
937 |
(('Some Page', 'some Page'), '[[Some Page|some Page]]'),
|
|
tw@2771
|
938 |
]
|
|
tw@2773
|
939 |
for params, expected in tests:
|
|
tw@2773
|
940 |
yield self._check, params, expected
|
|
tw@2771
|
941 |
|
|
tw@2773
|
942 |
def _check(self, params, expected):
|
|
tw@2773
|
943 |
assert expected == wikiutil.pagelinkmarkup(*params)
|
|
tw@2771
|
944 |
|
|
tw@2704
|
945 |
class TestRelativeTools:
|
|
tw@2705
|
946 |
tests = [
|
|
tw@2705
|
947 |
# test expected output
|
|
tw@2705
|
948 |
# CHILD_PREFIX
|
|
tw@2705
|
949 |
(('MainPage', '/SubPage1'), 'MainPage/SubPage1'),
|
|
tw@2705
|
950 |
(('MainPage', '/SubPage1/SubPage2'), 'MainPage/SubPage1/SubPage2'),
|
|
tw@2705
|
951 |
(('MainPage/SubPage1', '/SubPage2/SubPage3'), 'MainPage/SubPage1/SubPage2/SubPage3'),
|
|
tw@2705
|
952 |
(('', '/OtherMainPage'), 'OtherMainPage'), # strange
|
|
tw@2705
|
953 |
# PARENT_PREFIX
|
|
tw@2705
|
954 |
(('MainPage/SubPage', '../SisterPage'), 'MainPage/SisterPage'),
|
|
tw@2705
|
955 |
(('MainPage/SubPage1/SubPage2', '../SisterPage'), 'MainPage/SubPage1/SisterPage'),
|
|
tw@2705
|
956 |
(('MainPage/SubPage1/SubPage2', '../../SisterPage'), 'MainPage/SisterPage'),
|
|
tw@2705
|
957 |
(('MainPage', '../SisterPage'), 'SisterPage'), # strange
|
|
tw@2705
|
958 |
]
|
|
tw@2704
|
959 |
def test_abs_pagename(self):
|
|
tw@2705
|
960 |
for (current_page, relative_page), absolute_page in self.tests:
|
|
tw@2705
|
961 |
yield self._check_abs_pagename, current_page, relative_page, absolute_page
|
|
tw@2704
|
962 |
|
|
tw@2705
|
963 |
def _check_abs_pagename(self, current_page, relative_page, absolute_page):
|
|
tw@2706
|
964 |
assert absolute_page == wikiutil.AbsPageName(current_page, relative_page)
|
|
tw@2705
|
965 |
|
|
tw@2705
|
966 |
def test_rel_pagename(self):
|
|
tw@2705
|
967 |
for (current_page, relative_page), absolute_page in self.tests:
|
|
tw@2705
|
968 |
yield self._check_rel_pagename, current_page, absolute_page, relative_page
|
|
tw@2705
|
969 |
|
|
tw@2705
|
970 |
def _check_rel_pagename(self, current_page, absolute_page, relative_page):
|
|
tw@2706
|
971 |
assert relative_page == wikiutil.RelPageName(current_page, absolute_page)
|
|
tw@2705
|
972 |
|
|
tw@2704
|
973 |
|
|
florian@4146
|
974 |
class TestNormalizePagename(object):
|
|
florian@4146
|
975 |
|
|
florian@4146
|
976 |
def testPageInvalidChars(self):
|
|
florian@4146
|
977 |
""" request: normalize pagename: remove invalid unicode chars
|
|
florian@4146
|
978 |
|
|
florian@4146
|
979 |
Assume the default setting
|
|
florian@4146
|
980 |
"""
|
|
florian@4146
|
981 |
test = u'\u0000\u202a\u202b\u202c\u202d\u202e'
|
|
florian@4146
|
982 |
expected = u''
|
|
florian@4199
|
983 |
result = wikiutil.normalize_pagename(test, self.request.cfg)
|
|
florian@4146
|
984 |
assert result == expected
|
|
florian@4146
|
985 |
|
|
florian@4146
|
986 |
def testNormalizeSlashes(self):
|
|
florian@4146
|
987 |
""" request: normalize pagename: normalize slashes """
|
|
florian@4146
|
988 |
cases = (
|
|
florian@4146
|
989 |
(u'/////', u''),
|
|
florian@4146
|
990 |
(u'/a', u'a'),
|
|
florian@4146
|
991 |
(u'a/', u'a'),
|
|
florian@4146
|
992 |
(u'a/////b/////c', u'a/b/c'),
|
|
florian@4146
|
993 |
(u'a b/////c d/////e f', u'a b/c d/e f'),
|
|
florian@4146
|
994 |
)
|
|
florian@4146
|
995 |
for test, expected in cases:
|
|
florian@4199
|
996 |
result = wikiutil.normalize_pagename(test, self.request.cfg)
|
|
florian@4146
|
997 |
assert result == expected
|
|
florian@4146
|
998 |
|
|
florian@4146
|
999 |
def testNormalizeWhitespace(self):
|
|
florian@4146
|
1000 |
""" request: normalize pagename: normalize whitespace """
|
|
florian@4146
|
1001 |
cases = (
|
|
florian@4146
|
1002 |
(u' ', u''),
|
|
florian@4146
|
1003 |
(u' a', u'a'),
|
|
florian@4146
|
1004 |
(u'a ', u'a'),
|
|
florian@4146
|
1005 |
(u'a b c', u'a b c'),
|
|
florian@4146
|
1006 |
(u'a b / c d / e f', u'a b/c d/e f'),
|
|
florian@4146
|
1007 |
# All 30 unicode spaces
|
|
florian@4146
|
1008 |
(config.chars_spaces, u''),
|
|
florian@4146
|
1009 |
)
|
|
florian@4146
|
1010 |
for test, expected in cases:
|
|
florian@4199
|
1011 |
result = wikiutil.normalize_pagename(test, self.request.cfg)
|
|
florian@4146
|
1012 |
assert result == expected
|
|
florian@4146
|
1013 |
|
|
florian@4146
|
1014 |
def testUnderscoreTestCase(self):
|
|
florian@4146
|
1015 |
""" request: normalize pagename: underscore convert to spaces and normalized
|
|
florian@4146
|
1016 |
|
|
florian@4146
|
1017 |
Underscores should convert to spaces, then spaces should be
|
|
florian@4146
|
1018 |
normalized, order is important!
|
|
florian@4146
|
1019 |
"""
|
|
florian@4146
|
1020 |
cases = (
|
|
florian@4146
|
1021 |
(u' ', u''),
|
|
florian@4146
|
1022 |
(u' a', u'a'),
|
|
florian@4146
|
1023 |
(u'a ', u'a'),
|
|
florian@4146
|
1024 |
(u'a b c', u'a b c'),
|
|
florian@4146
|
1025 |
(u'a b / c d / e f', u'a b/c d/e f'),
|
|
florian@4146
|
1026 |
)
|
|
florian@4146
|
1027 |
for test, expected in cases:
|
|
florian@4199
|
1028 |
result = wikiutil.normalize_pagename(test, self.request.cfg)
|
|
florian@4146
|
1029 |
assert result == expected
|
|
florian@4146
|
1030 |
|
|
florian@4146
|
1031 |
class TestGroupPages(object):
|
|
florian@4146
|
1032 |
|
|
florian@4146
|
1033 |
def testNormalizeGroupName(self):
|
|
florian@4146
|
1034 |
""" request: normalize pagename: restrict groups to alpha numeric Unicode
|
|
florian@4146
|
1035 |
|
|
florian@4146
|
1036 |
Spaces should normalize after invalid chars removed!
|
|
florian@4146
|
1037 |
"""
|
|
florian@4146
|
1038 |
cases = (
|
|
florian@4146
|
1039 |
# current acl chars
|
|
florian@4146
|
1040 |
(u'Name,:Group', u'NameGroup'),
|
|
florian@4146
|
1041 |
# remove than normalize spaces
|
|
florian@4146
|
1042 |
(u'Name ! @ # $ % ^ & * ( ) + Group', u'Name Group'),
|
|
florian@4146
|
1043 |
)
|
|
florian@4146
|
1044 |
for test, expected in cases:
|
|
florian@4146
|
1045 |
# validate we are testing valid group names
|
|
florian@4146
|
1046 |
if wikiutil.isGroupPage(test, self.request.cfg):
|
|
florian@4199
|
1047 |
result = wikiutil.normalize_pagename(test, self.request.cfg)
|
|
florian@4146
|
1048 |
assert result == expected
|
|
florian@4146
|
1049 |
|
|
tw@2448
|
1050 |
coverage_modules = ['MoinMoin.wikiutil']
|