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('

HelloWorld

').xml(), + '

HelloWorld

') + # with sanitize, data-attributes are not permitted + self.assertEqual(XML('

HelloWorld

', 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('

HelloWorld

', 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(), '
a
b
') + 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(), + '') - 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(), '
a
b
') - 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(), - '
    1. <>
    ') - - 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(), + '
    1.
    print \'hello world\'
    ') - 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(), + '
    1. <>
    ') + + 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('

    HelloWorld

    ').xml(), - '

    HelloWorld

    ') - # with sanitize, data-attributes are not permitted - self.assertEqual(XML('

    HelloWorld

    ', 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('

    HelloWorld

    ', 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__':