thinreports 0.6.0.pre3 → 0.7.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (158) hide show
  1. data/README.rdoc +37 -32
  2. data/doc/yardoc_templates/default/layout/html/footer.erb +1 -1
  3. data/lib/thinreports.rb +2 -1
  4. data/lib/thinreports/config.rb +21 -0
  5. data/lib/thinreports/core/errors.rb +14 -1
  6. data/lib/thinreports/core/format/builder.rb +6 -1
  7. data/lib/thinreports/core/page.rb +6 -6
  8. data/lib/thinreports/core/shape.rb +8 -9
  9. data/lib/thinreports/core/shape/base/internal.rb +6 -12
  10. data/lib/thinreports/core/shape/basic.rb +3 -0
  11. data/lib/thinreports/core/shape/basic/block_format.rb +12 -0
  12. data/lib/thinreports/core/shape/basic/block_interface.rb +25 -0
  13. data/lib/thinreports/core/shape/basic/block_internal.rb +33 -0
  14. data/lib/thinreports/core/shape/basic/interface.rb +37 -11
  15. data/lib/thinreports/core/shape/basic/internal.rb +3 -12
  16. data/lib/thinreports/core/shape/image_block.rb +15 -0
  17. data/lib/thinreports/core/shape/image_block/format.rb +13 -0
  18. data/lib/thinreports/core/shape/image_block/interface.rb +19 -0
  19. data/lib/thinreports/core/shape/image_block/internal.rb +16 -0
  20. data/lib/thinreports/core/shape/list/events.rb +19 -2
  21. data/lib/thinreports/core/shape/list/manager.rb +17 -4
  22. data/lib/thinreports/core/shape/list/page.rb +2 -2
  23. data/lib/thinreports/core/shape/list/page_state.rb +4 -0
  24. data/lib/thinreports/core/shape/list/section_internal.rb +4 -0
  25. data/lib/thinreports/core/shape/manager/format.rb +1 -1
  26. data/lib/thinreports/core/shape/manager/internal.rb +24 -11
  27. data/lib/thinreports/core/shape/manager/target.rb +2 -2
  28. data/lib/thinreports/core/shape/style.rb +15 -0
  29. data/lib/thinreports/core/shape/style/base.rb +149 -0
  30. data/lib/thinreports/core/shape/style/basic.rb +17 -0
  31. data/lib/thinreports/core/shape/style/graphic.rb +60 -0
  32. data/lib/thinreports/core/shape/style/text.rb +138 -0
  33. data/lib/thinreports/core/shape/text/internal.rb +4 -0
  34. data/lib/thinreports/core/shape/text_block.rb +16 -0
  35. data/lib/thinreports/core/shape/{tblock → text_block}/format.rb +3 -3
  36. data/lib/thinreports/core/shape/{tblock → text_block}/formatter.rb +7 -7
  37. data/lib/thinreports/core/shape/{tblock → text_block}/formatter/basic.rb +1 -1
  38. data/lib/thinreports/core/shape/{tblock → text_block}/formatter/datetime.rb +1 -1
  39. data/lib/thinreports/core/shape/{tblock → text_block}/formatter/number.rb +1 -1
  40. data/lib/thinreports/core/shape/{tblock → text_block}/formatter/padding.rb +10 -8
  41. data/lib/thinreports/core/shape/{tblock → text_block}/interface.rb +2 -21
  42. data/lib/thinreports/core/shape/{tblock → text_block}/internal.rb +16 -10
  43. data/lib/thinreports/core/utils.rb +0 -8
  44. data/lib/thinreports/generator.rb +2 -2
  45. data/lib/thinreports/generator/configuration.rb +30 -0
  46. data/lib/thinreports/generator/pdf.rb +13 -10
  47. data/lib/thinreports/generator/pdf/configuration.rb +28 -0
  48. data/lib/thinreports/generator/pdf/document.rb +16 -56
  49. data/lib/thinreports/generator/pdf/document/draw_shape.rb +35 -17
  50. data/lib/thinreports/generator/pdf/document/font.rb +25 -9
  51. data/lib/thinreports/generator/pdf/document/graphics.rb +1 -1
  52. data/lib/thinreports/generator/pdf/document/graphics/attributes.rb +18 -4
  53. data/lib/thinreports/generator/pdf/document/graphics/basic.rb +1 -1
  54. data/lib/thinreports/generator/pdf/document/graphics/image.rb +18 -1
  55. data/lib/thinreports/generator/pdf/document/graphics/text.rb +29 -6
  56. data/lib/thinreports/generator/pdf/document/page.rb +70 -0
  57. data/lib/thinreports/generator/pdf/document/parse_color.rb +1 -1
  58. data/lib/thinreports/generator/pdf/document/parse_svg.rb +1 -1
  59. data/lib/thinreports/generator/pdf/drawer.rb +1 -1
  60. data/lib/thinreports/generator/pdf/drawer/base.rb +5 -7
  61. data/lib/thinreports/generator/pdf/drawer/list.rb +4 -4
  62. data/lib/thinreports/generator/pdf/drawer/list_section.rb +8 -3
  63. data/lib/thinreports/generator/pdf/drawer/page.rb +10 -3
  64. data/lib/thinreports/generator/pdf/prawn_ext.rb +16 -21
  65. data/lib/thinreports/layout/format.rb +2 -2
  66. data/lib/thinreports/layout/version.rb +2 -2
  67. data/lib/thinreports/report/base.rb +68 -31
  68. data/tasks/test.rake +48 -4
  69. data/test/benchmark/basic_estimate.tlf +1 -0
  70. data/test/benchmark/bench_basic_estimate.rb +95 -0
  71. data/test/case/character_spacing/character_spacing.rb +7 -0
  72. data/test/case/character_spacing/character_spacing.tlf +1 -0
  73. data/test/case/dynamic_image/dynamic_image.rb +41 -0
  74. data/test/case/dynamic_image/dynamic_image.tlf +1 -0
  75. data/test/case/dynamic_image/img200x100.png +0 -0
  76. data/test/case/dynamic_image/img50x50.png +0 -0
  77. data/test/case/dynamic_style/dynamic_style.rb +154 -0
  78. data/test/case/dynamic_style/dynamic_style.tlf +1 -0
  79. data/test/case/dynamic_style/dynamic_style_in_list.tlf +1 -0
  80. data/test/case/dynamic_style/image.png +0 -0
  81. data/test/case/eudc/eudc.rb +20 -0
  82. data/test/case/eudc/eudc.tlf +1 -0
  83. data/test/case/eudc/eudc.ttf +0 -0
  84. data/test/case/helper.rb +27 -0
  85. data/test/case/hidden_shapes/hidden_shapes.rb +13 -0
  86. data/test/case/hidden_shapes/hidden_shapes.tlf +1 -0
  87. data/test/case/list_events/list_events.rb +32 -0
  88. data/test/case/list_events/list_events.tlf +1 -0
  89. data/test/case/list_header_inheriting/list_header_inheriting.rb +19 -0
  90. data/test/case/list_header_inheriting/list_header_inheriting.tlf +1 -0
  91. data/test/case/list_manual_generation/list_manual_generation.rb +24 -0
  92. data/test/case/list_manual_generation/list_manual_generation.tlf +1 -0
  93. data/test/case/single_line_tblock/single_line_tblock.rb +15 -0
  94. data/test/case/single_line_tblock/single_line_tblock.tlf +1 -0
  95. data/test/case/tblock_styles/tblock_styles.rb +27 -0
  96. data/test/case/tblock_styles/tblock_styles.tlf +1 -0
  97. data/test/case/text_align/text_align.rb +9 -0
  98. data/test/case/text_align/text_align.tlf +1 -0
  99. data/test/unit/core/shape/base/test_internal.rb +65 -85
  100. data/test/unit/core/shape/basic/test_basic_format.rb +30 -0
  101. data/test/unit/core/shape/basic/test_basic_interface.rb +27 -0
  102. data/test/unit/core/shape/basic/test_basic_internal.rb +55 -0
  103. data/test/unit/core/shape/basic/test_interface.rb +84 -36
  104. data/test/unit/core/shape/basic/test_internal.rb +32 -24
  105. data/test/unit/core/shape/image_block/test_format.rb +58 -0
  106. data/test/unit/core/shape/image_block/test_interface.rb +23 -0
  107. data/test/unit/core/shape/image_block/test_internal.rb +28 -0
  108. data/test/unit/core/shape/list/test_events.rb +19 -11
  109. data/test/unit/core/shape/list/test_manager.rb +112 -0
  110. data/test/unit/core/shape/list/test_page.rb +57 -0
  111. data/test/unit/core/shape/list/test_section_format.rb +1 -1
  112. data/test/unit/core/shape/list/test_section_interface.rb +37 -30
  113. data/test/unit/core/shape/list/test_section_internal.rb +39 -14
  114. data/test/unit/core/shape/manager/test_format.rb +12 -18
  115. data/test/unit/core/shape/manager/test_internal.rb +127 -93
  116. data/test/unit/core/shape/manager/test_target.rb +63 -56
  117. data/test/unit/core/shape/styles/test_base.rb +219 -0
  118. data/test/unit/core/shape/styles/test_basic.rb +24 -0
  119. data/test/unit/core/shape/styles/test_graphic.rb +69 -0
  120. data/test/unit/core/shape/styles/test_text.rb +318 -0
  121. data/test/unit/core/shape/{tblock → text_block}/formatter/test_basic.rb +2 -2
  122. data/test/unit/core/shape/{tblock → text_block}/formatter/test_datetime.rb +2 -2
  123. data/test/unit/core/shape/{tblock → text_block}/formatter/test_number.rb +2 -2
  124. data/test/unit/core/shape/{tblock → text_block}/formatter/test_padding.rb +11 -6
  125. data/test/unit/core/shape/text_block/test_format.rb +160 -0
  126. data/test/unit/core/shape/{tblock → text_block}/test_formatter.rb +2 -2
  127. data/test/unit/core/shape/text_block/test_interface.rb +46 -0
  128. data/test/unit/core/shape/text_block/test_internal.rb +128 -0
  129. data/test/unit/core/test_shape.rb +31 -6
  130. data/test/unit/data/basic_layout1.tlf +1 -0
  131. data/test/unit/data/basic_layout2.tlf +1 -0
  132. data/test/unit/data/basic_list_layout.tlf +1 -0
  133. data/test/unit/generator/pdf/document/graphics/test_attributes.rb +81 -52
  134. data/test/unit/generator/pdf/document/graphics/test_text.rb +159 -0
  135. data/test/unit/generator/pdf/document/test_font.rb +21 -6
  136. data/test/unit/generator/pdf/document/test_graphics.rb +2 -2
  137. data/test/unit/generator/pdf/document/test_page.rb +95 -0
  138. data/test/unit/generator/pdf/document/test_parse_color.rb +2 -2
  139. data/test/unit/generator/pdf/test_configuration.rb +24 -0
  140. data/test/unit/generator/pdf/test_document.rb +28 -0
  141. data/test/unit/generator/test_configuration.rb +25 -0
  142. data/test/unit/generator/test_pdf.rb +19 -0
  143. data/test/unit/helper.rb +18 -0
  144. data/test/unit/layout/test_format.rb +24 -7
  145. data/test/unit/layout/test_version.rb +61 -27
  146. data/test/unit/report/test_base.rb +185 -89
  147. data/test/unit/test_config.rb +22 -0
  148. data/test/unit/test_report.rb +4 -4
  149. metadata +94 -43
  150. data/lib/thinreports/core/shape/tblock.rb +0 -16
  151. data/lib/thinreports/generator/pxd.rb +0 -75
  152. data/lib/thinreports/generator/pxd/helper.rb +0 -33
  153. data/lib/thinreports/generator/pxd/list_renderer.rb +0 -58
  154. data/lib/thinreports/generator/pxd/page_renderer.rb +0 -75
  155. data/tasks/clean.rake +0 -6
  156. data/test/unit/core/shape/tblock/test_format.rb +0 -125
  157. data/test/unit/core/shape/tblock/test_interface.rb +0 -40
  158. data/test/unit/core/shape/tblock/test_internal.rb +0 -139
@@ -5,38 +5,46 @@ require 'test/unit/helper'
5
5
  class ThinReports::Core::Shape::Basic::TestInternal < MiniTest::Unit::TestCase
6
6
  include ThinReports::TestHelpers
7
7
 
8
+ # Alias
8
9
  Basic = ThinReports::Core::Shape::Basic
9
10
 
10
- def setup
11
- format = flexmock('format')
12
- format.should_receive(:display? => true)
13
-
14
- @internal = Basic::Internal.new(flexmock('parent'), format)
11
+ def create_internal(format_config = {})
12
+ Basic::Internal.new(flexmock('parent'),
13
+ Basic::Format.new(format_config))
15
14
  end
16
15
 
17
- def test_visible
18
- assert_equal @internal.visible?, true
19
-
20
- @internal.visible(false)
21
-
22
- assert_equal @internal.visible?, false
23
- assert_equal @internal.format.display?, true
16
+ def test_id_should_operate_as_delegator_of_format
17
+ basic = create_internal('id' => 'basic-id')
18
+ assert_same basic.id, basic.format.id
24
19
  end
25
20
 
26
- def test_svg_attr
27
- assert_empty @internal.attrs
28
-
29
- @internal.svg_attr(:fill, 'red')
30
- @internal.svg_attr(:stroke, 'black')
31
-
32
- assert_equal @internal.attrs, {'fill' => 'red', 'stroke' => 'black'}
21
+ def test_svg_tag_should_operate_as_delegator_of_format
22
+ basic = create_internal('svg' => {'tag' => 'rect'})
23
+ assert_same basic.svg_tag, basic.format.svg_tag
24
+ end
25
+
26
+ def test_type_should_operate_as_delegator_of_format
27
+ basic = create_internal('type' => 's-ellipse')
28
+ assert_same basic.type, basic.format.type
29
+ end
30
+
31
+ def test_style_should_return_instance_of_StyleGraphic
32
+ assert_instance_of ThinReports::Core::Shape::Style::Graphic,
33
+ create_internal.style
33
34
  end
34
35
 
35
- def test_type_of?
36
- flexmock(@internal.format).should_receive(:type => 's-rect')
36
+ def test_type_of_asker_should_already_return_true_when_the_specified_type_is_basic
37
+ assert_equal create_internal.type_of?(:basic), true
38
+ end
39
+
40
+ def test_type_of_asker_should_return_true_when_the_specified_type_equal_self_type_name
41
+ result = []
42
+
43
+ result << create_internal('type' => 's-rect').type_of?(:rect)
44
+ result << create_internal('type' => 's-ellipse').type_of?(:ellipse)
45
+ result << create_internal('type' => 's-line').type_of?(:line)
46
+ result << create_internal('type' => 's-image').type_of?(:image)
37
47
 
38
- assert_equal @internal.type_of?(:basic), true
39
- assert_equal @internal.type_of?(:rect), true
40
- assert_equal @internal.type_of?(:tblock), false
48
+ assert_equal result.all?, true
41
49
  end
42
50
  end
@@ -0,0 +1,58 @@
1
+ # coding: utf-8
2
+
3
+ require 'test/unit/helper'
4
+
5
+ class ThinReports::Core::Shape::ImageBlock::TestFormat < MiniTest::Unit::TestCase
6
+ include ThinReports::TestHelpers
7
+
8
+ TEST_IMAGE_BLOCK_FORMAT = {
9
+ "type" => "s-iblock",
10
+ "id" => "image",
11
+ "display" => "true",
12
+ "box" => {
13
+ "x" => 100.0,
14
+ "y" => 100.0,
15
+ "width" => 100.0,
16
+ "height" => 100.0
17
+ },
18
+ "position-x" => "left",
19
+ "position-y" => "top",
20
+ "svg" => {
21
+ "tag" => "image",
22
+ "attrs" => {
23
+ "x" => 100.0,
24
+ "y" => 100.0,
25
+ "width" => 100.0,
26
+ "height" => 100.0
27
+ }
28
+ }
29
+ }
30
+
31
+ def test_build
32
+ build_format
33
+ rescue => e
34
+ flunk exception_details(e, 'Building failed.')
35
+ end
36
+
37
+ def test_box_reader_via_TEST_IMAGE_BLOCK_FORMAT
38
+ assert_equal format(TEST_IMAGE_BLOCK_FORMAT).box.values_at('x', 'y', 'width', 'height'),
39
+ [100.0, 100.0, 100.0, 100.0]
40
+ end
41
+
42
+ def test_position_x_reader_via_TEST_IMAGE_BLOCK_FORMAT
43
+ assert_equal format(TEST_IMAGE_BLOCK_FORMAT).position_x, 'left'
44
+ end
45
+
46
+ def test_position_y_reader_via_TEST_IMAGE_BLOCK_FORMAT
47
+ assert_equal format(TEST_IMAGE_BLOCK_FORMAT).position_y, 'top'
48
+ end
49
+
50
+ def build_format
51
+ ThinReports::Core::Shape::ImageBlock::Format.build(TEST_IMAGE_BLOCK_FORMAT)
52
+ end
53
+
54
+ def format(data)
55
+ ThinReports::Core::Shape::ImageBlock::Format.new(data)
56
+ end
57
+
58
+ end
@@ -0,0 +1,23 @@
1
+ # coding: utf-8
2
+
3
+ require 'test/unit/helper'
4
+
5
+ class ThinReports::Core::Shape::ImageBlock::TestInterface < MiniTest::Unit::TestCase
6
+ include ThinReports::TestHelpers
7
+
8
+ ImageBlock = ThinReports::Core::Shape::ImageBlock
9
+
10
+ def setup
11
+ @interface = ImageBlock::Interface.new(flexmock('parent'),
12
+ ImageBlock::Format.new({}))
13
+ end
14
+
15
+ def test_src_should_work_the_same_as_value_method
16
+ @interface.src('/path/to/image.png')
17
+ assert_equal @interface.src, '/path/to/image.png'
18
+ end
19
+
20
+ def test_properly_initialized_internal_property
21
+ assert_instance_of ImageBlock::Internal, @interface.internal
22
+ end
23
+ end
@@ -0,0 +1,28 @@
1
+ # coding: utf-8
2
+
3
+ require 'test/unit/helper'
4
+
5
+ class ThinReports::Core::Shape::ImageBlock::TestInternal < MiniTest::Unit::TestCase
6
+ include ThinReports::TestHelpers
7
+
8
+ ImageBlock = ThinReports::Core::Shape::ImageBlock
9
+
10
+ def test_src_should_return_the_same_value_as_value_method
11
+ internal = init_internal
12
+ internal.write_value('/path/to/image.png')
13
+
14
+ assert_same internal.src, internal.read_value
15
+ end
16
+
17
+ def test_type_of_asker_should_return_true_when_iblock_value_is_given
18
+ assert_equal init_internal.type_of?(:iblock), true
19
+ end
20
+
21
+ def test_type_of_asker_should_return_true_when_block_value_is_given
22
+ assert_equal init_internal.type_of?(:block), true
23
+ end
24
+
25
+ def init_internal
26
+ ImageBlock::Internal.new(flexmock('parent'), ImageBlock::Format.new({}))
27
+ end
28
+ end
@@ -11,18 +11,26 @@ class ThinReports::Core::Shape::List::TestEvents < MiniTest::Unit::TestCase
11
11
  @events = List::Events.new
12
12
  end
13
13
 
14
- def test_allowed_event_types
15
- assert_equal @events.instance_variable_get(:@types),
16
- [:page_footer_insert, :footer_insert]
14
+ def test_page_footer_insert_event_should_be_able_to_be_used
15
+ @events.send(:verify_event_type, :page_footer_insert)
16
+ rescue ThinReports::Errors::UnknownEventType
17
+ flunk ':page_footer_insert cannot be used.'
17
18
  end
18
19
 
19
- def test_SectionEvent
20
- e = List::Events::SectionEvent.new(:section_event,
21
- :target,
22
- :store)
23
- assert_equal e.type, :section_event
24
- assert_equal e.target, :target
25
- assert_equal e.section, :target
26
- assert_equal e.store, :store
20
+ def test_footer_insert_event_should_be_able_to_be_used
21
+ @events.send(:verify_event_type, :footer_insert)
22
+ rescue ThinReports::Errors::UnknownEventType
23
+ flunk ':footer_insert cannot be used.'
24
+ end
25
+
26
+ def test_page_finalize_event_should_be_able_to_be_used
27
+ @events.send(:verify_event_type, :page_finalize)
28
+ rescue ThinReports::Errors::UnknownEventType
29
+ flunk ':page_finalize cannot be used.'
30
+ end
31
+
32
+ def test_list_property_of_PageEvent_should_equal_to_target_property
33
+ ev = List::Events::PageEvent.new(:page_finalize, 'list', 'page')
34
+ assert_same ev.list, ev.target
27
35
  end
28
36
  end
@@ -0,0 +1,112 @@
1
+ # coding: utf-8
2
+
3
+ require 'test/unit/helper'
4
+
5
+ class ThinReports::Core::Shape::List::TestManager < MiniTest::Unit::TestCase
6
+ include ThinReports::TestHelpers
7
+
8
+ # Alias
9
+ List = ThinReports::Core::Shape::List
10
+
11
+ def create_report(&block)
12
+ create_basic_report('basic_list_layout.tlf', &block)
13
+ end
14
+
15
+ def list_manager
16
+ report = create_report {|r| r.start_new_page }
17
+ report.page.list(:list).manager
18
+ end
19
+
20
+ def test_config_should_return_the_instance_of_ListConfiguration
21
+ assert_same list_manager.config.class, List::Configuration
22
+ end
23
+
24
+ def test_current_page_should_return_the_instance_of_ListPage
25
+ assert_instance_of List::Page, list_manager.current_page
26
+ end
27
+
28
+ def test_current_page_state_should_return_the_instance_of_ListPageState
29
+ assert_instance_of List::PageState, list_manager.current_page_state
30
+ end
31
+
32
+ def test_switch_current_should_replace_own_current_page_property_by_the_given_page
33
+ report = create_report {|r| r.start_new_page }
34
+ list = report.page.list(:list)
35
+ new_page = List::Page.new(report.page, list.internal.format)
36
+
37
+ list.manager.switch_current!(new_page)
38
+
39
+ assert_same list.manager.current_page, new_page
40
+ end
41
+
42
+ def test_switch_current_should_replace_own_current_page_state_property_by_internal_property_of_the_given_page
43
+ report = create_report {|r| r.start_new_page }
44
+ list = report.page.list(:list)
45
+ new_page = List::Page.new(report.page, list.internal.format)
46
+
47
+ list.manager.switch_current!(new_page)
48
+
49
+ assert_same list.manager.current_page_state, new_page.internal
50
+ end
51
+
52
+ def test_switch_current_should_return_the_self
53
+ report = create_report {|r| r.start_new_page }
54
+ list = report.page.list(:list)
55
+ new_page = List::Page.new(report.page, list.internal.format)
56
+
57
+ assert_same list.manager.switch_current!(new_page), list.manager
58
+ end
59
+
60
+ def test_finalize_page_should_dispatch_page_finalize_event
61
+ flag = false
62
+
63
+ report = create_report do |r|
64
+ r.layout.config.list(:list) do
65
+ events.on :page_finalize do |e|
66
+ flag = true
67
+ end
68
+ end
69
+ end
70
+
71
+ report.start_new_page do |page|
72
+ page.list(:list).manager.finalize_page
73
+ end
74
+
75
+ assert flag, 'The :page_finalize event was not dispatched.'
76
+ end
77
+
78
+ def test_page_property_which_dispatcher_of_finalize_page_event_should_return_the_current_page
79
+ page_used_in_event = nil
80
+
81
+ report = create_report do |r|
82
+ r.layout.config.list(:list) do
83
+ events.on :page_finalize do |e|
84
+ page_used_in_event = e.page
85
+ end
86
+ end
87
+ end
88
+
89
+ current_page = report.start_new_page
90
+ current_page.list(:list).manager.finalize_page
91
+
92
+ assert_same page_used_in_event, current_page
93
+ end
94
+
95
+ def test_list_property_which_dispatcher_of_finalize_event_should_return_the_current_page_of_list
96
+ list_used_in_event = nil
97
+
98
+ report = create_report do |r|
99
+ r.layout.config.list(:list) do
100
+ events.on :page_finalize do |e|
101
+ list_used_in_event = e.list
102
+ end
103
+ end
104
+ end
105
+
106
+ report.start_new_page
107
+ current_list = report.page.list(:list)
108
+ current_list.manager.finalize_page
109
+
110
+ assert_same list_used_in_event, current_list
111
+ end
112
+ end
@@ -7,4 +7,61 @@ class ThinReports::Core::Shape::List::TestPage < MiniTest::Unit::TestCase
7
7
 
8
8
  # Alias
9
9
  List = ThinReports::Core::Shape::List
10
+
11
+ def create_report(&block)
12
+ create_basic_report('basic_list_layout.tlf', &block)
13
+ end
14
+
15
+ def create_report_for_checking_dispatched_event(event)
16
+ @target_event = event
17
+ @is_dispatched = false
18
+
19
+ create_report do |r|
20
+ r.layout.config.list(:list) do |list|
21
+ list.events.on(event) {|e| @is_dispatched = true }
22
+ end
23
+ end
24
+ end
25
+
26
+ def assert_dispatched_event
27
+ assert @is_dispatched, "The :#{@target_event} event was not dispatched."
28
+ end
29
+
30
+ def test_page_finalize_event_should_be_dispatched_when_page_break_is_called
31
+ report = create_report_for_checking_dispatched_event :page_finalize
32
+ report.start_new_page do
33
+ list(:list).page_break
34
+ end
35
+
36
+ assert_dispatched_event
37
+ end
38
+
39
+ def test_page_finalize_event_should_be_dispatched_when_list_was_overflowed
40
+ report = create_report_for_checking_dispatched_event :page_finalize
41
+ report.start_new_page do
42
+ 6.times { list(:list).add_row }
43
+ end
44
+
45
+ assert_dispatched_event
46
+ end
47
+
48
+ def test_page_finalize_event_should_be_dispatched_when_a_new_page_is_created
49
+ report = create_report_for_checking_dispatched_event :page_finalize
50
+ report.start_new_page do
51
+ list(:list).add_row
52
+ end
53
+ report.start_new_page
54
+
55
+ assert_dispatched_event
56
+ end
57
+
58
+ def test_page_finalize_event_should_be_dispatched_when_report_is_finalized
59
+ report = create_report_for_checking_dispatched_event :page_finalize
60
+ report.start_new_page do
61
+ list(:list).add_row
62
+ end
63
+ report.finalize
64
+
65
+ assert_dispatched_event
66
+ end
10
67
  end
@@ -21,7 +21,7 @@ class ThinReports::Core::Shape::List::TestSectionFormat < MiniTest::Unit::TestCa
21
21
  def test_build
22
22
  shape_format = flexmock(:id => 'mock')
23
23
 
24
- flexmock(Shape::Tblock::Format).
24
+ flexmock(Shape::TextBlock::Format).
25
25
  should_receive(:build).times(2).and_return(shape_format)
26
26
  flexmock(Shape::Basic::Format).
27
27
  should_receive(:build).times(1).and_return(shape_format)
@@ -8,45 +8,52 @@ class ThinReports::Core::Shape::List::TestSectionInterface < MiniTest::Unit::Tes
8
8
  # Alias
9
9
  List = ThinReports::Core::Shape::List
10
10
 
11
- def setup
12
- parent = flexmock('parent')
13
- format = flexmock('format')
14
-
15
- @interface = List::SectionInterface.new(parent, format, :section)
11
+ def create_interface(format_config = {})
12
+ List::SectionInterface.new(flexmock('parent'),
13
+ List::SectionFormat.new(format_config),
14
+ :section)
16
15
  end
17
16
 
18
- def test_undef_list_method
19
- refute_respond_to @interface, :list
17
+ def test_internal_should_return_instance_of_SectionInternal
18
+ assert_instance_of List::SectionInternal, create_interface.internal
20
19
  end
21
20
 
22
- def test_internal
23
- assert_instance_of List::SectionInternal, @interface.internal
21
+ def test_initialize_should_properly_set_the_specified_section_name_to_internal
22
+ assert_equal create_interface.internal.section_name, :section
24
23
  end
25
24
 
26
- def test_properly_set_init_item_handler
27
- shape_format = flexmock('shape_format')
28
-
29
- flexmock(ThinReports::Core::Shape).
30
- should_receive(:Interface).with(@interface, shape_format).once
31
-
32
- @interface.manager.init_item(shape_format)
25
+ def test_initialize_should_properly_initialize_manager
26
+ assert_instance_of ThinReports::Core::Shape::Manager::Internal,
27
+ create_interface.manager
33
28
  end
34
29
 
35
- def test_copy
36
- original_foo = flexmock('original_foo')
37
- copied_foo = flexmock('copied_foo')
38
-
39
- flexmock(original_foo).
40
- should_receive(:copy).and_return(copied_foo).once
41
- @interface.manager.shapes[:foo] = original_foo
42
-
43
- copied_interface = @interface.copy(flexmock('new_parent'))
30
+ def test_height_should_operate_as_delegator_of_internal
31
+ list = create_interface('height' => 100)
32
+ assert_same list.height, list.internal.height
33
+ end
34
+
35
+ def test_copied_interface_should_succeed_an_section_name_of_original
36
+ list = create_interface
37
+ assert_same list.copy(flexmock('new_parent')).internal.section_name,
38
+ list.internal.section_name
39
+ end
40
+
41
+ def test_copied_interface_should_have_all_the_copies_of_Shape_which_original_holds
42
+ list = create_interface
43
+ copied_list(list) do |new_list|
44
+ assert_equal new_list.manager.shapes.size, 3
45
+ end
46
+ end
47
+
48
+ def copied_list(list, &block)
49
+ tblock = ThinReports::Core::Shape::TextBlock
50
+ new_parent = flexmock('new_parent')
44
51
 
45
- assert_instance_of List::SectionInterface, copied_interface
46
- refute_equal @interface.object_id, copied_interface.object_id
52
+ %w( foo bar hoge ).each do |id|
53
+ list.manager.format.shapes[id.to_sym] = tblock::Format.new('type' => 's-tblock', 'id' => id)
54
+ list.item(id).value(10)
55
+ end
47
56
 
48
- assert_equal copied_interface.internal.section_name,
49
- @interface.internal.section_name
50
- assert_same copied_interface.manager.shapes[:foo], copied_foo
57
+ block.call(list.copy(new_parent))
51
58
  end
52
59
  end