Package turbogears :: Package widgets :: Package tests :: Module test_widgets
[hide private]

Source Code for Module turbogears.widgets.tests.test_widgets

  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   
13 -class Request:
14 input_values = {} 15 validation_errors = {}
16 17 oldrequest = None 18
19 -def setup_module():
20 global oldrequest 21 oldrequest = cherrypy.request 22 cherrypy.request = Request()
23
24 -def teardown_module():
25 global oldrequest 26 cherrypy.request = oldrequest
27
28 -def test_rendering_without_engine():
29 """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 msg
41
42 -def test_label():
43 """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>""" == rendered
47
48 -def test_default_value():
49 """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 output
56
57 -def test_labeltext():
58 """Label text defaults to the capitalized name""" 59 textfield = widgets.TextField("name") 60 assert textfield.label == "Name"
61
62 -def test_validation():
63 """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 == 2
70
71 -def test_unicode_input():
72 """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") 96
97 -def test_widget_css():
98 """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 rendered
121
122 -def test_widget_js():
123 """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
173 -def test_widget_url():
174 """It might be needed to insert an URL somewhere""" 175 url = widgets.URLLink(link='http://www.turbogears.org') 176 rendered = url.render(format='xhtml') 177 expected = """<a href="http://www.turbogears.org"></a>""" 178 assert rendered == expected 179 url =