thinreports 0.10.0 → 0.12.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (191) hide show
  1. checksums.yaml +5 -5
  2. data/.github/CONTRIBUTING.md +2 -2
  3. data/.github/workflows/test.yml +51 -0
  4. data/.gitignore +1 -0
  5. data/CHANGELOG.md +49 -0
  6. data/Dockerfile +12 -0
  7. data/Gemfile +2 -1
  8. data/README.md +46 -21
  9. data/Rakefile +13 -29
  10. data/gemfiles/prawn-2.2.gemfile +5 -0
  11. data/gemfiles/prawn-2.3.gemfile +5 -0
  12. data/gemfiles/prawn-2.4.gemfile +5 -0
  13. data/lib/thinreports.rb +5 -0
  14. data/lib/thinreports/core/shape.rb +4 -3
  15. data/lib/thinreports/core/shape/base/interface.rb +0 -1
  16. data/lib/thinreports/core/shape/basic/format.rb +5 -0
  17. data/lib/thinreports/core/shape/image_block.rb +1 -1
  18. data/lib/thinreports/core/shape/list.rb +1 -1
  19. data/lib/thinreports/core/shape/list/manager.rb +1 -4
  20. data/lib/thinreports/core/shape/list/page.rb +2 -5
  21. data/lib/thinreports/core/shape/manager/internal.rb +0 -1
  22. data/lib/thinreports/core/shape/page_number.rb +1 -1
  23. data/lib/thinreports/core/shape/page_number/internal.rb +0 -1
  24. data/lib/thinreports/core/shape/stack_view.rb +17 -0
  25. data/lib/thinreports/core/shape/stack_view/format.rb +27 -0
  26. data/lib/thinreports/core/shape/stack_view/interface.rb +17 -0
  27. data/lib/thinreports/core/shape/stack_view/internal.rb +22 -0
  28. data/lib/thinreports/core/shape/stack_view/row_format.rb +39 -0
  29. data/lib/thinreports/core/shape/style/basic.rb +4 -1
  30. data/lib/thinreports/core/shape/text.rb +1 -1
  31. data/lib/thinreports/core/shape/text_block.rb +1 -1
  32. data/lib/thinreports/core/shape/text_block/formatter/number.rb +21 -9
  33. data/lib/thinreports/core/shape/text_block/internal.rb +0 -2
  34. data/lib/thinreports/core/utils.rb +6 -3
  35. data/lib/thinreports/generate.rb +11 -0
  36. data/lib/thinreports/generator/pdf/document/draw_shape.rb +31 -11
  37. data/lib/thinreports/generator/pdf/document/draw_template_items.rb +1 -2
  38. data/lib/thinreports/generator/pdf/document/font.rb +16 -10
  39. data/lib/thinreports/generator/pdf/document/graphics/attributes.rb +0 -1
  40. data/lib/thinreports/generator/pdf/document/graphics/basic.rb +0 -1
  41. data/lib/thinreports/generator/pdf/document/graphics/image.rb +19 -1
  42. data/lib/thinreports/generator/pdf/document/graphics/text.rb +10 -8
  43. data/lib/thinreports/generator/pdf/document/page.rb +13 -4
  44. data/lib/thinreports/generator/pdf/drawer/list.rb +0 -1
  45. data/lib/thinreports/generator/pdf/prawn_ext/calc_image_dimensions.rb +1 -3
  46. data/lib/thinreports/generator/pdf/prawn_ext/width_of.rb +7 -7
  47. data/lib/thinreports/layout/base.rb +2 -4
  48. data/lib/thinreports/layout/format.rb +0 -1
  49. data/lib/thinreports/layout/legacy_schema.rb +2 -6
  50. data/lib/thinreports/layout/version.rb +1 -1
  51. data/lib/thinreports/report/internal.rb +4 -4
  52. data/lib/thinreports/report/page.rb +2 -7
  53. data/lib/thinreports/section_report/build.rb +32 -0
  54. data/lib/thinreports/section_report/builder/item_builder.rb +49 -0
  55. data/lib/thinreports/section_report/builder/report_builder.rb +82 -0
  56. data/lib/thinreports/section_report/builder/report_data.rb +13 -0
  57. data/lib/thinreports/section_report/builder/stack_view_builder.rb +55 -0
  58. data/lib/thinreports/section_report/builder/stack_view_data.rb +11 -0
  59. data/lib/thinreports/section_report/generate.rb +26 -0
  60. data/lib/thinreports/section_report/pdf/render.rb +23 -0
  61. data/lib/thinreports/section_report/pdf/renderer/draw_item.rb +68 -0
  62. data/lib/thinreports/section_report/pdf/renderer/group_renderer.rb +57 -0
  63. data/lib/thinreports/section_report/pdf/renderer/headers_renderer.rb +24 -0
  64. data/lib/thinreports/section_report/pdf/renderer/section_height.rb +100 -0
  65. data/lib/thinreports/section_report/pdf/renderer/section_renderer.rb +39 -0
  66. data/lib/thinreports/section_report/pdf/renderer/stack_view_renderer.rb +55 -0
  67. data/lib/thinreports/section_report/pdf/renderer/stack_view_row_renderer.rb +38 -0
  68. data/lib/thinreports/section_report/schema/loader.rb +28 -0
  69. data/lib/thinreports/section_report/schema/parser.rb +52 -0
  70. data/lib/thinreports/section_report/schema/report.rb +30 -0
  71. data/lib/thinreports/section_report/schema/section.rb +47 -0
  72. data/lib/thinreports/version.rb +1 -1
  73. data/thinreports.gemspec +11 -11
  74. metadata +48 -164
  75. data/.rubocop.yml +0 -41
  76. data/.travis.yml +0 -17
  77. data/examples/character_spacing/character_spacing.rb +0 -8
  78. data/examples/character_spacing/character_spacing.tlf +0 -293
  79. data/examples/dynamic_image/dynamic_image.rb +0 -31
  80. data/examples/dynamic_image/dynamic_image.tlf +0 -661
  81. data/examples/dynamic_image/img200x100.png +0 -0
  82. data/examples/dynamic_image/img50x50.png +0 -0
  83. data/examples/dynamic_style/dynamic_style.rb +0 -150
  84. data/examples/dynamic_style/dynamic_style.tlf +0 -1835
  85. data/examples/dynamic_style/dynamic_style_in_list.tlf +0 -344
  86. data/examples/dynamic_style/image.png +0 -0
  87. data/examples/eudc/eudc.rb +0 -20
  88. data/examples/eudc/eudc.tlf +0 -180
  89. data/examples/eudc/eudc.ttf +0 -0
  90. data/examples/helper.rb +0 -50
  91. data/examples/hidden_shapes/hidden_shapes.rb +0 -9
  92. data/examples/hidden_shapes/hidden_shapes.tlf +0 -449
  93. data/examples/list_events/list_events.rb +0 -32
  94. data/examples/list_events/list_events.tlf +0 -361
  95. data/examples/list_manual_generation/list_manual_generation.rb +0 -22
  96. data/examples/list_manual_generation/list_manual_generation.tlf +0 -132
  97. data/examples/list_page_number/list_page_number.rb +0 -17
  98. data/examples/list_page_number/list_page_number.tlf +0 -254
  99. data/examples/page_number/page_number.rb +0 -33
  100. data/examples/page_number/page_number.tlf +0 -215
  101. data/examples/palleted_png/palleted_png.png +0 -0
  102. data/examples/palleted_png/palleted_png.rb +0 -9
  103. data/examples/palleted_png/palleted_png.tlf +0 -47
  104. data/examples/password_setting/password_setting.rb +0 -10
  105. data/examples/password_setting/password_setting.tlf +0 -45
  106. data/examples/report_callbacks/report_callbacks.rb +0 -14
  107. data/examples/report_callbacks/report_callbacks.tlf +0 -147
  108. data/examples/single_line_tblock/single_line_tblock.rb +0 -13
  109. data/examples/single_line_tblock/single_line_tblock.tlf +0 -170
  110. data/examples/tblock_overflow/tblock_overflow.rb +0 -20
  111. data/examples/tblock_overflow/tblock_overflow.tlf +0 -538
  112. data/examples/tblock_styles/font_size.tlf +0 -383
  113. data/examples/tblock_styles/tblock_styles.rb +0 -43
  114. data/examples/tblock_styles/tblock_styles.tlf +0 -889
  115. data/examples/text_align/text_align.rb +0 -8
  116. data/examples/text_align/text_align.tlf +0 -241
  117. data/examples/typeB_page_size/B4_ISO.tlf +0 -45
  118. data/examples/typeB_page_size/B4_JIS.tlf +0 -45
  119. data/examples/typeB_page_size/typeB_page_size.rb +0 -17
  120. data/examples/word_wrap/word_wrap.rb +0 -26
  121. data/examples/word_wrap/word_wrap.tlf +0 -297
  122. data/test/data/font.ttf +0 -0
  123. data/test/data/image_normal.jpg +0 -0
  124. data/test/data/image_normal.png +0 -0
  125. data/test/data/image_normal_jpg_noext +0 -0
  126. data/test/data/image_normal_png_noext +0 -0
  127. data/test/data/image_pallete_based.png +0 -0
  128. data/test/data/legacy_layout/all-items.tlf +0 -1
  129. data/test/schema_helper.rb +0 -122
  130. data/test/test_helper.rb +0 -48
  131. data/test/tmp/.gitkeep +0 -0
  132. data/test/unit/core/format/test_base.rb +0 -152
  133. data/test/unit/core/shape/base/test_internal.rb +0 -87
  134. data/test/unit/core/shape/basic/test_block_format.rb +0 -23
  135. data/test/unit/core/shape/basic/test_block_interface.rb +0 -29
  136. data/test/unit/core/shape/basic/test_block_internal.rb +0 -55
  137. data/test/unit/core/shape/basic/test_format.rb +0 -37
  138. data/test/unit/core/shape/basic/test_interface.rb +0 -108
  139. data/test/unit/core/shape/basic/test_internal.rb +0 -55
  140. data/test/unit/core/shape/image_block/test_interface.rb +0 -24
  141. data/test/unit/core/shape/image_block/test_internal.rb +0 -31
  142. data/test/unit/core/shape/list/test_format.rb +0 -111
  143. data/test/unit/core/shape/list/test_manager.rb +0 -67
  144. data/test/unit/core/shape/list/test_page.rb +0 -82
  145. data/test/unit/core/shape/list/test_page_state.rb +0 -31
  146. data/test/unit/core/shape/list/test_section_format.rb +0 -36
  147. data/test/unit/core/shape/list/test_section_interface.rb +0 -75
  148. data/test/unit/core/shape/list/test_section_internal.rb +0 -50
  149. data/test/unit/core/shape/manager/test_format.rb +0 -38
  150. data/test/unit/core/shape/manager/test_internal.rb +0 -132
  151. data/test/unit/core/shape/manager/test_target.rb +0 -140
  152. data/test/unit/core/shape/page_number/test_format.rb +0 -55
  153. data/test/unit/core/shape/page_number/test_interface.rb +0 -33
  154. data/test/unit/core/shape/page_number/test_internal.rb +0 -81
  155. data/test/unit/core/shape/styles/test_base.rb +0 -191
  156. data/test/unit/core/shape/styles/test_basic.rb +0 -24
  157. data/test/unit/core/shape/styles/test_graphic.rb +0 -50
  158. data/test/unit/core/shape/styles/test_text.rb +0 -97
  159. data/test/unit/core/shape/text/test_format.rb +0 -44
  160. data/test/unit/core/shape/text/test_internal.rb +0 -20
  161. data/test/unit/core/shape/text_block/formatter/test_basic.rb +0 -24
  162. data/test/unit/core/shape/text_block/formatter/test_datetime.rb +0 -49
  163. data/test/unit/core/shape/text_block/formatter/test_number.rb +0 -76
  164. data/test/unit/core/shape/text_block/formatter/test_padding.rb +0 -77
  165. data/test/unit/core/shape/text_block/test_format.rb +0 -169
  166. data/test/unit/core/shape/text_block/test_formatter.rb +0 -28
  167. data/test/unit/core/shape/text_block/test_interface.rb +0 -63
  168. data/test/unit/core/shape/text_block/test_internal.rb +0 -128
  169. data/test/unit/core/test_shape.rb +0 -52
  170. data/test/unit/core/test_utils.rb +0 -68
  171. data/test/unit/generator/pdf/document/graphics/test_attributes.rb +0 -135
  172. data/test/unit/generator/pdf/document/graphics/test_basic.rb +0 -46
  173. data/test/unit/generator/pdf/document/graphics/test_image.rb +0 -46
  174. data/test/unit/generator/pdf/document/graphics/test_text.rb +0 -171
  175. data/test/unit/generator/pdf/document/test_font.rb +0 -84
  176. data/test/unit/generator/pdf/document/test_graphics.rb +0 -42
  177. data/test/unit/generator/pdf/document/test_page.rb +0 -122
  178. data/test/unit/generator/pdf/document/test_parse_color.rb +0 -30
  179. data/test/unit/generator/pdf/prawn_ext/test_calc_image_dimensions.rb +0 -41
  180. data/test/unit/generator/pdf/prawn_ext/test_width_of.rb +0 -22
  181. data/test/unit/generator/pdf/test_document.rb +0 -22
  182. data/test/unit/generator/test_pdf.rb +0 -26
  183. data/test/unit/layout/test_base.rb +0 -41
  184. data/test/unit/layout/test_format.rb +0 -100
  185. data/test/unit/layout/test_legacy_schema.rb +0 -574
  186. data/test/unit/layout/test_version.rb +0 -26
  187. data/test/unit/report/test_base.rb +0 -248
  188. data/test/unit/report/test_internal.rb +0 -206
  189. data/test/unit/test_config.rb +0 -36
  190. data/test/unit/test_layout.rb +0 -12
  191. data/test/unit/test_report.rb +0 -18
@@ -1,29 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- require 'test_helper'
4
-
5
- class Thinreports::Core::Shape::Basic::TestBlockInterface < Minitest::Test
6
- include Thinreports::TestHelper
7
-
8
- Basic = Thinreports::Core::Shape::Basic
9
-
10
- def setup
11
- report = Thinreports::Report.new layout: layout_file.path
12
- parent = report.start_new_page
13
-
14
- format = Basic::BlockFormat.new({})
15
- internal = Basic::BlockInternal.new parent, format
16
-
17
- @interface = Basic::BlockInterface.new parent, format, internal
18
- end
19
-
20
- def test_value_should_work_as_reader_with_no_arguments
21
- @interface.internal.write_value('new value')
22
- assert_equal @interface.value, 'new value'
23
- end
24
-
25
- def test_value_should_work_as_writer_with_arguments
26
- @interface.value('new value')
27
- assert_equal @interface.internal.read_value, 'new value'
28
- end
29
- end
@@ -1,55 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- require 'test_helper'
4
-
5
- class Thinreports::Core::Shape::Basic::TestBlockInternal < Minitest::Test
6
- include Thinreports::TestHelper
7
-
8
- Basic = Thinreports::Core::Shape::Basic
9
-
10
- def test_read_value_should_return_value_from_format
11
- internal = init_internal('value' => 'default value')
12
- assert_equal internal.read_value, 'default value'
13
- end
14
-
15
- def test_read_value_should_return_value_from_state_with_value_key
16
- internal = init_internal
17
- internal.states[:value] = 'new value'
18
- assert_equal internal.read_value, 'new value'
19
- end
20
-
21
- def test_real_value_should_return_the_same_value_as_a_read_value_method
22
- internal = init_internal
23
- internal.states[:value] = 'foo'
24
- assert_same internal.real_value, internal.read_value
25
- end
26
-
27
- def test_write_value_should_save_value_to_states_store_as_value
28
- internal = init_internal
29
- internal.write_value('new value')
30
- assert_equal internal.states[:value], 'new value'
31
- end
32
-
33
- def test_type_of_asker_should_return_true_when_given_the_block_value
34
- assert_equal init_internal.type_of?(:block), true
35
- end
36
-
37
- def test_value_should_works_the_same_as_read_value_method
38
- internal = init_internal
39
- internal.write_value('new value')
40
- assert_same internal.read_value, internal.value
41
- end
42
-
43
- def test_type_of_asker_should_return_false_otherwise
44
- assert_equal %w( image-block text-block text list ).all? {|t| !init_internal.type_of?(t)}, true
45
- end
46
-
47
- private
48
-
49
- def init_internal(format = {})
50
- report = Thinreports::Report.new layout: layout_file.path
51
- parent = report.start_new_page
52
-
53
- Basic::BlockInternal.new(parent, Basic::BlockFormat.new(format))
54
- end
55
- end
@@ -1,37 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- require 'test_helper'
4
-
5
- class Thinreports::Core::Shape::Basic::TestFormat < Minitest::Test
6
- include Thinreports::TestHelper
7
-
8
- RECT_FORMAT = {
9
- "id" => "",
10
- "type" => "rect",
11
- "x" => 100.0,
12
- "y" => 200.0,
13
- "width" => 300.0,
14
- "height" => 400.0,
15
- "description" => "Description for rect",
16
- "display" => true,
17
- "rx" => 1.0,
18
- "ry" => 1.0,
19
- "style" => {
20
- "border-width" => 1,
21
- "border-color" => "#000000",
22
- "border-style" => "dashed",
23
- "fill-color" => "#ff0000"
24
- }
25
- }
26
-
27
- Basic = Thinreports::Core::Shape::Basic
28
-
29
- def test_attribute_readers
30
- format = Basic::Format.new(RECT_FORMAT)
31
-
32
- assert_equal '', format.id
33
- assert_equal 'rect', format.type
34
- assert_equal RECT_FORMAT['style'], format.style
35
- assert_equal true, format.display?
36
- end
37
- end
@@ -1,108 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- require 'test_helper'
4
-
5
- class Thinreports::Core::Shape::Basic::TestInterface < Minitest::Test
6
- include Thinreports::TestHelper
7
-
8
- # Alias
9
- Basic = Thinreports::Core::Shape::Basic
10
-
11
- def create_interface(format_config = {})
12
- report = Thinreports::Report.new layout: layout_file.path
13
- parent = report.start_new_page
14
-
15
- Basic::Interface.new parent, Basic::Format.new(format_config)
16
- end
17
-
18
- def test_id_should_return_id_with_reference_to_internal
19
- basic = create_interface('id' => 'foo')
20
- assert_equal basic.id, basic.internal.id
21
- end
22
-
23
- def test_id_should_return_cloned_id
24
- basic = create_interface('id' => 'basic-id')
25
- refute_same basic.id, basic.internal.id
26
- end
27
-
28
- def test_type_should_operate_as_delegator_of_internal
29
- basic = create_interface('type' => 'rect')
30
- assert_same basic.type, basic.internal.type
31
- end
32
-
33
- def test_visible_asker_should_return_result_with_reference_to_style_of_internal
34
- basic = create_interface('display' => false)
35
- assert_equal basic.visible?, basic.internal.style.visible
36
- end
37
-
38
- def test_visible_should_properly_set_visibility_to_style_of_internal
39
- basic = create_interface('display' => false)
40
- basic.visible(true)
41
-
42
- assert_equal basic.internal.style.visible, true
43
- end
44
-
45
- def test_style_should_operate_as_reader_when_one_argument_is_given
46
- basic = create_interface('style' => { 'fill-color' => '#ff0000' })
47
-
48
- assert_equal basic.style(:fill_color), '#ff0000'
49
- end
50
-
51
- def test_style_should_operate_as_writer_when_two_arguments_are_given
52
- basic = create_interface
53
- basic.style(:border_color, '#000000')
54
-
55
- assert_equal basic.style(:border_color), '#000000'
56
- end
57
-
58
- def test_style_should_operate_as_writer_for_border_style_when_three_arguments_are_given
59
- basic = create_interface
60
- basic.style(:border, 1, '#ffffff')
61
-
62
- assert_equal basic.style(:border), [1, '#ffffff']
63
- end
64
-
65
- def test_style_should_return_self_when_two_arguments_are_given
66
- assert_instance_of Basic::Interface, create_interface.style(:border_width, 1)
67
- end
68
-
69
- def test_style_should_return_self_when_three_arguments_are_given
70
- assert_instance_of Basic::Interface, create_interface.style(:border, 1, '#000000')
71
- end
72
-
73
- def test_styles_should_properly_set_the_specified_styles_as_Hash
74
- basic = create_interface
75
- basic.styles(fill_color: '#ff0000',
76
- border_color: '#000000',
77
- border_width: 5,
78
- visible: false)
79
-
80
- assert_equal [basic.style(:fill_color),
81
- basic.style(:border_color),
82
- basic.style(:border_width),
83
- basic.style(:visible)],
84
- ['#ff0000', '#000000', 5, false]
85
- end
86
-
87
- def test_hide_should_properly_set_false_to_visibility
88
- basic = create_interface
89
- basic.hide
90
-
91
- assert_equal basic.visible?, false
92
- end
93
-
94
- def test_hide_should_return_self
95
- assert_instance_of Basic::Interface, create_interface.hide
96
- end
97
-
98
- def test_show_should_properly_set_true_to_visibility
99
- basic = create_interface
100
- basic.show
101
-
102
- assert_equal basic.visible?, true
103
- end
104
-
105
- def test_show_should_return_self
106
- assert_instance_of Basic::Interface, create_interface.show
107
- end
108
- end
@@ -1,55 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- require 'test_helper'
4
-
5
- class Thinreports::Core::Shape::Basic::TestInternal < Minitest::Test
6
- include Thinreports::TestHelper
7
-
8
- # Alias
9
- Basic = Thinreports::Core::Shape::Basic
10
-
11
- def create_internal(format_config = {})
12
- report = Thinreports::Report.new layout: layout_file.path
13
-
14
- Basic::Internal.new report.page, Basic::Format.new(format_config)
15
- end
16
-
17
- def test_id_should_operate_as_delegator_of_format
18
- basic = create_internal('id' => 'basic-id')
19
- assert_same basic.id, basic.format.id
20
- end
21
-
22
- def test_type_should_operate_as_delegator_of_format
23
- basic = create_internal('type' => 'ellipse')
24
- assert_same basic.type, basic.format.type
25
- end
26
-
27
- def test_style_should_return_instance_of_StyleGraphic
28
- assert_instance_of Thinreports::Core::Shape::Style::Graphic,
29
- create_internal.style
30
- end
31
-
32
- def test_type_of_asker_should_already_return_true_when_the_specified_type_is_basic
33
- assert_equal create_internal.type_of?(:basic), true
34
- end
35
-
36
- def test_type_of_asker_should_return_true_when_the_specified_type_equal_self_type_name
37
- result = []
38
-
39
- result << create_internal('type' => 'rect').type_of?('rect')
40
- result << create_internal('type' => 'ellipse').type_of?('ellipse')
41
- result << create_internal('type' => 'line').type_of?('line')
42
- result << create_internal('type' => 'image').type_of?('image')
43
-
44
- assert_equal result.all?, true
45
- end
46
-
47
- def test_identifier
48
- basic = create_internal 'id' => 'basic-id'
49
-
50
- assert_equal 'basic-id', basic.identifier
51
-
52
- basic.style.stubs(identifier: 'style-identifier')
53
- assert_equal basic.identifier, 'basic-idstyle-identifier'
54
- end
55
- end
@@ -1,24 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- require 'test_helper'
4
-
5
- class Thinreports::Core::Shape::ImageBlock::TestInterface < Minitest::Test
6
- include Thinreports::TestHelper
7
-
8
- ImageBlock = Thinreports::Core::Shape::ImageBlock
9
-
10
- def setup
11
- @report = Thinreports::Report.new layout: layout_file.path
12
- @page = @report.start_new_page
13
- end
14
-
15
- def test_src
16
- @page.item(:image_block).src('/path/to/image.png')
17
- assert_equal '/path/to/image.png', @page.item(:image_block).src
18
- end
19
-
20
- def test_src=
21
- @page.item(:image_block).src = '/path/to/image.png'
22
- assert_equal '/path/to/image.png', @page.item(:image_block).src
23
- end
24
- end
@@ -1,31 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- require 'test_helper'
4
-
5
- class Thinreports::Core::Shape::ImageBlock::TestInternal < Minitest::Test
6
- include Thinreports::TestHelper
7
-
8
- ImageBlock = Thinreports::Core::Shape::ImageBlock
9
-
10
- def test_src_should_return_the_same_value_as_value_method
11
- internal = create_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 create_internal.type_of?('image-block'), true
19
- end
20
-
21
- def test_type_of_asker_should_return_true_when_block_value_is_given
22
- assert_equal create_internal.type_of?(:block), true
23
- end
24
-
25
- def create_internal
26
- report = Thinreports::Report.new layout: layout_file.path
27
- parent = report.start_new_page
28
-
29
- ImageBlock::Internal.new parent, ImageBlock::Format.new({})
30
- end
31
- end
@@ -1,111 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- require 'test_helper'
4
-
5
- class Thinreports::Core::Shape::List::TestFormat < Minitest::Test
6
- include Thinreports::TestHelper
7
-
8
- LIST_FORMAT = {
9
- 'type' => 'list',
10
- 'id' => 'list',
11
- 'display' => true,
12
- 'x' => 10.0,
13
- 'y' => 20.0,
14
- 'width' => 30.0,
15
- 'height' => 40.0,
16
- 'content-height' => 255,
17
- 'auto-page-break' => true,
18
- 'header' => {
19
- 'enabled' => true,
20
- 'height' => 10.0,
21
- 'translate' => { 'x' => 210.0, 'y' => 310.0 },
22
- 'items' => []
23
- },
24
- 'detail' => {
25
- 'height' => 20.0,
26
- 'translate' => { 'x' => 220.0, 'y' => 320.0 },
27
- 'items' => []
28
- },
29
- 'page-footer' => {
30
- 'enabled' => true,
31
- 'height' => 30.0,
32
- 'translate' => { 'x' => 230.0, 'y' => 330.0 },
33
- 'items' => []
34
- },
35
- 'footer' => {
36
- 'enabled' => false,
37
- 'height' => 40.0,
38
- 'translate' => { 'x' => 240.0, 'y' => 340.0 },
39
- 'items' => []
40
- }
41
- }
42
-
43
- List = Thinreports::Core::Shape::List
44
-
45
- def test_has_section?
46
- format = List::Format.new(LIST_FORMAT)
47
-
48
- assert_equal true, format.has_section?(:detail)
49
- assert_equal true, format.has_section?(:page_footer)
50
- assert_equal false, format.has_section?(:footer)
51
- end
52
-
53
- def test_section_height
54
- format = List::Format.new(LIST_FORMAT)
55
-
56
- assert_equal 10.0, format.section_height(:header)
57
- end
58
-
59
- def test_attribute_readers
60
- format = List::Format.new(LIST_FORMAT)
61
-
62
- assert_equal 255, format.height
63
- assert_equal true, format.auto_page_break?
64
- assert_equal true, format.has_header?
65
- assert_equal true, format.has_page_footer?
66
- assert_equal false, format.has_footer?
67
- assert_equal 20.0, format.detail_height
68
- assert_equal 30.0, format.page_footer_height
69
- assert_equal 40.0, format.footer_height
70
- assert_equal 10.0, format.header_height
71
- end
72
-
73
- def test_section_base_position_top
74
- page_footer_disabled = LIST_FORMAT
75
-
76
- format = List::Format.new(page_footer_disabled)
77
- assert_equal 310.0, format.section_base_position_top(:header)
78
- assert_equal 320.0, format.section_base_position_top(:detail)
79
- assert_equal 310.0, format.section_base_position_top(:page_footer)
80
- assert_equal 0, format.section_base_position_top(:footer)
81
-
82
- format_footer_enabled = format_section_enabled(true, 'footer', LIST_FORMAT)
83
-
84
- format = List::Format.new(format_footer_enabled)
85
- assert_equal 290.0, format.section_base_position_top(:footer)
86
-
87
- format_footer_enabld_and_page_footer_disabled = format_section_enabled(false, 'page-footer', format_footer_enabled)
88
-
89
- format = List::Format.new(format_footer_enabld_and_page_footer_disabled)
90
- assert_equal 320.0, format.section_base_position_top(:footer)
91
- end
92
-
93
- def test_initialize_sections
94
- format = List::Format.new(LIST_FORMAT)
95
-
96
- assert_instance_of List::SectionFormat, format.sections[:header]
97
- assert_instance_of List::SectionFormat, format.sections[:detail]
98
- assert_instance_of List::SectionFormat, format.sections[:page_footer]
99
-
100
- assert_nil format.sections[:footer]
101
- end
102
-
103
- private
104
-
105
- def format_section_enabled(enable, section, list_format)
106
- section_format = list_format[section].dup
107
- section_format['enabled'] = enable
108
-
109
- list_format.merge(section => section_format)
110
- end
111
- end