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,140 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- require 'test_helper'
4
-
5
- class Thinreports::Core::Shape::Manager::TestTarget < Minitest::Test
6
- include Thinreports::TestHelper
7
-
8
- # Alias
9
- Shape = Thinreports::Core::Shape
10
-
11
- class TestManager
12
- include Shape::Manager::Target
13
-
14
- attr_reader :layout, :report
15
-
16
- def initialize(report, layout)
17
- @report = report
18
- @layout = layout
19
-
20
- initialize_manager(layout.format) do |f|
21
- Shape::Interface(self, f)
22
- end
23
- end
24
- end
25
-
26
- def create_shape_format(type, id)
27
- Shape::Format(type).new('id' => id, 'type' => type)
28
- end
29
-
30
- def create_manager
31
- report = Thinreports::Report.new layout: layout_file.path
32
- layout = report.layout
33
-
34
- TestManager.new(report, layout)
35
- end
36
-
37
- def test_shorthand_for_finding_item
38
- manager = create_manager
39
-
40
- text_block1 = manager[:text_block]
41
- text_block1.value = 'block1'
42
-
43
- assert_instance_of Shape::TextBlock::Interface, manager[:text_block]
44
- assert_instance_of Shape::ImageBlock::Interface, manager[:image_block]
45
- assert_instance_of Shape::Basic::Interface, manager[:rect_with_id]
46
-
47
- assert_raises Thinreports::Errors::UnknownItemId do
48
- manager[:unknown_id]
49
- end
50
-
51
- assert_raises Thinreports::Errors::UnknownItemId do
52
- manager[:default]
53
- end
54
- end
55
-
56
- def test_shorthand_for_setting_value_to_block
57
- manager = create_manager
58
-
59
- manager[:text_block] = 'value of text block1'
60
- assert_equal 'value of text block1', manager.item(:text_block).value
61
-
62
- manager[:image_block] = '/path/to/image.png'
63
- assert_equal '/path/to/image.png', manager.item(:image_block).src
64
-
65
- assert_raises(NoMethodError) { manager[:rect_with_id] = 'value' }
66
- assert_raises(Thinreports::Errors::UnknownItemId) { manager[:default] = 'value' }
67
- end
68
-
69
- def test_manager_should_return_instance_of_ManagerInternal
70
- assert_instance_of Shape::Manager::Internal, create_manager.manager
71
- end
72
-
73
- def test_item_should_properly_return_shape_with_the_specified_Symbol_id
74
- assert_equal create_manager.item(:text_block).id, 'text_block'
75
- end
76
-
77
- def test_item_should_properly_return_shape_with_the_specified_String_id
78
- assert_equal create_manager.item('text_block').id, 'text_block'
79
- end
80
-
81
- def test_item_should_raise_when_the_shape_with_the_specified_id_is_not_found
82
- assert_raises Thinreports::Errors::UnknownItemId do
83
- create_manager.item(:unknown)
84
- end
85
- end
86
-
87
- def test_item_should_set_an_shape_as_argument_when_a_block_is_given
88
- id = nil
89
- create_manager.item(:text_block) {|s| id = s.id }
90
- assert_equal id, 'text_block'
91
- end
92
-
93
- def test_item_should_raise_when_type_of_shape_with_the_specified_id_is_list
94
- assert_raises Thinreports::Errors::UnknownItemId do
95
- create_manager.item(:default)
96
- end
97
- end
98
-
99
- def test_list_should_properly_return_list_with_the_specified_Symbol_id
100
- assert_equal create_manager.list(:default).id, 'default'
101
- end
102
-
103
- def test_list_should_properly_return_list_with_the_specified_String_id
104
- assert_equal create_manager.list('default').id, 'default'
105
- end
106
-
107
- def test_list_should_raise_when_type_of_shape_with_the_specified_id_is_not_list
108
- assert_raises Thinreports::Errors::UnknownItemId do
109
- create_manager.list(:text_block)
110
- end
111
- end
112
-
113
- def test_list_should_use_default_as_id_when_id_is_omitted
114
- assert_equal create_manager.list.id, 'default'
115
- end
116
-
117
- def test_values_should_properly_set_values_to_shapes_with_specified_id
118
- manager = create_manager
119
- manager.values(text_block: 1000)
120
-
121
- assert_equal manager.item(:text_block).value, 1000
122
- end
123
-
124
- def test_item_exists_asker_should_return_true_when_shape_with_specified_Symbol_id_is_found
125
- assert_equal create_manager.item_exists?(:text_block), true
126
- end
127
-
128
- def test_item_exists_asker_should_return_true_when_shape_with_specified_String_id_is_found
129
- assert_equal create_manager.item_exists?('text_block'), true
130
- end
131
-
132
- def test_item_exists_asker_should_return_false_when_shape_with_specified_id_not_found
133
- assert_equal create_manager.item_exists?('unknown'), false
134
- end
135
-
136
- def test_exists_asker_should_operate_like_as_item_exists_asker
137
- manager = create_manager
138
- assert_equal manager.exists?(:unknown), manager.item_exists?(:unknown)
139
- end
140
- end
@@ -1,55 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- require 'test_helper'
4
-
5
- class Thinreports::Core::Shape::PageNumber::TestFormat < Minitest::Test
6
- include Thinreports::TestHelper
7
-
8
- PAGE_NUMBER_FORMAT = {
9
- 'id' => '',
10
- 'type' => 'page-number',
11
- 'display' => true,
12
- 'x' => 100.0,
13
- 'y' => 200.0,
14
- 'width' => 300.0,
15
- 'height' => 400.0,
16
- 'format' => '{page} / {total}',
17
- 'target' => '',
18
- 'style' => {
19
- 'overflow' => 'truncate',
20
- 'letter-spacing' => 'normal',
21
- 'color' => '#000000',
22
- 'font-size' => 18,
23
- 'font-family' => ['Helvetica'],
24
- 'line-height' => 60,
25
- 'line-height-ratio' => 1.5,
26
- 'text-align' => 'left'
27
- }
28
- }
29
-
30
- PageNumber = Thinreports::Core::Shape::PageNumber
31
-
32
- def test_attribute_readers
33
- format = PageNumber::Format.new(PAGE_NUMBER_FORMAT)
34
-
35
- assert_equal 'truncate', format.overflow
36
- assert_equal '', format.target
37
- assert_equal '{page} / {total}', format.default_format
38
- end
39
-
40
- def test_id
41
- format = PageNumber::Format.new(PAGE_NUMBER_FORMAT)
42
- assert_match(/^__pageno\d+$/, format.id)
43
-
44
- format = PageNumber::Format.new(PAGE_NUMBER_FORMAT.merge('id' => 'foo'))
45
- assert_equal 'foo', format.id
46
- end
47
-
48
- def test_for_report?
49
- format_for_report = PageNumber::Format.new(PAGE_NUMBER_FORMAT)
50
- assert_equal true, format_for_report.for_report?
51
-
52
- format_for_list = PageNumber::Format.new(PAGE_NUMBER_FORMAT.merge('target' => 'target_list_id'))
53
- assert_equal false, format_for_list.for_report?
54
- end
55
- end
@@ -1,33 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- require 'test_helper'
4
-
5
- class Thinreports::Core::Shape::PageNumber::TestInterface < Minitest::Test
6
- include Thinreports::TestHelper
7
-
8
- PageNumber = Thinreports::Core::Shape::PageNumber
9
-
10
- def create_pageno(format = {})
11
- report = Thinreports::Report.new layout: layout_file.path
12
- parent = report.start_new_page
13
-
14
- PageNumber::Interface.new parent, PageNumber::Format.new(format)
15
- end
16
-
17
- def test_format
18
- pageno = create_pageno 'format' => '{page}'
19
-
20
- assert_equal pageno.format, '{page}'
21
- pageno.format('{page} / {total}')
22
- assert_equal pageno.format, '{page} / {total}'
23
- end
24
-
25
- def test_reset_format
26
- pageno = create_pageno 'format' => '{page}'
27
-
28
- pageno.format('-- {page} --')
29
- pageno.reset_format
30
-
31
- assert_equal pageno.format, '{page}'
32
- end
33
- end
@@ -1,81 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- require 'test_helper'
4
-
5
- class Thinreports::Core::Shape::PageNumber::TestInternal < Minitest::Test
6
- include Thinreports::TestHelper
7
-
8
- PageNumber = Thinreports::Core::Shape::PageNumber
9
-
10
- def setup
11
- @report = Thinreports::Report.new layout: layout_file.path
12
- @report.start_new_page
13
- end
14
-
15
- def init_pageno(format = {})
16
- PageNumber::Internal.new(@report.page, PageNumber::Format.new(format))
17
- end
18
-
19
- def test_read_format
20
- pageno = init_pageno('format' => 'Page {page}')
21
-
22
- assert_equal pageno.read_format, 'Page {page}'
23
- end
24
-
25
- def test_write_format
26
- pageno = init_pageno('format' => 'Page {page}')
27
- pageno.write_format('{page}')
28
-
29
- assert_equal pageno.read_format, '{page}'
30
- end
31
-
32
- def test_reset_format
33
- pageno = init_pageno('format' => '{page}')
34
- pageno.write_format('Page {page}')
35
- pageno.reset_format
36
-
37
- assert_equal pageno.read_format, '{page}'
38
- end
39
-
40
- def test_build_format
41
- pageno = init_pageno('format' => '{page} / {total}')
42
- assert_equal pageno.build_format(1, 100), '1 / 100'
43
-
44
- pageno.write_format('{page}')
45
- assert_equal pageno.build_format(1, 100), '1'
46
-
47
- @report.start_page_number_from 5
48
- pageno = init_pageno('format' => '{page} / {total}')
49
- assert_equal pageno.build_format(1, 100), '5 / 104'
50
-
51
- # if counted target is a List shape
52
- pageno = init_pageno('format' => '{page} / {total}',
53
- 'target' => 'list-id')
54
- assert_equal pageno.build_format(1, 100), '1 / 100'
55
- end
56
-
57
- def test_type_of
58
- pageno = init_pageno
59
- assert pageno.type_of?('page-number')
60
- end
61
-
62
- def test_style
63
- pageno = init_pageno
64
- style = pageno.style
65
-
66
- assert_instance_of PageNumber::Style, style
67
- assert_same pageno.style, style
68
- end
69
-
70
- def test_for_report
71
- pageno = init_pageno('target' => '')
72
- assert_equal pageno.for_report?, true
73
-
74
- pageno = init_pageno('target' => 'list-id')
75
- assert_equal pageno.for_report?, false
76
- end
77
-
78
- def test_Style_class
79
- refute_includes PageNumber::Style.accessible_styles, :valign
80
- end
81
- end
@@ -1,191 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- require 'test_helper'
4
-
5
- class Thinreports::Core::Shape::Style::TestBase < Minitest::Test
6
- include Thinreports::TestHelper
7
-
8
- # Alias
9
- Style = Thinreports::Core::Shape::Style::Base
10
-
11
- def create_basic_format(base_style = {})
12
- Thinreports::Core::Shape::Basic::Format.new('style' => base_style)
13
- end
14
-
15
- def create_style(base_style = {})
16
- Style.new(create_basic_format(base_style))
17
- end
18
-
19
- def create_new_style(base_style = {}, &block)
20
- klass = ::Class.new(Style, &block)
21
- klass.new(create_basic_format(base_style))
22
- end
23
-
24
- def test_self_style_reader_should_properly_define_a_reading_method
25
- style = create_new_style {
26
- style_reader :hoge, 'foo'
27
- }
28
- assert_respond_to style, :hoge
29
- end
30
-
31
- def test_self_style_writer_should_properly_define_a_writing_method
32
- style = create_new_style {
33
- style_writer :hoge, 'foo'
34
- }
35
- assert_respond_to style, :hoge=
36
- end
37
-
38
- def test_self_style_accessor_should_properly_defines_reading_and_writing_methods
39
- style = create_new_style {
40
- style_accessor :hoge, 'foo'
41
- }
42
- assert_respond_to style, :hoge
43
- assert_respond_to style, :hoge=
44
- end
45
-
46
- def test_self_style_accessible_should_add_specified_styles_to_the_accessible_styles_variable
47
- style = create_new_style {
48
- style_accessible :hoge
49
- style_accessible :foo, :bar
50
- }
51
- assert_equal style.class.accessible_styles, [:hoge, :foo, :bar]
52
- end
53
-
54
- def test_self_accessible_styles_variable_should_not_be_shared_each_SubClasses
55
- style1 = create_new_style {
56
- style_accessible :hoge, :foo
57
- }
58
- assert_equal style1.class.accessible_styles, [:hoge, :foo]
59
- end
60
-
61
- def test_self_accessible_styles_variable_should_be_inherited_to_SubClass
62
- super_klass = ::Class.new(Style) {
63
- style_accessible :hoge, :foo
64
- }
65
- sub_klass = ::Class.new(super_klass)
66
-
67
- assert_equal sub_klass.accessible_styles, super_klass.accessible_styles
68
- end
69
-
70
- def test_self_accessible_styles_variables_of_SubClass_should_not_interfere_mutually
71
- super_klass = ::Class.new(Style) {
72
- style_accessible :foo, :bar
73
- }
74
- sub_klass1 = ::Class.new(super_klass)
75
- sub_klass2 = ::Class.new(super_klass)
76
-
77
- refute_same sub_klass1.accessible_styles, sub_klass2.accessible_styles
78
- end
79
-
80
- def test_read_internal_style_should_return_style_of_styles_when_style_is_found_in_styles
81
- style = create_style('hoge' => 'base_style')
82
- style.write_internal_style('hoge', 'new_style')
83
-
84
- assert_equal style.read_internal_style('hoge'), 'new_style'
85
- end
86
-
87
- def test_read_internal_style_should_return_style_of_base_when_style_is_not_found_in_styles
88
- style = create_style('hoge' => 'base_style')
89
- assert_equal style.read_internal_style('hoge'), 'base_style'
90
- end
91
-
92
- def test_write_internal_style_should_properly_set_style_to_the_styles
93
- style = create_style({})
94
- style.write_internal_style('hoge', 'hoge_style')
95
-
96
- assert_equal style.styles['hoge'], 'hoge_style'
97
- end
98
-
99
- def test_has_style_asker_should_return_true_when_specified_style_method_is_accessible
100
- style = create_new_style {
101
- style_accessible :hoge, :foo
102
- }
103
- assert_equal style.has_style?(:foo), true
104
- end
105
-
106
- def test_has_style_asker_should_return_false_when_specified_style_method_is_not_accessible
107
- style = create_new_style {
108
- style_accessible :foo
109
- }
110
- assert_equal style.has_style?(:hoge), false
111
- end
112
-
113
- def test_verify_style_value_should_raise_when_value_is_not_included_in_list
114
- assert_raises ArgumentError do
115
- create_style.send(:verify_style_value, :invalid, [:hoge, :foo, :bar])
116
- end
117
- end
118
-
119
- def test_verify_style_value_should_not_raise_when_value_is_found_in_list
120
- create_style.send(:verify_style_value, :valid, [:hoge, :valid, :foo])
121
- rescue ArgumentError
122
- flunk
123
- end
124
-
125
- def test_reader_method_caller_should_properly_delegate_to_real_method
126
- style = create_new_style('hoge_style' => 'hoge_style_value') {
127
- style_accessible :hoge
128
- style_reader :hoge, 'hoge_style'
129
- }
130
- assert_equal style[:hoge], 'hoge_style_value'
131
- end
132
-
133
- def test_writer_method_caller_should_properly_delegate_to_real_method
134
- style = create_new_style {
135
- style_accessible :hoge
136
- style_accessor :hoge, 'hoge_style'
137
- }
138
- style[:hoge] = 'hoge_style_value'
139
- assert_equal style.hoge, 'hoge_style_value'
140
- end
141
-
142
- def test_reader_method_caller_should_raise_when_style_is_not_accessible
143
- assert_raises Thinreports::Errors::UnknownShapeStyleName do
144
- create_new_style[:unknown]
145
- end
146
- end
147
-
148
- def test_writer_method_caller_should_raise_when_style_is_not_accessible
149
- assert_raises Thinreports::Errors::UnknownShapeStyleName do
150
- create_new_style[:unknown] = 'value'
151
- end
152
- end
153
-
154
- def test_copy_should_return_the_instance_of_the_same_class_as_itself
155
- style = create_style
156
- assert_instance_of Style, style.copy
157
- end
158
-
159
- def test_styles_of_copied_style_should_not_same_the_styles_of_original
160
- style = create_style
161
- refute_same style.styles, style.copy.styles
162
- end
163
-
164
- def test_styles_of_copied_style_should_equal_the_style_of_original
165
- style = create_style
166
- style.write_internal_style('foo', 'foo_value')
167
- assert_equal style.styles['foo'], style.copy.styles['foo']
168
- end
169
-
170
- def test_identifier_should_return_empty_string_when_the_style_is_not_set
171
- style = create_style
172
- assert_equal style.identifier, ''
173
- end
174
-
175
- def test_identifier_should_return_the_same_as_hash_value_of_styles_when_style_is_set_something
176
- style = create_style
177
- style.write_internal_style('foo', 'foo_value')
178
-
179
- assert_equal style.identifier, style.styles.hash.to_s
180
- end
181
-
182
- def test_finalized_styles
183
- base_styles = { 'foo' => 'default foo', 'bar' => 'default bar' }
184
-
185
- style = create_style(base_styles)
186
- style.write_internal_style('foo', 'new foo')
187
-
188
- assert_equal({ 'foo' => 'new foo', 'bar' => 'default bar' }, style.finalized_styles)
189
- assert_same style.finalized_styles, style.finalized_styles
190
- end
191
- end