| Home | Trees | Indices | Help |
|
|---|
|
|
1 import itertools 2 3 import cherrypy 4 5 from turbogears import widgets, validators, view 6 from turbogears.testutil import catch_validation_errors 7 8 try: 9 set 10 except NameError: # Python 2.3 11 from sets import Set as set 12 16 17 oldrequest = None 18 23 2729 """Helpful error when rendering widgets with no templating engine loaded""" 30 from turbogears import view 31 engines = view.engines 32 view.engines = {} 33 try: 34 widgets.CSSLink("foo")() 35 except Exception, msg: 36 msg = str(msg) 37 else: 38 msg = 'No error' 39 view.engines = engines 40 assert 'templating engine is not yet loaded' in msg4143 """Tests simple labels""" 44 label = widgets.Label("foo") 45 rendered = label.render("The Foo", format='xhtml') 46 assert """<label id="foo" class="label">The Foo</label>""" == rendered4749 """Widgets can have a default value""" 50 textfield = widgets.TextField("name") 51 output = textfield.render(format='xhtml') 52 assert 'value' not in output 53 textfield = widgets.TextField("name", default="ed kowalczyk") 54 output = textfield.render(format='xhtml') 55 assert 'value="ed kowalczyk"' in output5658 """Label text defaults to the capitalized name""" 59 textfield = widgets.TextField("name") 60 assert textfield.label == "Name"6163 """Values can be converted to/from Python values""" 64 textfield = widgets.TextField("age", validator=validators.Int()) 65 output = textfield.render(2, format="xhtml") 66 assert 'value="2"' in output 67 value = "2" 68 value = textfield.validator.to_python(value) 69 assert value == 27072 """Unicode values are rendered correctly""" 73 tf = widgets.TextField("name", validator=validators.UnicodeString()) 74 output = tf.render(u'Pete \u011C', format='xhtml') 75 assert 'value="Pete \xc4\x9c"' in output 76 return # XXX: the folowing causes OTHER(!) tests to fail! 77 try: 78 print tf.render('Pete \xfe\xcd') 79 except ValueError, e: 80 pass 81 else: 82 assert False, "ValueError not raised: non-unicode input not detected"83 #tf2 = widgets.TextField("name", validator=validators.String()) 84 85 # simon: failed inputs are no longer being removed. 86 # 87 #def test_failed_validation(): 88 # "If validation fails, the bad value should be removed from the input" 89 # textfield = widgets.TextField("age", validator=validators.Int()) 90 # values = dict(age="ed") 91 # try: 92 # textfield.validate(values) 93 # except validators.Invalid: 94 # pass 95 # assert not values.has_key("age") 9698 """Widgets can require CSS resources""" 99 css = widgets.CSSLink(mod=widgets.static, name="foo.css") 100 css2 = widgets.CSSLink(mod=widgets.static, name="foo.css") 101 assert css == css2 102 cssset = set() 103 cssset.add(css) 104 cssset.add(css2) 105 assert len(cssset) == 1 106 css3 = widgets.CSSLink(mod=widgets.static, name="bar.css") 107 assert css3 != css2 108 css4 = widgets.CSSSource(src="foo.css") 109 assert css != css4 110 rendered = css.render(format='xhtml') 111 assert 'link' in rendered 112 assert 'href="/tg_widgets/turbogears.widgets/foo.css"' in rendered 113 assert 'type="text/css"' in rendered 114 assert 'rel="stylesheet"' in rendered 115 assert 'media="all"' in rendered 116 rendered = css.render(media="printer", format='xhtml') 117 assert 'media="printer"' in rendered 118 css = widgets.CSSSource("h1 { color: black }") 119 rendered = css.render(format='xhtml') 120 assert 'h1 { color: black }' in rendered121123 """Widgets can require JavaScript resources""" 124 js = widgets.JSLink(mod=widgets.static, name="foo.js") 125 js2 = widgets.JSLink(mod=widgets.static, name="foo.js") 126 assert js2 == js2 127 js2 = widgets.JSLink(mod=widgets.static, name="bar.js") 128 assert js2 != js 129 js2 = widgets.CSSLink(mod=widgets.static, name="foo.js") 130 assert js2 != js 131 js2 = widgets.JSSource(src="foo.js") 132 assert js2 != js 133 rendered = js.render(format='xhtml') 134 expected = '<script src="/tg_widgets/turbogears.widgets/foo.js"' \ 135 ' type="text/javascript"></script>' 136 assert rendered == expected 137 js3 = widgets.JSLink(mod=widgets.static, name="foo.js", 138 defer=False, charset=None) 139 assert js3 == js 140 rendered = js3.render(format='xhtml') 141 assert rendered == expected 142 js3 = widgets.JSLink(mod=widgets.static, name="foo.js", defer=True) 143 assert js3 != js 144 rendered = js3.render(format='html').lower() 145 assert ' defer' in rendered \ 146 and expected == rendered.replace(' defer', '', 1) 147 rendered = js3.render(format='xhtml') 148 assert ' defer="defer"' in rendered \ 149 and expected == rendered.replace(' defer="defer"', '', 1) 150 js3 = widgets.JSLink(mod=widgets.static, name="foo.js", charset='Latin-1') 151 assert js3 != js 152 rendered = js3.render(format='xhtml') 153 assert ' charset="Latin-1"' in rendered \ 154 and expected == rendered.replace(' charset="Latin-1"', '', 1) 155 js3 = widgets.JSSource("alert('hello');") 156 assert js3 != js and js3 != js2 157 rendered = js3.render(format='xhtml') 158 expected = '<script type="text/javascript">alert(\'hello\');</script>' 159 assert rendered == expected 160 js4 = widgets.JSSource("alert('hello');", defer=False) 161 assert js4 == js3 162 rendered = js4.render(format='xhtml') 163 assert rendered == expected 164 js4 = widgets.JSSource("alert('hello');", defer=True) 165 assert js4 != js3 166 rendered = js4.render(format='html').lower() 167 assert ' defer' in rendered \ 168 and expected == rendered.replace(' defer', '', 1) 169 rendered = js4.render(format='xhtml') 170 assert ' defer="defer"' in rendered \ 171 and expected == rendered.replace(' defer="defer"', '', 1)172