diff --git a/gluon/html.py b/gluon/html.py
index b6fc7c0c..8c4be662 100644
--- a/gluon/html.py
+++ b/gluon/html.py
@@ -2610,6 +2610,7 @@ def embed64(
return 'data:%s;base64,%s' % (extension, data)
+# TODO: Check if this test() is still relevant now that we have gluon/tests/test_html.py
def test():
"""
Example:
diff --git a/gluon/tests/test_html.py b/gluon/tests/test_html.py
index d426ea9c..1bcd755d 100644
--- a/gluon/tests/test_html.py
+++ b/gluon/tests/test_html.py
@@ -17,33 +17,302 @@ from storage import Storage
class TestBareHelpers(unittest.TestCase):
- def testBR(self):
- self.assertEqual(BR(_a='1', _b='2').xml(), ' ')
+ # TODO: def test_xmlescape(self):
+ # TODO: def test_call_as_list(self):
+ # TODO: def test_truncate_string(self):
+ # TODO: def test_truncate_string(self):
- def testEMBED(self):
- self.assertEqual(EMBED(_a='1', _b='2').xml(),
- ' ')
+ def test_StaticURL(self):
+ # test response.static_version coupled with response.static_version_urls
+ self.assertEqual(URL('a', 'c', 'f'), '/a/c/f')
+ self.assertEqual(URL('a', 'static', 'design.css'), '/a/static/design.css')
+ response = Storage()
+ response.static_version = '1.2.3'
+ from globals import current
+ current.response = response
+ self.assertEqual(URL('a', 'static', 'design.css'), '/a/static/design.css')
+ response.static_version_urls = True
+ self.assertEqual(URL('a', 'static', 'design.css'), '/a/static/_1.2.3/design.css')
- def testHR(self):
- self.assertEqual(HR(_a='1', _b='2').xml(), '
')
+ def testURL(self):
+ self.assertEqual(URL('a', 'c', 'f', args='1'), '/a/c/f/1')
+ self.assertEqual(URL('a', 'c', 'f', args=('1', '2')), '/a/c/f/1/2')
+ self.assertEqual(URL('a', 'c', 'f', args=['1', '2']), '/a/c/f/1/2')
+ self.assertEqual(URL('a', 'c', '/f'), '/a/c/f')
+ self.assertEqual(URL('a', 'c', 'f.json'), '/a/c/f.json')
+ self.assertRaises(SyntaxError, URL, *['a'])
- def testIMG(self):
- self.assertEqual(IMG(_a='1', _b='2').xml(),
- ' ')
+ request = Storage()
+ request.application = 'a'
+ request.controller = 'c'
+ request.function = 'f'
+ request.env = {}
- def testINPUT(self):
- self.assertEqual(INPUT(_a='1', _b='2').xml(),
- ' ')
+ from globals import current # Can't be moved with other import
+ current.request = request
- def testLINK(self):
- self.assertEqual(LINK(_a='1', _b='2').xml(),
- ' ')
+ must_return = '/a/c/f'
+ self.assertEqual(URL(), must_return)
+ self.assertEqual(URL('f'), must_return)
+ self.assertEqual(URL('c', 'f'), must_return)
+ self.assertEqual(URL('a', 'c', 'f'), must_return)
+ self.assertEqual(URL('a', 'c', 'f', extension='json'), '/a/c/f.json')
- def testMETA(self):
+ def weird():
+ pass
+ self.assertEqual(URL('a', 'c', weird), '/a/c/weird')
+ self.assertRaises(SyntaxError, URL, *['a', 'c', 1])
+ # test signature
+ rtn = URL(
+ a='a', c='c', f='f', args=['x', 'y', 'z'],
+ vars={'p': (1, 3), 'q': 2}, anchor='1', hmac_key='key'
+ )
+ self.assertEqual(rtn, '/a/c/f/x/y/z?p=1&p=3&q=2&_signature=a32530f0d0caa80964bb92aad2bedf8a4486a31f#1')
+ # test _signature exclusion
+ rtn = URL(
+ a='a', c='c', f='f', args=['x', 'y', 'z'],
+ vars={'p': (1, 3), 'q': 2, '_signature': 'abc'},
+ anchor='1', hmac_key='key'
+ )
+ self.assertEqual(rtn, '/a/c/f/x/y/z?p=1&p=3&q=2&_signature=a32530f0d0caa80964bb92aad2bedf8a4486a31f#1')
+ # emulate user_signature
+ current.session = Storage(auth=Storage(hmac_key='key'))
+ self.assertEqual(URL(user_signature=True), '/a/c/f?_signature=c4aed53c08cff08f369dbf8b5ba51889430cf2c2')
+ # hash_vars combination
+ rtn = URL('a', 'c', 'f', args=['x', 'y', 'z'], vars={'p': (1, 3), 'q': 2}, hmac_key='key')
+ self.assertEqual(rtn, '/a/c/f/x/y/z?p=1&p=3&q=2&_signature=a32530f0d0caa80964bb92aad2bedf8a4486a31f')
+ rtn = URL('a', 'c', 'f', args=['x', 'y', 'z'], vars={'p': (1, 3), 'q': 2}, hmac_key='key', hash_vars=True)
+ self.assertEqual(rtn, '/a/c/f/x/y/z?p=1&p=3&q=2&_signature=a32530f0d0caa80964bb92aad2bedf8a4486a31f')
+ rtn = URL('a', 'c', 'f', args=['x', 'y', 'z'], vars={'p': (1, 3), 'q': 2}, hmac_key='key', hash_vars=False)
+ self.assertEqual(rtn, '/a/c/f/x/y/z?p=1&p=3&q=2&_signature=0b5a0702039992aad23c82794b8496e5dcd59a5b')
+ rtn = URL('a', 'c', 'f', args=['x', 'y', 'z'], vars={'p': (1, 3), 'q': 2}, hmac_key='key', hash_vars=['p'])
+ self.assertEqual(rtn, '/a/c/f/x/y/z?p=1&p=3&q=2&_signature=5d01b982fd72b39674b012e0288071034e156d7a')
+ rtn = URL('a', 'c', 'f', args=['x', 'y', 'z'], vars={'p': (1, 3), 'q': 2}, hmac_key='key', hash_vars='p')
+ self.assertEqual(rtn, '/a/c/f/x/y/z?p=1&p=3&q=2&_signature=5d01b982fd72b39674b012e0288071034e156d7a')
+ # test CRLF detection
+ self.assertRaises(SyntaxError, URL, *['a\n', 'c', 'f'])
+ self.assertRaises(SyntaxError, URL, *['a\r', 'c', 'f'])
+
+ def test_verifyURL(self):
+ r = Storage()
+ r.application = 'a'
+ r.controller = 'c'
+ r.function = 'f'
+ r.extension = 'html'
+ r.env = {}
+ r.get_vars = Storage()
+ # missing signature as request.get_vars returns False
+ rtn = verifyURL(r, 'key')
+ self.assertEqual(rtn, False)
+ # reverse tests from previous testcase with hash_vars combinations
+ r.args = ['x', 'y', 'z']
+ r.get_vars = Storage(p=(1, 3), q=2)
+ # add signature
+ r.get_vars['_signature'] = 'a32530f0d0caa80964bb92aad2bedf8a4486a31f'
+ rtn = verifyURL(r, 'key')
+ self.assertEqual(rtn, True)
+ r.get_vars['_signature'] = 'a32530f0d0caa80964bb92aad2bedf8a4486a31f'
+ rtn = verifyURL(r, 'key', hash_vars=True)
+ self.assertEqual(rtn, True)
+ r.get_vars['_signature'] = '0b5a0702039992aad23c82794b8496e5dcd59a5b'
+ rtn = verifyURL(r, 'key', hash_vars=False)
+ self.assertEqual(rtn, True)
+ r.get_vars['_signature'] = '5d01b982fd72b39674b012e0288071034e156d7a'
+ rtn = verifyURL(r, 'key', hash_vars=['p'])
+ self.assertEqual(rtn, True)
+ r.get_vars['_signature'] = '5d01b982fd72b39674b012e0288071034e156d7a'
+ rtn = verifyURL(r, 'key', hash_vars='p')
+ self.assertEqual(rtn, True)
+ # without session, user_signature returns always False
+ rtn = verifyURL(r, user_signature=True)
+ self.assertEqual(rtn, False)
+ # same goes if you don't use an hmac_key
+ rtn = verifyURL(r)
+ self.assertEqual(rtn, False)
+ # emulate user signature
+ from globals import current
+ current.session = Storage(auth=Storage(hmac_key='key'))
+ r.get_vars['_signature'] = 'a32530f0d0caa80964bb92aad2bedf8a4486a31f'
+ rtn = verifyURL(r, user_signature=True)
+ self.assertEqual(rtn, True)
+
+ # TODO: def test_XmlComponent(self):
+
+ def test_XML(self):
+ # sanitization process
+ self.assertEqual(XML('').xml(),
+ '')
+ # with sanitize, data-attributes are not permitted
+ self.assertEqual(XML('', sanitize=True).xml(),
+ 'HelloWorld ')
+ # stringify by default
+ self.assertEqual(XML(1.3), '1.3')
+ self.assertEqual(XML(u'è
').xml(), '\xc3\xa8
')
+ # you can calc len on the class, that equals the xml() and the str()
+ self.assertEqual(len(XML('1.3')), len('1.3'))
+ self.assertEqual(len(XML('1.3').xml()), len('1.3'))
+ self.assertEqual(len(str(XML('1.3'))), len('1.3'))
+ # you can concatenate them to strings (check for __add__ and __radd__ methods)
+ self.assertEqual(XML('a') + 'b', 'ab')
+ self.assertEqual(XML('a') + XML('b'), 'ab')
+ self.assertEqual('a' + XML('b'), 'ab')
+ # you can compare them
+ self.assertEqual(XML('a') == XML('a'), True)
+ # beware that the comparison is made on the XML repr
+ self.assertEqual(XML('', sanitize=True),
+ XML('HelloWorld '))
+ # bug check for the sanitizer for closing no-close tags
+ self.assertEqual(XML('Test
Test
', sanitize=True),
+ XML('Test
Test
'))
+
+ # TODO: def test_XML_unpickle(self):
+
+ # TODO: def test_XML_pickle(self):
+
+ def test_DIV(self):
+ # Empty DIV()
+ self.assertEqual(DIV().xml(), '
')
+ self.assertEqual(DIV('<>', _a='1', _b='2').xml(),
+ '<>
')
+ # attributes can be updated like in a dict
+ div = DIV('<>', _a='1')
+ div['_b'] = '2'
+ self.assertEqual(div.xml(),
+ '<>
')
+ # also with a mapping
+ div.update(_b=2, _c=3)
+ self.assertEqual(div.xml(),
+ '<>
')
+ # length of the DIV is the number of components
+ self.assertEqual(len(DIV('a', 'bc')), 2)
+ # also if empty, DIV is True in a boolean evaluation
+ self.assertTrue(True if DIV() else False)
+ # parent and siblings
+ a = DIV(SPAN('a'), DIV('b'))
+ s = a.element('span')
+ d = s.parent
+ d['_class'] = 'abc'
+ self.assertEqual(a.xml(), '')
+ self.assertEqual([el.xml() for el in s.siblings()], ['b
'])
+ self.assertEqual(s.sibling().xml(), 'b
')
+ self.assertEqual(s.siblings('a'), [])
+
+ def test_CAT(self):
+ # Empty CAT()
+ self.assertEqual(CAT().xml(), '')
+ # CAT('')
+ self.assertEqual(CAT('').xml(), '')
+ # CAT(' ')
+ self.assertEqual(CAT(' ').xml(), ' ')
+
+ # TODO: def test_TAG_unpickler(self):
+
+ # TODO: def test_TAG_pickler(self):
+
+ def test_TAG(self):
+ self.assertEqual(TAG.first(TAG.second('test'), _key=3).xml(),
+ 'test ')
+ # ending in underscore "triggers" style
+ self.assertEqual(TAG.first_(TAG.second('test'), _key=3).xml(),
+ ' ')
+
+ def test_HTML(self):
+ self.assertEqual(HTML('<>', _a='1', _b='2').xml(),
+ '\n<>')
+
+ # TODO: def test_XHTML(self):
+
+ def test_HEAD(self):
+ self.assertEqual(HEAD('<>', _a='1', _b='2').xml(),
+ '<>')
+
+ def test_TITLE(self):
+ self.assertEqual(TITLE('<>', _a='1', _b='2').xml(),
+ '<> ')
+
+ def test_META(self):
self.assertEqual(META(_a='1', _b='2').xml(),
' ')
- def testA(self):
+ def test_LINK(self):
+ self.assertEqual(LINK(_a='1', _b='2').xml(),
+ ' ')
+
+ def test_SCRIPT(self):
+ self.assertEqual(SCRIPT('<>', _a='1', _b='2').xml(),
+ '''''')
+ self.assertEqual(SCRIPT('<>').xml(),
+ '''''')
+ self.assertEqual(SCRIPT().xml(), '')
+
+ def test_STYLE(self):
+ self.assertEqual(STYLE('<>', _a='1', _b='2').xml(),
+ '')
+
+ def test_IMG(self):
+ self.assertEqual(IMG(_a='1', _b='2').xml(),
+ ' ')
+
+ def test_SPAN(self):
+ self.assertEqual(SPAN('<>', _a='1', _b='2').xml(),
+ '<> ')
+
+ def test_BODY(self):
+ self.assertEqual(BODY('<>', _a='1', _b='2').xml(),
+ '<>')
+
+ def test_H1(self):
+ self.assertEqual(H1('<>', _a='1', _b='2').xml(),
+ '<> ')
+
+ def test_H2(self):
+ self.assertEqual(H2('<>', _a='1', _b='2').xml(),
+ '<> ')
+
+ def test_H3(self):
+ self.assertEqual(H3('<>', _a='1', _b='2').xml(),
+ '<> ')
+
+ def test_H4(self):
+ self.assertEqual(H4('<>', _a='1', _b='2').xml(),
+ '<> ')
+
+ def test_H5(self):
+ self.assertEqual(H5('<>', _a='1', _b='2').xml(),
+ '<> ')
+
+ def test_H6(self):
+ self.assertEqual(H6('<>', _a='1', _b='2').xml(),
+ '<> ')
+
+ def test_P(self):
+ self.assertEqual(P('<>', _a='1', _b='2').xml(),
+ '<>
')
+ # test cr2br
+ self.assertEqual(P('a\nb').xml(), 'a\nb
')
+ self.assertEqual(P('a\nb', cr2br=True).xml(), 'a b
')
+
+ def test_STRONG(self):
+ self.assertEqual(STRONG('<>', _a='1', _b='2').xml(),
+ '<> ')
+
+ def test_B(self):
+ self.assertEqual(B('<>', _a='1', _b='2').xml(),
+ '<> ')
+
+ def test_BR(self):
+ # empty BR()
+ self.assertEqual(BR().xml(), ' ')
+ self.assertEqual(BR(_a='1', _b='2').xml(), ' ')
+
+ def test_HR(self):
+ self.assertEqual(HR(_a='1', _b='2').xml(), ' ')
+
+ def test_A(self):
self.assertEqual(
A('<>', _a='1', _b='2').xml(),
'<> '
@@ -89,162 +358,105 @@ class TestBareHelpers(unittest.TestCase):
'a '
)
- def testB(self):
- self.assertEqual(B('<>', _a='1', _b='2').xml(),
- '<> ')
+ def test_BUTTON(self):
+ self.assertEqual(BUTTON('test', _type='button').xml(),
+ 'test ')
- def testBODY(self):
- self.assertEqual(BODY('<>', _a='1', _b='2').xml(),
- '<>')
-
- def testCENTER(self):
- self.assertEqual(CENTER('<>', _a='1', _b='2').xml(),
- '<> ')
-
- def testDIV(self):
- self.assertEqual(DIV('<>', _a='1', _b='2').xml(),
- '<>
')
- # attributes can be updated like in a dict
- div = DIV('<>', _a='1')
- div['_b'] = '2'
- self.assertEqual(div.xml(),
- '<>
')
- # also with a mapping
- div.update(_b=2, _c=3)
- self.assertEqual(div.xml(),
- '<>
')
- # length of the DIV is the number of components
- self.assertEqual(len(DIV('a', 'bc')), 2)
- # also if empty, DIV is True in a boolean evaluation
- self.assertTrue(True if DIV() else False)
- # parent and siblings
- a = DIV(SPAN('a'), DIV('b'))
- s = a.element('span')
- d = s.parent
- d['_class'] = 'abc'
- self.assertEqual(a.xml(), '')
- self.assertEqual([el.xml() for el in s.siblings()], ['b
'])
- self.assertEqual(s.sibling().xml(), 'b
')
- self.assertEqual(s.siblings('a'), [])
-
- def testEM(self):
+ def test_EM(self):
self.assertEqual(EM('<>', _a='1', _b='2').xml(),
'<> ')
- def testFIELDSET(self):
- self.assertEqual(FIELDSET('<>', _a='1', _b='2').xml(),
- '<> ')
+ def test_EMBED(self):
+ self.assertEqual(EMBED(_a='1', _b='2').xml(),
+ ' ')
- def testFORM(self):
- self.assertEqual(FORM('<>', _a='1', _b='2').xml(),
- '')
+ def test_TT(self):
+ self.assertEqual(TT('<>', _a='1', _b='2').xml(),
+ '<> ')
- def testH1(self):
- self.assertEqual(H1('<>', _a='1', _b='2').xml(),
- '<> ')
-
- def testH2(self):
- self.assertEqual(H2('<>', _a='1', _b='2').xml(),
- '<> ')
-
- def testH3(self):
- self.assertEqual(H3('<>', _a='1', _b='2').xml(),
- '<> ')
-
- def testH4(self):
- self.assertEqual(H4('<>', _a='1', _b='2').xml(),
- '<> ')
-
- def testH5(self):
- self.assertEqual(H5('<>', _a='1', _b='2').xml(),
- '<> ')
-
- def testH6(self):
- self.assertEqual(H6('<>', _a='1', _b='2').xml(),
- '<> ')
-
- def testHEAD(self):
- self.assertEqual(HEAD('<>', _a='1', _b='2').xml(),
- '<>')
-
- def testHTML(self):
- self.assertEqual(HTML('<>', _a='1', _b='2').xml(),
- '\n<>')
-
- def testIFRAME(self):
- self.assertEqual(IFRAME('<>', _a='1', _b='2').xml(),
- '')
-
- def testLABEL(self):
- self.assertEqual(LABEL('<>', _a='1', _b='2').xml(),
- '<> ')
-
- def testLI(self):
- self.assertEqual(LI('<>', _a='1', _b='2').xml(),
- '<> ')
-
- def testOBJECT(self):
- self.assertEqual(OBJECT('<>', _a='1', _b='2').xml(),
- '<> ')
-
- def testOL(self):
- self.assertEqual(OL('<>', _a='1', _b='2').xml(),
- '<> ')
-
- def testOPTION(self):
- self.assertEqual(OPTION('<>', _a='1', _b='2').xml(),
- '<>' +
- ' ')
-
- def testP(self):
- self.assertEqual(P('<>', _a='1', _b='2').xml(),
- '<>
')
- # test cr2br
- self.assertEqual(P('a\nb').xml(), 'a\nb
')
- self.assertEqual(P('a\nb', cr2br=True).xml(), 'a b
')
-
- def testPRE(self):
+ def test_PRE(self):
self.assertEqual(PRE('<>', _a='1', _b='2').xml(),
'<> ')
- def testSCRIPT(self):
- self.assertEqual(SCRIPT('<>', _a='1', _b='2').xml(),
- '''''')
- self.assertEqual(SCRIPT('<>').xml(),
- '''''')
- self.assertEqual(SCRIPT().xml(), '')
+ def test_CENTER(self):
+ self.assertEqual(CENTER('<>', _a='1', _b='2').xml(),
+ '<> ')
- def testSELECT(self):
- self.assertEqual(SELECT('<>', _a='1', _b='2').xml(),
- '' +
- '<> ')
+ def test_CODE(self):
+ self.assertEqual(CODE("print 'hello world'",
+ language='python',
+ link=None,
+ counter=1,
+ styles={},
+ highlight_line=None).xml(),
+ '')
- def testSPAN(self):
- self.assertEqual(SPAN('<>', _a='1', _b='2').xml(),
- '<> ')
+ def test_LABEL(self):
+ self.assertEqual(LABEL('<>', _a='1', _b='2').xml(),
+ '<> ')
- def testSTYLE(self):
- self.assertEqual(STYLE('<>', _a='1', _b='2').xml(),
- '')
+ def test_LI(self):
+ self.assertEqual(LI('<>', _a='1', _b='2').xml(),
+ '<> ')
- def testTABLE(self):
+ def test_UL(self):
+ self.assertEqual(UL('<>', _a='1', _b='2').xml(),
+ '')
+
+ def test_OL(self):
+ self.assertEqual(OL('<>', _a='1', _b='2').xml(),
+ '<> ')
+
+ def test_TD(self):
+ self.assertEqual(TD('<>', _a='1', _b='2').xml(),
+ '<> ')
+
+ def test_TH(self):
+ self.assertEqual(TH('<>', _a='1', _b='2').xml(),
+ '<> ')
+
+ def test_TR(self):
+ self.assertEqual(TR('<>', _a='1', _b='2').xml(),
+ '<> ')
+
+ def test_THEAD(self):
+ self.assertEqual(THEAD('<>', _a='1', _b='2').xml(),
+ '<> ')
+ # self.assertEqual(THEAD(TRHEAD('<>'), _a='1', _b='2').xml(),
+ # '<> ')
+ self.assertEqual(THEAD(TR('<>'), _a='1', _b='2').xml(),
+ '<> ')
+
+ def test_TBODY(self):
+ self.assertEqual(TBODY('<>', _a='1', _b='2').xml(),
+ '<> ')
+
+ def test_TFOOT(self):
+ self.assertEqual(TFOOT('<>', _a='1', _b='2').xml(),
+ '<> ')
+
+ # TODO: def test_COL(self):
+
+ # TODO: def test_COLGROUP(self):
+
+ def test_TABLE(self):
self.assertEqual(TABLE('<>', _a='1', _b='2').xml(),
'')
- def testTBODY(self):
- self.assertEqual(TBODY('<>', _a='1', _b='2').xml(),
- '<> ')
+ def test_I(self):
+ self.assertEqual(I('<>', _a='1', _b='2').xml(),
+ '<> ')
- def testTD(self):
- self.assertEqual(TD('<>', _a='1', _b='2').xml(),
- '<> ')
+ def test_IFRAME(self):
+ self.assertEqual(IFRAME('<>', _a='1', _b='2').xml(),
+ '')
- def testTEXTAREA(self):
+ def test_INPUT(self):
+ self.assertEqual(INPUT(_a='1', _b='2').xml(),
+ ' ')
+
+ def test_TEXTAREA(self):
self.assertEqual(TEXTAREA('<>', _a='1', _b='2').xml(),
'')
@@ -253,188 +465,54 @@ class TestBareHelpers(unittest.TestCase):
'')
- def testTFOOT(self):
- self.assertEqual(TFOOT('<>', _a='1', _b='2').xml(),
- '<> ')
+ def test_OPTION(self):
+ self.assertEqual(OPTION('<>', _a='1', _b='2').xml(),
+ '<>' +
+ ' ')
- def testTH(self):
- self.assertEqual(TH('<>', _a='1', _b='2').xml(),
- '<> ')
+ def test_OBJECT(self):
+ self.assertEqual(OBJECT('<>', _a='1', _b='2').xml(),
+ '<> ')
- def testTHEAD(self):
- self.assertEqual(THEAD('<>', _a='1', _b='2').xml(),
- '<> ')
- #self.assertEqual(THEAD(TRHEAD('<>'), _a='1', _b='2').xml(),
- # '<> ')
- self.assertEqual(THEAD(TR('<>'), _a='1', _b='2').xml(),
- '<> ')
+ # TODO: def test_OPTGROUP(self):
- def testTITLE(self):
- self.assertEqual(TITLE('<>', _a='1', _b='2').xml(),
- '<> ')
+ def test_SELECT(self):
+ self.assertEqual(SELECT('<>', _a='1', _b='2').xml(),
+ '' +
+ '<> ')
- def testTR(self):
- self.assertEqual(TR('<>', _a='1', _b='2').xml(),
- '<> ')
+ def test_FIELDSET(self):
+ self.assertEqual(FIELDSET('<>', _a='1', _b='2').xml(),
+ '<> ')
- def testTT(self):
- self.assertEqual(TT('<>', _a='1', _b='2').xml(),
- '<> ')
+ # TODO: def test_LEGEND(self):
- def testUL(self):
- self.assertEqual(UL('<>', _a='1', _b='2').xml(),
- '')
+ def test_FORM(self):
+ self.assertEqual(FORM('<>', _a='1', _b='2').xml(),
+ '')
- def testXML(self):
- # sanitization process
- self.assertEqual(XML('').xml(),
- '')
- # with sanitize, data-attributes are not permitted
- self.assertEqual(XML('', sanitize=True).xml(),
- 'HelloWorld ')
- # stringify by default
- self.assertEqual(XML(1.3), '1.3')
- self.assertEqual(XML(u'è
').xml(), '\xc3\xa8
')
- # you can calc len on the class, that equals the xml() and the str()
- self.assertEqual(len(XML('1.3')), len('1.3'))
- self.assertEqual(len(XML('1.3').xml()), len('1.3'))
- self.assertEqual(len(str(XML('1.3'))), len('1.3'))
- # you can concatenate them to strings (check for __add__ and __radd__ methods)
- self.assertEqual(XML('a') + 'b', 'ab')
- self.assertEqual(XML('a') + XML('b'), 'ab')
- self.assertEqual('a' + XML('b'), 'ab')
- # you can compare them
- self.assertEqual(XML('a') == XML('a'), True)
- # beware that the comparison is made on the XML repr
- self.assertEqual(XML('', sanitize=True),
- XML('HelloWorld '))
- #bug check for the sanitizer for closing no-close tags
- self.assertEqual(XML('Test
Test
', sanitize=True),
- XML('Test
Test
'))
+ # TODO: def test_BEAUTIFY(self):
- def testTAG(self):
- self.assertEqual(TAG.first(TAG.second('test'), _key=3).xml(),
- 'test ')
- # ending in underscore "triggers" style
- self.assertEqual(TAG.first_(TAG.second('test'), _key=3).xml(),
- ' ')
+ # TODO: def test_MENU(self):
- def testStaticURL(self):
- # test response.static_version coupled with response.static_version_urls
- self.assertEqual(URL('a', 'c', 'f'), '/a/c/f')
- self.assertEqual(URL('a', 'static', 'design.css'), '/a/static/design.css')
- response = Storage()
- response.static_version = '1.2.3'
- from globals import current
- current.response = response
- self.assertEqual(URL('a', 'static', 'design.css'), '/a/static/design.css')
- response.static_version_urls = True
- self.assertEqual(URL('a', 'static', 'design.css'), '/a/static/_1.2.3/design.css')
+ # TODO: def test_embed64(self):
- def testURL(self):
- self.assertEqual(URL('a', 'c', 'f', args='1'), '/a/c/f/1')
- self.assertEqual(URL('a', 'c', 'f', args=('1', '2')), '/a/c/f/1/2')
- self.assertEqual(URL('a', 'c', 'f', args=['1', '2']), '/a/c/f/1/2')
- self.assertEqual(URL('a', 'c', '/f'), '/a/c/f')
- self.assertEqual(URL('a', 'c', 'f.json'), '/a/c/f.json')
- self.assertRaises(SyntaxError, URL, *['a'])
- request = Storage()
- request.application = 'a'
- request.controller = 'c'
- request.function = 'f'
- request.env = {}
- from globals import current
- current.request = request
- must_return = '/a/c/f'
- self.assertEqual(URL(), must_return)
- self.assertEqual(URL('f'), must_return)
- self.assertEqual(URL('c', 'f'), must_return)
- self.assertEqual(URL('a', 'c', 'f'), must_return)
- self.assertEqual(URL('a', 'c', 'f', extension='json'), '/a/c/f.json')
- def weird():
- pass
- self.assertEqual(URL('a', 'c', weird), '/a/c/weird')
- self.assertRaises(SyntaxError, URL, *['a', 'c', 1])
- # test signature
- rtn = URL(
- a='a', c='c', f='f', args=['x', 'y', 'z'],
- vars={'p': (1, 3), 'q': 2}, anchor='1', hmac_key='key'
- )
- self.assertEqual(rtn, '/a/c/f/x/y/z?p=1&p=3&q=2&_signature=a32530f0d0caa80964bb92aad2bedf8a4486a31f#1')
- # test _signature exclusion
- rtn = URL(
- a='a', c='c', f='f', args=['x', 'y', 'z'],
- vars={'p': (1, 3), 'q': 2, '_signature': 'abc'},
- anchor='1', hmac_key='key'
- )
- self.assertEqual(rtn, '/a/c/f/x/y/z?p=1&p=3&q=2&_signature=a32530f0d0caa80964bb92aad2bedf8a4486a31f#1')
- # emulate user_signature
- current.session = Storage(auth=Storage(hmac_key='key'))
- self.assertEqual(URL(user_signature=True), '/a/c/f?_signature=c4aed53c08cff08f369dbf8b5ba51889430cf2c2')
- # hash_vars combination
- rtn = URL('a','c','f', args=['x', 'y', 'z'], vars={'p' : (1,3), 'q' : 2}, hmac_key='key')
- self.assertEqual(rtn, '/a/c/f/x/y/z?p=1&p=3&q=2&_signature=a32530f0d0caa80964bb92aad2bedf8a4486a31f')
- rtn = URL('a','c','f', args=['x', 'y', 'z'], vars={'p' : (1,3), 'q' : 2}, hmac_key='key', hash_vars=True)
- self.assertEqual(rtn, '/a/c/f/x/y/z?p=1&p=3&q=2&_signature=a32530f0d0caa80964bb92aad2bedf8a4486a31f')
- rtn = URL('a','c','f', args=['x', 'y', 'z'], vars={'p' : (1,3), 'q' : 2}, hmac_key='key', hash_vars=False)
- self.assertEqual(rtn, '/a/c/f/x/y/z?p=1&p=3&q=2&_signature=0b5a0702039992aad23c82794b8496e5dcd59a5b')
- rtn = URL('a','c','f', args=['x', 'y', 'z'], vars={'p' : (1,3), 'q' : 2}, hmac_key='key', hash_vars=['p'])
- self.assertEqual(rtn, '/a/c/f/x/y/z?p=1&p=3&q=2&_signature=5d01b982fd72b39674b012e0288071034e156d7a')
- rtn = URL('a','c','f', args=['x', 'y', 'z'], vars={'p' : (1,3), 'q' : 2}, hmac_key='key', hash_vars='p')
- self.assertEqual(rtn, '/a/c/f/x/y/z?p=1&p=3&q=2&_signature=5d01b982fd72b39674b012e0288071034e156d7a')
- # test CRLF detection
- self.assertRaises(SyntaxError, URL, *['a\n', 'c', 'f'])
- self.assertRaises(SyntaxError, URL, *['a\r', 'c', 'f'])
+ # TODO: def test_web2pyHTMLParser(self):
- def testverifyURL(self):
- r = Storage()
- r.application = 'a'
- r.controller = 'c'
- r.function = 'f'
- r.extension = 'html'
- r.env = {}
- r.get_vars = Storage()
- # missing signature as request.get_vars returns False
- rtn = verifyURL(r, 'key')
- self.assertEqual(rtn, False)
- # reverse tests from previous testcase with hash_vars combinations
- r.args = ['x', 'y', 'z']
- r.get_vars = Storage(p=(1, 3), q=2)
- # add signature
- r.get_vars['_signature'] = 'a32530f0d0caa80964bb92aad2bedf8a4486a31f'
- rtn = verifyURL(r, 'key')
- self.assertEqual(rtn, True)
- r.get_vars['_signature'] = 'a32530f0d0caa80964bb92aad2bedf8a4486a31f'
- rtn = verifyURL(r, 'key', hash_vars=True)
- self.assertEqual(rtn, True)
- r.get_vars['_signature'] = '0b5a0702039992aad23c82794b8496e5dcd59a5b'
- rtn = verifyURL(r, 'key', hash_vars=False)
- self.assertEqual(rtn, True)
- r.get_vars['_signature'] = '5d01b982fd72b39674b012e0288071034e156d7a'
- rtn = verifyURL(r, 'key', hash_vars=['p'])
- self.assertEqual(rtn, True)
- r.get_vars['_signature'] = '5d01b982fd72b39674b012e0288071034e156d7a'
- rtn = verifyURL(r, 'key', hash_vars='p')
- self.assertEqual(rtn, True)
- # without session, user_signature returns always False
- rtn = verifyURL(r, user_signature=True)
- self.assertEqual(rtn, False)
- # same goes if you don't use an hmac_key
- rtn = verifyURL(r)
- self.assertEqual(rtn, False)
- # emulate user signature
- from globals import current
- current.session = Storage(auth=Storage(hmac_key='key'))
- r.get_vars['_signature'] = 'a32530f0d0caa80964bb92aad2bedf8a4486a31f'
- rtn = verifyURL(r, user_signature=True)
- self.assertEqual(rtn, True)
+ # TODO: def test_markdown_serializer(self):
+
+ # TODO: def test_markmin_serializer(self):
+
+ # TODO: def test_MARKMIN(self):
+
+ # TODO: def test_ASSIGNJS(self):
class TestData(unittest.TestCase):
- def testAdata(self):
+ def test_Adata(self):
self.assertEqual(A('<>', data=dict(abc='', cde='standard'), _a='1', _b='2').xml(),
- '<> ')
+ '<> ')
if __name__ == '__main__':