annotate test/test_templating.py @ 7800:2d4684e4702d

fix: enhancement to history command output and % template fix. Rather than using the key field, use the label field for descriptions. Call cls.labelprop(default_to_id=True) so it returns id rather than the first sorted property name. If labelprop() returns 'id' or 'title', we return nothing. 'id' means there is no label set and no properties named 'name' or 'title'. So have the caller do whatever it wants (prepend classname for example) when there is no human readable name. This prevents %(name)s%(key)s from producing: 23(23). Also don't accept the 'title' property. Titles can be too long. Arguably we could: '%(name)20s' to limit the title length. However without ellipses or something truncating the title might be confusing. So again pretend there is no human readable name.
author John Rouillard <rouilj@ieee.org>
date Tue, 12 Mar 2024 11:52:17 -0400
parents 978285986b2c
children b080cdb8b199
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
5376
64b05e24dbd8 Python 3 preparation: convert print to a function.
Joseph Myers <jsm@polyomino.org.uk>
parents: 5226
diff changeset
1 from __future__ import print_function
2158
a0cfea4e5956 start at templating tests
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
2 import unittest
7032
f529cca242dc flake8: fix imports,
John Rouillard <rouilj@ieee.org>
parents: 6995
diff changeset
3 import time
2158
a0cfea4e5956 start at templating tests
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
4
7582
978285986b2c fix: issue2551193 - Fix roundup for removal of cgi and cgitb ...
John Rouillard <rouilj@ieee.org>
parents: 7576
diff changeset
5 from roundup.anypy.cgi_ import FieldStorage, MiniFieldStorage
2158
a0cfea4e5956 start at templating tests
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
6 from roundup.cgi.templating import *
5388
d26921b851c3 Python 3 preparation: make relative imports explicit.
Joseph Myers <jsm@polyomino.org.uk>
parents: 5378
diff changeset
7 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
8 from .html_norm import NormalizingHtmlParser
2158
a0cfea4e5956 start at templating tests
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
9
6096
c914b3d8362f If rst missing skip; initial attempt to test structuredtext.
John Rouillard <rouilj@ieee.org>
parents: 6095
diff changeset
10
c914b3d8362f If rst missing skip; initial attempt to test structuredtext.
John Rouillard <rouilj@ieee.org>
parents: 6095
diff changeset
11 import pytest
c914b3d8362f If rst missing skip; initial attempt to test structuredtext.
John Rouillard <rouilj@ieee.org>
parents: 6095
diff changeset
12 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
13
7576
7bdf9c0f74b9 Handle error id markdown2 not defined.
John Rouillard <rouilj@ieee.org>
parents: 7561
diff changeset
14 try:
7bdf9c0f74b9 Handle error id markdown2 not defined.
John Rouillard <rouilj@ieee.org>
parents: 7561
diff changeset
15 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
16 except ImportError:
7bdf9c0f74b9 Handle error id markdown2 not defined.
John Rouillard <rouilj@ieee.org>
parents: 7561
diff changeset
17 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
18
6099
55c56ceacb8e escape HTML tags in markdown content
Christof Meerwald <cmeerw@cmeerw.org>
parents: 6098
diff changeset
19 if ReStructuredText:
6096
c914b3d8362f If rst missing skip; initial attempt to test structuredtext.
John Rouillard <rouilj@ieee.org>
parents: 6095
diff changeset
20 skip_rst = lambda func, *args, **kwargs: func
6099
55c56ceacb8e escape HTML tags in markdown content
Christof Meerwald <cmeerw@cmeerw.org>
parents: 6098
diff changeset
21 else:
6096
c914b3d8362f If rst missing skip; initial attempt to test structuredtext.
John Rouillard <rouilj@ieee.org>
parents: 6095
diff changeset
22 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
23 reason='ReStructuredText not available'))
c914b3d8362f If rst missing skip; initial attempt to test structuredtext.
John Rouillard <rouilj@ieee.org>
parents: 6095
diff changeset
24
6099
55c56ceacb8e escape HTML tags in markdown content
Christof Meerwald <cmeerw@cmeerw.org>
parents: 6098
diff changeset
25 if StructuredText:
6096
c914b3d8362f If rst missing skip; initial attempt to test structuredtext.
John Rouillard <rouilj@ieee.org>
parents: 6095
diff changeset
26 skip_stext = lambda func, *args, **kwargs: func
6099
55c56ceacb8e escape HTML tags in markdown content
Christof Meerwald <cmeerw@cmeerw.org>
parents: 6098
diff changeset
27 else:
55c56ceacb8e escape HTML tags in markdown content
Christof Meerwald <cmeerw@cmeerw.org>
parents: 6098
diff changeset
28 skip_stext = mark_class(pytest.mark.skip(
55c56ceacb8e escape HTML tags in markdown content
Christof Meerwald <cmeerw@cmeerw.org>
parents: 6098
diff changeset
29 reason='StructuredText not available'))
55c56ceacb8e escape HTML tags in markdown content
Christof Meerwald <cmeerw@cmeerw.org>
parents: 6098
diff changeset
30
55c56ceacb8e escape HTML tags in markdown content
Christof Meerwald <cmeerw@cmeerw.org>
parents: 6098
diff changeset
31 import roundup.cgi.templating
55c56ceacb8e escape HTML tags in markdown content
Christof Meerwald <cmeerw@cmeerw.org>
parents: 6098
diff changeset
32 if roundup.cgi.templating._import_mistune():
55c56ceacb8e escape HTML tags in markdown content
Christof Meerwald <cmeerw@cmeerw.org>
parents: 6098
diff changeset
33 skip_mistune = lambda func, *args, **kwargs: func
55c56ceacb8e escape HTML tags in markdown content
Christof Meerwald <cmeerw@cmeerw.org>
parents: 6098
diff changeset
34 else:
55c56ceacb8e escape HTML tags in markdown content
Christof Meerwald <cmeerw@cmeerw.org>
parents: 6098
diff changeset
35 skip_mistune = mark_class(pytest.mark.skip(
55c56ceacb8e escape HTML tags in markdown content
Christof Meerwald <cmeerw@cmeerw.org>
parents: 6098
diff changeset
36 reason='mistune not available'))
6095
3ada6a3f48e1 fixed ReStructuredText encoding with Python 3
Christof Meerwald <cmeerw@cmeerw.org>
parents: 6059
diff changeset
37
6099
55c56ceacb8e escape HTML tags in markdown content
Christof Meerwald <cmeerw@cmeerw.org>
parents: 6098
diff changeset
38 if roundup.cgi.templating._import_markdown2():
55c56ceacb8e escape HTML tags in markdown content
Christof Meerwald <cmeerw@cmeerw.org>
parents: 6098
diff changeset
39 skip_markdown2 = lambda func, *args, **kwargs: func
55c56ceacb8e escape HTML tags in markdown content
Christof Meerwald <cmeerw@cmeerw.org>
parents: 6098
diff changeset
40 else:
55c56ceacb8e escape HTML tags in markdown content
Christof Meerwald <cmeerw@cmeerw.org>
parents: 6098
diff changeset
41 skip_markdown2 = mark_class(pytest.mark.skip(
55c56ceacb8e escape HTML tags in markdown content
Christof Meerwald <cmeerw@cmeerw.org>
parents: 6098
diff changeset
42 reason='markdown2 not available'))
55c56ceacb8e escape HTML tags in markdown content
Christof Meerwald <cmeerw@cmeerw.org>
parents: 6098
diff changeset
43
55c56ceacb8e escape HTML tags in markdown content
Christof Meerwald <cmeerw@cmeerw.org>
parents: 6098
diff changeset
44 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
45 skip_markdown = lambda func, *args, **kwargs: func
6099
55c56ceacb8e escape HTML tags in markdown content
Christof Meerwald <cmeerw@cmeerw.org>
parents: 6098
diff changeset
46 else:
55c56ceacb8e escape HTML tags in markdown content
Christof Meerwald <cmeerw@cmeerw.org>
parents: 6098
diff changeset
47 skip_markdown = mark_class(pytest.mark.skip(
55c56ceacb8e escape HTML tags in markdown content
Christof Meerwald <cmeerw@cmeerw.org>
parents: 6098
diff changeset
48 reason='markdown not available'))
6097
90a1470edbea added markdown rendering support using either markdown2 or markdown
Christof Meerwald <cmeerw@cmeerw.org>
parents: 6096
diff changeset
49
6095
3ada6a3f48e1 fixed ReStructuredText encoding with Python 3
Christof Meerwald <cmeerw@cmeerw.org>
parents: 6059
diff changeset
50 from roundup.anypy.strings import u2s, s2u
3ada6a3f48e1 fixed ReStructuredText encoding with Python 3
Christof Meerwald <cmeerw@cmeerw.org>
parents: 6059
diff changeset
51
6826
28b906a237d8 Fix anti_csrf_nonce test
John Rouillard <rouilj@ieee.org>
parents: 6817
diff changeset
52 from roundup.backends.sessions_common import SessionCommon
28b906a237d8 Fix anti_csrf_nonce test
John Rouillard <rouilj@ieee.org>
parents: 6817
diff changeset
53
28b906a237d8 Fix anti_csrf_nonce test
John Rouillard <rouilj@ieee.org>
parents: 6817
diff changeset
54 class MockDatabase(MockNull, SessionCommon):
2158
a0cfea4e5956 start at templating tests
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
55 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
56 # limit class names
6404
e29d5f4e0af4 issue2551132 - Setting form value in query string --- issues
John Rouillard <rouilj@ieee.org>
parents: 6377
diff changeset
57 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
58 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
59 # 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
60 # otherwise designators like 'issue1' can't be hyperlinked.
6338
a70a0c138dd9 Test hyperlinked method on designators
John Rouillard <rouilj@ieee.org>
parents: 6337
diff changeset
61 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
62 return self.classes[name]
a0cfea4e5956 start at templating tests
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
63
5201
a9ace22e0a2f issue 2550690 - Adding anti-csrf measures to roundup following
John Rouillard <rouilj@ieee.org>
parents: 5190
diff changeset
64 # 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
65 storage = {}
a9ace22e0a2f issue 2550690 - Adding anti-csrf measures to roundup following
John Rouillard <rouilj@ieee.org>
parents: 5190
diff changeset
66 def set(self, key, **props):
a9ace22e0a2f issue 2550690 - Adding anti-csrf measures to roundup following
John Rouillard <rouilj@ieee.org>
parents: 5190
diff changeset
67 MockDatabase.storage[key] = {}
6817
38b73f7495f8 fix mock datbase
John Rouillard <rouilj@ieee.org>
parents: 6689
diff changeset
68 if '__timestamp' not in props:
38b73f7495f8 fix mock datbase
John Rouillard <rouilj@ieee.org>
parents: 6689
diff changeset
69 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
70 MockDatabase.storage[key].update(props)
a9ace22e0a2f issue 2550690 - Adding anti-csrf measures to roundup following
John Rouillard <rouilj@ieee.org>
parents: 5190
diff changeset
71
a9ace22e0a2f issue 2550690 - Adding anti-csrf measures to roundup following
John Rouillard <rouilj@ieee.org>
parents: 5190
diff changeset
72 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
73 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
74 return default
a9ace22e0a2f issue 2550690 - Adding anti-csrf measures to roundup following
John Rouillard <rouilj@ieee.org>
parents: 5190
diff changeset
75 return MockDatabase.storage[key][field]
a9ace22e0a2f issue 2550690 - Adding anti-csrf measures to roundup following
John Rouillard <rouilj@ieee.org>
parents: 5190
diff changeset
76
6817
38b73f7495f8 fix mock datbase
John Rouillard <rouilj@ieee.org>
parents: 6689
diff changeset
77 def getall(self, key):
38b73f7495f8 fix mock datbase
John Rouillard <rouilj@ieee.org>
parents: 6689
diff changeset
78 if key not in MockDatabase.storage:
38b73f7495f8 fix mock datbase
John Rouillard <rouilj@ieee.org>
parents: 6689
diff changeset
79 return default
38b73f7495f8 fix mock datbase
John Rouillard <rouilj@ieee.org>
parents: 6689
diff changeset
80 return MockDatabase.storage[key]
38b73f7495f8 fix mock datbase
John Rouillard <rouilj@ieee.org>
parents: 6689
diff changeset
81
5201
a9ace22e0a2f issue 2550690 - Adding anti-csrf measures to roundup following
John Rouillard <rouilj@ieee.org>
parents: 5190
diff changeset
82 def exists(self,key):
a9ace22e0a2f issue 2550690 - Adding anti-csrf measures to roundup following
John Rouillard <rouilj@ieee.org>
parents: 5190
diff changeset
83 return key in MockDatabase.storage
a9ace22e0a2f issue 2550690 - Adding anti-csrf measures to roundup following
John Rouillard <rouilj@ieee.org>
parents: 5190
diff changeset
84
a9ace22e0a2f issue 2550690 - Adding anti-csrf measures to roundup following
John Rouillard <rouilj@ieee.org>
parents: 5190
diff changeset
85 def getOTKManager(self):
a9ace22e0a2f issue 2550690 - Adding anti-csrf measures to roundup following
John Rouillard <rouilj@ieee.org>
parents: 5190
diff changeset
86 return MockDatabase()
a9ace22e0a2f issue 2550690 - Adding anti-csrf measures to roundup following
John Rouillard <rouilj@ieee.org>
parents: 5190
diff changeset
87
6817
38b73f7495f8 fix mock datbase
John Rouillard <rouilj@ieee.org>
parents: 6689
diff changeset
88 def lifetime(self, seconds):
38b73f7495f8 fix mock datbase
John Rouillard <rouilj@ieee.org>
parents: 6689
diff changeset
89 return time.time() - 7*24*3600 + seconds
38b73f7495f8 fix mock datbase
John Rouillard <rouilj@ieee.org>
parents: 6689
diff changeset
90
2158
a0cfea4e5956 start at templating tests
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
91 class TemplatingTestCase(unittest.TestCase):
a0cfea4e5956 start at templating tests
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
92 def setUp(self):
a0cfea4e5956 start at templating tests
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
93 self.form = FieldStorage()
a0cfea4e5956 start at templating tests
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
94 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
95 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
96 db.security.hasPermission = lambda *args, **kw: True
2158
a0cfea4e5956 start at templating tests
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
97 self.client.form = self.form
a0cfea4e5956 start at templating tests
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
98
5201
a9ace22e0a2f issue 2550690 - Adding anti-csrf measures to roundup following
John Rouillard <rouilj@ieee.org>
parents: 5190
diff changeset
99 # 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
100 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
101 self.client.db.getuid = lambda : 10
6277
957a0fc20021 issue2551094 - markdown mismatch - new config for embedded newine
John Rouillard <rouilj@ieee.org>
parents: 6275
diff changeset
102 self.client.db.config = {'WEB_CSRF_TOKEN_LIFETIME': 10, '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
103
2158
a0cfea4e5956 start at templating tests
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
104 class HTMLDatabaseTestCase(TemplatingTestCase):
a0cfea4e5956 start at templating tests
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
105 def test_HTMLDatabase___getitem__(self):
a0cfea4e5956 start at templating tests
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
106 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
107 self.assertTrue(isinstance(db['issue'], HTMLClass))
2716
305d346f8f3b disable invalid assertions
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2158
diff changeset
108 # following assertions are invalid
305d346f8f3b disable invalid assertions
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2158
diff changeset
109 # since roundup/cgi/templating.py r1.173.
305d346f8f3b disable invalid assertions
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2158
diff changeset
110 # HTMLItem is function, not class,
305d346f8f3b disable invalid assertions
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2158
diff changeset
111 # but HTMLUserClass and HTMLUser are passed on.
305d346f8f3b disable invalid assertions
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2158
diff changeset
112 # 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
113 #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
114 #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
115 #self.assertTrue(isinstance(db['user1'], HTMLUser))
2158
a0cfea4e5956 start at templating tests
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
116
a0cfea4e5956 start at templating tests
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
117 def test_HTMLDatabase___getattr__(self):
a0cfea4e5956 start at templating tests
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
118 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
119 self.assertTrue(isinstance(db.issue, HTMLClass))
2716
305d346f8f3b disable invalid assertions
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2158
diff changeset
120 # 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
121 #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
122 #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
123 #self.assertTrue(isinstance(db.user1, HTMLUser))
2158
a0cfea4e5956 start at templating tests
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
124
a0cfea4e5956 start at templating tests
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
125 def test_HTMLDatabase_classes(self):
a0cfea4e5956 start at templating tests
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
126 db = HTMLDatabase(self.client)
a0cfea4e5956 start at templating tests
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
127 db._db.classes = {'issue':MockNull(), 'user': MockNull()}
a0cfea4e5956 start at templating tests
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
128 db.classes()
a0cfea4e5956 start at templating tests
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
129
6689
994893cf3e1a Fix traceback if an order attribute is None
Ralf Schlatterbeck <rsc@runtux.com>
parents: 6645
diff changeset
130 def test_HTMLDatabase_list(self):
994893cf3e1a Fix traceback if an order attribute is None
Ralf Schlatterbeck <rsc@runtux.com>
parents: 6645
diff changeset
131 # 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
132 # 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
133 # 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
134 # 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
135 # 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
136
994893cf3e1a Fix traceback if an order attribute is None
Ralf Schlatterbeck <rsc@runtux.com>
parents: 6645
diff changeset
137 # 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
138 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
139 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
140 # Make db.getclass return something that has a sensible 'get' method
994893cf3e1a Fix traceback if an order attribute is None
Ralf Schlatterbeck <rsc@runtux.com>
parents: 6645
diff changeset
141 mock = MockNull(get = lambda x, y : None)
994893cf3e1a Fix traceback if an order attribute is None
Ralf Schlatterbeck <rsc@runtux.com>
parents: 6645
diff changeset
142 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
143 l = db.issue.list()
994893cf3e1a Fix traceback if an order attribute is None
Ralf Schlatterbeck <rsc@runtux.com>
parents: 6645
diff changeset
144
2158
a0cfea4e5956 start at templating tests
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
145 class FunctionsTestCase(TemplatingTestCase):
a0cfea4e5956 start at templating tests
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
146 def test_lookupIds(self):
a0cfea4e5956 start at templating tests
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
147 db = HTMLDatabase(self.client)
a0cfea4e5956 start at templating tests
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
148 def lookup(key):
a0cfea4e5956 start at templating tests
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
149 if key == 'ok':
a0cfea4e5956 start at templating tests
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
150 return '1'
a0cfea4e5956 start at templating tests
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
151 if key == 'fail':
5378
35ea9b1efc14 Python 3 preparation: "raise" syntax.
Joseph Myers <jsm@polyomino.org.uk>
parents: 5376
diff changeset
152 raise KeyError('fail')
3587
2372597ebbdb *** empty log message ***
Richard Jones <richard@users.sourceforge.net>
parents: 2716
diff changeset
153 return key
2158
a0cfea4e5956 start at templating tests
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
154 db._db.classes = {'issue': MockNull(lookup=lookup)}
a0cfea4e5956 start at templating tests
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
155 prop = MockNull(classname='issue')
a0cfea4e5956 start at templating tests
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
156 self.assertEqual(lookupIds(db._db, prop, ['1','2']), ['1','2'])
a0cfea4e5956 start at templating tests
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
157 self.assertEqual(lookupIds(db._db, prop, ['ok','2']), ['1','2'])
a0cfea4e5956 start at templating tests
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
158 self.assertEqual(lookupIds(db._db, prop, ['ok', 'fail'], 1),
a0cfea4e5956 start at templating tests
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
159 ['1', 'fail'])
a0cfea4e5956 start at templating tests
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
160 self.assertEqual(lookupIds(db._db, prop, ['ok', 'fail']), ['1'])
a0cfea4e5956 start at templating tests
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
161
a0cfea4e5956 start at templating tests
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
162 def test_lookupKeys(self):
a0cfea4e5956 start at templating tests
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
163 db = HTMLDatabase(self.client)
a0cfea4e5956 start at templating tests
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
164 def get(entry, key):
a0cfea4e5956 start at templating tests
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
165 return {'1': 'green', '2': 'eggs'}.get(entry, entry)
a0cfea4e5956 start at templating tests
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
166 shrubbery = MockNull(get=get)
a0cfea4e5956 start at templating tests
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
167 db._db.classes = {'shrubbery': shrubbery}
a0cfea4e5956 start at templating tests
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
168 self.assertEqual(lookupKeys(shrubbery, 'spam', ['1','2']),
a0cfea4e5956 start at templating tests
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
169 ['green', 'eggs'])
a0cfea4e5956 start at templating tests
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
170 self.assertEqual(lookupKeys(shrubbery, 'spam', ['ok','2']), ['ok',
a0cfea4e5956 start at templating tests
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
171 'eggs'])
a0cfea4e5956 start at templating tests
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
172
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
173 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
174
4040
b6a2251394dd Make cgi.templating more fault-tolerant towards invalid requests.
Stefan Seefeld <stefan@seefeld.name>
parents: 4011
diff changeset
175 def test_link(self):
b6a2251394dd Make cgi.templating more fault-tolerant towards invalid requests.
Stefan Seefeld <stefan@seefeld.name>
parents: 4011
diff changeset
176 """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
177 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
178 def lookup(key) :
b6a2251394dd Make cgi.templating more fault-tolerant towards invalid requests.
Stefan Seefeld <stefan@seefeld.name>
parents: 4011
diff changeset
179 self.assertEqual(key, key.strip())
b6a2251394dd Make cgi.templating more fault-tolerant towards invalid requests.
Stefan Seefeld <stefan@seefeld.name>
parents: 4011
diff changeset
180 return "Status%s"%key
6404
e29d5f4e0af4 issue2551132 - Setting form value in query string --- issues
John Rouillard <rouilj@ieee.org>
parents: 6377
diff changeset
181 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
182 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
183 status = hyperdb.Link("status")
b6a2251394dd Make cgi.templating more fault-tolerant towards invalid requests.
Stefan Seefeld <stefan@seefeld.name>
parents: 4011
diff changeset
184 self.client.db.classes = dict \
b6a2251394dd Make cgi.templating more fault-tolerant towards invalid requests.
Stefan Seefeld <stefan@seefeld.name>
parents: 4011
diff changeset
185 ( 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
186 , 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
187 )
6404
e29d5f4e0af4 issue2551132 - Setting form value in query string --- issues
John Rouillard <rouilj@ieee.org>
parents: 6377
diff changeset
188 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
189 cls = HTMLClass(self.client, "issue")
6404
e29d5f4e0af4 issue2551132 - Setting form value in query string --- issues
John Rouillard <rouilj@ieee.org>
parents: 6377
diff changeset
190
e29d5f4e0af4 issue2551132 - Setting form value in query string --- issues
John Rouillard <rouilj@ieee.org>
parents: 6377
diff changeset
191 s = cls["status"]
e29d5f4e0af4 issue2551132 - Setting form value in query string --- issues
John Rouillard <rouilj@ieee.org>
parents: 6377
diff changeset
192 self.assertEqual(s._value, '1')
e29d5f4e0af4 issue2551132 - Setting form value in query string --- issues
John Rouillard <rouilj@ieee.org>
parents: 6377
diff changeset
193
e29d5f4e0af4 issue2551132 - Setting form value in query string --- issues
John Rouillard <rouilj@ieee.org>
parents: 6377
diff changeset
194 def test_link_default(self):
e29d5f4e0af4 issue2551132 - Setting form value in query string --- issues
John Rouillard <rouilj@ieee.org>
parents: 6377
diff changeset
195 """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
196 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
197 def lookup(key) :
e29d5f4e0af4 issue2551132 - Setting form value in query string --- issues
John Rouillard <rouilj@ieee.org>
parents: 6377
diff changeset
198 self.assertEqual(key, key.strip())
e29d5f4e0af4 issue2551132 - Setting form value in query string --- issues
John Rouillard <rouilj@ieee.org>
parents: 6377
diff changeset
199 return "Status%s"%key
e29d5f4e0af4 issue2551132 - Setting form value in query string --- issues
John Rouillard <rouilj@ieee.org>
parents: 6377
diff changeset
200 status = hyperdb.Link("status")
e29d5f4e0af4 issue2551132 - Setting form value in query string --- issues
John Rouillard <rouilj@ieee.org>
parents: 6377
diff changeset
201 # set default_value
e29d5f4e0af4 issue2551132 - Setting form value in query string --- issues
John Rouillard <rouilj@ieee.org>
parents: 6377
diff changeset
202 status.__dict__['_Type__default_value'] = "4"
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 self.client.db.classes = dict \
e29d5f4e0af4 issue2551132 - Setting form value in query string --- issues
John Rouillard <rouilj@ieee.org>
parents: 6377
diff changeset
205 ( 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
206 , 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
207 )
e29d5f4e0af4 issue2551132 - Setting form value in query string --- issues
John Rouillard <rouilj@ieee.org>
parents: 6377
diff changeset
208 self.client.form = self.form
e29d5f4e0af4 issue2551132 - Setting form value in query string --- issues
John Rouillard <rouilj@ieee.org>
parents: 6377
diff changeset
209
e29d5f4e0af4 issue2551132 - Setting form value in query string --- issues
John Rouillard <rouilj@ieee.org>
parents: 6377
diff changeset
210 cls = HTMLClass(self.client, "issue")
e29d5f4e0af4 issue2551132 - Setting form value in query string --- issues
John Rouillard <rouilj@ieee.org>
parents: 6377
diff changeset
211 s = cls["status"]
e29d5f4e0af4 issue2551132 - Setting form value in query string --- issues
John Rouillard <rouilj@ieee.org>
parents: 6377
diff changeset
212 self.assertEqual(s._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 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
215 """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
216 is a value in the form."""
e29d5f4e0af4 issue2551132 - Setting form value in query string --- issues
John Rouillard <rouilj@ieee.org>
parents: 6377
diff changeset
217 def lookup(key) :
e29d5f4e0af4 issue2551132 - Setting form value in query string --- issues
John Rouillard <rouilj@ieee.org>
parents: 6377
diff changeset
218 self.assertEqual(key, key.strip())
e29d5f4e0af4 issue2551132 - Setting form value in query string --- issues
John Rouillard <rouilj@ieee.org>
parents: 6377
diff changeset
219 return "Status%s"%key
e29d5f4e0af4 issue2551132 - Setting form value in query string --- issues
John Rouillard <rouilj@ieee.org>
parents: 6377
diff changeset
220 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
221 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
222 status = hyperdb.Link("status")
e29d5f4e0af4 issue2551132 - Setting form value in query string --- issues
John Rouillard <rouilj@ieee.org>
parents: 6377
diff changeset
223 # set default_value
e29d5f4e0af4 issue2551132 - Setting form value in query string --- issues
John Rouillard <rouilj@ieee.org>
parents: 6377
diff changeset
224 status.__dict__['_Type__default_value'] = "4"
e29d5f4e0af4 issue2551132 - Setting form value in query string --- issues
John Rouillard <rouilj@ieee.org>
parents: 6377
diff changeset
225
e29d5f4e0af4 issue2551132 - Setting form value in query string --- issues
John Rouillard <rouilj@ieee.org>
parents: 6377
diff changeset
226 self.client.db.classes = dict \
e29d5f4e0af4 issue2551132 - Setting form value in query string --- issues
John Rouillard <rouilj@ieee.org>
parents: 6377
diff changeset
227 ( 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
228 , 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
229 )
e29d5f4e0af4 issue2551132 - Setting form value in query string --- issues
John Rouillard <rouilj@ieee.org>
parents: 6377
diff changeset
230 self.client.form = self.form
e29d5f4e0af4 issue2551132 - Setting form value in query string --- issues
John Rouillard <rouilj@ieee.org>
parents: 6377
diff changeset
231
e29d5f4e0af4 issue2551132 - Setting form value in query string --- issues
John Rouillard <rouilj@ieee.org>
parents: 6377
diff changeset
232 cls = HTMLClass(self.client, "issue")
e29d5f4e0af4 issue2551132 - Setting form value in query string --- issues
John Rouillard <rouilj@ieee.org>
parents: 6377
diff changeset
233 s = cls["status"]
e29d5f4e0af4 issue2551132 - Setting form value in query string --- issues
John Rouillard <rouilj@ieee.org>
parents: 6377
diff changeset
234 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
235
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
236 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
237 """`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
238 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
239 """
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
240 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
241 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
242 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
243 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
244 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
245 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
246 ( 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
247 , 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
248 )
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 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
250 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
251
5201
a9ace22e0a2f issue 2550690 - Adding anti-csrf measures to roundup following
John Rouillard <rouilj@ieee.org>
parents: 5190
diff changeset
252 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
253 '''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
254
a9ace22e0a2f issue 2550690 - Adding anti-csrf measures to roundup following
John Rouillard <rouilj@ieee.org>
parents: 5190
diff changeset
255 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
256 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
257 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
258 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
259 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
260
a9ace22e0a2f issue 2550690 - Adding anti-csrf measures to roundup following
John Rouillard <rouilj@ieee.org>
parents: 5190
diff changeset
261 Consider three cases:
a9ace22e0a2f issue 2550690 - Adding anti-csrf measures to roundup following
John Rouillard <rouilj@ieee.org>
parents: 5190
diff changeset
262 * 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
263 * 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
264 * 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
265
a9ace22e0a2f issue 2550690 - Adding anti-csrf measures to roundup following
John Rouillard <rouilj@ieee.org>
parents: 5190
diff changeset
266 '''
a9ace22e0a2f issue 2550690 - Adding anti-csrf measures to roundup following
John Rouillard <rouilj@ieee.org>
parents: 5190
diff changeset
267
a9ace22e0a2f issue 2550690 - Adding anti-csrf measures to roundup following
John Rouillard <rouilj@ieee.org>
parents: 5190
diff changeset
268 # 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
269 week_seconds = 604800
f4b6a2a3e605 Fix expiration dates and expire csrf tokens properly
John Rouillard <rouilj@ieee.org>
parents: 5201
diff changeset
270
f4b6a2a3e605 Fix expiration dates and expire csrf tokens properly
John Rouillard <rouilj@ieee.org>
parents: 5201
diff changeset
271 otks=self.client.db.getOTKManager()
f4b6a2a3e605 Fix expiration dates and expire csrf tokens properly
John Rouillard <rouilj@ieee.org>
parents: 5201
diff changeset
272
5201
a9ace22e0a2f issue 2550690 - Adding anti-csrf measures to roundup following
John Rouillard <rouilj@ieee.org>
parents: 5190
diff changeset
273 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
274 print("Testing:", test)
5211
f4b6a2a3e605 Fix expiration dates and expire csrf tokens properly
John Rouillard <rouilj@ieee.org>
parents: 5201
diff changeset
275
5201
a9ace22e0a2f issue 2550690 - Adding anti-csrf measures to roundup following
John Rouillard <rouilj@ieee.org>
parents: 5190
diff changeset
276 if test == 'module':
a9ace22e0a2f issue 2550690 - Adding anti-csrf measures to roundup following
John Rouillard <rouilj@ieee.org>
parents: 5190
diff changeset
277 # test the module function
5488
52cb53eedf77 reworked random number use
Christof Meerwald <cmeerw@cmeerw.org>
parents: 5485
diff changeset
278 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
279 # lifetime * 60 is the offset
a9ace22e0a2f issue 2550690 - Adding anti-csrf measures to roundup following
John Rouillard <rouilj@ieee.org>
parents: 5190
diff changeset
280 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
281 elif test == 'template':
a9ace22e0a2f issue 2550690 - Adding anti-csrf measures to roundup following
John Rouillard <rouilj@ieee.org>
parents: 5190
diff changeset
282 # 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
283 cls = TemplatingUtils(self.client)
a9ace22e0a2f issue 2550690 - Adding anti-csrf measures to roundup following
John Rouillard <rouilj@ieee.org>
parents: 5190
diff changeset
284 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
285 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
286 elif test == 'default_time':
a9ace22e0a2f issue 2550690 - Adding anti-csrf measures to roundup following
John Rouillard <rouilj@ieee.org>
parents: 5190
diff changeset
287 # use the module function but with no lifetime
5488
52cb53eedf77 reworked random number use
Christof Meerwald <cmeerw@cmeerw.org>
parents: 5485
diff changeset
288 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
289 # 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
290 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
291
6826
28b906a237d8 Fix anti_csrf_nonce test
John Rouillard <rouilj@ieee.org>
parents: 6817
diff changeset
292 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
293
a9ace22e0a2f issue 2550690 - Adding anti-csrf measures to roundup following
John Rouillard <rouilj@ieee.org>
parents: 5190
diff changeset
294 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
295 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
296 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
297
a9ace22e0a2f issue 2550690 - Adding anti-csrf measures to roundup following
John Rouillard <rouilj@ieee.org>
parents: 5190
diff changeset
298 self.assertEqual(uid, 10)
a9ace22e0a2f issue 2550690 - Adding anti-csrf measures to roundup following
John Rouillard <rouilj@ieee.org>
parents: 5190
diff changeset
299 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
300
5211
f4b6a2a3e605 Fix expiration dates and expire csrf tokens properly
John Rouillard <rouilj@ieee.org>
parents: 5201
diff changeset
301 now = time.time()
f4b6a2a3e605 Fix expiration dates and expire csrf tokens properly
John Rouillard <rouilj@ieee.org>
parents: 5201
diff changeset
302
5376
64b05e24dbd8 Python 3 preparation: convert print to a function.
Joseph Myers <jsm@polyomino.org.uk>
parents: 5226
diff changeset
303 print("now, timestamp, greater, difference",
64b05e24dbd8 Python 3 preparation: convert print to a function.
Joseph Myers <jsm@polyomino.org.uk>
parents: 5226
diff changeset
304 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
305
5201
a9ace22e0a2f issue 2550690 - Adding anti-csrf measures to roundup following
John Rouillard <rouilj@ieee.org>
parents: 5190
diff changeset
306
a9ace22e0a2f issue 2550690 - Adding anti-csrf measures to roundup following
John Rouillard <rouilj@ieee.org>
parents: 5190
diff changeset
307 # 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
308 # 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
309 # 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
310 # 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
311 # 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
312 self.assertEqual(True,
5211
f4b6a2a3e605 Fix expiration dates and expire csrf tokens properly
John Rouillard <rouilj@ieee.org>
parents: 5201
diff changeset
313 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
314
6832
234fefd7568a issue2550559 - Pretty printing / formatting for Number types.
John Rouillard <rouilj@ieee.org>
parents: 6826
diff changeset
315 def test_number__int__(self):
234fefd7568a issue2550559 - Pretty printing / formatting for Number types.
John Rouillard <rouilj@ieee.org>
parents: 6826
diff changeset
316 # test with number
234fefd7568a issue2550559 - Pretty printing / formatting for Number types.
John Rouillard <rouilj@ieee.org>
parents: 6826
diff changeset
317 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
318 2345678.2345678)
234fefd7568a issue2550559 - Pretty printing / formatting for Number types.
John Rouillard <rouilj@ieee.org>
parents: 6826
diff changeset
319 self.assertEqual(p.__int__(), 2345678)
234fefd7568a issue2550559 - Pretty printing / formatting for Number types.
John Rouillard <rouilj@ieee.org>
parents: 6826
diff changeset
320
234fefd7568a issue2550559 - Pretty printing / formatting for Number types.
John Rouillard <rouilj@ieee.org>
parents: 6826
diff changeset
321 property = MockNull(get_default_value = lambda: None)
234fefd7568a issue2550559 - Pretty printing / formatting for Number types.
John Rouillard <rouilj@ieee.org>
parents: 6826
diff changeset
322 p = NumberHTMLProperty(self.client, 'testnum', '1', property,
234fefd7568a issue2550559 - Pretty printing / formatting for Number types.
John Rouillard <rouilj@ieee.org>
parents: 6826
diff changeset
323 'test', None)
234fefd7568a issue2550559 - Pretty printing / formatting for Number types.
John Rouillard <rouilj@ieee.org>
parents: 6826
diff changeset
324 with self.assertRaises(TypeError) as e:
234fefd7568a issue2550559 - Pretty printing / formatting for Number types.
John Rouillard <rouilj@ieee.org>
parents: 6826
diff changeset
325 p.__int__()
234fefd7568a issue2550559 - Pretty printing / formatting for Number types.
John Rouillard <rouilj@ieee.org>
parents: 6826
diff changeset
326
234fefd7568a issue2550559 - Pretty printing / formatting for Number types.
John Rouillard <rouilj@ieee.org>
parents: 6826
diff changeset
327 def test_number__float__(self):
234fefd7568a issue2550559 - Pretty printing / formatting for Number types.
John Rouillard <rouilj@ieee.org>
parents: 6826
diff changeset
328 # test with number
234fefd7568a issue2550559 - Pretty printing / formatting for Number types.
John Rouillard <rouilj@ieee.org>
parents: 6826
diff changeset
329 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
330 2345678.2345678)
234fefd7568a issue2550559 - Pretty printing / formatting for Number types.
John Rouillard <rouilj@ieee.org>
parents: 6826
diff changeset
331 self.assertEqual(p.__float__(), 2345678.2345678)
234fefd7568a issue2550559 - Pretty printing / formatting for Number types.
John Rouillard <rouilj@ieee.org>
parents: 6826
diff changeset
332
234fefd7568a issue2550559 - Pretty printing / formatting for Number types.
John Rouillard <rouilj@ieee.org>
parents: 6826
diff changeset
333 property = MockNull(get_default_value = lambda: None)
234fefd7568a issue2550559 - Pretty printing / formatting for Number types.
John Rouillard <rouilj@ieee.org>
parents: 6826
diff changeset
334 p = NumberHTMLProperty(self.client, 'testnum', '1', property,
234fefd7568a issue2550559 - Pretty printing / formatting for Number types.
John Rouillard <rouilj@ieee.org>
parents: 6826
diff changeset
335 'test', None)
234fefd7568a issue2550559 - Pretty printing / formatting for Number types.
John Rouillard <rouilj@ieee.org>
parents: 6826
diff changeset
336 with self.assertRaises(TypeError) as e:
234fefd7568a issue2550559 - Pretty printing / formatting for Number types.
John Rouillard <rouilj@ieee.org>
parents: 6826
diff changeset
337 p.__float__()
234fefd7568a issue2550559 - Pretty printing / formatting for Number types.
John Rouillard <rouilj@ieee.org>
parents: 6826
diff changeset
338
234fefd7568a issue2550559 - Pretty printing / formatting for Number types.
John Rouillard <rouilj@ieee.org>
parents: 6826
diff changeset
339 def test_number_field(self):
234fefd7568a issue2550559 - Pretty printing / formatting for Number types.
John Rouillard <rouilj@ieee.org>
parents: 6826
diff changeset
340 import sys
234fefd7568a issue2550559 - Pretty printing / formatting for Number types.
John Rouillard <rouilj@ieee.org>
parents: 6826
diff changeset
341
234fefd7568a issue2550559 - Pretty printing / formatting for Number types.
John Rouillard <rouilj@ieee.org>
parents: 6826
diff changeset
342 _py3 = sys.version_info[0] > 2
234fefd7568a issue2550559 - Pretty printing / formatting for Number types.
John Rouillard <rouilj@ieee.org>
parents: 6826
diff changeset
343
234fefd7568a issue2550559 - Pretty printing / formatting for Number types.
John Rouillard <rouilj@ieee.org>
parents: 6826
diff changeset
344 # python2 truncates while python3 rounds. Sigh.
234fefd7568a issue2550559 - Pretty printing / formatting for Number types.
John Rouillard <rouilj@ieee.org>
parents: 6826
diff changeset
345 if _py3:
234fefd7568a issue2550559 - Pretty printing / formatting for Number types.
John Rouillard <rouilj@ieee.org>
parents: 6826
diff changeset
346 expected_val = 2345678.2345678
234fefd7568a issue2550559 - Pretty printing / formatting for Number types.
John Rouillard <rouilj@ieee.org>
parents: 6826
diff changeset
347 else:
234fefd7568a issue2550559 - Pretty printing / formatting for Number types.
John Rouillard <rouilj@ieee.org>
parents: 6826
diff changeset
348 expected_val = 2345678.23457
234fefd7568a issue2550559 - Pretty printing / formatting for Number types.
John Rouillard <rouilj@ieee.org>
parents: 6826
diff changeset
349
234fefd7568a issue2550559 - Pretty printing / formatting for Number types.
John Rouillard <rouilj@ieee.org>
parents: 6826
diff changeset
350 # test with number
234fefd7568a issue2550559 - Pretty printing / formatting for Number types.
John Rouillard <rouilj@ieee.org>
parents: 6826
diff changeset
351 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
352 2345678.2345678)
234fefd7568a issue2550559 - Pretty printing / formatting for Number types.
John Rouillard <rouilj@ieee.org>
parents: 6826
diff changeset
353 self.assertEqual(p.field(),
234fefd7568a issue2550559 - Pretty printing / formatting for Number types.
John Rouillard <rouilj@ieee.org>
parents: 6826
diff changeset
354 ('<input name="testnum1@test" size="30" type="text" '
234fefd7568a issue2550559 - Pretty printing / formatting for Number types.
John Rouillard <rouilj@ieee.org>
parents: 6826
diff changeset
355 'value="%s">')%expected_val)
234fefd7568a issue2550559 - Pretty printing / formatting for Number types.
John Rouillard <rouilj@ieee.org>
parents: 6826
diff changeset
356 self.assertEqual(p.field(size=10),
234fefd7568a issue2550559 - Pretty printing / formatting for Number types.
John Rouillard <rouilj@ieee.org>
parents: 6826
diff changeset
357 ('<input name="testnum1@test" size="10" type="text" '
234fefd7568a issue2550559 - Pretty printing / formatting for Number types.
John Rouillard <rouilj@ieee.org>
parents: 6826
diff changeset
358 'value="%s">')%expected_val)
234fefd7568a issue2550559 - Pretty printing / formatting for Number types.
John Rouillard <rouilj@ieee.org>
parents: 6826
diff changeset
359 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
360 ('<input dataprop="foo" dataprop2="5" '
234fefd7568a issue2550559 - Pretty printing / formatting for Number types.
John Rouillard <rouilj@ieee.org>
parents: 6826
diff changeset
361 'name="testnum1@test" size="10" type="text" '
234fefd7568a issue2550559 - Pretty printing / formatting for Number types.
John Rouillard <rouilj@ieee.org>
parents: 6826
diff changeset
362 'value="%s">'%expected_val))
234fefd7568a issue2550559 - Pretty printing / formatting for Number types.
John Rouillard <rouilj@ieee.org>
parents: 6826
diff changeset
363
234fefd7568a issue2550559 - Pretty printing / formatting for Number types.
John Rouillard <rouilj@ieee.org>
parents: 6826
diff changeset
364 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
365 **{ "class": "class2 class3",
234fefd7568a issue2550559 - Pretty printing / formatting for Number types.
John Rouillard <rouilj@ieee.org>
parents: 6826
diff changeset
366 "data-prop": "foo",
234fefd7568a issue2550559 - Pretty printing / formatting for Number types.
John Rouillard <rouilj@ieee.org>
parents: 6826
diff changeset
367 "data-prop2": 5}),
234fefd7568a issue2550559 - Pretty printing / formatting for Number types.
John Rouillard <rouilj@ieee.org>
parents: 6826
diff changeset
368 ('<input class="class2 class3" data-prop="foo" '
234fefd7568a issue2550559 - Pretty printing / formatting for Number types.
John Rouillard <rouilj@ieee.org>
parents: 6826
diff changeset
369 'data-prop2="5" klass="class1" '
234fefd7568a issue2550559 - Pretty printing / formatting for Number types.
John Rouillard <rouilj@ieee.org>
parents: 6826
diff changeset
370 'name="testnum1@test" size="10" type="text" '
234fefd7568a issue2550559 - Pretty printing / formatting for Number types.
John Rouillard <rouilj@ieee.org>
parents: 6826
diff changeset
371 'value="%s">')%expected_val)
234fefd7568a issue2550559 - Pretty printing / formatting for Number types.
John Rouillard <rouilj@ieee.org>
parents: 6826
diff changeset
372
234fefd7568a issue2550559 - Pretty printing / formatting for Number types.
John Rouillard <rouilj@ieee.org>
parents: 6826
diff changeset
373 # 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
374 p.is_edit_ok = lambda: False
234fefd7568a issue2550559 - Pretty printing / formatting for Number types.
John Rouillard <rouilj@ieee.org>
parents: 6826
diff changeset
375 self.assertEqual(p.field(), p.plain())
234fefd7568a issue2550559 - Pretty printing / formatting for Number types.
John Rouillard <rouilj@ieee.org>
parents: 6826
diff changeset
376
234fefd7568a issue2550559 - Pretty printing / formatting for Number types.
John Rouillard <rouilj@ieee.org>
parents: 6826
diff changeset
377 # test with string which is wrong type
234fefd7568a issue2550559 - Pretty printing / formatting for Number types.
John Rouillard <rouilj@ieee.org>
parents: 6826
diff changeset
378 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
379 "2345678.2345678")
234fefd7568a issue2550559 - Pretty printing / formatting for Number types.
John Rouillard <rouilj@ieee.org>
parents: 6826
diff changeset
380 self.assertEqual(p.field(),
234fefd7568a issue2550559 - Pretty printing / formatting for Number types.
John Rouillard <rouilj@ieee.org>
parents: 6826
diff changeset
381 ('<input name="testnum1@test" size="30" type="text" '
234fefd7568a issue2550559 - Pretty printing / formatting for Number types.
John Rouillard <rouilj@ieee.org>
parents: 6826
diff changeset
382 'value="2345678.2345678">'))
234fefd7568a issue2550559 - Pretty printing / formatting for Number types.
John Rouillard <rouilj@ieee.org>
parents: 6826
diff changeset
383
234fefd7568a issue2550559 - Pretty printing / formatting for Number types.
John Rouillard <rouilj@ieee.org>
parents: 6826
diff changeset
384 # 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
385 # 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
386 # which I mock.
234fefd7568a issue2550559 - Pretty printing / formatting for Number types.
John Rouillard <rouilj@ieee.org>
parents: 6826
diff changeset
387 property = MockNull(get_default_value = lambda: None)
234fefd7568a issue2550559 - Pretty printing / formatting for Number types.
John Rouillard <rouilj@ieee.org>
parents: 6826
diff changeset
388 p = NumberHTMLProperty(self.client, 'testnum', '1', property,
234fefd7568a issue2550559 - Pretty printing / formatting for Number types.
John Rouillard <rouilj@ieee.org>
parents: 6826
diff changeset
389 'test', None)
234fefd7568a issue2550559 - Pretty printing / formatting for Number types.
John Rouillard <rouilj@ieee.org>
parents: 6826
diff changeset
390 self.assertEqual(p.field(),
234fefd7568a issue2550559 - Pretty printing / formatting for Number types.
John Rouillard <rouilj@ieee.org>
parents: 6826
diff changeset
391 ('<input name="testnum1@test" size="30" type="text" '
234fefd7568a issue2550559 - Pretty printing / formatting for Number types.
John Rouillard <rouilj@ieee.org>
parents: 6826
diff changeset
392 'value="">'))
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 def test_number_plain(self):
234fefd7568a issue2550559 - Pretty printing / formatting for Number types.
John Rouillard <rouilj@ieee.org>
parents: 6826
diff changeset
395 import sys
234fefd7568a issue2550559 - Pretty printing / formatting for Number types.
John Rouillard <rouilj@ieee.org>
parents: 6826
diff changeset
396
234fefd7568a issue2550559 - Pretty printing / formatting for Number types.
John Rouillard <rouilj@ieee.org>
parents: 6826
diff changeset
397 _py3 = sys.version_info[0] > 2
234fefd7568a issue2550559 - Pretty printing / formatting for Number types.
John Rouillard <rouilj@ieee.org>
parents: 6826
diff changeset
398
234fefd7568a issue2550559 - Pretty printing / formatting for Number types.
John Rouillard <rouilj@ieee.org>
parents: 6826
diff changeset
399 # python2 truncates while python3 rounds. Sigh.
234fefd7568a issue2550559 - Pretty printing / formatting for Number types.
John Rouillard <rouilj@ieee.org>
parents: 6826
diff changeset
400 if _py3:
234fefd7568a issue2550559 - Pretty printing / formatting for Number types.
John Rouillard <rouilj@ieee.org>
parents: 6826
diff changeset
401 expected_val = 2345678.2345678
234fefd7568a issue2550559 - Pretty printing / formatting for Number types.
John Rouillard <rouilj@ieee.org>
parents: 6826
diff changeset
402 else:
234fefd7568a issue2550559 - Pretty printing / formatting for Number types.
John Rouillard <rouilj@ieee.org>
parents: 6826
diff changeset
403 expected_val = 2345678.23457
234fefd7568a issue2550559 - Pretty printing / formatting for Number types.
John Rouillard <rouilj@ieee.org>
parents: 6826
diff changeset
404
234fefd7568a issue2550559 - Pretty printing / formatting for Number types.
John Rouillard <rouilj@ieee.org>
parents: 6826
diff changeset
405 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
406 2345678.2345678)
234fefd7568a issue2550559 - Pretty printing / formatting for Number types.
John Rouillard <rouilj@ieee.org>
parents: 6826
diff changeset
407
234fefd7568a issue2550559 - Pretty printing / formatting for Number types.
John Rouillard <rouilj@ieee.org>
parents: 6826
diff changeset
408 self.assertEqual(p.plain(), "%s"%expected_val)
234fefd7568a issue2550559 - Pretty printing / formatting for Number types.
John Rouillard <rouilj@ieee.org>
parents: 6826
diff changeset
409
234fefd7568a issue2550559 - Pretty printing / formatting for Number types.
John Rouillard <rouilj@ieee.org>
parents: 6826
diff changeset
410 def test_number_pretty(self):
234fefd7568a issue2550559 - Pretty printing / formatting for Number types.
John Rouillard <rouilj@ieee.org>
parents: 6826
diff changeset
411 # test with number
234fefd7568a issue2550559 - Pretty printing / formatting for Number types.
John Rouillard <rouilj@ieee.org>
parents: 6826
diff changeset
412 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
413 2345678.2345678)
234fefd7568a issue2550559 - Pretty printing / formatting for Number types.
John Rouillard <rouilj@ieee.org>
parents: 6826
diff changeset
414 self.assertEqual(p.pretty(), "2345678.235")
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 # test with string which is wrong type
234fefd7568a issue2550559 - Pretty printing / formatting for Number types.
John Rouillard <rouilj@ieee.org>
parents: 6826
diff changeset
417 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
418 "2345678.2345678")
234fefd7568a issue2550559 - Pretty printing / formatting for Number types.
John Rouillard <rouilj@ieee.org>
parents: 6826
diff changeset
419 self.assertEqual(p.pretty(), "2345678.2345678")
234fefd7568a issue2550559 - Pretty printing / formatting for Number types.
John Rouillard <rouilj@ieee.org>
parents: 6826
diff changeset
420
234fefd7568a issue2550559 - Pretty printing / formatting for Number types.
John Rouillard <rouilj@ieee.org>
parents: 6826
diff changeset
421 # test with boolean
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 True)
234fefd7568a issue2550559 - Pretty printing / formatting for Number types.
John Rouillard <rouilj@ieee.org>
parents: 6826
diff changeset
424 self.assertEqual(p.pretty(), "1.000")
234fefd7568a issue2550559 - Pretty printing / formatting for Number types.
John Rouillard <rouilj@ieee.org>
parents: 6826
diff changeset
425
234fefd7568a issue2550559 - Pretty printing / formatting for Number types.
John Rouillard <rouilj@ieee.org>
parents: 6826
diff changeset
426 # 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
427 # 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
428 # which I mock.
234fefd7568a issue2550559 - Pretty printing / formatting for Number types.
John Rouillard <rouilj@ieee.org>
parents: 6826
diff changeset
429 property = MockNull(get_default_value = lambda: None)
234fefd7568a issue2550559 - Pretty printing / formatting for Number types.
John Rouillard <rouilj@ieee.org>
parents: 6826
diff changeset
430 p = NumberHTMLProperty(self.client, 'testnum', '1', property,
234fefd7568a issue2550559 - Pretty printing / formatting for Number types.
John Rouillard <rouilj@ieee.org>
parents: 6826
diff changeset
431 'test', None)
234fefd7568a issue2550559 - Pretty printing / formatting for Number types.
John Rouillard <rouilj@ieee.org>
parents: 6826
diff changeset
432 self.assertEqual(p.pretty(), '')
234fefd7568a issue2550559 - Pretty printing / formatting for Number types.
John Rouillard <rouilj@ieee.org>
parents: 6826
diff changeset
433
234fefd7568a issue2550559 - Pretty printing / formatting for Number types.
John Rouillard <rouilj@ieee.org>
parents: 6826
diff changeset
434 with self.assertRaises(ValueError) as e:
234fefd7568a issue2550559 - Pretty printing / formatting for Number types.
John Rouillard <rouilj@ieee.org>
parents: 6826
diff changeset
435 p.pretty('%0.3')
234fefd7568a issue2550559 - Pretty printing / formatting for Number types.
John Rouillard <rouilj@ieee.org>
parents: 6826
diff changeset
436
5156
882fa4d9bead issue2550795: @dispname query args in page.html search links
John Rouillard <rouilj@ieee.org>
parents: 5067
diff changeset
437 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
438 ''' 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
439 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
440 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
441
5157
ae2a5d1afdd5 adding tests for some StringHTMLProperty methods.
John Rouillard <rouilj@ieee.org>
parents: 5156
diff changeset
442 def test_string_email(self):
ae2a5d1afdd5 adding tests for some StringHTMLProperty methods.
John Rouillard <rouilj@ieee.org>
parents: 5156
diff changeset
443 ''' test that email obscures the email '''
ae2a5d1afdd5 adding tests for some StringHTMLProperty methods.
John Rouillard <rouilj@ieee.org>
parents: 5156
diff changeset
444 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
445 self.assertEqual(p.email(), 'rouilj at foo example ...')
ae2a5d1afdd5 adding tests for some StringHTMLProperty methods.
John Rouillard <rouilj@ieee.org>
parents: 5156
diff changeset
446
6339
ab18fe956d45 Test StringHTMLProperty.wrapped(); test url, plain text for rst
John Rouillard <rouilj@ieee.org>
parents: 6338
diff changeset
447 def test_string_wrapped(self):
ab18fe956d45 Test StringHTMLProperty.wrapped(); test url, plain text for rst
John Rouillard <rouilj@ieee.org>
parents: 6338
diff changeset
448 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
449 ' 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
450 ' 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
451 ' 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
452 ' it will wrap properly.' )
ab18fe956d45 Test StringHTMLProperty.wrapped(); test url, plain text for rst
John Rouillard <rouilj@ieee.org>
parents: 6338
diff changeset
453 test_result = ('A long string that needs to be wrapped to 80'
ab18fe956d45 Test StringHTMLProperty.wrapped(); test url, plain text for rst
John Rouillard <rouilj@ieee.org>
parents: 6338
diff changeset
454 ' 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
455 '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
456 ' &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
457 ' href="https://example.com/link"'
ab18fe956d45 Test StringHTMLProperty.wrapped(); test url, plain text for rst
John Rouillard <rouilj@ieee.org>
parents: 6338
diff changeset
458 ' rel="nofollow noopener">'
ab18fe956d45 Test StringHTMLProperty.wrapped(); test url, plain text for rst
John Rouillard <rouilj@ieee.org>
parents: 6338
diff changeset
459 '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
460 'well. Let us see if it will wrap properly.')
ab18fe956d45 Test StringHTMLProperty.wrapped(); test url, plain text for rst
John Rouillard <rouilj@ieee.org>
parents: 6338
diff changeset
461
ab18fe956d45 Test StringHTMLProperty.wrapped(); test url, plain text for rst
John Rouillard <rouilj@ieee.org>
parents: 6338
diff changeset
462 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
463 test_string)
ab18fe956d45 Test StringHTMLProperty.wrapped(); test url, plain text for rst
John Rouillard <rouilj@ieee.org>
parents: 6338
diff changeset
464 self.assertEqual(p.wrapped(), test_result)
ab18fe956d45 Test StringHTMLProperty.wrapped(); test url, plain text for rst
John Rouillard <rouilj@ieee.org>
parents: 6338
diff changeset
465
5157
ae2a5d1afdd5 adding tests for some StringHTMLProperty methods.
John Rouillard <rouilj@ieee.org>
parents: 5156
diff changeset
466 def test_string_plain_or_hyperlinked(self):
ae2a5d1afdd5 adding tests for some StringHTMLProperty methods.
John Rouillard <rouilj@ieee.org>
parents: 5156
diff changeset
467 ''' test that email obscures the email '''
ae2a5d1afdd5 adding tests for some StringHTMLProperty methods.
John Rouillard <rouilj@ieee.org>
parents: 5156
diff changeset
468 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
469 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
470 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
471 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
472 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
473
ae2a5d1afdd5 adding tests for some StringHTMLProperty methods.
John Rouillard <rouilj@ieee.org>
parents: 5156
diff changeset
474 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
475 # check designators
a70a0c138dd9 Test hyperlinked method on designators
John Rouillard <rouilj@ieee.org>
parents: 6337
diff changeset
476 for designator in [ "issue1", "issue 1" ]:
a70a0c138dd9 Test hyperlinked method on designators
John Rouillard <rouilj@ieee.org>
parents: 6337
diff changeset
477 p = StringHTMLProperty(self.client, 'test', '1', None, 'test', designator)
a70a0c138dd9 Test hyperlinked method on designators
John Rouillard <rouilj@ieee.org>
parents: 6337
diff changeset
478 self.assertEqual(p.hyperlinked(),
a70a0c138dd9 Test hyperlinked method on designators
John Rouillard <rouilj@ieee.org>
parents: 6337
diff changeset
479 '<a href="issue1">%s</a>'%designator)
a70a0c138dd9 Test hyperlinked method on designators
John Rouillard <rouilj@ieee.org>
parents: 6337
diff changeset
480
a70a0c138dd9 Test hyperlinked method on designators
John Rouillard <rouilj@ieee.org>
parents: 6337
diff changeset
481 # 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
482 # 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
483 # the node.
a70a0c138dd9 Test hyperlinked method on designators
John Rouillard <rouilj@ieee.org>
parents: 6337
diff changeset
484 for designator in ['issue100', 'issue 100']:
a70a0c138dd9 Test hyperlinked method on designators
John Rouillard <rouilj@ieee.org>
parents: 6337
diff changeset
485 p = StringHTMLProperty(self.client, 'test', '1', None, 'test',
a70a0c138dd9 Test hyperlinked method on designators
John Rouillard <rouilj@ieee.org>
parents: 6337
diff changeset
486 designator)
a70a0c138dd9 Test hyperlinked method on designators
John Rouillard <rouilj@ieee.org>
parents: 6337
diff changeset
487 self.assertEqual(p.hyperlinked(), designator)
a70a0c138dd9 Test hyperlinked method on designators
John Rouillard <rouilj@ieee.org>
parents: 6337
diff changeset
488
a70a0c138dd9 Test hyperlinked method on designators
John Rouillard <rouilj@ieee.org>
parents: 6337
diff changeset
489 # zoom class does not exist
a70a0c138dd9 Test hyperlinked method on designators
John Rouillard <rouilj@ieee.org>
parents: 6337
diff changeset
490 for designator in ['zoom1', 'zoom100', 'zoom 1']:
a70a0c138dd9 Test hyperlinked method on designators
John Rouillard <rouilj@ieee.org>
parents: 6337
diff changeset
491 p = StringHTMLProperty(self.client, 'test', '1', None, 'test',
a70a0c138dd9 Test hyperlinked method on designators
John Rouillard <rouilj@ieee.org>
parents: 6337
diff changeset
492 designator)
a70a0c138dd9 Test hyperlinked method on designators
John Rouillard <rouilj@ieee.org>
parents: 6337
diff changeset
493 self.assertEqual(p.hyperlinked(), designator)
a70a0c138dd9 Test hyperlinked method on designators
John Rouillard <rouilj@ieee.org>
parents: 6337
diff changeset
494
5157
ae2a5d1afdd5 adding tests for some StringHTMLProperty methods.
John Rouillard <rouilj@ieee.org>
parents: 5156
diff changeset
495
6096
c914b3d8362f If rst missing skip; initial attempt to test structuredtext.
John Rouillard <rouilj@ieee.org>
parents: 6095
diff changeset
496 @skip_rst
6095
3ada6a3f48e1 fixed ReStructuredText encoding with Python 3
Christof Meerwald <cmeerw@cmeerw.org>
parents: 6059
diff changeset
497 def test_string_rst(self):
3ada6a3f48e1 fixed ReStructuredText encoding with Python 3
Christof Meerwald <cmeerw@cmeerw.org>
parents: 6059
diff changeset
498 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
499
72a281a55a17 Disable rst raw and include directives.
John Rouillard <rouilj@ieee.org>
parents: 6097
diff changeset
500 # 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
501 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
502 q_result=u'''<div class="document">
72a281a55a17 Disable rst raw and include directives.
John Rouillard <rouilj@ieee.org>
parents: 6097
diff changeset
503 <div class="system-message">
72a281a55a17 Disable rst raw and include directives.
John Rouillard <rouilj@ieee.org>
parents: 6097
diff changeset
504 <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
505 <p>&quot;include&quot; directive disabled.</p>
72a281a55a17 Disable rst raw and include directives.
John Rouillard <rouilj@ieee.org>
parents: 6097
diff changeset
506 <pre class="literal-block">
72a281a55a17 Disable rst raw and include directives.
John Rouillard <rouilj@ieee.org>
parents: 6097
diff changeset
507 .. include:: XyZrMt.html
72a281a55a17 Disable rst raw and include directives.
John Rouillard <rouilj@ieee.org>
parents: 6097
diff changeset
508
72a281a55a17 Disable rst raw and include directives.
John Rouillard <rouilj@ieee.org>
parents: 6097
diff changeset
509 </pre>
72a281a55a17 Disable rst raw and include directives.
John Rouillard <rouilj@ieee.org>
parents: 6097
diff changeset
510 </div>
72a281a55a17 Disable rst raw and include directives.
John Rouillard <rouilj@ieee.org>
parents: 6097
diff changeset
511 <p>&lt;badtag&gt;</p>
72a281a55a17 Disable rst raw and include directives.
John Rouillard <rouilj@ieee.org>
parents: 6097
diff changeset
512 </div>
72a281a55a17 Disable rst raw and include directives.
John Rouillard <rouilj@ieee.org>
parents: 6097
diff changeset
513 '''
72a281a55a17 Disable rst raw and include directives.
John Rouillard <rouilj@ieee.org>
parents: 6097
diff changeset
514
72a281a55a17 Disable rst raw and include directives.
John Rouillard <rouilj@ieee.org>
parents: 6097
diff changeset
515 # 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
516 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
517 r_result='''<div class="document">
72a281a55a17 Disable rst raw and include directives.
John Rouillard <rouilj@ieee.org>
parents: 6097
diff changeset
518 <div class="system-message">
72a281a55a17 Disable rst raw and include directives.
John Rouillard <rouilj@ieee.org>
parents: 6097
diff changeset
519 <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
520 <p>&quot;raw&quot; directive disabled.</p>
72a281a55a17 Disable rst raw and include directives.
John Rouillard <rouilj@ieee.org>
parents: 6097
diff changeset
521 <pre class="literal-block">
72a281a55a17 Disable rst raw and include directives.
John Rouillard <rouilj@ieee.org>
parents: 6097
diff changeset
522 .. raw:: html
72a281a55a17 Disable rst raw and include directives.
John Rouillard <rouilj@ieee.org>
parents: 6097
diff changeset
523
72a281a55a17 Disable rst raw and include directives.
John Rouillard <rouilj@ieee.org>
parents: 6097
diff changeset
524 &lt;badtag&gt;
72a281a55a17 Disable rst raw and include directives.
John Rouillard <rouilj@ieee.org>
parents: 6097
diff changeset
525
72a281a55a17 Disable rst raw and include directives.
John Rouillard <rouilj@ieee.org>
parents: 6097
diff changeset
526 </pre>
72a281a55a17 Disable rst raw and include directives.
John Rouillard <rouilj@ieee.org>
parents: 6097
diff changeset
527 </div>
72a281a55a17 Disable rst raw and include directives.
John Rouillard <rouilj@ieee.org>
parents: 6097
diff changeset
528 </div>
72a281a55a17 Disable rst raw and include directives.
John Rouillard <rouilj@ieee.org>
parents: 6097
diff changeset
529 '''
6284
3f7538316724 issue2551099 - disable processing of data url's in markdown.
John Rouillard <rouilj@ieee.org>
parents: 6282
diff changeset
530 # 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
531 # into links
3f7538316724 issue2551099 - disable processing of data url's in markdown.
John Rouillard <rouilj@ieee.org>
parents: 6282
diff changeset
532 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
533 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
534
6339
ab18fe956d45 Test StringHTMLProperty.wrapped(); test url, plain text for rst
John Rouillard <rouilj@ieee.org>
parents: 6338
diff changeset
535 # test url recognition
ab18fe956d45 Test StringHTMLProperty.wrapped(); test url, plain text for rst
John Rouillard <rouilj@ieee.org>
parents: 6338
diff changeset
536 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
537 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
538
ab18fe956d45 Test StringHTMLProperty.wrapped(); test url, plain text for rst
John Rouillard <rouilj@ieee.org>
parents: 6338
diff changeset
539 # 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
540 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
541 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
542
6099
55c56ceacb8e escape HTML tags in markdown content
Christof Meerwald <cmeerw@cmeerw.org>
parents: 6098
diff changeset
543 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
544 self.assertEqual(q.rst(), u2s(q_result))
55c56ceacb8e escape HTML tags in markdown content
Christof Meerwald <cmeerw@cmeerw.org>
parents: 6098
diff changeset
545 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
546 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
547 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
548 self.assertEqual(u.rst(), u2s(u_result))
6095
3ada6a3f48e1 fixed ReStructuredText encoding with Python 3
Christof Meerwald <cmeerw@cmeerw.org>
parents: 6059
diff changeset
549
6096
c914b3d8362f If rst missing skip; initial attempt to test structuredtext.
John Rouillard <rouilj@ieee.org>
parents: 6095
diff changeset
550 @skip_stext
c914b3d8362f If rst missing skip; initial attempt to test structuredtext.
John Rouillard <rouilj@ieee.org>
parents: 6095
diff changeset
551 def test_string_stext(self):
c914b3d8362f If rst missing skip; initial attempt to test structuredtext.
John Rouillard <rouilj@ieee.org>
parents: 6095
diff changeset
552 p = StringHTMLProperty(self.client, 'test', '1', None, 'test', u2s(u'A string with cmeerw@example.com *embedded* \u00df'))
6099
55c56ceacb8e escape HTML tags in markdown content
Christof Meerwald <cmeerw@cmeerw.org>
parents: 6098
diff changeset
553 self.assertEqual(p.stext(), u2s(u'<p>A string with <a href="mailto:cmeerw@example.com">cmeerw@example.com</a> <em>embedded</em> \u00df</p>\n'))
6096
c914b3d8362f If rst missing skip; initial attempt to test structuredtext.
John Rouillard <rouilj@ieee.org>
parents: 6095
diff changeset
554
5157
ae2a5d1afdd5 adding tests for some StringHTMLProperty methods.
John Rouillard <rouilj@ieee.org>
parents: 5156
diff changeset
555 def test_string_field(self):
ae2a5d1afdd5 adding tests for some StringHTMLProperty methods.
John Rouillard <rouilj@ieee.org>
parents: 5156
diff changeset
556 p = StringHTMLProperty(self.client, 'test', '1', None, 'test', 'A string <b> with rouilj@example.com embedded &lt; html</b>')
5485
b0359a7c5b6d create input elements with attributes in a defined (sorted) order
Christof Meerwald <cmeerw@cmeerw.org>
parents: 5414
diff changeset
557 self.assertEqual(p.field(), '<input 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
558
ae2a5d1afdd5 adding tests for some StringHTMLProperty methods.
John Rouillard <rouilj@ieee.org>
parents: 5156
diff changeset
559 def test_string_multiline(self):
ae2a5d1afdd5 adding tests for some StringHTMLProperty methods.
John Rouillard <rouilj@ieee.org>
parents: 5156
diff changeset
560 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
561 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
562 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
563
3991
13161539e5bd improved URL matching
Richard Jones <richard@users.sourceforge.net>
parents: 3972
diff changeset
564 def test_url_match(self):
13161539e5bd improved URL matching
Richard Jones <richard@users.sourceforge.net>
parents: 3972
diff changeset
565 '''Test the URL regular expression in StringHTMLProperty.
13161539e5bd improved URL matching
Richard Jones <richard@users.sourceforge.net>
parents: 3972
diff changeset
566 '''
4009
e335ce40d6c8 Make URL matching code less matchy
Richard Jones <richard@users.sourceforge.net>
parents: 3991
diff changeset
567 def t(s, nothing=False, **groups):
3991
13161539e5bd improved URL matching
Richard Jones <richard@users.sourceforge.net>
parents: 3972
diff changeset
568 m = StringHTMLProperty.hyper_re.search(s)
4009
e335ce40d6c8 Make URL matching code less matchy
Richard Jones <richard@users.sourceforge.net>
parents: 3991
diff changeset
569 if nothing:
4010
797eacd945af add tests for and fix alex's examples
Richard Jones <richard@users.sourceforge.net>
parents: 4009
diff changeset
570 if m:
5793
6aad7b194e63 replace assertEquals wth assertEqual.
John Rouillard <rouilj@ieee.org>
parents: 5684
diff changeset
571 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
572 return
e335ce40d6c8 Make URL matching code less matchy
Richard Jones <richard@users.sourceforge.net>
parents: 3991
diff changeset
573 else:
5795
10747e4e4ec4 replace assertNotEquals with assertNotEqual
John Rouillard <rouilj@ieee.org>
parents: 5793
diff changeset
574 self.assertNotEqual(m, None, '%r did not match'%s)
3991
13161539e5bd improved URL matching
Richard Jones <richard@users.sourceforge.net>
parents: 3972
diff changeset
575 d = m.groupdict()
13161539e5bd improved URL matching
Richard Jones <richard@users.sourceforge.net>
parents: 3972
diff changeset
576 for g in groups:
5793
6aad7b194e63 replace assertEquals wth assertEqual.
John Rouillard <rouilj@ieee.org>
parents: 5684
diff changeset
577 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
578 groups[g], s))
13161539e5bd improved URL matching
Richard Jones <richard@users.sourceforge.net>
parents: 3972
diff changeset
579
13161539e5bd improved URL matching
Richard Jones <richard@users.sourceforge.net>
parents: 3972
diff changeset
580 #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
581 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
582 t('http://localhost/', url='http://localhost/')
3991
13161539e5bd improved URL matching
Richard Jones <richard@users.sourceforge.net>
parents: 3972
diff changeset
583 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
584 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
585 t('http://richard:sekrit@localhost/',
797eacd945af add tests for and fix alex's examples
Richard Jones <richard@users.sourceforge.net>
parents: 4009
diff changeset
586 url='http://richard:sekrit@localhost/')
3991
13161539e5bd improved URL matching
Richard Jones <richard@users.sourceforge.net>
parents: 3972
diff changeset
587 t('<HTTP://roundup.net/>', url='HTTP://roundup.net/')
13161539e5bd improved URL matching
Richard Jones <richard@users.sourceforge.net>
parents: 3972
diff changeset
588 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
589 t('foo.a.ex', nothing=True)
e335ce40d6c8 Make URL matching code less matchy
Richard Jones <richard@users.sourceforge.net>
parents: 3991
diff changeset
590 t('StDevValidTimeSeries.GetObservation', nothing=True)
3991
13161539e5bd improved URL matching
Richard Jones <richard@users.sourceforge.net>
parents: 3972
diff changeset
591 t('http://a.ex', url='http://a.ex')
13161539e5bd improved URL matching
Richard Jones <richard@users.sourceforge.net>
parents: 3972
diff changeset
592 t('http://a.ex/?foo&bar=baz\\.@!$%()qwerty',
13161539e5bd improved URL matching
Richard Jones <richard@users.sourceforge.net>
parents: 3972
diff changeset
593 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
594 t('www.foo.net', url='www.foo.net')
3991
13161539e5bd improved URL matching
Richard Jones <richard@users.sourceforge.net>
parents: 3972
diff changeset
595 t('richard@com.example', email='richard@com.example')
13161539e5bd improved URL matching
Richard Jones <richard@users.sourceforge.net>
parents: 3972
diff changeset
596 t('r@a.com', email='r@a.com')
13161539e5bd improved URL matching
Richard Jones <richard@users.sourceforge.net>
parents: 3972
diff changeset
597 t('i1', **{'class':'i', 'id':'1'})
13161539e5bd improved URL matching
Richard Jones <richard@users.sourceforge.net>
parents: 3972
diff changeset
598 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
599 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
600 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
601 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
602 t('123.35', nothing=True)
e77bcbdc9b32 add tests for numbers too :)
Richard Jones <richard@users.sourceforge.net>
parents: 4010
diff changeset
603 t('-.3535', nothing=True)
3991
13161539e5bd improved URL matching
Richard Jones <richard@users.sourceforge.net>
parents: 3972
diff changeset
604
13161539e5bd improved URL matching
Richard Jones <richard@users.sourceforge.net>
parents: 3972
diff changeset
605 def test_url_replace(self):
13161539e5bd improved URL matching
Richard Jones <richard@users.sourceforge.net>
parents: 3972
diff changeset
606 p = StringHTMLProperty(self.client, 'test', '1', None, 'test', '')
13161539e5bd improved URL matching
Richard Jones <richard@users.sourceforge.net>
parents: 3972
diff changeset
607 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
608 ae = self.assertEqual
6564
21c7c2041a4b issue2551181 - allow issueXXX#fragment to generate a link with fragment
John Rouillard <rouilj@ieee.org>
parents: 6551
diff changeset
609 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
610 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
611 ae(t('issue2255'), 'issue2255')
6551
f1f8d75edd97 Add variations on test for _hyper_url functons
John Rouillard <rouilj@ieee.org>
parents: 6404
diff changeset
612 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
613 '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
614 '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
615 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
616 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
617 '<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
618 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
619 '&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
620 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
621 '&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
622 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
623 '&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
624 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
625 '(<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
626 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
627 '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
628 '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
629 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
630 '(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
631 '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
632 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
633 '(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
634 '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
635 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
636 '(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
637 '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
638 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
639 '(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
640 '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
641 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
642 # 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
643 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
644 '<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
645 # 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
646 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
647 '<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
648 # 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
649 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
650 '<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
651 # including with a non / terminated path
f1f8d75edd97 Add variations on test for _hyper_url functons
John Rouillard <rouilj@ieee.org>
parents: 6404
diff changeset
652 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
653 '<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
654 # 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
655 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
656 '<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
657
3991
13161539e5bd improved URL matching
Richard Jones <richard@users.sourceforge.net>
parents: 3972
diff changeset
658
5989
c475159af6b8 Add test and changelog for html boolean fix.
John Rouillard <rouilj@ieee.org>
parents: 5903
diff changeset
659 def test_input_html4(self):
c475159af6b8 Add test and changelog for html boolean fix.
John Rouillard <rouilj@ieee.org>
parents: 5903
diff changeset
660 # 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
661 # 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
662 # e.g. disabled
c475159af6b8 Add test and changelog for html boolean fix.
John Rouillard <rouilj@ieee.org>
parents: 5903
diff changeset
663
c475159af6b8 Add test and changelog for html boolean fix.
John Rouillard <rouilj@ieee.org>
parents: 5903
diff changeset
664 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
665 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
666
c475159af6b8 Add test and changelog for html boolean fix.
John Rouillard <rouilj@ieee.org>
parents: 5903
diff changeset
667 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
668 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
669
c475159af6b8 Add test and changelog for html boolean fix.
John Rouillard <rouilj@ieee.org>
parents: 5903
diff changeset
670 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
671 input=input_html4(**attrs)
c475159af6b8 Add test and changelog for html boolean fix.
John Rouillard <rouilj@ieee.org>
parents: 5903
diff changeset
672 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
673
c475159af6b8 Add test and changelog for html boolean fix.
John Rouillard <rouilj@ieee.org>
parents: 5903
diff changeset
674 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
675 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
676 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
677
c475159af6b8 Add test and changelog for html boolean fix.
John Rouillard <rouilj@ieee.org>
parents: 5903
diff changeset
678 def test_input_xhtml(self):
c475159af6b8 Add test and changelog for html boolean fix.
John Rouillard <rouilj@ieee.org>
parents: 5903
diff changeset
679 # boolean attributes are attribute name="attribute name"
c475159af6b8 Add test and changelog for html boolean fix.
John Rouillard <rouilj@ieee.org>
parents: 5903
diff changeset
680 # 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
681 # e.g. disabled="disabled"
c475159af6b8 Add test and changelog for html boolean fix.
John Rouillard <rouilj@ieee.org>
parents: 5903
diff changeset
682 input=input_xhtml(required=None, size=30)
c475159af6b8 Add test and changelog for html boolean fix.
John Rouillard <rouilj@ieee.org>
parents: 5903
diff changeset
683 self.assertEqual(input, '<input required="required" size="30" type="text"/>')
c475159af6b8 Add test and changelog for html boolean fix.
John Rouillard <rouilj@ieee.org>
parents: 5903
diff changeset
684
c475159af6b8 Add test and changelog for html boolean fix.
John Rouillard <rouilj@ieee.org>
parents: 5903
diff changeset
685 input=input_xhtml(required="required", size=30)
c475159af6b8 Add test and changelog for html boolean fix.
John Rouillard <rouilj@ieee.org>
parents: 5903
diff changeset
686 self.assertEqual(input, '<input required="required" size="30" type="text"/>')
c475159af6b8 Add test and changelog for html boolean fix.
John Rouillard <rouilj@ieee.org>
parents: 5903
diff changeset
687
c475159af6b8 Add test and changelog for html boolean fix.
John Rouillard <rouilj@ieee.org>
parents: 5903
diff changeset
688 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
689 input=input_xhtml(**attrs)
c475159af6b8 Add test and changelog for html boolean fix.
John Rouillard <rouilj@ieee.org>
parents: 5903
diff changeset
690 self.assertEqual(input, '<input class="required" required="required" size="30" type="text"/>')
c475159af6b8 Add test and changelog for html boolean fix.
John Rouillard <rouilj@ieee.org>
parents: 5903
diff changeset
691
c475159af6b8 Add test and changelog for html boolean fix.
John Rouillard <rouilj@ieee.org>
parents: 5903
diff changeset
692 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
693 input=input_xhtml(**attrs)
c475159af6b8 Add test and changelog for html boolean fix.
John Rouillard <rouilj@ieee.org>
parents: 5903
diff changeset
694 self.assertEqual(input, '<input class="required" disabled="disabled" size="30" type="text"/>')
c475159af6b8 Add test and changelog for html boolean fix.
John Rouillard <rouilj@ieee.org>
parents: 5903
diff changeset
695
6377
a7e7314fb7d9 issue2551126 - AttributeError: 'str' object has no attribute 'local'.
John Rouillard <rouilj@ieee.org>
parents: 6339
diff changeset
696
a7e7314fb7d9 issue2551126 - AttributeError: 'str' object has no attribute 'local'.
John Rouillard <rouilj@ieee.org>
parents: 6339
diff changeset
697 class HTMLPropertyTestClass(unittest.TestCase):
a7e7314fb7d9 issue2551126 - AttributeError: 'str' object has no attribute 'local'.
John Rouillard <rouilj@ieee.org>
parents: 6339
diff changeset
698 def setUp(self):
a7e7314fb7d9 issue2551126 - AttributeError: 'str' object has no attribute 'local'.
John Rouillard <rouilj@ieee.org>
parents: 6339
diff changeset
699 self.form = FieldStorage()
a7e7314fb7d9 issue2551126 - AttributeError: 'str' object has no attribute 'local'.
John Rouillard <rouilj@ieee.org>
parents: 6339
diff changeset
700 self.client = MockNull()
a7e7314fb7d9 issue2551126 - AttributeError: 'str' object has no attribute 'local'.
John Rouillard <rouilj@ieee.org>
parents: 6339
diff changeset
701 self.client.db = db = MockDatabase()
a7e7314fb7d9 issue2551126 - AttributeError: 'str' object has no attribute 'local'.
John Rouillard <rouilj@ieee.org>
parents: 6339
diff changeset
702 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
703 self.client.form = self.form
a7e7314fb7d9 issue2551126 - AttributeError: 'str' object has no attribute 'local'.
John Rouillard <rouilj@ieee.org>
parents: 6339
diff changeset
704
a7e7314fb7d9 issue2551126 - AttributeError: 'str' object has no attribute 'local'.
John Rouillard <rouilj@ieee.org>
parents: 6339
diff changeset
705 self.client._props = MockNull()
a7e7314fb7d9 issue2551126 - AttributeError: 'str' object has no attribute 'local'.
John Rouillard <rouilj@ieee.org>
parents: 6339
diff changeset
706 # 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
707 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
708 self.client.db.getuid = lambda : 10
a7e7314fb7d9 issue2551126 - AttributeError: 'str' object has no attribute 'local'.
John Rouillard <rouilj@ieee.org>
parents: 6339
diff changeset
709
a7e7314fb7d9 issue2551126 - AttributeError: 'str' object has no attribute 'local'.
John Rouillard <rouilj@ieee.org>
parents: 6339
diff changeset
710 class DateHTMLPropertyTestCase(HTMLPropertyTestClass):
a7e7314fb7d9 issue2551126 - AttributeError: 'str' object has no attribute 'local'.
John Rouillard <rouilj@ieee.org>
parents: 6339
diff changeset
711
a7e7314fb7d9 issue2551126 - AttributeError: 'str' object has no attribute 'local'.
John Rouillard <rouilj@ieee.org>
parents: 6339
diff changeset
712 def test_DateHTMLWithText(self):
a7e7314fb7d9 issue2551126 - AttributeError: 'str' object has no attribute 'local'.
John Rouillard <rouilj@ieee.org>
parents: 6339
diff changeset
713 """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
714 rather than a hyperdb.Date()
a7e7314fb7d9 issue2551126 - AttributeError: 'str' object has no attribute 'local'.
John Rouillard <rouilj@ieee.org>
parents: 6339
diff changeset
715 """
a7e7314fb7d9 issue2551126 - AttributeError: 'str' object has no attribute 'local'.
John Rouillard <rouilj@ieee.org>
parents: 6339
diff changeset
716 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
717 test_date = hyperdb.Date("2")
a7e7314fb7d9 issue2551126 - AttributeError: 'str' object has no attribute 'local'.
John Rouillard <rouilj@ieee.org>
parents: 6339
diff changeset
718
a7e7314fb7d9 issue2551126 - AttributeError: 'str' object has no attribute 'local'.
John Rouillard <rouilj@ieee.org>
parents: 6339
diff changeset
719 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
720 self.client._props=test_date
a7e7314fb7d9 issue2551126 - AttributeError: 'str' object has no attribute 'local'.
John Rouillard <rouilj@ieee.org>
parents: 6339
diff changeset
721
a7e7314fb7d9 issue2551126 - AttributeError: 'str' object has no attribute 'local'.
John Rouillard <rouilj@ieee.org>
parents: 6339
diff changeset
722 self.client.db.classes = dict \
a7e7314fb7d9 issue2551126 - AttributeError: 'str' object has no attribute 'local'.
John Rouillard <rouilj@ieee.org>
parents: 6339
diff changeset
723 ( test = MockNull(getprops = lambda : test_date)
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
a7e7314fb7d9 issue2551126 - AttributeError: 'str' object has no attribute 'local'.
John Rouillard <rouilj@ieee.org>
parents: 6339
diff changeset
726 # client, classname, nodeid, prop, name, value,
a7e7314fb7d9 issue2551126 - AttributeError: 'str' object has no attribute 'local'.
John Rouillard <rouilj@ieee.org>
parents: 6339
diff changeset
727 # anonymous=0, offset=None
a7e7314fb7d9 issue2551126 - AttributeError: 'str' object has no attribute 'local'.
John Rouillard <rouilj@ieee.org>
parents: 6339
diff changeset
728 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
729 'test', '')
a7e7314fb7d9 issue2551126 - AttributeError: 'str' object has no attribute 'local'.
John Rouillard <rouilj@ieee.org>
parents: 6339
diff changeset
730 self.assertIs(type(d._value), str)
a7e7314fb7d9 issue2551126 - AttributeError: 'str' object has no attribute 'local'.
John Rouillard <rouilj@ieee.org>
parents: 6339
diff changeset
731 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
732 self.assertEqual(d.plain(), "2021-01-01 11:22:10")
a7e7314fb7d9 issue2551126 - AttributeError: 'str' object has no attribute 'local'.
John Rouillard <rouilj@ieee.org>
parents: 6339
diff changeset
733 input = """<input name="test1@test" size="30" type="text" value="2021-01-01 11:22:10"><a class="classhelp" data-calurl="test?@template=calendar&amp;amp;property=test&amp;amp;form=itemSynopsis&amp;date=2021-01-01 11:22:10" data-height="200" data-width="300" href="javascript:help_window('test?@template=calendar&amp;property=test&amp;form=itemSynopsis&date=2021-01-01 11:22:10', 300, 200)">(cal)</a>"""
a7e7314fb7d9 issue2551126 - AttributeError: 'str' object has no attribute 'local'.
John Rouillard <rouilj@ieee.org>
parents: 6339
diff changeset
734 self.assertEqual(d.field(), input)
a7e7314fb7d9 issue2551126 - AttributeError: 'str' object has no attribute 'local'.
John Rouillard <rouilj@ieee.org>
parents: 6339
diff changeset
735
6099
55c56ceacb8e escape HTML tags in markdown content
Christof Meerwald <cmeerw@cmeerw.org>
parents: 6098
diff changeset
736 # common markdown test cases
55c56ceacb8e escape HTML tags in markdown content
Christof Meerwald <cmeerw@cmeerw.org>
parents: 6098
diff changeset
737 class MarkdownTests:
6282
d30501bafdfb issue2551098: markdown links missing rel="noreferer nofollow"
John Rouillard <rouilj@ieee.org>
parents: 6280
diff changeset
738 def mangleMarkdown2(self, s):
d30501bafdfb issue2551098: markdown links missing rel="noreferer nofollow"
John Rouillard <rouilj@ieee.org>
parents: 6280
diff changeset
739 ''' 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
740 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
741 so that it matches the test case.
d30501bafdfb issue2551098: markdown links missing rel="noreferer nofollow"
John Rouillard <rouilj@ieee.org>
parents: 6280
diff changeset
742
d30501bafdfb issue2551098: markdown links missing rel="noreferer nofollow"
John Rouillard <rouilj@ieee.org>
parents: 6280
diff changeset
743 turn: <a rel="nofollow" href="foo"> into
d30501bafdfb issue2551098: markdown links missing rel="noreferer nofollow"
John Rouillard <rouilj@ieee.org>
parents: 6280
diff changeset
744 <a href="foo" rel="nofollow noopener">
d30501bafdfb issue2551098: markdown links missing rel="noreferer nofollow"
John Rouillard <rouilj@ieee.org>
parents: 6280
diff changeset
745
d30501bafdfb issue2551098: markdown links missing rel="noreferer nofollow"
John Rouillard <rouilj@ieee.org>
parents: 6280
diff changeset
746 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
747 so delete it.
d30501bafdfb issue2551098: markdown links missing rel="noreferer nofollow"
John Rouillard <rouilj@ieee.org>
parents: 6280
diff changeset
748
d30501bafdfb issue2551098: markdown links missing rel="noreferer nofollow"
John Rouillard <rouilj@ieee.org>
parents: 6280
diff changeset
749 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
750 <a href="mailto:foo">
d30501bafdfb issue2551098: markdown links missing rel="noreferer nofollow"
John Rouillard <rouilj@ieee.org>
parents: 6280
diff changeset
751
d30501bafdfb issue2551098: markdown links missing rel="noreferer nofollow"
John Rouillard <rouilj@ieee.org>
parents: 6280
diff changeset
752 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
753 from markdown, so fix it to normalize.
d30501bafdfb issue2551098: markdown links missing rel="noreferer nofollow"
John Rouillard <rouilj@ieee.org>
parents: 6280
diff changeset
754
d30501bafdfb issue2551098: markdown links missing rel="noreferer nofollow"
John Rouillard <rouilj@ieee.org>
parents: 6280
diff changeset
755 turn:
d30501bafdfb issue2551098: markdown links missing rel="noreferer nofollow"
John Rouillard <rouilj@ieee.org>
parents: 6280
diff changeset
756
d30501bafdfb issue2551098: markdown links missing rel="noreferer nofollow"
John Rouillard <rouilj@ieee.org>
parents: 6280
diff changeset
757 <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
758 into
d30501bafdfb issue2551098: markdown links missing rel="noreferer nofollow"
John Rouillard <rouilj@ieee.org>
parents: 6280
diff changeset
759 <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
760 '''
d30501bafdfb issue2551098: markdown links missing rel="noreferer nofollow"
John Rouillard <rouilj@ieee.org>
parents: 6280
diff changeset
761 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
762 if s.find('href="mailto:') == -1:
d30501bafdfb issue2551098: markdown links missing rel="noreferer nofollow"
John Rouillard <rouilj@ieee.org>
parents: 6280
diff changeset
763 # not a mailto url
d30501bafdfb issue2551098: markdown links missing rel="noreferer nofollow"
John Rouillard <rouilj@ieee.org>
parents: 6280
diff changeset
764 if 'rel="nofollow"' in s:
d30501bafdfb issue2551098: markdown links missing rel="noreferer nofollow"
John Rouillard <rouilj@ieee.org>
parents: 6280
diff changeset
765 if 'title="' in s:
d30501bafdfb issue2551098: markdown links missing rel="noreferer nofollow"
John Rouillard <rouilj@ieee.org>
parents: 6280
diff changeset
766 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
767 else:
d30501bafdfb issue2551098: markdown links missing rel="noreferer nofollow"
John Rouillard <rouilj@ieee.org>
parents: 6280
diff changeset
768 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
769
d30501bafdfb issue2551098: markdown links missing rel="noreferer nofollow"
John Rouillard <rouilj@ieee.org>
parents: 6280
diff changeset
770 return s
d30501bafdfb issue2551098: markdown links missing rel="noreferer nofollow"
John Rouillard <rouilj@ieee.org>
parents: 6280
diff changeset
771 else:
d30501bafdfb issue2551098: markdown links missing rel="noreferer nofollow"
John Rouillard <rouilj@ieee.org>
parents: 6280
diff changeset
772 # a mailto url
d30501bafdfb issue2551098: markdown links missing rel="noreferer nofollow"
John Rouillard <rouilj@ieee.org>
parents: 6280
diff changeset
773 return s.replace(' rel="nofollow" ', ' ')
d30501bafdfb issue2551098: markdown links missing rel="noreferer nofollow"
John Rouillard <rouilj@ieee.org>
parents: 6280
diff changeset
774 return s
d30501bafdfb issue2551098: markdown links missing rel="noreferer nofollow"
John Rouillard <rouilj@ieee.org>
parents: 6280
diff changeset
775
d30501bafdfb issue2551098: markdown links missing rel="noreferer nofollow"
John Rouillard <rouilj@ieee.org>
parents: 6280
diff changeset
776
6099
55c56ceacb8e escape HTML tags in markdown content
Christof Meerwald <cmeerw@cmeerw.org>
parents: 6098
diff changeset
777 def test_string_markdown(self):
6104
a1fd9551d416 don't allow javascript URLs in markdown content
Christof Meerwald <cmeerw@cmeerw.org>
parents: 6103
diff changeset
778 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
779 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
780
a1fd9551d416 don't allow javascript URLs in markdown content
Christof Meerwald <cmeerw@cmeerw.org>
parents: 6103
diff changeset
781 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
782 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
783 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
784 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
785 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
786
91725f12b239 Support markdown2 2.4.10, 2.4.8- and exclude 2.4.9
John Rouillard <rouilj@ieee.org>
parents: 7032
diff changeset
787 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
788
6336
6f89cdc7c938 issue2551108 - fix markdown formatted designator links
John Rouillard <rouilj@ieee.org>
parents: 6299
diff changeset
789 def test_string_markdown_link_item(self):
6f89cdc7c938 issue2551108 - fix markdown formatted designator links
John Rouillard <rouilj@ieee.org>
parents: 6299
diff changeset
790 """ 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
791 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
792 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
793 success rather than the entire returned string.
6f89cdc7c938 issue2551108 - fix markdown formatted designator links
John Rouillard <rouilj@ieee.org>
parents: 6299
diff changeset
794 """
7561
91725f12b239 Support markdown2 2.4.10, 2.4.8- and exclude 2.4.9
John Rouillard <rouilj@ieee.org>
parents: 7032
diff changeset
795 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
796 u2s(u'An issue1 link'))
6336
6f89cdc7c938 issue2551108 - fix markdown formatted designator links
John Rouillard <rouilj@ieee.org>
parents: 6299
diff changeset
797 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
798 # just verify that plain linking is working
6f89cdc7c938 issue2551108 - fix markdown formatted designator links
John Rouillard <rouilj@ieee.org>
parents: 6299
diff changeset
799 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
800
7561
91725f12b239 Support markdown2 2.4.10, 2.4.8- and exclude 2.4.9
John Rouillard <rouilj@ieee.org>
parents: 7032
diff changeset
801 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
802 u2s(u'An [issue1](issue1) link'))
6336
6f89cdc7c938 issue2551108 - fix markdown formatted designator links
John Rouillard <rouilj@ieee.org>
parents: 6299
diff changeset
803 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
804 # just verify that plain linking is working
6f89cdc7c938 issue2551108 - fix markdown formatted designator links
John Rouillard <rouilj@ieee.org>
parents: 6299
diff changeset
805 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
806
7561
91725f12b239 Support markdown2 2.4.10, 2.4.8- and exclude 2.4.9
John Rouillard <rouilj@ieee.org>
parents: 7032
diff changeset
807 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
808 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
809 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
810 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
811 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
812
91725f12b239 Support markdown2 2.4.10, 2.4.8- and exclude 2.4.9
John Rouillard <rouilj@ieee.org>
parents: 7032
diff changeset
813 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
814 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
815 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
816
91725f12b239 Support markdown2 2.4.10, 2.4.8- and exclude 2.4.9
John Rouillard <rouilj@ieee.org>
parents: 7032
diff changeset
817 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
818 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
819 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
820
7561
91725f12b239 Support markdown2 2.4.10, 2.4.8- and exclude 2.4.9
John Rouillard <rouilj@ieee.org>
parents: 7032
diff changeset
821 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
822 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
823 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
824
91725f12b239 Support markdown2 2.4.10, 2.4.8- and exclude 2.4.9
John Rouillard <rouilj@ieee.org>
parents: 7032
diff changeset
825 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
826 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
827 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
828
91725f12b239 Support markdown2 2.4.10, 2.4.8- and exclude 2.4.9
John Rouillard <rouilj@ieee.org>
parents: 7032
diff changeset
829 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
830 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
831 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
832 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
833 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
834
91725f12b239 Support markdown2 2.4.10, 2.4.8- and exclude 2.4.9
John Rouillard <rouilj@ieee.org>
parents: 7032
diff changeset
835 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
836 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
837 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
838 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
839 if type(self) == MistuneTestCase:
6f89cdc7c938 issue2551108 - fix markdown formatted designator links
John Rouillard <rouilj@ieee.org>
parents: 6299
diff changeset
840 # 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
841 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
842 p.markdown().strip())
6336
6f89cdc7c938 issue2551108 - fix markdown formatted designator links
John Rouillard <rouilj@ieee.org>
parents: 6299
diff changeset
843 else:
6f89cdc7c938 issue2551108 - fix markdown formatted designator links
John Rouillard <rouilj@ieee.org>
parents: 6299
diff changeset
844 # 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
845 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
846 p.markdown().strip())
6336
6f89cdc7c938 issue2551108 - fix markdown formatted designator links
John Rouillard <rouilj@ieee.org>
parents: 6299
diff changeset
847
7561
91725f12b239 Support markdown2 2.4.10, 2.4.8- and exclude 2.4.9
John Rouillard <rouilj@ieee.org>
parents: 7032
diff changeset
848 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
849 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
850 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
851 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
852 # 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
853 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
854 else:
91725f12b239 Support markdown2 2.4.10, 2.4.8- and exclude 2.4.9
John Rouillard <rouilj@ieee.org>
parents: 7032
diff changeset
855 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
856
91725f12b239 Support markdown2 2.4.10, 2.4.8- and exclude 2.4.9
John Rouillard <rouilj@ieee.org>
parents: 7032
diff changeset
857 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
858 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
859 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
860 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
861 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
862 else:
91725f12b239 Support markdown2 2.4.10, 2.4.8- and exclude 2.4.9
John Rouillard <rouilj@ieee.org>
parents: 7032
diff changeset
863 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
864 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
865
91725f12b239 Support markdown2 2.4.10, 2.4.8- and exclude 2.4.9
John Rouillard <rouilj@ieee.org>
parents: 7032
diff changeset
866 def test_string_email_markdown_link(self):
6109
b108c9fc7aea fix test for Python 2
Christof Meerwald <cmeerw@cmeerw.org>
parents: 6104
diff changeset
867 # 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
868 try:
6109
b108c9fc7aea fix test for Python 2
Christof Meerwald <cmeerw@cmeerw.org>
parents: 6104
diff changeset
869 from html import unescape as html_unescape
b108c9fc7aea fix test for Python 2
Christof Meerwald <cmeerw@cmeerw.org>
parents: 6104
diff changeset
870 except ImportError:
6104
a1fd9551d416 don't allow javascript URLs in markdown content
Christof Meerwald <cmeerw@cmeerw.org>
parents: 6103
diff changeset
871 from HTMLParser import HTMLParser
a1fd9551d416 don't allow javascript URLs in markdown content
Christof Meerwald <cmeerw@cmeerw.org>
parents: 6103
diff changeset
872 html_unescape = HTMLParser().unescape
a1fd9551d416 don't allow javascript URLs in markdown content
Christof Meerwald <cmeerw@cmeerw.org>
parents: 6103
diff changeset
873
7561
91725f12b239 Support markdown2 2.4.10, 2.4.8- and exclude 2.4.9
John Rouillard <rouilj@ieee.org>
parents: 7032
diff changeset
874 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
875 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
876 m = html_unescape(p.markdown().strip())
d30501bafdfb issue2551098: markdown links missing rel="noreferer nofollow"
John Rouillard <rouilj@ieee.org>
parents: 6280
diff changeset
877 m = self.mangleMarkdown2(m)
d30501bafdfb issue2551098: markdown links missing rel="noreferer nofollow"
John Rouillard <rouilj@ieee.org>
parents: 6280
diff changeset
878
d30501bafdfb issue2551098: markdown links missing rel="noreferer nofollow"
John Rouillard <rouilj@ieee.org>
parents: 6280
diff changeset
879 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
880
7561
91725f12b239 Support markdown2 2.4.10, 2.4.8- and exclude 2.4.9
John Rouillard <rouilj@ieee.org>
parents: 7032
diff changeset
881 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
882 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
883 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
884 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
885 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
886 m)
91725f12b239 Support markdown2 2.4.10, 2.4.8- and exclude 2.4.9
John Rouillard <rouilj@ieee.org>
parents: 7032
diff changeset
887
91725f12b239 Support markdown2 2.4.10, 2.4.8- and exclude 2.4.9
John Rouillard <rouilj@ieee.org>
parents: 7032
diff changeset
888 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
889 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
890 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
891 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
892
91725f12b239 Support markdown2 2.4.10, 2.4.8- and exclude 2.4.9
John Rouillard <rouilj@ieee.org>
parents: 7032
diff changeset
893 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
894 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
895 else:
91725f12b239 Support markdown2 2.4.10, 2.4.8- and exclude 2.4.9
John Rouillard <rouilj@ieee.org>
parents: 7032
diff changeset
896 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
897
6104
a1fd9551d416 don't allow javascript URLs in markdown content
Christof Meerwald <cmeerw@cmeerw.org>
parents: 6103
diff changeset
898 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
899 # 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
900 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
901 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
902
a1fd9551d416 don't allow javascript URLs in markdown content
Christof Meerwald <cmeerw@cmeerw.org>
parents: 6103
diff changeset
903 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
904 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
905
6284
3f7538316724 issue2551099 - disable processing of data url's in markdown.
John Rouillard <rouilj@ieee.org>
parents: 6282
diff changeset
906 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
907 # 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
908 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
909 print(p.markdown())
3f7538316724 issue2551099 - disable processing of data url's in markdown.
John Rouillard <rouilj@ieee.org>
parents: 6282
diff changeset
910 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
911
3f7538316724 issue2551099 - disable processing of data url's in markdown.
John Rouillard <rouilj@ieee.org>
parents: 6282
diff changeset
912 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
913 print(p.markdown())
3f7538316724 issue2551099 - disable processing of data url's in markdown.
John Rouillard <rouilj@ieee.org>
parents: 6282
diff changeset
914 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
915
6274
474de62f4ce0 Add test for hard linebreak fomatting in markdown
John Rouillard <rouilj@ieee.org>
parents: 6109
diff changeset
916
474de62f4ce0 Add test for hard linebreak fomatting in markdown
John Rouillard <rouilj@ieee.org>
parents: 6109
diff changeset
917 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
918 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
919 # sigh different backends render this differently:
474de62f4ce0 Add test for hard linebreak fomatting in markdown
John Rouillard <rouilj@ieee.org>
parents: 6109
diff changeset
920 # of text <br />
474de62f4ce0 Add test for hard linebreak fomatting in markdown
John Rouillard <rouilj@ieee.org>
parents: 6109
diff changeset
921 # of text<br>
474de62f4ce0 Add test for hard linebreak fomatting in markdown
John Rouillard <rouilj@ieee.org>
parents: 6109
diff changeset
922 # etc.
474de62f4ce0 Add test for hard linebreak fomatting in markdown
John Rouillard <rouilj@ieee.org>
parents: 6109
diff changeset
923 # 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
924 # 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
925 m = p.markdown()
6282
d30501bafdfb issue2551098: markdown links missing rel="noreferer nofollow"
John Rouillard <rouilj@ieee.org>
parents: 6280
diff changeset
926 print(m)
6274
474de62f4ce0 Add test for hard linebreak fomatting in markdown
John Rouillard <rouilj@ieee.org>
parents: 6109
diff changeset
927 self.assertEqual(3, m.count('<br'))
474de62f4ce0 Add test for hard linebreak fomatting in markdown
John Rouillard <rouilj@ieee.org>
parents: 6109
diff changeset
928
6099
55c56ceacb8e escape HTML tags in markdown content
Christof Meerwald <cmeerw@cmeerw.org>
parents: 6098
diff changeset
929 def test_string_markdown_code_block(self):
6275
bda491248fd8 Handle exception raised from markdown processing
John Rouillard <rouilj@ieee.org>
parents: 6274
diff changeset
930 ''' also verify that embedded html is escaped '''
bda491248fd8 Handle exception raised from markdown processing
John Rouillard <rouilj@ieee.org>
parents: 6274
diff changeset
931 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
932 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
933
bda491248fd8 Handle exception raised from markdown processing
John Rouillard <rouilj@ieee.org>
parents: 6274
diff changeset
934 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
935 parser = NormalizingHtmlParser()
6992
a5f30372ef7f New markdown2 release changed output with code highlighting (take 2)
John Rouillard <rouilj@ieee.org>
parents: 6991
diff changeset
936
6275
bda491248fd8 Handle exception raised from markdown processing
John Rouillard <rouilj@ieee.org>
parents: 6274
diff changeset
937 ''' also verify that embedded html is escaped '''
bda491248fd8 Handle exception raised from markdown processing
John Rouillard <rouilj@ieee.org>
parents: 6274
diff changeset
938 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
939 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
940 parser.reset()
6275
bda491248fd8 Handle exception raised from markdown processing
John Rouillard <rouilj@ieee.org>
parents: 6274
diff changeset
941 print(m)
bda491248fd8 Handle exception raised from markdown processing
John Rouillard <rouilj@ieee.org>
parents: 6274
diff changeset
942 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
943 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
944 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
945 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
946 else:
6995
dc83ebff4c90 change test to use html normalizer when comparing html output.
John Rouillard <rouilj@ieee.org>
parents: 6992
diff changeset
947 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
948 self.assertEqual(m, expected_result)
6275
bda491248fd8 Handle exception raised from markdown processing
John Rouillard <rouilj@ieee.org>
parents: 6274
diff changeset
949
6279
9ec3a9bc4ea5 issue2551097 - fix call to markdown2 - fix fenced code blocks.
John Rouillard <rouilj@ieee.org>
parents: 6277
diff changeset
950 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
951 ''' 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
952 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
953 m = p.markdown().strip()
9ec3a9bc4ea5 issue2551097 - fix call to markdown2 - fix fenced code blocks.
John Rouillard <rouilj@ieee.org>
parents: 6277
diff changeset
954 print(m)
9ec3a9bc4ea5 issue2551097 - fix call to markdown2 - fix fenced code blocks.
John Rouillard <rouilj@ieee.org>
parents: 6277
diff changeset
955 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
956
9ec3a9bc4ea5 issue2551097 - fix call to markdown2 - fix fenced code blocks.
John Rouillard <rouilj@ieee.org>
parents: 6277
diff changeset
957 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
958 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
959 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
960 m = p.markdown()
957a0fc20021 issue2551094 - markdown mismatch - new config for embedded newine
John Rouillard <rouilj@ieee.org>
parents: 6275
diff changeset
961 self.assertEqual(2, m.count('<br'))
957a0fc20021 issue2551094 - markdown mismatch - new config for embedded newine
John Rouillard <rouilj@ieee.org>
parents: 6275
diff changeset
962 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
963
957a0fc20021 issue2551094 - markdown mismatch - new config for embedded newine
John Rouillard <rouilj@ieee.org>
parents: 6275
diff changeset
964 m = p.markdown()
957a0fc20021 issue2551094 - markdown mismatch - new config for embedded newine
John Rouillard <rouilj@ieee.org>
parents: 6275
diff changeset
965 self.assertEqual(0, m.count('<br'))
957a0fc20021 issue2551094 - markdown mismatch - new config for embedded newine
John Rouillard <rouilj@ieee.org>
parents: 6275
diff changeset
966
6280
6ed5152a92d0 issue2551096 - enable markdown autolink for email and bare url's.
John Rouillard <rouilj@ieee.org>
parents: 6279
diff changeset
967 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
968 # 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
969 # so rstrip \n.
6ed5152a92d0 issue2551096 - enable markdown autolink for email and bare url's.
John Rouillard <rouilj@ieee.org>
parents: 6279
diff changeset
970 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
971 m = p.markdown(hyperlink=1)
6282
d30501bafdfb issue2551098: markdown links missing rel="noreferer nofollow"
John Rouillard <rouilj@ieee.org>
parents: 6280
diff changeset
972 m = self.mangleMarkdown2(m)
d30501bafdfb issue2551098: markdown links missing rel="noreferer nofollow"
John Rouillard <rouilj@ieee.org>
parents: 6280
diff changeset
973 print(m)
d30501bafdfb issue2551098: markdown links missing rel="noreferer nofollow"
John Rouillard <rouilj@ieee.org>
parents: 6280
diff changeset
974 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
975
6ed5152a92d0 issue2551096 - enable markdown autolink for email and bare url's.
John Rouillard <rouilj@ieee.org>
parents: 6279
diff changeset
976 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
977 m = p.markdown(hyperlink=1)
6282
d30501bafdfb issue2551098: markdown links missing rel="noreferer nofollow"
John Rouillard <rouilj@ieee.org>
parents: 6280
diff changeset
978 m = self.mangleMarkdown2(m)
d30501bafdfb issue2551098: markdown links missing rel="noreferer nofollow"
John Rouillard <rouilj@ieee.org>
parents: 6280
diff changeset
979 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
980
d30501bafdfb issue2551098: markdown links missing rel="noreferer nofollow"
John Rouillard <rouilj@ieee.org>
parents: 6280
diff changeset
981 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
982 m = p.markdown(hyperlink=1)
d30501bafdfb issue2551098: markdown links missing rel="noreferer nofollow"
John Rouillard <rouilj@ieee.org>
parents: 6280
diff changeset
983 m = self.mangleMarkdown2(m)
d30501bafdfb issue2551098: markdown links missing rel="noreferer nofollow"
John Rouillard <rouilj@ieee.org>
parents: 6280
diff changeset
984 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
985
6299
fd0bdcbc68e4 issue2551104 - fix issue with markdown autolink next to punctuation
John Rouillard <rouilj@ieee.org>
parents: 6284
diff changeset
986 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
987 m = p.markdown(hyperlink=1)
fd0bdcbc68e4 issue2551104 - fix issue with markdown autolink next to punctuation
John Rouillard <rouilj@ieee.org>
parents: 6284
diff changeset
988 m = self.mangleMarkdown2(m)
fd0bdcbc68e4 issue2551104 - fix issue with markdown autolink next to punctuation
John Rouillard <rouilj@ieee.org>
parents: 6284
diff changeset
989 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
990
6280
6ed5152a92d0 issue2551096 - enable markdown autolink for email and bare url's.
John Rouillard <rouilj@ieee.org>
parents: 6279
diff changeset
991 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
992 m = p.markdown(hyperlink=1)
6282
d30501bafdfb issue2551098: markdown links missing rel="noreferer nofollow"
John Rouillard <rouilj@ieee.org>
parents: 6280
diff changeset
993 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
994 self.assertIn(m, [
6ed5152a92d0 issue2551096 - enable markdown autolink for email and bare url's.
John Rouillard <rouilj@ieee.org>
parents: 6279
diff changeset
995 '<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
996 '<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
997 '<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
998 '<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
999 ])
6ed5152a92d0 issue2551096 - enable markdown autolink for email and bare url's.
John Rouillard <rouilj@ieee.org>
parents: 6279
diff changeset
1000
6ed5152a92d0 issue2551096 - enable markdown autolink for email and bare url's.
John Rouillard <rouilj@ieee.org>
parents: 6279
diff changeset
1001 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
1002 m = p.markdown(hyperlink=1)
6282
d30501bafdfb issue2551098: markdown links missing rel="noreferer nofollow"
John Rouillard <rouilj@ieee.org>
parents: 6280
diff changeset
1003 m = self.mangleMarkdown2(m)
d30501bafdfb issue2551098: markdown links missing rel="noreferer nofollow"
John Rouillard <rouilj@ieee.org>
parents: 6280
diff changeset
1004 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
1005
6ed5152a92d0 issue2551096 - enable markdown autolink for email and bare url's.
John Rouillard <rouilj@ieee.org>
parents: 6279
diff changeset
1006 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
1007 m = p.markdown(hyperlink=1)
6282
d30501bafdfb issue2551098: markdown links missing rel="noreferer nofollow"
John Rouillard <rouilj@ieee.org>
parents: 6280
diff changeset
1008 m = self.mangleMarkdown2(m)
d30501bafdfb issue2551098: markdown links missing rel="noreferer nofollow"
John Rouillard <rouilj@ieee.org>
parents: 6280
diff changeset
1009 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
1010
55c56ceacb8e escape HTML tags in markdown content
Christof Meerwald <cmeerw@cmeerw.org>
parents: 6098
diff changeset
1011 @skip_mistune
55c56ceacb8e escape HTML tags in markdown content
Christof Meerwald <cmeerw@cmeerw.org>
parents: 6098
diff changeset
1012 class MistuneTestCase(TemplatingTestCase, MarkdownTests) :
55c56ceacb8e escape HTML tags in markdown content
Christof Meerwald <cmeerw@cmeerw.org>
parents: 6098
diff changeset
1013 def setUp(self):
55c56ceacb8e escape HTML tags in markdown content
Christof Meerwald <cmeerw@cmeerw.org>
parents: 6098
diff changeset
1014 TemplatingTestCase.setUp(self)
55c56ceacb8e escape HTML tags in markdown content
Christof Meerwald <cmeerw@cmeerw.org>
parents: 6098
diff changeset
1015
55c56ceacb8e escape HTML tags in markdown content
Christof Meerwald <cmeerw@cmeerw.org>
parents: 6098
diff changeset
1016 from roundup.cgi import templating
55c56ceacb8e escape HTML tags in markdown content
Christof Meerwald <cmeerw@cmeerw.org>
parents: 6098
diff changeset
1017 self.__markdown = templating.markdown
55c56ceacb8e escape HTML tags in markdown content
Christof Meerwald <cmeerw@cmeerw.org>
parents: 6098
diff changeset
1018 templating.markdown = templating._import_mistune()
55c56ceacb8e escape HTML tags in markdown content
Christof Meerwald <cmeerw@cmeerw.org>
parents: 6098
diff changeset
1019
55c56ceacb8e escape HTML tags in markdown content
Christof Meerwald <cmeerw@cmeerw.org>
parents: 6098
diff changeset
1020 def tearDown(self):
55c56ceacb8e escape HTML tags in markdown content
Christof Meerwald <cmeerw@cmeerw.org>
parents: 6098
diff changeset
1021 from roundup.cgi import templating
55c56ceacb8e escape HTML tags in markdown content
Christof Meerwald <cmeerw@cmeerw.org>
parents: 6098
diff changeset
1022 templating.markdown = self.__markdown
55c56ceacb8e escape HTML tags in markdown content
Christof Meerwald <cmeerw@cmeerw.org>
parents: 6098
diff changeset
1023
55c56ceacb8e escape HTML tags in markdown content
Christof Meerwald <cmeerw@cmeerw.org>
parents: 6098
diff changeset
1024 @skip_markdown2
55c56ceacb8e escape HTML tags in markdown content
Christof Meerwald <cmeerw@cmeerw.org>
parents: 6098
diff changeset
1025 class Markdown2TestCase(TemplatingTestCase, MarkdownTests) :
55c56ceacb8e escape HTML tags in markdown content
Christof Meerwald <cmeerw@cmeerw.org>
parents: 6098
diff changeset
1026 def setUp(self):
55c56ceacb8e escape HTML tags in markdown content
Christof Meerwald <cmeerw@cmeerw.org>
parents: 6098
diff changeset
1027 TemplatingTestCase.setUp(self)
55c56ceacb8e escape HTML tags in markdown content
Christof Meerwald <cmeerw@cmeerw.org>
parents: 6098
diff changeset
1028
55c56ceacb8e escape HTML tags in markdown content
Christof Meerwald <cmeerw@cmeerw.org>
parents: 6098
diff changeset
1029 from roundup.cgi import templating
55c56ceacb8e escape HTML tags in markdown content
Christof Meerwald <cmeerw@cmeerw.org>
parents: 6098
diff changeset
1030 self.__markdown = templating.markdown
55c56ceacb8e escape HTML tags in markdown content
Christof Meerwald <cmeerw@cmeerw.org>
parents: 6098
diff changeset
1031 templating.markdown = templating._import_markdown2()
55c56ceacb8e escape HTML tags in markdown content
Christof Meerwald <cmeerw@cmeerw.org>
parents: 6098
diff changeset
1032
55c56ceacb8e escape HTML tags in markdown content
Christof Meerwald <cmeerw@cmeerw.org>
parents: 6098
diff changeset
1033 def tearDown(self):
55c56ceacb8e escape HTML tags in markdown content
Christof Meerwald <cmeerw@cmeerw.org>
parents: 6098
diff changeset
1034 from roundup.cgi import templating
55c56ceacb8e escape HTML tags in markdown content
Christof Meerwald <cmeerw@cmeerw.org>
parents: 6098
diff changeset
1035 templating.markdown = self.__markdown
55c56ceacb8e escape HTML tags in markdown content
Christof Meerwald <cmeerw@cmeerw.org>
parents: 6098
diff changeset
1036
55c56ceacb8e escape HTML tags in markdown content
Christof Meerwald <cmeerw@cmeerw.org>
parents: 6098
diff changeset
1037 @skip_markdown
55c56ceacb8e escape HTML tags in markdown content
Christof Meerwald <cmeerw@cmeerw.org>
parents: 6098
diff changeset
1038 class MarkdownTestCase(TemplatingTestCase, MarkdownTests) :
55c56ceacb8e escape HTML tags in markdown content
Christof Meerwald <cmeerw@cmeerw.org>
parents: 6098
diff changeset
1039 def setUp(self):
55c56ceacb8e escape HTML tags in markdown content
Christof Meerwald <cmeerw@cmeerw.org>
parents: 6098
diff changeset
1040 TemplatingTestCase.setUp(self)
55c56ceacb8e escape HTML tags in markdown content
Christof Meerwald <cmeerw@cmeerw.org>
parents: 6098
diff changeset
1041
55c56ceacb8e escape HTML tags in markdown content
Christof Meerwald <cmeerw@cmeerw.org>
parents: 6098
diff changeset
1042 from roundup.cgi import templating
55c56ceacb8e escape HTML tags in markdown content
Christof Meerwald <cmeerw@cmeerw.org>
parents: 6098
diff changeset
1043 self.__markdown = templating.markdown
55c56ceacb8e escape HTML tags in markdown content
Christof Meerwald <cmeerw@cmeerw.org>
parents: 6098
diff changeset
1044 templating.markdown = templating._import_markdown()
55c56ceacb8e escape HTML tags in markdown content
Christof Meerwald <cmeerw@cmeerw.org>
parents: 6098
diff changeset
1045
55c56ceacb8e escape HTML tags in markdown content
Christof Meerwald <cmeerw@cmeerw.org>
parents: 6098
diff changeset
1046 def tearDown(self):
55c56ceacb8e escape HTML tags in markdown content
Christof Meerwald <cmeerw@cmeerw.org>
parents: 6098
diff changeset
1047 from roundup.cgi import templating
55c56ceacb8e escape HTML tags in markdown content
Christof Meerwald <cmeerw@cmeerw.org>
parents: 6098
diff changeset
1048 templating.markdown = self.__markdown
55c56ceacb8e escape HTML tags in markdown content
Christof Meerwald <cmeerw@cmeerw.org>
parents: 6098
diff changeset
1049
55c56ceacb8e escape HTML tags in markdown content
Christof Meerwald <cmeerw@cmeerw.org>
parents: 6098
diff changeset
1050
55c56ceacb8e escape HTML tags in markdown content
Christof Meerwald <cmeerw@cmeerw.org>
parents: 6098
diff changeset
1051 class NoMarkdownTestCase(TemplatingTestCase) :
55c56ceacb8e escape HTML tags in markdown content
Christof Meerwald <cmeerw@cmeerw.org>
parents: 6098
diff changeset
1052 def setUp(self):
55c56ceacb8e escape HTML tags in markdown content
Christof Meerwald <cmeerw@cmeerw.org>
parents: 6098
diff changeset
1053 TemplatingTestCase.setUp(self)
55c56ceacb8e escape HTML tags in markdown content
Christof Meerwald <cmeerw@cmeerw.org>
parents: 6098
diff changeset
1054
55c56ceacb8e escape HTML tags in markdown content
Christof Meerwald <cmeerw@cmeerw.org>
parents: 6098
diff changeset
1055 from roundup.cgi import templating
55c56ceacb8e escape HTML tags in markdown content
Christof Meerwald <cmeerw@cmeerw.org>
parents: 6098
diff changeset
1056 self.__markdown = templating.markdown
55c56ceacb8e escape HTML tags in markdown content
Christof Meerwald <cmeerw@cmeerw.org>
parents: 6098
diff changeset
1057 templating.markdown = None
55c56ceacb8e escape HTML tags in markdown content
Christof Meerwald <cmeerw@cmeerw.org>
parents: 6098
diff changeset
1058
55c56ceacb8e escape HTML tags in markdown content
Christof Meerwald <cmeerw@cmeerw.org>
parents: 6098
diff changeset
1059 def tearDown(self):
55c56ceacb8e escape HTML tags in markdown content
Christof Meerwald <cmeerw@cmeerw.org>
parents: 6098
diff changeset
1060 from roundup.cgi import templating
55c56ceacb8e escape HTML tags in markdown content
Christof Meerwald <cmeerw@cmeerw.org>
parents: 6098
diff changeset
1061 templating.markdown = self.__markdown
55c56ceacb8e escape HTML tags in markdown content
Christof Meerwald <cmeerw@cmeerw.org>
parents: 6098
diff changeset
1062
55c56ceacb8e escape HTML tags in markdown content
Christof Meerwald <cmeerw@cmeerw.org>
parents: 6098
diff changeset
1063 def test_string_markdown(self):
55c56ceacb8e escape HTML tags in markdown content
Christof Meerwald <cmeerw@cmeerw.org>
parents: 6098
diff changeset
1064 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
1065 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
1066
55c56ceacb8e escape HTML tags in markdown content
Christof Meerwald <cmeerw@cmeerw.org>
parents: 6098
diff changeset
1067 class NoRstTestCase(TemplatingTestCase) :
55c56ceacb8e escape HTML tags in markdown content
Christof Meerwald <cmeerw@cmeerw.org>
parents: 6098
diff changeset
1068 def setUp(self):
55c56ceacb8e escape HTML tags in markdown content
Christof Meerwald <cmeerw@cmeerw.org>
parents: 6098
diff changeset
1069 TemplatingTestCase.setUp(self)
55c56ceacb8e escape HTML tags in markdown content
Christof Meerwald <cmeerw@cmeerw.org>
parents: 6098
diff changeset
1070
55c56ceacb8e escape HTML tags in markdown content
Christof Meerwald <cmeerw@cmeerw.org>
parents: 6098
diff changeset
1071 from roundup.cgi import templating
55c56ceacb8e escape HTML tags in markdown content
Christof Meerwald <cmeerw@cmeerw.org>
parents: 6098
diff changeset
1072 self.__ReStructuredText = templating.ReStructuredText
55c56ceacb8e escape HTML tags in markdown content
Christof Meerwald <cmeerw@cmeerw.org>
parents: 6098
diff changeset
1073 templating.ReStructuredText = None
55c56ceacb8e escape HTML tags in markdown content
Christof Meerwald <cmeerw@cmeerw.org>
parents: 6098
diff changeset
1074
55c56ceacb8e escape HTML tags in markdown content
Christof Meerwald <cmeerw@cmeerw.org>
parents: 6098
diff changeset
1075 def tearDown(self):
55c56ceacb8e escape HTML tags in markdown content
Christof Meerwald <cmeerw@cmeerw.org>
parents: 6098
diff changeset
1076 from roundup.cgi import templating
55c56ceacb8e escape HTML tags in markdown content
Christof Meerwald <cmeerw@cmeerw.org>
parents: 6098
diff changeset
1077 templating.ReStructuredText = self.__ReStructuredText
55c56ceacb8e escape HTML tags in markdown content
Christof Meerwald <cmeerw@cmeerw.org>
parents: 6098
diff changeset
1078
55c56ceacb8e escape HTML tags in markdown content
Christof Meerwald <cmeerw@cmeerw.org>
parents: 6098
diff changeset
1079 def test_string_rst(self):
55c56ceacb8e escape HTML tags in markdown content
Christof Meerwald <cmeerw@cmeerw.org>
parents: 6098
diff changeset
1080 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
1081 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
1082
55c56ceacb8e escape HTML tags in markdown content
Christof Meerwald <cmeerw@cmeerw.org>
parents: 6098
diff changeset
1083 class NoStextTestCase(TemplatingTestCase) :
55c56ceacb8e escape HTML tags in markdown content
Christof Meerwald <cmeerw@cmeerw.org>
parents: 6098
diff changeset
1084 def setUp(self):
55c56ceacb8e escape HTML tags in markdown content
Christof Meerwald <cmeerw@cmeerw.org>
parents: 6098
diff changeset
1085 TemplatingTestCase.setUp(self)
55c56ceacb8e escape HTML tags in markdown content
Christof Meerwald <cmeerw@cmeerw.org>
parents: 6098
diff changeset
1086
55c56ceacb8e escape HTML tags in markdown content
Christof Meerwald <cmeerw@cmeerw.org>
parents: 6098
diff changeset
1087 from roundup.cgi import templating
55c56ceacb8e escape HTML tags in markdown content
Christof Meerwald <cmeerw@cmeerw.org>
parents: 6098
diff changeset
1088 self.__StructuredText = templating.StructuredText
55c56ceacb8e escape HTML tags in markdown content
Christof Meerwald <cmeerw@cmeerw.org>
parents: 6098
diff changeset
1089 templating.StructuredText = None
55c56ceacb8e escape HTML tags in markdown content
Christof Meerwald <cmeerw@cmeerw.org>
parents: 6098
diff changeset
1090
55c56ceacb8e escape HTML tags in markdown content
Christof Meerwald <cmeerw@cmeerw.org>
parents: 6098
diff changeset
1091 def tearDown(self):
55c56ceacb8e escape HTML tags in markdown content
Christof Meerwald <cmeerw@cmeerw.org>
parents: 6098
diff changeset
1092 from roundup.cgi import templating
55c56ceacb8e escape HTML tags in markdown content
Christof Meerwald <cmeerw@cmeerw.org>
parents: 6098
diff changeset
1093 templating.StructuredText = self.__StructuredText
55c56ceacb8e escape HTML tags in markdown content
Christof Meerwald <cmeerw@cmeerw.org>
parents: 6098
diff changeset
1094
55c56ceacb8e escape HTML tags in markdown content
Christof Meerwald <cmeerw@cmeerw.org>
parents: 6098
diff changeset
1095 def test_string_stext(self):
55c56ceacb8e escape HTML tags in markdown content
Christof Meerwald <cmeerw@cmeerw.org>
parents: 6098
diff changeset
1096 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
1097 self.assertEqual(p.stext(), 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
1098
55c56ceacb8e escape HTML tags in markdown content
Christof Meerwald <cmeerw@cmeerw.org>
parents: 6098
diff changeset
1099
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
1100 r'''
2158
a0cfea4e5956 start at templating tests
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
1101 class HTMLPermissions:
a0cfea4e5956 start at templating tests
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
1102 def is_edit_ok(self):
a0cfea4e5956 start at templating tests
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
1103 def is_view_ok(self):
a0cfea4e5956 start at templating tests
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
1104 def is_only_view_ok(self):
a0cfea4e5956 start at templating tests
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
1105 def view_check(self):
a0cfea4e5956 start at templating tests
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
1106 def edit_check(self):
a0cfea4e5956 start at templating tests
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
1107
a0cfea4e5956 start at templating tests
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
1108 def input_html4(**attrs):
a0cfea4e5956 start at templating tests
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
1109 def input_xhtml(**attrs):
a0cfea4e5956 start at templating tests
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
1110
a0cfea4e5956 start at templating tests
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
1111 class HTMLInputMixin:
a0cfea4e5956 start at templating tests
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
1112 def __init__(self):
a0cfea4e5956 start at templating tests
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
1113
a0cfea4e5956 start at templating tests
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
1114 class HTMLClass(HTMLInputMixin, HTMLPermissions):
a0cfea4e5956 start at templating tests
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
1115 def __init__(self, client, classname, anonymous=0):
a0cfea4e5956 start at templating tests
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
1116 def __repr__(self):
a0cfea4e5956 start at templating tests
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
1117 def __getitem__(self, item):
a0cfea4e5956 start at templating tests
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
1118 def __getattr__(self, attr):
a0cfea4e5956 start at templating tests
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
1119 def designator(self):
5811
7d276bb8b46d More invalid escape sequence fixes.
John Rouillard <rouilj@ieee.org>
parents: 5795
diff changeset
1120 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
1121 def properties(self, sort=1, cansearch=True):
2158
a0cfea4e5956 start at templating tests
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
1122 def list(self, sort_on=None):
a0cfea4e5956 start at templating tests
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
1123 def csv(self):
a0cfea4e5956 start at templating tests
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
1124 def propnames(self):
a0cfea4e5956 start at templating tests
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
1125 def filter(self, request=None, filterspec={}, sort=(None,None),
a0cfea4e5956 start at templating tests
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
1126 def classhelp(self, properties=None, label='(list)', width='500',
a0cfea4e5956 start at templating tests
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
1127 def submit(self, label="Submit New Entry"):
a0cfea4e5956 start at templating tests
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
1128 def history(self):
a0cfea4e5956 start at templating tests
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
1129 def renderWith(self, name, **kwargs):
a0cfea4e5956 start at templating tests
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
1130
a0cfea4e5956 start at templating tests
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
1131 class HTMLItem(HTMLInputMixin, HTMLPermissions):
a0cfea4e5956 start at templating tests
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
1132 def __init__(self, client, classname, nodeid, anonymous=0):
a0cfea4e5956 start at templating tests
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
1133 def __repr__(self):
a0cfea4e5956 start at templating tests
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
1134 def __getitem__(self, item):
a0cfea4e5956 start at templating tests
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
1135 def __getattr__(self, attr):
a0cfea4e5956 start at templating tests
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
1136 def designator(self):
a0cfea4e5956 start at templating tests
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
1137 def is_retired(self):
a0cfea4e5956 start at templating tests
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
1138 def submit(self, label="Submit Changes"):
a0cfea4e5956 start at templating tests
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
1139 def journal(self, direction='descending'):
a0cfea4e5956 start at templating tests
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
1140 def history(self, direction='descending', dre=re.compile('\d+')):
a0cfea4e5956 start at templating tests
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
1141 def renderQueryForm(self):
a0cfea4e5956 start at templating tests
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
1142
a0cfea4e5956 start at templating tests
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
1143 class HTMLUserPermission:
a0cfea4e5956 start at templating tests
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
1144 def is_edit_ok(self):
a0cfea4e5956 start at templating tests
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
1145 def is_view_ok(self):
a0cfea4e5956 start at templating tests
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
1146 def _user_perm_check(self, type):
a0cfea4e5956 start at templating tests
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
1147
a0cfea4e5956 start at templating tests
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
1148 class HTMLUserClass(HTMLUserPermission, HTMLClass):
a0cfea4e5956 start at templating tests
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
1149
a0cfea4e5956 start at templating tests
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
1150 class HTMLUser(HTMLUserPermission, HTMLItem):
a0cfea4e5956 start at templating tests
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
1151 def __init__(self, client, classname, nodeid, anonymous=0):
a0cfea4e5956 start at templating tests
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
1152 def hasPermission(self, permission, classname=_marker):
a0cfea4e5956 start at templating tests
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
1153
a0cfea4e5956 start at templating tests
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
1154 class HTMLProperty(HTMLInputMixin, HTMLPermissions):
a0cfea4e5956 start at templating tests
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
1155 def __init__(self, client, classname, nodeid, prop, name, value,
a0cfea4e5956 start at templating tests
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
1156 def __repr__(self):
a0cfea4e5956 start at templating tests
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
1157 def __str__(self):
5414
3fa026621f69 Python 3 preparation: comparisons.
Joseph Myers <jsm@polyomino.org.uk>
parents: 5388
diff changeset
1158 def __lt__(self, other):
3fa026621f69 Python 3 preparation: comparisons.
Joseph Myers <jsm@polyomino.org.uk>
parents: 5388
diff changeset
1159 def __le__(self, other):
3fa026621f69 Python 3 preparation: comparisons.
Joseph Myers <jsm@polyomino.org.uk>
parents: 5388
diff changeset
1160 def __eq__(self, other):
3fa026621f69 Python 3 preparation: comparisons.
Joseph Myers <jsm@polyomino.org.uk>
parents: 5388
diff changeset
1161 def __ne__(self, other):
3fa026621f69 Python 3 preparation: comparisons.
Joseph Myers <jsm@polyomino.org.uk>
parents: 5388
diff changeset
1162 def __gt__(self, other):
3fa026621f69 Python 3 preparation: comparisons.
Joseph Myers <jsm@polyomino.org.uk>
parents: 5388
diff changeset
1163 def __ge__(self, other):
2158
a0cfea4e5956 start at templating tests
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
1164 def is_edit_ok(self):
a0cfea4e5956 start at templating tests
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
1165 def is_view_ok(self):
a0cfea4e5956 start at templating tests
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
1166
a0cfea4e5956 start at templating tests
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
1167 class StringHTMLProperty(HTMLProperty):
a0cfea4e5956 start at templating tests
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
1168 def _hyper_repl(self, match):
a0cfea4e5956 start at templating tests
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
1169 def hyperlinked(self):
a0cfea4e5956 start at templating tests
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
1170 def plain(self, escape=0, hyperlink=0):
a0cfea4e5956 start at templating tests
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
1171 def stext(self, escape=0):
a0cfea4e5956 start at templating tests
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
1172 def field(self, size = 30):
a0cfea4e5956 start at templating tests
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
1173 def multiline(self, escape=0, rows=5, cols=40):
a0cfea4e5956 start at templating tests
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
1174 def email(self, escape=1):
a0cfea4e5956 start at templating tests
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
1175
a0cfea4e5956 start at templating tests
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
1176 class PasswordHTMLProperty(HTMLProperty):
a0cfea4e5956 start at templating tests
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
1177 def plain(self):
a0cfea4e5956 start at templating tests
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
1178 def field(self, size = 30):
a0cfea4e5956 start at templating tests
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
1179 def confirm(self, size = 30):
a0cfea4e5956 start at templating tests
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
1180
a0cfea4e5956 start at templating tests
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
1181 class NumberHTMLProperty(HTMLProperty):
a0cfea4e5956 start at templating tests
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
1182 def plain(self):
a0cfea4e5956 start at templating tests
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
1183 def field(self, size = 30):
a0cfea4e5956 start at templating tests
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
1184 def __int__(self):
a0cfea4e5956 start at templating tests
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
1185 def __float__(self):
a0cfea4e5956 start at templating tests
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
1186
5067
e424987d294a Add support for an integer type to join the existing number type.
John Rouillard <rouilj@ieee.org>
parents: 5037
diff changeset
1187 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
1188 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
1189 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
1190 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
1191
2158
a0cfea4e5956 start at templating tests
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
1192 class BooleanHTMLProperty(HTMLProperty):
a0cfea4e5956 start at templating tests
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
1193 def plain(self):
a0cfea4e5956 start at templating tests
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
1194 def field(self):
a0cfea4e5956 start at templating tests
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
1195
a0cfea4e5956 start at templating tests
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
1196 class DateHTMLProperty(HTMLProperty):
a0cfea4e5956 start at templating tests
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
1197 def plain(self):
a0cfea4e5956 start at templating tests
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
1198 def now(self):
a0cfea4e5956 start at templating tests
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
1199 def field(self, size = 30):
a0cfea4e5956 start at templating tests
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
1200 def reldate(self, pretty=1):
a0cfea4e5956 start at templating tests
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
1201 def pretty(self, format=_marker):
a0cfea4e5956 start at templating tests
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
1202 def local(self, offset):
a0cfea4e5956 start at templating tests
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
1203
a0cfea4e5956 start at templating tests
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
1204 class IntervalHTMLProperty(HTMLProperty):
a0cfea4e5956 start at templating tests
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
1205 def plain(self):
a0cfea4e5956 start at templating tests
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
1206 def pretty(self):
a0cfea4e5956 start at templating tests
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
1207 def field(self, size = 30):
a0cfea4e5956 start at templating tests
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
1208
a0cfea4e5956 start at templating tests
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
1209 class LinkHTMLProperty(HTMLProperty):
a0cfea4e5956 start at templating tests
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
1210 def __init__(self, *args, **kw):
a0cfea4e5956 start at templating tests
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
1211 def __getattr__(self, attr):
a0cfea4e5956 start at templating tests
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
1212 def plain(self, escape=0):
a0cfea4e5956 start at templating tests
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
1213 def field(self, showid=0, size=None):
a0cfea4e5956 start at templating tests
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
1214 def menu(self, size=None, height=None, showid=0, additional=[],
a0cfea4e5956 start at templating tests
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
1215
a0cfea4e5956 start at templating tests
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
1216 class MultilinkHTMLProperty(HTMLProperty):
a0cfea4e5956 start at templating tests
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
1217 def __init__(self, *args, **kwargs):
a0cfea4e5956 start at templating tests
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
1218 def __len__(self):
a0cfea4e5956 start at templating tests
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
1219 def __getattr__(self, attr):
a0cfea4e5956 start at templating tests
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
1220 def __getitem__(self, num):
a0cfea4e5956 start at templating tests
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
1221 def __contains__(self, value):
a0cfea4e5956 start at templating tests
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
1222 def reverse(self):
5903
c3728772c594 Add reverse option to hyperdb property wrapper by David Sowder
John Rouillard <rouilj@ieee.org>
parents: 5815
diff changeset
1223 def sorted(self, property, reverse=False):
2158
a0cfea4e5956 start at templating tests
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
1224 def plain(self, escape=0):
a0cfea4e5956 start at templating tests
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
1225 def field(self, size=30, showid=0):
a0cfea4e5956 start at templating tests
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
1226 def menu(self, size=None, height=None, showid=0, additional=[],
a0cfea4e5956 start at templating tests
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
1227
5414
3fa026621f69 Python 3 preparation: comparisons.
Joseph Myers <jsm@polyomino.org.uk>
parents: 5388
diff changeset
1228 def make_key_function(db, classname, sort_on=None):
3fa026621f69 Python 3 preparation: comparisons.
Joseph Myers <jsm@polyomino.org.uk>
parents: 5388
diff changeset
1229 def keyfunc(a):
2158
a0cfea4e5956 start at templating tests
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
1230
a0cfea4e5956 start at templating tests
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
1231 def find_sort_key(linkcl):
a0cfea4e5956 start at templating tests
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
1232
a0cfea4e5956 start at templating tests
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
1233 def handleListCGIValue(value):
a0cfea4e5956 start at templating tests
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
1234
a0cfea4e5956 start at templating tests
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
1235 class ShowDict:
a0cfea4e5956 start at templating tests
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
1236 def __init__(self, columns):
a0cfea4e5956 start at templating tests
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
1237 def __getitem__(self, name):
a0cfea4e5956 start at templating tests
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
1238
a0cfea4e5956 start at templating tests
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
1239 class HTMLRequest(HTMLInputMixin):
a0cfea4e5956 start at templating tests
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
1240 def __init__(self, client):
a0cfea4e5956 start at templating tests
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
1241 def _post_init(self):
a0cfea4e5956 start at templating tests
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
1242 def updateFromURL(self, url):
a0cfea4e5956 start at templating tests
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
1243 def update(self, kwargs):
a0cfea4e5956 start at templating tests
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
1244 def description(self):
a0cfea4e5956 start at templating tests
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
1245 def __str__(self):
a0cfea4e5956 start at templating tests
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
1246 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
1247 def indexargs_url(self, url, args):
a0cfea4e5956 start at templating tests
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
1248 def base_javascript(self):
a0cfea4e5956 start at templating tests
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
1249 def batch(self):
a0cfea4e5956 start at templating tests
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
1250
a0cfea4e5956 start at templating tests
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
1251 class Batch(ZTUtils.Batch):
a0cfea4e5956 start at templating tests
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
1252 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
1253 def __getitem__(self, index):
a0cfea4e5956 start at templating tests
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
1254 def propchanged(self, property):
a0cfea4e5956 start at templating tests
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
1255 def previous(self):
a0cfea4e5956 start at templating tests
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
1256 def next(self):
a0cfea4e5956 start at templating tests
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
1257
5201
a9ace22e0a2f issue 2550690 - Adding anti-csrf measures to roundup following
John Rouillard <rouilj@ieee.org>
parents: 5190
diff changeset
1258 #class TemplatingUtils:
a9ace22e0a2f issue 2550690 - Adding anti-csrf measures to roundup following
John Rouillard <rouilj@ieee.org>
parents: 5190
diff changeset
1259 # def __init__(self, client):
a9ace22e0a2f issue 2550690 - Adding anti-csrf measures to roundup following
John Rouillard <rouilj@ieee.org>
parents: 5190
diff changeset
1260 # 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
1261
a0cfea4e5956 start at templating tests
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
1262 class NoTemplate(Exception):
a0cfea4e5956 start at templating tests
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
1263 class Unauthorised(Exception):
a0cfea4e5956 start at templating tests
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
1264 def __init__(self, action, klass):
a0cfea4e5956 start at templating tests
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
1265 def __str__(self):
a0cfea4e5956 start at templating tests
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
1266
4720
fd72576e07ed API break: rename Templates to Loader for zopetal and chameleon
anatoly techtonik <techtonik@gmail.com>
parents: 4647
diff changeset
1267 class Loader:
2158
a0cfea4e5956 start at templating tests
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
1268 def __init__(self, dir):
a0cfea4e5956 start at templating tests
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
1269 def precompileTemplates(self):
4727
5033c2ad80a7 templating: Rename LoaderBase.get() to LoaderBase.load() for clarity
anatoly techtonik <techtonik@gmail.com>
parents: 4720
diff changeset
1270 def load(self, name, extension=None):
2158
a0cfea4e5956 start at templating tests
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
1271 def __getitem__(self, name):
a0cfea4e5956 start at templating tests
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
1272
a0cfea4e5956 start at templating tests
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
1273 class RoundupPageTemplate(PageTemplate.PageTemplate):
a0cfea4e5956 start at templating tests
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
1274 def getContext(self, client, classname, request):
a0cfea4e5956 start at templating tests
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
1275 def render(self, client, classname, request, **options):
a0cfea4e5956 start at templating tests
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
1276 def __repr__(self):
a0cfea4e5956 start at templating tests
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
1277 '''
a0cfea4e5956 start at templating tests
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
1278
2716
305d346f8f3b disable invalid assertions
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2158
diff changeset
1279 # vim: set et sts=4 sw=4 :

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