thinreports 0.6.0.pre3 → 0.7.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 (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
@@ -0,0 +1,219 @@
1
+ # coding: utf-8
2
+
3
+ require 'test/unit/helper'
4
+
5
+ class ThinReports::Core::Shape::Style::TestBase < MiniTest::Unit::TestCase
6
+ include ThinReports::TestHelpers
7
+
8
+ # Alias
9
+ Style = ThinReports::Core::Shape::Style::Base
10
+
11
+ def create_basic_format(attrs = {})
12
+ ThinReports::Core::Shape::Basic::Format.new('svg' => {'attrs' => attrs})
13
+ end
14
+
15
+ def create_style(base = {})
16
+ Style.new(create_basic_format(base))
17
+ end
18
+
19
+ def create_new_style(base = {}, &block)
20
+ klass = ::Class.new(Style, &block)
21
+ klass.new(create_basic_format(base))
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
+ style2 = create_new_style {
59
+ style_accessible :bar, :fuga
60
+ }
61
+ assert_equal style1.class.accessible_styles, [:hoge, :foo]
62
+ end
63
+
64
+ def test_self_accessible_styles_variable_should_be_inherited_to_SubClass
65
+ super_klass = ::Class.new(Style) {
66
+ style_accessible :hoge, :foo
67
+ }
68
+ sub_klass = ::Class.new(super_klass)
69
+
70
+ assert_equal sub_klass.accessible_styles, super_klass.accessible_styles
71
+ end
72
+
73
+ def test_self_accessible_styles_variables_of_SubClass_should_not_interfere_mutually
74
+ super_klass = ::Class.new(Style) {
75
+ style_accessible :foo, :bar
76
+ }
77
+ sub_klass1 = ::Class.new(super_klass)
78
+ sub_klass2 = ::Class.new(super_klass)
79
+
80
+ refute_same sub_klass1.accessible_styles, sub_klass2.accessible_styles
81
+ end
82
+
83
+ def test_read_internal_style_should_return_style_of_styles_when_style_is_found_in_styles
84
+ style = create_style('hoge' => 'base_style')
85
+ style.write_internal_style('hoge', 'new_style')
86
+
87
+ assert_equal style.read_internal_style('hoge'), 'new_style'
88
+ end
89
+
90
+ def test_read_internal_style_should_return_style_of_base_when_style_is_not_found_in_styles
91
+ style = create_style('hoge' => 'base_style')
92
+ assert_equal style.read_internal_style('hoge'), 'base_style'
93
+ end
94
+
95
+ def test_write_internal_style_should_properly_set_style_to_the_styles
96
+ style = create_style({})
97
+ style.write_internal_style('hoge', 'hoge_style')
98
+
99
+ assert_equal style.styles['hoge'], 'hoge_style'
100
+ end
101
+
102
+ def test_finalized_svg_attributes_should_return_the_Hash_of_having_combined_styles_and_base
103
+ style = create_style('hoge' => 'base_hoge_style',
104
+ 'foo' => 'base_foo_style')
105
+ style.write_internal_style('hoge', 'modified_hoge_style')
106
+
107
+ assert_equal style.finalized_svg_attributes.values_at('hoge', 'foo'),
108
+ ['modified_hoge_style', 'base_foo_style']
109
+ end
110
+
111
+ def test_finalized_svg_attributes_should_return_a_base_when_styles_is_empty
112
+ style = create_style
113
+ assert_equal style.finalized_svg_attributes, style.instance_variable_get(:@base_styles)
114
+ end
115
+
116
+ def test_finalized_svg_attributes_should_return_a_cloned_base_when_styles_is_empty
117
+ style = create_style
118
+ refute_same style.finalized_svg_attributes, style.instance_variable_get(:@base_styles)
119
+ end
120
+
121
+ def test_finalized_svg_attributes_should_return_same_value_constantly
122
+ style = create_style('hoge' => 'hoge_style')
123
+ style.write_internal_style('foo', 'foo_style')
124
+
125
+ assert_same style.finalized_svg_attributes,
126
+ style.finalized_svg_attributes
127
+ end
128
+
129
+ def test_svg_attrs_should_operate_like_a_finalized_svg_attributes
130
+ style = create_style('hoge' => 'hoge_style',
131
+ 'foo' => 'foo_style')
132
+ style.write_internal_style('foo', 'overwrite_foo_style')
133
+
134
+ assert_same style.finalized_svg_attributes, style.svg_attrs
135
+ end
136
+
137
+ def test_has_style_asker_should_return_true_when_specified_style_method_is_accessible
138
+ style = create_new_style {
139
+ style_accessible :hoge, :foo
140
+ }
141
+ assert_equal style.has_style?(:foo), true
142
+ end
143
+
144
+ def test_has_style_asker_should_return_false_when_specified_style_method_is_not_accessible
145
+ style = create_new_style {
146
+ style_accessible :foo
147
+ }
148
+ assert_equal style.has_style?(:hoge), false
149
+ end
150
+
151
+ def test_verify_style_value_should_raise_when_value_is_not_included_in_list
152
+ assert_raises ArgumentError do
153
+ create_style.send(:verify_style_value, :invalid, [:hoge, :foo, :bar])
154
+ end
155
+ end
156
+
157
+ def test_verify_style_value_should_not_raise_when_value_is_found_in_list
158
+ create_style.send(:verify_style_value, :valid, [:hoge, :valid, :foo])
159
+ rescue ArgumentError
160
+ flunk
161
+ end
162
+
163
+ def test_reader_method_caller_should_properly_delegate_to_real_method
164
+ style = create_new_style('hoge_style' => 'hoge_style_value') {
165
+ style_accessible :hoge
166
+ style_reader :hoge, 'hoge_style'
167
+ }
168
+ assert_equal style[:hoge], 'hoge_style_value'
169
+ end
170
+
171
+ def test_writer_method_caller_should_properly_delegate_to_real_method
172
+ style = create_new_style {
173
+ style_accessible :hoge
174
+ style_accessor :hoge, 'hoge_style'
175
+ }
176
+ style[:hoge] = 'hoge_style_value'
177
+ assert_equal style.hoge, 'hoge_style_value'
178
+ end
179
+
180
+ def test_reader_method_caller_should_raise_when_style_is_not_accessible
181
+ assert_raises ThinReports::Errors::UnknownShapeStyleName do
182
+ create_new_style[:unknown]
183
+ end
184
+ end
185
+
186
+ def test_writer_method_caller_should_raise_when_style_is_not_accessible
187
+ assert_raises ThinReports::Errors::UnknownShapeStyleName do
188
+ create_new_style[:unknown] = 'value'
189
+ end
190
+ end
191
+
192
+ def test_copy_should_return_the_instance_of_the_same_class_as_itself
193
+ style = create_style
194
+ assert_instance_of Style, style.copy
195
+ end
196
+
197
+ def test_styles_of_copied_style_should_not_same_the_styles_of_original
198
+ style = create_style
199
+ refute_same style.styles, style.copy.styles
200
+ end
201
+
202
+ def test_styles_of_copied_style_should_equal_the_style_of_original
203
+ style = create_style
204
+ style.write_internal_style('foo', 'foo_value')
205
+ assert_equal style.styles['foo'], style.copy.styles['foo']
206
+ end
207
+
208
+ def test_identifier_should_return_empty_string_when_the_style_is_not_set
209
+ style = create_style
210
+ assert_equal style.identifier, ''
211
+ end
212
+
213
+ def test_identifier_should_return_the_same_as_hash_value_of_styles_when_style_is_set_something
214
+ style = create_style
215
+ style.write_internal_style('foo', 'foo_value')
216
+
217
+ assert_equal style.identifier, style.styles.hash.to_s
218
+ end
219
+ end
@@ -0,0 +1,24 @@
1
+ # coding: utf-8
2
+
3
+ require 'test/unit/helper'
4
+
5
+ class ThinReports::Core::Shape::Style::TestBasic < MiniTest::Unit::TestCase
6
+ include ThinReports::TestHelpers
7
+
8
+ def create_basic_style(format_config = {})
9
+ format = ThinReports::Core::Shape::Basic::Format.new(format_config)
10
+ ThinReports::Core::Shape::Style::Basic.new(format)
11
+ end
12
+
13
+ def test_visible_should_return_visibility_of_format_as_default
14
+ style = create_basic_style('display' => 'false')
15
+ assert_equal style.visible, false
16
+ end
17
+
18
+ def test_visible_should_properly_set_visibility
19
+ style = create_basic_style('display' => 'false')
20
+ style.visible = true
21
+
22
+ assert_equal style.visible, true
23
+ end
24
+ end
@@ -0,0 +1,69 @@
1
+ # coding: utf-8
2
+
3
+ require 'test/unit/helper'
4
+
5
+ class ThinReports::Core::Shape::Style::TestGraphic < MiniTest::Unit::TestCase
6
+ include ThinReports::TestHelpers
7
+
8
+ def create_graphic_style
9
+ format = ThinReports::Core::Shape::Basic::Format.new({})
10
+ ThinReports::Core::Shape::Style::Graphic.new(format)
11
+ end
12
+
13
+ def test_border_color_should_properly_set_to_internal_styles_as_stroke_style
14
+ style = create_graphic_style
15
+ style.border_color = '#ff0000'
16
+
17
+ assert_equal style.styles['stroke'], '#ff0000'
18
+ end
19
+
20
+ def test_border_width_should_properly_set_to_internal_styles_as_stroke_width_style
21
+ style = create_graphic_style
22
+ style.border_width = 1
23
+
24
+ assert_equal style.styles['stroke-width'], 1
25
+ end
26
+
27
+ def test_border_width_should_set_stroke_opacity_to_1_when_width_is_not_zero
28
+ style = create_graphic_style
29
+ style.border_width = 5
30
+
31
+ assert_equal style.styles['stroke-opacity'], '1'
32
+ end
33
+
34
+ def test_fill_color_should_properly_set_to_internal_styles_as_fill_style
35
+ style = create_graphic_style
36
+ style.fill_color = '#0000ff'
37
+
38
+ assert_equal style.styles['fill'], '#0000ff'
39
+ end
40
+
41
+ def test_fill_should_operate_like_the_fill_color_method
42
+ style = create_graphic_style
43
+ style.fill = '#ff0000'
44
+
45
+ assert_same style.fill_color, style.fill
46
+ end
47
+
48
+ def test_stroke_should_operate_like_the_border_width_method
49
+ style = create_graphic_style
50
+ style.stroke = 5
51
+
52
+ assert_same style.border_width, style.stroke
53
+ end
54
+
55
+ def test_border_should_return_an_Array_included_border_width_and_border_color
56
+ style = create_graphic_style
57
+ style.border_width = 1
58
+ style.border_color = '#ff0000'
59
+
60
+ assert_equal style.border, [style.border_width, style.border_color]
61
+ end
62
+
63
+ def test_border_should_properly_set_both_border_width_and_border_color_from_the_specified_array_argument
64
+ style = create_graphic_style
65
+ style.border = [5, '#000000']
66
+
67
+ assert_equal style.border, [5, '#000000']
68
+ end
69
+ end
@@ -0,0 +1,318 @@
1
+ # coding: utf-8
2
+
3
+ require 'test/unit/helper'
4
+
5
+ class ThinReports::Core::Shape::Style::TestText < MiniTest::Unit::TestCase
6
+ include ThinReports::TestHelpers
7
+
8
+ def create_format(format = {})
9
+ ThinReports::Core::Shape::Text::Format.new(format)
10
+ end
11
+
12
+ def create_text_style(format = nil)
13
+ format ||= create_format
14
+ ThinReports::Core::Shape::Style::Text.new(format)
15
+ end
16
+
17
+ def test_bold_should_return_true_when_font_weight_property_of_format_is_bold
18
+ format = create_format('svg' => {'attrs' => {'font-weight' => 'bold'}})
19
+ style = create_text_style(format)
20
+
21
+ assert_equal style.bold, true
22
+ end
23
+
24
+ def test_bold_should_return_false_when_font_weight_property_of_format_is_not_bold
25
+ format = create_format('svg' => {'attrs' => {'font-weight' => 'normal'}})
26
+ style = create_text_style(format)
27
+
28
+ assert_equal style.bold, false
29
+ end
30
+
31
+ def test_bold_should_set_normal_to_font_weight_style_when_value_is_false
32
+ style = create_text_style
33
+ style.bold = false
34
+
35
+ assert_equal style.styles['font-weight'], 'normal'
36
+ end
37
+
38
+ def test_bold_should_set_bold_to_font_weight_style_when_value_is_true
39
+ style = create_text_style
40
+ style.bold = true
41
+
42
+ assert_equal style.styles['font-weight'], 'bold'
43
+ end
44
+
45
+ def test_bold_should_return_true_when_font_weight_of_internal_style_is_bold
46
+ style = create_text_style
47
+ style.styles['font-weight'] = 'bold'
48
+
49
+ assert_equal style.bold, true
50
+ end
51
+
52
+ def test_bold_should_return_false_when_font_weight_of_internal_style_is_not_bold
53
+ style = create_text_style
54
+ style.styles['font-weight'] = 'normal'
55
+
56
+ assert_equal style.bold, false
57
+ end
58
+
59
+ def test_italic_should_return_true_when_font_style_property_of_format_is_italic
60
+ format = create_format('svg' => {'attrs' => {'font-style' => 'italic'}})
61
+ style = create_text_style(format)
62
+
63
+ assert_equal style.italic, true
64
+ end
65
+
66
+ def test_italic_should_return_false_when_font_style_property_of_format_is_not_italic
67
+ format = create_format('svg' => {'attrs' => {'font-style' => 'normal'}})
68
+ style = create_text_style(format)
69
+
70
+ assert_equal style.italic, false
71
+ end
72
+
73
+ def test_italic_should_set_normal_to_font_style_style_when_value_is_false
74
+ style = create_text_style
75
+ style.italic = false
76
+
77
+ assert_equal style.styles['font-style'], 'normal'
78
+ end
79
+
80
+ def test_italic_should_set_italic_to_font_style_style_when_value_is_true
81
+ style = create_text_style
82
+ style.italic = true
83
+
84
+ assert_equal style.styles['font-style'], 'italic'
85
+ end
86
+
87
+ def test_italic_should_return_false_when_font_style_of_internal_style_is_not_italic
88
+ style = create_text_style
89
+ style.styles['font-style'] = 'normal'
90
+
91
+ assert_equal style.italic, false
92
+ end
93
+
94
+ def test_italic_should_return_true_when_font_style_of_internal_style_is_italic
95
+ style = create_text_style
96
+ style.styles['font-style'] = 'italic'
97
+
98
+ assert_equal style.italic, true
99
+ end
100
+
101
+ def test_underline_should_return_true_when_underline_is_included_in_text_decoration_property_of_format
102
+ format = create_format('svg' => {'attrs' => {'text-decoration' => 'underline line-through'}})
103
+ style = create_text_style(format)
104
+
105
+ assert_equal style.underline, true
106
+ end
107
+
108
+ def test_underline_should_return_false_when_underline_is_not_included_in_text_decoration_property_of_format
109
+ format = create_format('svg' => {'attrs' => {'text-decoration' => 'line-through'}})
110
+ style = create_text_style(format)
111
+
112
+ assert_equal style.underline, false
113
+ end
114
+
115
+ def test_underline_should_return_true_when_underline_is_included_in_text_decoration_of_internal_style
116
+ style = create_text_style
117
+ style.styles['text-decoration'] = 'underline line-through'
118
+
119
+ assert_equal style.underline, true
120
+ end
121
+
122
+ def test_underline_should_return_false_when_underline_is_not_included_in_text_decoration_of_internal_style
123
+ style = create_text_style
124
+ style.styles['text-decoration'] = 'none'
125
+
126
+ assert_equal style.underline, false
127
+ end
128
+
129
+ def test_underline_should_include_underline_in_text_decoration_when_value_is_true
130
+ format = create_format('svg' => {'attrs' => {'text-decoration' => 'line-through'}})
131
+ style = create_text_style(format)
132
+ style.underline = true
133
+
134
+ assert_includes style.styles['text-decoration'], 'underline'
135
+ end
136
+
137
+ def test_underline_should_remove_underline_from_text_decoration_when_value_is_false
138
+ format = create_format('svg' => {'attrs' => {'text-decoration' => 'underline line-through'}})
139
+ style = create_text_style(format)
140
+ style.underline = false
141
+
142
+ refute_includes style.styles['text-decoration'], 'underline'
143
+ end
144
+
145
+ def test_linethrough_should_return_true_when_line_through_is_included_in_text_decoration_property_of_format
146
+ format = create_format('svg' => {'attrs' => {'text-decoration' => 'underline line-through'}})
147
+ style = create_text_style(format)
148
+
149
+ assert_equal style.linethrough, true
150
+ end
151
+
152
+ def test_linethrough_should_return_false_when_line_through_is_not_included_in_text_decoration_property_of_format
153
+ format = create_format('svg' => {'attrs' => {'text-decoration' => 'underline'}})
154
+ style = create_text_style(format)
155
+
156
+ assert_equal style.linethrough, false
157
+ end
158
+
159
+ def test_linethrough_should_return_true_when_line_through_is_included_in_text_decoration_of_internal_style
160
+ style = create_text_style
161
+ style.styles['text-decoration'] = 'underline line-through'
162
+
163
+ assert_equal style.linethrough, true
164
+ end
165
+
166
+ def test_linethrough_should_return_false_when_line_through_is_not_included_in_text_decoration_of_internal_style
167
+ style = create_text_style
168
+ style.styles['text-decoration'] = 'underline'
169
+
170
+ assert_equal style.linethrough, false
171
+ end
172
+
173
+ def test_linethrough_should_include_line_through_in_text_decoration_when_value_is_true
174
+ format = create_format('svg' => {'attrs' => {'text-decoration' => 'none'}})
175
+ style = create_text_style(format)
176
+ style.linethrough = true
177
+
178
+ assert_includes style.styles['text-decoration'], 'line-through'
179
+ end
180
+
181
+ def test_linethrough_should_remove_line_through_from_text_decoration_when_value_is_false
182
+ format = create_format('svg' => {'attrs' => {'text-decoration' => 'underline line-through'}})
183
+ style = create_text_style(format)
184
+ style.linethrough = false
185
+
186
+ refute_includes style.styles['text-decoration'], 'line-through'
187
+ end
188
+
189
+ def test_text_decoration_should_return_none
190
+ assert_equal create_text_style.send(:text_decoration, false, false), 'none'
191
+ end
192
+
193
+ def test_text_decoration_should_return_underline
194
+ assert_equal create_text_style.send(:text_decoration, true, false), 'underline'
195
+ end
196
+
197
+ def test_text_decoration_should_return_line_through
198
+ assert_equal create_text_style.send(:text_decoration, false, true), 'line-through'
199
+ end
200
+
201
+ def test_text_decoration_should_return_underline_line_through
202
+ assert_equal create_text_style.send(:text_decoration, true, true), 'underline line-through'
203
+ end
204
+
205
+ def test_interface_text_align_should_return_Symbol_left_when_value_is_undefined
206
+ assert_equal create_text_style.send(:interface_text_align, nil), :left
207
+ end
208
+
209
+ def test_interface_text_align_should_return_Symbol_left_when_value_is_String_start
210
+ assert_equal create_text_style.send(:interface_text_align, 'start'), :left
211
+ end
212
+
213
+ def test_interface_text_align_should_return_Symbol_left_when_value_is_unknown_align_type
214
+ assert_equal create_text_style.send(:interface_text_align, 'unknown'), :left
215
+ end
216
+
217
+ def test_interface_text_align_should_return_Symbol_center_when_value_is_String_middle
218
+ assert_equal create_text_style.send(:interface_text_align, 'middle'), :center
219
+ end
220
+
221
+ def test_interface_text_align_should_return_Symbol_right_when_value_is_String_end
222
+ assert_equal create_text_style.send(:interface_text_align, 'end'), :right
223
+ end
224
+
225
+ def test_internal_text_align_should_return_nil_when_value_is_unknown
226
+ assert_equal create_text_style.send(:internal_text_align, :unknown), nil
227
+ end
228
+
229
+ def test_internal_text_align_should_return_String_start_when_value_is_Symbol_left
230
+ assert_equal create_text_style.send(:internal_text_align, :left), 'start'
231
+ end
232
+
233
+ def test_internal_text_align_should_return_String_middle_when_value_is_Symbol_center
234
+ assert_equal create_text_style.send(:internal_text_align, :center), 'middle'
235
+ end
236
+
237
+ def test_internal_text_align_should_return_String_end_when_value_is_Symbol_right
238
+ assert_equal create_text_style.send(:internal_text_align, :right), 'end'
239
+ end
240
+
241
+ def test_align_should_properly_return_align_type_with_reference_to_text_anchor_property_of_format
242
+ result = []
243
+
244
+ format_left = create_format('svg' => {'attrs' => {'text-anchor' => 'start'}})
245
+ format_center = create_format('svg' => {'attrs' => {'text-anchor' => 'middle'}})
246
+ format_right = create_format('svg' => {'attrs' => {'text-anchor' => 'end'}})
247
+
248
+ result << create_text_style(format_left).align
249
+ result << create_text_style(format_center).align
250
+ result << create_text_style(format_right).align
251
+
252
+ assert_equal result, [:left, :center, :right]
253
+ end
254
+
255
+ def test_copy_should_properly_copy_the_valign_property_of_the_original
256
+ style = create_text_style
257
+ style.valign = :center
258
+
259
+ assert_equal style.copy.valign, :center
260
+ end
261
+
262
+ def test_align_should_property_return_align_type_with_reference_to_text_anchor_of_internal_style
263
+ style = create_text_style
264
+ style.styles['text-anchor'] = 'middle'
265
+
266
+ assert_equal style.align, :center
267
+ end
268
+
269
+ def test_align_should_set_interface_align_type_to_text_anchor
270
+ style = create_text_style
271
+ style.align = :right
272
+
273
+ assert_equal style.styles['text-anchor'], 'end'
274
+ end
275
+
276
+ def test_align_should_raise_when_the_specified_type_is_unknown
277
+ assert_raises ArgumentError do
278
+ create_text_style.align = :unknown
279
+ end
280
+ end
281
+
282
+ def test_valign_should_return_top_when_valign_of_format_is_blank
283
+ assert_equal create_text_style.valign, :top
284
+ end
285
+
286
+ def test_valign_should_return_valign_type_of_format_as_default
287
+ format = create_format('valign' => 'bottom')
288
+ style = create_text_style(format)
289
+
290
+ assert_equal style.valign, :bottom
291
+ end
292
+
293
+ def test_valign_should_properly_set_valign_type
294
+ style = create_text_style
295
+ style.valign = :center
296
+
297
+ assert_equal style.valign, :center
298
+ end
299
+
300
+ def test_valign_should_raise_when_the_specified_type_is_unknown
301
+ assert_raises ArgumentError do
302
+ create_text_style.valign = :unknonw
303
+ end
304
+ end
305
+
306
+ def test_identifier_should_return_the_same_value_as_create_identifier_method_when_valign_has_not_been_changed
307
+ style = create_text_style
308
+ assert_equal style.identifier, style.send(:create_identifier, style.styles)
309
+ end
310
+
311
+ def test_identifier_should_return_the_value_which_added_valign_to_the_value_of_create_identifier_when_valign_has_been_changed
312
+ style = create_text_style
313
+ style.valign = :bottom
314
+
315
+ assert_equal style.identifier,
316
+ style.send(:create_identifier, style.styles) + 'bottom'
317
+ end
318
+ end