thinreports 0.9.1 → 0.11.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 (213) hide show
  1. checksums.yaml +5 -5
  2. data/.github/workflows/test.yml +39 -0
  3. data/.gitignore +1 -0
  4. data/CHANGELOG.md +59 -2
  5. data/Dockerfile +12 -0
  6. data/Gemfile +7 -4
  7. data/README.md +44 -22
  8. data/Rakefile +14 -31
  9. data/lib/thinreports.rb +16 -15
  10. data/lib/thinreports/config.rb +2 -24
  11. data/lib/thinreports/core/errors.rb +6 -17
  12. data/lib/thinreports/core/format/base.rb +62 -61
  13. data/lib/thinreports/core/shape.rb +10 -12
  14. data/lib/thinreports/core/shape/base.rb +3 -12
  15. data/lib/thinreports/core/shape/base/interface.rb +34 -32
  16. data/lib/thinreports/core/shape/base/internal.rb +45 -43
  17. data/lib/thinreports/core/shape/basic.rb +12 -12
  18. data/lib/thinreports/core/shape/basic/block_format.rb +8 -6
  19. data/lib/thinreports/core/shape/basic/block_interface.rb +24 -22
  20. data/lib/thinreports/core/shape/basic/block_internal.rb +28 -26
  21. data/lib/thinreports/core/shape/basic/format.rb +11 -9
  22. data/lib/thinreports/core/shape/basic/interface.rb +79 -77
  23. data/lib/thinreports/core/shape/basic/internal.rb +17 -14
  24. data/lib/thinreports/core/shape/image_block.rb +9 -9
  25. data/lib/thinreports/core/shape/image_block/format.rb +7 -5
  26. data/lib/thinreports/core/shape/image_block/interface.rb +15 -13
  27. data/lib/thinreports/core/shape/image_block/internal.rb +10 -8
  28. data/lib/thinreports/core/shape/list.rb +13 -13
  29. data/lib/thinreports/core/shape/list/format.rb +83 -77
  30. data/lib/thinreports/core/shape/list/manager.rb +179 -176
  31. data/lib/thinreports/core/shape/list/page.rb +91 -93
  32. data/lib/thinreports/core/shape/list/page_state.rb +42 -40
  33. data/lib/thinreports/core/shape/list/section_format.rb +28 -26
  34. data/lib/thinreports/core/shape/list/section_interface.rb +42 -40
  35. data/lib/thinreports/core/shape/list/section_internal.rb +21 -19
  36. data/lib/thinreports/core/shape/manager.rb +4 -13
  37. data/lib/thinreports/core/shape/manager/format.rb +21 -19
  38. data/lib/thinreports/core/shape/manager/internal.rb +87 -84
  39. data/lib/thinreports/core/shape/manager/target.rb +93 -95
  40. data/lib/thinreports/core/shape/page_number.rb +9 -9
  41. data/lib/thinreports/core/shape/page_number/format.rb +20 -18
  42. data/lib/thinreports/core/shape/page_number/interface.rb +20 -18
  43. data/lib/thinreports/core/shape/page_number/internal.rb +46 -44
  44. data/lib/thinreports/core/shape/style.rb +5 -14
  45. data/lib/thinreports/core/shape/style/base.rb +121 -120
  46. data/lib/thinreports/core/shape/style/basic.rb +12 -10
  47. data/lib/thinreports/core/shape/style/graphic.rb +35 -33
  48. data/lib/thinreports/core/shape/style/text.rb +113 -107
  49. data/lib/thinreports/core/shape/text.rb +9 -9
  50. data/lib/thinreports/core/shape/text/format.rb +10 -9
  51. data/lib/thinreports/core/shape/text/interface.rb +13 -11
  52. data/lib/thinreports/core/shape/text/internal.rb +14 -12
  53. data/lib/thinreports/core/shape/text_block.rb +10 -10
  54. data/lib/thinreports/core/shape/text_block/format.rb +35 -33
  55. data/lib/thinreports/core/shape/text_block/formatter.rb +26 -24
  56. data/lib/thinreports/core/shape/text_block/formatter/basic.rb +25 -25
  57. data/lib/thinreports/core/shape/text_block/formatter/datetime.rb +15 -12
  58. data/lib/thinreports/core/shape/text_block/formatter/number.rb +52 -34
  59. data/lib/thinreports/core/shape/text_block/formatter/padding.rb +17 -14
  60. data/lib/thinreports/core/shape/text_block/interface.rb +25 -23
  61. data/lib/thinreports/core/shape/text_block/internal.rb +66 -68
  62. data/lib/thinreports/core/utils.rb +7 -3
  63. data/lib/thinreports/generator/pdf.rb +24 -25
  64. data/lib/thinreports/generator/pdf/document.rb +109 -110
  65. data/lib/thinreports/generator/pdf/document/draw_shape.rb +57 -51
  66. data/lib/thinreports/generator/pdf/document/draw_template_items.rb +50 -47
  67. data/lib/thinreports/generator/pdf/document/font.rb +67 -58
  68. data/lib/thinreports/generator/pdf/document/graphics.rb +32 -33
  69. data/lib/thinreports/generator/pdf/document/graphics/attributes.rb +121 -121
  70. data/lib/thinreports/generator/pdf/document/graphics/basic.rb +112 -114
  71. data/lib/thinreports/generator/pdf/document/graphics/image.rb +58 -150
  72. data/lib/thinreports/generator/pdf/document/graphics/text.rb +149 -137
  73. data/lib/thinreports/generator/pdf/document/page.rb +60 -64
  74. data/lib/thinreports/generator/pdf/document/parse_color.rb +37 -37
  75. data/lib/thinreports/generator/pdf/drawer/base.rb +41 -41
  76. data/lib/thinreports/generator/pdf/drawer/list.rb +56 -54
  77. data/lib/thinreports/generator/pdf/drawer/list_section.rb +42 -40
  78. data/lib/thinreports/generator/pdf/drawer/page.rb +101 -96
  79. data/lib/thinreports/generator/pdf/prawn_ext.rb +4 -30
  80. data/lib/thinreports/generator/pdf/prawn_ext/calc_image_dimensions.rb +32 -0
  81. data/lib/thinreports/generator/pdf/prawn_ext/width_of.rb +35 -0
  82. data/lib/thinreports/layout.rb +5 -7
  83. data/lib/thinreports/layout/base.rb +5 -9
  84. data/lib/thinreports/layout/format.rb +17 -13
  85. data/lib/thinreports/layout/legacy_schema.rb +17 -13
  86. data/lib/thinreports/layout/version.rb +22 -25
  87. data/lib/thinreports/report.rb +4 -6
  88. data/lib/thinreports/report/base.rb +24 -51
  89. data/lib/thinreports/report/internal.rb +13 -15
  90. data/lib/thinreports/report/page.rb +5 -11
  91. data/lib/thinreports/version.rb +2 -2
  92. data/thinreports.gemspec +10 -19
  93. metadata +13 -288
  94. data/.travis.yml +0 -19
  95. data/examples/character_spacing/character_spacing.rb +0 -8
  96. data/examples/character_spacing/character_spacing.tlf +0 -293
  97. data/examples/dynamic_image/dynamic_image.rb +0 -31
  98. data/examples/dynamic_image/dynamic_image.tlf +0 -661
  99. data/examples/dynamic_image/img200x100.png +0 -0
  100. data/examples/dynamic_image/img50x50.png +0 -0
  101. data/examples/dynamic_style/dynamic_style.rb +0 -150
  102. data/examples/dynamic_style/dynamic_style.tlf +0 -1835
  103. data/examples/dynamic_style/dynamic_style_in_list.tlf +0 -344
  104. data/examples/dynamic_style/image.png +0 -0
  105. data/examples/eudc/eudc.rb +0 -20
  106. data/examples/eudc/eudc.tlf +0 -180
  107. data/examples/eudc/eudc.ttf +0 -0
  108. data/examples/helper.rb +0 -50
  109. data/examples/hidden_shapes/hidden_shapes.rb +0 -9
  110. data/examples/hidden_shapes/hidden_shapes.tlf +0 -449
  111. data/examples/list_events/list_events.rb +0 -32
  112. data/examples/list_events/list_events.tlf +0 -361
  113. data/examples/list_manual_generation/list_manual_generation.rb +0 -22
  114. data/examples/list_manual_generation/list_manual_generation.tlf +0 -132
  115. data/examples/list_page_number/list_page_number.rb +0 -17
  116. data/examples/list_page_number/list_page_number.tlf +0 -254
  117. data/examples/page_number/page_number.rb +0 -33
  118. data/examples/page_number/page_number.tlf +0 -215
  119. data/examples/palleted_png/palleted_png.png +0 -0
  120. data/examples/palleted_png/palleted_png.rb +0 -11
  121. data/examples/palleted_png/palleted_png.tlf +0 -47
  122. data/examples/password_setting/password_setting.rb +0 -10
  123. data/examples/password_setting/password_setting.tlf +0 -45
  124. data/examples/report_callbacks/report_callbacks.rb +0 -14
  125. data/examples/report_callbacks/report_callbacks.tlf +0 -147
  126. data/examples/single_line_tblock/single_line_tblock.rb +0 -13
  127. data/examples/single_line_tblock/single_line_tblock.tlf +0 -170
  128. data/examples/tblock_overflow/tblock_overflow.rb +0 -20
  129. data/examples/tblock_overflow/tblock_overflow.tlf +0 -538
  130. data/examples/tblock_styles/font_size.tlf +0 -383
  131. data/examples/tblock_styles/tblock_styles.rb +0 -43
  132. data/examples/tblock_styles/tblock_styles.tlf +0 -889
  133. data/examples/text_align/text_align.rb +0 -8
  134. data/examples/text_align/text_align.tlf +0 -241
  135. data/examples/typeB_page_size/B4_ISO.tlf +0 -45
  136. data/examples/typeB_page_size/B4_JIS.tlf +0 -45
  137. data/examples/typeB_page_size/typeB_page_size.rb +0 -17
  138. data/examples/word_wrap/word_wrap.rb +0 -26
  139. data/examples/word_wrap/word_wrap.tlf +0 -297
  140. data/lib/thinreports/generator.rb +0 -29
  141. data/lib/thinreports/generator/base.rb +0 -40
  142. data/lib/thinreports/generator/configuration.rb +0 -31
  143. data/lib/thinreports/report/events.rb +0 -32
  144. data/test/data/font.ttf +0 -0
  145. data/test/data/image_normal.jpg +0 -0
  146. data/test/data/image_normal.png +0 -0
  147. data/test/data/image_normal_jpg_noext +0 -0
  148. data/test/data/image_normal_png_noext +0 -0
  149. data/test/data/image_pallete_based.png +0 -0
  150. data/test/data/legacy_layout/all-items.tlf +0 -1
  151. data/test/schema_helper.rb +0 -121
  152. data/test/test_helper.rb +0 -42
  153. data/test/tmp/.gitkeep +0 -0
  154. data/test/unit/core/format/test_base.rb +0 -152
  155. data/test/unit/core/shape/base/test_internal.rb +0 -87
  156. data/test/unit/core/shape/basic/test_block_format.rb +0 -23
  157. data/test/unit/core/shape/basic/test_block_interface.rb +0 -29
  158. data/test/unit/core/shape/basic/test_block_internal.rb +0 -55
  159. data/test/unit/core/shape/basic/test_format.rb +0 -37
  160. data/test/unit/core/shape/basic/test_interface.rb +0 -108
  161. data/test/unit/core/shape/basic/test_internal.rb +0 -55
  162. data/test/unit/core/shape/image_block/test_interface.rb +0 -24
  163. data/test/unit/core/shape/image_block/test_internal.rb +0 -31
  164. data/test/unit/core/shape/list/test_format.rb +0 -111
  165. data/test/unit/core/shape/list/test_manager.rb +0 -67
  166. data/test/unit/core/shape/list/test_page.rb +0 -82
  167. data/test/unit/core/shape/list/test_page_state.rb +0 -31
  168. data/test/unit/core/shape/list/test_section_format.rb +0 -36
  169. data/test/unit/core/shape/list/test_section_interface.rb +0 -75
  170. data/test/unit/core/shape/list/test_section_internal.rb +0 -50
  171. data/test/unit/core/shape/manager/test_format.rb +0 -38
  172. data/test/unit/core/shape/manager/test_internal.rb +0 -132
  173. data/test/unit/core/shape/manager/test_target.rb +0 -140
  174. data/test/unit/core/shape/page_number/test_format.rb +0 -55
  175. data/test/unit/core/shape/page_number/test_interface.rb +0 -33
  176. data/test/unit/core/shape/page_number/test_internal.rb +0 -81
  177. data/test/unit/core/shape/styles/test_base.rb +0 -191
  178. data/test/unit/core/shape/styles/test_basic.rb +0 -24
  179. data/test/unit/core/shape/styles/test_graphic.rb +0 -50
  180. data/test/unit/core/shape/styles/test_text.rb +0 -97
  181. data/test/unit/core/shape/text/test_format.rb +0 -44
  182. data/test/unit/core/shape/text/test_internal.rb +0 -20
  183. data/test/unit/core/shape/text_block/formatter/test_basic.rb +0 -24
  184. data/test/unit/core/shape/text_block/formatter/test_datetime.rb +0 -49
  185. data/test/unit/core/shape/text_block/formatter/test_number.rb +0 -76
  186. data/test/unit/core/shape/text_block/formatter/test_padding.rb +0 -77
  187. data/test/unit/core/shape/text_block/test_format.rb +0 -169
  188. data/test/unit/core/shape/text_block/test_formatter.rb +0 -28
  189. data/test/unit/core/shape/text_block/test_interface.rb +0 -63
  190. data/test/unit/core/shape/text_block/test_internal.rb +0 -128
  191. data/test/unit/core/test_shape.rb +0 -52
  192. data/test/unit/core/test_utils.rb +0 -68
  193. data/test/unit/generator/pdf/document/graphics/test_attributes.rb +0 -135
  194. data/test/unit/generator/pdf/document/graphics/test_basic.rb +0 -45
  195. data/test/unit/generator/pdf/document/graphics/test_image.rb +0 -150
  196. data/test/unit/generator/pdf/document/graphics/test_text.rb +0 -171
  197. data/test/unit/generator/pdf/document/test_font.rb +0 -84
  198. data/test/unit/generator/pdf/document/test_graphics.rb +0 -42
  199. data/test/unit/generator/pdf/document/test_page.rb +0 -122
  200. data/test/unit/generator/pdf/document/test_parse_color.rb +0 -30
  201. data/test/unit/generator/pdf/test_document.rb +0 -20
  202. data/test/unit/generator/test_base.rb +0 -40
  203. data/test/unit/generator/test_configuration.rb +0 -21
  204. data/test/unit/generator/test_pdf.rb +0 -24
  205. data/test/unit/layout/test_base.rb +0 -41
  206. data/test/unit/layout/test_format.rb +0 -100
  207. data/test/unit/layout/test_legacy_schema.rb +0 -574
  208. data/test/unit/layout/test_version.rb +0 -95
  209. data/test/unit/report/test_base.rb +0 -262
  210. data/test/unit/report/test_internal.rb +0 -206
  211. data/test/unit/test_config.rb +0 -51
  212. data/test/unit/test_layout.rb +0 -12
  213. data/test/unit/test_report.rb +0 -18
@@ -1,171 +0,0 @@
1
- # coding: utf-8
2
-
3
- require 'test_helper'
4
-
5
- class Thinreports::Generator::PDF::Graphics::TestText < Minitest::Test
6
- include Thinreports::TestHelper
7
-
8
- def setup
9
- @pdf = Thinreports::Generator::PDF::Document.new
10
- @pdf.internal.start_new_page
11
- end
12
-
13
- def exec_with_font_styles(attrs = nil, font = nil, &block)
14
- attrs ||= {styles: [:bold]}
15
- font ||= {name: 'IPAMincho', size: 18, color: 'ff0000'}
16
-
17
- @pdf.send(:with_font_styles, attrs, font, &block)
18
- end
19
-
20
- def exec_with_text_styles(attrs = {}, &block)
21
- default_attrs = {font: 'Helvetica',
22
- color: 'ff0000',
23
- size: 18}
24
- @pdf.send(:with_text_styles, default_attrs.merge(attrs), &block)
25
- end
26
-
27
- def test_with_text_styles_should_not_operate_when_color_is_none
28
- exec_with_text_styles(color: 'none') do |_attrs, _styles|
29
- flunk
30
- end
31
- end
32
-
33
- def test_with_text_styles_should_set_leading_via_line_height_attribute
34
- exec_with_text_styles(line_height: 30) do |attrs, _styles|
35
- expected = @pdf.send(:text_line_leading,
36
- @pdf.send(:s2f, 30),
37
- name: 'Helvetica', size: 18)
38
- assert_equal attrs[:leading], expected
39
- end
40
- end
41
-
42
- def test_with_text_styles_should_not_set_leading_when_line_height_is_not_specified
43
- exec_with_text_styles do |attrs, _styles|
44
- refute_includes attrs.keys, :leading
45
- end
46
- end
47
-
48
- def test_with_text_styles_should_set_character_spacing_via_letter_spacing_attribute
49
- exec_with_text_styles(letter_spacing: 5) do |attrs, _styles|
50
- assert_equal attrs[:character_spacing], @pdf.send(:s2f, 5)
51
- end
52
- end
53
-
54
- def test_with_text_styles_should_not_set_character_spacing_when_letter_spacing_is_not_specified
55
- exec_with_text_styles do |attrs, _styles|
56
- refute_includes attrs.keys, :character_spacing
57
- end
58
- end
59
-
60
- def test_with_text_styles_should_parse_color
61
- exec_with_text_styles(color: '#ff0000') do |_attrs, _styles|
62
- assert_equal @pdf.internal.fill_color, 'ff0000'
63
- end
64
- end
65
-
66
- def test_with_font_styles_should_set_fill_color_using_color_of_font
67
- exec_with_font_styles do |_attrs, _styles|
68
- assert_equal @pdf.internal.fill_color, 'ff0000'
69
- end
70
- end
71
-
72
- def test_with_font_styles_should_perform_manual_style_when_bold_style_cannot_be_applied
73
- exec_with_font_styles do |_attrs, styles|
74
- assert_empty styles
75
- end
76
- end
77
-
78
- def test_with_font_styles_should_perform_manual_style_when_italic_style_cannot_be_applied
79
- exec_with_font_styles do |_attrs, styles|
80
- assert_empty styles
81
- end
82
- end
83
-
84
- def test_with_font_styles_should_set_stroke_color_using_color_of_font_when_bold_style_cannot_be_applied
85
- exec_with_font_styles do |_attrs, _styles|
86
- assert_equal @pdf.internal.stroke_color, 'ff0000'
87
- end
88
- end
89
-
90
- def test_with_font_styles_should_set_line_width_calculated_from_font_size_when_bold_style_cannot_be_applied
91
- exec_with_font_styles do |_attrs, _styles|
92
- assert_equal @pdf.internal.line_width, 18 * 0.025
93
- end
94
- end
95
-
96
- def test_with_font_styles_should_set_mode_to_fill_stroke_when_bold_style_cannot_be_applied
97
- exec_with_font_styles do |attrs, _styles|
98
- assert_equal attrs[:mode], :fill_stroke
99
- end
100
- end
101
-
102
- def test_with_font_styles_should_not_perform_a_manual_style_when_bold_style_can_be_applied
103
- exec_with_font_styles(nil, name: 'Helvetica', size: 12, color: '0000ff') do |_attrs, styles|
104
- assert_includes styles, :bold
105
- end
106
- end
107
-
108
- def test_with_font_styles_should_not_perform_a_manual_style_when_italic_style_can_be_applied
109
- exec_with_font_styles({styles: [:italic]}, name: 'Helvetica', size: 12, color: 'ff0000') do |_attrs, styles|
110
- assert_includes styles, :italic
111
- end
112
- end
113
-
114
- def test_text_line_leading_should_return_a_specified_leading_value_minus_the_font_height
115
- font = {name: 'IPAMincho', size: 36}
116
- font_height = @pdf.internal.font(font[:name], size: font[:size]).height
117
-
118
- assert_equal @pdf.send(:text_line_leading, 100, font), 100 - font_height
119
- end
120
-
121
- def test_text_without_line_wrap_should_replace_the_spaces_NBSP
122
- assert_equal @pdf.send(:text_without_line_wrap, ' ' * 2), Prawn::Text::NBSP * 2
123
- end
124
-
125
- def test_text_box_should_not_raise_PrawnCannotFitError
126
- @pdf.text_box('foo', 0, 0, 1, 1, font: 'IPAMincho',
127
- size: 100,
128
- color: '000000')
129
- rescue Prawn::Errors::CannotFit
130
- flunk('Raise Prawn::Errors::CannotFit.')
131
- end
132
-
133
- def test_text_box_attrs_should_return_a_Hash_containing_a_at_and_width_options
134
- attrs = @pdf.send(:text_box_attrs, 0, 0, 50, 100)
135
-
136
- assert_equal attrs.values_at(:at, :width),
137
- [@pdf.send(:pos, 0, 0), @pdf.send(:s2f, 50)]
138
- end
139
-
140
- def test_text_box_attrs_should_return_a_Hash_which_doesnt_contain_the_single_line_option_when_single_is_true_but_overflow_is_expand
141
- attrs = @pdf.send(:text_box_attrs, 0, 0, 100, 100, single: true, overflow: :expand)
142
- refute attrs.key?(:single_line)
143
- end
144
-
145
- def test_text_box_attrs_should_return_a_Hash_containing_a_single_line_option_when_single_is_true_and_overflow_isnot_expand
146
- attrs = @pdf.send(:text_box_attrs, 0, 0, 100, 100, single: true, overflow: :truncate)
147
- assert_equal attrs[:single_line], true
148
- end
149
-
150
- def test_text_box_attrs_should_return_a_Hash_which_does_not_contain_a_height_option_when_single_is_true
151
- attrs = @pdf.send(:text_box_attrs, 0, 0, 100, 100, single: true)
152
- refute attrs.key?(:height)
153
- end
154
-
155
- def test_text_box_attrs_should_return_a_Hash_which_does_not_contain_a_single_line_option_when_single_is_not_specified
156
- attrs = @pdf.send(:text_box_attrs, 0, 0, 100, 100)
157
- refute attrs.key?(:single_line)
158
- end
159
-
160
- def test_text_box_attrs_should_return_a_Hash_containing_a_height_optin_when_single_is_not_specified
161
- attrs = @pdf.send(:text_box_attrs, 0, 0, 100, 200)
162
- assert_equal attrs[:height], 200
163
- end
164
-
165
- def test_text
166
- @pdf.expects(:text_box).
167
- with('contents', 100, 200, 150, 250, { overflow: :shirink_to_fit }).once
168
-
169
- @pdf.text('contents', 100, 200, 150, 250)
170
- end
171
- end
@@ -1,84 +0,0 @@
1
- # coding: utf-8
2
-
3
- require 'test_helper'
4
-
5
- class Thinreports::Generator::PDF::TestFont < Minitest::Test
6
- include Thinreports::TestHelper
7
-
8
- Font = Thinreports::Generator::PDF::Font
9
-
10
- def teardown
11
- # Reset font settings
12
- Thinreports.configure do |c|
13
- c.fallback_fonts = []
14
- end
15
- end
16
-
17
- def test_setup_fonts
18
- pdf = document.pdf
19
-
20
- Font::BUILTIN_FONTS.each do |name, font|
21
- assert_equal font, pdf.font_families[name]
22
- end
23
-
24
- Font::PRAWN_BUINTIN_FONT_ALIASES.each do |alias_font, original_font|
25
- assert_equal pdf.font_families[alias_font],
26
- pdf.font_families[original_font]
27
- end
28
-
29
- assert_equal Font::DEFAULT_FALLBACK_FONTS, pdf.fallback_fonts[-2..-1]
30
- end
31
-
32
- def test_setup_fonts_with_custom_fallback_fonts
33
- Thinreports.configure do |c|
34
- c.fallback_fonts = []
35
- end
36
- assert_equal Font::DEFAULT_FALLBACK_FONTS,
37
- document.pdf.fallback_fonts
38
-
39
- Thinreports.configure do |c|
40
- c.fallback_fonts = 'IPAGothic'
41
- end
42
- assert_equal ['IPAGothic'] + Font::DEFAULT_FALLBACK_FONTS,
43
- document.pdf.fallback_fonts
44
-
45
- Thinreports.configure do |c|
46
- c.fallback_fonts = ['IPAMincho']
47
- end
48
- assert_equal ['IPAMincho'] + Font::DEFAULT_FALLBACK_FONTS,
49
- document.pdf.fallback_fonts
50
-
51
- Thinreports.configure do |c|
52
- c.fallback_fonts = ['IPAMincho', data_file('font.ttf')]
53
- end
54
- assert_equal ['IPAMincho', 'Custom-fallback-font1'] + Font::DEFAULT_FALLBACK_FONTS,
55
- document.pdf.fallback_fonts
56
- end
57
-
58
- def test_setup_fonts_with_unknown_custom_fallback_fonts
59
- Thinreports.configure do |c|
60
- c.fallback_fonts = ['/path/to/unknown.ttf']
61
- end
62
-
63
- assert_raises Thinreports::Errors::FontFileNotFound do
64
- create_document
65
- end
66
- end
67
-
68
- def test_font_helpers
69
- doc = document
70
-
71
- assert_equal 'Helvetica', doc.default_family
72
-
73
- assert_equal 'Helvetica', doc.default_family_if_missing('unknown')
74
- assert_equal 'IPAMincho', doc.default_family_if_missing('IPAMincho')
75
-
76
- assert_equal false, doc.font_has_style?('IPAMincho', :bold)
77
- assert_equal true, doc.font_has_style?('Courier New', :bold)
78
- end
79
-
80
- def document
81
- Thinreports::Generator::PDF::Document.new
82
- end
83
- alias_method :create_document, :document
84
- end
@@ -1,42 +0,0 @@
1
- # coding: utf-8
2
-
3
- require 'test_helper'
4
-
5
- class Thinreports::Generator::PDF::TestGraphics < Minitest::Test
6
- include Thinreports::TestHelper
7
-
8
- class TestGraphics
9
- attr_accessor :pdf
10
- include Thinreports::Generator::PDF::Graphics
11
- end
12
-
13
- def setup
14
- @g = TestGraphics.new
15
- @g.pdf = mock('pdf')
16
- end
17
-
18
- def test_setup_custom_graphic_states
19
- @g.pdf.expects(:line_width).
20
- with(TestGraphics::BASE_LINE_WIDTH).once
21
-
22
- @g.send(:setup_custom_graphic_states)
23
- end
24
-
25
- def test_line_width
26
- @g.pdf.
27
- expects(:line_width).
28
- with(10 * TestGraphics::BASE_LINE_WIDTH).once
29
-
30
- @g.send(:line_width, 10)
31
- end
32
-
33
- def test_save_graphics_state
34
- @g.pdf.expects(:save_graphics_state).once
35
- @g.send(:save_graphics_state)
36
- end
37
-
38
- def test_restore_graphics_state
39
- @g.pdf.expects(:restore_graphics_state).once
40
- @g.send(:restore_graphics_state)
41
- end
42
- end
@@ -1,122 +0,0 @@
1
- # coding: utf-8
2
-
3
- require 'test_helper'
4
-
5
- class Thinreports::Generator::PDF::Document::TestPage < Minitest::Test
6
- include Thinreports::TestHelper
7
-
8
- def create_pdf
9
- @pdf = Thinreports::Generator::PDF::Document.new
10
- end
11
-
12
- def test_page_geometry
13
- page_geometry = ::PDF::Core::PageGeometry::SIZES
14
- assert_equal page_geometry['B4_JIS'], [728.5, 1031.8]
15
- assert_equal page_geometry['B5_JIS'], [515.9, 728.5]
16
- end
17
-
18
- def test_B4_paper_size_should_be_converted_to_B4_JIS
19
- create_pdf
20
-
21
- format = Thinreports::Layout::Format.build(layout_file.path)
22
- format.stubs(page_paper_type: 'B4')
23
-
24
- @pdf.start_new_page(format)
25
- assert_equal @pdf.internal.page.size, 'B4_JIS'
26
- end
27
-
28
- def test_B4_ISO_paper_size_should_be_converted_to_B4
29
- create_pdf
30
-
31
- format = Thinreports::Layout::Format.build(layout_file.path)
32
- format.stubs(page_paper_type: 'B4_ISO')
33
-
34
- @pdf.start_new_page(format)
35
- assert_equal @pdf.internal.page.size, 'B4'
36
- end
37
-
38
- def test_change_page_format_should_return_true_at_first_time
39
- create_pdf
40
- format = Thinreports::Layout::Format.build(layout_file.path)
41
-
42
- assert_equal @pdf.send(:change_page_format?, format), true
43
- end
44
-
45
- def test_change_page_format_should_return_false_when_given_the_same_format
46
- create_pdf
47
- format = Thinreports::Layout::Format.build(layout_file.path)
48
-
49
- @pdf.instance_variable_set(:@current_page_format, format)
50
- assert_equal @pdf.send(:change_page_format?, format), false
51
- end
52
-
53
- def test_change_page_format_should_return_true_when_given_the_other_format
54
- create_pdf
55
- format1 = Thinreports::Layout::Format.build(layout_file.path)
56
- format2 = Thinreports::Layout::Format.build(layout_file.path)
57
-
58
- @pdf.instance_variable_set(:@current_page_format, format1)
59
- assert_equal @pdf.send(:change_page_format?, format2), true
60
- end
61
-
62
- def test_new_basic_page_options
63
- format = Thinreports::Layout::Format.build(layout_file.path)
64
- options = create_pdf.send(:new_basic_page_options, format)
65
-
66
- assert_equal options[:layout], format.page_orientation.to_sym
67
- assert_equal options[:size], format.page_paper_type
68
- end
69
-
70
- def test_new_basic_page_options_when_the_layout_has_customize_size
71
- format = stub user_paper_type?: true,
72
- page_width: 100,
73
- page_height: 100,
74
- page_orientation: 'portrait'
75
-
76
- options = create_pdf.send(:new_basic_page_options, format)
77
- assert_equal options[:size], [100, 100]
78
- end
79
-
80
- def test_start_new_page_should_create_stamp
81
- create_pdf
82
- format = Thinreports::Layout::Format.build(layout_file.path)
83
- @pdf.start_new_page(format)
84
-
85
- assert_includes @pdf.send(:format_stamp_registry), format.identifier
86
- end
87
-
88
- def test_start_new_page_should_not_create_stamp
89
- create_pdf
90
- format = Thinreports::Layout::Format.build(layout_file.path)
91
- @pdf.start_new_page(format)
92
- @pdf.start_new_page(format)
93
-
94
- assert_equal @pdf.send(:format_stamp_registry).size, 1
95
- end
96
-
97
- def test_start_new_page_should_stamp_constantly
98
- create_pdf
99
- format = Thinreports::Layout::Format.build(layout_file.path)
100
- @pdf.expects(:stamp).with(format.identifier.to_s).times(2)
101
-
102
- @pdf.start_new_page(format)
103
- @pdf.start_new_page(format)
104
- end
105
-
106
- def test_add_blank_page_should_create_an_A4_size_page_in_first_page
107
- create_pdf
108
- @pdf.internal.expects(:start_new_page).with(size: 'A4').once
109
-
110
- @pdf.add_blank_page
111
- end
112
-
113
- def test_add_blank_page_should_call_with_no_arguments_since_second_page
114
- create_pdf
115
- format = Thinreports::Layout::Format.build(layout_file.path)
116
-
117
- @pdf.start_new_page(format)
118
- @pdf.internal.expects(:start_new_page).with({}).once
119
-
120
- @pdf.add_blank_page
121
- end
122
- end
@@ -1,30 +0,0 @@
1
- # coding: utf-8
2
-
3
- require 'test_helper'
4
-
5
- class Thinreports::Generator::PDF::TestParseColor < Minitest::Test
6
- include Thinreports::TestHelper
7
-
8
- class TestColorParser
9
- include Thinreports::Generator::PDF::ParseColor
10
- end
11
-
12
- def setup
13
- @parser = TestColorParser.new
14
- end
15
-
16
- def test_parse_color_with_hexcolor
17
- assert_equal @parser.parse_color('#ff0000'), 'ff0000'
18
- assert_equal @parser.parse_color('000000'), '000000'
19
- end
20
-
21
- def test_parse_color_with_colorname
22
- assert_equal @parser.parse_color('red'), 'ff0000'
23
- end
24
-
25
- def test_parse_color_with_colorname_raise_when_unknown_name_given
26
- assert_raises Thinreports::Errors::UnsupportedColorName do
27
- @parser.parse_color('whitesmoke')
28
- end
29
- end
30
- end