Changeset 888
- Timestamp:
- 05/04/07 13:11:10 (2 years ago)
- Files:
-
- ruport/trunk/test/renderer_test.rb (modified) (22 diffs)
Legend:
- Unmodified
- Added
- Removed
- Modified
- Copied
- Moved
ruport/trunk/test/renderer_test.rb
r868 r888 2 2 require 'ruport' 3 3 4 5 class TrivialRenderer < Ruport::Renderer 4 ########################################################################### 5 # 6 # NOTE: 7 # 8 # As it stands, we haven't found a more clever way to test the formatting 9 # system than to just create a bunch of renderers and basic formatters for 10 # different concepts we're trying to test. Patches and ideas welcome: 11 # 12 # list.rubyreports.org 13 ############################################################################ 14 15 #============================================================================ 16 # These two renderers represent the two styles that can be used when defining 17 # renderers in Ruport. The OldSchoolRenderer approach has largely been 18 # deprecated, but still has uses in edge cases that we need to support. 19 #============================================================================ 20 21 class OldSchoolRenderer < Ruport::Renderer 6 22 7 23 def run … … 15 31 end 16 32 17 class YetAnotherRenderer < Ruport::Renderer33 class VanillaRenderer < Ruport::Renderer 18 34 stage :header,:body,:footer 19 35 end 20 36 37 38 # This formatter implements some junk output so we can be sure 39 # that the hooks are being set up right. Perhaps these could 40 # be replaced by mock objects in the future. 21 41 class DummyText < Ruport::Formatter 22 42 23 renders :text, :for => TrivialRenderer43 renders :text, :for => OldSchoolRenderer 24 44 25 45 def prepare_document … … 44 64 end 45 65 66 67 # This formatter is meant to check out a special case in Ruport's renderer, 68 # in which a layout method is called and yielded to when defined 46 69 class WithLayout < DummyText 47 renders :text_with_layout, :for => YetAnotherRenderer70 renders :text_with_layout, :for => VanillaRenderer 48 71 49 72 def layout … … 55 78 end 56 79 57 class TrivialRenderer2 < TrivialRenderer; end 58 80 81 # This provides a way to check the multi-format hooks for the Renderer 59 82 class MultiPurposeFormatter < Ruport::Formatter 60 83 61 renders [:html,:text], :for => TrivialRenderer284 renders [:html,:text], :for => VanillaRenderer 62 85 63 86 def build_header … … 74 97 end 75 98 76 def build_footer; end77 99 end 78 100 79 # FIXME: come up with a better name80 class RendererWith Helpers < Ruport::Renderer101 # This provides a way to check several hooks that Renderer supports 102 class RendererWithManyHooks < Ruport::Renderer 81 103 82 104 add_format DummyText, :text … … 98 120 end 99 121 122 123 # This checks the evil AutoRunner edgecase 100 124 class RendererWithRunHook < Ruport::Renderer 101 125 … … 115 139 end 116 140 117 class RendererWithHelperModule < TrivialRenderer2 118 119 add_format DummyText, :stub 120 121 module Helpers 122 def say_hello 123 "Hello Dolly" 124 end 125 end 126 end 127 128 class ErbFormatter < Ruport::Formatter 129 130 renders :terb, :for => TrivialRenderer2 131 132 def build_header; end #gross, refactor 133 def build_footer; end #gross, refactor 134 def build_body 135 # demonstrate local binding 136 @foo = "bar" 137 if options.binding 138 output << erb("Binding Override: <%= reverse %>", 139 :binding => options.binding) 140 else 141 output << erb("Default Binding: <%= @foo %>") 142 end 143 end 144 145 end 146 147 class TestFormatterErbHelper < Test::Unit::TestCase 148 def test_self_bound 149 assert_equal "Default Binding: bar", TrivialRenderer2.render_terb 150 end 151 152 def test_custom_bound 153 a = [1,2,3] 154 arr_binding = a.instance_eval { binding } 155 assert_equal "Binding Override: 321", 156 TrivialRenderer2.render_terb(:binding => arr_binding) 157 end 141 class TestRendererWithHelperModule < Test::Unit::TestCase 142 143 class RendererWithHelperModule < VanillaRenderer 144 145 add_format DummyText, :stub 146 147 module Helpers 148 def say_hello 149 "Hello Dolly" 150 end 151 end 152 end 153 154 def test_renderer_helper_module 155 RendererWithHelperModule.render_stub do |r| 156 assert_equal "Hello Dolly", r.formatter.say_hello 157 end 158 end 158 159 end 159 160 … … 161 162 162 163 def test_multi_purpose 163 text = TrivialRenderer2.render_text(:body_text => "foo")164 text = VanillaRenderer.render_text(:body_text => "foo") 164 165 assert_equal "Foo: 10\nfoo", text 165 html = TrivialRenderer2.render_html(:body_text => "bar")166 html = VanillaRenderer.render_html(:body_text => "bar") 166 167 assert_equal "<b>Foo: 10</b>\n<pre>\nbar\n</pre>\n",html 167 168 end … … 194 195 195 196 def test_hash_options_setters 196 a = RendererWith Helpers.render(:text, :subtitle => "foo",197 a = RendererWithManyHooks.render(:text, :subtitle => "foo", 197 198 :subsubtitle => "bar") { |r| 198 199 assert_equal "foo", r.options.subtitle … … 202 203 203 204 def test_data_accessors 204 a = RendererWith Helpers.render(:text, :data => [1,2,4]) { |r|205 a = RendererWithManyHooks.render(:text, :data => [1,2,4]) { |r| 205 206 assert_equal [1,2,4], r.data 206 207 } 207 208 208 b = RendererWith Helpers.render_text(%w[a b c]) { |r|209 b = RendererWithManyHooks.render_text(%w[a b c]) { |r| 209 210 assert_equal %w[a b c], r.data 210 211 } 211 212 212 c = RendererWith Helpers.render_text(%w[a b f],:snapper => :red) { |r|213 c = RendererWithManyHooks.render_text(%w[a b f],:snapper => :red) { |r| 213 214 assert_equal %w[a b f], r.data 214 215 assert_equal :red, r.options.snapper … … 219 220 require "stringio" 220 221 out = StringIO.new 221 a = TrivialRenderer.render(:text) { |r| r.io = out }222 a = OldSchoolRenderer.render(:text) { |r| r.io = out } 222 223 out.rewind 223 224 assert_equal "header\nbody\nfooter\n", out.read … … 226 227 227 228 def test_trivial 228 actual = TrivialRenderer.render(:text)229 actual = OldSchoolRenderer.render(:text) 229 230 assert_equal "header\nbody\nfooter\n", actual 230 231 end … … 232 233 def test_formats 233 234 assert_equal( {}, Ruport::Renderer.formats ) 234 assert_equal( { :text => DummyText }, TrivialRenderer.formats )235 assert_equal( { :text => DummyText },OldSchoolRenderer.formats ) 235 236 end 236 237 237 238 def test_stage_helper 238 assert RendererWith Helpers.stages.include?('body')239 assert RendererWithManyHooks.stages.include?('body') 239 240 end 240 241 241 242 def test_finalize_helper 242 assert_equal :document, RendererWith Helpers.final_stage243 assert_equal :document, RendererWithManyHooks.final_stage 243 244 end 244 245 245 246 def test_prepare_helper 246 assert_equal :document, RendererWith Helpers.first_stage247 assert_equal :document, RendererWithManyHooks.first_stage 247 248 end 248 249 249 250 def test_finalize_again 250 251 assert_raise(Ruport::Renderer::StageAlreadyDefinedError) { 251 RendererWith Helpers.finalize :report252 RendererWithManyHooks.finalize :report 252 253 } 253 254 end … … 255 256 def test_prepare_again 256 257 assert_raise(Ruport::Renderer::StageAlreadyDefinedError) { 257 RendererWith Helpers.prepare :foo258 RendererWithManyHooks.prepare :foo 258 259 } 259 260 end 260 261 261 262 def test_renderer_using_helpers 262 actual = RendererWith Helpers.render(:text)263 actual = RendererWithManyHooks.render(:text) 263 264 assert_equal "pheader\nbody\nfooter\nf", actual 264 265 265 actual = RendererWith Helpers.render_text266 actual = RendererWithManyHooks.render_text 266 267 assert_equal "pheader\nbody\nfooter\nf", actual 267 268 end … … 269 270 def test_setup 270 271 actual = false 271 RendererWith Helpers.render_text { |r|272 RendererWithManyHooks.render_text { |r| 272 273 actual = r.options.apple 273 274 } … … 276 277 277 278 def test_option_helper 278 RendererWith Helpers.render_text do |r|279 RendererWithManyHooks.render_text do |r| 279 280 r.subtitle = "Test Report" 280 281 assert_equal "Test Report", r.options.subtitle … … 283 284 284 285 def test_required_option_helper 285 a = RendererWith Helpers.dup286 a = RendererWithManyHooks.dup 286 287 a.required_option :title 287 288 … … 294 295 295 296 def test_without_required_option 296 297 a = RendererWithHelpers.dup 297 a = RendererWithManyHooks.dup 298 298 a.required_option :title 299 299 … … 302 302 303 303 def test_method_missing 304 actual = TrivialRenderer.render_text304 actual = OldSchoolRenderer.render_text 305 305 assert_equal "header\nbody\nfooter\n", actual 306 306 end 307 307 308 308 def test_formatter 309 #RendererWithHelpers.required_option :title 310 311 assert_raise(RuntimeError) { RendererWithHelpers.render(:text) } 312 end 309 assert_raise(RuntimeError) { RendererWithManyHooks.render(:text) } 310 end 313 311 314 312 315 313 def test_method_missing 316 actual = TrivialRenderer.render_text314 actual = OldSchoolRenderer.render_text 317 315 assert_equal "header\nbody\nfooter\n", actual 318 316 end … … 321 319 # normal instance mode 322 320 323 rend = TrivialRenderer.new321 rend = OldSchoolRenderer.new 324 322 rend.send(:use_formatter,:text) 325 323 … … 328 326 329 327 # render mode 330 TrivialRenderer.render_text do |r|328 OldSchoolRenderer.render_text do |r| 331 329 assert_kind_of Ruport::Formatter, r.formatter 332 330 assert_kind_of DummyText, r.formatter … … 362 360 def test_layout 363 361 assert_equal "---\nheader\nbody\nfooter\n---\n", 364 YetAnotherRenderer.render_text_with_layout 365 end 366 367 def test_renderer_helper_module 368 RendererWithHelperModule.render_stub do |r| 369 assert_equal "Hello Dolly", r.formatter.say_hello 370 end 371 end 372 373 374 375 end 362 VanillaRenderer.render_text_with_layout 363 end 364 365 end 366 367 class ErbFormatter < Ruport::Formatter 368 369 renders :terb, :for => VanillaRenderer 370 371 def build_body 372 # demonstrate local binding 373 @foo = "bar" 374 if options.binding 375 output << erb("Binding Override: <%= reverse %>", 376 :binding => options.binding) 377 else 378 output << erb("Default Binding: <%= @foo %>") 379 end 380 end 381 382 end 383 384 class TestFormatterErbHelper < Test::Unit::TestCase 385 def test_self_bound 386 assert_equal "Default Binding: bar", VanillaRenderer.render_terb 387 end 388 389 def test_custom_bound 390 a = [1,2,3] 391 arr_binding = a.instance_eval { binding } 392 assert_equal "Binding Override: 321", 393 VanillaRenderer.render_terb(:binding => arr_binding) 394 end 395 end 396 397
