annotate test/test_templating.py @ 8570:16e8bacb8f90

test: strftime formats; Runtime v Parsing error config.ini windows python strftime formats like "%2d" are not supported by windows python. So limit testing to non-win32 platform. In tests RuntimeError (not ParsingError) was returned for an invalid config.ini parse error with 3.12 and newer. Windows Python 3.11.4 returns RuntimeError as well. Changed guard that chooses RuntimeError to 3.11.4 or newer.
author John Rouillard <rouilj@ieee.org>
date Mon, 13 Apr 2026 13:28:58 -0400
parents 9c3ec0a5c7fc
children 670c0ed0becd
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
2158
a0cfea4e5956 start at templating tests
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
1 import unittest
7032
f529cca242dc flake8: fix imports,
John Rouillard <rouilj@ieee.org>
parents: 6995
diff changeset
2 import time
2158
a0cfea4e5956 start at templating tests
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
3
7582
978285986b2c fix: issue2551193 - Fix roundup for removal of cgi and cgitb ...
John Rouillard <rouilj@ieee.org>
parents: 7576
diff changeset
4 from roundup.anypy.cgi_ import FieldStorage, MiniFieldStorage
2158
a0cfea4e5956 start at templating tests
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
5 from roundup.cgi.templating import *
7866
9bbc1d951677 issue2551331 - Fix repeat first/last methods.
John Rouillard <rouilj@ieee.org>
parents: 7864
diff changeset
6 from roundup.cgi.ZTUtils.Iterator import Iterator
8285
2bf0c4e7795e fix: issue2551390 - Replace text input/calendar popup with native date input
John Rouillard <rouilj@ieee.org>
parents: 8281
diff changeset
7 from roundup.test import memorydb
5388
d26921b851c3 Python 3 preparation: make relative imports explicit.
Joseph Myers <jsm@polyomino.org.uk>
parents: 5378
diff changeset
8 from .test_actions import MockNull, true
6995
dc83ebff4c90 change test to use html normalizer when comparing html output.
John Rouillard <rouilj@ieee.org>
parents: 6992
diff changeset
9 from .html_norm import NormalizingHtmlParser
2158
a0cfea4e5956 start at templating tests
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
10
6096
c914b3d8362f If rst missing skip; initial attempt to test structuredtext.
John Rouillard <rouilj@ieee.org>
parents: 6095
diff changeset
11
c914b3d8362f If rst missing skip; initial attempt to test structuredtext.
John Rouillard <rouilj@ieee.org>
parents: 6095
diff changeset
12 import pytest
c914b3d8362f If rst missing skip; initial attempt to test structuredtext.
John Rouillard <rouilj@ieee.org>
parents: 6095
diff changeset
13 from .pytest_patcher import mark_class
c914b3d8362f If rst missing skip; initial attempt to test structuredtext.
John Rouillard <rouilj@ieee.org>
parents: 6095
diff changeset
14
7576
7bdf9c0f74b9 Handle error id markdown2 not defined.
John Rouillard <rouilj@ieee.org>
parents: 7561
diff changeset
15 try:
7bdf9c0f74b9 Handle error id markdown2 not defined.
John Rouillard <rouilj@ieee.org>
parents: 7561
diff changeset
16 from markdown2 import __version_info__ as md2__version_info__
7bdf9c0f74b9 Handle error id markdown2 not defined.
John Rouillard <rouilj@ieee.org>
parents: 7561
diff changeset
17 except ImportError:
7bdf9c0f74b9 Handle error id markdown2 not defined.
John Rouillard <rouilj@ieee.org>
parents: 7561
diff changeset
18 md2__version_info__ = (0,0,0)
7561
91725f12b239 Support markdown2 2.4.10, 2.4.8- and exclude 2.4.9
John Rouillard <rouilj@ieee.org>
parents: 7032
diff changeset
19
6099
55c56ceacb8e escape HTML tags in markdown content
Christof Meerwald <cmeerw@cmeerw.org>
parents: 6098
diff changeset
20 if ReStructuredText:
6096
c914b3d8362f If rst missing skip; initial attempt to test structuredtext.
John Rouillard <rouilj@ieee.org>
parents: 6095
diff changeset
21 skip_rst = lambda func, *args, **kwargs: func
6099
55c56ceacb8e escape HTML tags in markdown content
Christof Meerwald <cmeerw@cmeerw.org>
parents: 6098
diff changeset
22 else:
6096
c914b3d8362f If rst missing skip; initial attempt to test structuredtext.
John Rouillard <rouilj@ieee.org>
parents: 6095
diff changeset
23 skip_rst = mark_class(pytest.mark.skip(
c914b3d8362f If rst missing skip; initial attempt to test structuredtext.
John Rouillard <rouilj@ieee.org>
parents: 6095
diff changeset
24 reason='ReStructuredText not available'))
c914b3d8362f If rst missing skip; initial attempt to test structuredtext.
John Rouillard <rouilj@ieee.org>
parents: 6095
diff changeset
25
6099
55c56ceacb8e escape HTML tags in markdown content
Christof Meerwald <cmeerw@cmeerw.org>
parents: 6098
diff changeset
26 import roundup.cgi.templating
55c56ceacb8e escape HTML tags in markdown content
Christof Meerwald <cmeerw@cmeerw.org>
parents: 6098
diff changeset
27 if roundup.cgi.templating._import_mistune():
55c56ceacb8e escape HTML tags in markdown content
Christof Meerwald <cmeerw@cmeerw.org>
parents: 6098
diff changeset
28 skip_mistune = lambda func, *args, **kwargs: func
55c56ceacb8e escape HTML tags in markdown content
Christof Meerwald <cmeerw@cmeerw.org>
parents: 6098
diff changeset
29 else:
55c56ceacb8e escape HTML tags in markdown content
Christof Meerwald <cmeerw@cmeerw.org>
parents: 6098
diff changeset
30 skip_mistune = mark_class(pytest.mark.skip(
55c56ceacb8e escape HTML tags in markdown content
Christof Meerwald <cmeerw@cmeerw.org>
parents: 6098
diff changeset
31 reason='mistune not available'))
6095
3ada6a3f48e1 fixed ReStructuredText encoding with Python 3
Christof Meerwald <cmeerw@cmeerw.org>
parents: 6059
diff changeset
32
6099
55c56ceacb8e escape HTML tags in markdown content
Christof Meerwald <cmeerw@cmeerw.org>
parents: 6098
diff changeset
33 if roundup.cgi.templating._import_markdown2():
55c56ceacb8e escape HTML tags in markdown content
Christof Meerwald <cmeerw@cmeerw.org>
parents: 6098
diff changeset
34 skip_markdown2 = lambda func, *args, **kwargs: func
55c56ceacb8e escape HTML tags in markdown content
Christof Meerwald <cmeerw@cmeerw.org>
parents: 6098
diff changeset
35 else:
55c56ceacb8e escape HTML tags in markdown content
Christof Meerwald <cmeerw@cmeerw.org>
parents: 6098
diff changeset
36 skip_markdown2 = mark_class(pytest.mark.skip(
55c56ceacb8e escape HTML tags in markdown content
Christof Meerwald <cmeerw@cmeerw.org>
parents: 6098
diff changeset
37 reason='markdown2 not available'))
55c56ceacb8e escape HTML tags in markdown content
Christof Meerwald <cmeerw@cmeerw.org>
parents: 6098
diff changeset
38
55c56ceacb8e escape HTML tags in markdown content
Christof Meerwald <cmeerw@cmeerw.org>
parents: 6098
diff changeset
39 if roundup.cgi.templating._import_markdown():
6097
90a1470edbea added markdown rendering support using either markdown2 or markdown
Christof Meerwald <cmeerw@cmeerw.org>
parents: 6096
diff changeset
40 skip_markdown = lambda func, *args, **kwargs: func
6099
55c56ceacb8e escape HTML tags in markdown content
Christof Meerwald <cmeerw@cmeerw.org>
parents: 6098
diff changeset
41 else:
55c56ceacb8e escape HTML tags in markdown content
Christof Meerwald <cmeerw@cmeerw.org>
parents: 6098
diff changeset
42 skip_markdown = mark_class(pytest.mark.skip(
55c56ceacb8e escape HTML tags in markdown content
Christof Meerwald <cmeerw@cmeerw.org>
parents: 6098
diff changeset
43 reason='markdown not available'))
6097
90a1470edbea added markdown rendering support using either markdown2 or markdown
Christof Meerwald <cmeerw@cmeerw.org>
parents: 6096
diff changeset
44
6095
3ada6a3f48e1 fixed ReStructuredText encoding with Python 3
Christof Meerwald <cmeerw@cmeerw.org>
parents: 6059
diff changeset
45 from roundup.anypy.strings import u2s, s2u
3ada6a3f48e1 fixed ReStructuredText encoding with Python 3
Christof Meerwald <cmeerw@cmeerw.org>
parents: 6059
diff changeset
46
6826
28b906a237d8 Fix anti_csrf_nonce test
John Rouillard <rouilj@ieee.org>
parents: 6817
diff changeset
47 from roundup.backends.sessions_common import SessionCommon
28b906a237d8 Fix anti_csrf_nonce test
John Rouillard <rouilj@ieee.org>
parents: 6817
diff changeset
48
8300
b99e76e76496 Make native date and number elements configurable
Ralf Schlatterbeck <rsc@runtux.com>
parents: 8289
diff changeset
49 class MockConfig(dict):
b99e76e76496 Make native date and number elements configurable
Ralf Schlatterbeck <rsc@runtux.com>
parents: 8289
diff changeset
50 def __getattr__(self, name):
b99e76e76496 Make native date and number elements configurable
Ralf Schlatterbeck <rsc@runtux.com>
parents: 8289
diff changeset
51 try:
b99e76e76496 Make native date and number elements configurable
Ralf Schlatterbeck <rsc@runtux.com>
parents: 8289
diff changeset
52 return self[name]
b99e76e76496 Make native date and number elements configurable
Ralf Schlatterbeck <rsc@runtux.com>
parents: 8289
diff changeset
53 except KeyError as err:
b99e76e76496 Make native date and number elements configurable
Ralf Schlatterbeck <rsc@runtux.com>
parents: 8289
diff changeset
54 raise AttributeError(err)
b99e76e76496 Make native date and number elements configurable
Ralf Schlatterbeck <rsc@runtux.com>
parents: 8289
diff changeset
55
6826
28b906a237d8 Fix anti_csrf_nonce test
John Rouillard <rouilj@ieee.org>
parents: 6817
diff changeset
56 class MockDatabase(MockNull, SessionCommon):
2158
a0cfea4e5956 start at templating tests
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
57 def getclass(self, name):
6337
316c2c32dace Make testing mock smarter. Make getclass fail for invalid classes.
John Rouillard <rouilj@ieee.org>
parents: 6336
diff changeset
58 # limit class names
6404
e29d5f4e0af4 issue2551132 - Setting form value in query string --- issues
John Rouillard <rouilj@ieee.org>
parents: 6377
diff changeset
59 if name not in [ 'issue', 'user', 'status' ]:
6337
316c2c32dace Make testing mock smarter. Make getclass fail for invalid classes.
John Rouillard <rouilj@ieee.org>
parents: 6336
diff changeset
60 raise KeyError('There is no class called "%s"' % name)
6336
6f89cdc7c938 issue2551108 - fix markdown formatted designator links
John Rouillard <rouilj@ieee.org>
parents: 6299
diff changeset
61 # Class returned must have hasnode(id) method that returns true
6f89cdc7c938 issue2551108 - fix markdown formatted designator links
John Rouillard <rouilj@ieee.org>
parents: 6299
diff changeset
62 # otherwise designators like 'issue1' can't be hyperlinked.
6338
a70a0c138dd9 Test hyperlinked method on designators
John Rouillard <rouilj@ieee.org>
parents: 6337
diff changeset
63 self.classes[name].hasnode = lambda id: True if int(id) < 10 else False
2158
a0cfea4e5956 start at templating tests
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
64 return self.classes[name]
a0cfea4e5956 start at templating tests
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
65
5201
a9ace22e0a2f issue 2550690 - Adding anti-csrf measures to roundup following
John Rouillard <rouilj@ieee.org>
parents: 5190
diff changeset
66 # setup for csrf testing of otks database api
a9ace22e0a2f issue 2550690 - Adding anti-csrf measures to roundup following
John Rouillard <rouilj@ieee.org>
parents: 5190
diff changeset
67 storage = {}
a9ace22e0a2f issue 2550690 - Adding anti-csrf measures to roundup following
John Rouillard <rouilj@ieee.org>
parents: 5190
diff changeset
68 def set(self, key, **props):
a9ace22e0a2f issue 2550690 - Adding anti-csrf measures to roundup following
John Rouillard <rouilj@ieee.org>
parents: 5190
diff changeset
69 MockDatabase.storage[key] = {}
6817
38b73f7495f8 fix mock datbase
John Rouillard <rouilj@ieee.org>
parents: 6689
diff changeset
70 if '__timestamp' not in props:
38b73f7495f8 fix mock datbase
John Rouillard <rouilj@ieee.org>
parents: 6689
diff changeset
71 props['__timestamp'] = time.time() - 7*24*3600
5201
a9ace22e0a2f issue 2550690 - Adding anti-csrf measures to roundup following
John Rouillard <rouilj@ieee.org>
parents: 5190
diff changeset
72 MockDatabase.storage[key].update(props)
a9ace22e0a2f issue 2550690 - Adding anti-csrf measures to roundup following
John Rouillard <rouilj@ieee.org>
parents: 5190
diff changeset
73
a9ace22e0a2f issue 2550690 - Adding anti-csrf measures to roundup following
John Rouillard <rouilj@ieee.org>
parents: 5190
diff changeset
74 def get(self, key, field, default=None):
a9ace22e0a2f issue 2550690 - Adding anti-csrf measures to roundup following
John Rouillard <rouilj@ieee.org>
parents: 5190
diff changeset
75 if key not in MockDatabase.storage:
a9ace22e0a2f issue 2550690 - Adding anti-csrf measures to roundup following
John Rouillard <rouilj@ieee.org>
parents: 5190
diff changeset
76 return default
a9ace22e0a2f issue 2550690 - Adding anti-csrf measures to roundup following
John Rouillard <rouilj@ieee.org>
parents: 5190
diff changeset
77 return MockDatabase.storage[key][field]
a9ace22e0a2f issue 2550690 - Adding anti-csrf measures to roundup following
John Rouillard <rouilj@ieee.org>
parents: 5190
diff changeset
78
6817
38b73f7495f8 fix mock datbase
John Rouillard <rouilj@ieee.org>
parents: 6689
diff changeset
79 def getall(self, key):
38b73f7495f8 fix mock datbase
John Rouillard <rouilj@ieee.org>
parents: 6689
diff changeset
80 if key not in MockDatabase.storage:
38b73f7495f8 fix mock datbase
John Rouillard <rouilj@ieee.org>
parents: 6689
diff changeset
81 return default
38b73f7495f8 fix mock datbase
John Rouillard <rouilj@ieee.org>
parents: 6689
diff changeset
82 return MockDatabase.storage[key]
38b73f7495f8 fix mock datbase
John Rouillard <rouilj@ieee.org>
parents: 6689
diff changeset
83
5201
a9ace22e0a2f issue 2550690 - Adding anti-csrf measures to roundup following
John Rouillard <rouilj@ieee.org>
parents: 5190
diff changeset
84 def exists(self,key):
a9ace22e0a2f issue 2550690 - Adding anti-csrf measures to roundup following
John Rouillard <rouilj@ieee.org>
parents: 5190
diff changeset
85 return key in MockDatabase.storage
a9ace22e0a2f issue 2550690 - Adding anti-csrf measures to roundup following
John Rouillard <rouilj@ieee.org>
parents: 5190
diff changeset
86
a9ace22e0a2f issue 2550690 - Adding anti-csrf measures to roundup following
John Rouillard <rouilj@ieee.org>
parents: 5190
diff changeset
87 def getOTKManager(self):
a9ace22e0a2f issue 2550690 - Adding anti-csrf measures to roundup following
John Rouillard <rouilj@ieee.org>
parents: 5190
diff changeset
88 return MockDatabase()
a9ace22e0a2f issue 2550690 - Adding anti-csrf measures to roundup following
John Rouillard <rouilj@ieee.org>
parents: 5190
diff changeset
89
6817
38b73f7495f8 fix mock datbase
John Rouillard <rouilj@ieee.org>
parents: 6689
diff changeset
90 def lifetime(self, seconds):
38b73f7495f8 fix mock datbase
John Rouillard <rouilj@ieee.org>
parents: 6689
diff changeset
91 return time.time() - 7*24*3600 + seconds
38b73f7495f8 fix mock datbase
John Rouillard <rouilj@ieee.org>
parents: 6689
diff changeset
92
2158
a0cfea4e5956 start at templating tests
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
93 class TemplatingTestCase(unittest.TestCase):
a0cfea4e5956 start at templating tests
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
94 def setUp(self):
a0cfea4e5956 start at templating tests
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
95 self.form = FieldStorage()
a0cfea4e5956 start at templating tests
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
96 self.client = MockNull()
3972
eee76dd4a09f 'Make a Copy' failed with more than one person in nosy list [SF#1906147]
Richard Jones <richard@users.sourceforge.net>
parents: 3587
diff changeset
97 self.client.db = db = MockDatabase()
eee76dd4a09f 'Make a Copy' failed with more than one person in nosy list [SF#1906147]
Richard Jones <richard@users.sourceforge.net>
parents: 3587
diff changeset
98 db.security.hasPermission = lambda *args, **kw: True
2158
a0cfea4e5956 start at templating tests
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
99 self.client.form = self.form
a0cfea4e5956 start at templating tests
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
100
5201
a9ace22e0a2f issue 2550690 - Adding anti-csrf measures to roundup following
John Rouillard <rouilj@ieee.org>
parents: 5190
diff changeset
101 # add client props for testing anti_csrf_nonce
a9ace22e0a2f issue 2550690 - Adding anti-csrf measures to roundup following
John Rouillard <rouilj@ieee.org>
parents: 5190
diff changeset
102 self.client.session_api = MockNull(_sid="1234567890")
a9ace22e0a2f issue 2550690 - Adding anti-csrf measures to roundup following
John Rouillard <rouilj@ieee.org>
parents: 5190
diff changeset
103 self.client.db.getuid = lambda : 10
8300
b99e76e76496 Make native date and number elements configurable
Ralf Schlatterbeck <rsc@runtux.com>
parents: 8289
diff changeset
104 self.client.db.config = MockConfig (
b99e76e76496 Make native date and number elements configurable
Ralf Schlatterbeck <rsc@runtux.com>
parents: 8289
diff changeset
105 {'WEB_CSRF_TOKEN_LIFETIME': 10,
b99e76e76496 Make native date and number elements configurable
Ralf Schlatterbeck <rsc@runtux.com>
parents: 8289
diff changeset
106 'MARKDOWN_BREAK_ON_NEWLINE': False })
5201
a9ace22e0a2f issue 2550690 - Adding anti-csrf measures to roundup following
John Rouillard <rouilj@ieee.org>
parents: 5190
diff changeset
107
2158
a0cfea4e5956 start at templating tests
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
108 class HTMLDatabaseTestCase(TemplatingTestCase):
a0cfea4e5956 start at templating tests
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
109 def test_HTMLDatabase___getitem__(self):
a0cfea4e5956 start at templating tests
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
110 db = HTMLDatabase(self.client)
5649
f8893e1cde0d assert_ is depricated. Replacing with assertTrue to reduce logs in travisci.
John Rouillard <rouilj@ieee.org>
parents: 5488
diff changeset
111 self.assertTrue(isinstance(db['issue'], HTMLClass))
2716
305d346f8f3b disable invalid assertions
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2158
diff changeset
112 # following assertions are invalid
305d346f8f3b disable invalid assertions
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2158
diff changeset
113 # since roundup/cgi/templating.py r1.173.
305d346f8f3b disable invalid assertions
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2158
diff changeset
114 # HTMLItem is function, not class,
305d346f8f3b disable invalid assertions
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2158
diff changeset
115 # but HTMLUserClass and HTMLUser are passed on.
305d346f8f3b disable invalid assertions
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2158
diff changeset
116 # these classes are no more. they have ceased to be.
5649
f8893e1cde0d assert_ is depricated. Replacing with assertTrue to reduce logs in travisci.
John Rouillard <rouilj@ieee.org>
parents: 5488
diff changeset
117 #self.assertTrue(isinstance(db['user'], HTMLUserClass))
f8893e1cde0d assert_ is depricated. Replacing with assertTrue to reduce logs in travisci.
John Rouillard <rouilj@ieee.org>
parents: 5488
diff changeset
118 #self.assertTrue(isinstance(db['issue1'], HTMLItem))
f8893e1cde0d assert_ is depricated. Replacing with assertTrue to reduce logs in travisci.
John Rouillard <rouilj@ieee.org>
parents: 5488
diff changeset
119 #self.assertTrue(isinstance(db['user1'], HTMLUser))
2158
a0cfea4e5956 start at templating tests
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
120
a0cfea4e5956 start at templating tests
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
121 def test_HTMLDatabase___getattr__(self):
a0cfea4e5956 start at templating tests
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
122 db = HTMLDatabase(self.client)
5649
f8893e1cde0d assert_ is depricated. Replacing with assertTrue to reduce logs in travisci.
John Rouillard <rouilj@ieee.org>
parents: 5488
diff changeset
123 self.assertTrue(isinstance(db.issue, HTMLClass))
2716
305d346f8f3b disable invalid assertions
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2158
diff changeset
124 # see comment in test_HTMLDatabase___getitem__
5649
f8893e1cde0d assert_ is depricated. Replacing with assertTrue to reduce logs in travisci.
John Rouillard <rouilj@ieee.org>
parents: 5488
diff changeset
125 #self.assertTrue(isinstance(db.user, HTMLUserClass))
f8893e1cde0d assert_ is depricated. Replacing with assertTrue to reduce logs in travisci.
John Rouillard <rouilj@ieee.org>
parents: 5488
diff changeset
126 #self.assertTrue(isinstance(db.issue1, HTMLItem))
f8893e1cde0d assert_ is depricated. Replacing with assertTrue to reduce logs in travisci.
John Rouillard <rouilj@ieee.org>
parents: 5488
diff changeset
127 #self.assertTrue(isinstance(db.user1, HTMLUser))
2158
a0cfea4e5956 start at templating tests
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
128
a0cfea4e5956 start at templating tests
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
129 def test_HTMLDatabase_classes(self):
a0cfea4e5956 start at templating tests
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
130 db = HTMLDatabase(self.client)
a0cfea4e5956 start at templating tests
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
131 db._db.classes = {'issue':MockNull(), 'user': MockNull()}
a0cfea4e5956 start at templating tests
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
132 db.classes()
a0cfea4e5956 start at templating tests
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
133
6689
994893cf3e1a Fix traceback if an order attribute is None
Ralf Schlatterbeck <rsc@runtux.com>
parents: 6645
diff changeset
134 def test_HTMLDatabase_list(self):
994893cf3e1a Fix traceback if an order attribute is None
Ralf Schlatterbeck <rsc@runtux.com>
parents: 6645
diff changeset
135 # The list method used to produce a traceback when a None value
994893cf3e1a Fix traceback if an order attribute is None
Ralf Schlatterbeck <rsc@runtux.com>
parents: 6645
diff changeset
136 # for an order attribute of a class was encountered. This
994893cf3e1a Fix traceback if an order attribute is None
Ralf Schlatterbeck <rsc@runtux.com>
parents: 6645
diff changeset
137 # happens when the 'get' of the order attribute for a numeric
994893cf3e1a Fix traceback if an order attribute is None
Ralf Schlatterbeck <rsc@runtux.com>
parents: 6645
diff changeset
138 # id produced a None value. So we put '23' as a key into the
994893cf3e1a Fix traceback if an order attribute is None
Ralf Schlatterbeck <rsc@runtux.com>
parents: 6645
diff changeset
139 # list and set things up that a None value is returned on 'get'.
994893cf3e1a Fix traceback if an order attribute is None
Ralf Schlatterbeck <rsc@runtux.com>
parents: 6645
diff changeset
140
994893cf3e1a Fix traceback if an order attribute is None
Ralf Schlatterbeck <rsc@runtux.com>
parents: 6645
diff changeset
141 # This keeps db.issue static, otherwise it changes for each call
994893cf3e1a Fix traceback if an order attribute is None
Ralf Schlatterbeck <rsc@runtux.com>
parents: 6645
diff changeset
142 db = MockNull(issue = HTMLDatabase(self.client).issue)
994893cf3e1a Fix traceback if an order attribute is None
Ralf Schlatterbeck <rsc@runtux.com>
parents: 6645
diff changeset
143 db.issue._klass.list = lambda : ['23', 'a', 'b']
994893cf3e1a Fix traceback if an order attribute is None
Ralf Schlatterbeck <rsc@runtux.com>
parents: 6645
diff changeset
144 # Make db.getclass return something that has a sensible 'get' method
8305
a81a3cd067fa Generate savepoint only if necessary
Ralf Schlatterbeck <rsc@runtux.com>
parents: 8300
diff changeset
145 def get(x, y, allow_abort=True):
a81a3cd067fa Generate savepoint only if necessary
Ralf Schlatterbeck <rsc@runtux.com>
parents: 8300
diff changeset
146 return None
a81a3cd067fa Generate savepoint only if necessary
Ralf Schlatterbeck <rsc@runtux.com>
parents: 8300
diff changeset
147 mock = MockNull(get = get)
6689
994893cf3e1a Fix traceback if an order attribute is None
Ralf Schlatterbeck <rsc@runtux.com>
parents: 6645
diff changeset
148 db.issue._db.getclass = lambda x : mock
994893cf3e1a Fix traceback if an order attribute is None
Ralf Schlatterbeck <rsc@runtux.com>
parents: 6645
diff changeset
149 l = db.issue.list()
994893cf3e1a Fix traceback if an order attribute is None
Ralf Schlatterbeck <rsc@runtux.com>
parents: 6645
diff changeset
150
2158
a0cfea4e5956 start at templating tests
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
151 class FunctionsTestCase(TemplatingTestCase):
a0cfea4e5956 start at templating tests
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
152 def test_lookupIds(self):
a0cfea4e5956 start at templating tests
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
153 db = HTMLDatabase(self.client)
a0cfea4e5956 start at templating tests
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
154 def lookup(key):
a0cfea4e5956 start at templating tests
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
155 if key == 'ok':
a0cfea4e5956 start at templating tests
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
156 return '1'
a0cfea4e5956 start at templating tests
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
157 if key == 'fail':
5378
35ea9b1efc14 Python 3 preparation: "raise" syntax.
Joseph Myers <jsm@polyomino.org.uk>
parents: 5376
diff changeset
158 raise KeyError('fail')
7936
a9b136565838 feat: issue1525113 - notation to filter by logged-in user
John Rouillard <rouilj@ieee.org>
parents: 7923
diff changeset
159 if key == '@current_user':
a9b136565838 feat: issue1525113 - notation to filter by logged-in user
John Rouillard <rouilj@ieee.org>
parents: 7923
diff changeset
160 raise KeyError('@current_user')
3587
2372597ebbdb *** empty log message ***
Richard Jones <richard@users.sourceforge.net>
parents: 2716
diff changeset
161 return key
2158
a0cfea4e5956 start at templating tests
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
162 db._db.classes = {'issue': MockNull(lookup=lookup)}
a0cfea4e5956 start at templating tests
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
163 prop = MockNull(classname='issue')
a0cfea4e5956 start at templating tests
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
164 self.assertEqual(lookupIds(db._db, prop, ['1','2']), ['1','2'])
a0cfea4e5956 start at templating tests
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
165 self.assertEqual(lookupIds(db._db, prop, ['ok','2']), ['1','2'])
a0cfea4e5956 start at templating tests
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
166 self.assertEqual(lookupIds(db._db, prop, ['ok', 'fail'], 1),
a0cfea4e5956 start at templating tests
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
167 ['1', 'fail'])
a0cfea4e5956 start at templating tests
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
168 self.assertEqual(lookupIds(db._db, prop, ['ok', 'fail']), ['1'])
7936
a9b136565838 feat: issue1525113 - notation to filter by logged-in user
John Rouillard <rouilj@ieee.org>
parents: 7923
diff changeset
169 self.assertEqual(lookupIds(db._db, prop, ['ok', '@current_user']),
a9b136565838 feat: issue1525113 - notation to filter by logged-in user
John Rouillard <rouilj@ieee.org>
parents: 7923
diff changeset
170 ['1'])
2158
a0cfea4e5956 start at templating tests
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
171
a0cfea4e5956 start at templating tests
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
172 def test_lookupKeys(self):
a0cfea4e5956 start at templating tests
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
173 db = HTMLDatabase(self.client)
8305
a81a3cd067fa Generate savepoint only if necessary
Ralf Schlatterbeck <rsc@runtux.com>
parents: 8300
diff changeset
174 def get(entry, key, allow_abort=True):
2158
a0cfea4e5956 start at templating tests
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
175 return {'1': 'green', '2': 'eggs'}.get(entry, entry)
a0cfea4e5956 start at templating tests
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
176 shrubbery = MockNull(get=get)
a0cfea4e5956 start at templating tests
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
177 db._db.classes = {'shrubbery': shrubbery}
a0cfea4e5956 start at templating tests
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
178 self.assertEqual(lookupKeys(shrubbery, 'spam', ['1','2']),
a0cfea4e5956 start at templating tests
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
179 ['green', 'eggs'])
a0cfea4e5956 start at templating tests
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
180 self.assertEqual(lookupKeys(shrubbery, 'spam', ['ok','2']), ['ok',
a0cfea4e5956 start at templating tests
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
181 'eggs'])
a0cfea4e5956 start at templating tests
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
182
3972
eee76dd4a09f 'Make a Copy' failed with more than one person in nosy list [SF#1906147]
Richard Jones <richard@users.sourceforge.net>
parents: 3587
diff changeset
183 class HTMLClassTestCase(TemplatingTestCase) :
eee76dd4a09f 'Make a Copy' failed with more than one person in nosy list [SF#1906147]
Richard Jones <richard@users.sourceforge.net>
parents: 3587
diff changeset
184
4040
b6a2251394dd Make cgi.templating more fault-tolerant towards invalid requests.
Stefan Seefeld <stefan@seefeld.name>
parents: 4011
diff changeset
185 def test_link(self):
b6a2251394dd Make cgi.templating more fault-tolerant towards invalid requests.
Stefan Seefeld <stefan@seefeld.name>
parents: 4011
diff changeset
186 """Make sure lookup of a Link property works even in the
b6a2251394dd Make cgi.templating more fault-tolerant towards invalid requests.
Stefan Seefeld <stefan@seefeld.name>
parents: 4011
diff changeset
187 presence of multiple values in the form."""
b6a2251394dd Make cgi.templating more fault-tolerant towards invalid requests.
Stefan Seefeld <stefan@seefeld.name>
parents: 4011
diff changeset
188 def lookup(key) :
b6a2251394dd Make cgi.templating more fault-tolerant towards invalid requests.
Stefan Seefeld <stefan@seefeld.name>
parents: 4011
diff changeset
189 self.assertEqual(key, key.strip())
b6a2251394dd Make cgi.templating more fault-tolerant towards invalid requests.
Stefan Seefeld <stefan@seefeld.name>
parents: 4011
diff changeset
190 return "Status%s"%key
6404
e29d5f4e0af4 issue2551132 - Setting form value in query string --- issues
John Rouillard <rouilj@ieee.org>
parents: 6377
diff changeset
191 self.form.list.append(MiniFieldStorage("issue@status", "1"))
e29d5f4e0af4 issue2551132 - Setting form value in query string --- issues
John Rouillard <rouilj@ieee.org>
parents: 6377
diff changeset
192 self.form.list.append(MiniFieldStorage("issue@status", "2"))
4040
b6a2251394dd Make cgi.templating more fault-tolerant towards invalid requests.
Stefan Seefeld <stefan@seefeld.name>
parents: 4011
diff changeset
193 status = hyperdb.Link("status")
b6a2251394dd Make cgi.templating more fault-tolerant towards invalid requests.
Stefan Seefeld <stefan@seefeld.name>
parents: 4011
diff changeset
194 self.client.db.classes = dict \
b6a2251394dd Make cgi.templating more fault-tolerant towards invalid requests.
Stefan Seefeld <stefan@seefeld.name>
parents: 4011
diff changeset
195 ( issue = MockNull(getprops = lambda : dict(status = status))
b6a2251394dd Make cgi.templating more fault-tolerant towards invalid requests.
Stefan Seefeld <stefan@seefeld.name>
parents: 4011
diff changeset
196 , status = MockNull(get = lambda id, name : id, lookup = lookup)
b6a2251394dd Make cgi.templating more fault-tolerant towards invalid requests.
Stefan Seefeld <stefan@seefeld.name>
parents: 4011
diff changeset
197 )
6404
e29d5f4e0af4 issue2551132 - Setting form value in query string --- issues
John Rouillard <rouilj@ieee.org>
parents: 6377
diff changeset
198 self.client.form = self.form
4040
b6a2251394dd Make cgi.templating more fault-tolerant towards invalid requests.
Stefan Seefeld <stefan@seefeld.name>
parents: 4011
diff changeset
199 cls = HTMLClass(self.client, "issue")
6404
e29d5f4e0af4 issue2551132 - Setting form value in query string --- issues
John Rouillard <rouilj@ieee.org>
parents: 6377
diff changeset
200
e29d5f4e0af4 issue2551132 - Setting form value in query string --- issues
John Rouillard <rouilj@ieee.org>
parents: 6377
diff changeset
201 s = cls["status"]
e29d5f4e0af4 issue2551132 - Setting form value in query string --- issues
John Rouillard <rouilj@ieee.org>
parents: 6377
diff changeset
202 self.assertEqual(s._value, '1')
e29d5f4e0af4 issue2551132 - Setting form value in query string --- issues
John Rouillard <rouilj@ieee.org>
parents: 6377
diff changeset
203
e29d5f4e0af4 issue2551132 - Setting form value in query string --- issues
John Rouillard <rouilj@ieee.org>
parents: 6377
diff changeset
204 def test_link_default(self):
e29d5f4e0af4 issue2551132 - Setting form value in query string --- issues
John Rouillard <rouilj@ieee.org>
parents: 6377
diff changeset
205 """Make sure default value for link is returned
e29d5f4e0af4 issue2551132 - Setting form value in query string --- issues
John Rouillard <rouilj@ieee.org>
parents: 6377
diff changeset
206 if new item and no value in form."""
e29d5f4e0af4 issue2551132 - Setting form value in query string --- issues
John Rouillard <rouilj@ieee.org>
parents: 6377
diff changeset
207 def lookup(key) :
e29d5f4e0af4 issue2551132 - Setting form value in query string --- issues
John Rouillard <rouilj@ieee.org>
parents: 6377
diff changeset
208 self.assertEqual(key, key.strip())
e29d5f4e0af4 issue2551132 - Setting form value in query string --- issues
John Rouillard <rouilj@ieee.org>
parents: 6377
diff changeset
209 return "Status%s"%key
e29d5f4e0af4 issue2551132 - Setting form value in query string --- issues
John Rouillard <rouilj@ieee.org>
parents: 6377
diff changeset
210 status = hyperdb.Link("status")
e29d5f4e0af4 issue2551132 - Setting form value in query string --- issues
John Rouillard <rouilj@ieee.org>
parents: 6377
diff changeset
211 # set default_value
e29d5f4e0af4 issue2551132 - Setting form value in query string --- issues
John Rouillard <rouilj@ieee.org>
parents: 6377
diff changeset
212 status.__dict__['_Type__default_value'] = "4"
e29d5f4e0af4 issue2551132 - Setting form value in query string --- issues
John Rouillard <rouilj@ieee.org>
parents: 6377
diff changeset
213
e29d5f4e0af4 issue2551132 - Setting form value in query string --- issues
John Rouillard <rouilj@ieee.org>
parents: 6377
diff changeset
214 self.client.db.classes = dict \
e29d5f4e0af4 issue2551132 - Setting form value in query string --- issues
John Rouillard <rouilj@ieee.org>
parents: 6377
diff changeset
215 ( issue = MockNull(getprops = lambda : dict(status = status))
e29d5f4e0af4 issue2551132 - Setting form value in query string --- issues
John Rouillard <rouilj@ieee.org>
parents: 6377
diff changeset
216 , status = MockNull(get = lambda id, name : id, lookup = lookup, get_default_value = lambda: 4)
e29d5f4e0af4 issue2551132 - Setting form value in query string --- issues
John Rouillard <rouilj@ieee.org>
parents: 6377
diff changeset
217 )
e29d5f4e0af4 issue2551132 - Setting form value in query string --- issues
John Rouillard <rouilj@ieee.org>
parents: 6377
diff changeset
218 self.client.form = self.form
e29d5f4e0af4 issue2551132 - Setting form value in query string --- issues
John Rouillard <rouilj@ieee.org>
parents: 6377
diff changeset
219
e29d5f4e0af4 issue2551132 - Setting form value in query string --- issues
John Rouillard <rouilj@ieee.org>
parents: 6377
diff changeset
220 cls = HTMLClass(self.client, "issue")
e29d5f4e0af4 issue2551132 - Setting form value in query string --- issues
John Rouillard <rouilj@ieee.org>
parents: 6377
diff changeset
221 s = cls["status"]
e29d5f4e0af4 issue2551132 - Setting form value in query string --- issues
John Rouillard <rouilj@ieee.org>
parents: 6377
diff changeset
222 self.assertEqual(s._value, '4')
e29d5f4e0af4 issue2551132 - Setting form value in query string --- issues
John Rouillard <rouilj@ieee.org>
parents: 6377
diff changeset
223
e29d5f4e0af4 issue2551132 - Setting form value in query string --- issues
John Rouillard <rouilj@ieee.org>
parents: 6377
diff changeset
224 def test_link_with_value_and_default(self):
e29d5f4e0af4 issue2551132 - Setting form value in query string --- issues
John Rouillard <rouilj@ieee.org>
parents: 6377
diff changeset
225 """Make sure default value is not used if there
e29d5f4e0af4 issue2551132 - Setting form value in query string --- issues
John Rouillard <rouilj@ieee.org>
parents: 6377
diff changeset
226 is a value in the form."""
e29d5f4e0af4 issue2551132 - Setting form value in query string --- issues
John Rouillard <rouilj@ieee.org>
parents: 6377
diff changeset
227 def lookup(key) :
e29d5f4e0af4 issue2551132 - Setting form value in query string --- issues
John Rouillard <rouilj@ieee.org>
parents: 6377
diff changeset
228 self.assertEqual(key, key.strip())
e29d5f4e0af4 issue2551132 - Setting form value in query string --- issues
John Rouillard <rouilj@ieee.org>
parents: 6377
diff changeset
229 return "Status%s"%key
e29d5f4e0af4 issue2551132 - Setting form value in query string --- issues
John Rouillard <rouilj@ieee.org>
parents: 6377
diff changeset
230 self.form.list.append(MiniFieldStorage("issue@status", "2"))
e29d5f4e0af4 issue2551132 - Setting form value in query string --- issues
John Rouillard <rouilj@ieee.org>
parents: 6377
diff changeset
231 self.form.list.append(MiniFieldStorage("issue@status", "1"))
e29d5f4e0af4 issue2551132 - Setting form value in query string --- issues
John Rouillard <rouilj@ieee.org>
parents: 6377
diff changeset
232 status = hyperdb.Link("status")
e29d5f4e0af4 issue2551132 - Setting form value in query string --- issues
John Rouillard <rouilj@ieee.org>
parents: 6377
diff changeset
233 # set default_value
e29d5f4e0af4 issue2551132 - Setting form value in query string --- issues
John Rouillard <rouilj@ieee.org>
parents: 6377
diff changeset
234 status.__dict__['_Type__default_value'] = "4"
e29d5f4e0af4 issue2551132 - Setting form value in query string --- issues
John Rouillard <rouilj@ieee.org>
parents: 6377
diff changeset
235
e29d5f4e0af4 issue2551132 - Setting form value in query string --- issues
John Rouillard <rouilj@ieee.org>
parents: 6377
diff changeset
236 self.client.db.classes = dict \
e29d5f4e0af4 issue2551132 - Setting form value in query string --- issues
John Rouillard <rouilj@ieee.org>
parents: 6377
diff changeset
237 ( issue = MockNull(getprops = lambda : dict(status = status))
e29d5f4e0af4 issue2551132 - Setting form value in query string --- issues
John Rouillard <rouilj@ieee.org>
parents: 6377
diff changeset
238 , status = MockNull(get = lambda id, name : id, lookup = lookup, get_default_value = lambda: 4)
e29d5f4e0af4 issue2551132 - Setting form value in query string --- issues
John Rouillard <rouilj@ieee.org>
parents: 6377
diff changeset
239 )
e29d5f4e0af4 issue2551132 - Setting form value in query string --- issues
John Rouillard <rouilj@ieee.org>
parents: 6377
diff changeset
240 self.client.form = self.form
e29d5f4e0af4 issue2551132 - Setting form value in query string --- issues
John Rouillard <rouilj@ieee.org>
parents: 6377
diff changeset
241
e29d5f4e0af4 issue2551132 - Setting form value in query string --- issues
John Rouillard <rouilj@ieee.org>
parents: 6377
diff changeset
242 cls = HTMLClass(self.client, "issue")
e29d5f4e0af4 issue2551132 - Setting form value in query string --- issues
John Rouillard <rouilj@ieee.org>
parents: 6377
diff changeset
243 s = cls["status"]
e29d5f4e0af4 issue2551132 - Setting form value in query string --- issues
John Rouillard <rouilj@ieee.org>
parents: 6377
diff changeset
244 self.assertEqual(s._value, '2')
4040
b6a2251394dd Make cgi.templating more fault-tolerant towards invalid requests.
Stefan Seefeld <stefan@seefeld.name>
parents: 4011
diff changeset
245
3972
eee76dd4a09f 'Make a Copy' failed with more than one person in nosy list [SF#1906147]
Richard Jones <richard@users.sourceforge.net>
parents: 3587
diff changeset
246 def test_multilink(self):
eee76dd4a09f 'Make a Copy' failed with more than one person in nosy list [SF#1906147]
Richard Jones <richard@users.sourceforge.net>
parents: 3587
diff changeset
247 """`lookup` of an item will fail if leading or trailing whitespace
eee76dd4a09f 'Make a Copy' failed with more than one person in nosy list [SF#1906147]
Richard Jones <richard@users.sourceforge.net>
parents: 3587
diff changeset
248 has not been stripped.
eee76dd4a09f 'Make a Copy' failed with more than one person in nosy list [SF#1906147]
Richard Jones <richard@users.sourceforge.net>
parents: 3587
diff changeset
249 """
eee76dd4a09f 'Make a Copy' failed with more than one person in nosy list [SF#1906147]
Richard Jones <richard@users.sourceforge.net>
parents: 3587
diff changeset
250 def lookup(key) :
eee76dd4a09f 'Make a Copy' failed with more than one person in nosy list [SF#1906147]
Richard Jones <richard@users.sourceforge.net>
parents: 3587
diff changeset
251 self.assertEqual(key, key.strip())
eee76dd4a09f 'Make a Copy' failed with more than one person in nosy list [SF#1906147]
Richard Jones <richard@users.sourceforge.net>
parents: 3587
diff changeset
252 return "User%s"%key
eee76dd4a09f 'Make a Copy' failed with more than one person in nosy list [SF#1906147]
Richard Jones <richard@users.sourceforge.net>
parents: 3587
diff changeset
253 self.form.list.append(MiniFieldStorage("nosy", "1, 2"))
eee76dd4a09f 'Make a Copy' failed with more than one person in nosy list [SF#1906147]
Richard Jones <richard@users.sourceforge.net>
parents: 3587
diff changeset
254 nosy = hyperdb.Multilink("user")
eee76dd4a09f 'Make a Copy' failed with more than one person in nosy list [SF#1906147]
Richard Jones <richard@users.sourceforge.net>
parents: 3587
diff changeset
255 self.client.db.classes = dict \
eee76dd4a09f 'Make a Copy' failed with more than one person in nosy list [SF#1906147]
Richard Jones <richard@users.sourceforge.net>
parents: 3587
diff changeset
256 ( issue = MockNull(getprops = lambda : dict(nosy = nosy))
eee76dd4a09f 'Make a Copy' failed with more than one person in nosy list [SF#1906147]
Richard Jones <richard@users.sourceforge.net>
parents: 3587
diff changeset
257 , user = MockNull(get = lambda id, name : id, lookup = lookup)
eee76dd4a09f 'Make a Copy' failed with more than one person in nosy list [SF#1906147]
Richard Jones <richard@users.sourceforge.net>
parents: 3587
diff changeset
258 )
eee76dd4a09f 'Make a Copy' failed with more than one person in nosy list [SF#1906147]
Richard Jones <richard@users.sourceforge.net>
parents: 3587
diff changeset
259 cls = HTMLClass(self.client, "issue")
eee76dd4a09f 'Make a Copy' failed with more than one person in nosy list [SF#1906147]
Richard Jones <richard@users.sourceforge.net>
parents: 3587
diff changeset
260 cls["nosy"]
eee76dd4a09f 'Make a Copy' failed with more than one person in nosy list [SF#1906147]
Richard Jones <richard@users.sourceforge.net>
parents: 3587
diff changeset
261
5201
a9ace22e0a2f issue 2550690 - Adding anti-csrf measures to roundup following
John Rouillard <rouilj@ieee.org>
parents: 5190
diff changeset
262 def test_anti_csrf_nonce(self):
a9ace22e0a2f issue 2550690 - Adding anti-csrf measures to roundup following
John Rouillard <rouilj@ieee.org>
parents: 5190
diff changeset
263 '''call the csrf creation function and do basic length test
a9ace22e0a2f issue 2550690 - Adding anti-csrf measures to roundup following
John Rouillard <rouilj@ieee.org>
parents: 5190
diff changeset
264
a9ace22e0a2f issue 2550690 - Adding anti-csrf measures to roundup following
John Rouillard <rouilj@ieee.org>
parents: 5190
diff changeset
265 Store the data in a mock db with the same api as the otk
6826
28b906a237d8 Fix anti_csrf_nonce test
John Rouillard <rouilj@ieee.org>
parents: 6817
diff changeset
266 db. Make sure nonce is 54 chars long. Lookup the nonce in
5201
a9ace22e0a2f issue 2550690 - Adding anti-csrf measures to roundup following
John Rouillard <rouilj@ieee.org>
parents: 5190
diff changeset
267 db and retrieve data. Verify that the nonce lifetime is
a9ace22e0a2f issue 2550690 - Adding anti-csrf measures to roundup following
John Rouillard <rouilj@ieee.org>
parents: 5190
diff changeset
268 correct (within 1 second of 1 week - lifetime), the uid is
a9ace22e0a2f issue 2550690 - Adding anti-csrf measures to roundup following
John Rouillard <rouilj@ieee.org>
parents: 5190
diff changeset
269 correct (1), the dummy sid is correct.
a9ace22e0a2f issue 2550690 - Adding anti-csrf measures to roundup following
John Rouillard <rouilj@ieee.org>
parents: 5190
diff changeset
270
a9ace22e0a2f issue 2550690 - Adding anti-csrf measures to roundup following
John Rouillard <rouilj@ieee.org>
parents: 5190
diff changeset
271 Consider three cases:
a9ace22e0a2f issue 2550690 - Adding anti-csrf measures to roundup following
John Rouillard <rouilj@ieee.org>
parents: 5190
diff changeset
272 * create nonce via module function setting lifetime
a9ace22e0a2f issue 2550690 - Adding anti-csrf measures to roundup following
John Rouillard <rouilj@ieee.org>
parents: 5190
diff changeset
273 * create nonce via TemplatingUtils method setting lifetime
a9ace22e0a2f issue 2550690 - Adding anti-csrf measures to roundup following
John Rouillard <rouilj@ieee.org>
parents: 5190
diff changeset
274 * create nonce via module function with default lifetime
a9ace22e0a2f issue 2550690 - Adding anti-csrf measures to roundup following
John Rouillard <rouilj@ieee.org>
parents: 5190
diff changeset
275
a9ace22e0a2f issue 2550690 - Adding anti-csrf measures to roundup following
John Rouillard <rouilj@ieee.org>
parents: 5190
diff changeset
276 '''
a9ace22e0a2f issue 2550690 - Adding anti-csrf measures to roundup following
John Rouillard <rouilj@ieee.org>
parents: 5190
diff changeset
277
a9ace22e0a2f issue 2550690 - Adding anti-csrf measures to roundup following
John Rouillard <rouilj@ieee.org>
parents: 5190
diff changeset
278 # the value below is number of seconds in a week.
5211
f4b6a2a3e605 Fix expiration dates and expire csrf tokens properly
John Rouillard <rouilj@ieee.org>
parents: 5201
diff changeset
279 week_seconds = 604800
f4b6a2a3e605 Fix expiration dates and expire csrf tokens properly
John Rouillard <rouilj@ieee.org>
parents: 5201
diff changeset
280
f4b6a2a3e605 Fix expiration dates and expire csrf tokens properly
John Rouillard <rouilj@ieee.org>
parents: 5201
diff changeset
281 otks=self.client.db.getOTKManager()
f4b6a2a3e605 Fix expiration dates and expire csrf tokens properly
John Rouillard <rouilj@ieee.org>
parents: 5201
diff changeset
282
5201
a9ace22e0a2f issue 2550690 - Adding anti-csrf measures to roundup following
John Rouillard <rouilj@ieee.org>
parents: 5190
diff changeset
283 for test in [ 'module', 'template', 'default_time' ]:
5376
64b05e24dbd8 Python 3 preparation: convert print to a function.
Joseph Myers <jsm@polyomino.org.uk>
parents: 5226
diff changeset
284 print("Testing:", test)
5211
f4b6a2a3e605 Fix expiration dates and expire csrf tokens properly
John Rouillard <rouilj@ieee.org>
parents: 5201
diff changeset
285
5201
a9ace22e0a2f issue 2550690 - Adding anti-csrf measures to roundup following
John Rouillard <rouilj@ieee.org>
parents: 5190
diff changeset
286 if test == 'module':
a9ace22e0a2f issue 2550690 - Adding anti-csrf measures to roundup following
John Rouillard <rouilj@ieee.org>
parents: 5190
diff changeset
287 # test the module function
5488
52cb53eedf77 reworked random number use
Christof Meerwald <cmeerw@cmeerw.org>
parents: 5485
diff changeset
288 nonce1 = anti_csrf_nonce(self.client, lifetime=1)
5201
a9ace22e0a2f issue 2550690 - Adding anti-csrf measures to roundup following
John Rouillard <rouilj@ieee.org>
parents: 5190
diff changeset
289 # lifetime * 60 is the offset
a9ace22e0a2f issue 2550690 - Adding anti-csrf measures to roundup following
John Rouillard <rouilj@ieee.org>
parents: 5190
diff changeset
290 greater_than = week_seconds - 1 * 60
a9ace22e0a2f issue 2550690 - Adding anti-csrf measures to roundup following
John Rouillard <rouilj@ieee.org>
parents: 5190
diff changeset
291 elif test == 'template':
a9ace22e0a2f issue 2550690 - Adding anti-csrf measures to roundup following
John Rouillard <rouilj@ieee.org>
parents: 5190
diff changeset
292 # call the function through the TemplatingUtils class
a9ace22e0a2f issue 2550690 - Adding anti-csrf measures to roundup following
John Rouillard <rouilj@ieee.org>
parents: 5190
diff changeset
293 cls = TemplatingUtils(self.client)
a9ace22e0a2f issue 2550690 - Adding anti-csrf measures to roundup following
John Rouillard <rouilj@ieee.org>
parents: 5190
diff changeset
294 nonce1 = cls.anti_csrf_nonce(lifetime=5)
a9ace22e0a2f issue 2550690 - Adding anti-csrf measures to roundup following
John Rouillard <rouilj@ieee.org>
parents: 5190
diff changeset
295 greater_than = week_seconds - 5 * 60
a9ace22e0a2f issue 2550690 - Adding anti-csrf measures to roundup following
John Rouillard <rouilj@ieee.org>
parents: 5190
diff changeset
296 elif test == 'default_time':
a9ace22e0a2f issue 2550690 - Adding anti-csrf measures to roundup following
John Rouillard <rouilj@ieee.org>
parents: 5190
diff changeset
297 # use the module function but with no lifetime
5488
52cb53eedf77 reworked random number use
Christof Meerwald <cmeerw@cmeerw.org>
parents: 5485
diff changeset
298 nonce1 = anti_csrf_nonce(self.client)
5201
a9ace22e0a2f issue 2550690 - Adding anti-csrf measures to roundup following
John Rouillard <rouilj@ieee.org>
parents: 5190
diff changeset
299 # see above for web nonce lifetime.
a9ace22e0a2f issue 2550690 - Adding anti-csrf measures to roundup following
John Rouillard <rouilj@ieee.org>
parents: 5190
diff changeset
300 greater_than = week_seconds - 10 * 60
a9ace22e0a2f issue 2550690 - Adding anti-csrf measures to roundup following
John Rouillard <rouilj@ieee.org>
parents: 5190
diff changeset
301
6826
28b906a237d8 Fix anti_csrf_nonce test
John Rouillard <rouilj@ieee.org>
parents: 6817
diff changeset
302 self.assertEqual(len(nonce1), 54)
5201
a9ace22e0a2f issue 2550690 - Adding anti-csrf measures to roundup following
John Rouillard <rouilj@ieee.org>
parents: 5190
diff changeset
303
a9ace22e0a2f issue 2550690 - Adding anti-csrf measures to roundup following
John Rouillard <rouilj@ieee.org>
parents: 5190
diff changeset
304 uid = otks.get(nonce1, 'uid', default=None)
a9ace22e0a2f issue 2550690 - Adding anti-csrf measures to roundup following
John Rouillard <rouilj@ieee.org>
parents: 5190
diff changeset
305 sid = otks.get(nonce1, 'sid', default=None)
a9ace22e0a2f issue 2550690 - Adding anti-csrf measures to roundup following
John Rouillard <rouilj@ieee.org>
parents: 5190
diff changeset
306 timestamp = otks.get(nonce1, '__timestamp', default=None)
a9ace22e0a2f issue 2550690 - Adding anti-csrf measures to roundup following
John Rouillard <rouilj@ieee.org>
parents: 5190
diff changeset
307
a9ace22e0a2f issue 2550690 - Adding anti-csrf measures to roundup following
John Rouillard <rouilj@ieee.org>
parents: 5190
diff changeset
308 self.assertEqual(uid, 10)
a9ace22e0a2f issue 2550690 - Adding anti-csrf measures to roundup following
John Rouillard <rouilj@ieee.org>
parents: 5190
diff changeset
309 self.assertEqual(sid, self.client.session_api._sid)
a9ace22e0a2f issue 2550690 - Adding anti-csrf measures to roundup following
John Rouillard <rouilj@ieee.org>
parents: 5190
diff changeset
310
5211
f4b6a2a3e605 Fix expiration dates and expire csrf tokens properly
John Rouillard <rouilj@ieee.org>
parents: 5201
diff changeset
311 now = time.time()
f4b6a2a3e605 Fix expiration dates and expire csrf tokens properly
John Rouillard <rouilj@ieee.org>
parents: 5201
diff changeset
312
5376
64b05e24dbd8 Python 3 preparation: convert print to a function.
Joseph Myers <jsm@polyomino.org.uk>
parents: 5226
diff changeset
313 print("now, timestamp, greater, difference",
64b05e24dbd8 Python 3 preparation: convert print to a function.
Joseph Myers <jsm@polyomino.org.uk>
parents: 5226
diff changeset
314 now, timestamp, greater_than, now - timestamp)
5211
f4b6a2a3e605 Fix expiration dates and expire csrf tokens properly
John Rouillard <rouilj@ieee.org>
parents: 5201
diff changeset
315
5201
a9ace22e0a2f issue 2550690 - Adding anti-csrf measures to roundup following
John Rouillard <rouilj@ieee.org>
parents: 5190
diff changeset
316
a9ace22e0a2f issue 2550690 - Adding anti-csrf measures to roundup following
John Rouillard <rouilj@ieee.org>
parents: 5190
diff changeset
317 # lower bound of the difference is above. Upper bound
a9ace22e0a2f issue 2550690 - Adding anti-csrf measures to roundup following
John Rouillard <rouilj@ieee.org>
parents: 5190
diff changeset
318 # of difference is run time between time.time() in
a9ace22e0a2f issue 2550690 - Adding anti-csrf measures to roundup following
John Rouillard <rouilj@ieee.org>
parents: 5190
diff changeset
319 # the call to anti_csrf_nonce and the time.time() call
a9ace22e0a2f issue 2550690 - Adding anti-csrf measures to roundup following
John Rouillard <rouilj@ieee.org>
parents: 5190
diff changeset
320 # that assigns ts above. I declare that difference
a9ace22e0a2f issue 2550690 - Adding anti-csrf measures to roundup following
John Rouillard <rouilj@ieee.org>
parents: 5190
diff changeset
321 # to be less than 1 second for this to pass.
a9ace22e0a2f issue 2550690 - Adding anti-csrf measures to roundup following
John Rouillard <rouilj@ieee.org>
parents: 5190
diff changeset
322 self.assertEqual(True,
5211
f4b6a2a3e605 Fix expiration dates and expire csrf tokens properly
John Rouillard <rouilj@ieee.org>
parents: 5201
diff changeset
323 greater_than <= now - timestamp < (greater_than + 1) )
5201
a9ace22e0a2f issue 2550690 - Adding anti-csrf measures to roundup following
John Rouillard <rouilj@ieee.org>
parents: 5190
diff changeset
324
6832
234fefd7568a issue2550559 - Pretty printing / formatting for Number types.
John Rouillard <rouilj@ieee.org>
parents: 6826
diff changeset
325 def test_number__int__(self):
234fefd7568a issue2550559 - Pretty printing / formatting for Number types.
John Rouillard <rouilj@ieee.org>
parents: 6826
diff changeset
326 # test with number
234fefd7568a issue2550559 - Pretty printing / formatting for Number types.
John Rouillard <rouilj@ieee.org>
parents: 6826
diff changeset
327 p = NumberHTMLProperty(self.client, 'testnum', '1', None, 'test',
234fefd7568a issue2550559 - Pretty printing / formatting for Number types.
John Rouillard <rouilj@ieee.org>
parents: 6826
diff changeset
328 2345678.2345678)
234fefd7568a issue2550559 - Pretty printing / formatting for Number types.
John Rouillard <rouilj@ieee.org>
parents: 6826
diff changeset
329 self.assertEqual(p.__int__(), 2345678)
234fefd7568a issue2550559 - Pretty printing / formatting for Number types.
John Rouillard <rouilj@ieee.org>
parents: 6826
diff changeset
330
234fefd7568a issue2550559 - Pretty printing / formatting for Number types.
John Rouillard <rouilj@ieee.org>
parents: 6826
diff changeset
331 property = MockNull(get_default_value = lambda: None)
234fefd7568a issue2550559 - Pretty printing / formatting for Number types.
John Rouillard <rouilj@ieee.org>
parents: 6826
diff changeset
332 p = NumberHTMLProperty(self.client, 'testnum', '1', property,
234fefd7568a issue2550559 - Pretty printing / formatting for Number types.
John Rouillard <rouilj@ieee.org>
parents: 6826
diff changeset
333 'test', None)
234fefd7568a issue2550559 - Pretty printing / formatting for Number types.
John Rouillard <rouilj@ieee.org>
parents: 6826
diff changeset
334 with self.assertRaises(TypeError) as e:
234fefd7568a issue2550559 - Pretty printing / formatting for Number types.
John Rouillard <rouilj@ieee.org>
parents: 6826
diff changeset
335 p.__int__()
234fefd7568a issue2550559 - Pretty printing / formatting for Number types.
John Rouillard <rouilj@ieee.org>
parents: 6826
diff changeset
336
234fefd7568a issue2550559 - Pretty printing / formatting for Number types.
John Rouillard <rouilj@ieee.org>
parents: 6826
diff changeset
337 def test_number__float__(self):
234fefd7568a issue2550559 - Pretty printing / formatting for Number types.
John Rouillard <rouilj@ieee.org>
parents: 6826
diff changeset
338 # test with number
234fefd7568a issue2550559 - Pretty printing / formatting for Number types.
John Rouillard <rouilj@ieee.org>
parents: 6826
diff changeset
339 p = NumberHTMLProperty(self.client, 'testnum', '1', None, 'test',
234fefd7568a issue2550559 - Pretty printing / formatting for Number types.
John Rouillard <rouilj@ieee.org>
parents: 6826
diff changeset
340 2345678.2345678)
234fefd7568a issue2550559 - Pretty printing / formatting for Number types.
John Rouillard <rouilj@ieee.org>
parents: 6826
diff changeset
341 self.assertEqual(p.__float__(), 2345678.2345678)
234fefd7568a issue2550559 - Pretty printing / formatting for Number types.
John Rouillard <rouilj@ieee.org>
parents: 6826
diff changeset
342
234fefd7568a issue2550559 - Pretty printing / formatting for Number types.
John Rouillard <rouilj@ieee.org>
parents: 6826
diff changeset
343 property = MockNull(get_default_value = lambda: None)
234fefd7568a issue2550559 - Pretty printing / formatting for Number types.
John Rouillard <rouilj@ieee.org>
parents: 6826
diff changeset
344 p = NumberHTMLProperty(self.client, 'testnum', '1', property,
234fefd7568a issue2550559 - Pretty printing / formatting for Number types.
John Rouillard <rouilj@ieee.org>
parents: 6826
diff changeset
345 'test', None)
234fefd7568a issue2550559 - Pretty printing / formatting for Number types.
John Rouillard <rouilj@ieee.org>
parents: 6826
diff changeset
346 with self.assertRaises(TypeError) as e:
234fefd7568a issue2550559 - Pretty printing / formatting for Number types.
John Rouillard <rouilj@ieee.org>
parents: 6826
diff changeset
347 p.__float__()
234fefd7568a issue2550559 - Pretty printing / formatting for Number types.
John Rouillard <rouilj@ieee.org>
parents: 6826
diff changeset
348
234fefd7568a issue2550559 - Pretty printing / formatting for Number types.
John Rouillard <rouilj@ieee.org>
parents: 6826
diff changeset
349 def test_number_field(self):
234fefd7568a issue2550559 - Pretty printing / formatting for Number types.
John Rouillard <rouilj@ieee.org>
parents: 6826
diff changeset
350 import sys
234fefd7568a issue2550559 - Pretty printing / formatting for Number types.
John Rouillard <rouilj@ieee.org>
parents: 6826
diff changeset
351
234fefd7568a issue2550559 - Pretty printing / formatting for Number types.
John Rouillard <rouilj@ieee.org>
parents: 6826
diff changeset
352 _py3 = sys.version_info[0] > 2
234fefd7568a issue2550559 - Pretty printing / formatting for Number types.
John Rouillard <rouilj@ieee.org>
parents: 6826
diff changeset
353
234fefd7568a issue2550559 - Pretty printing / formatting for Number types.
John Rouillard <rouilj@ieee.org>
parents: 6826
diff changeset
354 # python2 truncates while python3 rounds. Sigh.
234fefd7568a issue2550559 - Pretty printing / formatting for Number types.
John Rouillard <rouilj@ieee.org>
parents: 6826
diff changeset
355 if _py3:
234fefd7568a issue2550559 - Pretty printing / formatting for Number types.
John Rouillard <rouilj@ieee.org>
parents: 6826
diff changeset
356 expected_val = 2345678.2345678
234fefd7568a issue2550559 - Pretty printing / formatting for Number types.
John Rouillard <rouilj@ieee.org>
parents: 6826
diff changeset
357 else:
234fefd7568a issue2550559 - Pretty printing / formatting for Number types.
John Rouillard <rouilj@ieee.org>
parents: 6826
diff changeset
358 expected_val = 2345678.23457
234fefd7568a issue2550559 - Pretty printing / formatting for Number types.
John Rouillard <rouilj@ieee.org>
parents: 6826
diff changeset
359
234fefd7568a issue2550559 - Pretty printing / formatting for Number types.
John Rouillard <rouilj@ieee.org>
parents: 6826
diff changeset
360 # test with number
234fefd7568a issue2550559 - Pretty printing / formatting for Number types.
John Rouillard <rouilj@ieee.org>
parents: 6826
diff changeset
361 p = NumberHTMLProperty(self.client, 'testnum', '1', None, 'test',
234fefd7568a issue2550559 - Pretty printing / formatting for Number types.
John Rouillard <rouilj@ieee.org>
parents: 6826
diff changeset
362 2345678.2345678)
8300
b99e76e76496 Make native date and number elements configurable
Ralf Schlatterbeck <rsc@runtux.com>
parents: 8289
diff changeset
363 self.client.db.config['WEB_USE_BROWSER_NUMBER_INPUT'] = False
6832
234fefd7568a issue2550559 - Pretty printing / formatting for Number types.
John Rouillard <rouilj@ieee.org>
parents: 6826
diff changeset
364 self.assertEqual(p.field(),
8300
b99e76e76496 Make native date and number elements configurable
Ralf Schlatterbeck <rsc@runtux.com>
parents: 8289
diff changeset
365 ('<input id="testnum1@test" name="testnum1@test" '
b99e76e76496 Make native date and number elements configurable
Ralf Schlatterbeck <rsc@runtux.com>
parents: 8289
diff changeset
366 'size="30" type="text" value="%s">')%expected_val)
b99e76e76496 Make native date and number elements configurable
Ralf Schlatterbeck <rsc@runtux.com>
parents: 8289
diff changeset
367 self.client.db.config['WEB_USE_BROWSER_NUMBER_INPUT'] = True
b99e76e76496 Make native date and number elements configurable
Ralf Schlatterbeck <rsc@runtux.com>
parents: 8289
diff changeset
368 self.assertEqual(p.field(),
b99e76e76496 Make native date and number elements configurable
Ralf Schlatterbeck <rsc@runtux.com>
parents: 8289
diff changeset
369 ('<input id="testnum1@test" name="testnum1@test" '
b99e76e76496 Make native date and number elements configurable
Ralf Schlatterbeck <rsc@runtux.com>
parents: 8289
diff changeset
370 'size="30" type="number" value="%s">')%expected_val)
6832
234fefd7568a issue2550559 - Pretty printing / formatting for Number types.
John Rouillard <rouilj@ieee.org>
parents: 6826
diff changeset
371 self.assertEqual(p.field(size=10),
8300
b99e76e76496 Make native date and number elements configurable
Ralf Schlatterbeck <rsc@runtux.com>
parents: 8289
diff changeset
372 ('<input id="testnum1@test" name="testnum1@test" '
b99e76e76496 Make native date and number elements configurable
Ralf Schlatterbeck <rsc@runtux.com>
parents: 8289
diff changeset
373 'size="10" type="number" value="%s">')%expected_val)
6832
234fefd7568a issue2550559 - Pretty printing / formatting for Number types.
John Rouillard <rouilj@ieee.org>
parents: 6826
diff changeset
374 self.assertEqual(p.field(size=10, dataprop="foo", dataprop2=5),
234fefd7568a issue2550559 - Pretty printing / formatting for Number types.
John Rouillard <rouilj@ieee.org>
parents: 6826
diff changeset
375 ('<input dataprop="foo" dataprop2="5" '
8281
669dfccca898 issue2551391 - checkboxes and radiobutton inputs get wrong id's.
John Rouillard <rouilj@ieee.org>
parents: 7936
diff changeset
376 'id="testnum1@test" name="testnum1@test" '
8287
60e682add9ea test - fix broken test
John Rouillard <rouilj@ieee.org>
parents: 8286
diff changeset
377 'size="10" type="number" '
6832
234fefd7568a issue2550559 - Pretty printing / formatting for Number types.
John Rouillard <rouilj@ieee.org>
parents: 6826
diff changeset
378 'value="%s">'%expected_val))
234fefd7568a issue2550559 - Pretty printing / formatting for Number types.
John Rouillard <rouilj@ieee.org>
parents: 6826
diff changeset
379
234fefd7568a issue2550559 - Pretty printing / formatting for Number types.
John Rouillard <rouilj@ieee.org>
parents: 6826
diff changeset
380 self.assertEqual(p.field(size=10, klass="class1",
234fefd7568a issue2550559 - Pretty printing / formatting for Number types.
John Rouillard <rouilj@ieee.org>
parents: 6826
diff changeset
381 **{ "class": "class2 class3",
234fefd7568a issue2550559 - Pretty printing / formatting for Number types.
John Rouillard <rouilj@ieee.org>
parents: 6826
diff changeset
382 "data-prop": "foo",
234fefd7568a issue2550559 - Pretty printing / formatting for Number types.
John Rouillard <rouilj@ieee.org>
parents: 6826
diff changeset
383 "data-prop2": 5}),
234fefd7568a issue2550559 - Pretty printing / formatting for Number types.
John Rouillard <rouilj@ieee.org>
parents: 6826
diff changeset
384 ('<input class="class2 class3" data-prop="foo" '
8281
669dfccca898 issue2551391 - checkboxes and radiobutton inputs get wrong id's.
John Rouillard <rouilj@ieee.org>
parents: 7936
diff changeset
385 'data-prop2="5" id="testnum1@test" '
669dfccca898 issue2551391 - checkboxes and radiobutton inputs get wrong id's.
John Rouillard <rouilj@ieee.org>
parents: 7936
diff changeset
386 'klass="class1" '
8287
60e682add9ea test - fix broken test
John Rouillard <rouilj@ieee.org>
parents: 8286
diff changeset
387 'name="testnum1@test" size="10" type="number" '
6832
234fefd7568a issue2550559 - Pretty printing / formatting for Number types.
John Rouillard <rouilj@ieee.org>
parents: 6826
diff changeset
388 'value="%s">')%expected_val)
234fefd7568a issue2550559 - Pretty printing / formatting for Number types.
John Rouillard <rouilj@ieee.org>
parents: 6826
diff changeset
389
234fefd7568a issue2550559 - Pretty printing / formatting for Number types.
John Rouillard <rouilj@ieee.org>
parents: 6826
diff changeset
390 # get plain representation if user can't edit
234fefd7568a issue2550559 - Pretty printing / formatting for Number types.
John Rouillard <rouilj@ieee.org>
parents: 6826
diff changeset
391 p.is_edit_ok = lambda: False
234fefd7568a issue2550559 - Pretty printing / formatting for Number types.
John Rouillard <rouilj@ieee.org>
parents: 6826
diff changeset
392 self.assertEqual(p.field(), p.plain())
234fefd7568a issue2550559 - Pretty printing / formatting for Number types.
John Rouillard <rouilj@ieee.org>
parents: 6826
diff changeset
393
234fefd7568a issue2550559 - Pretty printing / formatting for Number types.
John Rouillard <rouilj@ieee.org>
parents: 6826
diff changeset
394 # test with string which is wrong type
234fefd7568a issue2550559 - Pretty printing / formatting for Number types.
John Rouillard <rouilj@ieee.org>
parents: 6826
diff changeset
395 p = NumberHTMLProperty(self.client, 'testnum', '1', None, 'test',
8287
60e682add9ea test - fix broken test
John Rouillard <rouilj@ieee.org>
parents: 8286
diff changeset
396 "234567e.2345678")
6832
234fefd7568a issue2550559 - Pretty printing / formatting for Number types.
John Rouillard <rouilj@ieee.org>
parents: 6826
diff changeset
397 self.assertEqual(p.field(),
8281
669dfccca898 issue2551391 - checkboxes and radiobutton inputs get wrong id's.
John Rouillard <rouilj@ieee.org>
parents: 7936
diff changeset
398 ('<input id="testnum1@test" name="testnum1@test" '
8287
60e682add9ea test - fix broken test
John Rouillard <rouilj@ieee.org>
parents: 8286
diff changeset
399 'size="30" type="number" value="234567e.2345678">'))
6832
234fefd7568a issue2550559 - Pretty printing / formatting for Number types.
John Rouillard <rouilj@ieee.org>
parents: 6826
diff changeset
400
234fefd7568a issue2550559 - Pretty printing / formatting for Number types.
John Rouillard <rouilj@ieee.org>
parents: 6826
diff changeset
401 # test with None value, pretend property.__default_value = Null which
234fefd7568a issue2550559 - Pretty printing / formatting for Number types.
John Rouillard <rouilj@ieee.org>
parents: 6826
diff changeset
402 # is the default. It would be returned by get_default_value
234fefd7568a issue2550559 - Pretty printing / formatting for Number types.
John Rouillard <rouilj@ieee.org>
parents: 6826
diff changeset
403 # which I mock.
234fefd7568a issue2550559 - Pretty printing / formatting for Number types.
John Rouillard <rouilj@ieee.org>
parents: 6826
diff changeset
404 property = MockNull(get_default_value = lambda: None)
234fefd7568a issue2550559 - Pretty printing / formatting for Number types.
John Rouillard <rouilj@ieee.org>
parents: 6826
diff changeset
405 p = NumberHTMLProperty(self.client, 'testnum', '1', property,
234fefd7568a issue2550559 - Pretty printing / formatting for Number types.
John Rouillard <rouilj@ieee.org>
parents: 6826
diff changeset
406 'test', None)
234fefd7568a issue2550559 - Pretty printing / formatting for Number types.
John Rouillard <rouilj@ieee.org>
parents: 6826
diff changeset
407 self.assertEqual(p.field(),
8281
669dfccca898 issue2551391 - checkboxes and radiobutton inputs get wrong id's.
John Rouillard <rouilj@ieee.org>
parents: 7936
diff changeset
408 ('<input id="testnum1@test" name="testnum1@test" '
8287
60e682add9ea test - fix broken test
John Rouillard <rouilj@ieee.org>
parents: 8286
diff changeset
409 'size="30" type="number" value="">'))
6832
234fefd7568a issue2550559 - Pretty printing / formatting for Number types.
John Rouillard <rouilj@ieee.org>
parents: 6826
diff changeset
410
234fefd7568a issue2550559 - Pretty printing / formatting for Number types.
John Rouillard <rouilj@ieee.org>
parents: 6826
diff changeset
411 def test_number_plain(self):
234fefd7568a issue2550559 - Pretty printing / formatting for Number types.
John Rouillard <rouilj@ieee.org>
parents: 6826
diff changeset
412 import sys
234fefd7568a issue2550559 - Pretty printing / formatting for Number types.
John Rouillard <rouilj@ieee.org>
parents: 6826
diff changeset
413
234fefd7568a issue2550559 - Pretty printing / formatting for Number types.
John Rouillard <rouilj@ieee.org>
parents: 6826
diff changeset
414 _py3 = sys.version_info[0] > 2
234fefd7568a issue2550559 - Pretty printing / formatting for Number types.
John Rouillard <rouilj@ieee.org>
parents: 6826
diff changeset
415
234fefd7568a issue2550559 - Pretty printing / formatting for Number types.
John Rouillard <rouilj@ieee.org>
parents: 6826
diff changeset
416 # python2 truncates while python3 rounds. Sigh.
234fefd7568a issue2550559 - Pretty printing / formatting for Number types.
John Rouillard <rouilj@ieee.org>
parents: 6826
diff changeset
417 if _py3:
234fefd7568a issue2550559 - Pretty printing / formatting for Number types.
John Rouillard <rouilj@ieee.org>
parents: 6826
diff changeset
418 expected_val = 2345678.2345678
234fefd7568a issue2550559 - Pretty printing / formatting for Number types.
John Rouillard <rouilj@ieee.org>
parents: 6826
diff changeset
419 else:
234fefd7568a issue2550559 - Pretty printing / formatting for Number types.
John Rouillard <rouilj@ieee.org>
parents: 6826
diff changeset
420 expected_val = 2345678.23457
234fefd7568a issue2550559 - Pretty printing / formatting for Number types.
John Rouillard <rouilj@ieee.org>
parents: 6826
diff changeset
421
234fefd7568a issue2550559 - Pretty printing / formatting for Number types.
John Rouillard <rouilj@ieee.org>
parents: 6826
diff changeset
422 p = NumberHTMLProperty(self.client, 'testnum', '1', None, 'test',
234fefd7568a issue2550559 - Pretty printing / formatting for Number types.
John Rouillard <rouilj@ieee.org>
parents: 6826
diff changeset
423 2345678.2345678)
234fefd7568a issue2550559 - Pretty printing / formatting for Number types.
John Rouillard <rouilj@ieee.org>
parents: 6826
diff changeset
424
234fefd7568a issue2550559 - Pretty printing / formatting for Number types.
John Rouillard <rouilj@ieee.org>
parents: 6826
diff changeset
425 self.assertEqual(p.plain(), "%s"%expected_val)
234fefd7568a issue2550559 - Pretty printing / formatting for Number types.
John Rouillard <rouilj@ieee.org>
parents: 6826
diff changeset
426
234fefd7568a issue2550559 - Pretty printing / formatting for Number types.
John Rouillard <rouilj@ieee.org>
parents: 6826
diff changeset
427 def test_number_pretty(self):
234fefd7568a issue2550559 - Pretty printing / formatting for Number types.
John Rouillard <rouilj@ieee.org>
parents: 6826
diff changeset
428 # test with number
234fefd7568a issue2550559 - Pretty printing / formatting for Number types.
John Rouillard <rouilj@ieee.org>
parents: 6826
diff changeset
429 p = NumberHTMLProperty(self.client, 'testnum', '1', None, 'test',
234fefd7568a issue2550559 - Pretty printing / formatting for Number types.
John Rouillard <rouilj@ieee.org>
parents: 6826
diff changeset
430 2345678.2345678)
234fefd7568a issue2550559 - Pretty printing / formatting for Number types.
John Rouillard <rouilj@ieee.org>
parents: 6826
diff changeset
431 self.assertEqual(p.pretty(), "2345678.235")
234fefd7568a issue2550559 - Pretty printing / formatting for Number types.
John Rouillard <rouilj@ieee.org>
parents: 6826
diff changeset
432
234fefd7568a issue2550559 - Pretty printing / formatting for Number types.
John Rouillard <rouilj@ieee.org>
parents: 6826
diff changeset
433 # test with string which is wrong type
234fefd7568a issue2550559 - Pretty printing / formatting for Number types.
John Rouillard <rouilj@ieee.org>
parents: 6826
diff changeset
434 p = NumberHTMLProperty(self.client, 'testnum', '1', None, 'test',
234fefd7568a issue2550559 - Pretty printing / formatting for Number types.
John Rouillard <rouilj@ieee.org>
parents: 6826
diff changeset
435 "2345678.2345678")
234fefd7568a issue2550559 - Pretty printing / formatting for Number types.
John Rouillard <rouilj@ieee.org>
parents: 6826
diff changeset
436 self.assertEqual(p.pretty(), "2345678.2345678")
234fefd7568a issue2550559 - Pretty printing / formatting for Number types.
John Rouillard <rouilj@ieee.org>
parents: 6826
diff changeset
437
234fefd7568a issue2550559 - Pretty printing / formatting for Number types.
John Rouillard <rouilj@ieee.org>
parents: 6826
diff changeset
438 # test with boolean
234fefd7568a issue2550559 - Pretty printing / formatting for Number types.
John Rouillard <rouilj@ieee.org>
parents: 6826
diff changeset
439 p = NumberHTMLProperty(self.client, 'testnum', '1', None, 'test',
234fefd7568a issue2550559 - Pretty printing / formatting for Number types.
John Rouillard <rouilj@ieee.org>
parents: 6826
diff changeset
440 True)
234fefd7568a issue2550559 - Pretty printing / formatting for Number types.
John Rouillard <rouilj@ieee.org>
parents: 6826
diff changeset
441 self.assertEqual(p.pretty(), "1.000")
234fefd7568a issue2550559 - Pretty printing / formatting for Number types.
John Rouillard <rouilj@ieee.org>
parents: 6826
diff changeset
442
234fefd7568a issue2550559 - Pretty printing / formatting for Number types.
John Rouillard <rouilj@ieee.org>
parents: 6826
diff changeset
443 # test with None value, pretend property.__default_value = Null which
234fefd7568a issue2550559 - Pretty printing / formatting for Number types.
John Rouillard <rouilj@ieee.org>
parents: 6826
diff changeset
444 # is the default. It would be returned by get_default_value
234fefd7568a issue2550559 - Pretty printing / formatting for Number types.
John Rouillard <rouilj@ieee.org>
parents: 6826
diff changeset
445 # which I mock.
234fefd7568a issue2550559 - Pretty printing / formatting for Number types.
John Rouillard <rouilj@ieee.org>
parents: 6826
diff changeset
446 property = MockNull(get_default_value = lambda: None)
234fefd7568a issue2550559 - Pretty printing / formatting for Number types.
John Rouillard <rouilj@ieee.org>
parents: 6826
diff changeset
447 p = NumberHTMLProperty(self.client, 'testnum', '1', property,
234fefd7568a issue2550559 - Pretty printing / formatting for Number types.
John Rouillard <rouilj@ieee.org>
parents: 6826
diff changeset
448 'test', None)
234fefd7568a issue2550559 - Pretty printing / formatting for Number types.
John Rouillard <rouilj@ieee.org>
parents: 6826
diff changeset
449 self.assertEqual(p.pretty(), '')
234fefd7568a issue2550559 - Pretty printing / formatting for Number types.
John Rouillard <rouilj@ieee.org>
parents: 6826
diff changeset
450
234fefd7568a issue2550559 - Pretty printing / formatting for Number types.
John Rouillard <rouilj@ieee.org>
parents: 6826
diff changeset
451 with self.assertRaises(ValueError) as e:
234fefd7568a issue2550559 - Pretty printing / formatting for Number types.
John Rouillard <rouilj@ieee.org>
parents: 6826
diff changeset
452 p.pretty('%0.3')
234fefd7568a issue2550559 - Pretty printing / formatting for Number types.
John Rouillard <rouilj@ieee.org>
parents: 6826
diff changeset
453
5156
882fa4d9bead issue2550795: @dispname query args in page.html search links
John Rouillard <rouilj@ieee.org>
parents: 5067
diff changeset
454 def test_string_url_quote(self):
882fa4d9bead issue2550795: @dispname query args in page.html search links
John Rouillard <rouilj@ieee.org>
parents: 5067
diff changeset
455 ''' test that urlquote quotes the string '''
882fa4d9bead issue2550795: @dispname query args in page.html search links
John Rouillard <rouilj@ieee.org>
parents: 5067
diff changeset
456 p = StringHTMLProperty(self.client, 'test', '1', None, 'test', 'test string< foo@bar')
882fa4d9bead issue2550795: @dispname query args in page.html search links
John Rouillard <rouilj@ieee.org>
parents: 5067
diff changeset
457 self.assertEqual(p.url_quote(), 'test%20string%3C%20foo%40bar')
882fa4d9bead issue2550795: @dispname query args in page.html search links
John Rouillard <rouilj@ieee.org>
parents: 5067
diff changeset
458
5157
ae2a5d1afdd5 adding tests for some StringHTMLProperty methods.
John Rouillard <rouilj@ieee.org>
parents: 5156
diff changeset
459 def test_string_email(self):
ae2a5d1afdd5 adding tests for some StringHTMLProperty methods.
John Rouillard <rouilj@ieee.org>
parents: 5156
diff changeset
460 ''' test that email obscures the email '''
ae2a5d1afdd5 adding tests for some StringHTMLProperty methods.
John Rouillard <rouilj@ieee.org>
parents: 5156
diff changeset
461 p = StringHTMLProperty(self.client, 'test', '1', None, 'test', 'rouilj@foo.example.com')
ae2a5d1afdd5 adding tests for some StringHTMLProperty methods.
John Rouillard <rouilj@ieee.org>
parents: 5156
diff changeset
462 self.assertEqual(p.email(), 'rouilj at foo example ...')
ae2a5d1afdd5 adding tests for some StringHTMLProperty methods.
John Rouillard <rouilj@ieee.org>
parents: 5156
diff changeset
463
6339
ab18fe956d45 Test StringHTMLProperty.wrapped(); test url, plain text for rst
John Rouillard <rouilj@ieee.org>
parents: 6338
diff changeset
464 def test_string_wrapped(self):
ab18fe956d45 Test StringHTMLProperty.wrapped(); test url, plain text for rst
John Rouillard <rouilj@ieee.org>
parents: 6338
diff changeset
465 test_string = ('A long string that needs to be wrapped to'
ab18fe956d45 Test StringHTMLProperty.wrapped(); test url, plain text for rst
John Rouillard <rouilj@ieee.org>
parents: 6338
diff changeset
466 ' 80 characters and no more. Put in a link issue1.'
ab18fe956d45 Test StringHTMLProperty.wrapped(); test url, plain text for rst
John Rouillard <rouilj@ieee.org>
parents: 6338
diff changeset
467 ' Put in <html> to be escaped. Put in a'
ab18fe956d45 Test StringHTMLProperty.wrapped(); test url, plain text for rst
John Rouillard <rouilj@ieee.org>
parents: 6338
diff changeset
468 ' https://example.com/link as well. Let us see if'
ab18fe956d45 Test StringHTMLProperty.wrapped(); test url, plain text for rst
John Rouillard <rouilj@ieee.org>
parents: 6338
diff changeset
469 ' it will wrap properly.' )
7864
b080cdb8b199 fix: document/fix wrapped HtmlProperty method.
John Rouillard <rouilj@ieee.org>
parents: 7582
diff changeset
470
b080cdb8b199 fix: document/fix wrapped HtmlProperty method.
John Rouillard <rouilj@ieee.org>
parents: 7582
diff changeset
471 test_result_wrap = {}
b080cdb8b199 fix: document/fix wrapped HtmlProperty method.
John Rouillard <rouilj@ieee.org>
parents: 7582
diff changeset
472 test_result_wrap[80] = ('A long string that needs to be wrapped to 80'
6339
ab18fe956d45 Test StringHTMLProperty.wrapped(); test url, plain text for rst
John Rouillard <rouilj@ieee.org>
parents: 6338
diff changeset
473 ' characters and no more. Put in a\n'
ab18fe956d45 Test StringHTMLProperty.wrapped(); test url, plain text for rst
John Rouillard <rouilj@ieee.org>
parents: 6338
diff changeset
474 'link <a href="issue1">issue1</a>. Put in'
ab18fe956d45 Test StringHTMLProperty.wrapped(); test url, plain text for rst
John Rouillard <rouilj@ieee.org>
parents: 6338
diff changeset
475 ' &lt;html&gt; to be escaped. Put in a <a'
ab18fe956d45 Test StringHTMLProperty.wrapped(); test url, plain text for rst
John Rouillard <rouilj@ieee.org>
parents: 6338
diff changeset
476 ' href="https://example.com/link"'
ab18fe956d45 Test StringHTMLProperty.wrapped(); test url, plain text for rst
John Rouillard <rouilj@ieee.org>
parents: 6338
diff changeset
477 ' rel="nofollow noopener">'
ab18fe956d45 Test StringHTMLProperty.wrapped(); test url, plain text for rst
John Rouillard <rouilj@ieee.org>
parents: 6338
diff changeset
478 'https://example.com/link</a> as\n'
ab18fe956d45 Test StringHTMLProperty.wrapped(); test url, plain text for rst
John Rouillard <rouilj@ieee.org>
parents: 6338
diff changeset
479 'well. Let us see if it will wrap properly.')
7864
b080cdb8b199 fix: document/fix wrapped HtmlProperty method.
John Rouillard <rouilj@ieee.org>
parents: 7582
diff changeset
480 test_result_wrap[20] = (
b080cdb8b199 fix: document/fix wrapped HtmlProperty method.
John Rouillard <rouilj@ieee.org>
parents: 7582
diff changeset
481 'A long string that\n'
b080cdb8b199 fix: document/fix wrapped HtmlProperty method.
John Rouillard <rouilj@ieee.org>
parents: 7582
diff changeset
482 'needs to be wrapped\n'
b080cdb8b199 fix: document/fix wrapped HtmlProperty method.
John Rouillard <rouilj@ieee.org>
parents: 7582
diff changeset
483 'to 80 characters and\n'
b080cdb8b199 fix: document/fix wrapped HtmlProperty method.
John Rouillard <rouilj@ieee.org>
parents: 7582
diff changeset
484 'no more. Put in a\nlink <a href="issue1">issue1</a>. Put in\n'
b080cdb8b199 fix: document/fix wrapped HtmlProperty method.
John Rouillard <rouilj@ieee.org>
parents: 7582
diff changeset
485 '&lt;html&gt; to be\n'
b080cdb8b199 fix: document/fix wrapped HtmlProperty method.
John Rouillard <rouilj@ieee.org>
parents: 7582
diff changeset
486 'escaped. Put in a\n'
b080cdb8b199 fix: document/fix wrapped HtmlProperty method.
John Rouillard <rouilj@ieee.org>
parents: 7582
diff changeset
487 '<a href="https://example.com/link" rel="nofollow '
b080cdb8b199 fix: document/fix wrapped HtmlProperty method.
John Rouillard <rouilj@ieee.org>
parents: 7582
diff changeset
488 'noopener">https://example.com/link</a>\n'
b080cdb8b199 fix: document/fix wrapped HtmlProperty method.
John Rouillard <rouilj@ieee.org>
parents: 7582
diff changeset
489 'as well. Let us see\n'
b080cdb8b199 fix: document/fix wrapped HtmlProperty method.
John Rouillard <rouilj@ieee.org>
parents: 7582
diff changeset
490 'if it will wrap\n'
b080cdb8b199 fix: document/fix wrapped HtmlProperty method.
John Rouillard <rouilj@ieee.org>
parents: 7582
diff changeset
491 'properly.')
b080cdb8b199 fix: document/fix wrapped HtmlProperty method.
John Rouillard <rouilj@ieee.org>
parents: 7582
diff changeset
492 test_result_wrap[100] = (
b080cdb8b199 fix: document/fix wrapped HtmlProperty method.
John Rouillard <rouilj@ieee.org>
parents: 7582
diff changeset
493 'A long string that needs to be wrapped to 80 characters and no more. Put in a link <a href="issue1">issue1</a>. Put in\n'
b080cdb8b199 fix: document/fix wrapped HtmlProperty method.
John Rouillard <rouilj@ieee.org>
parents: 7582
diff changeset
494 '&lt;html&gt; to be escaped. Put in a <a href="https://example.com/link" rel="nofollow noopener">https://example.com/link</a> as well. Let us see if it will wrap\n'
b080cdb8b199 fix: document/fix wrapped HtmlProperty method.
John Rouillard <rouilj@ieee.org>
parents: 7582
diff changeset
495 'properly.')
6339
ab18fe956d45 Test StringHTMLProperty.wrapped(); test url, plain text for rst
John Rouillard <rouilj@ieee.org>
parents: 6338
diff changeset
496
ab18fe956d45 Test StringHTMLProperty.wrapped(); test url, plain text for rst
John Rouillard <rouilj@ieee.org>
parents: 6338
diff changeset
497 p = StringHTMLProperty(self.client, 'test', '1', None, 'test',
ab18fe956d45 Test StringHTMLProperty.wrapped(); test url, plain text for rst
John Rouillard <rouilj@ieee.org>
parents: 6338
diff changeset
498 test_string)
7864
b080cdb8b199 fix: document/fix wrapped HtmlProperty method.
John Rouillard <rouilj@ieee.org>
parents: 7582
diff changeset
499
b080cdb8b199 fix: document/fix wrapped HtmlProperty method.
John Rouillard <rouilj@ieee.org>
parents: 7582
diff changeset
500 for i in [80, 20, 100]:
b080cdb8b199 fix: document/fix wrapped HtmlProperty method.
John Rouillard <rouilj@ieee.org>
parents: 7582
diff changeset
501 wrapped = p.wrapped(columns=i)
b080cdb8b199 fix: document/fix wrapped HtmlProperty method.
John Rouillard <rouilj@ieee.org>
parents: 7582
diff changeset
502 print(wrapped)
b080cdb8b199 fix: document/fix wrapped HtmlProperty method.
John Rouillard <rouilj@ieee.org>
parents: 7582
diff changeset
503 self.assertEqual(wrapped, test_result_wrap[i])
6339
ab18fe956d45 Test StringHTMLProperty.wrapped(); test url, plain text for rst
John Rouillard <rouilj@ieee.org>
parents: 6338
diff changeset
504
5157
ae2a5d1afdd5 adding tests for some StringHTMLProperty methods.
John Rouillard <rouilj@ieee.org>
parents: 5156
diff changeset
505 def test_string_plain_or_hyperlinked(self):
ae2a5d1afdd5 adding tests for some StringHTMLProperty methods.
John Rouillard <rouilj@ieee.org>
parents: 5156
diff changeset
506 ''' test that email obscures the email '''
ae2a5d1afdd5 adding tests for some StringHTMLProperty methods.
John Rouillard <rouilj@ieee.org>
parents: 5156
diff changeset
507 p = StringHTMLProperty(self.client, 'test', '1', None, 'test', 'A string <b> with rouilj@example.com embedded &lt; html</b>')
ae2a5d1afdd5 adding tests for some StringHTMLProperty methods.
John Rouillard <rouilj@ieee.org>
parents: 5156
diff changeset
508 self.assertEqual(p.plain(), 'A string <b> with rouilj@example.com embedded &lt; html</b>')
ae2a5d1afdd5 adding tests for some StringHTMLProperty methods.
John Rouillard <rouilj@ieee.org>
parents: 5156
diff changeset
509 self.assertEqual(p.plain(escape=1), 'A string &lt;b&gt; with rouilj@example.com embedded &amp;lt; html&lt;/b&gt;')
ae2a5d1afdd5 adding tests for some StringHTMLProperty methods.
John Rouillard <rouilj@ieee.org>
parents: 5156
diff changeset
510 self.assertEqual(p.plain(hyperlink=1), 'A string &lt;b&gt; with <a href="mailto:rouilj@example.com">rouilj@example.com</a> embedded &amp;lt; html&lt;/b&gt;')
ae2a5d1afdd5 adding tests for some StringHTMLProperty methods.
John Rouillard <rouilj@ieee.org>
parents: 5156
diff changeset
511 self.assertEqual(p.plain(escape=1, hyperlink=1), 'A string &lt;b&gt; with <a href="mailto:rouilj@example.com">rouilj@example.com</a> embedded &amp;lt; html&lt;/b&gt;')
ae2a5d1afdd5 adding tests for some StringHTMLProperty methods.
John Rouillard <rouilj@ieee.org>
parents: 5156
diff changeset
512
ae2a5d1afdd5 adding tests for some StringHTMLProperty methods.
John Rouillard <rouilj@ieee.org>
parents: 5156
diff changeset
513 self.assertEqual(p.hyperlinked(), 'A string &lt;b&gt; with <a href="mailto:rouilj@example.com">rouilj@example.com</a> embedded &amp;lt; html&lt;/b&gt;')
6338
a70a0c138dd9 Test hyperlinked method on designators
John Rouillard <rouilj@ieee.org>
parents: 6337
diff changeset
514 # check designators
a70a0c138dd9 Test hyperlinked method on designators
John Rouillard <rouilj@ieee.org>
parents: 6337
diff changeset
515 for designator in [ "issue1", "issue 1" ]:
a70a0c138dd9 Test hyperlinked method on designators
John Rouillard <rouilj@ieee.org>
parents: 6337
diff changeset
516 p = StringHTMLProperty(self.client, 'test', '1', None, 'test', designator)
a70a0c138dd9 Test hyperlinked method on designators
John Rouillard <rouilj@ieee.org>
parents: 6337
diff changeset
517 self.assertEqual(p.hyperlinked(),
a70a0c138dd9 Test hyperlinked method on designators
John Rouillard <rouilj@ieee.org>
parents: 6337
diff changeset
518 '<a href="issue1">%s</a>'%designator)
a70a0c138dd9 Test hyperlinked method on designators
John Rouillard <rouilj@ieee.org>
parents: 6337
diff changeset
519
a70a0c138dd9 Test hyperlinked method on designators
John Rouillard <rouilj@ieee.org>
parents: 6337
diff changeset
520 # issue 100 > 10 which is a magic number for the mocked hasnode
a70a0c138dd9 Test hyperlinked method on designators
John Rouillard <rouilj@ieee.org>
parents: 6337
diff changeset
521 # If id number is greater than 10 hasnode reports it does not have
a70a0c138dd9 Test hyperlinked method on designators
John Rouillard <rouilj@ieee.org>
parents: 6337
diff changeset
522 # the node.
a70a0c138dd9 Test hyperlinked method on designators
John Rouillard <rouilj@ieee.org>
parents: 6337
diff changeset
523 for designator in ['issue100', 'issue 100']:
a70a0c138dd9 Test hyperlinked method on designators
John Rouillard <rouilj@ieee.org>
parents: 6337
diff changeset
524 p = StringHTMLProperty(self.client, 'test', '1', None, 'test',
a70a0c138dd9 Test hyperlinked method on designators
John Rouillard <rouilj@ieee.org>
parents: 6337
diff changeset
525 designator)
a70a0c138dd9 Test hyperlinked method on designators
John Rouillard <rouilj@ieee.org>
parents: 6337
diff changeset
526 self.assertEqual(p.hyperlinked(), designator)
a70a0c138dd9 Test hyperlinked method on designators
John Rouillard <rouilj@ieee.org>
parents: 6337
diff changeset
527
a70a0c138dd9 Test hyperlinked method on designators
John Rouillard <rouilj@ieee.org>
parents: 6337
diff changeset
528 # zoom class does not exist
a70a0c138dd9 Test hyperlinked method on designators
John Rouillard <rouilj@ieee.org>
parents: 6337
diff changeset
529 for designator in ['zoom1', 'zoom100', 'zoom 1']:
a70a0c138dd9 Test hyperlinked method on designators
John Rouillard <rouilj@ieee.org>
parents: 6337
diff changeset
530 p = StringHTMLProperty(self.client, 'test', '1', None, 'test',
a70a0c138dd9 Test hyperlinked method on designators
John Rouillard <rouilj@ieee.org>
parents: 6337
diff changeset
531 designator)
a70a0c138dd9 Test hyperlinked method on designators
John Rouillard <rouilj@ieee.org>
parents: 6337
diff changeset
532 self.assertEqual(p.hyperlinked(), designator)
a70a0c138dd9 Test hyperlinked method on designators
John Rouillard <rouilj@ieee.org>
parents: 6337
diff changeset
533
5157
ae2a5d1afdd5 adding tests for some StringHTMLProperty methods.
John Rouillard <rouilj@ieee.org>
parents: 5156
diff changeset
534
6096
c914b3d8362f If rst missing skip; initial attempt to test structuredtext.
John Rouillard <rouilj@ieee.org>
parents: 6095
diff changeset
535 @skip_rst
6095
3ada6a3f48e1 fixed ReStructuredText encoding with Python 3
Christof Meerwald <cmeerw@cmeerw.org>
parents: 6059
diff changeset
536 def test_string_rst(self):
3ada6a3f48e1 fixed ReStructuredText encoding with Python 3
Christof Meerwald <cmeerw@cmeerw.org>
parents: 6059
diff changeset
537 p = StringHTMLProperty(self.client, 'test', '1', None, 'test', u2s(u'A string with cmeerw@example.com *embedded* \u00df'))
6098
72a281a55a17 Disable rst raw and include directives.
John Rouillard <rouilj@ieee.org>
parents: 6097
diff changeset
538
72a281a55a17 Disable rst raw and include directives.
John Rouillard <rouilj@ieee.org>
parents: 6097
diff changeset
539 # test case to make sure include directive is disabled
72a281a55a17 Disable rst raw and include directives.
John Rouillard <rouilj@ieee.org>
parents: 6097
diff changeset
540 q = StringHTMLProperty(self.client, 'test', '1', None, 'test', u2s(u'\n\n.. include:: XyZrMt.html\n\n<badtag>\n\n'))
72a281a55a17 Disable rst raw and include directives.
John Rouillard <rouilj@ieee.org>
parents: 6097
diff changeset
541 q_result=u'''<div class="document">
72a281a55a17 Disable rst raw and include directives.
John Rouillard <rouilj@ieee.org>
parents: 6097
diff changeset
542 <div class="system-message">
72a281a55a17 Disable rst raw and include directives.
John Rouillard <rouilj@ieee.org>
parents: 6097
diff changeset
543 <p class="system-message-title">System Message: WARNING/2 (<tt class="docutils">&lt;string&gt;</tt>, line 3)</p>
72a281a55a17 Disable rst raw and include directives.
John Rouillard <rouilj@ieee.org>
parents: 6097
diff changeset
544 <p>&quot;include&quot; directive disabled.</p>
72a281a55a17 Disable rst raw and include directives.
John Rouillard <rouilj@ieee.org>
parents: 6097
diff changeset
545 <pre class="literal-block">
72a281a55a17 Disable rst raw and include directives.
John Rouillard <rouilj@ieee.org>
parents: 6097
diff changeset
546 .. include:: XyZrMt.html
72a281a55a17 Disable rst raw and include directives.
John Rouillard <rouilj@ieee.org>
parents: 6097
diff changeset
547
72a281a55a17 Disable rst raw and include directives.
John Rouillard <rouilj@ieee.org>
parents: 6097
diff changeset
548 </pre>
72a281a55a17 Disable rst raw and include directives.
John Rouillard <rouilj@ieee.org>
parents: 6097
diff changeset
549 </div>
72a281a55a17 Disable rst raw and include directives.
John Rouillard <rouilj@ieee.org>
parents: 6097
diff changeset
550 <p>&lt;badtag&gt;</p>
72a281a55a17 Disable rst raw and include directives.
John Rouillard <rouilj@ieee.org>
parents: 6097
diff changeset
551 </div>
72a281a55a17 Disable rst raw and include directives.
John Rouillard <rouilj@ieee.org>
parents: 6097
diff changeset
552 '''
72a281a55a17 Disable rst raw and include directives.
John Rouillard <rouilj@ieee.org>
parents: 6097
diff changeset
553
72a281a55a17 Disable rst raw and include directives.
John Rouillard <rouilj@ieee.org>
parents: 6097
diff changeset
554 # test case to make sure raw directive is disabled
72a281a55a17 Disable rst raw and include directives.
John Rouillard <rouilj@ieee.org>
parents: 6097
diff changeset
555 r = StringHTMLProperty(self.client, 'test', '1', None, 'test', u2s(u'\n\n.. raw:: html\n\n <badtag>\n\n'))
72a281a55a17 Disable rst raw and include directives.
John Rouillard <rouilj@ieee.org>
parents: 6097
diff changeset
556 r_result='''<div class="document">
72a281a55a17 Disable rst raw and include directives.
John Rouillard <rouilj@ieee.org>
parents: 6097
diff changeset
557 <div class="system-message">
72a281a55a17 Disable rst raw and include directives.
John Rouillard <rouilj@ieee.org>
parents: 6097
diff changeset
558 <p class="system-message-title">System Message: WARNING/2 (<tt class="docutils">&lt;string&gt;</tt>, line 3)</p>
72a281a55a17 Disable rst raw and include directives.
John Rouillard <rouilj@ieee.org>
parents: 6097
diff changeset
559 <p>&quot;raw&quot; directive disabled.</p>
72a281a55a17 Disable rst raw and include directives.
John Rouillard <rouilj@ieee.org>
parents: 6097
diff changeset
560 <pre class="literal-block">
72a281a55a17 Disable rst raw and include directives.
John Rouillard <rouilj@ieee.org>
parents: 6097
diff changeset
561 .. raw:: html
72a281a55a17 Disable rst raw and include directives.
John Rouillard <rouilj@ieee.org>
parents: 6097
diff changeset
562
72a281a55a17 Disable rst raw and include directives.
John Rouillard <rouilj@ieee.org>
parents: 6097
diff changeset
563 &lt;badtag&gt;
72a281a55a17 Disable rst raw and include directives.
John Rouillard <rouilj@ieee.org>
parents: 6097
diff changeset
564
72a281a55a17 Disable rst raw and include directives.
John Rouillard <rouilj@ieee.org>
parents: 6097
diff changeset
565 </pre>
72a281a55a17 Disable rst raw and include directives.
John Rouillard <rouilj@ieee.org>
parents: 6097
diff changeset
566 </div>
72a281a55a17 Disable rst raw and include directives.
John Rouillard <rouilj@ieee.org>
parents: 6097
diff changeset
567 </div>
72a281a55a17 Disable rst raw and include directives.
John Rouillard <rouilj@ieee.org>
parents: 6097
diff changeset
568 '''
6284
3f7538316724 issue2551099 - disable processing of data url's in markdown.
John Rouillard <rouilj@ieee.org>
parents: 6282
diff changeset
569 # test case to make sure javascript and data url's aren't turned
3f7538316724 issue2551099 - disable processing of data url's in markdown.
John Rouillard <rouilj@ieee.org>
parents: 6282
diff changeset
570 # into links
3f7538316724 issue2551099 - disable processing of data url's in markdown.
John Rouillard <rouilj@ieee.org>
parents: 6282
diff changeset
571 s = StringHTMLProperty(self.client, 'test', '1', None, 'test', u2s(u'<badtag>\njavascript:badcode data:text/plain;base64,SGVsbG8sIFdvcmxkIQ=='))
3f7538316724 issue2551099 - disable processing of data url's in markdown.
John Rouillard <rouilj@ieee.org>
parents: 6282
diff changeset
572 s_result = '<div class="document">\n<p>&lt;badtag&gt;\njavascript:badcode data:text/plain;base64,SGVsbG8sIFdvcmxkIQ==</p>\n</div>\n'
6103
af16c135fb98 url's with javascript scheme should not be links in reST
John Rouillard <rouilj@ieee.org>
parents: 6099
diff changeset
573
6339
ab18fe956d45 Test StringHTMLProperty.wrapped(); test url, plain text for rst
John Rouillard <rouilj@ieee.org>
parents: 6338
diff changeset
574 # test url recognition
ab18fe956d45 Test StringHTMLProperty.wrapped(); test url, plain text for rst
John Rouillard <rouilj@ieee.org>
parents: 6338
diff changeset
575 t = StringHTMLProperty(self.client, 'test', '1', None, 'test', u2s(u'link is https://example.com/link for testing.'))
ab18fe956d45 Test StringHTMLProperty.wrapped(); test url, plain text for rst
John Rouillard <rouilj@ieee.org>
parents: 6338
diff changeset
576 t_result = '<div class="document">\n<p>link is <a class="reference external" href="https://example.com/link">https://example.com/link</a> for testing.</p>\n</div>\n'
ab18fe956d45 Test StringHTMLProperty.wrapped(); test url, plain text for rst
John Rouillard <rouilj@ieee.org>
parents: 6338
diff changeset
577
ab18fe956d45 Test StringHTMLProperty.wrapped(); test url, plain text for rst
John Rouillard <rouilj@ieee.org>
parents: 6338
diff changeset
578 # test text that doesn't need to be processed
ab18fe956d45 Test StringHTMLProperty.wrapped(); test url, plain text for rst
John Rouillard <rouilj@ieee.org>
parents: 6338
diff changeset
579 u = StringHTMLProperty(self.client, 'test', '1', None, 'test', u2s(u'Just a plain old string here. Nothig to process.'))
ab18fe956d45 Test StringHTMLProperty.wrapped(); test url, plain text for rst
John Rouillard <rouilj@ieee.org>
parents: 6338
diff changeset
580 u_result = '<div class="document">\n<p>Just a plain old string here. Nothig to process.</p>\n</div>\n'
ab18fe956d45 Test StringHTMLProperty.wrapped(); test url, plain text for rst
John Rouillard <rouilj@ieee.org>
parents: 6338
diff changeset
581
6099
55c56ceacb8e escape HTML tags in markdown content
Christof Meerwald <cmeerw@cmeerw.org>
parents: 6098
diff changeset
582 self.assertEqual(p.rst(), u2s(u'<div class="document">\n<p>A string with <a class="reference external" href="mailto:cmeerw&#64;example.com">cmeerw&#64;example.com</a> <em>embedded</em> \u00df</p>\n</div>\n'))
55c56ceacb8e escape HTML tags in markdown content
Christof Meerwald <cmeerw@cmeerw.org>
parents: 6098
diff changeset
583 self.assertEqual(q.rst(), u2s(q_result))
55c56ceacb8e escape HTML tags in markdown content
Christof Meerwald <cmeerw@cmeerw.org>
parents: 6098
diff changeset
584 self.assertEqual(r.rst(), u2s(r_result))
6103
af16c135fb98 url's with javascript scheme should not be links in reST
John Rouillard <rouilj@ieee.org>
parents: 6099
diff changeset
585 self.assertEqual(s.rst(), u2s(s_result))
6339
ab18fe956d45 Test StringHTMLProperty.wrapped(); test url, plain text for rst
John Rouillard <rouilj@ieee.org>
parents: 6338
diff changeset
586 self.assertEqual(t.rst(), u2s(t_result))
ab18fe956d45 Test StringHTMLProperty.wrapped(); test url, plain text for rst
John Rouillard <rouilj@ieee.org>
parents: 6338
diff changeset
587 self.assertEqual(u.rst(), u2s(u_result))
6095
3ada6a3f48e1 fixed ReStructuredText encoding with Python 3
Christof Meerwald <cmeerw@cmeerw.org>
parents: 6059
diff changeset
588
5157
ae2a5d1afdd5 adding tests for some StringHTMLProperty methods.
John Rouillard <rouilj@ieee.org>
parents: 5156
diff changeset
589 def test_string_field(self):
ae2a5d1afdd5 adding tests for some StringHTMLProperty methods.
John Rouillard <rouilj@ieee.org>
parents: 5156
diff changeset
590 p = StringHTMLProperty(self.client, 'test', '1', None, 'test', 'A string <b> with rouilj@example.com embedded &lt; html</b>')
8281
669dfccca898 issue2551391 - checkboxes and radiobutton inputs get wrong id's.
John Rouillard <rouilj@ieee.org>
parents: 7936
diff changeset
591 self.assertEqual(p.field(), '<input id="test1@test" name="test1@test" size="30" type="text" value="A string &lt;b&gt; with rouilj@example.com embedded &amp;lt; html&lt;/b&gt;">')
5157
ae2a5d1afdd5 adding tests for some StringHTMLProperty methods.
John Rouillard <rouilj@ieee.org>
parents: 5156
diff changeset
592
ae2a5d1afdd5 adding tests for some StringHTMLProperty methods.
John Rouillard <rouilj@ieee.org>
parents: 5156
diff changeset
593 def test_string_multiline(self):
ae2a5d1afdd5 adding tests for some StringHTMLProperty methods.
John Rouillard <rouilj@ieee.org>
parents: 5156
diff changeset
594 p = StringHTMLProperty(self.client, 'test', '1', None, 'test', 'A string <b> with rouilj@example.com embedded &lt; html</b>')
ae2a5d1afdd5 adding tests for some StringHTMLProperty methods.
John Rouillard <rouilj@ieee.org>
parents: 5156
diff changeset
595 self.assertEqual(p.multiline(), '<textarea name="test1@test" id="test1@test" rows="5" cols="40">A string &lt;b&gt; with rouilj@example.com embedded &amp;lt; html&lt;/b&gt;</textarea>')
ae2a5d1afdd5 adding tests for some StringHTMLProperty methods.
John Rouillard <rouilj@ieee.org>
parents: 5156
diff changeset
596 self.assertEqual(p.multiline(rows=300, cols=100, **{'class':'css_class'}), '<textarea class="css_class" name="test1@test" id="test1@test" rows="300" cols="100">A string &lt;b&gt; with rouilj@example.com embedded &amp;lt; html&lt;/b&gt;</textarea>')
ae2a5d1afdd5 adding tests for some StringHTMLProperty methods.
John Rouillard <rouilj@ieee.org>
parents: 5156
diff changeset
597
3991
13161539e5bd improved URL matching
Richard Jones <richard@users.sourceforge.net>
parents: 3972
diff changeset
598 def test_url_match(self):
13161539e5bd improved URL matching
Richard Jones <richard@users.sourceforge.net>
parents: 3972
diff changeset
599 '''Test the URL regular expression in StringHTMLProperty.
13161539e5bd improved URL matching
Richard Jones <richard@users.sourceforge.net>
parents: 3972
diff changeset
600 '''
4009
e335ce40d6c8 Make URL matching code less matchy
Richard Jones <richard@users.sourceforge.net>
parents: 3991
diff changeset
601 def t(s, nothing=False, **groups):
3991
13161539e5bd improved URL matching
Richard Jones <richard@users.sourceforge.net>
parents: 3972
diff changeset
602 m = StringHTMLProperty.hyper_re.search(s)
4009
e335ce40d6c8 Make URL matching code less matchy
Richard Jones <richard@users.sourceforge.net>
parents: 3991
diff changeset
603 if nothing:
4010
797eacd945af add tests for and fix alex's examples
Richard Jones <richard@users.sourceforge.net>
parents: 4009
diff changeset
604 if m:
5793
6aad7b194e63 replace assertEquals wth assertEqual.
John Rouillard <rouilj@ieee.org>
parents: 5684
diff changeset
605 self.assertEqual(m, None, '%r matched (%r)'%(s, m.groupdict()))
4009
e335ce40d6c8 Make URL matching code less matchy
Richard Jones <richard@users.sourceforge.net>
parents: 3991
diff changeset
606 return
e335ce40d6c8 Make URL matching code less matchy
Richard Jones <richard@users.sourceforge.net>
parents: 3991
diff changeset
607 else:
5795
10747e4e4ec4 replace assertNotEquals with assertNotEqual
John Rouillard <rouilj@ieee.org>
parents: 5793
diff changeset
608 self.assertNotEqual(m, None, '%r did not match'%s)
3991
13161539e5bd improved URL matching
Richard Jones <richard@users.sourceforge.net>
parents: 3972
diff changeset
609 d = m.groupdict()
13161539e5bd improved URL matching
Richard Jones <richard@users.sourceforge.net>
parents: 3972
diff changeset
610 for g in groups:
5793
6aad7b194e63 replace assertEquals wth assertEqual.
John Rouillard <rouilj@ieee.org>
parents: 5684
diff changeset
611 self.assertEqual(d[g], groups[g], '%s %r != %r in %r'%(g, d[g],
3991
13161539e5bd improved URL matching
Richard Jones <richard@users.sourceforge.net>
parents: 3972
diff changeset
612 groups[g], s))
13161539e5bd improved URL matching
Richard Jones <richard@users.sourceforge.net>
parents: 3972
diff changeset
613
13161539e5bd improved URL matching
Richard Jones <richard@users.sourceforge.net>
parents: 3972
diff changeset
614 #t('123.321.123.321', 'url')
6551
f1f8d75edd97 Add variations on test for _hyper_url functons
John Rouillard <rouilj@ieee.org>
parents: 6404
diff changeset
615 t('https://example.com/demo/issue8#24MRV9BZYx:V:1B~sssssssssssssss~4~4', url="https://example.com/demo/issue8#24MRV9BZYx:V:1B~sssssssssssssss~4~4")
4010
797eacd945af add tests for and fix alex's examples
Richard Jones <richard@users.sourceforge.net>
parents: 4009
diff changeset
616 t('http://localhost/', url='http://localhost/')
3991
13161539e5bd improved URL matching
Richard Jones <richard@users.sourceforge.net>
parents: 3972
diff changeset
617 t('http://roundup.net/', url='http://roundup.net/')
4010
797eacd945af add tests for and fix alex's examples
Richard Jones <richard@users.sourceforge.net>
parents: 4009
diff changeset
618 t('http://richard@localhost/', url='http://richard@localhost/')
797eacd945af add tests for and fix alex's examples
Richard Jones <richard@users.sourceforge.net>
parents: 4009
diff changeset
619 t('http://richard:sekrit@localhost/',
797eacd945af add tests for and fix alex's examples
Richard Jones <richard@users.sourceforge.net>
parents: 4009
diff changeset
620 url='http://richard:sekrit@localhost/')
3991
13161539e5bd improved URL matching
Richard Jones <richard@users.sourceforge.net>
parents: 3972
diff changeset
621 t('<HTTP://roundup.net/>', url='HTTP://roundup.net/')
13161539e5bd improved URL matching
Richard Jones <richard@users.sourceforge.net>
parents: 3972
diff changeset
622 t('www.a.ex', url='www.a.ex')
4009
e335ce40d6c8 Make URL matching code less matchy
Richard Jones <richard@users.sourceforge.net>
parents: 3991
diff changeset
623 t('foo.a.ex', nothing=True)
e335ce40d6c8 Make URL matching code less matchy
Richard Jones <richard@users.sourceforge.net>
parents: 3991
diff changeset
624 t('StDevValidTimeSeries.GetObservation', nothing=True)
3991
13161539e5bd improved URL matching
Richard Jones <richard@users.sourceforge.net>
parents: 3972
diff changeset
625 t('http://a.ex', url='http://a.ex')
13161539e5bd improved URL matching
Richard Jones <richard@users.sourceforge.net>
parents: 3972
diff changeset
626 t('http://a.ex/?foo&bar=baz\\.@!$%()qwerty',
13161539e5bd improved URL matching
Richard Jones <richard@users.sourceforge.net>
parents: 3972
diff changeset
627 url='http://a.ex/?foo&bar=baz\\.@!$%()qwerty')
4009
e335ce40d6c8 Make URL matching code less matchy
Richard Jones <richard@users.sourceforge.net>
parents: 3991
diff changeset
628 t('www.foo.net', url='www.foo.net')
3991
13161539e5bd improved URL matching
Richard Jones <richard@users.sourceforge.net>
parents: 3972
diff changeset
629 t('richard@com.example', email='richard@com.example')
13161539e5bd improved URL matching
Richard Jones <richard@users.sourceforge.net>
parents: 3972
diff changeset
630 t('r@a.com', email='r@a.com')
13161539e5bd improved URL matching
Richard Jones <richard@users.sourceforge.net>
parents: 3972
diff changeset
631 t('i1', **{'class':'i', 'id':'1'})
13161539e5bd improved URL matching
Richard Jones <richard@users.sourceforge.net>
parents: 3972
diff changeset
632 t('item123', **{'class':'item', 'id':'123'})
6551
f1f8d75edd97 Add variations on test for _hyper_url functons
John Rouillard <rouilj@ieee.org>
parents: 6404
diff changeset
633 t('item 123', **{'class':'item', 'id':'123'})
4010
797eacd945af add tests for and fix alex's examples
Richard Jones <richard@users.sourceforge.net>
parents: 4009
diff changeset
634 t('www.user:pass@host.net', email='pass@host.net')
797eacd945af add tests for and fix alex's examples
Richard Jones <richard@users.sourceforge.net>
parents: 4009
diff changeset
635 t('user:pass@www.host.net', url='user:pass@www.host.net')
4011
e77bcbdc9b32 add tests for numbers too :)
Richard Jones <richard@users.sourceforge.net>
parents: 4010
diff changeset
636 t('123.35', nothing=True)
e77bcbdc9b32 add tests for numbers too :)
Richard Jones <richard@users.sourceforge.net>
parents: 4010
diff changeset
637 t('-.3535', nothing=True)
3991
13161539e5bd improved URL matching
Richard Jones <richard@users.sourceforge.net>
parents: 3972
diff changeset
638
13161539e5bd improved URL matching
Richard Jones <richard@users.sourceforge.net>
parents: 3972
diff changeset
639 def test_url_replace(self):
13161539e5bd improved URL matching
Richard Jones <richard@users.sourceforge.net>
parents: 3972
diff changeset
640 p = StringHTMLProperty(self.client, 'test', '1', None, 'test', '')
13161539e5bd improved URL matching
Richard Jones <richard@users.sourceforge.net>
parents: 3972
diff changeset
641 def t(s): return p.hyper_re.sub(p._hyper_repl, s)
4413
66603a9051f9 improve handling of '&gt;' when URLs are converted to links
Richard Jones <richard@users.sourceforge.net>
parents: 4391
diff changeset
642 ae = self.assertEqual
6564
21c7c2041a4b issue2551181 - allow issueXXX#fragment to generate a link with fragment
John Rouillard <rouilj@ieee.org>
parents: 6551
diff changeset
643 ae(t('issue5#msg10'), '<a href="issue5#msg10">issue5#msg10</a>')
21c7c2041a4b issue2551181 - allow issueXXX#fragment to generate a link with fragment
John Rouillard <rouilj@ieee.org>
parents: 6551
diff changeset
644 ae(t('issue5'), '<a href="issue5">issue5</a>')
21c7c2041a4b issue2551181 - allow issueXXX#fragment to generate a link with fragment
John Rouillard <rouilj@ieee.org>
parents: 6551
diff changeset
645 ae(t('issue2255'), 'issue2255')
6551
f1f8d75edd97 Add variations on test for _hyper_url functons
John Rouillard <rouilj@ieee.org>
parents: 6404
diff changeset
646 ae(t('foo https://example.com/demo/issue8#24MRV9BZYx:V:1B~sssssssssssssss~4~4 bar'),
f1f8d75edd97 Add variations on test for _hyper_url functons
John Rouillard <rouilj@ieee.org>
parents: 6404
diff changeset
647 'foo <a href="https://example.com/demo/issue8#24MRV9BZYx:V:1B~sssssssssssssss~4~4" rel="nofollow noopener">'
f1f8d75edd97 Add variations on test for _hyper_url functons
John Rouillard <rouilj@ieee.org>
parents: 6404
diff changeset
648 'https://example.com/demo/issue8#24MRV9BZYx:V:1B~sssssssssssssss~4~4</a> bar')
4288
ce684080e968 issue2550549: Some bugs issue classifiers were causing database lookup errors
Richard Jones <richard@users.sourceforge.net>
parents: 4040
diff changeset
649 ae(t('item123123123123'), 'item123123123123')
4391
d5239335fae3 make URL detection a little smarter about brackets per issue2550657
Richard Jones <richard@users.sourceforge.net>
parents: 4288
diff changeset
650 ae(t('http://roundup.net/'),
5684
97e2125e064c When we generate links from URL's in messages, we add rel="nofollow"
John Rouillard <rouilj@ieee.org>
parents: 5649
diff changeset
651 '<a href="http://roundup.net/" rel="nofollow noopener">http://roundup.net/</a>')
4391
d5239335fae3 make URL detection a little smarter about brackets per issue2550657
Richard Jones <richard@users.sourceforge.net>
parents: 4288
diff changeset
652 ae(t('&lt;HTTP://roundup.net/&gt;'),
5684
97e2125e064c When we generate links from URL's in messages, we add rel="nofollow"
John Rouillard <rouilj@ieee.org>
parents: 5649
diff changeset
653 '&lt;<a href="HTTP://roundup.net/" rel="nofollow noopener">HTTP://roundup.net/</a>&gt;')
4414
399569ff4aed - fix small indentation glitch
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents: 4413
diff changeset
654 ae(t('&lt;http://roundup.net/&gt;.'),
5684
97e2125e064c When we generate links from URL's in messages, we add rel="nofollow"
John Rouillard <rouilj@ieee.org>
parents: 5649
diff changeset
655 '&lt;<a href="http://roundup.net/" rel="nofollow noopener">http://roundup.net/</a>&gt;.')
4391
d5239335fae3 make URL detection a little smarter about brackets per issue2550657
Richard Jones <richard@users.sourceforge.net>
parents: 4288
diff changeset
656 ae(t('&lt;www.roundup.net&gt;'),
5684
97e2125e064c When we generate links from URL's in messages, we add rel="nofollow"
John Rouillard <rouilj@ieee.org>
parents: 5649
diff changeset
657 '&lt;<a href="http://www.roundup.net" rel="nofollow noopener">www.roundup.net</a>&gt;')
4391
d5239335fae3 make URL detection a little smarter about brackets per issue2550657
Richard Jones <richard@users.sourceforge.net>
parents: 4288
diff changeset
658 ae(t('(www.roundup.net)'),
5684
97e2125e064c When we generate links from URL's in messages, we add rel="nofollow"
John Rouillard <rouilj@ieee.org>
parents: 5649
diff changeset
659 '(<a href="http://www.roundup.net" rel="nofollow noopener">www.roundup.net</a>)')
4391
d5239335fae3 make URL detection a little smarter about brackets per issue2550657
Richard Jones <richard@users.sourceforge.net>
parents: 4288
diff changeset
660 ae(t('foo http://msdn.microsoft.com/en-us/library/ms741540(VS.85).aspx bar'),
5684
97e2125e064c When we generate links from URL's in messages, we add rel="nofollow"
John Rouillard <rouilj@ieee.org>
parents: 5649
diff changeset
661 'foo <a href="http://msdn.microsoft.com/en-us/library/ms741540(VS.85).aspx" rel="nofollow noopener">'
4391
d5239335fae3 make URL detection a little smarter about brackets per issue2550657
Richard Jones <richard@users.sourceforge.net>
parents: 4288
diff changeset
662 'http://msdn.microsoft.com/en-us/library/ms741540(VS.85).aspx</a> bar')
d5239335fae3 make URL detection a little smarter about brackets per issue2550657
Richard Jones <richard@users.sourceforge.net>
parents: 4288
diff changeset
663 ae(t('(e.g. http://en.wikipedia.org/wiki/Python_(programming_language))'),
5684
97e2125e064c When we generate links from URL's in messages, we add rel="nofollow"
John Rouillard <rouilj@ieee.org>
parents: 5649
diff changeset
664 '(e.g. <a href="http://en.wikipedia.org/wiki/Python_(programming_language)" rel="nofollow noopener">'
4391
d5239335fae3 make URL detection a little smarter about brackets per issue2550657
Richard Jones <richard@users.sourceforge.net>
parents: 4288
diff changeset
665 'http://en.wikipedia.org/wiki/Python_(programming_language)</a>)')
d5239335fae3 make URL detection a little smarter about brackets per issue2550657
Richard Jones <richard@users.sourceforge.net>
parents: 4288
diff changeset
666 ae(t('(e.g. http://en.wikipedia.org/wiki/Python_(programming_language)).'),
5684
97e2125e064c When we generate links from URL's in messages, we add rel="nofollow"
John Rouillard <rouilj@ieee.org>
parents: 5649
diff changeset
667 '(e.g. <a href="http://en.wikipedia.org/wiki/Python_(programming_language)" rel="nofollow noopener">'
4391
d5239335fae3 make URL detection a little smarter about brackets per issue2550657
Richard Jones <richard@users.sourceforge.net>
parents: 4288
diff changeset
668 'http://en.wikipedia.org/wiki/Python_(programming_language)</a>).')
4413
66603a9051f9 improve handling of '&gt;' when URLs are converted to links
Richard Jones <richard@users.sourceforge.net>
parents: 4391
diff changeset
669 ae(t('(e.g. http://en.wikipedia.org/wiki/Python_(programming_language))&gt;.'),
5684
97e2125e064c When we generate links from URL's in messages, we add rel="nofollow"
John Rouillard <rouilj@ieee.org>
parents: 5649
diff changeset
670 '(e.g. <a href="http://en.wikipedia.org/wiki/Python_(programming_language)" rel="nofollow noopener">'
4413
66603a9051f9 improve handling of '&gt;' when URLs are converted to links
Richard Jones <richard@users.sourceforge.net>
parents: 4391
diff changeset
671 'http://en.wikipedia.org/wiki/Python_(programming_language)</a>)&gt;.')
66603a9051f9 improve handling of '&gt;' when URLs are converted to links
Richard Jones <richard@users.sourceforge.net>
parents: 4391
diff changeset
672 ae(t('(e.g. http://en.wikipedia.org/wiki/Python_(programming_language&gt;)).'),
5684
97e2125e064c When we generate links from URL's in messages, we add rel="nofollow"
John Rouillard <rouilj@ieee.org>
parents: 5649
diff changeset
673 '(e.g. <a href="http://en.wikipedia.org/wiki/Python_(programming_language" rel="nofollow noopener">'
4413
66603a9051f9 improve handling of '&gt;' when URLs are converted to links
Richard Jones <richard@users.sourceforge.net>
parents: 4391
diff changeset
674 'http://en.wikipedia.org/wiki/Python_(programming_language</a>&gt;)).')
4647
11b6601629d7 #2550759: Trailing punctuation is no longer included when URLs are converted to links.
Ezio Melotti <ezio.melotti@gmail.com>
parents: 4414
diff changeset
675 for c in '.,;:!':
11b6601629d7 #2550759: Trailing punctuation is no longer included when URLs are converted to links.
Ezio Melotti <ezio.melotti@gmail.com>
parents: 4414
diff changeset
676 # trailing punctuation is not included
11b6601629d7 #2550759: Trailing punctuation is no longer included when URLs are converted to links.
Ezio Melotti <ezio.melotti@gmail.com>
parents: 4414
diff changeset
677 ae(t('http://roundup.net/%c ' % c),
5684
97e2125e064c When we generate links from URL's in messages, we add rel="nofollow"
John Rouillard <rouilj@ieee.org>
parents: 5649
diff changeset
678 '<a href="http://roundup.net/" rel="nofollow noopener">http://roundup.net/</a>%c ' % c)
6551
f1f8d75edd97 Add variations on test for _hyper_url functons
John Rouillard <rouilj@ieee.org>
parents: 6404
diff changeset
679 # trailing punctuation is not included without trailing space
f1f8d75edd97 Add variations on test for _hyper_url functons
John Rouillard <rouilj@ieee.org>
parents: 6404
diff changeset
680 ae(t('http://roundup.net/%c' % c),
f1f8d75edd97 Add variations on test for _hyper_url functons
John Rouillard <rouilj@ieee.org>
parents: 6404
diff changeset
681 '<a href="http://roundup.net/" rel="nofollow noopener">http://roundup.net/</a>%c' % c)
4647
11b6601629d7 #2550759: Trailing punctuation is no longer included when URLs are converted to links.
Ezio Melotti <ezio.melotti@gmail.com>
parents: 4414
diff changeset
682 # but it's included if it's part of the URL
11b6601629d7 #2550759: Trailing punctuation is no longer included when URLs are converted to links.
Ezio Melotti <ezio.melotti@gmail.com>
parents: 4414
diff changeset
683 ae(t('http://roundup.net/%c/' % c),
5684
97e2125e064c When we generate links from URL's in messages, we add rel="nofollow"
John Rouillard <rouilj@ieee.org>
parents: 5649
diff changeset
684 '<a href="http://roundup.net/%c/" rel="nofollow noopener">http://roundup.net/%c/</a>' % (c, c))
6551
f1f8d75edd97 Add variations on test for _hyper_url functons
John Rouillard <rouilj@ieee.org>
parents: 6404
diff changeset
685 # including with a non / terminated path
f1f8d75edd97 Add variations on test for _hyper_url functons
John Rouillard <rouilj@ieee.org>
parents: 6404
diff changeset
686 ae(t('http://roundup.net/test%c ' % c),
f1f8d75edd97 Add variations on test for _hyper_url functons
John Rouillard <rouilj@ieee.org>
parents: 6404
diff changeset
687 '<a href="http://roundup.net/test" rel="nofollow noopener">http://roundup.net/test</a>%c ' % c)
f1f8d75edd97 Add variations on test for _hyper_url functons
John Rouillard <rouilj@ieee.org>
parents: 6404
diff changeset
688 # but it's included if it's part of the URL path
f1f8d75edd97 Add variations on test for _hyper_url functons
John Rouillard <rouilj@ieee.org>
parents: 6404
diff changeset
689 ae(t('http://roundup.net/%ctest' % c),
f1f8d75edd97 Add variations on test for _hyper_url functons
John Rouillard <rouilj@ieee.org>
parents: 6404
diff changeset
690 '<a href="http://roundup.net/%ctest" rel="nofollow noopener">http://roundup.net/%ctest</a>' % (c, c))
f1f8d75edd97 Add variations on test for _hyper_url functons
John Rouillard <rouilj@ieee.org>
parents: 6404
diff changeset
691
3991
13161539e5bd improved URL matching
Richard Jones <richard@users.sourceforge.net>
parents: 3972
diff changeset
692
5989
c475159af6b8 Add test and changelog for html boolean fix.
John Rouillard <rouilj@ieee.org>
parents: 5903
diff changeset
693 def test_input_html4(self):
c475159af6b8 Add test and changelog for html boolean fix.
John Rouillard <rouilj@ieee.org>
parents: 5903
diff changeset
694 # boolean attributes are just the attribute name
c475159af6b8 Add test and changelog for html boolean fix.
John Rouillard <rouilj@ieee.org>
parents: 5903
diff changeset
695 # indicate with attr=None or attr="attr"
c475159af6b8 Add test and changelog for html boolean fix.
John Rouillard <rouilj@ieee.org>
parents: 5903
diff changeset
696 # e.g. disabled
c475159af6b8 Add test and changelog for html boolean fix.
John Rouillard <rouilj@ieee.org>
parents: 5903
diff changeset
697
c475159af6b8 Add test and changelog for html boolean fix.
John Rouillard <rouilj@ieee.org>
parents: 5903
diff changeset
698 input=input_html4(required=None, size=30)
c475159af6b8 Add test and changelog for html boolean fix.
John Rouillard <rouilj@ieee.org>
parents: 5903
diff changeset
699 self.assertEqual(input, '<input required size="30" type="text">')
c475159af6b8 Add test and changelog for html boolean fix.
John Rouillard <rouilj@ieee.org>
parents: 5903
diff changeset
700
c475159af6b8 Add test and changelog for html boolean fix.
John Rouillard <rouilj@ieee.org>
parents: 5903
diff changeset
701 input=input_html4(required="required", size=30)
6059
f0da02e0ca81 Different fix for displaying booleans properly in xhtml vs html
John Rouillard <rouilj@ieee.org>
parents: 5989
diff changeset
702 self.assertEqual(input, '<input required="required" size="30" type="text">')
5989
c475159af6b8 Add test and changelog for html boolean fix.
John Rouillard <rouilj@ieee.org>
parents: 5903
diff changeset
703
c475159af6b8 Add test and changelog for html boolean fix.
John Rouillard <rouilj@ieee.org>
parents: 5903
diff changeset
704 attrs={"required": None, "class": "required", "size": 30}
c475159af6b8 Add test and changelog for html boolean fix.
John Rouillard <rouilj@ieee.org>
parents: 5903
diff changeset
705 input=input_html4(**attrs)
c475159af6b8 Add test and changelog for html boolean fix.
John Rouillard <rouilj@ieee.org>
parents: 5903
diff changeset
706 self.assertEqual(input, '<input class="required" required size="30" type="text">')
c475159af6b8 Add test and changelog for html boolean fix.
John Rouillard <rouilj@ieee.org>
parents: 5903
diff changeset
707
c475159af6b8 Add test and changelog for html boolean fix.
John Rouillard <rouilj@ieee.org>
parents: 5903
diff changeset
708 attrs={"disabled": "disabled", "class": "required", "size": 30}
c475159af6b8 Add test and changelog for html boolean fix.
John Rouillard <rouilj@ieee.org>
parents: 5903
diff changeset
709 input=input_html4(**attrs)
6059
f0da02e0ca81 Different fix for displaying booleans properly in xhtml vs html
John Rouillard <rouilj@ieee.org>
parents: 5989
diff changeset
710 self.assertEqual(input, '<input class="required" disabled="disabled" size="30" type="text">')
5989
c475159af6b8 Add test and changelog for html boolean fix.
John Rouillard <rouilj@ieee.org>
parents: 5903
diff changeset
711
6377
a7e7314fb7d9 issue2551126 - AttributeError: 'str' object has no attribute 'local'.
John Rouillard <rouilj@ieee.org>
parents: 6339
diff changeset
712
a7e7314fb7d9 issue2551126 - AttributeError: 'str' object has no attribute 'local'.
John Rouillard <rouilj@ieee.org>
parents: 6339
diff changeset
713 class HTMLPropertyTestClass(unittest.TestCase):
a7e7314fb7d9 issue2551126 - AttributeError: 'str' object has no attribute 'local'.
John Rouillard <rouilj@ieee.org>
parents: 6339
diff changeset
714 def setUp(self):
a7e7314fb7d9 issue2551126 - AttributeError: 'str' object has no attribute 'local'.
John Rouillard <rouilj@ieee.org>
parents: 6339
diff changeset
715 self.form = FieldStorage()
a7e7314fb7d9 issue2551126 - AttributeError: 'str' object has no attribute 'local'.
John Rouillard <rouilj@ieee.org>
parents: 6339
diff changeset
716 self.client = MockNull()
8285
2bf0c4e7795e fix: issue2551390 - Replace text input/calendar popup with native date input
John Rouillard <rouilj@ieee.org>
parents: 8281
diff changeset
717 self.client.db = db = memorydb.create('admin')
2bf0c4e7795e fix: issue2551390 - Replace text input/calendar popup with native date input
John Rouillard <rouilj@ieee.org>
parents: 8281
diff changeset
718 db.tx_Source = "web"
2bf0c4e7795e fix: issue2551390 - Replace text input/calendar popup with native date input
John Rouillard <rouilj@ieee.org>
parents: 8281
diff changeset
719
2bf0c4e7795e fix: issue2551390 - Replace text input/calendar popup with native date input
John Rouillard <rouilj@ieee.org>
parents: 8281
diff changeset
720 db.issue.addprop(tx_Source=hyperdb.String())
2bf0c4e7795e fix: issue2551390 - Replace text input/calendar popup with native date input
John Rouillard <rouilj@ieee.org>
parents: 8281
diff changeset
721
6377
a7e7314fb7d9 issue2551126 - AttributeError: 'str' object has no attribute 'local'.
John Rouillard <rouilj@ieee.org>
parents: 6339
diff changeset
722 db.security.hasPermission = lambda *args, **kw: True
a7e7314fb7d9 issue2551126 - AttributeError: 'str' object has no attribute 'local'.
John Rouillard <rouilj@ieee.org>
parents: 6339
diff changeset
723 self.client.form = self.form
a7e7314fb7d9 issue2551126 - AttributeError: 'str' object has no attribute 'local'.
John Rouillard <rouilj@ieee.org>
parents: 6339
diff changeset
724
a7e7314fb7d9 issue2551126 - AttributeError: 'str' object has no attribute 'local'.
John Rouillard <rouilj@ieee.org>
parents: 6339
diff changeset
725 self.client._props = MockNull()
a7e7314fb7d9 issue2551126 - AttributeError: 'str' object has no attribute 'local'.
John Rouillard <rouilj@ieee.org>
parents: 6339
diff changeset
726 # add client props for testing anti_csrf_nonce
a7e7314fb7d9 issue2551126 - AttributeError: 'str' object has no attribute 'local'.
John Rouillard <rouilj@ieee.org>
parents: 6339
diff changeset
727 self.client.session_api = MockNull(_sid="1234567890")
a7e7314fb7d9 issue2551126 - AttributeError: 'str' object has no attribute 'local'.
John Rouillard <rouilj@ieee.org>
parents: 6339
diff changeset
728 self.client.db.getuid = lambda : 10
a7e7314fb7d9 issue2551126 - AttributeError: 'str' object has no attribute 'local'.
John Rouillard <rouilj@ieee.org>
parents: 6339
diff changeset
729
8285
2bf0c4e7795e fix: issue2551390 - Replace text input/calendar popup with native date input
John Rouillard <rouilj@ieee.org>
parents: 8281
diff changeset
730 @pytest.fixture(autouse=True)
2bf0c4e7795e fix: issue2551390 - Replace text input/calendar popup with native date input
John Rouillard <rouilj@ieee.org>
parents: 8281
diff changeset
731 def inject_fixtures(self, caplog):
2bf0c4e7795e fix: issue2551390 - Replace text input/calendar popup with native date input
John Rouillard <rouilj@ieee.org>
parents: 8281
diff changeset
732 self._caplog = caplog
2bf0c4e7795e fix: issue2551390 - Replace text input/calendar popup with native date input
John Rouillard <rouilj@ieee.org>
parents: 8281
diff changeset
733
8288
e70dc7c43c9c test: basic testing for BooleanHTMLProperty
John Rouillard <rouilj@ieee.org>
parents: 8287
diff changeset
734 class BooleanHTMLPropertyTestCase(HTMLPropertyTestClass):
e70dc7c43c9c test: basic testing for BooleanHTMLProperty
John Rouillard <rouilj@ieee.org>
parents: 8287
diff changeset
735
e70dc7c43c9c test: basic testing for BooleanHTMLProperty
John Rouillard <rouilj@ieee.org>
parents: 8287
diff changeset
736 def setUp(self):
e70dc7c43c9c test: basic testing for BooleanHTMLProperty
John Rouillard <rouilj@ieee.org>
parents: 8287
diff changeset
737 super(BooleanHTMLPropertyTestCase, self).setUp()
e70dc7c43c9c test: basic testing for BooleanHTMLProperty
John Rouillard <rouilj@ieee.org>
parents: 8287
diff changeset
738
e70dc7c43c9c test: basic testing for BooleanHTMLProperty
John Rouillard <rouilj@ieee.org>
parents: 8287
diff changeset
739 db = self.client.db
e70dc7c43c9c test: basic testing for BooleanHTMLProperty
John Rouillard <rouilj@ieee.org>
parents: 8287
diff changeset
740 db.issue.addprop(boolvalt=hyperdb.Boolean())
e70dc7c43c9c test: basic testing for BooleanHTMLProperty
John Rouillard <rouilj@ieee.org>
parents: 8287
diff changeset
741 db.issue.addprop(boolvalf=hyperdb.Boolean())
e70dc7c43c9c test: basic testing for BooleanHTMLProperty
John Rouillard <rouilj@ieee.org>
parents: 8287
diff changeset
742 db.issue.addprop(boolvalunset=hyperdb.Boolean())
e70dc7c43c9c test: basic testing for BooleanHTMLProperty
John Rouillard <rouilj@ieee.org>
parents: 8287
diff changeset
743
e70dc7c43c9c test: basic testing for BooleanHTMLProperty
John Rouillard <rouilj@ieee.org>
parents: 8287
diff changeset
744 self.client.db.issue.create(title="title",
e70dc7c43c9c test: basic testing for BooleanHTMLProperty
John Rouillard <rouilj@ieee.org>
parents: 8287
diff changeset
745 boolvalt = True,
e70dc7c43c9c test: basic testing for BooleanHTMLProperty
John Rouillard <rouilj@ieee.org>
parents: 8287
diff changeset
746 boolvalf = False)
e70dc7c43c9c test: basic testing for BooleanHTMLProperty
John Rouillard <rouilj@ieee.org>
parents: 8287
diff changeset
747
e70dc7c43c9c test: basic testing for BooleanHTMLProperty
John Rouillard <rouilj@ieee.org>
parents: 8287
diff changeset
748 def tearDown(self):
e70dc7c43c9c test: basic testing for BooleanHTMLProperty
John Rouillard <rouilj@ieee.org>
parents: 8287
diff changeset
749 self.client.db.close()
e70dc7c43c9c test: basic testing for BooleanHTMLProperty
John Rouillard <rouilj@ieee.org>
parents: 8287
diff changeset
750 memorydb.db_nuke('')
e70dc7c43c9c test: basic testing for BooleanHTMLProperty
John Rouillard <rouilj@ieee.org>
parents: 8287
diff changeset
751
e70dc7c43c9c test: basic testing for BooleanHTMLProperty
John Rouillard <rouilj@ieee.org>
parents: 8287
diff changeset
752 testdata = [
e70dc7c43c9c test: basic testing for BooleanHTMLProperty
John Rouillard <rouilj@ieee.org>
parents: 8287
diff changeset
753 ("boolvalt", "Yes", True, False),
e70dc7c43c9c test: basic testing for BooleanHTMLProperty
John Rouillard <rouilj@ieee.org>
parents: 8287
diff changeset
754 ("boolvalf", "No", False, True),
e70dc7c43c9c test: basic testing for BooleanHTMLProperty
John Rouillard <rouilj@ieee.org>
parents: 8287
diff changeset
755 ("boolvalunset", "", False, True),
e70dc7c43c9c test: basic testing for BooleanHTMLProperty
John Rouillard <rouilj@ieee.org>
parents: 8287
diff changeset
756 ]
e70dc7c43c9c test: basic testing for BooleanHTMLProperty
John Rouillard <rouilj@ieee.org>
parents: 8287
diff changeset
757
e70dc7c43c9c test: basic testing for BooleanHTMLProperty
John Rouillard <rouilj@ieee.org>
parents: 8287
diff changeset
758 def test_BoolHTMLRadioButtons(self):
e70dc7c43c9c test: basic testing for BooleanHTMLProperty
John Rouillard <rouilj@ieee.org>
parents: 8287
diff changeset
759 #propname = "boolvalt"
e70dc7c43c9c test: basic testing for BooleanHTMLProperty
John Rouillard <rouilj@ieee.org>
parents: 8287
diff changeset
760
e70dc7c43c9c test: basic testing for BooleanHTMLProperty
John Rouillard <rouilj@ieee.org>
parents: 8287
diff changeset
761 #plainval = "Yes"
e70dc7c43c9c test: basic testing for BooleanHTMLProperty
John Rouillard <rouilj@ieee.org>
parents: 8287
diff changeset
762
e70dc7c43c9c test: basic testing for BooleanHTMLProperty
John Rouillard <rouilj@ieee.org>
parents: 8287
diff changeset
763 self.maxDiff = None
e70dc7c43c9c test: basic testing for BooleanHTMLProperty
John Rouillard <rouilj@ieee.org>
parents: 8287
diff changeset
764 for test_inputs in self.testdata:
e70dc7c43c9c test: basic testing for BooleanHTMLProperty
John Rouillard <rouilj@ieee.org>
parents: 8287
diff changeset
765 params = {
e70dc7c43c9c test: basic testing for BooleanHTMLProperty
John Rouillard <rouilj@ieee.org>
parents: 8287
diff changeset
766 "check1": 'checked="checked" ' if test_inputs[2] else "",
e70dc7c43c9c test: basic testing for BooleanHTMLProperty
John Rouillard <rouilj@ieee.org>
parents: 8287
diff changeset
767 "check2": 'checked="checked" ' if test_inputs[3] else "",
e70dc7c43c9c test: basic testing for BooleanHTMLProperty
John Rouillard <rouilj@ieee.org>
parents: 8287
diff changeset
768 "propname": test_inputs[0],
e70dc7c43c9c test: basic testing for BooleanHTMLProperty
John Rouillard <rouilj@ieee.org>
parents: 8287
diff changeset
769 "plainval": test_inputs[1],
e70dc7c43c9c test: basic testing for BooleanHTMLProperty
John Rouillard <rouilj@ieee.org>
parents: 8287
diff changeset
770
e70dc7c43c9c test: basic testing for BooleanHTMLProperty
John Rouillard <rouilj@ieee.org>
parents: 8287
diff changeset
771 }
e70dc7c43c9c test: basic testing for BooleanHTMLProperty
John Rouillard <rouilj@ieee.org>
parents: 8287
diff changeset
772
e70dc7c43c9c test: basic testing for BooleanHTMLProperty
John Rouillard <rouilj@ieee.org>
parents: 8287
diff changeset
773
e70dc7c43c9c test: basic testing for BooleanHTMLProperty
John Rouillard <rouilj@ieee.org>
parents: 8287
diff changeset
774 test_hyperdbBoolean = self.client.db.issue.getprops("1")[
e70dc7c43c9c test: basic testing for BooleanHTMLProperty
John Rouillard <rouilj@ieee.org>
parents: 8287
diff changeset
775 params['propname']]
e70dc7c43c9c test: basic testing for BooleanHTMLProperty
John Rouillard <rouilj@ieee.org>
parents: 8287
diff changeset
776 test_boolean = self.client.db.issue.get("1", params['propname'])
e70dc7c43c9c test: basic testing for BooleanHTMLProperty
John Rouillard <rouilj@ieee.org>
parents: 8287
diff changeset
777
e70dc7c43c9c test: basic testing for BooleanHTMLProperty
John Rouillard <rouilj@ieee.org>
parents: 8287
diff changeset
778 # client, classname, nodeid, prop, name, value,
e70dc7c43c9c test: basic testing for BooleanHTMLProperty
John Rouillard <rouilj@ieee.org>
parents: 8287
diff changeset
779 # anonymous=0, offset=None
e70dc7c43c9c test: basic testing for BooleanHTMLProperty
John Rouillard <rouilj@ieee.org>
parents: 8287
diff changeset
780 d = BooleanHTMLProperty(self.client, 'issue', '1',
e70dc7c43c9c test: basic testing for BooleanHTMLProperty
John Rouillard <rouilj@ieee.org>
parents: 8287
diff changeset
781 test_hyperdbBoolean,
e70dc7c43c9c test: basic testing for BooleanHTMLProperty
John Rouillard <rouilj@ieee.org>
parents: 8287
diff changeset
782 params['propname'], test_boolean)
e70dc7c43c9c test: basic testing for BooleanHTMLProperty
John Rouillard <rouilj@ieee.org>
parents: 8287
diff changeset
783
e70dc7c43c9c test: basic testing for BooleanHTMLProperty
John Rouillard <rouilj@ieee.org>
parents: 8287
diff changeset
784 self.assertIsInstance(d._value, (type(None), bool))
e70dc7c43c9c test: basic testing for BooleanHTMLProperty
John Rouillard <rouilj@ieee.org>
parents: 8287
diff changeset
785
e70dc7c43c9c test: basic testing for BooleanHTMLProperty
John Rouillard <rouilj@ieee.org>
parents: 8287
diff changeset
786 self.assertEqual(d.plain(), params['plainval'])
e70dc7c43c9c test: basic testing for BooleanHTMLProperty
John Rouillard <rouilj@ieee.org>
parents: 8287
diff changeset
787
e70dc7c43c9c test: basic testing for BooleanHTMLProperty
John Rouillard <rouilj@ieee.org>
parents: 8287
diff changeset
788 input_expected = (
e70dc7c43c9c test: basic testing for BooleanHTMLProperty
John Rouillard <rouilj@ieee.org>
parents: 8287
diff changeset
789 '<input %(check1)sid="issue1@%(propname)s_yes" '
e70dc7c43c9c test: basic testing for BooleanHTMLProperty
John Rouillard <rouilj@ieee.org>
parents: 8287
diff changeset
790 'name="issue1@%(propname)s" type="radio" value="yes">'
e70dc7c43c9c test: basic testing for BooleanHTMLProperty
John Rouillard <rouilj@ieee.org>
parents: 8287
diff changeset
791 '<label class="rblabel" for="issue1@%(propname)s_yes">'
e70dc7c43c9c test: basic testing for BooleanHTMLProperty
John Rouillard <rouilj@ieee.org>
parents: 8287
diff changeset
792 'Yes</label>'
e70dc7c43c9c test: basic testing for BooleanHTMLProperty
John Rouillard <rouilj@ieee.org>
parents: 8287
diff changeset
793 '<input %(check2)sid="issue1@%(propname)s_no" name="issue1@%(propname)s" '
e70dc7c43c9c test: basic testing for BooleanHTMLProperty
John Rouillard <rouilj@ieee.org>
parents: 8287
diff changeset
794 'type="radio" value="no"><label class="rblabel" '
e70dc7c43c9c test: basic testing for BooleanHTMLProperty
John Rouillard <rouilj@ieee.org>
parents: 8287
diff changeset
795 'for="issue1@%(propname)s_no">No</label>') % params
e70dc7c43c9c test: basic testing for BooleanHTMLProperty
John Rouillard <rouilj@ieee.org>
parents: 8287
diff changeset
796
e70dc7c43c9c test: basic testing for BooleanHTMLProperty
John Rouillard <rouilj@ieee.org>
parents: 8287
diff changeset
797 self.assertEqual(d.field(), input_expected)
e70dc7c43c9c test: basic testing for BooleanHTMLProperty
John Rouillard <rouilj@ieee.org>
parents: 8287
diff changeset
798
e70dc7c43c9c test: basic testing for BooleanHTMLProperty
John Rouillard <rouilj@ieee.org>
parents: 8287
diff changeset
799 y_label = ( '<label class="rblabel" for="issue1@%(propname)s_yes">'
e70dc7c43c9c test: basic testing for BooleanHTMLProperty
John Rouillard <rouilj@ieee.org>
parents: 8287
diff changeset
800 'True</label>') % params
e70dc7c43c9c test: basic testing for BooleanHTMLProperty
John Rouillard <rouilj@ieee.org>
parents: 8287
diff changeset
801 n_label = ('<label class="rblabel" '
e70dc7c43c9c test: basic testing for BooleanHTMLProperty
John Rouillard <rouilj@ieee.org>
parents: 8287
diff changeset
802 'for="issue1@%(propname)s_no">False</label>') % params
8289
46886073c665 refactor: change method used to assign radiobuttons for boolean
John Rouillard <rouilj@ieee.org>
parents: 8288
diff changeset
803 u_label = ('<label class="rblabel" '
46886073c665 refactor: change method used to assign radiobuttons for boolean
John Rouillard <rouilj@ieee.org>
parents: 8288
diff changeset
804 'for="issue1@%(propname)s_unk">Ignore</label>') % params
8288
e70dc7c43c9c test: basic testing for BooleanHTMLProperty
John Rouillard <rouilj@ieee.org>
parents: 8287
diff changeset
805
e70dc7c43c9c test: basic testing for BooleanHTMLProperty
John Rouillard <rouilj@ieee.org>
parents: 8287
diff changeset
806 input_expected = (
e70dc7c43c9c test: basic testing for BooleanHTMLProperty
John Rouillard <rouilj@ieee.org>
parents: 8287
diff changeset
807 '<input %(check1)sid="issue1@%(propname)s_yes" '
e70dc7c43c9c test: basic testing for BooleanHTMLProperty
John Rouillard <rouilj@ieee.org>
parents: 8287
diff changeset
808 'name="issue1@%(propname)s" type="radio" value="yes">'
e70dc7c43c9c test: basic testing for BooleanHTMLProperty
John Rouillard <rouilj@ieee.org>
parents: 8287
diff changeset
809 + y_label +
e70dc7c43c9c test: basic testing for BooleanHTMLProperty
John Rouillard <rouilj@ieee.org>
parents: 8287
diff changeset
810 '<input %(check2)sid="issue1@%(propname)s_no" name="issue1@%(propname)s" '
e70dc7c43c9c test: basic testing for BooleanHTMLProperty
John Rouillard <rouilj@ieee.org>
parents: 8287
diff changeset
811 'type="radio" value="no">' + n_label ) % params
e70dc7c43c9c test: basic testing for BooleanHTMLProperty
John Rouillard <rouilj@ieee.org>
parents: 8287
diff changeset
812
e70dc7c43c9c test: basic testing for BooleanHTMLProperty
John Rouillard <rouilj@ieee.org>
parents: 8287
diff changeset
813 self.assertEqual(d.field(y_label=y_label, n_label=n_label), input_expected)
e70dc7c43c9c test: basic testing for BooleanHTMLProperty
John Rouillard <rouilj@ieee.org>
parents: 8287
diff changeset
814
e70dc7c43c9c test: basic testing for BooleanHTMLProperty
John Rouillard <rouilj@ieee.org>
parents: 8287
diff changeset
815
e70dc7c43c9c test: basic testing for BooleanHTMLProperty
John Rouillard <rouilj@ieee.org>
parents: 8287
diff changeset
816 input_expected = (
e70dc7c43c9c test: basic testing for BooleanHTMLProperty
John Rouillard <rouilj@ieee.org>
parents: 8287
diff changeset
817 '<label class="rblabel" for="issue1@%(propname)s_yes">'
e70dc7c43c9c test: basic testing for BooleanHTMLProperty
John Rouillard <rouilj@ieee.org>
parents: 8287
diff changeset
818 'Yes</label>'
e70dc7c43c9c test: basic testing for BooleanHTMLProperty
John Rouillard <rouilj@ieee.org>
parents: 8287
diff changeset
819 '<input %(check1)sid="issue1@%(propname)s_yes" '
e70dc7c43c9c test: basic testing for BooleanHTMLProperty
John Rouillard <rouilj@ieee.org>
parents: 8287
diff changeset
820 'name="issue1@%(propname)s" type="radio" value="yes">'
e70dc7c43c9c test: basic testing for BooleanHTMLProperty
John Rouillard <rouilj@ieee.org>
parents: 8287
diff changeset
821 '<label class="rblabel" '
e70dc7c43c9c test: basic testing for BooleanHTMLProperty
John Rouillard <rouilj@ieee.org>
parents: 8287
diff changeset
822 'for="issue1@%(propname)s_no">No</label>'
e70dc7c43c9c test: basic testing for BooleanHTMLProperty
John Rouillard <rouilj@ieee.org>
parents: 8287
diff changeset
823 '<input %(check2)sid="issue1@%(propname)s_no" '
e70dc7c43c9c test: basic testing for BooleanHTMLProperty
John Rouillard <rouilj@ieee.org>
parents: 8287
diff changeset
824 'name="issue1@%(propname)s" '
e70dc7c43c9c test: basic testing for BooleanHTMLProperty
John Rouillard <rouilj@ieee.org>
parents: 8287
diff changeset
825 'type="radio" value="no">') % params
e70dc7c43c9c test: basic testing for BooleanHTMLProperty
John Rouillard <rouilj@ieee.org>
parents: 8287
diff changeset
826
e70dc7c43c9c test: basic testing for BooleanHTMLProperty
John Rouillard <rouilj@ieee.org>
parents: 8287
diff changeset
827 print(d.field(labelfirst=True))
e70dc7c43c9c test: basic testing for BooleanHTMLProperty
John Rouillard <rouilj@ieee.org>
parents: 8287
diff changeset
828 self.assertEqual(d.field(labelfirst=True), input_expected)
e70dc7c43c9c test: basic testing for BooleanHTMLProperty
John Rouillard <rouilj@ieee.org>
parents: 8287
diff changeset
829
8289
46886073c665 refactor: change method used to assign radiobuttons for boolean
John Rouillard <rouilj@ieee.org>
parents: 8288
diff changeset
830 input_expected = (
46886073c665 refactor: change method used to assign radiobuttons for boolean
John Rouillard <rouilj@ieee.org>
parents: 8288
diff changeset
831 '<label class="rblabel" for="issue1@%(propname)s_unk">'
46886073c665 refactor: change method used to assign radiobuttons for boolean
John Rouillard <rouilj@ieee.org>
parents: 8288
diff changeset
832 'Ignore</label>'
46886073c665 refactor: change method used to assign radiobuttons for boolean
John Rouillard <rouilj@ieee.org>
parents: 8288
diff changeset
833 '<input id="issue1@%(propname)s_unk" '
46886073c665 refactor: change method used to assign radiobuttons for boolean
John Rouillard <rouilj@ieee.org>
parents: 8288
diff changeset
834 'name="issue1@%(propname)s" type="radio" value="">'
46886073c665 refactor: change method used to assign radiobuttons for boolean
John Rouillard <rouilj@ieee.org>
parents: 8288
diff changeset
835 '<input %(check1)sid="issue1@%(propname)s_yes" '
46886073c665 refactor: change method used to assign radiobuttons for boolean
John Rouillard <rouilj@ieee.org>
parents: 8288
diff changeset
836 'name="issue1@%(propname)s" type="radio" value="yes">'
46886073c665 refactor: change method used to assign radiobuttons for boolean
John Rouillard <rouilj@ieee.org>
parents: 8288
diff changeset
837 '<label class="rblabel" for="issue1@%(propname)s_yes">'
46886073c665 refactor: change method used to assign radiobuttons for boolean
John Rouillard <rouilj@ieee.org>
parents: 8288
diff changeset
838 'Yes</label>'
46886073c665 refactor: change method used to assign radiobuttons for boolean
John Rouillard <rouilj@ieee.org>
parents: 8288
diff changeset
839 '<input %(check2)sid="issue1@%(propname)s_no" name="issue1@%(propname)s" '
46886073c665 refactor: change method used to assign radiobuttons for boolean
John Rouillard <rouilj@ieee.org>
parents: 8288
diff changeset
840 'type="radio" value="no"><label class="rblabel" '
46886073c665 refactor: change method used to assign radiobuttons for boolean
John Rouillard <rouilj@ieee.org>
parents: 8288
diff changeset
841 'for="issue1@%(propname)s_no">No</label>') % params
46886073c665 refactor: change method used to assign radiobuttons for boolean
John Rouillard <rouilj@ieee.org>
parents: 8288
diff changeset
842
46886073c665 refactor: change method used to assign radiobuttons for boolean
John Rouillard <rouilj@ieee.org>
parents: 8288
diff changeset
843 self.assertEqual(d.field(u_label=u_label), input_expected)
46886073c665 refactor: change method used to assign radiobuttons for boolean
John Rouillard <rouilj@ieee.org>
parents: 8288
diff changeset
844
46886073c665 refactor: change method used to assign radiobuttons for boolean
John Rouillard <rouilj@ieee.org>
parents: 8288
diff changeset
845
46886073c665 refactor: change method used to assign radiobuttons for boolean
John Rouillard <rouilj@ieee.org>
parents: 8288
diff changeset
846 # one test with the last d is enough.
8288
e70dc7c43c9c test: basic testing for BooleanHTMLProperty
John Rouillard <rouilj@ieee.org>
parents: 8287
diff changeset
847 # check permissions return
e70dc7c43c9c test: basic testing for BooleanHTMLProperty
John Rouillard <rouilj@ieee.org>
parents: 8287
diff changeset
848 is_view_ok_orig = d.is_view_ok
e70dc7c43c9c test: basic testing for BooleanHTMLProperty
John Rouillard <rouilj@ieee.org>
parents: 8287
diff changeset
849 is_edit_ok_orig = d.is_edit_ok
e70dc7c43c9c test: basic testing for BooleanHTMLProperty
John Rouillard <rouilj@ieee.org>
parents: 8287
diff changeset
850 no_access = lambda : False
e70dc7c43c9c test: basic testing for BooleanHTMLProperty
John Rouillard <rouilj@ieee.org>
parents: 8287
diff changeset
851
e70dc7c43c9c test: basic testing for BooleanHTMLProperty
John Rouillard <rouilj@ieee.org>
parents: 8287
diff changeset
852 d.is_view_ok = no_access
e70dc7c43c9c test: basic testing for BooleanHTMLProperty
John Rouillard <rouilj@ieee.org>
parents: 8287
diff changeset
853 self.assertEqual(d.plain(), "[hidden]")
e70dc7c43c9c test: basic testing for BooleanHTMLProperty
John Rouillard <rouilj@ieee.org>
parents: 8287
diff changeset
854
e70dc7c43c9c test: basic testing for BooleanHTMLProperty
John Rouillard <rouilj@ieee.org>
parents: 8287
diff changeset
855 d.is_edit_ok = no_access
e70dc7c43c9c test: basic testing for BooleanHTMLProperty
John Rouillard <rouilj@ieee.org>
parents: 8287
diff changeset
856 self.assertEqual(d.field(), "[hidden]")
e70dc7c43c9c test: basic testing for BooleanHTMLProperty
John Rouillard <rouilj@ieee.org>
parents: 8287
diff changeset
857
e70dc7c43c9c test: basic testing for BooleanHTMLProperty
John Rouillard <rouilj@ieee.org>
parents: 8287
diff changeset
858 d.is_view_ok = is_view_ok_orig
e70dc7c43c9c test: basic testing for BooleanHTMLProperty
John Rouillard <rouilj@ieee.org>
parents: 8287
diff changeset
859 self.assertEqual(d.field(), params['plainval'])
e70dc7c43c9c test: basic testing for BooleanHTMLProperty
John Rouillard <rouilj@ieee.org>
parents: 8287
diff changeset
860 d.is_edit_ok = is_edit_ok_orig
e70dc7c43c9c test: basic testing for BooleanHTMLProperty
John Rouillard <rouilj@ieee.org>
parents: 8287
diff changeset
861
6377
a7e7314fb7d9 issue2551126 - AttributeError: 'str' object has no attribute 'local'.
John Rouillard <rouilj@ieee.org>
parents: 6339
diff changeset
862 class DateHTMLPropertyTestCase(HTMLPropertyTestClass):
a7e7314fb7d9 issue2551126 - AttributeError: 'str' object has no attribute 'local'.
John Rouillard <rouilj@ieee.org>
parents: 6339
diff changeset
863
8285
2bf0c4e7795e fix: issue2551390 - Replace text input/calendar popup with native date input
John Rouillard <rouilj@ieee.org>
parents: 8281
diff changeset
864 def setUp(self):
2bf0c4e7795e fix: issue2551390 - Replace text input/calendar popup with native date input
John Rouillard <rouilj@ieee.org>
parents: 8281
diff changeset
865 super(DateHTMLPropertyTestCase, self).setUp()
2bf0c4e7795e fix: issue2551390 - Replace text input/calendar popup with native date input
John Rouillard <rouilj@ieee.org>
parents: 8281
diff changeset
866
2bf0c4e7795e fix: issue2551390 - Replace text input/calendar popup with native date input
John Rouillard <rouilj@ieee.org>
parents: 8281
diff changeset
867 db = self.client.db
2bf0c4e7795e fix: issue2551390 - Replace text input/calendar popup with native date input
John Rouillard <rouilj@ieee.org>
parents: 8281
diff changeset
868 db.issue.addprop(deadline=hyperdb.Date())
2bf0c4e7795e fix: issue2551390 - Replace text input/calendar popup with native date input
John Rouillard <rouilj@ieee.org>
parents: 8281
diff changeset
869
2bf0c4e7795e fix: issue2551390 - Replace text input/calendar popup with native date input
John Rouillard <rouilj@ieee.org>
parents: 8281
diff changeset
870 self.test_datestring = "2021-01-01.11:22:10"
2bf0c4e7795e fix: issue2551390 - Replace text input/calendar popup with native date input
John Rouillard <rouilj@ieee.org>
parents: 8281
diff changeset
871
2bf0c4e7795e fix: issue2551390 - Replace text input/calendar popup with native date input
John Rouillard <rouilj@ieee.org>
parents: 8281
diff changeset
872 self.client.db.issue.create(title="title",
2bf0c4e7795e fix: issue2551390 - Replace text input/calendar popup with native date input
John Rouillard <rouilj@ieee.org>
parents: 8281
diff changeset
873 deadline=date.Date(self.test_datestring))
2bf0c4e7795e fix: issue2551390 - Replace text input/calendar popup with native date input
John Rouillard <rouilj@ieee.org>
parents: 8281
diff changeset
874 self.client.db.getUserTimezone = lambda: "2"
2bf0c4e7795e fix: issue2551390 - Replace text input/calendar popup with native date input
John Rouillard <rouilj@ieee.org>
parents: 8281
diff changeset
875
2bf0c4e7795e fix: issue2551390 - Replace text input/calendar popup with native date input
John Rouillard <rouilj@ieee.org>
parents: 8281
diff changeset
876 def tearDown(self):
2bf0c4e7795e fix: issue2551390 - Replace text input/calendar popup with native date input
John Rouillard <rouilj@ieee.org>
parents: 8281
diff changeset
877 self.client.db.close()
2bf0c4e7795e fix: issue2551390 - Replace text input/calendar popup with native date input
John Rouillard <rouilj@ieee.org>
parents: 8281
diff changeset
878 memorydb.db_nuke('')
2bf0c4e7795e fix: issue2551390 - Replace text input/calendar popup with native date input
John Rouillard <rouilj@ieee.org>
parents: 8281
diff changeset
879
8300
b99e76e76496 Make native date and number elements configurable
Ralf Schlatterbeck <rsc@runtux.com>
parents: 8289
diff changeset
880 def exp_classhelp(self, cls='issue', prop='deadline', dlm='.'):
b99e76e76496 Make native date and number elements configurable
Ralf Schlatterbeck <rsc@runtux.com>
parents: 8289
diff changeset
881 value = dlm.join (('2021-01-01', '11:22:10'))
b99e76e76496 Make native date and number elements configurable
Ralf Schlatterbeck <rsc@runtux.com>
parents: 8289
diff changeset
882 return ('<a class="classhelp" data-calurl="%(cls)s?'
8317
4455cd036c25 fix: tests for changeset: 8314:7ff47307b4b1 use text for number input
John Rouillard <rouilj@ieee.org>
parents: 8305
diff changeset
883 '@template=calendar&amp;property=%(prop)s&amp;'
8300
b99e76e76496 Make native date and number elements configurable
Ralf Schlatterbeck <rsc@runtux.com>
parents: 8289
diff changeset
884 'form=itemSynopsis&amp;date=%(value)s" '
b99e76e76496 Make native date and number elements configurable
Ralf Schlatterbeck <rsc@runtux.com>
parents: 8289
diff changeset
885 'data-height="200" data-width="300" href="javascript:help_window'
b99e76e76496 Make native date and number elements configurable
Ralf Schlatterbeck <rsc@runtux.com>
parents: 8289
diff changeset
886 '(\'%(cls)s?@template=calendar&amp;property=%(prop)s&amp;'
b99e76e76496 Make native date and number elements configurable
Ralf Schlatterbeck <rsc@runtux.com>
parents: 8289
diff changeset
887 'form=itemSynopsis&date=%(value)s\', 300, 200)">(cal)</a>'
b99e76e76496 Make native date and number elements configurable
Ralf Schlatterbeck <rsc@runtux.com>
parents: 8289
diff changeset
888 ) % {'cls': cls, 'prop': prop, 'value': value}
b99e76e76496 Make native date and number elements configurable
Ralf Schlatterbeck <rsc@runtux.com>
parents: 8289
diff changeset
889
8285
2bf0c4e7795e fix: issue2551390 - Replace text input/calendar popup with native date input
John Rouillard <rouilj@ieee.org>
parents: 8281
diff changeset
890 def test_DateHTMLWithDate(self):
2bf0c4e7795e fix: issue2551390 - Replace text input/calendar popup with native date input
John Rouillard <rouilj@ieee.org>
parents: 8281
diff changeset
891 """Test methods when DateHTMLProperty._value is a hyperdb.Date()
2bf0c4e7795e fix: issue2551390 - Replace text input/calendar popup with native date input
John Rouillard <rouilj@ieee.org>
parents: 8281
diff changeset
892 """
8570
16e8bacb8f90 test: strftime formats; Runtime v Parsing error config.ini windows python
John Rouillard <rouilj@ieee.org>
parents: 8562
diff changeset
893 import sys
16e8bacb8f90 test: strftime formats; Runtime v Parsing error config.ini windows python
John Rouillard <rouilj@ieee.org>
parents: 8562
diff changeset
894
8300
b99e76e76496 Make native date and number elements configurable
Ralf Schlatterbeck <rsc@runtux.com>
parents: 8289
diff changeset
895 self.client.db.config['WEB_USE_BROWSER_DATE_INPUT'] = True
8285
2bf0c4e7795e fix: issue2551390 - Replace text input/calendar popup with native date input
John Rouillard <rouilj@ieee.org>
parents: 8281
diff changeset
896 test_datestring = self.test_datestring
2bf0c4e7795e fix: issue2551390 - Replace text input/calendar popup with native date input
John Rouillard <rouilj@ieee.org>
parents: 8281
diff changeset
897 test_Date = self.client.db.issue.get("1", 'deadline')
2bf0c4e7795e fix: issue2551390 - Replace text input/calendar popup with native date input
John Rouillard <rouilj@ieee.org>
parents: 8281
diff changeset
898 test_hyperdbDate = self.client.db.issue.getprops("1")['deadline']
2bf0c4e7795e fix: issue2551390 - Replace text input/calendar popup with native date input
John Rouillard <rouilj@ieee.org>
parents: 8281
diff changeset
899
2bf0c4e7795e fix: issue2551390 - Replace text input/calendar popup with native date input
John Rouillard <rouilj@ieee.org>
parents: 8281
diff changeset
900 self.client.classname = "issue"
2bf0c4e7795e fix: issue2551390 - Replace text input/calendar popup with native date input
John Rouillard <rouilj@ieee.org>
parents: 8281
diff changeset
901 self.client.template = "item"
2bf0c4e7795e fix: issue2551390 - Replace text input/calendar popup with native date input
John Rouillard <rouilj@ieee.org>
parents: 8281
diff changeset
902
2bf0c4e7795e fix: issue2551390 - Replace text input/calendar popup with native date input
John Rouillard <rouilj@ieee.org>
parents: 8281
diff changeset
903 # client, classname, nodeid, prop, name, value,
2bf0c4e7795e fix: issue2551390 - Replace text input/calendar popup with native date input
John Rouillard <rouilj@ieee.org>
parents: 8281
diff changeset
904 # anonymous=0, offset=None
2bf0c4e7795e fix: issue2551390 - Replace text input/calendar popup with native date input
John Rouillard <rouilj@ieee.org>
parents: 8281
diff changeset
905 d = DateHTMLProperty(self.client, 'issue', '1', test_hyperdbDate,
2bf0c4e7795e fix: issue2551390 - Replace text input/calendar popup with native date input
John Rouillard <rouilj@ieee.org>
parents: 8281
diff changeset
906 'deadline', test_Date)
2bf0c4e7795e fix: issue2551390 - Replace text input/calendar popup with native date input
John Rouillard <rouilj@ieee.org>
parents: 8281
diff changeset
907 self.assertIsInstance(d._value, date.Date)
2bf0c4e7795e fix: issue2551390 - Replace text input/calendar popup with native date input
John Rouillard <rouilj@ieee.org>
parents: 8281
diff changeset
908 self.assertEqual(d.pretty(), " 1 January 2021")
8570
16e8bacb8f90 test: strftime formats; Runtime v Parsing error config.ini windows python
John Rouillard <rouilj@ieee.org>
parents: 8562
diff changeset
909 if sys.platform != "win32": # %2d not supported on windows
16e8bacb8f90 test: strftime formats; Runtime v Parsing error config.ini windows python
John Rouillard <rouilj@ieee.org>
parents: 8562
diff changeset
910 self.assertEqual(d.pretty("%2d %B %Y"), "01 January 2021")
16e8bacb8f90 test: strftime formats; Runtime v Parsing error config.ini windows python
John Rouillard <rouilj@ieee.org>
parents: 8562
diff changeset
911 self.assertEqual(d.pretty("%d %B %Y"), " 1 January 2021")
8285
2bf0c4e7795e fix: issue2551390 - Replace text input/calendar popup with native date input
John Rouillard <rouilj@ieee.org>
parents: 8281
diff changeset
912 self.assertEqual(d.pretty(format="%Y-%m"), "2021-01")
2bf0c4e7795e fix: issue2551390 - Replace text input/calendar popup with native date input
John Rouillard <rouilj@ieee.org>
parents: 8281
diff changeset
913 self.assertEqual(d.plain(), "2021-01-01.13:22:10")
2bf0c4e7795e fix: issue2551390 - Replace text input/calendar popup with native date input
John Rouillard <rouilj@ieee.org>
parents: 8281
diff changeset
914 self.assertEqual(d.local("-4").plain(), "2021-01-01.07:22:10")
2bf0c4e7795e fix: issue2551390 - Replace text input/calendar popup with native date input
John Rouillard <rouilj@ieee.org>
parents: 8281
diff changeset
915 input_expected = """<input id="issue1@deadline" name="issue1@deadline" size="30" type="date" value="2021-01-01">"""
8300
b99e76e76496 Make native date and number elements configurable
Ralf Schlatterbeck <rsc@runtux.com>
parents: 8289
diff changeset
916 self.assertEqual(d.field(display_time=False), input_expected)
8285
2bf0c4e7795e fix: issue2551390 - Replace text input/calendar popup with native date input
John Rouillard <rouilj@ieee.org>
parents: 8281
diff changeset
917
8300
b99e76e76496 Make native date and number elements configurable
Ralf Schlatterbeck <rsc@runtux.com>
parents: 8289
diff changeset
918 input_expected = '<input id="issue1@deadline" name="issue1@deadline" '\
b99e76e76496 Make native date and number elements configurable
Ralf Schlatterbeck <rsc@runtux.com>
parents: 8289
diff changeset
919 'size="30" type="datetime-local" value="2021-01-01T13:22:10">'
b99e76e76496 Make native date and number elements configurable
Ralf Schlatterbeck <rsc@runtux.com>
parents: 8289
diff changeset
920 self.assertEqual(d.field(), input_expected)
8285
2bf0c4e7795e fix: issue2551390 - Replace text input/calendar popup with native date input
John Rouillard <rouilj@ieee.org>
parents: 8281
diff changeset
921
8300
b99e76e76496 Make native date and number elements configurable
Ralf Schlatterbeck <rsc@runtux.com>
parents: 8289
diff changeset
922 input_expected = '<input id="issue1@deadline" name="issue1@deadline" '\
b99e76e76496 Make native date and number elements configurable
Ralf Schlatterbeck <rsc@runtux.com>
parents: 8289
diff changeset
923 'size="30" type="text" value="2021-01-01.13:22:10">'
b99e76e76496 Make native date and number elements configurable
Ralf Schlatterbeck <rsc@runtux.com>
parents: 8289
diff changeset
924 field = d.field(format='%Y-%m-%d.%H:%M:%S', popcal=False)
b99e76e76496 Make native date and number elements configurable
Ralf Schlatterbeck <rsc@runtux.com>
parents: 8289
diff changeset
925 self.assertEqual(field, input_expected)
8285
2bf0c4e7795e fix: issue2551390 - Replace text input/calendar popup with native date input
John Rouillard <rouilj@ieee.org>
parents: 8281
diff changeset
926
2bf0c4e7795e fix: issue2551390 - Replace text input/calendar popup with native date input
John Rouillard <rouilj@ieee.org>
parents: 8281
diff changeset
927 # test with format
8300
b99e76e76496 Make native date and number elements configurable
Ralf Schlatterbeck <rsc@runtux.com>
parents: 8289
diff changeset
928 input_expected = '<input id="issue1@deadline" name="issue1@deadline" '\
b99e76e76496 Make native date and number elements configurable
Ralf Schlatterbeck <rsc@runtux.com>
parents: 8289
diff changeset
929 'size="30" type="text" value="2021-01">' + self.exp_classhelp()
8285
2bf0c4e7795e fix: issue2551390 - Replace text input/calendar popup with native date input
John Rouillard <rouilj@ieee.org>
parents: 8281
diff changeset
930
8300
b99e76e76496 Make native date and number elements configurable
Ralf Schlatterbeck <rsc@runtux.com>
parents: 8289
diff changeset
931 self.assertEqual(d.field(format="%Y-%m"), input_expected)
8285
2bf0c4e7795e fix: issue2551390 - Replace text input/calendar popup with native date input
John Rouillard <rouilj@ieee.org>
parents: 8281
diff changeset
932
8300
b99e76e76496 Make native date and number elements configurable
Ralf Schlatterbeck <rsc@runtux.com>
parents: 8289
diff changeset
933 input_expected = '<input id="issue1@deadline" name="issue1@deadline" '\
b99e76e76496 Make native date and number elements configurable
Ralf Schlatterbeck <rsc@runtux.com>
parents: 8289
diff changeset
934 'size="30" type="text" value="2021-01">'
8285
2bf0c4e7795e fix: issue2551390 - Replace text input/calendar popup with native date input
John Rouillard <rouilj@ieee.org>
parents: 8281
diff changeset
935
8300
b99e76e76496 Make native date and number elements configurable
Ralf Schlatterbeck <rsc@runtux.com>
parents: 8289
diff changeset
936 input = d.field(format="%Y-%m", popcal=False)
b99e76e76496 Make native date and number elements configurable
Ralf Schlatterbeck <rsc@runtux.com>
parents: 8289
diff changeset
937 self.assertEqual(input, input_expected)
8285
2bf0c4e7795e fix: issue2551390 - Replace text input/calendar popup with native date input
John Rouillard <rouilj@ieee.org>
parents: 8281
diff changeset
938
6377
a7e7314fb7d9 issue2551126 - AttributeError: 'str' object has no attribute 'local'.
John Rouillard <rouilj@ieee.org>
parents: 6339
diff changeset
939 def test_DateHTMLWithText(self):
a7e7314fb7d9 issue2551126 - AttributeError: 'str' object has no attribute 'local'.
John Rouillard <rouilj@ieee.org>
parents: 6339
diff changeset
940 """Test methods when DateHTMLProperty._value is a string
a7e7314fb7d9 issue2551126 - AttributeError: 'str' object has no attribute 'local'.
John Rouillard <rouilj@ieee.org>
parents: 6339
diff changeset
941 rather than a hyperdb.Date()
a7e7314fb7d9 issue2551126 - AttributeError: 'str' object has no attribute 'local'.
John Rouillard <rouilj@ieee.org>
parents: 6339
diff changeset
942 """
a7e7314fb7d9 issue2551126 - AttributeError: 'str' object has no attribute 'local'.
John Rouillard <rouilj@ieee.org>
parents: 6339
diff changeset
943 test_datestring = "2021-01-01 11:22:10"
a7e7314fb7d9 issue2551126 - AttributeError: 'str' object has no attribute 'local'.
John Rouillard <rouilj@ieee.org>
parents: 6339
diff changeset
944 test_date = hyperdb.Date("2")
a7e7314fb7d9 issue2551126 - AttributeError: 'str' object has no attribute 'local'.
John Rouillard <rouilj@ieee.org>
parents: 6339
diff changeset
945
a7e7314fb7d9 issue2551126 - AttributeError: 'str' object has no attribute 'local'.
John Rouillard <rouilj@ieee.org>
parents: 6339
diff changeset
946 self.form.list.append(MiniFieldStorage("test1@test", test_datestring))
a7e7314fb7d9 issue2551126 - AttributeError: 'str' object has no attribute 'local'.
John Rouillard <rouilj@ieee.org>
parents: 6339
diff changeset
947 self.client._props=test_date
8300
b99e76e76496 Make native date and number elements configurable
Ralf Schlatterbeck <rsc@runtux.com>
parents: 8289
diff changeset
948 self.client.db.config['WEB_USE_BROWSER_DATE_INPUT'] = False
6377
a7e7314fb7d9 issue2551126 - AttributeError: 'str' object has no attribute 'local'.
John Rouillard <rouilj@ieee.org>
parents: 6339
diff changeset
949
a7e7314fb7d9 issue2551126 - AttributeError: 'str' object has no attribute 'local'.
John Rouillard <rouilj@ieee.org>
parents: 6339
diff changeset
950 self.client.db.classes = dict \
a7e7314fb7d9 issue2551126 - AttributeError: 'str' object has no attribute 'local'.
John Rouillard <rouilj@ieee.org>
parents: 6339
diff changeset
951 ( test = MockNull(getprops = lambda : test_date)
a7e7314fb7d9 issue2551126 - AttributeError: 'str' object has no attribute 'local'.
John Rouillard <rouilj@ieee.org>
parents: 6339
diff changeset
952 )
a7e7314fb7d9 issue2551126 - AttributeError: 'str' object has no attribute 'local'.
John Rouillard <rouilj@ieee.org>
parents: 6339
diff changeset
953
8285
2bf0c4e7795e fix: issue2551390 - Replace text input/calendar popup with native date input
John Rouillard <rouilj@ieee.org>
parents: 8281
diff changeset
954 self.client.classname = "test"
2bf0c4e7795e fix: issue2551390 - Replace text input/calendar popup with native date input
John Rouillard <rouilj@ieee.org>
parents: 8281
diff changeset
955 self.client.template = "item"
2bf0c4e7795e fix: issue2551390 - Replace text input/calendar popup with native date input
John Rouillard <rouilj@ieee.org>
parents: 8281
diff changeset
956
6377
a7e7314fb7d9 issue2551126 - AttributeError: 'str' object has no attribute 'local'.
John Rouillard <rouilj@ieee.org>
parents: 6339
diff changeset
957 # client, classname, nodeid, prop, name, value,
a7e7314fb7d9 issue2551126 - AttributeError: 'str' object has no attribute 'local'.
John Rouillard <rouilj@ieee.org>
parents: 6339
diff changeset
958 # anonymous=0, offset=None
a7e7314fb7d9 issue2551126 - AttributeError: 'str' object has no attribute 'local'.
John Rouillard <rouilj@ieee.org>
parents: 6339
diff changeset
959 d = DateHTMLProperty(self.client, 'test', '1', self.client._props,
a7e7314fb7d9 issue2551126 - AttributeError: 'str' object has no attribute 'local'.
John Rouillard <rouilj@ieee.org>
parents: 6339
diff changeset
960 'test', '')
a7e7314fb7d9 issue2551126 - AttributeError: 'str' object has no attribute 'local'.
John Rouillard <rouilj@ieee.org>
parents: 6339
diff changeset
961 self.assertIs(type(d._value), str)
a7e7314fb7d9 issue2551126 - AttributeError: 'str' object has no attribute 'local'.
John Rouillard <rouilj@ieee.org>
parents: 6339
diff changeset
962 self.assertEqual(d.pretty(), "2021-01-01 11:22:10")
a7e7314fb7d9 issue2551126 - AttributeError: 'str' object has no attribute 'local'.
John Rouillard <rouilj@ieee.org>
parents: 6339
diff changeset
963 self.assertEqual(d.plain(), "2021-01-01 11:22:10")
8300
b99e76e76496 Make native date and number elements configurable
Ralf Schlatterbeck <rsc@runtux.com>
parents: 8289
diff changeset
964 input_expected = '<input id="test1@test" name="test1@test" size="30" '\
b99e76e76496 Make native date and number elements configurable
Ralf Schlatterbeck <rsc@runtux.com>
parents: 8289
diff changeset
965 'type="text" value="2021-01-01 11:22:10">'
b99e76e76496 Make native date and number elements configurable
Ralf Schlatterbeck <rsc@runtux.com>
parents: 8289
diff changeset
966 self.assertEqual(d.field(popcal=False), input_expected)
b99e76e76496 Make native date and number elements configurable
Ralf Schlatterbeck <rsc@runtux.com>
parents: 8289
diff changeset
967 self.client.db.config['WEB_USE_BROWSER_DATE_INPUT'] = True
b99e76e76496 Make native date and number elements configurable
Ralf Schlatterbeck <rsc@runtux.com>
parents: 8289
diff changeset
968 input_expected = '<input id="test1@test" name="test1@test" size="30" '\
b99e76e76496 Make native date and number elements configurable
Ralf Schlatterbeck <rsc@runtux.com>
parents: 8289
diff changeset
969 'type="datetime-local" value="2021-01-01 11:22:10">'
b99e76e76496 Make native date and number elements configurable
Ralf Schlatterbeck <rsc@runtux.com>
parents: 8289
diff changeset
970 self.assertEqual(d.field(), input_expected)
b99e76e76496 Make native date and number elements configurable
Ralf Schlatterbeck <rsc@runtux.com>
parents: 8289
diff changeset
971 self.client.db.config['WEB_USE_BROWSER_DATE_INPUT'] = False
8285
2bf0c4e7795e fix: issue2551390 - Replace text input/calendar popup with native date input
John Rouillard <rouilj@ieee.org>
parents: 8281
diff changeset
972
8300
b99e76e76496 Make native date and number elements configurable
Ralf Schlatterbeck <rsc@runtux.com>
parents: 8289
diff changeset
973 input_expected = '<input id="test1@test" name="test1@test" size="40" '\
b99e76e76496 Make native date and number elements configurable
Ralf Schlatterbeck <rsc@runtux.com>
parents: 8289
diff changeset
974 'type="text" value="2021-01-01 11:22:10">'
b99e76e76496 Make native date and number elements configurable
Ralf Schlatterbeck <rsc@runtux.com>
parents: 8289
diff changeset
975 self.assertEqual(d.field(size=40, popcal=False), input_expected)
8285
2bf0c4e7795e fix: issue2551390 - Replace text input/calendar popup with native date input
John Rouillard <rouilj@ieee.org>
parents: 8281
diff changeset
976
8300
b99e76e76496 Make native date and number elements configurable
Ralf Schlatterbeck <rsc@runtux.com>
parents: 8289
diff changeset
977 input_expected = ('<input id="test1@test" name="test1@test" size="30" '
b99e76e76496 Make native date and number elements configurable
Ralf Schlatterbeck <rsc@runtux.com>
parents: 8289
diff changeset
978 'type="text" value="2021-01-01 11:22:10">'
b99e76e76496 Make native date and number elements configurable
Ralf Schlatterbeck <rsc@runtux.com>
parents: 8289
diff changeset
979 + self.exp_classhelp(cls='test', prop='test', dlm=' '))
b99e76e76496 Make native date and number elements configurable
Ralf Schlatterbeck <rsc@runtux.com>
parents: 8289
diff changeset
980 self.maxDiff=None
b99e76e76496 Make native date and number elements configurable
Ralf Schlatterbeck <rsc@runtux.com>
parents: 8289
diff changeset
981 self.assertEqual(d.field(format="%Y-%m"), input_expected)
8285
2bf0c4e7795e fix: issue2551390 - Replace text input/calendar popup with native date input
John Rouillard <rouilj@ieee.org>
parents: 8281
diff changeset
982
8300
b99e76e76496 Make native date and number elements configurable
Ralf Schlatterbeck <rsc@runtux.com>
parents: 8289
diff changeset
983 # format always uses type="text" even when date input is set
b99e76e76496 Make native date and number elements configurable
Ralf Schlatterbeck <rsc@runtux.com>
parents: 8289
diff changeset
984 self.client.db.config['WEB_USE_BROWSER_DATE_INPUT'] = True
b99e76e76496 Make native date and number elements configurable
Ralf Schlatterbeck <rsc@runtux.com>
parents: 8289
diff changeset
985 result = d.field(format="%Y-%m-%d", popcal=False)
b99e76e76496 Make native date and number elements configurable
Ralf Schlatterbeck <rsc@runtux.com>
parents: 8289
diff changeset
986 input_expected = '<input id="test1@test" name="test1@test" size="30" '\
b99e76e76496 Make native date and number elements configurable
Ralf Schlatterbeck <rsc@runtux.com>
parents: 8289
diff changeset
987 'type="text" value="2021-01-01 11:22:10">'
8285
2bf0c4e7795e fix: issue2551390 - Replace text input/calendar popup with native date input
John Rouillard <rouilj@ieee.org>
parents: 8281
diff changeset
988 self.assertEqual(result, input_expected)
2bf0c4e7795e fix: issue2551390 - Replace text input/calendar popup with native date input
John Rouillard <rouilj@ieee.org>
parents: 8281
diff changeset
989
8300
b99e76e76496 Make native date and number elements configurable
Ralf Schlatterbeck <rsc@runtux.com>
parents: 8289
diff changeset
990 input_expected = ('<input id="test1@test" name="test1@test" size="30" '
b99e76e76496 Make native date and number elements configurable
Ralf Schlatterbeck <rsc@runtux.com>
parents: 8289
diff changeset
991 'type="text" value="2021-01-01 11:22:10">'
b99e76e76496 Make native date and number elements configurable
Ralf Schlatterbeck <rsc@runtux.com>
parents: 8289
diff changeset
992 + self.exp_classhelp(cls='test', prop='test', dlm=' '))
b99e76e76496 Make native date and number elements configurable
Ralf Schlatterbeck <rsc@runtux.com>
parents: 8289
diff changeset
993 self.assertEqual(d.field(format="%Y-%m"), input_expected)
8285
2bf0c4e7795e fix: issue2551390 - Replace text input/calendar popup with native date input
John Rouillard <rouilj@ieee.org>
parents: 8281
diff changeset
994
8300
b99e76e76496 Make native date and number elements configurable
Ralf Schlatterbeck <rsc@runtux.com>
parents: 8289
diff changeset
995 result = d.field(format="%Y-%m-%dT%H:%M:%S", popcal=False)
b99e76e76496 Make native date and number elements configurable
Ralf Schlatterbeck <rsc@runtux.com>
parents: 8289
diff changeset
996 input_expected = '<input id="test1@test" name="test1@test" size="30" '\
b99e76e76496 Make native date and number elements configurable
Ralf Schlatterbeck <rsc@runtux.com>
parents: 8289
diff changeset
997 'type="text" value="2021-01-01 11:22:10">'
8285
2bf0c4e7795e fix: issue2551390 - Replace text input/calendar popup with native date input
John Rouillard <rouilj@ieee.org>
parents: 8281
diff changeset
998 self.assertEqual(result, input_expected)
2bf0c4e7795e fix: issue2551390 - Replace text input/calendar popup with native date input
John Rouillard <rouilj@ieee.org>
parents: 8281
diff changeset
999
6099
55c56ceacb8e escape HTML tags in markdown content
Christof Meerwald <cmeerw@cmeerw.org>
parents: 6098
diff changeset
1000 # common markdown test cases
55c56ceacb8e escape HTML tags in markdown content
Christof Meerwald <cmeerw@cmeerw.org>
parents: 6098
diff changeset
1001 class MarkdownTests:
6282
d30501bafdfb issue2551098: markdown links missing rel="noreferer nofollow"
John Rouillard <rouilj@ieee.org>
parents: 6280
diff changeset
1002 def mangleMarkdown2(self, s):
d30501bafdfb issue2551098: markdown links missing rel="noreferer nofollow"
John Rouillard <rouilj@ieee.org>
parents: 6280
diff changeset
1003 ''' markdown2's rel=nofollow support on 'a' tags isn't programmable.
d30501bafdfb issue2551098: markdown links missing rel="noreferer nofollow"
John Rouillard <rouilj@ieee.org>
parents: 6280
diff changeset
1004 So we are using it's builtin nofollow support. Mangle the string
d30501bafdfb issue2551098: markdown links missing rel="noreferer nofollow"
John Rouillard <rouilj@ieee.org>
parents: 6280
diff changeset
1005 so that it matches the test case.
d30501bafdfb issue2551098: markdown links missing rel="noreferer nofollow"
John Rouillard <rouilj@ieee.org>
parents: 6280
diff changeset
1006
d30501bafdfb issue2551098: markdown links missing rel="noreferer nofollow"
John Rouillard <rouilj@ieee.org>
parents: 6280
diff changeset
1007 turn: <a rel="nofollow" href="foo"> into
d30501bafdfb issue2551098: markdown links missing rel="noreferer nofollow"
John Rouillard <rouilj@ieee.org>
parents: 6280
diff changeset
1008 <a href="foo" rel="nofollow noopener">
d30501bafdfb issue2551098: markdown links missing rel="noreferer nofollow"
John Rouillard <rouilj@ieee.org>
parents: 6280
diff changeset
1009
d30501bafdfb issue2551098: markdown links missing rel="noreferer nofollow"
John Rouillard <rouilj@ieee.org>
parents: 6280
diff changeset
1010 Also if it is a mailto url, we don't expect rel="nofollow",
d30501bafdfb issue2551098: markdown links missing rel="noreferer nofollow"
John Rouillard <rouilj@ieee.org>
parents: 6280
diff changeset
1011 so delete it.
d30501bafdfb issue2551098: markdown links missing rel="noreferer nofollow"
John Rouillard <rouilj@ieee.org>
parents: 6280
diff changeset
1012
d30501bafdfb issue2551098: markdown links missing rel="noreferer nofollow"
John Rouillard <rouilj@ieee.org>
parents: 6280
diff changeset
1013 turn: <a rel="nofollow" href="mailto:foo"> into
d30501bafdfb issue2551098: markdown links missing rel="noreferer nofollow"
John Rouillard <rouilj@ieee.org>
parents: 6280
diff changeset
1014 <a href="mailto:foo">
d30501bafdfb issue2551098: markdown links missing rel="noreferer nofollow"
John Rouillard <rouilj@ieee.org>
parents: 6280
diff changeset
1015
d30501bafdfb issue2551098: markdown links missing rel="noreferer nofollow"
John Rouillard <rouilj@ieee.org>
parents: 6280
diff changeset
1016 Also when a title is present it is put in a different place
d30501bafdfb issue2551098: markdown links missing rel="noreferer nofollow"
John Rouillard <rouilj@ieee.org>
parents: 6280
diff changeset
1017 from markdown, so fix it to normalize.
d30501bafdfb issue2551098: markdown links missing rel="noreferer nofollow"
John Rouillard <rouilj@ieee.org>
parents: 6280
diff changeset
1018
d30501bafdfb issue2551098: markdown links missing rel="noreferer nofollow"
John Rouillard <rouilj@ieee.org>
parents: 6280
diff changeset
1019 turn:
d30501bafdfb issue2551098: markdown links missing rel="noreferer nofollow"
John Rouillard <rouilj@ieee.org>
parents: 6280
diff changeset
1020
d30501bafdfb issue2551098: markdown links missing rel="noreferer nofollow"
John Rouillard <rouilj@ieee.org>
parents: 6280
diff changeset
1021 <a rel="nofollow" href="http://example.com/" title="a title">
d30501bafdfb issue2551098: markdown links missing rel="noreferer nofollow"
John Rouillard <rouilj@ieee.org>
parents: 6280
diff changeset
1022 into
d30501bafdfb issue2551098: markdown links missing rel="noreferer nofollow"
John Rouillard <rouilj@ieee.org>
parents: 6280
diff changeset
1023 <a href="http://example.com/" rel="nofollow noopener" title="a title">
d30501bafdfb issue2551098: markdown links missing rel="noreferer nofollow"
John Rouillard <rouilj@ieee.org>
parents: 6280
diff changeset
1024 '''
d30501bafdfb issue2551098: markdown links missing rel="noreferer nofollow"
John Rouillard <rouilj@ieee.org>
parents: 6280
diff changeset
1025 if type(self) == Markdown2TestCase and s.find('a rel="nofollow"') != -1:
d30501bafdfb issue2551098: markdown links missing rel="noreferer nofollow"
John Rouillard <rouilj@ieee.org>
parents: 6280
diff changeset
1026 if s.find('href="mailto:') == -1:
d30501bafdfb issue2551098: markdown links missing rel="noreferer nofollow"
John Rouillard <rouilj@ieee.org>
parents: 6280
diff changeset
1027 # not a mailto url
d30501bafdfb issue2551098: markdown links missing rel="noreferer nofollow"
John Rouillard <rouilj@ieee.org>
parents: 6280
diff changeset
1028 if 'rel="nofollow"' in s:
d30501bafdfb issue2551098: markdown links missing rel="noreferer nofollow"
John Rouillard <rouilj@ieee.org>
parents: 6280
diff changeset
1029 if 'title="' in s:
d30501bafdfb issue2551098: markdown links missing rel="noreferer nofollow"
John Rouillard <rouilj@ieee.org>
parents: 6280
diff changeset
1030 s = s.replace(' rel="nofollow" ', ' ').replace(' title=', ' rel="nofollow noopener" title=')
d30501bafdfb issue2551098: markdown links missing rel="noreferer nofollow"
John Rouillard <rouilj@ieee.org>
parents: 6280
diff changeset
1031 else:
d30501bafdfb issue2551098: markdown links missing rel="noreferer nofollow"
John Rouillard <rouilj@ieee.org>
parents: 6280
diff changeset
1032 s = s.replace(' rel="nofollow" ', ' ').replace('">', '" rel="nofollow noopener">')
d30501bafdfb issue2551098: markdown links missing rel="noreferer nofollow"
John Rouillard <rouilj@ieee.org>
parents: 6280
diff changeset
1033
d30501bafdfb issue2551098: markdown links missing rel="noreferer nofollow"
John Rouillard <rouilj@ieee.org>
parents: 6280
diff changeset
1034 return s
d30501bafdfb issue2551098: markdown links missing rel="noreferer nofollow"
John Rouillard <rouilj@ieee.org>
parents: 6280
diff changeset
1035 else:
d30501bafdfb issue2551098: markdown links missing rel="noreferer nofollow"
John Rouillard <rouilj@ieee.org>
parents: 6280
diff changeset
1036 # a mailto url
d30501bafdfb issue2551098: markdown links missing rel="noreferer nofollow"
John Rouillard <rouilj@ieee.org>
parents: 6280
diff changeset
1037 return s.replace(' rel="nofollow" ', ' ')
d30501bafdfb issue2551098: markdown links missing rel="noreferer nofollow"
John Rouillard <rouilj@ieee.org>
parents: 6280
diff changeset
1038 return s
d30501bafdfb issue2551098: markdown links missing rel="noreferer nofollow"
John Rouillard <rouilj@ieee.org>
parents: 6280
diff changeset
1039
d30501bafdfb issue2551098: markdown links missing rel="noreferer nofollow"
John Rouillard <rouilj@ieee.org>
parents: 6280
diff changeset
1040
6099
55c56ceacb8e escape HTML tags in markdown content
Christof Meerwald <cmeerw@cmeerw.org>
parents: 6098
diff changeset
1041 def test_string_markdown(self):
6104
a1fd9551d416 don't allow javascript URLs in markdown content
Christof Meerwald <cmeerw@cmeerw.org>
parents: 6103
diff changeset
1042 p = StringHTMLProperty(self.client, 'test', '1', None, 'test', u2s(u'A string with <br> *embedded* \u00df'))
a1fd9551d416 don't allow javascript URLs in markdown content
Christof Meerwald <cmeerw@cmeerw.org>
parents: 6103
diff changeset
1043 self.assertEqual(p.markdown().strip(), u2s(u'<p>A string with &lt;br&gt; <em>embedded</em> \u00df</p>'))
a1fd9551d416 don't allow javascript URLs in markdown content
Christof Meerwald <cmeerw@cmeerw.org>
parents: 6103
diff changeset
1044
a1fd9551d416 don't allow javascript URLs in markdown content
Christof Meerwald <cmeerw@cmeerw.org>
parents: 6103
diff changeset
1045 def test_string_markdown_link(self):
7561
91725f12b239 Support markdown2 2.4.10, 2.4.8- and exclude 2.4.9
John Rouillard <rouilj@ieee.org>
parents: 7032
diff changeset
1046 p = StringHTMLProperty(self.client, 'test', '1', None, 'test',
91725f12b239 Support markdown2 2.4.10, 2.4.8- and exclude 2.4.9
John Rouillard <rouilj@ieee.org>
parents: 7032
diff changeset
1047 u2s(u'A link <http://localhost>'))
91725f12b239 Support markdown2 2.4.10, 2.4.8- and exclude 2.4.9
John Rouillard <rouilj@ieee.org>
parents: 7032
diff changeset
1048 m = p.markdown().strip()
91725f12b239 Support markdown2 2.4.10, 2.4.8- and exclude 2.4.9
John Rouillard <rouilj@ieee.org>
parents: 7032
diff changeset
1049 m = self.mangleMarkdown2(m)
91725f12b239 Support markdown2 2.4.10, 2.4.8- and exclude 2.4.9
John Rouillard <rouilj@ieee.org>
parents: 7032
diff changeset
1050
91725f12b239 Support markdown2 2.4.10, 2.4.8- and exclude 2.4.9
John Rouillard <rouilj@ieee.org>
parents: 7032
diff changeset
1051 self.assertEqual( u2s(u'<p>A link <a href="http://localhost" rel="nofollow noopener">http://localhost</a></p>'), m)
6104
a1fd9551d416 don't allow javascript URLs in markdown content
Christof Meerwald <cmeerw@cmeerw.org>
parents: 6103
diff changeset
1052
6336
6f89cdc7c938 issue2551108 - fix markdown formatted designator links
John Rouillard <rouilj@ieee.org>
parents: 6299
diff changeset
1053 def test_string_markdown_link_item(self):
6f89cdc7c938 issue2551108 - fix markdown formatted designator links
John Rouillard <rouilj@ieee.org>
parents: 6299
diff changeset
1054 """ The link formats for the different markdown engines changes.
6f89cdc7c938 issue2551108 - fix markdown formatted designator links
John Rouillard <rouilj@ieee.org>
parents: 6299
diff changeset
1055 Order of attributes, value for rel (noopener, nofollow etc)
6f89cdc7c938 issue2551108 - fix markdown formatted designator links
John Rouillard <rouilj@ieee.org>
parents: 6299
diff changeset
1056 is different. So most tests check for a substring that indicates
6f89cdc7c938 issue2551108 - fix markdown formatted designator links
John Rouillard <rouilj@ieee.org>
parents: 6299
diff changeset
1057 success rather than the entire returned string.
6f89cdc7c938 issue2551108 - fix markdown formatted designator links
John Rouillard <rouilj@ieee.org>
parents: 6299
diff changeset
1058 """
7561
91725f12b239 Support markdown2 2.4.10, 2.4.8- and exclude 2.4.9
John Rouillard <rouilj@ieee.org>
parents: 7032
diff changeset
1059 p = StringHTMLProperty(self.client, 'test', '1', None, 'test',
91725f12b239 Support markdown2 2.4.10, 2.4.8- and exclude 2.4.9
John Rouillard <rouilj@ieee.org>
parents: 7032
diff changeset
1060 u2s(u'An issue1 link'))
6336
6f89cdc7c938 issue2551108 - fix markdown formatted designator links
John Rouillard <rouilj@ieee.org>
parents: 6299
diff changeset
1061 self.assertIn( u2s(u'href="issue1"'), p.markdown().strip())
6f89cdc7c938 issue2551108 - fix markdown formatted designator links
John Rouillard <rouilj@ieee.org>
parents: 6299
diff changeset
1062 # just verify that plain linking is working
6f89cdc7c938 issue2551108 - fix markdown formatted designator links
John Rouillard <rouilj@ieee.org>
parents: 6299
diff changeset
1063 self.assertIn( u2s(u'href="issue1"'), p.plain(hyperlink=1))
6f89cdc7c938 issue2551108 - fix markdown formatted designator links
John Rouillard <rouilj@ieee.org>
parents: 6299
diff changeset
1064
7561
91725f12b239 Support markdown2 2.4.10, 2.4.8- and exclude 2.4.9
John Rouillard <rouilj@ieee.org>
parents: 7032
diff changeset
1065 p = StringHTMLProperty(self.client, 'test', '1', None, 'test',
91725f12b239 Support markdown2 2.4.10, 2.4.8- and exclude 2.4.9
John Rouillard <rouilj@ieee.org>
parents: 7032
diff changeset
1066 u2s(u'An [issue1](issue1) link'))
6336
6f89cdc7c938 issue2551108 - fix markdown formatted designator links
John Rouillard <rouilj@ieee.org>
parents: 6299
diff changeset
1067 self.assertIn( u2s(u'href="issue1"'), p.markdown().strip())
6f89cdc7c938 issue2551108 - fix markdown formatted designator links
John Rouillard <rouilj@ieee.org>
parents: 6299
diff changeset
1068 # just verify that plain linking is working
6f89cdc7c938 issue2551108 - fix markdown formatted designator links
John Rouillard <rouilj@ieee.org>
parents: 6299
diff changeset
1069 self.assertIn( u2s(u'href="issue1"'), p.plain(hyperlink=1))
6f89cdc7c938 issue2551108 - fix markdown formatted designator links
John Rouillard <rouilj@ieee.org>
parents: 6299
diff changeset
1070
7561
91725f12b239 Support markdown2 2.4.10, 2.4.8- and exclude 2.4.9
John Rouillard <rouilj@ieee.org>
parents: 7032
diff changeset
1071 p = StringHTMLProperty(
91725f12b239 Support markdown2 2.4.10, 2.4.8- and exclude 2.4.9
John Rouillard <rouilj@ieee.org>
parents: 7032
diff changeset
1072 self.client, 'test', '1', None, 'test',
91725f12b239 Support markdown2 2.4.10, 2.4.8- and exclude 2.4.9
John Rouillard <rouilj@ieee.org>
parents: 7032
diff changeset
1073 u2s(u'An [issue1](https://example.com/issue1) link'))
91725f12b239 Support markdown2 2.4.10, 2.4.8- and exclude 2.4.9
John Rouillard <rouilj@ieee.org>
parents: 7032
diff changeset
1074 self.assertIn( u2s(u'href="https://example.com/issue1"'),
91725f12b239 Support markdown2 2.4.10, 2.4.8- and exclude 2.4.9
John Rouillard <rouilj@ieee.org>
parents: 7032
diff changeset
1075 p.markdown().strip())
91725f12b239 Support markdown2 2.4.10, 2.4.8- and exclude 2.4.9
John Rouillard <rouilj@ieee.org>
parents: 7032
diff changeset
1076
91725f12b239 Support markdown2 2.4.10, 2.4.8- and exclude 2.4.9
John Rouillard <rouilj@ieee.org>
parents: 7032
diff changeset
1077 p = StringHTMLProperty(self.client, 'test', '1', None, 'test',
91725f12b239 Support markdown2 2.4.10, 2.4.8- and exclude 2.4.9
John Rouillard <rouilj@ieee.org>
parents: 7032
diff changeset
1078 u2s(u'An [issu1](#example) link'))
91725f12b239 Support markdown2 2.4.10, 2.4.8- and exclude 2.4.9
John Rouillard <rouilj@ieee.org>
parents: 7032
diff changeset
1079 self.assertIn( u2s(u'href="#example"'), p.markdown().strip())
91725f12b239 Support markdown2 2.4.10, 2.4.8- and exclude 2.4.9
John Rouillard <rouilj@ieee.org>
parents: 7032
diff changeset
1080
91725f12b239 Support markdown2 2.4.10, 2.4.8- and exclude 2.4.9
John Rouillard <rouilj@ieee.org>
parents: 7032
diff changeset
1081 p = StringHTMLProperty(self.client, 'test', '1', None, 'test',
91725f12b239 Support markdown2 2.4.10, 2.4.8- and exclude 2.4.9
John Rouillard <rouilj@ieee.org>
parents: 7032
diff changeset
1082 u2s(u'An [issu1](/example) link'))
91725f12b239 Support markdown2 2.4.10, 2.4.8- and exclude 2.4.9
John Rouillard <rouilj@ieee.org>
parents: 7032
diff changeset
1083 self.assertIn( u2s(u'href="/example"'), p.markdown().strip())
6336
6f89cdc7c938 issue2551108 - fix markdown formatted designator links
John Rouillard <rouilj@ieee.org>
parents: 6299
diff changeset
1084
7561
91725f12b239 Support markdown2 2.4.10, 2.4.8- and exclude 2.4.9
John Rouillard <rouilj@ieee.org>
parents: 7032
diff changeset
1085 p = StringHTMLProperty(self.client, 'test', '1', None, 'test',
91725f12b239 Support markdown2 2.4.10, 2.4.8- and exclude 2.4.9
John Rouillard <rouilj@ieee.org>
parents: 7032
diff changeset
1086 u2s(u'An [issu1](./example) link'))
91725f12b239 Support markdown2 2.4.10, 2.4.8- and exclude 2.4.9
John Rouillard <rouilj@ieee.org>
parents: 7032
diff changeset
1087 self.assertIn( u2s(u'href="./example"'), p.markdown().strip())
91725f12b239 Support markdown2 2.4.10, 2.4.8- and exclude 2.4.9
John Rouillard <rouilj@ieee.org>
parents: 7032
diff changeset
1088
91725f12b239 Support markdown2 2.4.10, 2.4.8- and exclude 2.4.9
John Rouillard <rouilj@ieee.org>
parents: 7032
diff changeset
1089 p = StringHTMLProperty(self.client, 'test', '1', None, 'test',
91725f12b239 Support markdown2 2.4.10, 2.4.8- and exclude 2.4.9
John Rouillard <rouilj@ieee.org>
parents: 7032
diff changeset
1090 u2s(u'An [issu1](../example) link'))
91725f12b239 Support markdown2 2.4.10, 2.4.8- and exclude 2.4.9
John Rouillard <rouilj@ieee.org>
parents: 7032
diff changeset
1091 self.assertIn( u2s(u'href="../example"'), p.markdown().strip())
91725f12b239 Support markdown2 2.4.10, 2.4.8- and exclude 2.4.9
John Rouillard <rouilj@ieee.org>
parents: 7032
diff changeset
1092
91725f12b239 Support markdown2 2.4.10, 2.4.8- and exclude 2.4.9
John Rouillard <rouilj@ieee.org>
parents: 7032
diff changeset
1093 p = StringHTMLProperty(
91725f12b239 Support markdown2 2.4.10, 2.4.8- and exclude 2.4.9
John Rouillard <rouilj@ieee.org>
parents: 7032
diff changeset
1094 self.client, 'test', '1', None, 'test',
91725f12b239 Support markdown2 2.4.10, 2.4.8- and exclude 2.4.9
John Rouillard <rouilj@ieee.org>
parents: 7032
diff changeset
1095 u2s(u'A [wuarchive_ftp](ftp://www.wustl.gov/file) link'))
91725f12b239 Support markdown2 2.4.10, 2.4.8- and exclude 2.4.9
John Rouillard <rouilj@ieee.org>
parents: 7032
diff changeset
1096 self.assertIn( u2s(u'href="ftp://www.wustl.gov/file"'),
91725f12b239 Support markdown2 2.4.10, 2.4.8- and exclude 2.4.9
John Rouillard <rouilj@ieee.org>
parents: 7032
diff changeset
1097 p.markdown().strip())
91725f12b239 Support markdown2 2.4.10, 2.4.8- and exclude 2.4.9
John Rouillard <rouilj@ieee.org>
parents: 7032
diff changeset
1098
91725f12b239 Support markdown2 2.4.10, 2.4.8- and exclude 2.4.9
John Rouillard <rouilj@ieee.org>
parents: 7032
diff changeset
1099 p = StringHTMLProperty(
91725f12b239 Support markdown2 2.4.10, 2.4.8- and exclude 2.4.9
John Rouillard <rouilj@ieee.org>
parents: 7032
diff changeset
1100 self.client, 'test', '1', None, 'test',
91725f12b239 Support markdown2 2.4.10, 2.4.8- and exclude 2.4.9
John Rouillard <rouilj@ieee.org>
parents: 7032
diff changeset
1101 u2s(u'An [issue1] (https://example.com/issue1) link'))
6336
6f89cdc7c938 issue2551108 - fix markdown formatted designator links
John Rouillard <rouilj@ieee.org>
parents: 6299
diff changeset
1102 self.assertIn( u2s(u'href="issue1"'), p.markdown().strip())
6f89cdc7c938 issue2551108 - fix markdown formatted designator links
John Rouillard <rouilj@ieee.org>
parents: 6299
diff changeset
1103 if type(self) == MistuneTestCase:
6f89cdc7c938 issue2551108 - fix markdown formatted designator links
John Rouillard <rouilj@ieee.org>
parents: 6299
diff changeset
1104 # mistune makes the https url into a real link
7561
91725f12b239 Support markdown2 2.4.10, 2.4.8- and exclude 2.4.9
John Rouillard <rouilj@ieee.org>
parents: 7032
diff changeset
1105 self.assertIn( u2s(u'href="https://example.com/issue1"'),
91725f12b239 Support markdown2 2.4.10, 2.4.8- and exclude 2.4.9
John Rouillard <rouilj@ieee.org>
parents: 7032
diff changeset
1106 p.markdown().strip())
6336
6f89cdc7c938 issue2551108 - fix markdown formatted designator links
John Rouillard <rouilj@ieee.org>
parents: 6299
diff changeset
1107 else:
6f89cdc7c938 issue2551108 - fix markdown formatted designator links
John Rouillard <rouilj@ieee.org>
parents: 6299
diff changeset
1108 # the other two engines leave the parenthesized url as is.
7561
91725f12b239 Support markdown2 2.4.10, 2.4.8- and exclude 2.4.9
John Rouillard <rouilj@ieee.org>
parents: 7032
diff changeset
1109 self.assertIn( u2s(u' (https://example.com/issue1) link'),
91725f12b239 Support markdown2 2.4.10, 2.4.8- and exclude 2.4.9
John Rouillard <rouilj@ieee.org>
parents: 7032
diff changeset
1110 p.markdown().strip())
6336
6f89cdc7c938 issue2551108 - fix markdown formatted designator links
John Rouillard <rouilj@ieee.org>
parents: 6299
diff changeset
1111
7561
91725f12b239 Support markdown2 2.4.10, 2.4.8- and exclude 2.4.9
John Rouillard <rouilj@ieee.org>
parents: 7032
diff changeset
1112 p = StringHTMLProperty(self.client, 'test', '1', None, 'test',
91725f12b239 Support markdown2 2.4.10, 2.4.8- and exclude 2.4.9
John Rouillard <rouilj@ieee.org>
parents: 7032
diff changeset
1113 u2s(u'An [issu1](.../example) link'))
91725f12b239 Support markdown2 2.4.10, 2.4.8- and exclude 2.4.9
John Rouillard <rouilj@ieee.org>
parents: 7032
diff changeset
1114 if (isinstance(self, Markdown2TestCase) and
91725f12b239 Support markdown2 2.4.10, 2.4.8- and exclude 2.4.9
John Rouillard <rouilj@ieee.org>
parents: 7032
diff changeset
1115 md2__version_info__ > (2, 4, 9)):
91725f12b239 Support markdown2 2.4.10, 2.4.8- and exclude 2.4.9
John Rouillard <rouilj@ieee.org>
parents: 7032
diff changeset
1116 # markdown2 > 2.4.9 handles this differently
91725f12b239 Support markdown2 2.4.10, 2.4.8- and exclude 2.4.9
John Rouillard <rouilj@ieee.org>
parents: 7032
diff changeset
1117 self.assertIn( u2s(u'href="#"'), p.markdown().strip())
91725f12b239 Support markdown2 2.4.10, 2.4.8- and exclude 2.4.9
John Rouillard <rouilj@ieee.org>
parents: 7032
diff changeset
1118 else:
91725f12b239 Support markdown2 2.4.10, 2.4.8- and exclude 2.4.9
John Rouillard <rouilj@ieee.org>
parents: 7032
diff changeset
1119 self.assertIn( u2s(u'href=".../example"'), p.markdown().strip())
91725f12b239 Support markdown2 2.4.10, 2.4.8- and exclude 2.4.9
John Rouillard <rouilj@ieee.org>
parents: 7032
diff changeset
1120
91725f12b239 Support markdown2 2.4.10, 2.4.8- and exclude 2.4.9
John Rouillard <rouilj@ieee.org>
parents: 7032
diff changeset
1121 p = StringHTMLProperty(self.client, 'test', '1', None, 'test',
91725f12b239 Support markdown2 2.4.10, 2.4.8- and exclude 2.4.9
John Rouillard <rouilj@ieee.org>
parents: 7032
diff changeset
1122 u2s(u'A [phone](tel:0016175555555) link'))
91725f12b239 Support markdown2 2.4.10, 2.4.8- and exclude 2.4.9
John Rouillard <rouilj@ieee.org>
parents: 7032
diff changeset
1123 if (isinstance(self, Markdown2TestCase) and
91725f12b239 Support markdown2 2.4.10, 2.4.8- and exclude 2.4.9
John Rouillard <rouilj@ieee.org>
parents: 7032
diff changeset
1124 md2__version_info__ > (2, 4, 9)):
91725f12b239 Support markdown2 2.4.10, 2.4.8- and exclude 2.4.9
John Rouillard <rouilj@ieee.org>
parents: 7032
diff changeset
1125 self.assertIn(u2s(u'href="#"'), p.markdown().strip())
91725f12b239 Support markdown2 2.4.10, 2.4.8- and exclude 2.4.9
John Rouillard <rouilj@ieee.org>
parents: 7032
diff changeset
1126 else:
91725f12b239 Support markdown2 2.4.10, 2.4.8- and exclude 2.4.9
John Rouillard <rouilj@ieee.org>
parents: 7032
diff changeset
1127 self.assertIn( u2s(u'href="tel:0016175555555"'),
91725f12b239 Support markdown2 2.4.10, 2.4.8- and exclude 2.4.9
John Rouillard <rouilj@ieee.org>
parents: 7032
diff changeset
1128 p.markdown().strip())
91725f12b239 Support markdown2 2.4.10, 2.4.8- and exclude 2.4.9
John Rouillard <rouilj@ieee.org>
parents: 7032
diff changeset
1129
91725f12b239 Support markdown2 2.4.10, 2.4.8- and exclude 2.4.9
John Rouillard <rouilj@ieee.org>
parents: 7032
diff changeset
1130 def test_string_email_markdown_link(self):
6109
b108c9fc7aea fix test for Python 2
Christof Meerwald <cmeerw@cmeerw.org>
parents: 6104
diff changeset
1131 # markdown2 and markdown escape the email address
6104
a1fd9551d416 don't allow javascript URLs in markdown content
Christof Meerwald <cmeerw@cmeerw.org>
parents: 6103
diff changeset
1132 try:
6109
b108c9fc7aea fix test for Python 2
Christof Meerwald <cmeerw@cmeerw.org>
parents: 6104
diff changeset
1133 from html import unescape as html_unescape
b108c9fc7aea fix test for Python 2
Christof Meerwald <cmeerw@cmeerw.org>
parents: 6104
diff changeset
1134 except ImportError:
6104
a1fd9551d416 don't allow javascript URLs in markdown content
Christof Meerwald <cmeerw@cmeerw.org>
parents: 6103
diff changeset
1135 from HTMLParser import HTMLParser
a1fd9551d416 don't allow javascript URLs in markdown content
Christof Meerwald <cmeerw@cmeerw.org>
parents: 6103
diff changeset
1136 html_unescape = HTMLParser().unescape
a1fd9551d416 don't allow javascript URLs in markdown content
Christof Meerwald <cmeerw@cmeerw.org>
parents: 6103
diff changeset
1137
7561
91725f12b239 Support markdown2 2.4.10, 2.4.8- and exclude 2.4.9
John Rouillard <rouilj@ieee.org>
parents: 7032
diff changeset
1138 p = StringHTMLProperty(self.client, 'test', '1', None, 'test',
91725f12b239 Support markdown2 2.4.10, 2.4.8- and exclude 2.4.9
John Rouillard <rouilj@ieee.org>
parents: 7032
diff changeset
1139 u2s(u'A link <cmeerw@example.com>'))
6282
d30501bafdfb issue2551098: markdown links missing rel="noreferer nofollow"
John Rouillard <rouilj@ieee.org>
parents: 6280
diff changeset
1140 m = html_unescape(p.markdown().strip())
d30501bafdfb issue2551098: markdown links missing rel="noreferer nofollow"
John Rouillard <rouilj@ieee.org>
parents: 6280
diff changeset
1141 m = self.mangleMarkdown2(m)
d30501bafdfb issue2551098: markdown links missing rel="noreferer nofollow"
John Rouillard <rouilj@ieee.org>
parents: 6280
diff changeset
1142
d30501bafdfb issue2551098: markdown links missing rel="noreferer nofollow"
John Rouillard <rouilj@ieee.org>
parents: 6280
diff changeset
1143 self.assertEqual(m, u2s(u'<p>A link <a href="mailto:cmeerw@example.com">cmeerw@example.com</a></p>'))
6104
a1fd9551d416 don't allow javascript URLs in markdown content
Christof Meerwald <cmeerw@cmeerw.org>
parents: 6103
diff changeset
1144
7561
91725f12b239 Support markdown2 2.4.10, 2.4.8- and exclude 2.4.9
John Rouillard <rouilj@ieee.org>
parents: 7032
diff changeset
1145 p = StringHTMLProperty(
91725f12b239 Support markdown2 2.4.10, 2.4.8- and exclude 2.4.9
John Rouillard <rouilj@ieee.org>
parents: 7032
diff changeset
1146 self.client, 'test', '1', None, 'test',
91725f12b239 Support markdown2 2.4.10, 2.4.8- and exclude 2.4.9
John Rouillard <rouilj@ieee.org>
parents: 7032
diff changeset
1147 u2s(u'An bare email baduser@daemons.com link'))
91725f12b239 Support markdown2 2.4.10, 2.4.8- and exclude 2.4.9
John Rouillard <rouilj@ieee.org>
parents: 7032
diff changeset
1148 m = self.mangleMarkdown2(html_unescape(p.markdown().strip()))
91725f12b239 Support markdown2 2.4.10, 2.4.8- and exclude 2.4.9
John Rouillard <rouilj@ieee.org>
parents: 7032
diff changeset
1149 self.assertIn( u2s(u'href="mailto:baduser@daemons.com"'),
91725f12b239 Support markdown2 2.4.10, 2.4.8- and exclude 2.4.9
John Rouillard <rouilj@ieee.org>
parents: 7032
diff changeset
1150 m)
91725f12b239 Support markdown2 2.4.10, 2.4.8- and exclude 2.4.9
John Rouillard <rouilj@ieee.org>
parents: 7032
diff changeset
1151
91725f12b239 Support markdown2 2.4.10, 2.4.8- and exclude 2.4.9
John Rouillard <rouilj@ieee.org>
parents: 7032
diff changeset
1152 p = StringHTMLProperty(
91725f12b239 Support markdown2 2.4.10, 2.4.8- and exclude 2.4.9
John Rouillard <rouilj@ieee.org>
parents: 7032
diff changeset
1153 self.client, 'test', '1', None, 'test',
91725f12b239 Support markdown2 2.4.10, 2.4.8- and exclude 2.4.9
John Rouillard <rouilj@ieee.org>
parents: 7032
diff changeset
1154 u2s(u'An [email_url](mailto:baduser@daemons.com) link'))
91725f12b239 Support markdown2 2.4.10, 2.4.8- and exclude 2.4.9
John Rouillard <rouilj@ieee.org>
parents: 7032
diff changeset
1155 m = self.mangleMarkdown2(html_unescape(p.markdown().strip()))
91725f12b239 Support markdown2 2.4.10, 2.4.8- and exclude 2.4.9
John Rouillard <rouilj@ieee.org>
parents: 7032
diff changeset
1156
91725f12b239 Support markdown2 2.4.10, 2.4.8- and exclude 2.4.9
John Rouillard <rouilj@ieee.org>
parents: 7032
diff changeset
1157 if isinstance(self, MistuneTestCase):
91725f12b239 Support markdown2 2.4.10, 2.4.8- and exclude 2.4.9
John Rouillard <rouilj@ieee.org>
parents: 7032
diff changeset
1158 self.assertIn('<a href="mailto:baduser@daemons.com" rel="nofollow noopener">email_url</a>', m)
91725f12b239 Support markdown2 2.4.10, 2.4.8- and exclude 2.4.9
John Rouillard <rouilj@ieee.org>
parents: 7032
diff changeset
1159 else:
91725f12b239 Support markdown2 2.4.10, 2.4.8- and exclude 2.4.9
John Rouillard <rouilj@ieee.org>
parents: 7032
diff changeset
1160 self.assertIn('<a href="mailto:baduser@daemons.com">email_url</a>', m)
91725f12b239 Support markdown2 2.4.10, 2.4.8- and exclude 2.4.9
John Rouillard <rouilj@ieee.org>
parents: 7032
diff changeset
1161
6104
a1fd9551d416 don't allow javascript URLs in markdown content
Christof Meerwald <cmeerw@cmeerw.org>
parents: 6103
diff changeset
1162 def test_string_markdown_javascript_link(self):
a1fd9551d416 don't allow javascript URLs in markdown content
Christof Meerwald <cmeerw@cmeerw.org>
parents: 6103
diff changeset
1163 # make sure we don't get a "javascript:" link
a1fd9551d416 don't allow javascript URLs in markdown content
Christof Meerwald <cmeerw@cmeerw.org>
parents: 6103
diff changeset
1164 p = StringHTMLProperty(self.client, 'test', '1', None, 'test', u2s(u'<javascript:alert(1)>'))
a1fd9551d416 don't allow javascript URLs in markdown content
Christof Meerwald <cmeerw@cmeerw.org>
parents: 6103
diff changeset
1165 self.assertTrue(p.markdown().find('href="javascript:') == -1)
a1fd9551d416 don't allow javascript URLs in markdown content
Christof Meerwald <cmeerw@cmeerw.org>
parents: 6103
diff changeset
1166
a1fd9551d416 don't allow javascript URLs in markdown content
Christof Meerwald <cmeerw@cmeerw.org>
parents: 6103
diff changeset
1167 p = StringHTMLProperty(self.client, 'test', '1', None, 'test', u2s(u'[link](javascript:alert(1))'))
a1fd9551d416 don't allow javascript URLs in markdown content
Christof Meerwald <cmeerw@cmeerw.org>
parents: 6103
diff changeset
1168 self.assertTrue(p.markdown().find('href="javascript:') == -1)
6099
55c56ceacb8e escape HTML tags in markdown content
Christof Meerwald <cmeerw@cmeerw.org>
parents: 6098
diff changeset
1169
6284
3f7538316724 issue2551099 - disable processing of data url's in markdown.
John Rouillard <rouilj@ieee.org>
parents: 6282
diff changeset
1170 def test_string_markdown_data_link(self):
3f7538316724 issue2551099 - disable processing of data url's in markdown.
John Rouillard <rouilj@ieee.org>
parents: 6282
diff changeset
1171 # make sure we don't get a "data:" link
3f7538316724 issue2551099 - disable processing of data url's in markdown.
John Rouillard <rouilj@ieee.org>
parents: 6282
diff changeset
1172 p = StringHTMLProperty(self.client, 'test', '1', None, 'test', u2s(u'<data:text/plain;base64,SGVsbG8sIFdvcmxkIQ==>'))
3f7538316724 issue2551099 - disable processing of data url's in markdown.
John Rouillard <rouilj@ieee.org>
parents: 6282
diff changeset
1173 print(p.markdown())
3f7538316724 issue2551099 - disable processing of data url's in markdown.
John Rouillard <rouilj@ieee.org>
parents: 6282
diff changeset
1174 self.assertTrue(p.markdown().find('href="data:') == -1)
3f7538316724 issue2551099 - disable processing of data url's in markdown.
John Rouillard <rouilj@ieee.org>
parents: 6282
diff changeset
1175
3f7538316724 issue2551099 - disable processing of data url's in markdown.
John Rouillard <rouilj@ieee.org>
parents: 6282
diff changeset
1176 p = StringHTMLProperty(self.client, 'test', '1', None, 'test', u2s(u'[data link](data:text/plain;base64,SGVsbG8sIFdvcmxkIQ==)'))
3f7538316724 issue2551099 - disable processing of data url's in markdown.
John Rouillard <rouilj@ieee.org>
parents: 6282
diff changeset
1177 print(p.markdown())
3f7538316724 issue2551099 - disable processing of data url's in markdown.
John Rouillard <rouilj@ieee.org>
parents: 6282
diff changeset
1178 self.assertTrue(p.markdown().find('href="data:') == -1)
3f7538316724 issue2551099 - disable processing of data url's in markdown.
John Rouillard <rouilj@ieee.org>
parents: 6282
diff changeset
1179
6274
474de62f4ce0 Add test for hard linebreak fomatting in markdown
John Rouillard <rouilj@ieee.org>
parents: 6109
diff changeset
1180
474de62f4ce0 Add test for hard linebreak fomatting in markdown
John Rouillard <rouilj@ieee.org>
parents: 6109
diff changeset
1181 def test_string_markdown_forced_line_break(self):
474de62f4ce0 Add test for hard linebreak fomatting in markdown
John Rouillard <rouilj@ieee.org>
parents: 6109
diff changeset
1182 p = StringHTMLProperty(self.client, 'test', '1', None, 'test', u2s(u'This is a set of text \n:that should have a break \n:at newlines. Each \n:colon should be the start of an html line'))
474de62f4ce0 Add test for hard linebreak fomatting in markdown
John Rouillard <rouilj@ieee.org>
parents: 6109
diff changeset
1183 # sigh different backends render this differently:
474de62f4ce0 Add test for hard linebreak fomatting in markdown
John Rouillard <rouilj@ieee.org>
parents: 6109
diff changeset
1184 # of text <br />
474de62f4ce0 Add test for hard linebreak fomatting in markdown
John Rouillard <rouilj@ieee.org>
parents: 6109
diff changeset
1185 # of text<br>
474de62f4ce0 Add test for hard linebreak fomatting in markdown
John Rouillard <rouilj@ieee.org>
parents: 6109
diff changeset
1186 # etc.
474de62f4ce0 Add test for hard linebreak fomatting in markdown
John Rouillard <rouilj@ieee.org>
parents: 6109
diff changeset
1187 # Rather than using a different result for each
474de62f4ce0 Add test for hard linebreak fomatting in markdown
John Rouillard <rouilj@ieee.org>
parents: 6109
diff changeset
1188 # renderer, look for '<br' and require three of them.
474de62f4ce0 Add test for hard linebreak fomatting in markdown
John Rouillard <rouilj@ieee.org>
parents: 6109
diff changeset
1189 m = p.markdown()
6282
d30501bafdfb issue2551098: markdown links missing rel="noreferer nofollow"
John Rouillard <rouilj@ieee.org>
parents: 6280
diff changeset
1190 print(m)
6274
474de62f4ce0 Add test for hard linebreak fomatting in markdown
John Rouillard <rouilj@ieee.org>
parents: 6109
diff changeset
1191 self.assertEqual(3, m.count('<br'))
474de62f4ce0 Add test for hard linebreak fomatting in markdown
John Rouillard <rouilj@ieee.org>
parents: 6109
diff changeset
1192
6099
55c56ceacb8e escape HTML tags in markdown content
Christof Meerwald <cmeerw@cmeerw.org>
parents: 6098
diff changeset
1193 def test_string_markdown_code_block(self):
6275
bda491248fd8 Handle exception raised from markdown processing
John Rouillard <rouilj@ieee.org>
parents: 6274
diff changeset
1194 ''' also verify that embedded html is escaped '''
bda491248fd8 Handle exception raised from markdown processing
John Rouillard <rouilj@ieee.org>
parents: 6274
diff changeset
1195 p = StringHTMLProperty(self.client, 'test', '1', None, 'test', u2s(u'embedded code block <pre>\n\n```\nline 1\nline 2\n```\n\nnew </pre> paragraph'))
bda491248fd8 Handle exception raised from markdown processing
John Rouillard <rouilj@ieee.org>
parents: 6274
diff changeset
1196 self.assertEqual(p.markdown().strip().replace('\n\n', '\n'), u2s(u'<p>embedded code block &lt;pre&gt;</p>\n<pre><code>line 1\nline 2\n</code></pre>\n<p>new &lt;/pre&gt; paragraph</p>'))
bda491248fd8 Handle exception raised from markdown processing
John Rouillard <rouilj@ieee.org>
parents: 6274
diff changeset
1197
bda491248fd8 Handle exception raised from markdown processing
John Rouillard <rouilj@ieee.org>
parents: 6274
diff changeset
1198 def test_string_markdown_code_block_attribute(self):
6995
dc83ebff4c90 change test to use html normalizer when comparing html output.
John Rouillard <rouilj@ieee.org>
parents: 6992
diff changeset
1199 parser = NormalizingHtmlParser()
6992
a5f30372ef7f New markdown2 release changed output with code highlighting (take 2)
John Rouillard <rouilj@ieee.org>
parents: 6991
diff changeset
1200
6275
bda491248fd8 Handle exception raised from markdown processing
John Rouillard <rouilj@ieee.org>
parents: 6274
diff changeset
1201 ''' also verify that embedded html is escaped '''
bda491248fd8 Handle exception raised from markdown processing
John Rouillard <rouilj@ieee.org>
parents: 6274
diff changeset
1202 p = StringHTMLProperty(self.client, 'test', '1', None, 'test', u2s(u'embedded code block <pre>\n\n``` python\nline 1\nline 2\n```\n\nnew </pre> paragraph'))
6995
dc83ebff4c90 change test to use html normalizer when comparing html output.
John Rouillard <rouilj@ieee.org>
parents: 6992
diff changeset
1203 m = parser.normalize(p.markdown())
dc83ebff4c90 change test to use html normalizer when comparing html output.
John Rouillard <rouilj@ieee.org>
parents: 6992
diff changeset
1204 parser.reset()
6275
bda491248fd8 Handle exception raised from markdown processing
John Rouillard <rouilj@ieee.org>
parents: 6274
diff changeset
1205 print(m)
bda491248fd8 Handle exception raised from markdown processing
John Rouillard <rouilj@ieee.org>
parents: 6274
diff changeset
1206 if type(self) == MistuneTestCase:
6995
dc83ebff4c90 change test to use html normalizer when comparing html output.
John Rouillard <rouilj@ieee.org>
parents: 6992
diff changeset
1207 self.assertEqual(m, parser.normalize('<p>embedded code block &lt;pre&gt;</p>\n<pre><code class="lang-python">line 1\nline 2\n</code></pre>\n<p>new &lt;/pre&gt; paragraph</p>'))
6275
bda491248fd8 Handle exception raised from markdown processing
John Rouillard <rouilj@ieee.org>
parents: 6274
diff changeset
1208 elif type(self) == MarkdownTestCase:
7561
91725f12b239 Support markdown2 2.4.10, 2.4.8- and exclude 2.4.9
John Rouillard <rouilj@ieee.org>
parents: 7032
diff changeset
1209 self.assertEqual(m.replace('class="python"','class="language-python"'), parser.normalize('<p>embedded code block &lt;pre&gt;</p>\n<pre><code class="language-python">line 1\nline 2\n</code></pre>\n<p>new &lt;/pre&gt; paragraph</p>'))
6279
9ec3a9bc4ea5 issue2551097 - fix call to markdown2 - fix fenced code blocks.
John Rouillard <rouilj@ieee.org>
parents: 6277
diff changeset
1210 else:
6995
dc83ebff4c90 change test to use html normalizer when comparing html output.
John Rouillard <rouilj@ieee.org>
parents: 6992
diff changeset
1211 expected_result = parser.normalize('<p>embedded code block &lt;pre&gt;</p>\n<div class="codehilite"><pre><span></span><code><span class="n">line</span> <span class="mi">1</span>\n<span class="n">line</span> <span class="mi">2</span>\n</code></pre></div>\n<p>new &lt;/pre&gt; paragraph</p>')
dc83ebff4c90 change test to use html normalizer when comparing html output.
John Rouillard <rouilj@ieee.org>
parents: 6992
diff changeset
1212 self.assertEqual(m, expected_result)
6275
bda491248fd8 Handle exception raised from markdown processing
John Rouillard <rouilj@ieee.org>
parents: 6274
diff changeset
1213
6279
9ec3a9bc4ea5 issue2551097 - fix call to markdown2 - fix fenced code blocks.
John Rouillard <rouilj@ieee.org>
parents: 6277
diff changeset
1214 def test_markdown_return_text_on_exception(self):
9ec3a9bc4ea5 issue2551097 - fix call to markdown2 - fix fenced code blocks.
John Rouillard <rouilj@ieee.org>
parents: 6277
diff changeset
1215 ''' string is invalid markdown. missing end of fenced code block '''
9ec3a9bc4ea5 issue2551097 - fix call to markdown2 - fix fenced code blocks.
John Rouillard <rouilj@ieee.org>
parents: 6277
diff changeset
1216 p = StringHTMLProperty(self.client, 'test', '1', None, 'test', u2s(u'embedded code block <pre>\n\n``` python\nline 1\nline 2\n\n\nnew </pre> paragraph'))
9ec3a9bc4ea5 issue2551097 - fix call to markdown2 - fix fenced code blocks.
John Rouillard <rouilj@ieee.org>
parents: 6277
diff changeset
1217 m = p.markdown().strip()
9ec3a9bc4ea5 issue2551097 - fix call to markdown2 - fix fenced code blocks.
John Rouillard <rouilj@ieee.org>
parents: 6277
diff changeset
1218 print(m)
9ec3a9bc4ea5 issue2551097 - fix call to markdown2 - fix fenced code blocks.
John Rouillard <rouilj@ieee.org>
parents: 6277
diff changeset
1219 self.assertEqual(m.replace('\n\n','\n'), '<p>embedded code block &lt;pre&gt;</p>\n<p>``` python\nline 1\nline 2</p>\n<p>new &lt;/pre&gt; paragraph</p>')
9ec3a9bc4ea5 issue2551097 - fix call to markdown2 - fix fenced code blocks.
John Rouillard <rouilj@ieee.org>
parents: 6277
diff changeset
1220
9ec3a9bc4ea5 issue2551097 - fix call to markdown2 - fix fenced code blocks.
John Rouillard <rouilj@ieee.org>
parents: 6277
diff changeset
1221 def test_markdown_break_on_newline(self):
6277
957a0fc20021 issue2551094 - markdown mismatch - new config for embedded newine
John Rouillard <rouilj@ieee.org>
parents: 6275
diff changeset
1222 self.client.db.config['MARKDOWN_BREAK_ON_NEWLINE'] = True
957a0fc20021 issue2551094 - markdown mismatch - new config for embedded newine
John Rouillard <rouilj@ieee.org>
parents: 6275
diff changeset
1223 p = StringHTMLProperty(self.client, 'test', '1', None, 'test', u2s(u'A string with\nline break\ntwice.'))
957a0fc20021 issue2551094 - markdown mismatch - new config for embedded newine
John Rouillard <rouilj@ieee.org>
parents: 6275
diff changeset
1224 m = p.markdown()
957a0fc20021 issue2551094 - markdown mismatch - new config for embedded newine
John Rouillard <rouilj@ieee.org>
parents: 6275
diff changeset
1225 self.assertEqual(2, m.count('<br'))
957a0fc20021 issue2551094 - markdown mismatch - new config for embedded newine
John Rouillard <rouilj@ieee.org>
parents: 6275
diff changeset
1226 self.client.db.config['MARKDOWN_BREAK_ON_NEWLINE'] = False
957a0fc20021 issue2551094 - markdown mismatch - new config for embedded newine
John Rouillard <rouilj@ieee.org>
parents: 6275
diff changeset
1227
957a0fc20021 issue2551094 - markdown mismatch - new config for embedded newine
John Rouillard <rouilj@ieee.org>
parents: 6275
diff changeset
1228 m = p.markdown()
957a0fc20021 issue2551094 - markdown mismatch - new config for embedded newine
John Rouillard <rouilj@ieee.org>
parents: 6275
diff changeset
1229 self.assertEqual(0, m.count('<br'))
957a0fc20021 issue2551094 - markdown mismatch - new config for embedded newine
John Rouillard <rouilj@ieee.org>
parents: 6275
diff changeset
1230
6280
6ed5152a92d0 issue2551096 - enable markdown autolink for email and bare url's.
John Rouillard <rouilj@ieee.org>
parents: 6279
diff changeset
1231 def test_markdown_hyperlinked_url(self):
6ed5152a92d0 issue2551096 - enable markdown autolink for email and bare url's.
John Rouillard <rouilj@ieee.org>
parents: 6279
diff changeset
1232 # classic markdown does not emit a \n at end of rendered string
6ed5152a92d0 issue2551096 - enable markdown autolink for email and bare url's.
John Rouillard <rouilj@ieee.org>
parents: 6279
diff changeset
1233 # so rstrip \n.
6ed5152a92d0 issue2551096 - enable markdown autolink for email and bare url's.
John Rouillard <rouilj@ieee.org>
parents: 6279
diff changeset
1234 p = StringHTMLProperty(self.client, 'test', '1', None, 'test', u2s(u'http://example.com/'))
6ed5152a92d0 issue2551096 - enable markdown autolink for email and bare url's.
John Rouillard <rouilj@ieee.org>
parents: 6279
diff changeset
1235 m = p.markdown(hyperlink=1)
6282
d30501bafdfb issue2551098: markdown links missing rel="noreferer nofollow"
John Rouillard <rouilj@ieee.org>
parents: 6280
diff changeset
1236 m = self.mangleMarkdown2(m)
d30501bafdfb issue2551098: markdown links missing rel="noreferer nofollow"
John Rouillard <rouilj@ieee.org>
parents: 6280
diff changeset
1237 print(m)
d30501bafdfb issue2551098: markdown links missing rel="noreferer nofollow"
John Rouillard <rouilj@ieee.org>
parents: 6280
diff changeset
1238 self.assertEqual(m.rstrip('\n'), '<p><a href="http://example.com/" rel="nofollow noopener">http://example.com/</a></p>')
6280
6ed5152a92d0 issue2551096 - enable markdown autolink for email and bare url's.
John Rouillard <rouilj@ieee.org>
parents: 6279
diff changeset
1239
6ed5152a92d0 issue2551096 - enable markdown autolink for email and bare url's.
John Rouillard <rouilj@ieee.org>
parents: 6279
diff changeset
1240 p = StringHTMLProperty(self.client, 'test', '1', None, 'test', u2s(u'<http://example.com/>'))
6ed5152a92d0 issue2551096 - enable markdown autolink for email and bare url's.
John Rouillard <rouilj@ieee.org>
parents: 6279
diff changeset
1241 m = p.markdown(hyperlink=1)
6282
d30501bafdfb issue2551098: markdown links missing rel="noreferer nofollow"
John Rouillard <rouilj@ieee.org>
parents: 6280
diff changeset
1242 m = self.mangleMarkdown2(m)
d30501bafdfb issue2551098: markdown links missing rel="noreferer nofollow"
John Rouillard <rouilj@ieee.org>
parents: 6280
diff changeset
1243 self.assertEqual(m.rstrip('\n'), '<p><a href="http://example.com/" rel="nofollow noopener">http://example.com/</a></p>')
d30501bafdfb issue2551098: markdown links missing rel="noreferer nofollow"
John Rouillard <rouilj@ieee.org>
parents: 6280
diff changeset
1244
d30501bafdfb issue2551098: markdown links missing rel="noreferer nofollow"
John Rouillard <rouilj@ieee.org>
parents: 6280
diff changeset
1245 p = StringHTMLProperty(self.client, 'test', '1', None, 'test', u2s(u'[label](http://example.com/ "a title")'))
d30501bafdfb issue2551098: markdown links missing rel="noreferer nofollow"
John Rouillard <rouilj@ieee.org>
parents: 6280
diff changeset
1246 m = p.markdown(hyperlink=1)
d30501bafdfb issue2551098: markdown links missing rel="noreferer nofollow"
John Rouillard <rouilj@ieee.org>
parents: 6280
diff changeset
1247 m = self.mangleMarkdown2(m)
d30501bafdfb issue2551098: markdown links missing rel="noreferer nofollow"
John Rouillard <rouilj@ieee.org>
parents: 6280
diff changeset
1248 self.assertEqual(m.rstrip('\n'), '<p><a href="http://example.com/" rel="nofollow noopener" title="a title">label</a></p>')
6280
6ed5152a92d0 issue2551096 - enable markdown autolink for email and bare url's.
John Rouillard <rouilj@ieee.org>
parents: 6279
diff changeset
1249
6299
fd0bdcbc68e4 issue2551104 - fix issue with markdown autolink next to punctuation
John Rouillard <rouilj@ieee.org>
parents: 6284
diff changeset
1250 p = StringHTMLProperty(self.client, 'test', '1', None, 'test', u2s(u'[label](http://example.com/).'))
fd0bdcbc68e4 issue2551104 - fix issue with markdown autolink next to punctuation
John Rouillard <rouilj@ieee.org>
parents: 6284
diff changeset
1251 m = p.markdown(hyperlink=1)
fd0bdcbc68e4 issue2551104 - fix issue with markdown autolink next to punctuation
John Rouillard <rouilj@ieee.org>
parents: 6284
diff changeset
1252 m = self.mangleMarkdown2(m)
fd0bdcbc68e4 issue2551104 - fix issue with markdown autolink next to punctuation
John Rouillard <rouilj@ieee.org>
parents: 6284
diff changeset
1253 self.assertEqual(m.rstrip('\n'), '<p><a href="http://example.com/" rel="nofollow noopener">label</a>.</p>')
fd0bdcbc68e4 issue2551104 - fix issue with markdown autolink next to punctuation
John Rouillard <rouilj@ieee.org>
parents: 6284
diff changeset
1254
6280
6ed5152a92d0 issue2551096 - enable markdown autolink for email and bare url's.
John Rouillard <rouilj@ieee.org>
parents: 6279
diff changeset
1255 p = StringHTMLProperty(self.client, 'test', '1', None, 'test', u2s(u'![](http://example.com/)'))
6ed5152a92d0 issue2551096 - enable markdown autolink for email and bare url's.
John Rouillard <rouilj@ieee.org>
parents: 6279
diff changeset
1256 m = p.markdown(hyperlink=1)
6282
d30501bafdfb issue2551098: markdown links missing rel="noreferer nofollow"
John Rouillard <rouilj@ieee.org>
parents: 6280
diff changeset
1257 m = self.mangleMarkdown2(m)
6280
6ed5152a92d0 issue2551096 - enable markdown autolink for email and bare url's.
John Rouillard <rouilj@ieee.org>
parents: 6279
diff changeset
1258 self.assertIn(m, [
6ed5152a92d0 issue2551096 - enable markdown autolink for email and bare url's.
John Rouillard <rouilj@ieee.org>
parents: 6279
diff changeset
1259 '<p><img src="http://example.com/" alt=""/></p>\n',
6ed5152a92d0 issue2551096 - enable markdown autolink for email and bare url's.
John Rouillard <rouilj@ieee.org>
parents: 6279
diff changeset
1260 '<p><img src="http://example.com/" alt="" /></p>\n',
6ed5152a92d0 issue2551096 - enable markdown autolink for email and bare url's.
John Rouillard <rouilj@ieee.org>
parents: 6279
diff changeset
1261 '<p><img src="http://example.com/" alt=""></p>\n',
6ed5152a92d0 issue2551096 - enable markdown autolink for email and bare url's.
John Rouillard <rouilj@ieee.org>
parents: 6279
diff changeset
1262 '<p><img alt="" src="http://example.com/" /></p>', # markdown
6ed5152a92d0 issue2551096 - enable markdown autolink for email and bare url's.
John Rouillard <rouilj@ieee.org>
parents: 6279
diff changeset
1263 ])
6ed5152a92d0 issue2551096 - enable markdown autolink for email and bare url's.
John Rouillard <rouilj@ieee.org>
parents: 6279
diff changeset
1264
6ed5152a92d0 issue2551096 - enable markdown autolink for email and bare url's.
John Rouillard <rouilj@ieee.org>
parents: 6279
diff changeset
1265 p = StringHTMLProperty(self.client, 'test', '1', None, 'test', u2s(u'An URL http://example.com/ with text'))
6ed5152a92d0 issue2551096 - enable markdown autolink for email and bare url's.
John Rouillard <rouilj@ieee.org>
parents: 6279
diff changeset
1266 m = p.markdown(hyperlink=1)
6282
d30501bafdfb issue2551098: markdown links missing rel="noreferer nofollow"
John Rouillard <rouilj@ieee.org>
parents: 6280
diff changeset
1267 m = self.mangleMarkdown2(m)
d30501bafdfb issue2551098: markdown links missing rel="noreferer nofollow"
John Rouillard <rouilj@ieee.org>
parents: 6280
diff changeset
1268 self.assertEqual(m.rstrip('\n'), '<p>An URL <a href="http://example.com/" rel="nofollow noopener">http://example.com/</a> with text</p>')
6280
6ed5152a92d0 issue2551096 - enable markdown autolink for email and bare url's.
John Rouillard <rouilj@ieee.org>
parents: 6279
diff changeset
1269
6ed5152a92d0 issue2551096 - enable markdown autolink for email and bare url's.
John Rouillard <rouilj@ieee.org>
parents: 6279
diff changeset
1270 p = StringHTMLProperty(self.client, 'test', '1', None, 'test', u2s(u'An URL https://example.com/path with text'))
6ed5152a92d0 issue2551096 - enable markdown autolink for email and bare url's.
John Rouillard <rouilj@ieee.org>
parents: 6279
diff changeset
1271 m = p.markdown(hyperlink=1)
6282
d30501bafdfb issue2551098: markdown links missing rel="noreferer nofollow"
John Rouillard <rouilj@ieee.org>
parents: 6280
diff changeset
1272 m = self.mangleMarkdown2(m)
d30501bafdfb issue2551098: markdown links missing rel="noreferer nofollow"
John Rouillard <rouilj@ieee.org>
parents: 6280
diff changeset
1273 self.assertEqual(m.rstrip('\n'), '<p>An URL <a href="https://example.com/path" rel="nofollow noopener">https://example.com/path</a> with text</p>')
6099
55c56ceacb8e escape HTML tags in markdown content
Christof Meerwald <cmeerw@cmeerw.org>
parents: 6098
diff changeset
1274
55c56ceacb8e escape HTML tags in markdown content
Christof Meerwald <cmeerw@cmeerw.org>
parents: 6098
diff changeset
1275 @skip_mistune
55c56ceacb8e escape HTML tags in markdown content
Christof Meerwald <cmeerw@cmeerw.org>
parents: 6098
diff changeset
1276 class MistuneTestCase(TemplatingTestCase, MarkdownTests) :
55c56ceacb8e escape HTML tags in markdown content
Christof Meerwald <cmeerw@cmeerw.org>
parents: 6098
diff changeset
1277 def setUp(self):
55c56ceacb8e escape HTML tags in markdown content
Christof Meerwald <cmeerw@cmeerw.org>
parents: 6098
diff changeset
1278 TemplatingTestCase.setUp(self)
55c56ceacb8e escape HTML tags in markdown content
Christof Meerwald <cmeerw@cmeerw.org>
parents: 6098
diff changeset
1279
55c56ceacb8e escape HTML tags in markdown content
Christof Meerwald <cmeerw@cmeerw.org>
parents: 6098
diff changeset
1280 from roundup.cgi import templating
55c56ceacb8e escape HTML tags in markdown content
Christof Meerwald <cmeerw@cmeerw.org>
parents: 6098
diff changeset
1281 self.__markdown = templating.markdown
55c56ceacb8e escape HTML tags in markdown content
Christof Meerwald <cmeerw@cmeerw.org>
parents: 6098
diff changeset
1282 templating.markdown = templating._import_mistune()
55c56ceacb8e escape HTML tags in markdown content
Christof Meerwald <cmeerw@cmeerw.org>
parents: 6098
diff changeset
1283
55c56ceacb8e escape HTML tags in markdown content
Christof Meerwald <cmeerw@cmeerw.org>
parents: 6098
diff changeset
1284 def tearDown(self):
55c56ceacb8e escape HTML tags in markdown content
Christof Meerwald <cmeerw@cmeerw.org>
parents: 6098
diff changeset
1285 from roundup.cgi import templating
55c56ceacb8e escape HTML tags in markdown content
Christof Meerwald <cmeerw@cmeerw.org>
parents: 6098
diff changeset
1286 templating.markdown = self.__markdown
55c56ceacb8e escape HTML tags in markdown content
Christof Meerwald <cmeerw@cmeerw.org>
parents: 6098
diff changeset
1287
55c56ceacb8e escape HTML tags in markdown content
Christof Meerwald <cmeerw@cmeerw.org>
parents: 6098
diff changeset
1288 @skip_markdown2
55c56ceacb8e escape HTML tags in markdown content
Christof Meerwald <cmeerw@cmeerw.org>
parents: 6098
diff changeset
1289 class Markdown2TestCase(TemplatingTestCase, MarkdownTests) :
55c56ceacb8e escape HTML tags in markdown content
Christof Meerwald <cmeerw@cmeerw.org>
parents: 6098
diff changeset
1290 def setUp(self):
55c56ceacb8e escape HTML tags in markdown content
Christof Meerwald <cmeerw@cmeerw.org>
parents: 6098
diff changeset
1291 TemplatingTestCase.setUp(self)
55c56ceacb8e escape HTML tags in markdown content
Christof Meerwald <cmeerw@cmeerw.org>
parents: 6098
diff changeset
1292
55c56ceacb8e escape HTML tags in markdown content
Christof Meerwald <cmeerw@cmeerw.org>
parents: 6098
diff changeset
1293 from roundup.cgi import templating
55c56ceacb8e escape HTML tags in markdown content
Christof Meerwald <cmeerw@cmeerw.org>
parents: 6098
diff changeset
1294 self.__markdown = templating.markdown
55c56ceacb8e escape HTML tags in markdown content
Christof Meerwald <cmeerw@cmeerw.org>
parents: 6098
diff changeset
1295 templating.markdown = templating._import_markdown2()
55c56ceacb8e escape HTML tags in markdown content
Christof Meerwald <cmeerw@cmeerw.org>
parents: 6098
diff changeset
1296
55c56ceacb8e escape HTML tags in markdown content
Christof Meerwald <cmeerw@cmeerw.org>
parents: 6098
diff changeset
1297 def tearDown(self):
55c56ceacb8e escape HTML tags in markdown content
Christof Meerwald <cmeerw@cmeerw.org>
parents: 6098
diff changeset
1298 from roundup.cgi import templating
55c56ceacb8e escape HTML tags in markdown content
Christof Meerwald <cmeerw@cmeerw.org>
parents: 6098
diff changeset
1299 templating.markdown = self.__markdown
55c56ceacb8e escape HTML tags in markdown content
Christof Meerwald <cmeerw@cmeerw.org>
parents: 6098
diff changeset
1300
55c56ceacb8e escape HTML tags in markdown content
Christof Meerwald <cmeerw@cmeerw.org>
parents: 6098
diff changeset
1301 @skip_markdown
55c56ceacb8e escape HTML tags in markdown content
Christof Meerwald <cmeerw@cmeerw.org>
parents: 6098
diff changeset
1302 class MarkdownTestCase(TemplatingTestCase, MarkdownTests) :
55c56ceacb8e escape HTML tags in markdown content
Christof Meerwald <cmeerw@cmeerw.org>
parents: 6098
diff changeset
1303 def setUp(self):
55c56ceacb8e escape HTML tags in markdown content
Christof Meerwald <cmeerw@cmeerw.org>
parents: 6098
diff changeset
1304 TemplatingTestCase.setUp(self)
55c56ceacb8e escape HTML tags in markdown content
Christof Meerwald <cmeerw@cmeerw.org>
parents: 6098
diff changeset
1305
55c56ceacb8e escape HTML tags in markdown content
Christof Meerwald <cmeerw@cmeerw.org>
parents: 6098
diff changeset
1306 from roundup.cgi import templating
55c56ceacb8e escape HTML tags in markdown content
Christof Meerwald <cmeerw@cmeerw.org>
parents: 6098
diff changeset
1307 self.__markdown = templating.markdown
55c56ceacb8e escape HTML tags in markdown content
Christof Meerwald <cmeerw@cmeerw.org>
parents: 6098
diff changeset
1308 templating.markdown = templating._import_markdown()
55c56ceacb8e escape HTML tags in markdown content
Christof Meerwald <cmeerw@cmeerw.org>
parents: 6098
diff changeset
1309
55c56ceacb8e escape HTML tags in markdown content
Christof Meerwald <cmeerw@cmeerw.org>
parents: 6098
diff changeset
1310 def tearDown(self):
55c56ceacb8e escape HTML tags in markdown content
Christof Meerwald <cmeerw@cmeerw.org>
parents: 6098
diff changeset
1311 from roundup.cgi import templating
55c56ceacb8e escape HTML tags in markdown content
Christof Meerwald <cmeerw@cmeerw.org>
parents: 6098
diff changeset
1312 templating.markdown = self.__markdown
55c56ceacb8e escape HTML tags in markdown content
Christof Meerwald <cmeerw@cmeerw.org>
parents: 6098
diff changeset
1313
55c56ceacb8e escape HTML tags in markdown content
Christof Meerwald <cmeerw@cmeerw.org>
parents: 6098
diff changeset
1314
55c56ceacb8e escape HTML tags in markdown content
Christof Meerwald <cmeerw@cmeerw.org>
parents: 6098
diff changeset
1315 class NoMarkdownTestCase(TemplatingTestCase) :
55c56ceacb8e escape HTML tags in markdown content
Christof Meerwald <cmeerw@cmeerw.org>
parents: 6098
diff changeset
1316 def setUp(self):
55c56ceacb8e escape HTML tags in markdown content
Christof Meerwald <cmeerw@cmeerw.org>
parents: 6098
diff changeset
1317 TemplatingTestCase.setUp(self)
55c56ceacb8e escape HTML tags in markdown content
Christof Meerwald <cmeerw@cmeerw.org>
parents: 6098
diff changeset
1318
55c56ceacb8e escape HTML tags in markdown content
Christof Meerwald <cmeerw@cmeerw.org>
parents: 6098
diff changeset
1319 from roundup.cgi import templating
55c56ceacb8e escape HTML tags in markdown content
Christof Meerwald <cmeerw@cmeerw.org>
parents: 6098
diff changeset
1320 self.__markdown = templating.markdown
55c56ceacb8e escape HTML tags in markdown content
Christof Meerwald <cmeerw@cmeerw.org>
parents: 6098
diff changeset
1321 templating.markdown = None
55c56ceacb8e escape HTML tags in markdown content
Christof Meerwald <cmeerw@cmeerw.org>
parents: 6098
diff changeset
1322
55c56ceacb8e escape HTML tags in markdown content
Christof Meerwald <cmeerw@cmeerw.org>
parents: 6098
diff changeset
1323 def tearDown(self):
55c56ceacb8e escape HTML tags in markdown content
Christof Meerwald <cmeerw@cmeerw.org>
parents: 6098
diff changeset
1324 from roundup.cgi import templating
55c56ceacb8e escape HTML tags in markdown content
Christof Meerwald <cmeerw@cmeerw.org>
parents: 6098
diff changeset
1325 templating.markdown = self.__markdown
55c56ceacb8e escape HTML tags in markdown content
Christof Meerwald <cmeerw@cmeerw.org>
parents: 6098
diff changeset
1326
55c56ceacb8e escape HTML tags in markdown content
Christof Meerwald <cmeerw@cmeerw.org>
parents: 6098
diff changeset
1327 def test_string_markdown(self):
55c56ceacb8e escape HTML tags in markdown content
Christof Meerwald <cmeerw@cmeerw.org>
parents: 6098
diff changeset
1328 p = StringHTMLProperty(self.client, 'test', '1', None, 'test', u2s(u'A string http://localhost with cmeerw@example.com <br> *embedded* \u00df'))
55c56ceacb8e escape HTML tags in markdown content
Christof Meerwald <cmeerw@cmeerw.org>
parents: 6098
diff changeset
1329 self.assertEqual(p.markdown(), u2s(u'A string <a href="http://localhost" rel="nofollow noopener">http://localhost</a> with <a href="mailto:cmeerw@example.com">cmeerw@example.com</a> &lt;br&gt; *embedded* \u00df'))
55c56ceacb8e escape HTML tags in markdown content
Christof Meerwald <cmeerw@cmeerw.org>
parents: 6098
diff changeset
1330
55c56ceacb8e escape HTML tags in markdown content
Christof Meerwald <cmeerw@cmeerw.org>
parents: 6098
diff changeset
1331 class NoRstTestCase(TemplatingTestCase) :
55c56ceacb8e escape HTML tags in markdown content
Christof Meerwald <cmeerw@cmeerw.org>
parents: 6098
diff changeset
1332 def setUp(self):
55c56ceacb8e escape HTML tags in markdown content
Christof Meerwald <cmeerw@cmeerw.org>
parents: 6098
diff changeset
1333 TemplatingTestCase.setUp(self)
55c56ceacb8e escape HTML tags in markdown content
Christof Meerwald <cmeerw@cmeerw.org>
parents: 6098
diff changeset
1334
55c56ceacb8e escape HTML tags in markdown content
Christof Meerwald <cmeerw@cmeerw.org>
parents: 6098
diff changeset
1335 from roundup.cgi import templating
55c56ceacb8e escape HTML tags in markdown content
Christof Meerwald <cmeerw@cmeerw.org>
parents: 6098
diff changeset
1336 self.__ReStructuredText = templating.ReStructuredText
55c56ceacb8e escape HTML tags in markdown content
Christof Meerwald <cmeerw@cmeerw.org>
parents: 6098
diff changeset
1337 templating.ReStructuredText = None
55c56ceacb8e escape HTML tags in markdown content
Christof Meerwald <cmeerw@cmeerw.org>
parents: 6098
diff changeset
1338
55c56ceacb8e escape HTML tags in markdown content
Christof Meerwald <cmeerw@cmeerw.org>
parents: 6098
diff changeset
1339 def tearDown(self):
55c56ceacb8e escape HTML tags in markdown content
Christof Meerwald <cmeerw@cmeerw.org>
parents: 6098
diff changeset
1340 from roundup.cgi import templating
55c56ceacb8e escape HTML tags in markdown content
Christof Meerwald <cmeerw@cmeerw.org>
parents: 6098
diff changeset
1341 templating.ReStructuredText = self.__ReStructuredText
55c56ceacb8e escape HTML tags in markdown content
Christof Meerwald <cmeerw@cmeerw.org>
parents: 6098
diff changeset
1342
55c56ceacb8e escape HTML tags in markdown content
Christof Meerwald <cmeerw@cmeerw.org>
parents: 6098
diff changeset
1343 def test_string_rst(self):
55c56ceacb8e escape HTML tags in markdown content
Christof Meerwald <cmeerw@cmeerw.org>
parents: 6098
diff changeset
1344 p = StringHTMLProperty(self.client, 'test', '1', None, 'test', u2s(u'A string with cmeerw@example.com *embedded* \u00df'))
55c56ceacb8e escape HTML tags in markdown content
Christof Meerwald <cmeerw@cmeerw.org>
parents: 6098
diff changeset
1345 self.assertEqual(p.rst(), u2s(u'A string with <a href="mailto:cmeerw@example.com">cmeerw@example.com</a> *embedded* \u00df'))
55c56ceacb8e escape HTML tags in markdown content
Christof Meerwald <cmeerw@cmeerw.org>
parents: 6098
diff changeset
1346
8286
6445e63bb423 feat(web) - Use native number type input for Number() and Integer().
John Rouillard <rouilj@ieee.org>
parents: 8285
diff changeset
1347 class NumberIntegerHTMLPropertyTestCase(HTMLPropertyTestClass):
6445e63bb423 feat(web) - Use native number type input for Number() and Integer().
John Rouillard <rouilj@ieee.org>
parents: 8285
diff changeset
1348
6445e63bb423 feat(web) - Use native number type input for Number() and Integer().
John Rouillard <rouilj@ieee.org>
parents: 8285
diff changeset
1349 def setUp(self):
6445e63bb423 feat(web) - Use native number type input for Number() and Integer().
John Rouillard <rouilj@ieee.org>
parents: 8285
diff changeset
1350 super(NumberIntegerHTMLPropertyTestCase, self).setUp()
6445e63bb423 feat(web) - Use native number type input for Number() and Integer().
John Rouillard <rouilj@ieee.org>
parents: 8285
diff changeset
1351
6445e63bb423 feat(web) - Use native number type input for Number() and Integer().
John Rouillard <rouilj@ieee.org>
parents: 8285
diff changeset
1352 db = self.client.db
6445e63bb423 feat(web) - Use native number type input for Number() and Integer().
John Rouillard <rouilj@ieee.org>
parents: 8285
diff changeset
1353 db.issue.addprop(numberval=hyperdb.Number())
6445e63bb423 feat(web) - Use native number type input for Number() and Integer().
John Rouillard <rouilj@ieee.org>
parents: 8285
diff changeset
1354 db.issue.addprop(intval=hyperdb.Integer())
6445e63bb423 feat(web) - Use native number type input for Number() and Integer().
John Rouillard <rouilj@ieee.org>
parents: 8285
diff changeset
1355
6445e63bb423 feat(web) - Use native number type input for Number() and Integer().
John Rouillard <rouilj@ieee.org>
parents: 8285
diff changeset
1356 self.client.db.issue.create(title="title",
6445e63bb423 feat(web) - Use native number type input for Number() and Integer().
John Rouillard <rouilj@ieee.org>
parents: 8285
diff changeset
1357 numberval = "3.14",
6445e63bb423 feat(web) - Use native number type input for Number() and Integer().
John Rouillard <rouilj@ieee.org>
parents: 8285
diff changeset
1358 intval="314")
6445e63bb423 feat(web) - Use native number type input for Number() and Integer().
John Rouillard <rouilj@ieee.org>
parents: 8285
diff changeset
1359
6445e63bb423 feat(web) - Use native number type input for Number() and Integer().
John Rouillard <rouilj@ieee.org>
parents: 8285
diff changeset
1360 def tearDown(self):
6445e63bb423 feat(web) - Use native number type input for Number() and Integer().
John Rouillard <rouilj@ieee.org>
parents: 8285
diff changeset
1361 self.client.db.close()
6445e63bb423 feat(web) - Use native number type input for Number() and Integer().
John Rouillard <rouilj@ieee.org>
parents: 8285
diff changeset
1362 memorydb.db_nuke('')
6445e63bb423 feat(web) - Use native number type input for Number() and Integer().
John Rouillard <rouilj@ieee.org>
parents: 8285
diff changeset
1363
6445e63bb423 feat(web) - Use native number type input for Number() and Integer().
John Rouillard <rouilj@ieee.org>
parents: 8285
diff changeset
1364 def test_IntegerHTML(self):
6445e63bb423 feat(web) - Use native number type input for Number() and Integer().
John Rouillard <rouilj@ieee.org>
parents: 8285
diff changeset
1365 test_hyperdbInteger = self.client.db.issue.getprops("1")['intval']
6445e63bb423 feat(web) - Use native number type input for Number() and Integer().
John Rouillard <rouilj@ieee.org>
parents: 8285
diff changeset
1366 test_Integer = test_hyperdbInteger.from_raw(
6445e63bb423 feat(web) - Use native number type input for Number() and Integer().
John Rouillard <rouilj@ieee.org>
parents: 8285
diff changeset
1367 self.client.db.issue.get("1", 'intval')
6445e63bb423 feat(web) - Use native number type input for Number() and Integer().
John Rouillard <rouilj@ieee.org>
parents: 8285
diff changeset
1368 )
6445e63bb423 feat(web) - Use native number type input for Number() and Integer().
John Rouillard <rouilj@ieee.org>
parents: 8285
diff changeset
1369
6445e63bb423 feat(web) - Use native number type input for Number() and Integer().
John Rouillard <rouilj@ieee.org>
parents: 8285
diff changeset
1370 # client, classname, nodeid, prop, name, value,
6445e63bb423 feat(web) - Use native number type input for Number() and Integer().
John Rouillard <rouilj@ieee.org>
parents: 8285
diff changeset
1371 # anonymous=0, offset=None
6445e63bb423 feat(web) - Use native number type input for Number() and Integer().
John Rouillard <rouilj@ieee.org>
parents: 8285
diff changeset
1372 d = IntegerHTMLProperty(self.client, 'issue', '1',
6445e63bb423 feat(web) - Use native number type input for Number() and Integer().
John Rouillard <rouilj@ieee.org>
parents: 8285
diff changeset
1373 test_hyperdbInteger,
6445e63bb423 feat(web) - Use native number type input for Number() and Integer().
John Rouillard <rouilj@ieee.org>
parents: 8285
diff changeset
1374 'intval', test_Integer)
6445e63bb423 feat(web) - Use native number type input for Number() and Integer().
John Rouillard <rouilj@ieee.org>
parents: 8285
diff changeset
1375
6445e63bb423 feat(web) - Use native number type input for Number() and Integer().
John Rouillard <rouilj@ieee.org>
parents: 8285
diff changeset
1376 self.assertIsInstance(d._value, int)
6445e63bb423 feat(web) - Use native number type input for Number() and Integer().
John Rouillard <rouilj@ieee.org>
parents: 8285
diff changeset
1377
6445e63bb423 feat(web) - Use native number type input for Number() and Integer().
John Rouillard <rouilj@ieee.org>
parents: 8285
diff changeset
1378 self.assertEqual(d.plain(), "314")
6445e63bb423 feat(web) - Use native number type input for Number() and Integer().
John Rouillard <rouilj@ieee.org>
parents: 8285
diff changeset
1379
8317
4455cd036c25 fix: tests for changeset: 8314:7ff47307b4b1 use text for number input
John Rouillard <rouilj@ieee.org>
parents: 8305
diff changeset
1380 input_expected = """<input id="issue1@intval" name="issue1@intval" size="30" type="text" value="314">"""
8286
6445e63bb423 feat(web) - Use native number type input for Number() and Integer().
John Rouillard <rouilj@ieee.org>
parents: 8285
diff changeset
1381 self.assertEqual(d.field(), input_expected)
6445e63bb423 feat(web) - Use native number type input for Number() and Integer().
John Rouillard <rouilj@ieee.org>
parents: 8285
diff changeset
1382
8317
4455cd036c25 fix: tests for changeset: 8314:7ff47307b4b1 use text for number input
John Rouillard <rouilj@ieee.org>
parents: 8305
diff changeset
1383 input_expected = """<input id="issue1@intval" name="issue1@intval" size="30" step="50" type="text" value="314">"""
8286
6445e63bb423 feat(web) - Use native number type input for Number() and Integer().
John Rouillard <rouilj@ieee.org>
parents: 8285
diff changeset
1384 self.assertEqual(d.field(step="50"), input_expected)
6445e63bb423 feat(web) - Use native number type input for Number() and Integer().
John Rouillard <rouilj@ieee.org>
parents: 8285
diff changeset
1385
6445e63bb423 feat(web) - Use native number type input for Number() and Integer().
John Rouillard <rouilj@ieee.org>
parents: 8285
diff changeset
1386 input_expected = """<input id="issue1@intval" name="issue1@intval" size="30" type="text" value="314">"""
6445e63bb423 feat(web) - Use native number type input for Number() and Integer().
John Rouillard <rouilj@ieee.org>
parents: 8285
diff changeset
1387 self.assertEqual(d.field(type="text"), input_expected)
6445e63bb423 feat(web) - Use native number type input for Number() and Integer().
John Rouillard <rouilj@ieee.org>
parents: 8285
diff changeset
1388
6445e63bb423 feat(web) - Use native number type input for Number() and Integer().
John Rouillard <rouilj@ieee.org>
parents: 8285
diff changeset
1389
6445e63bb423 feat(web) - Use native number type input for Number() and Integer().
John Rouillard <rouilj@ieee.org>
parents: 8285
diff changeset
1390 # check permissions return
6445e63bb423 feat(web) - Use native number type input for Number() and Integer().
John Rouillard <rouilj@ieee.org>
parents: 8285
diff changeset
1391 is_view_ok_orig = d.is_view_ok
6445e63bb423 feat(web) - Use native number type input for Number() and Integer().
John Rouillard <rouilj@ieee.org>
parents: 8285
diff changeset
1392 is_edit_ok_orig = d.is_edit_ok
6445e63bb423 feat(web) - Use native number type input for Number() and Integer().
John Rouillard <rouilj@ieee.org>
parents: 8285
diff changeset
1393 no_access = lambda : False
6445e63bb423 feat(web) - Use native number type input for Number() and Integer().
John Rouillard <rouilj@ieee.org>
parents: 8285
diff changeset
1394
6445e63bb423 feat(web) - Use native number type input for Number() and Integer().
John Rouillard <rouilj@ieee.org>
parents: 8285
diff changeset
1395 d.is_view_ok = no_access
6445e63bb423 feat(web) - Use native number type input for Number() and Integer().
John Rouillard <rouilj@ieee.org>
parents: 8285
diff changeset
1396 self.assertEqual(d.plain(), "[hidden]")
6445e63bb423 feat(web) - Use native number type input for Number() and Integer().
John Rouillard <rouilj@ieee.org>
parents: 8285
diff changeset
1397
6445e63bb423 feat(web) - Use native number type input for Number() and Integer().
John Rouillard <rouilj@ieee.org>
parents: 8285
diff changeset
1398 d.is_edit_ok = no_access
6445e63bb423 feat(web) - Use native number type input for Number() and Integer().
John Rouillard <rouilj@ieee.org>
parents: 8285
diff changeset
1399 self.assertEqual(d.field(), "[hidden]")
6445e63bb423 feat(web) - Use native number type input for Number() and Integer().
John Rouillard <rouilj@ieee.org>
parents: 8285
diff changeset
1400
6445e63bb423 feat(web) - Use native number type input for Number() and Integer().
John Rouillard <rouilj@ieee.org>
parents: 8285
diff changeset
1401 d.is_view_ok = is_view_ok_orig
6445e63bb423 feat(web) - Use native number type input for Number() and Integer().
John Rouillard <rouilj@ieee.org>
parents: 8285
diff changeset
1402 self.assertEqual(d.field(), "314")
6445e63bb423 feat(web) - Use native number type input for Number() and Integer().
John Rouillard <rouilj@ieee.org>
parents: 8285
diff changeset
1403 d.is_edit_ok = is_edit_ok_orig
6445e63bb423 feat(web) - Use native number type input for Number() and Integer().
John Rouillard <rouilj@ieee.org>
parents: 8285
diff changeset
1404
6445e63bb423 feat(web) - Use native number type input for Number() and Integer().
John Rouillard <rouilj@ieee.org>
parents: 8285
diff changeset
1405 def test_NumberHTML(self):
6445e63bb423 feat(web) - Use native number type input for Number() and Integer().
John Rouillard <rouilj@ieee.org>
parents: 8285
diff changeset
1406 test_hyperdbNumber = self.client.db.issue.getprops("1")['numberval']
6445e63bb423 feat(web) - Use native number type input for Number() and Integer().
John Rouillard <rouilj@ieee.org>
parents: 8285
diff changeset
1407 test_Number = test_hyperdbNumber.from_raw(
6445e63bb423 feat(web) - Use native number type input for Number() and Integer().
John Rouillard <rouilj@ieee.org>
parents: 8285
diff changeset
1408 self.client.db.issue.get("1", 'numberval')
6445e63bb423 feat(web) - Use native number type input for Number() and Integer().
John Rouillard <rouilj@ieee.org>
parents: 8285
diff changeset
1409 )
6445e63bb423 feat(web) - Use native number type input for Number() and Integer().
John Rouillard <rouilj@ieee.org>
parents: 8285
diff changeset
1410
6445e63bb423 feat(web) - Use native number type input for Number() and Integer().
John Rouillard <rouilj@ieee.org>
parents: 8285
diff changeset
1411 # client, classname, nodeid, prop, name, value,
6445e63bb423 feat(web) - Use native number type input for Number() and Integer().
John Rouillard <rouilj@ieee.org>
parents: 8285
diff changeset
1412 # anonymous=0, offset=None
6445e63bb423 feat(web) - Use native number type input for Number() and Integer().
John Rouillard <rouilj@ieee.org>
parents: 8285
diff changeset
1413 d = NumberHTMLProperty(self.client, 'issue', '1',
6445e63bb423 feat(web) - Use native number type input for Number() and Integer().
John Rouillard <rouilj@ieee.org>
parents: 8285
diff changeset
1414 test_hyperdbNumber,
6445e63bb423 feat(web) - Use native number type input for Number() and Integer().
John Rouillard <rouilj@ieee.org>
parents: 8285
diff changeset
1415 'numberval', test_Number)
6445e63bb423 feat(web) - Use native number type input for Number() and Integer().
John Rouillard <rouilj@ieee.org>
parents: 8285
diff changeset
1416
6445e63bb423 feat(web) - Use native number type input for Number() and Integer().
John Rouillard <rouilj@ieee.org>
parents: 8285
diff changeset
1417 # string needed for memorydb/anydbm backend. Float?? when
6445e63bb423 feat(web) - Use native number type input for Number() and Integer().
John Rouillard <rouilj@ieee.org>
parents: 8285
diff changeset
1418 # running against sql backends.
6445e63bb423 feat(web) - Use native number type input for Number() and Integer().
John Rouillard <rouilj@ieee.org>
parents: 8285
diff changeset
1419 self.assertIsInstance(d._value, float)
6445e63bb423 feat(web) - Use native number type input for Number() and Integer().
John Rouillard <rouilj@ieee.org>
parents: 8285
diff changeset
1420
6445e63bb423 feat(web) - Use native number type input for Number() and Integer().
John Rouillard <rouilj@ieee.org>
parents: 8285
diff changeset
1421 self.assertEqual(d._value, 3.14)
6445e63bb423 feat(web) - Use native number type input for Number() and Integer().
John Rouillard <rouilj@ieee.org>
parents: 8285
diff changeset
1422
8317
4455cd036c25 fix: tests for changeset: 8314:7ff47307b4b1 use text for number input
John Rouillard <rouilj@ieee.org>
parents: 8305
diff changeset
1423 input_expected = """<input id="issue1@numberval" name="issue1@numberval" size="30" type="text" value="3.14">"""
8286
6445e63bb423 feat(web) - Use native number type input for Number() and Integer().
John Rouillard <rouilj@ieee.org>
parents: 8285
diff changeset
1424 self.assertEqual(d.field(), input_expected)
6445e63bb423 feat(web) - Use native number type input for Number() and Integer().
John Rouillard <rouilj@ieee.org>
parents: 8285
diff changeset
1425
8317
4455cd036c25 fix: tests for changeset: 8314:7ff47307b4b1 use text for number input
John Rouillard <rouilj@ieee.org>
parents: 8305
diff changeset
1426 input_expected = """<input id="issue1@numberval" name="issue1@numberval" size="30" step="50" type="text" value="3.14">"""
8286
6445e63bb423 feat(web) - Use native number type input for Number() and Integer().
John Rouillard <rouilj@ieee.org>
parents: 8285
diff changeset
1427 self.assertEqual(d.field(step="50"), input_expected)
6445e63bb423 feat(web) - Use native number type input for Number() and Integer().
John Rouillard <rouilj@ieee.org>
parents: 8285
diff changeset
1428
6445e63bb423 feat(web) - Use native number type input for Number() and Integer().
John Rouillard <rouilj@ieee.org>
parents: 8285
diff changeset
1429 input_expected = """<input id="issue1@numberval" name="issue1@numberval" size="30" type="text" value="3.14">"""
6445e63bb423 feat(web) - Use native number type input for Number() and Integer().
John Rouillard <rouilj@ieee.org>
parents: 8285
diff changeset
1430 self.assertEqual(d.field(type="text"), input_expected)
6445e63bb423 feat(web) - Use native number type input for Number() and Integer().
John Rouillard <rouilj@ieee.org>
parents: 8285
diff changeset
1431
6445e63bb423 feat(web) - Use native number type input for Number() and Integer().
John Rouillard <rouilj@ieee.org>
parents: 8285
diff changeset
1432 self.assertEqual(d.pretty("%0.3f"), "3.140")
6445e63bb423 feat(web) - Use native number type input for Number() and Integer().
John Rouillard <rouilj@ieee.org>
parents: 8285
diff changeset
1433 self.assertEqual(d.pretty("%0.3d"), "003")
6445e63bb423 feat(web) - Use native number type input for Number() and Integer().
John Rouillard <rouilj@ieee.org>
parents: 8285
diff changeset
1434 self.assertEqual(d.pretty("%2d"), " 3")
6445e63bb423 feat(web) - Use native number type input for Number() and Integer().
John Rouillard <rouilj@ieee.org>
parents: 8285
diff changeset
1435
6445e63bb423 feat(web) - Use native number type input for Number() and Integer().
John Rouillard <rouilj@ieee.org>
parents: 8285
diff changeset
1436 # see what happens if for other values
6445e63bb423 feat(web) - Use native number type input for Number() and Integer().
John Rouillard <rouilj@ieee.org>
parents: 8285
diff changeset
1437 value = d._value
6445e63bb423 feat(web) - Use native number type input for Number() and Integer().
John Rouillard <rouilj@ieee.org>
parents: 8285
diff changeset
1438 d._value = "1" # integer
6445e63bb423 feat(web) - Use native number type input for Number() and Integer().
John Rouillard <rouilj@ieee.org>
parents: 8285
diff changeset
1439 self.assertEqual(d.pretty("%2d"), "1")
6445e63bb423 feat(web) - Use native number type input for Number() and Integer().
John Rouillard <rouilj@ieee.org>
parents: 8285
diff changeset
1440 d._value = "I'mNotAFloat" # not a number
6445e63bb423 feat(web) - Use native number type input for Number() and Integer().
John Rouillard <rouilj@ieee.org>
parents: 8285
diff changeset
1441 self.assertEqual(d.pretty("%2d"), "I'mNotAFloat")
6445e63bb423 feat(web) - Use native number type input for Number() and Integer().
John Rouillard <rouilj@ieee.org>
parents: 8285
diff changeset
1442 d._value = value
6445e63bb423 feat(web) - Use native number type input for Number() and Integer().
John Rouillard <rouilj@ieee.org>
parents: 8285
diff changeset
1443
6445e63bb423 feat(web) - Use native number type input for Number() and Integer().
John Rouillard <rouilj@ieee.org>
parents: 8285
diff changeset
1444 # check permissions return
6445e63bb423 feat(web) - Use native number type input for Number() and Integer().
John Rouillard <rouilj@ieee.org>
parents: 8285
diff changeset
1445 is_view_ok_orig = d.is_view_ok
6445e63bb423 feat(web) - Use native number type input for Number() and Integer().
John Rouillard <rouilj@ieee.org>
parents: 8285
diff changeset
1446 is_edit_ok_orig = d.is_edit_ok
6445e63bb423 feat(web) - Use native number type input for Number() and Integer().
John Rouillard <rouilj@ieee.org>
parents: 8285
diff changeset
1447 no_access = lambda : False
6445e63bb423 feat(web) - Use native number type input for Number() and Integer().
John Rouillard <rouilj@ieee.org>
parents: 8285
diff changeset
1448
6445e63bb423 feat(web) - Use native number type input for Number() and Integer().
John Rouillard <rouilj@ieee.org>
parents: 8285
diff changeset
1449 d.is_view_ok = no_access
6445e63bb423 feat(web) - Use native number type input for Number() and Integer().
John Rouillard <rouilj@ieee.org>
parents: 8285
diff changeset
1450 self.assertEqual(d.plain(), "[hidden]")
6445e63bb423 feat(web) - Use native number type input for Number() and Integer().
John Rouillard <rouilj@ieee.org>
parents: 8285
diff changeset
1451
6445e63bb423 feat(web) - Use native number type input for Number() and Integer().
John Rouillard <rouilj@ieee.org>
parents: 8285
diff changeset
1452 d.is_edit_ok = no_access
6445e63bb423 feat(web) - Use native number type input for Number() and Integer().
John Rouillard <rouilj@ieee.org>
parents: 8285
diff changeset
1453 self.assertEqual(d.field(), "[hidden]")
6445e63bb423 feat(web) - Use native number type input for Number() and Integer().
John Rouillard <rouilj@ieee.org>
parents: 8285
diff changeset
1454
6445e63bb423 feat(web) - Use native number type input for Number() and Integer().
John Rouillard <rouilj@ieee.org>
parents: 8285
diff changeset
1455 d.is_view_ok = is_view_ok_orig
6445e63bb423 feat(web) - Use native number type input for Number() and Integer().
John Rouillard <rouilj@ieee.org>
parents: 8285
diff changeset
1456 self.assertEqual(d.field(), "3.14")
6445e63bb423 feat(web) - Use native number type input for Number() and Integer().
John Rouillard <rouilj@ieee.org>
parents: 8285
diff changeset
1457 d.is_edit_ok = is_edit_ok_orig
6445e63bb423 feat(web) - Use native number type input for Number() and Integer().
John Rouillard <rouilj@ieee.org>
parents: 8285
diff changeset
1458
7866
9bbc1d951677 issue2551331 - Fix repeat first/last methods.
John Rouillard <rouilj@ieee.org>
parents: 7864
diff changeset
1459 class ZUtilsTestcase(TemplatingTestCase):
9bbc1d951677 issue2551331 - Fix repeat first/last methods.
John Rouillard <rouilj@ieee.org>
parents: 7864
diff changeset
1460
9bbc1d951677 issue2551331 - Fix repeat first/last methods.
John Rouillard <rouilj@ieee.org>
parents: 7864
diff changeset
1461 def test_Iterator(self):
9bbc1d951677 issue2551331 - Fix repeat first/last methods.
John Rouillard <rouilj@ieee.org>
parents: 7864
diff changeset
1462 """Test all the iterator functions and properties.
9bbc1d951677 issue2551331 - Fix repeat first/last methods.
John Rouillard <rouilj@ieee.org>
parents: 7864
diff changeset
1463 """
9bbc1d951677 issue2551331 - Fix repeat first/last methods.
John Rouillard <rouilj@ieee.org>
parents: 7864
diff changeset
1464 sequence = ['one', 'two', '3', 4]
9bbc1d951677 issue2551331 - Fix repeat first/last methods.
John Rouillard <rouilj@ieee.org>
parents: 7864
diff changeset
1465 i = Iterator(sequence)
9bbc1d951677 issue2551331 - Fix repeat first/last methods.
John Rouillard <rouilj@ieee.org>
parents: 7864
diff changeset
1466 for j in [ # element, item, 1st, last, even, odd, number,
9bbc1d951677 issue2551331 - Fix repeat first/last methods.
John Rouillard <rouilj@ieee.org>
parents: 7864
diff changeset
1467 # letter, Letter, roman, Roman
9bbc1d951677 issue2551331 - Fix repeat first/last methods.
John Rouillard <rouilj@ieee.org>
parents: 7864
diff changeset
1468 (1, "one", 1, 0, True, 0, 1, 'a', 'A', 'i', 'I'),
9bbc1d951677 issue2551331 - Fix repeat first/last methods.
John Rouillard <rouilj@ieee.org>
parents: 7864
diff changeset
1469 (1, "two", 0, 0, False, 1, 2, 'b', 'B', 'ii', 'II'),
9bbc1d951677 issue2551331 - Fix repeat first/last methods.
John Rouillard <rouilj@ieee.org>
parents: 7864
diff changeset
1470 (1, "3", 0, 0, True, 0, 3, 'c', 'C', 'iii', 'III'),
9bbc1d951677 issue2551331 - Fix repeat first/last methods.
John Rouillard <rouilj@ieee.org>
parents: 7864
diff changeset
1471 (1, 4, 0, 1, False, 1, 4, 'd', 'D', 'iv', 'IV'),
9bbc1d951677 issue2551331 - Fix repeat first/last methods.
John Rouillard <rouilj@ieee.org>
parents: 7864
diff changeset
1472 # next() fails with 0 when past end of sequence
9bbc1d951677 issue2551331 - Fix repeat first/last methods.
John Rouillard <rouilj@ieee.org>
parents: 7864
diff changeset
1473 # everything else is left at end of sequence
9bbc1d951677 issue2551331 - Fix repeat first/last methods.
John Rouillard <rouilj@ieee.org>
parents: 7864
diff changeset
1474 (0, 4, 0, 1, False, 1, 4, 'd', 'D', 'iv', 'IV'),
9bbc1d951677 issue2551331 - Fix repeat first/last methods.
John Rouillard <rouilj@ieee.org>
parents: 7864
diff changeset
1475
9bbc1d951677 issue2551331 - Fix repeat first/last methods.
John Rouillard <rouilj@ieee.org>
parents: 7864
diff changeset
1476
9bbc1d951677 issue2551331 - Fix repeat first/last methods.
John Rouillard <rouilj@ieee.org>
parents: 7864
diff changeset
1477 ]:
9bbc1d951677 issue2551331 - Fix repeat first/last methods.
John Rouillard <rouilj@ieee.org>
parents: 7864
diff changeset
1478 element = i.next() # returns 1 if next item else 0
9bbc1d951677 issue2551331 - Fix repeat first/last methods.
John Rouillard <rouilj@ieee.org>
parents: 7864
diff changeset
1479 print(i.item)
9bbc1d951677 issue2551331 - Fix repeat first/last methods.
John Rouillard <rouilj@ieee.org>
parents: 7864
diff changeset
1480 self.assertEqual(element, j[0])
9bbc1d951677 issue2551331 - Fix repeat first/last methods.
John Rouillard <rouilj@ieee.org>
parents: 7864
diff changeset
1481 self.assertEqual(i.item, j[1])
9bbc1d951677 issue2551331 - Fix repeat first/last methods.
John Rouillard <rouilj@ieee.org>
parents: 7864
diff changeset
1482 self.assertEqual(i.first(), j[2])
9bbc1d951677 issue2551331 - Fix repeat first/last methods.
John Rouillard <rouilj@ieee.org>
parents: 7864
diff changeset
1483 self.assertEqual(i.start, j[2])
9bbc1d951677 issue2551331 - Fix repeat first/last methods.
John Rouillard <rouilj@ieee.org>
parents: 7864
diff changeset
1484 self.assertEqual(i.last(), j[3])
9bbc1d951677 issue2551331 - Fix repeat first/last methods.
John Rouillard <rouilj@ieee.org>
parents: 7864
diff changeset
1485 self.assertEqual(i.end, j[3])
9bbc1d951677 issue2551331 - Fix repeat first/last methods.
John Rouillard <rouilj@ieee.org>
parents: 7864
diff changeset
1486 self.assertIs(i.even(), j[4])
9bbc1d951677 issue2551331 - Fix repeat first/last methods.
John Rouillard <rouilj@ieee.org>
parents: 7864
diff changeset
1487 self.assertEqual(i.odd(), j[5])
9bbc1d951677 issue2551331 - Fix repeat first/last methods.
John Rouillard <rouilj@ieee.org>
parents: 7864
diff changeset
1488 self.assertEqual(i.number(), j[6])
9bbc1d951677 issue2551331 - Fix repeat first/last methods.
John Rouillard <rouilj@ieee.org>
parents: 7864
diff changeset
1489 self.assertEqual(i.index, j[6] - 1)
9bbc1d951677 issue2551331 - Fix repeat first/last methods.
John Rouillard <rouilj@ieee.org>
parents: 7864
diff changeset
1490 self.assertEqual(i.nextIndex, j[6])
9bbc1d951677 issue2551331 - Fix repeat first/last methods.
John Rouillard <rouilj@ieee.org>
parents: 7864
diff changeset
1491 self.assertEqual(i.letter(), j[7])
9bbc1d951677 issue2551331 - Fix repeat first/last methods.
John Rouillard <rouilj@ieee.org>
parents: 7864
diff changeset
1492 self.assertEqual(i.Letter(), j[8])
9bbc1d951677 issue2551331 - Fix repeat first/last methods.
John Rouillard <rouilj@ieee.org>
parents: 7864
diff changeset
1493 self.assertEqual(i.roman(), j[9])
9bbc1d951677 issue2551331 - Fix repeat first/last methods.
John Rouillard <rouilj@ieee.org>
parents: 7864
diff changeset
1494 self.assertEqual(i.Roman(), j[10])
9bbc1d951677 issue2551331 - Fix repeat first/last methods.
John Rouillard <rouilj@ieee.org>
parents: 7864
diff changeset
1495
9bbc1d951677 issue2551331 - Fix repeat first/last methods.
John Rouillard <rouilj@ieee.org>
parents: 7864
diff changeset
1496 class I:
9bbc1d951677 issue2551331 - Fix repeat first/last methods.
John Rouillard <rouilj@ieee.org>
parents: 7864
diff changeset
1497 def __init__(self, name, data):
9bbc1d951677 issue2551331 - Fix repeat first/last methods.
John Rouillard <rouilj@ieee.org>
parents: 7864
diff changeset
1498 self.name = name
9bbc1d951677 issue2551331 - Fix repeat first/last methods.
John Rouillard <rouilj@ieee.org>
parents: 7864
diff changeset
1499 self.data = data
9bbc1d951677 issue2551331 - Fix repeat first/last methods.
John Rouillard <rouilj@ieee.org>
parents: 7864
diff changeset
1500
9bbc1d951677 issue2551331 - Fix repeat first/last methods.
John Rouillard <rouilj@ieee.org>
parents: 7864
diff changeset
1501 sequence = [I('Al', 'd'),
9bbc1d951677 issue2551331 - Fix repeat first/last methods.
John Rouillard <rouilj@ieee.org>
parents: 7864
diff changeset
1502 I('Bob', 'e'),
9bbc1d951677 issue2551331 - Fix repeat first/last methods.
John Rouillard <rouilj@ieee.org>
parents: 7864
diff changeset
1503 I('Bob', 'd'),
9bbc1d951677 issue2551331 - Fix repeat first/last methods.
John Rouillard <rouilj@ieee.org>
parents: 7864
diff changeset
1504 I('Chip', 'd')
9bbc1d951677 issue2551331 - Fix repeat first/last methods.
John Rouillard <rouilj@ieee.org>
parents: 7864
diff changeset
1505 ]
9bbc1d951677 issue2551331 - Fix repeat first/last methods.
John Rouillard <rouilj@ieee.org>
parents: 7864
diff changeset
1506
9bbc1d951677 issue2551331 - Fix repeat first/last methods.
John Rouillard <rouilj@ieee.org>
parents: 7864
diff changeset
1507 iterator = iter(sequence)
9bbc1d951677 issue2551331 - Fix repeat first/last methods.
John Rouillard <rouilj@ieee.org>
parents: 7864
diff changeset
1508
9bbc1d951677 issue2551331 - Fix repeat first/last methods.
John Rouillard <rouilj@ieee.org>
parents: 7864
diff changeset
1509 # Iterator is supposed take both sequence and Python iterator.
9bbc1d951677 issue2551331 - Fix repeat first/last methods.
John Rouillard <rouilj@ieee.org>
parents: 7864
diff changeset
1510 for source in [sequence, iterator]:
9bbc1d951677 issue2551331 - Fix repeat first/last methods.
John Rouillard <rouilj@ieee.org>
parents: 7864
diff changeset
1511 i = Iterator(source)
9bbc1d951677 issue2551331 - Fix repeat first/last methods.
John Rouillard <rouilj@ieee.org>
parents: 7864
diff changeset
1512
9bbc1d951677 issue2551331 - Fix repeat first/last methods.
John Rouillard <rouilj@ieee.org>
parents: 7864
diff changeset
1513 element = i.next() # returns 1 if next item else 0
9bbc1d951677 issue2551331 - Fix repeat first/last methods.
John Rouillard <rouilj@ieee.org>
parents: 7864
diff changeset
1514 item1 = i.item
9bbc1d951677 issue2551331 - Fix repeat first/last methods.
John Rouillard <rouilj@ieee.org>
parents: 7864
diff changeset
1515
9bbc1d951677 issue2551331 - Fix repeat first/last methods.
John Rouillard <rouilj@ieee.org>
parents: 7864
diff changeset
1516 # note these can trigger calls by first/last to same_part().
9bbc1d951677 issue2551331 - Fix repeat first/last methods.
John Rouillard <rouilj@ieee.org>
parents: 7864
diff changeset
1517 # It can return true for first/last even when there are more
9bbc1d951677 issue2551331 - Fix repeat first/last methods.
John Rouillard <rouilj@ieee.org>
parents: 7864
diff changeset
1518 # items in the sequence. I am just testing the current
9bbc1d951677 issue2551331 - Fix repeat first/last methods.
John Rouillard <rouilj@ieee.org>
parents: 7864
diff changeset
1519 # implementation. Woe to the person who tries to change
9bbc1d951677 issue2551331 - Fix repeat first/last methods.
John Rouillard <rouilj@ieee.org>
parents: 7864
diff changeset
1520 # Iterator.py.
9bbc1d951677 issue2551331 - Fix repeat first/last methods.
John Rouillard <rouilj@ieee.org>
parents: 7864
diff changeset
1521
9bbc1d951677 issue2551331 - Fix repeat first/last methods.
John Rouillard <rouilj@ieee.org>
parents: 7864
diff changeset
1522 self.assertEqual(element, 1)
9bbc1d951677 issue2551331 - Fix repeat first/last methods.
John Rouillard <rouilj@ieee.org>
parents: 7864
diff changeset
1523 # i.start == 1, so it bypasses name check
9bbc1d951677 issue2551331 - Fix repeat first/last methods.
John Rouillard <rouilj@ieee.org>
parents: 7864
diff changeset
1524 self.assertEqual(i.first(name='namea'), 1)
9bbc1d951677 issue2551331 - Fix repeat first/last methods.
John Rouillard <rouilj@ieee.org>
parents: 7864
diff changeset
1525 self.assertEqual(i.first(name='name'), 1)
9bbc1d951677 issue2551331 - Fix repeat first/last methods.
John Rouillard <rouilj@ieee.org>
parents: 7864
diff changeset
1526 # i.end == 0 so it uses name check in object
9bbc1d951677 issue2551331 - Fix repeat first/last methods.
John Rouillard <rouilj@ieee.org>
parents: 7864
diff changeset
1527 self.assertEqual(i.last(name='namea'), 0)
9bbc1d951677 issue2551331 - Fix repeat first/last methods.
John Rouillard <rouilj@ieee.org>
parents: 7864
diff changeset
1528 self.assertEqual(i.last(name='name'), 0)
9bbc1d951677 issue2551331 - Fix repeat first/last methods.
John Rouillard <rouilj@ieee.org>
parents: 7864
diff changeset
1529
9bbc1d951677 issue2551331 - Fix repeat first/last methods.
John Rouillard <rouilj@ieee.org>
parents: 7864
diff changeset
1530 element = i.next() # returns 1 if next item else 0
9bbc1d951677 issue2551331 - Fix repeat first/last methods.
John Rouillard <rouilj@ieee.org>
parents: 7864
diff changeset
1531 item2 = i.item
9bbc1d951677 issue2551331 - Fix repeat first/last methods.
John Rouillard <rouilj@ieee.org>
parents: 7864
diff changeset
1532 self.assertEqual(element, 1)
9bbc1d951677 issue2551331 - Fix repeat first/last methods.
John Rouillard <rouilj@ieee.org>
parents: 7864
diff changeset
1533 # i.start == 0 so it uses name check
9bbc1d951677 issue2551331 - Fix repeat first/last methods.
John Rouillard <rouilj@ieee.org>
parents: 7864
diff changeset
1534 # between item1 and item2
9bbc1d951677 issue2551331 - Fix repeat first/last methods.
John Rouillard <rouilj@ieee.org>
parents: 7864
diff changeset
1535 self.assertEqual(i.first(name='namea'), 0)
9bbc1d951677 issue2551331 - Fix repeat first/last methods.
John Rouillard <rouilj@ieee.org>
parents: 7864
diff changeset
1536 self.assertEqual(i.first(name='name'), 0)
9bbc1d951677 issue2551331 - Fix repeat first/last methods.
John Rouillard <rouilj@ieee.org>
parents: 7864
diff changeset
1537 # i.end == 0 so it uses name check in object
9bbc1d951677 issue2551331 - Fix repeat first/last methods.
John Rouillard <rouilj@ieee.org>
parents: 7864
diff changeset
1538 # between item2 and the next item item3
9bbc1d951677 issue2551331 - Fix repeat first/last methods.
John Rouillard <rouilj@ieee.org>
parents: 7864
diff changeset
1539 self.assertEqual(i.last(name='namea'), 0)
9bbc1d951677 issue2551331 - Fix repeat first/last methods.
John Rouillard <rouilj@ieee.org>
parents: 7864
diff changeset
1540 self.assertEqual(i.last(name='name'), True)
9bbc1d951677 issue2551331 - Fix repeat first/last methods.
John Rouillard <rouilj@ieee.org>
parents: 7864
diff changeset
1541
9bbc1d951677 issue2551331 - Fix repeat first/last methods.
John Rouillard <rouilj@ieee.org>
parents: 7864
diff changeset
1542 element = i.next() # returns 1 if next item else 0
9bbc1d951677 issue2551331 - Fix repeat first/last methods.
John Rouillard <rouilj@ieee.org>
parents: 7864
diff changeset
1543 item3 = i.item
9bbc1d951677 issue2551331 - Fix repeat first/last methods.
John Rouillard <rouilj@ieee.org>
parents: 7864
diff changeset
1544 self.assertEqual(element, 1)
9bbc1d951677 issue2551331 - Fix repeat first/last methods.
John Rouillard <rouilj@ieee.org>
parents: 7864
diff changeset
1545 # i.start == 0 so it uses name check
9bbc1d951677 issue2551331 - Fix repeat first/last methods.
John Rouillard <rouilj@ieee.org>
parents: 7864
diff changeset
1546 self.assertEqual(i.first(name='namea'), 0)
9bbc1d951677 issue2551331 - Fix repeat first/last methods.
John Rouillard <rouilj@ieee.org>
parents: 7864
diff changeset
1547 self.assertEqual(i.first(name='name'), 1)
9bbc1d951677 issue2551331 - Fix repeat first/last methods.
John Rouillard <rouilj@ieee.org>
parents: 7864
diff changeset
1548 # i.end == 0 so it uses name check in object
9bbc1d951677 issue2551331 - Fix repeat first/last methods.
John Rouillard <rouilj@ieee.org>
parents: 7864
diff changeset
1549 # between item3 and the next item item4
9bbc1d951677 issue2551331 - Fix repeat first/last methods.
John Rouillard <rouilj@ieee.org>
parents: 7864
diff changeset
1550 self.assertEqual(i.last(name='namea'), 0)
9bbc1d951677 issue2551331 - Fix repeat first/last methods.
John Rouillard <rouilj@ieee.org>
parents: 7864
diff changeset
1551 self.assertEqual(i.last(name='name'), 0)
9bbc1d951677 issue2551331 - Fix repeat first/last methods.
John Rouillard <rouilj@ieee.org>
parents: 7864
diff changeset
1552
9bbc1d951677 issue2551331 - Fix repeat first/last methods.
John Rouillard <rouilj@ieee.org>
parents: 7864
diff changeset
1553 element = i.next() # returns 1 if next item else 0
9bbc1d951677 issue2551331 - Fix repeat first/last methods.
John Rouillard <rouilj@ieee.org>
parents: 7864
diff changeset
1554 item4 = i.item
9bbc1d951677 issue2551331 - Fix repeat first/last methods.
John Rouillard <rouilj@ieee.org>
parents: 7864
diff changeset
1555 self.assertEqual(element, 1)
9bbc1d951677 issue2551331 - Fix repeat first/last methods.
John Rouillard <rouilj@ieee.org>
parents: 7864
diff changeset
1556 # i.start == 0 so it uses name check
9bbc1d951677 issue2551331 - Fix repeat first/last methods.
John Rouillard <rouilj@ieee.org>
parents: 7864
diff changeset
1557 self.assertEqual(i.first(name='namea'), 0)
9bbc1d951677 issue2551331 - Fix repeat first/last methods.
John Rouillard <rouilj@ieee.org>
parents: 7864
diff changeset
1558 self.assertEqual(i.first(name='name'), 0)
9bbc1d951677 issue2551331 - Fix repeat first/last methods.
John Rouillard <rouilj@ieee.org>
parents: 7864
diff changeset
1559 # i.end == 0 so it uses name check in object
9bbc1d951677 issue2551331 - Fix repeat first/last methods.
John Rouillard <rouilj@ieee.org>
parents: 7864
diff changeset
1560 # last two object have same name (1)
9bbc1d951677 issue2551331 - Fix repeat first/last methods.
John Rouillard <rouilj@ieee.org>
parents: 7864
diff changeset
1561 self.assertEqual(i.last(name='namea'), 1)
9bbc1d951677 issue2551331 - Fix repeat first/last methods.
John Rouillard <rouilj@ieee.org>
parents: 7864
diff changeset
1562 self.assertEqual(i.last(name='name'), 1)
9bbc1d951677 issue2551331 - Fix repeat first/last methods.
John Rouillard <rouilj@ieee.org>
parents: 7864
diff changeset
1563
9bbc1d951677 issue2551331 - Fix repeat first/last methods.
John Rouillard <rouilj@ieee.org>
parents: 7864
diff changeset
1564 element = i.next() # returns 1 if next item else 0
9bbc1d951677 issue2551331 - Fix repeat first/last methods.
John Rouillard <rouilj@ieee.org>
parents: 7864
diff changeset
1565 self.assertEqual(element, 0)
9bbc1d951677 issue2551331 - Fix repeat first/last methods.
John Rouillard <rouilj@ieee.org>
parents: 7864
diff changeset
1566
9bbc1d951677 issue2551331 - Fix repeat first/last methods.
John Rouillard <rouilj@ieee.org>
parents: 7864
diff changeset
1567 # this is the underlying call for first/last
9bbc1d951677 issue2551331 - Fix repeat first/last methods.
John Rouillard <rouilj@ieee.org>
parents: 7864
diff changeset
1568 # when i.start/i.end are 0
9bbc1d951677 issue2551331 - Fix repeat first/last methods.
John Rouillard <rouilj@ieee.org>
parents: 7864
diff changeset
1569 # use non-existing attribute name, same item
9bbc1d951677 issue2551331 - Fix repeat first/last methods.
John Rouillard <rouilj@ieee.org>
parents: 7864
diff changeset
1570 self.assertIs(i.same_part('namea', item2, item2), False)
9bbc1d951677 issue2551331 - Fix repeat first/last methods.
John Rouillard <rouilj@ieee.org>
parents: 7864
diff changeset
1571 # use correct attribute name
9bbc1d951677 issue2551331 - Fix repeat first/last methods.
John Rouillard <rouilj@ieee.org>
parents: 7864
diff changeset
1572 self.assertIs(i.same_part('name', item2, item2), True)
9bbc1d951677 issue2551331 - Fix repeat first/last methods.
John Rouillard <rouilj@ieee.org>
parents: 7864
diff changeset
1573 # use no attribute name
9bbc1d951677 issue2551331 - Fix repeat first/last methods.
John Rouillard <rouilj@ieee.org>
parents: 7864
diff changeset
1574 self.assertIs(i.same_part(None, item2, item2), True)
9bbc1d951677 issue2551331 - Fix repeat first/last methods.
John Rouillard <rouilj@ieee.org>
parents: 7864
diff changeset
1575
9bbc1d951677 issue2551331 - Fix repeat first/last methods.
John Rouillard <rouilj@ieee.org>
parents: 7864
diff changeset
1576 # use non-existing attribute name, different item
9bbc1d951677 issue2551331 - Fix repeat first/last methods.
John Rouillard <rouilj@ieee.org>
parents: 7864
diff changeset
1577 # non-matching names
9bbc1d951677 issue2551331 - Fix repeat first/last methods.
John Rouillard <rouilj@ieee.org>
parents: 7864
diff changeset
1578 self.assertIs(i.same_part('namea', item1, item2), False)
9bbc1d951677 issue2551331 - Fix repeat first/last methods.
John Rouillard <rouilj@ieee.org>
parents: 7864
diff changeset
1579 # use correct attribute name
9bbc1d951677 issue2551331 - Fix repeat first/last methods.
John Rouillard <rouilj@ieee.org>
parents: 7864
diff changeset
1580 self.assertIs(i.same_part('name', item1, item2), False)
9bbc1d951677 issue2551331 - Fix repeat first/last methods.
John Rouillard <rouilj@ieee.org>
parents: 7864
diff changeset
1581 # use no attribute name
9bbc1d951677 issue2551331 - Fix repeat first/last methods.
John Rouillard <rouilj@ieee.org>
parents: 7864
diff changeset
1582 self.assertIs(i.same_part(None, item1, item2), False)
9bbc1d951677 issue2551331 - Fix repeat first/last methods.
John Rouillard <rouilj@ieee.org>
parents: 7864
diff changeset
1583
9bbc1d951677 issue2551331 - Fix repeat first/last methods.
John Rouillard <rouilj@ieee.org>
parents: 7864
diff changeset
1584 # use non-existing attribute name, different item
9bbc1d951677 issue2551331 - Fix repeat first/last methods.
John Rouillard <rouilj@ieee.org>
parents: 7864
diff changeset
1585 # matching names
9bbc1d951677 issue2551331 - Fix repeat first/last methods.
John Rouillard <rouilj@ieee.org>
parents: 7864
diff changeset
1586 self.assertIs(i.same_part('namea', item2, item3), False)
9bbc1d951677 issue2551331 - Fix repeat first/last methods.
John Rouillard <rouilj@ieee.org>
parents: 7864
diff changeset
1587 # use correct attribute name
9bbc1d951677 issue2551331 - Fix repeat first/last methods.
John Rouillard <rouilj@ieee.org>
parents: 7864
diff changeset
1588 self.assertIs(i.same_part('name', item2, item3), True)
9bbc1d951677 issue2551331 - Fix repeat first/last methods.
John Rouillard <rouilj@ieee.org>
parents: 7864
diff changeset
1589 # use no attribute name
9bbc1d951677 issue2551331 - Fix repeat first/last methods.
John Rouillard <rouilj@ieee.org>
parents: 7864
diff changeset
1590 self.assertIs(i.same_part(None, item2, item3), False)
9bbc1d951677 issue2551331 - Fix repeat first/last methods.
John Rouillard <rouilj@ieee.org>
parents: 7864
diff changeset
1591
5815
fe35a232c6dc Make comment block raw to avoid travis ci warning on \d in comment block.
John Rouillard <rouilj@ieee.org>
parents: 5811
diff changeset
1592 r'''
2158
a0cfea4e5956 start at templating tests
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
1593 class HTMLPermissions:
a0cfea4e5956 start at templating tests
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
1594 def is_edit_ok(self):
a0cfea4e5956 start at templating tests
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
1595 def is_view_ok(self):
a0cfea4e5956 start at templating tests
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
1596 def is_only_view_ok(self):
a0cfea4e5956 start at templating tests
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
1597 def view_check(self):
a0cfea4e5956 start at templating tests
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
1598 def edit_check(self):
a0cfea4e5956 start at templating tests
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
1599
a0cfea4e5956 start at templating tests
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
1600 def input_html4(**attrs):
a0cfea4e5956 start at templating tests
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
1601
a0cfea4e5956 start at templating tests
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
1602 class HTMLInputMixin:
a0cfea4e5956 start at templating tests
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
1603 def __init__(self):
a0cfea4e5956 start at templating tests
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
1604
a0cfea4e5956 start at templating tests
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
1605 class HTMLClass(HTMLInputMixin, HTMLPermissions):
a0cfea4e5956 start at templating tests
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
1606 def __init__(self, client, classname, anonymous=0):
a0cfea4e5956 start at templating tests
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
1607 def __repr__(self):
a0cfea4e5956 start at templating tests
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
1608 def __getitem__(self, item):
a0cfea4e5956 start at templating tests
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
1609 def __getattr__(self, attr):
a0cfea4e5956 start at templating tests
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
1610 def designator(self):
5811
7d276bb8b46d More invalid escape sequence fixes.
John Rouillard <rouilj@ieee.org>
parents: 5795
diff changeset
1611 def getItem(self, itemid, num_re=re.compile(r'-?\d+')):
5226
578e86e015f9 Changed function signature for properties to correspond to checkin:
John Rouillard <rouilj@ieee.org>
parents: 5211
diff changeset
1612 def properties(self, sort=1, cansearch=True):
2158
a0cfea4e5956 start at templating tests
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
1613 def list(self, sort_on=None):
a0cfea4e5956 start at templating tests
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
1614 def csv(self):
a0cfea4e5956 start at templating tests
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
1615 def propnames(self):
a0cfea4e5956 start at templating tests
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
1616 def filter(self, request=None, filterspec={}, sort=(None,None),
a0cfea4e5956 start at templating tests
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
1617 def classhelp(self, properties=None, label='(list)', width='500',
a0cfea4e5956 start at templating tests
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
1618 def submit(self, label="Submit New Entry"):
a0cfea4e5956 start at templating tests
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
1619 def history(self):
a0cfea4e5956 start at templating tests
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
1620 def renderWith(self, name, **kwargs):
a0cfea4e5956 start at templating tests
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
1621
a0cfea4e5956 start at templating tests
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
1622 class HTMLItem(HTMLInputMixin, HTMLPermissions):
a0cfea4e5956 start at templating tests
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
1623 def __init__(self, client, classname, nodeid, anonymous=0):
a0cfea4e5956 start at templating tests
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
1624 def __repr__(self):
a0cfea4e5956 start at templating tests
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
1625 def __getitem__(self, item):
a0cfea4e5956 start at templating tests
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
1626 def __getattr__(self, attr):
a0cfea4e5956 start at templating tests
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
1627 def designator(self):
a0cfea4e5956 start at templating tests
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
1628 def is_retired(self):
a0cfea4e5956 start at templating tests
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
1629 def submit(self, label="Submit Changes"):
a0cfea4e5956 start at templating tests
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
1630 def journal(self, direction='descending'):
a0cfea4e5956 start at templating tests
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
1631 def history(self, direction='descending', dre=re.compile('\d+')):
a0cfea4e5956 start at templating tests
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
1632 def renderQueryForm(self):
a0cfea4e5956 start at templating tests
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
1633
a0cfea4e5956 start at templating tests
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
1634 class HTMLUserPermission:
a0cfea4e5956 start at templating tests
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
1635 def is_edit_ok(self):
a0cfea4e5956 start at templating tests
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
1636 def is_view_ok(self):
a0cfea4e5956 start at templating tests
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
1637 def _user_perm_check(self, type):
a0cfea4e5956 start at templating tests
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
1638
a0cfea4e5956 start at templating tests
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
1639 class HTMLUserClass(HTMLUserPermission, HTMLClass):
a0cfea4e5956 start at templating tests
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
1640
a0cfea4e5956 start at templating tests
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
1641 class HTMLUser(HTMLUserPermission, HTMLItem):
a0cfea4e5956 start at templating tests
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
1642 def __init__(self, client, classname, nodeid, anonymous=0):
a0cfea4e5956 start at templating tests
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
1643 def hasPermission(self, permission, classname=_marker):
a0cfea4e5956 start at templating tests
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
1644
a0cfea4e5956 start at templating tests
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
1645 class HTMLProperty(HTMLInputMixin, HTMLPermissions):
a0cfea4e5956 start at templating tests
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
1646 def __init__(self, client, classname, nodeid, prop, name, value,
a0cfea4e5956 start at templating tests
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
1647 def __repr__(self):
a0cfea4e5956 start at templating tests
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
1648 def __str__(self):
5414
3fa026621f69 Python 3 preparation: comparisons.
Joseph Myers <jsm@polyomino.org.uk>
parents: 5388
diff changeset
1649 def __lt__(self, other):
3fa026621f69 Python 3 preparation: comparisons.
Joseph Myers <jsm@polyomino.org.uk>
parents: 5388
diff changeset
1650 def __le__(self, other):
3fa026621f69 Python 3 preparation: comparisons.
Joseph Myers <jsm@polyomino.org.uk>
parents: 5388
diff changeset
1651 def __eq__(self, other):
3fa026621f69 Python 3 preparation: comparisons.
Joseph Myers <jsm@polyomino.org.uk>
parents: 5388
diff changeset
1652 def __ne__(self, other):
3fa026621f69 Python 3 preparation: comparisons.
Joseph Myers <jsm@polyomino.org.uk>
parents: 5388
diff changeset
1653 def __gt__(self, other):
3fa026621f69 Python 3 preparation: comparisons.
Joseph Myers <jsm@polyomino.org.uk>
parents: 5388
diff changeset
1654 def __ge__(self, other):
2158
a0cfea4e5956 start at templating tests
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
1655 def is_edit_ok(self):
a0cfea4e5956 start at templating tests
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
1656 def is_view_ok(self):
a0cfea4e5956 start at templating tests
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
1657
a0cfea4e5956 start at templating tests
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
1658 class StringHTMLProperty(HTMLProperty):
a0cfea4e5956 start at templating tests
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
1659 def _hyper_repl(self, match):
a0cfea4e5956 start at templating tests
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
1660 def hyperlinked(self):
a0cfea4e5956 start at templating tests
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
1661 def plain(self, escape=0, hyperlink=0):
a0cfea4e5956 start at templating tests
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
1662 def stext(self, escape=0):
a0cfea4e5956 start at templating tests
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
1663 def field(self, size = 30):
a0cfea4e5956 start at templating tests
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
1664 def multiline(self, escape=0, rows=5, cols=40):
a0cfea4e5956 start at templating tests
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
1665 def email(self, escape=1):
a0cfea4e5956 start at templating tests
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
1666
a0cfea4e5956 start at templating tests
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
1667 class PasswordHTMLProperty(HTMLProperty):
a0cfea4e5956 start at templating tests
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
1668 def plain(self):
a0cfea4e5956 start at templating tests
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
1669 def field(self, size = 30):
a0cfea4e5956 start at templating tests
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
1670 def confirm(self, size = 30):
a0cfea4e5956 start at templating tests
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
1671
a0cfea4e5956 start at templating tests
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
1672 class NumberHTMLProperty(HTMLProperty):
a0cfea4e5956 start at templating tests
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
1673 def plain(self):
a0cfea4e5956 start at templating tests
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
1674 def field(self, size = 30):
a0cfea4e5956 start at templating tests
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
1675 def __int__(self):
a0cfea4e5956 start at templating tests
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
1676 def __float__(self):
a0cfea4e5956 start at templating tests
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
1677
5067
e424987d294a Add support for an integer type to join the existing number type.
John Rouillard <rouilj@ieee.org>
parents: 5037
diff changeset
1678 class IntegerHTMLProperty(HTMLProperty):
e424987d294a Add support for an integer type to join the existing number type.
John Rouillard <rouilj@ieee.org>
parents: 5037
diff changeset
1679 def plain(self):
e424987d294a Add support for an integer type to join the existing number type.
John Rouillard <rouilj@ieee.org>
parents: 5037
diff changeset
1680 def field(self, size = 30):
e424987d294a Add support for an integer type to join the existing number type.
John Rouillard <rouilj@ieee.org>
parents: 5037
diff changeset
1681 def __int__(self):
e424987d294a Add support for an integer type to join the existing number type.
John Rouillard <rouilj@ieee.org>
parents: 5037
diff changeset
1682
2158
a0cfea4e5956 start at templating tests
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
1683 class BooleanHTMLProperty(HTMLProperty):
a0cfea4e5956 start at templating tests
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
1684 def plain(self):
a0cfea4e5956 start at templating tests
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
1685 def field(self):
a0cfea4e5956 start at templating tests
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
1686
a0cfea4e5956 start at templating tests
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
1687 class DateHTMLProperty(HTMLProperty):
a0cfea4e5956 start at templating tests
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
1688 def plain(self):
a0cfea4e5956 start at templating tests
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
1689 def now(self):
a0cfea4e5956 start at templating tests
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
1690 def field(self, size = 30):
a0cfea4e5956 start at templating tests
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
1691 def reldate(self, pretty=1):
a0cfea4e5956 start at templating tests
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
1692 def pretty(self, format=_marker):
a0cfea4e5956 start at templating tests
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
1693 def local(self, offset):
a0cfea4e5956 start at templating tests
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
1694
a0cfea4e5956 start at templating tests
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
1695 class IntervalHTMLProperty(HTMLProperty):
a0cfea4e5956 start at templating tests
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
1696 def plain(self):
a0cfea4e5956 start at templating tests
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
1697 def pretty(self):
a0cfea4e5956 start at templating tests
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
1698 def field(self, size = 30):
a0cfea4e5956 start at templating tests
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
1699
a0cfea4e5956 start at templating tests
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
1700 class LinkHTMLProperty(HTMLProperty):
a0cfea4e5956 start at templating tests
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
1701 def __init__(self, *args, **kw):
a0cfea4e5956 start at templating tests
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
1702 def __getattr__(self, attr):
a0cfea4e5956 start at templating tests
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
1703 def plain(self, escape=0):
a0cfea4e5956 start at templating tests
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
1704 def field(self, showid=0, size=None):
a0cfea4e5956 start at templating tests
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
1705 def menu(self, size=None, height=None, showid=0, additional=[],
a0cfea4e5956 start at templating tests
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
1706
a0cfea4e5956 start at templating tests
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
1707 class MultilinkHTMLProperty(HTMLProperty):
a0cfea4e5956 start at templating tests
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
1708 def __init__(self, *args, **kwargs):
a0cfea4e5956 start at templating tests
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
1709 def __len__(self):
a0cfea4e5956 start at templating tests
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
1710 def __getattr__(self, attr):
a0cfea4e5956 start at templating tests
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
1711 def __getitem__(self, num):
a0cfea4e5956 start at templating tests
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
1712 def __contains__(self, value):
a0cfea4e5956 start at templating tests
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
1713 def reverse(self):
5903
c3728772c594 Add reverse option to hyperdb property wrapper by David Sowder
John Rouillard <rouilj@ieee.org>
parents: 5815
diff changeset
1714 def sorted(self, property, reverse=False):
2158
a0cfea4e5956 start at templating tests
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
1715 def plain(self, escape=0):
a0cfea4e5956 start at templating tests
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
1716 def field(self, size=30, showid=0):
a0cfea4e5956 start at templating tests
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
1717 def menu(self, size=None, height=None, showid=0, additional=[],
a0cfea4e5956 start at templating tests
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
1718
5414
3fa026621f69 Python 3 preparation: comparisons.
Joseph Myers <jsm@polyomino.org.uk>
parents: 5388
diff changeset
1719 def make_key_function(db, classname, sort_on=None):
3fa026621f69 Python 3 preparation: comparisons.
Joseph Myers <jsm@polyomino.org.uk>
parents: 5388
diff changeset
1720 def keyfunc(a):
2158
a0cfea4e5956 start at templating tests
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
1721
a0cfea4e5956 start at templating tests
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
1722 def find_sort_key(linkcl):
a0cfea4e5956 start at templating tests
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
1723
a0cfea4e5956 start at templating tests
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
1724 def handleListCGIValue(value):
a0cfea4e5956 start at templating tests
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
1725
a0cfea4e5956 start at templating tests
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
1726 class ShowDict:
a0cfea4e5956 start at templating tests
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
1727 def __init__(self, columns):
a0cfea4e5956 start at templating tests
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
1728 def __getitem__(self, name):
a0cfea4e5956 start at templating tests
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
1729
a0cfea4e5956 start at templating tests
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
1730 class HTMLRequest(HTMLInputMixin):
a0cfea4e5956 start at templating tests
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
1731 def __init__(self, client):
a0cfea4e5956 start at templating tests
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
1732 def _post_init(self):
a0cfea4e5956 start at templating tests
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
1733 def updateFromURL(self, url):
a0cfea4e5956 start at templating tests
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
1734 def update(self, kwargs):
a0cfea4e5956 start at templating tests
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
1735 def description(self):
a0cfea4e5956 start at templating tests
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
1736 def __str__(self):
a0cfea4e5956 start at templating tests
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
1737 def indexargs_form(self, columns=1, sort=1, group=1, filter=1,
a0cfea4e5956 start at templating tests
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
1738 def indexargs_url(self, url, args):
a0cfea4e5956 start at templating tests
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
1739 def base_javascript(self):
a0cfea4e5956 start at templating tests
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
1740 def batch(self):
a0cfea4e5956 start at templating tests
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
1741
a0cfea4e5956 start at templating tests
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
1742 class Batch(ZTUtils.Batch):
a0cfea4e5956 start at templating tests
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
1743 def __init__(self, client, sequence, size, start, end=0, orphan=0,
a0cfea4e5956 start at templating tests
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
1744 def __getitem__(self, index):
a0cfea4e5956 start at templating tests
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
1745 def propchanged(self, property):
a0cfea4e5956 start at templating tests
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
1746 def previous(self):
a0cfea4e5956 start at templating tests
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
1747 def next(self):
a0cfea4e5956 start at templating tests
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
1748
5201
a9ace22e0a2f issue 2550690 - Adding anti-csrf measures to roundup following
John Rouillard <rouilj@ieee.org>
parents: 5190
diff changeset
1749 #class TemplatingUtils:
a9ace22e0a2f issue 2550690 - Adding anti-csrf measures to roundup following
John Rouillard <rouilj@ieee.org>
parents: 5190
diff changeset
1750 # def __init__(self, client):
a9ace22e0a2f issue 2550690 - Adding anti-csrf measures to roundup following
John Rouillard <rouilj@ieee.org>
parents: 5190
diff changeset
1751 # def Batch(self, sequence, size, start, end=0, orphan=0, overlap=0):
2158
a0cfea4e5956 start at templating tests
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
1752
a0cfea4e5956 start at templating tests
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
1753 class NoTemplate(Exception):
a0cfea4e5956 start at templating tests
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
1754 class Unauthorised(Exception):
a0cfea4e5956 start at templating tests
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
1755 def __init__(self, action, klass):
a0cfea4e5956 start at templating tests
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
1756 def __str__(self):
a0cfea4e5956 start at templating tests
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
1757
4720
fd72576e07ed API break: rename Templates to Loader for zopetal and chameleon
anatoly techtonik <techtonik@gmail.com>
parents: 4647
diff changeset
1758 class Loader:
2158
a0cfea4e5956 start at templating tests
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
1759 def __init__(self, dir):
a0cfea4e5956 start at templating tests
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
1760 def precompileTemplates(self):
4727
5033c2ad80a7 templating: Rename LoaderBase.get() to LoaderBase.load() for clarity
anatoly techtonik <techtonik@gmail.com>
parents: 4720
diff changeset
1761 def load(self, name, extension=None):
2158
a0cfea4e5956 start at templating tests
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
1762 def __getitem__(self, name):
a0cfea4e5956 start at templating tests
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
1763
a0cfea4e5956 start at templating tests
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
1764 class RoundupPageTemplate(PageTemplate.PageTemplate):
a0cfea4e5956 start at templating tests
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
1765 def getContext(self, client, classname, request):
a0cfea4e5956 start at templating tests
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
1766 def render(self, client, classname, request, **options):
a0cfea4e5956 start at templating tests
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
1767 def __repr__(self):
a0cfea4e5956 start at templating tests
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
1768 '''
a0cfea4e5956 start at templating tests
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
1769
2716
305d346f8f3b disable invalid assertions
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2158
diff changeset
1770 # vim: set et sts=4 sw=4 :

Roundup Issue Tracker: http://roundup-tracker.org/