diff --git a/gluon/html.py b/gluon/html.py index 24e32e31..ba14d7b2 100644 --- a/gluon/html.py +++ b/gluon/html.py @@ -2831,10 +2831,24 @@ class MARKMIN(XmlComponent): def ASSIGNJS(**kargs): + """ + Example: + ASSIGNJS(var1='1', var2='2') will return the following javascript variables assignations : + + var var1 = "1"; + var var2 = "2"; + + Args: + **kargs: Any keywords arguments and assigned values. + + Returns: + Javascript vars assignations for the key/value passed. + + """ from gluon.serializers import json s = "" for key, value in kargs.items(): - s+='var %s = %s;\n' % (key, json(value)) + s += 'var %s = %s;\n' % (key, json(value)) return XML(s) diff --git a/gluon/tests/test_html.py b/gluon/tests/test_html.py index b5764c7f..4834c1d1 100644 --- a/gluon/tests/test_html.py +++ b/gluon/tests/test_html.py @@ -200,6 +200,12 @@ class TestBareHelpers(unittest.TestCase): self.assertEqual([el.xml() for el in s.siblings()], ['
b
']) self.assertEqual(s.sibling().xml(), '
b
') self.assertEqual(s.siblings('a'), []) + # Corner case for raise coverage of one line + # I think such assert fail cause of python 2.6 + # Work under python 2.7 + # with self.assertRaises(SyntaxError) as cm: + # DIV(BR('<>')).xml() + # self.assertEqual(cm.exception[0], '
tags cannot have components') def test_CAT(self): # Empty CAT() @@ -223,6 +229,18 @@ class TestBareHelpers(unittest.TestCase): def test_HTML(self): self.assertEqual(HTML('<>', _a='1', _b='2').xml(), '\n<>') + self.assertEqual(HTML('<>', _a='1', _b='2', doctype='strict').xml(), + '\n<>') + self.assertEqual(HTML('<>', _a='1', _b='2', doctype='transitional').xml(), + '\n<>') + self.assertEqual(HTML('<>', _a='1', _b='2', doctype='frameset').xml(), + '\n<>') + self.assertEqual(HTML('<>', _a='1', _b='2', doctype='html5').xml(), + '\n<>') + self.assertEqual(HTML('<>', _a='1', _b='2', doctype='').xml(), + '<>') + self.assertEqual(HTML('<>', _a='1', _b='2', doctype='CustomDocType').xml(), + 'CustomDocType\n<>') def test_XHTML(self): # Empty XHTML test @@ -231,6 +249,16 @@ class TestBareHelpers(unittest.TestCase): # Not Empty XHTML test self.assertEqual(XHTML('<>', _a='1', _b='2').xml(), '\n<>') + self.assertEqual(XHTML('<>', _a='1', _b='2', doctype='').xml(), + '\n<>') + self.assertEqual(XHTML('<>', _a='1', _b='2', doctype='strict').xml(), + '\n<>') + self.assertEqual(XHTML('<>', _a='1', _b='2', doctype='transitional').xml(), + '\n<>') + self.assertEqual(XHTML('<>', _a='1', _b='2', doctype='frameset').xml(), + '\n<>') + self.assertEqual(XHTML('<>', _a='1', _b='2', doctype='xmlns').xml(), + 'xmlns\n<>') def test_HEAD(self): self.assertEqual(HEAD('<>', _a='1', _b='2').xml(), @@ -452,6 +480,7 @@ class TestBareHelpers(unittest.TestCase): self.assertEqual(COL(_span='2').xml(), '') # Commented for now not so sure how to make it pass properly was passing locally # I think this test is interesting and add value + # This fail relate to python 2.6 limitation I think # Failing COL test # with self.assertRaises(SyntaxError) as cm: # COL('<>').xml() @@ -488,6 +517,8 @@ class TestBareHelpers(unittest.TestCase): self.assertEqual(TEXTAREA('<>', _a='1', _b='2', _rows=5, _cols=20).xml(), '') + self.assertEqual(TEXTAREA('<>', value='bla bla bla...', _rows=10, _cols=40).xml(), + '') def test_OPTION(self): self.assertEqual(OPTION('<>', _a='1', _b='2').xml(), @@ -505,11 +536,35 @@ class TestBareHelpers(unittest.TestCase): # Not Empty OPTGROUP test self.assertEqual(OPTGROUP('<>', _a='1', _b='2').xml(), '') + # With an OPTION + self.assertEqual(OPTGROUP(OPTION('Option 1', _value='1'), _label='Group 1').xml(), + '') def test_SELECT(self): self.assertEqual(SELECT('<>', _a='1', _b='2').xml(), '') + self.assertEqual(SELECT(OPTION('option 1', _value='1'), + OPTION('option 2', _value='2')).xml(), + '') + self.assertEqual(SELECT(OPTION('option 1', _value='1', _selected='selected'), + OPTION('option 2', _value='2'), + _multiple='multiple').xml(), + '') + # OPTGROUP + self.assertEqual(SELECT(OPTGROUP(OPTION('option 1', _value='1'), + OPTION('option 2', _value='2'), + _label='Group 1',)).xml(), + '') + # List + self.assertEqual(SELECT([1, 2, 3, 4, 5]).xml(), + '') + # Tuple + self.assertEqual(SELECT((1, 2, 3, 4, 5)).xml(), + '') + # String value + self.assertEqual(SELECT('Option 1', 'Option 2').xml(), + '') def test_FIELDSET(self): self.assertEqual(FIELDSET('<>', _a='1', _b='2').xml(), @@ -523,9 +578,13 @@ class TestBareHelpers(unittest.TestCase): self.assertEqual(FORM('<>', _a='1', _b='2').xml(), '
<>
') - # TODO: def test_BEAUTIFY(self): + def test_BEAUTIFY(self): + self.assertEqual(BEAUTIFY(['a', 'b', {'hello': 'world'}]).xml(), + '
a
b
hello:
world
') - # TODO: def test_MENU(self): + def test_MENU(self): + self.assertEqual(MENU([('Home', False, '/welcome/default/index', [])]).xml(), + '') # TODO: def test_embed64(self): @@ -535,9 +594,24 @@ class TestBareHelpers(unittest.TestCase): # TODO: def test_markmin_serializer(self): - # TODO: def test_MARKMIN(self): + def test_MARKMIN(self): + # This test pass with python 2.7 but expected to fail under 2.6 + # with self.assertRaises(TypeError) as cm: + # MARKMIN().xml() + # self.assertEqual(cm.exception[0], '__init__() takes at least 2 arguments (1 given)') + self.assertEqual(MARKMIN('').xml(), '') + self.assertEqual(MARKMIN('<>').xml(), + '

<>

') + self.assertEqual(MARKMIN("``hello_world = 'Hello World!'``:python").xml(), + 'hello_world = \'Hello World!\'') - # TODO: def test_ASSIGNJS(self): + def test_ASSIGNJS(self): + # empty assignation + self.assertEqual(ASSIGNJS().xml(), '') + # text assignation + self.assertEqual(ASSIGNJS(var1='1', var2='2').xml(), 'var var1 = "1";\nvar var2 = "2";\n') + # int assignation + self.assertEqual(ASSIGNJS(var1=1, var2=2).xml(), 'var var1 = 1;\nvar var2 = 2;\n') class TestData(unittest.TestCase):