openxml-docx 0.9.0 → 0.10.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 (211) hide show
  1. checksums.yaml +4 -4
  2. data/Gemfile.lock +4 -4
  3. data/examples/drawing-ml +134 -0
  4. data/examples/table +28 -0
  5. data/lib/openxml/docx.rb +9 -0
  6. data/lib/openxml/docx/attribute_builder.rb +17 -4
  7. data/lib/openxml/docx/elements/absolute_position_tab.rb +4 -19
  8. data/lib/openxml/docx/elements/bidi_embed.rb +1 -10
  9. data/lib/openxml/docx/elements/bidi_override.rb +1 -9
  10. data/lib/openxml/docx/elements/break.rb +3 -14
  11. data/lib/openxml/docx/elements/control.rb +5 -2
  12. data/lib/openxml/docx/elements/deleted_text.rb +1 -1
  13. data/lib/openxml/docx/elements/drawing.rb +9 -0
  14. data/lib/openxml/docx/elements/element.rb +2 -1
  15. data/lib/openxml/docx/elements/embed_bold.rb +25 -0
  16. data/lib/openxml/docx/elements/embed_bold_italic.rb +25 -0
  17. data/lib/openxml/docx/elements/embed_italic.rb +25 -0
  18. data/lib/openxml/docx/elements/embed_regular.rb +25 -0
  19. data/lib/openxml/docx/elements/family.rb +22 -0
  20. data/lib/openxml/docx/elements/font.rb +14 -0
  21. data/lib/openxml/docx/elements/grid_column.rb +2 -2
  22. data/lib/openxml/docx/elements/group_shape.rb +10 -0
  23. data/lib/openxml/docx/elements/markup_compatibility_alternate_content.rb +10 -0
  24. data/lib/openxml/docx/elements/markup_compatibility_choice.rb +13 -0
  25. data/lib/openxml/docx/elements/markup_compatibility_fallback.rb +10 -0
  26. data/lib/openxml/docx/elements/paper_source.rb +4 -2
  27. data/lib/openxml/docx/elements/section_properties.rb +9 -0
  28. data/lib/openxml/docx/elements/symbol.rb +4 -2
  29. data/lib/openxml/docx/elements/table.rb +1 -1
  30. data/lib/openxml/docx/elements/table_cell.rb +2 -1
  31. data/lib/openxml/docx/elements/table_row.rb +7 -5
  32. data/lib/openxml/docx/elements/text.rb +1 -10
  33. data/lib/openxml/docx/elements/vml_container.rb +10 -0
  34. data/lib/openxml/docx/elements/word_processing_drawing_anchor.rb +23 -0
  35. data/lib/openxml/docx/elements/word_processing_drawing_effect_extent.rb +16 -0
  36. data/lib/openxml/docx/elements/word_processing_drawing_extent.rb +14 -0
  37. data/lib/openxml/docx/elements/word_processing_drawing_nv_graphic_frame_properties.rb +11 -0
  38. data/lib/openxml/docx/elements/word_processing_drawing_object_nv_properties.rb +17 -0
  39. data/lib/openxml/docx/elements/word_processing_drawing_position_h.rb +23 -0
  40. data/lib/openxml/docx/elements/word_processing_drawing_position_offset.rb +10 -0
  41. data/lib/openxml/docx/elements/word_processing_drawing_position_v.rb +23 -0
  42. data/lib/openxml/docx/elements/word_processing_drawing_simple_position.rb +13 -0
  43. data/lib/openxml/docx/elements/word_processing_drawing_wrap_none.rb +10 -0
  44. data/lib/openxml/docx/elements/word_processing_shapes_body_properties.rb +58 -0
  45. data/lib/openxml/docx/elements/word_processing_shapes_shape.rb +12 -0
  46. data/lib/openxml/docx/elements/word_processing_shapes_shape_properties.rb +23 -0
  47. data/lib/openxml/docx/package.rb +73 -1
  48. data/lib/openxml/docx/parts/document.rb +6 -24
  49. data/lib/openxml/docx/parts/fonts.rb +35 -0
  50. data/lib/openxml/docx/parts/footer.rb +32 -0
  51. data/lib/openxml/docx/parts/header.rb +32 -0
  52. data/lib/openxml/docx/parts/settings.rb +6 -2
  53. data/lib/openxml/docx/parts/styles.rb +5 -6
  54. data/lib/openxml/docx/properties.rb +0 -1
  55. data/lib/openxml/docx/properties/alignment.rb +1 -1
  56. data/lib/openxml/docx/properties/base_property.rb +13 -0
  57. data/lib/openxml/docx/properties/border.rb +11 -9
  58. data/lib/openxml/docx/properties/color.rb +6 -4
  59. data/lib/openxml/docx/properties/column.rb +4 -2
  60. data/lib/openxml/docx/properties/columns.rb +6 -4
  61. data/lib/openxml/docx/properties/complex_property.rb +1 -1
  62. data/lib/openxml/docx/properties/conditional_formatting.rb +14 -12
  63. data/lib/openxml/docx/properties/document_grid.rb +4 -10
  64. data/lib/openxml/docx/properties/east_asian_layout.rb +6 -11
  65. data/lib/openxml/docx/properties/font.rb +18 -22
  66. data/lib/openxml/docx/properties/footer_reference.rb +21 -0
  67. data/lib/openxml/docx/properties/frame.rb +16 -47
  68. data/lib/openxml/docx/properties/header_reference.rb +21 -0
  69. data/lib/openxml/docx/properties/indentation.rb +11 -8
  70. data/lib/openxml/docx/properties/language.rb +5 -3
  71. data/lib/openxml/docx/properties/latent_styles.rb +9 -6
  72. data/lib/openxml/docx/properties/latent_styles_exception.rb +9 -6
  73. data/lib/openxml/docx/properties/line_numbering.rb +5 -11
  74. data/lib/openxml/docx/properties/manual_width.rb +4 -2
  75. data/lib/openxml/docx/properties/numbering.rb +4 -2
  76. data/lib/openxml/docx/properties/page_borders.rb +6 -19
  77. data/lib/openxml/docx/properties/page_margins.rb +10 -7
  78. data/lib/openxml/docx/properties/page_numbering.rb +66 -74
  79. data/lib/openxml/docx/properties/page_size.rb +5 -12
  80. data/lib/openxml/docx/properties/shading.rb +46 -52
  81. data/lib/openxml/docx/properties/spacing.rb +9 -14
  82. data/lib/openxml/docx/properties/table_border.rb +12 -10
  83. data/lib/openxml/docx/properties/table_cell_border.rb +12 -10
  84. data/lib/openxml/docx/properties/table_cell_margin.rb +6 -4
  85. data/lib/openxml/docx/properties/table_cell_spacing.rb +5 -3
  86. data/lib/openxml/docx/properties/table_cell_width.rb +5 -3
  87. data/lib/openxml/docx/properties/table_indent.rb +5 -3
  88. data/lib/openxml/docx/properties/table_layout.rb +2 -4
  89. data/lib/openxml/docx/properties/table_look.rb +8 -6
  90. data/lib/openxml/docx/properties/table_p_pr.rb +11 -30
  91. data/lib/openxml/docx/properties/table_row_height.rb +13 -0
  92. data/lib/openxml/docx/properties/table_width.rb +5 -3
  93. data/lib/openxml/docx/properties/underline.rb +13 -12
  94. data/lib/openxml/docx/properties/wafter.rb +5 -3
  95. data/lib/openxml/docx/properties/wbefore.rb +5 -3
  96. data/lib/openxml/docx/root_namespaces.rb +74 -0
  97. data/lib/openxml/docx/section.rb +2 -0
  98. data/lib/openxml/docx/style.rb +4 -4
  99. data/lib/openxml/docx/version.rb +1 -1
  100. data/lib/openxml/drawingml.rb +17 -0
  101. data/lib/openxml/drawingml/elements.rb +13 -0
  102. data/lib/openxml/drawingml/elements/adjust_values_list.rb +11 -0
  103. data/lib/openxml/drawingml/elements/blip_fill.rb +14 -0
  104. data/lib/openxml/drawingml/elements/extension.rb +13 -0
  105. data/lib/openxml/drawingml/elements/extension_list.rb +11 -0
  106. data/lib/openxml/drawingml/elements/extents.rb +14 -0
  107. data/lib/openxml/drawingml/elements/graphic.rb +10 -0
  108. data/lib/openxml/drawingml/elements/graphic_data.rb +12 -0
  109. data/lib/openxml/drawingml/elements/graphic_frame_locks.rb +17 -0
  110. data/lib/openxml/drawingml/elements/head_end.rb +28 -0
  111. data/lib/openxml/drawingml/elements/no_fill.rb +10 -0
  112. data/lib/openxml/drawingml/elements/non_visual_drawing_properties.rb +17 -0
  113. data/lib/openxml/drawingml/elements/non_visual_picture_drawing_properties.rb +12 -0
  114. data/lib/openxml/drawingml/elements/non_visual_picture_properties.rb +10 -0
  115. data/lib/openxml/drawingml/elements/offset.rb +14 -0
  116. data/lib/openxml/drawingml/elements/outline.rb +36 -0
  117. data/lib/openxml/drawingml/elements/picture.rb +10 -0
  118. data/lib/openxml/drawingml/elements/preset_geometry.rb +210 -0
  119. data/lib/openxml/drawingml/elements/round.rb +10 -0
  120. data/lib/openxml/drawingml/elements/shape_guide.rb +40 -0
  121. data/lib/openxml/drawingml/elements/solid_fill.rb +10 -0
  122. data/lib/openxml/drawingml/elements/srgb_color.rb +14 -0
  123. data/lib/openxml/drawingml/elements/tail_end.rb +28 -0
  124. data/lib/openxml/drawingml/elements/transform_effect.rb +18 -0
  125. data/lib/openxml/drawingml/elements/wordprocessing_shape_group.rb +11 -0
  126. data/lib/openxml/vml.rb +17 -0
  127. data/lib/openxml/vml/elements.rb +13 -0
  128. data/lib/openxml/vml/elements/group.rb +88 -0
  129. data/lib/openxml/vml/elements/rectangle.rb +115 -0
  130. data/lib/openxml/vml/elements/rounded_rectangle.rb +121 -0
  131. data/openxml-docx.gemspec +1 -1
  132. data/spec/elements/absolute_position_tab_spec.rb +15 -47
  133. data/spec/elements/bidi_embed_spec.rb +4 -8
  134. data/spec/elements/bidi_override_spec.rb +4 -8
  135. data/spec/elements/break_spec.rb +8 -31
  136. data/spec/elements/content_part_spec.rb +2 -2
  137. data/spec/elements/control_spec.rb +6 -6
  138. data/spec/elements/deleted_text_spec.rb +2 -2
  139. data/spec/elements/drawing_spec.rb +11 -0
  140. data/spec/elements/drawingml/adjust_values_list_spec.rb +8 -0
  141. data/spec/elements/drawingml/blip_fill_spec.rb +34 -0
  142. data/spec/elements/drawingml/extension_list_spec.rb +8 -0
  143. data/spec/elements/drawingml/extension_spec.rb +19 -0
  144. data/spec/elements/drawingml/extents_spec.rb +33 -0
  145. data/spec/elements/drawingml/graphic_data_spec.rb +19 -0
  146. data/spec/elements/drawingml/graphic_frame_locks_spec.rb +78 -0
  147. data/spec/elements/drawingml/graphic_spec.rb +8 -0
  148. data/spec/elements/drawingml/head_end_spec.rb +45 -0
  149. data/spec/elements/drawingml/no_fill_spec.rb +8 -0
  150. data/spec/elements/drawingml/non_visual_drawing_properties_spec.rb +63 -0
  151. data/spec/elements/drawingml/non_visual_picture_drawing_properties_spec.rb +18 -0
  152. data/spec/elements/drawingml/non_visual_picture_properties_spec.rb +8 -0
  153. data/spec/elements/drawingml/offset_spec.rb +32 -0
  154. data/spec/elements/drawingml/outline_spec.rb +58 -0
  155. data/spec/elements/drawingml/picture_spec.rb +8 -0
  156. data/spec/elements/drawingml/preset_geometry_spec.rb +19 -0
  157. data/spec/elements/drawingml/round_spec.rb +8 -0
  158. data/spec/elements/drawingml/shape_guide_spec.rb +49 -0
  159. data/spec/elements/drawingml/solid_fill_spec.rb +8 -0
  160. data/spec/elements/drawingml/srgb_color_spec.rb +20 -0
  161. data/spec/elements/drawingml/tail_end_spec.rb +44 -0
  162. data/spec/elements/drawingml/transform_effect_spec.rb +80 -0
  163. data/spec/elements/drawingml/wordprocessing_shape_group_spec.rb +12 -0
  164. data/spec/elements/group_shape_spec.rb +11 -0
  165. data/spec/elements/markup_compatibility_alternate_content_spec.rb +11 -0
  166. data/spec/elements/markup_compatibility_choice_spec.rb +22 -0
  167. data/spec/elements/markup_compatibility_fallback_spec.rb +11 -0
  168. data/spec/elements/section_properties_spec.rb +12 -0
  169. data/spec/elements/symbol_spec.rb +4 -7
  170. data/spec/elements/text_spec.rb +2 -2
  171. data/spec/elements/vml/group_spec.rb +542 -0
  172. data/spec/elements/vml/rectangle_spec.rb +739 -0
  173. data/spec/elements/vml/rounded_rectangle_spec.rb +656 -0
  174. data/spec/elements/vml_container_spec.rb +11 -0
  175. data/spec/elements/word_processing_drawing_anchor_spec.rb +40 -0
  176. data/spec/elements/word_processing_drawing_effect_extent_spec.rb +57 -0
  177. data/spec/elements/word_processing_drawing_extent_spec.rb +34 -0
  178. data/spec/elements/word_processing_drawing_nv_graphic_frame_properties_spec.rb +11 -0
  179. data/spec/elements/word_processing_drawing_object_nv_properties_spec.rb +67 -0
  180. data/spec/elements/word_processing_drawing_position_h_spec.rb +21 -0
  181. data/spec/elements/word_processing_drawing_position_v_spec.rb +21 -0
  182. data/spec/elements/word_processing_drawing_simple_position_spec.rb +34 -0
  183. data/spec/elements/word_processing_drawing_wrap_none_spec.rb +12 -0
  184. data/spec/elements/word_processing_shapes_body_properties_spec.rb +223 -0
  185. data/spec/elements/word_processing_shapes_shape_properties_spec.rb +21 -0
  186. data/spec/elements/word_processing_shapes_shape_spec.rb +23 -0
  187. data/spec/parts/footer_spec.rb +33 -0
  188. data/spec/parts/header_spec.rb +33 -0
  189. data/spec/properties/footer_reference_spec.rb +32 -0
  190. data/spec/properties/header_reference_spec.rb +32 -0
  191. data/spec/properties/page_numbering_spec.rb +1 -1
  192. data/spec/properties/{table_cell_fit_text.rb → table_cell_fit_text_spec.rb} +0 -0
  193. data/spec/properties/{table_cell_width.rb → table_cell_width_spec.rb} +0 -0
  194. data/spec/properties/table_layout_spec.rb +14 -12
  195. data/spec/properties/{table_row_height.rb → table_row_height_spec.rb} +0 -0
  196. data/spec/section_spec.rb +2 -0
  197. data/spec/spec_helper.rb +2 -0
  198. data/spec/support/data/elements/grid_column_element.xml +1 -1
  199. data/spec/support/data/elements/table_grid_element.xml +1 -1
  200. data/spec/support/data/parts/document_with_children_part.xml +2 -1
  201. data/spec/support/data/parts/document_with_multiple_sections_part.xml +1 -1
  202. data/spec/support/data/parts/document_with_one_section_part.xml +1 -1
  203. data/spec/support/data/parts/empty_document_part.xml +1 -1
  204. data/spec/support/data/parts/empty_footer_part.xml +1 -0
  205. data/spec/support/data/parts/empty_header_part.xml +1 -0
  206. data/spec/support/data/parts/footer_with_children_part.xml +1 -0
  207. data/spec/support/data/parts/header_with_children_part.xml +1 -0
  208. data/spec/support/element_test_macros.rb +58 -9
  209. metadata +126 -9
  210. data/lib/openxml/docx/properties/tr_height.rb +0 -19
  211. data/lib/openxml/docx/properties/width_property.rb +0 -17
@@ -0,0 +1,739 @@
1
+ require "spec_helper"
2
+
3
+ describe OpenXml::Vml::Elements::Rectangle do
4
+ include ElementTestMacros
5
+
6
+ it_should_use tag: :rect, name: "rectangle"
7
+
8
+
9
+ # Connector Type Attribute
10
+
11
+ for_attribute(:connector_type, displays_as: :connectortype, with_namespace: :o) do
12
+ %i(curved elbow none straight).each do |value|
13
+ with_value(value) do
14
+ it_should_assign_successfully
15
+ it_should_output "<v:rect o:connectortype=\"#{value}\"/>"
16
+ end
17
+ end
18
+
19
+ with_values([:funky, 5, "auto"]) do
20
+ it_should_raise_an_exception
21
+ end
22
+ end
23
+
24
+
25
+ # HR Align Attribute
26
+
27
+ for_attribute(:hr_align, displays_as: :hralign, with_namespace: :o) do
28
+ %i(center left right).each do |value|
29
+ with_value(value) do
30
+ it_should_assign_successfully
31
+ it_should_output "<v:rect o:hralign=\"#{value}\"/>"
32
+ end
33
+ end
34
+
35
+ with_values([:justified, 4, "overThere"]) do
36
+ it_should_raise_an_exception
37
+ end
38
+ end
39
+
40
+
41
+ # Inset Mode Attribute
42
+
43
+ for_attribute(:inset_mode, displays_as: :insetmode, with_namespace: :o) do
44
+ with_value(:auto) do
45
+ it_should_assign_successfully
46
+ it_should_output "<v:rect o:insetmode=\"auto\"/>"
47
+ end
48
+
49
+ with_value(:custom) do
50
+ it_should_assign_successfully
51
+ it_should_output "<v:rect o:insetmode=\"custom\"/>"
52
+ end
53
+
54
+ with_values([:left, "right", 0]) do
55
+ it_should_raise_an_exception
56
+ end
57
+ end
58
+
59
+
60
+ # Coordinate-based Attributes
61
+
62
+ good_coord_values = [ "100,100", "-100,-100", "100,-100", "100, 100", "-100, -100", "100, -100" ]
63
+ bad_coord_values = [ "100 100", "x:10,y:10", :over_there ]
64
+
65
+ for_attribute(:coordinate_origin, displays_as: :coordorigin) do
66
+ good_coord_values.each do |good_value|
67
+ with_value(good_value) do
68
+ it_should_assign_successfully
69
+ it_should_output "<v:rect coordorigin=\"#{good_value}\"/>"
70
+ end
71
+ end
72
+
73
+ with_values(bad_coord_values) do
74
+ it_should_raise_an_exception
75
+ end
76
+ end
77
+
78
+ for_attribute(:coordinate_size, displays_as: :coordsize) do
79
+ good_coord_values.each do |good_value|
80
+ with_value(good_value) do
81
+ it_should_assign_successfully
82
+ it_should_output "<v:rect coordsize=\"#{good_value}\"/>"
83
+ end
84
+ end
85
+
86
+ with_values(bad_coord_values) do
87
+ it_should_raise_an_exception
88
+ end
89
+ end
90
+
91
+
92
+ # Color-based Attributes
93
+
94
+ good_color_values = [ "#FFFFFF", :red, "palateEntry [0]", "palateEntry" ]
95
+ bad_color_values = [ 54, 0 ]
96
+
97
+ for_attribute(:chroma_key, displays_as: :chromakey) do
98
+ good_color_values.each do |good_value|
99
+ with_value(good_value) do
100
+ it_should_assign_successfully
101
+ it_should_output "<v:rect chromakey=\"#{good_value}\"/>"
102
+ end
103
+ end
104
+
105
+ with_values(bad_color_values) do
106
+ it_should_raise_an_exception
107
+ end
108
+ end
109
+
110
+ for_attribute(:fill_color, displays_as: :fillcolor) do
111
+ good_color_values.each do |good_value|
112
+ with_value(good_value) do
113
+ it_should_assign_successfully
114
+ it_should_output "<v:rect fillcolor=\"#{good_value}\"/>"
115
+ end
116
+ end
117
+
118
+ with_values(bad_color_values) do
119
+ it_should_raise_an_exception
120
+ end
121
+ end
122
+
123
+ for_attribute(:stroke_color, displays_as: :strokecolor) do
124
+ good_color_values.each do |good_value|
125
+ with_value(good_value) do
126
+ it_should_assign_successfully
127
+ it_should_output "<v:rect strokecolor=\"#{good_value}\"/>"
128
+ end
129
+ end
130
+
131
+ with_values(bad_color_values) do
132
+ it_should_raise_an_exception
133
+ end
134
+ end
135
+
136
+
137
+ # Diagram Layout-based Attributes
138
+
139
+ good_diagram_layout_values = (0..3)
140
+ bad_diagram_layout_values = [ -1, 4, "Five is Right Out" ]
141
+
142
+ for_attribute(:diagram_node_layout, displays_as: :dgmlayout, with_namespace: :o) do
143
+ good_diagram_layout_values.each do |good_value|
144
+ with_value(good_value) do
145
+ it_should_assign_successfully
146
+ it_should_output "<v:rect o:dgmlayout=\"#{good_value}\"/>"
147
+ end
148
+ end
149
+
150
+ with_values(bad_diagram_layout_values) do
151
+ it_should_raise_an_exception
152
+ end
153
+ end
154
+
155
+ for_attribute(:diagram_node_recent_layout, displays_as: :dgmlayoutmru, with_namespace: :o) do
156
+ good_diagram_layout_values.each do |good_value|
157
+ with_value(good_value) do
158
+ it_should_assign_successfully
159
+ it_should_output "<v:rect o:dgmlayoutmru=\"#{good_value}\"/>"
160
+ end
161
+ end
162
+
163
+ with_values(bad_diagram_layout_values) do
164
+ it_should_raise_an_exception
165
+ end
166
+ end
167
+
168
+
169
+ # Integer-based Attributes
170
+
171
+ good_integer_values = [1, -1, 0]
172
+ bad_integer_values = [2.5, :five, "five"]
173
+
174
+ for_attribute(:diagram_node_kind, displays_as: :dgmnodekind, with_namespace: :o) do
175
+ good_integer_values.each do |good_value|
176
+ with_value(good_value) do
177
+ it_should_assign_successfully
178
+ it_should_output "<v:rect o:dgmnodekind=\"#{good_value}\"/>"
179
+ end
180
+ end
181
+
182
+ with_values(bad_integer_values) do
183
+ it_should_raise_an_exception
184
+ end
185
+ end
186
+
187
+ for_attribute(:hr_percent, displays_as: :hrpct, with_namespace: :o) do
188
+ good_integer_values.each do |good_value|
189
+ with_value(good_value) do
190
+ it_should_assign_successfully
191
+ it_should_output "<v:rect o:hrpct=\"#{good_value}\"/>"
192
+ end
193
+ end
194
+
195
+ with_values(bad_integer_values) do
196
+ it_should_raise_an_exception
197
+ end
198
+ end
199
+
200
+ for_attribute(:regroup_id, displays_as: :regroupid, with_namespace: :o) do
201
+ good_integer_values.each do |good_value|
202
+ with_value(good_value) do
203
+ it_should_assign_successfully
204
+ it_should_output "<v:rect o:regroupid=\"#{good_value}\"/>"
205
+ end
206
+ end
207
+
208
+ with_values(bad_integer_values) do
209
+ it_should_raise_an_exception
210
+ end
211
+ end
212
+
213
+
214
+ # Black and White Mode-based Attributes
215
+
216
+ good_bw_mode_values = %i(auto black blackTextAndLines color grayOutline grayScale hide highContrast inverseGray lightGrayscale undrawn white)
217
+ bad_bw_mode_values = [:paintItBlack, 0, "rainbows"]
218
+
219
+ for_attribute(:bw_mode, displays_as: :bwmode, with_namespace: :o) do
220
+ good_bw_mode_values.each do |good_value|
221
+ with_value(good_value) do
222
+ it_should_assign_successfully
223
+ it_should_output "<v:rect o:bwmode=\"#{good_value}\"/>"
224
+ end
225
+ end
226
+
227
+ with_values(bad_bw_mode_values) do
228
+ it_should_raise_an_exception
229
+ end
230
+ end
231
+
232
+ for_attribute(:bw_normal, displays_as: :bwnormal, with_namespace: :o) do
233
+ good_bw_mode_values.each do |good_value|
234
+ with_value(good_value) do
235
+ it_should_assign_successfully
236
+ it_should_output "<v:rect o:bwnormal=\"#{good_value}\"/>"
237
+ end
238
+ end
239
+
240
+ with_values(bad_bw_mode_values) do
241
+ it_should_raise_an_exception
242
+ end
243
+ end
244
+
245
+ for_attribute(:bw_pure, displays_as: :bwpure, with_namespace: :o) do
246
+ good_bw_mode_values.each do |good_value|
247
+ with_value(good_value) do
248
+ it_should_assign_successfully
249
+ it_should_output "<v:rect o:bwpure=\"#{good_value}\"/>"
250
+ end
251
+ end
252
+
253
+ with_values(bad_bw_mode_values) do
254
+ it_should_raise_an_exception
255
+ end
256
+ end
257
+
258
+
259
+ # String-based Attributes
260
+
261
+ bad_string_values = [0, :nope, false]
262
+
263
+ for_attribute(:alt) do
264
+ with_value("String") do
265
+ it_should_assign_successfully
266
+ it_should_output "<v:rect alt=\"String\"/>"
267
+ end
268
+
269
+ with_value("000001f") do
270
+ it_should_assign_successfully
271
+ it_should_output "<v:rect alt=\"000001f\"/>"
272
+ end
273
+
274
+
275
+ with_values(bad_string_values) do
276
+ it_should_raise_an_exception
277
+ end
278
+ end
279
+
280
+ for_attribute(:css_class, displays_as: :class) do
281
+ with_value("String") do
282
+ it_should_assign_successfully
283
+ it_should_output "<v:rect class=\"String\"/>"
284
+ end
285
+
286
+ with_values(bad_string_values) do
287
+ it_should_raise_an_exception
288
+ end
289
+ end
290
+
291
+ for_attribute(:href) do
292
+ with_value("http://something.com") do
293
+ it_should_assign_successfully
294
+ it_should_output "<v:rect href=\"http://something.com\"/>"
295
+ end
296
+
297
+ with_values(bad_string_values) do
298
+ it_should_raise_an_exception
299
+ end
300
+ end
301
+
302
+ for_attribute(:id) do
303
+ with_value("String") do
304
+ it_should_assign_successfully
305
+ it_should_output "<v:rect id=\"String\"/>"
306
+ end
307
+
308
+ with_values(bad_string_values) do
309
+ it_should_raise_an_exception
310
+ end
311
+ end
312
+
313
+ for_attribute(:opacity) do
314
+ with_value("String") do
315
+ it_should_assign_successfully
316
+ it_should_output "<v:rect opacity=\"String\"/>"
317
+ end
318
+
319
+ with_value("0.5") do
320
+ it_should_assign_successfully
321
+ it_should_output "<v:rect opacity=\"0.5\"/>"
322
+ end
323
+
324
+ with_values(bad_string_values) do
325
+ it_should_raise_an_exception
326
+ end
327
+ end
328
+
329
+ for_attribute(:stroke_weight, displays_as: :strokeweight) do
330
+ with_value("String") do
331
+ it_should_assign_successfully
332
+ it_should_output "<v:rect strokeweight=\"String\"/>"
333
+ end
334
+
335
+ with_value("000001f") do
336
+ it_should_assign_successfully
337
+ it_should_output "<v:rect strokeweight=\"000001f\"/>"
338
+ end
339
+
340
+ with_values(bad_string_values) do
341
+ it_should_raise_an_exception
342
+ end
343
+ end
344
+
345
+ for_attribute(:style) do
346
+ with_value("String") do
347
+ it_should_assign_successfully
348
+ it_should_output "<v:rect style=\"String\"/>"
349
+ end
350
+
351
+ with_values(bad_string_values) do
352
+ it_should_raise_an_exception
353
+ end
354
+ end
355
+
356
+ for_attribute(:target) do
357
+ with_value("String") do
358
+ it_should_assign_successfully
359
+ it_should_output "<v:rect target=\"String\"/>"
360
+ end
361
+
362
+ with_values(bad_string_values) do
363
+ it_should_raise_an_exception
364
+ end
365
+ end
366
+
367
+ for_attribute(:title) do
368
+ with_value("String") do
369
+ it_should_assign_successfully
370
+ it_should_output "<v:rect title=\"String\"/>"
371
+ end
372
+
373
+ with_values(bad_string_values) do
374
+ it_should_raise_an_exception
375
+ end
376
+ end
377
+
378
+ for_attribute(:wrap_coordinates, displays_as: :wrapcoords) do
379
+ with_value("String") do
380
+ it_should_assign_successfully
381
+ it_should_output "<v:rect wrapcoords=\"String\"/>"
382
+ end
383
+
384
+ with_value("0,0,100,100") do
385
+ it_should_assign_successfully
386
+ it_should_output "<v:rect wrapcoords=\"0,0,100,100\"/>"
387
+ end
388
+
389
+ with_values(bad_string_values) do
390
+ it_should_raise_an_exception
391
+ end
392
+ end
393
+
394
+ for_attribute(:border_bottom_color, displays_as: :borderbottomcolor, with_namespace: :o) do
395
+ with_value("String") do
396
+ it_should_assign_successfully
397
+ it_should_output "<v:rect o:borderbottomcolor=\"String\"/>"
398
+ end
399
+
400
+ with_values(bad_string_values) do
401
+ it_should_raise_an_exception
402
+ end
403
+ end
404
+
405
+ for_attribute(:border_left_color, displays_as: :borderleftcolor, with_namespace: :o) do
406
+ with_value("String") do
407
+ it_should_assign_successfully
408
+ it_should_output "<v:rect o:borderleftcolor=\"String\"/>"
409
+ end
410
+
411
+ with_values(bad_string_values) do
412
+ it_should_raise_an_exception
413
+ end
414
+ end
415
+
416
+ for_attribute(:border_right_color, displays_as: :borderrightcolor, with_namespace: :o) do
417
+ with_value("String") do
418
+ it_should_assign_successfully
419
+ it_should_output "<v:rect o:borderrightcolor=\"String\"/>"
420
+ end
421
+
422
+ with_values(bad_string_values) do
423
+ it_should_raise_an_exception
424
+ end
425
+ end
426
+
427
+ for_attribute(:border_top_color, displays_as: :bordertopcolor, with_namespace: :o) do
428
+ with_value("String") do
429
+ it_should_assign_successfully
430
+ it_should_output "<v:rect o:bordertopcolor=\"String\"/>"
431
+ end
432
+
433
+ with_values(bad_string_values) do
434
+ it_should_raise_an_exception
435
+ end
436
+ end
437
+
438
+ for_attribute(:optional_string, displays_as: :spid, with_namespace: :o) do
439
+ with_value("String") do
440
+ it_should_assign_successfully
441
+ it_should_output "<v:rect o:spid=\"String\"/>"
442
+ end
443
+
444
+ with_values(bad_string_values) do
445
+ it_should_raise_an_exception
446
+ end
447
+ end
448
+
449
+ for_attribute(:optional_number, displays_as: :spt, with_namespace: :o) do
450
+ with_value("NumberAsString") do
451
+ it_should_assign_successfully
452
+ it_should_output "<v:rect o:spt=\"NumberAsString\"/>"
453
+ end
454
+
455
+ with_values(bad_string_values) do
456
+ it_should_raise_an_exception
457
+ end
458
+ end
459
+
460
+
461
+ # (Explicitly) True/False-based Attributes
462
+
463
+ good_tf_values = %w(0 1 t f true false)
464
+ bad_tf_values = ["yes", "no", "on", "off", 5]
465
+
466
+ for_attribute(:filled) do
467
+ good_tf_values.each do |good_value|
468
+ with_value(good_value) do
469
+ it_should_assign_successfully
470
+ it_should_output "<v:rect filled=\"#{good_value}\"/>"
471
+ end
472
+ end
473
+
474
+ with_values(bad_tf_values) do
475
+ it_should_raise_an_exception
476
+ end
477
+ end
478
+
479
+ for_attribute(:inset_pen, displays_as: :insetpen) do
480
+ good_tf_values.each do |good_value|
481
+ with_value(good_value) do
482
+ it_should_assign_successfully
483
+ it_should_output "<v:rect insetpen=\"#{good_value}\"/>"
484
+ end
485
+ end
486
+
487
+ with_values(bad_tf_values) do
488
+ it_should_raise_an_exception
489
+ end
490
+ end
491
+
492
+ for_attribute(:print) do
493
+ good_tf_values.each do |good_value|
494
+ with_value(good_value) do
495
+ it_should_assign_successfully
496
+ it_should_output "<v:rect print=\"#{good_value}\"/>"
497
+ end
498
+ end
499
+
500
+ with_values(bad_tf_values) do
501
+ it_should_raise_an_exception
502
+ end
503
+ end
504
+
505
+ for_attribute(:stroked) do
506
+ good_tf_values.each do |good_value|
507
+ with_value(good_value) do
508
+ it_should_assign_successfully
509
+ it_should_output "<v:rect stroked=\"#{good_value}\"/>"
510
+ end
511
+ end
512
+
513
+ with_values(bad_tf_values) do
514
+ it_should_raise_an_exception
515
+ end
516
+ end
517
+
518
+ for_attribute(:allow_in_cell, displays_as: :allowincell, with_namespace: :o) do
519
+ good_tf_values.each do |good_value|
520
+ with_value(good_value) do
521
+ it_should_assign_successfully
522
+ it_should_output "<v:rect o:allowincell=\"#{good_value}\"/>"
523
+ end
524
+ end
525
+ with_values(bad_tf_values) do
526
+ it_should_raise_an_exception
527
+ end
528
+ end
529
+
530
+ for_attribute(:allow_overlap, displays_as: :allowoverlap, with_namespace: :o) do
531
+ good_tf_values.each do |good_value|
532
+ with_value(good_value) do
533
+ it_should_assign_successfully
534
+ it_should_output "<v:rect o:allowoverlap=\"#{good_value}\"/>"
535
+ end
536
+ end
537
+
538
+ with_values(bad_tf_values) do
539
+ it_should_raise_an_exception
540
+ end
541
+ end
542
+
543
+ for_attribute(:bullet, with_namespace: :o) do
544
+ good_tf_values.each do |good_value|
545
+ with_value(good_value) do
546
+ it_should_assign_successfully
547
+ it_should_output "<v:rect o:bullet=\"#{good_value}\"/>"
548
+ end
549
+ end
550
+
551
+ with_values(bad_tf_values) do
552
+ it_should_raise_an_exception
553
+ end
554
+ end
555
+
556
+ for_attribute(:button, with_namespace: :o) do
557
+ good_tf_values.each do |good_value|
558
+ with_value(good_value) do
559
+ it_should_assign_successfully
560
+ it_should_output "<v:rect o:button=\"#{good_value}\"/>"
561
+ end
562
+ end
563
+
564
+ with_values(bad_tf_values) do
565
+ it_should_raise_an_exception
566
+ end
567
+ end
568
+
569
+ for_attribute(:clip, with_namespace: :o) do
570
+ good_tf_values.each do |good_value|
571
+ with_value(good_value) do
572
+ it_should_assign_successfully
573
+ it_should_output "<v:rect o:clip=\"#{good_value}\"/>"
574
+ end
575
+ end
576
+
577
+ with_values(bad_tf_values) do
578
+ it_should_raise_an_exception
579
+ end
580
+ end
581
+
582
+ for_attribute(:clip_to_wrap, displays_as: :cliptowrap, with_namespace: :o) do
583
+ good_tf_values.each do |good_value|
584
+ with_value(good_value) do
585
+ it_should_assign_successfully
586
+ it_should_output "<v:rect o:cliptowrap=\"#{good_value}\"/>"
587
+ end
588
+ end
589
+
590
+ with_values(bad_tf_values) do
591
+ it_should_raise_an_exception
592
+ end
593
+ end
594
+
595
+ for_attribute(:double_click_notify, displays_as: :doubleclicknotify, with_namespace: :o) do
596
+ good_tf_values.each do |good_value|
597
+ with_value(good_value) do
598
+ it_should_assign_successfully
599
+ it_should_output "<v:rect o:doubleclicknotify=\"#{good_value}\"/>"
600
+ end
601
+ end
602
+
603
+ with_values(bad_tf_values) do
604
+ it_should_raise_an_exception
605
+ end
606
+ end
607
+
608
+ for_attribute(:force_dash, displays_as: :forcedash, with_namespace: :o) do
609
+ good_tf_values.each do |good_value|
610
+ with_value(good_value) do
611
+ it_should_assign_successfully
612
+ it_should_output "<v:rect o:forcedash=\"#{good_value}\"/>"
613
+ end
614
+ end
615
+
616
+ with_values(bad_tf_values) do
617
+ it_should_raise_an_exception
618
+ end
619
+ end
620
+
621
+ for_attribute(:hr, with_namespace: :o) do
622
+ good_tf_values.each do |good_value|
623
+ with_value(good_value) do
624
+ it_should_assign_successfully
625
+ it_should_output "<v:rect o:hr=\"#{good_value}\"/>"
626
+ end
627
+ end
628
+
629
+ with_values(bad_tf_values) do
630
+ it_should_raise_an_exception
631
+ end
632
+ end
633
+
634
+ for_attribute(:hr_no_shade, displays_as: :hrnoshade, with_namespace: :o) do
635
+ good_tf_values.each do |good_value|
636
+ with_value(good_value) do
637
+ it_should_assign_successfully
638
+ it_should_output "<v:rect o:hrnoshade=\"#{good_value}\"/>"
639
+ end
640
+ end
641
+
642
+ with_values(bad_tf_values) do
643
+ it_should_raise_an_exception
644
+ end
645
+ end
646
+
647
+ for_attribute(:hr_standard, displays_as: :hrstd, with_namespace: :o) do
648
+ good_tf_values.each do |good_value|
649
+ with_value(good_value) do
650
+ it_should_assign_successfully
651
+ it_should_output "<v:rect o:hrstd=\"#{good_value}\"/>"
652
+ end
653
+ end
654
+
655
+ with_values(bad_tf_values) do
656
+ it_should_raise_an_exception
657
+ end
658
+ end
659
+
660
+ for_attribute(:ole, with_namespace: :o) do
661
+ good_tf_values.each do |good_value|
662
+ with_value(good_value) do
663
+ it_should_assign_successfully
664
+ it_should_output "<v:rect o:ole=\"#{good_value}\"/>"
665
+ end
666
+ end
667
+
668
+ with_values(bad_tf_values) do
669
+ it_should_raise_an_exception
670
+ end
671
+ end
672
+
673
+ for_attribute(:ole_icon, displays_as: :oleicon, with_namespace: :o) do
674
+ good_tf_values.each do |good_value|
675
+ with_value(good_value) do
676
+ it_should_assign_successfully
677
+ it_should_output "<v:rect o:oleicon=\"#{good_value}\"/>"
678
+ end
679
+ end
680
+
681
+ with_values(bad_tf_values) do
682
+ it_should_raise_an_exception
683
+ end
684
+ end
685
+
686
+ for_attribute(:hide_extra_handles, displays_as: :oned, with_namespace: :o) do
687
+ good_tf_values.each do |good_value|
688
+ with_value(good_value) do
689
+ it_should_assign_successfully
690
+ it_should_output "<v:rect o:oned=\"#{good_value}\"/>"
691
+ end
692
+ end
693
+
694
+ with_values(bad_tf_values) do
695
+ it_should_raise_an_exception
696
+ end
697
+ end
698
+
699
+ for_attribute(:prefer_relative, displays_as: :preferrelative, with_namespace: :o) do
700
+ good_tf_values.each do |good_value|
701
+ with_value(good_value) do
702
+ it_should_assign_successfully
703
+ it_should_output "<v:rect o:preferrelative=\"#{good_value}\"/>"
704
+ end
705
+ end
706
+
707
+ with_values(bad_tf_values) do
708
+ it_should_raise_an_exception
709
+ end
710
+ end
711
+
712
+ for_attribute(:user_drawn, displays_as: :userdrawn, with_namespace: :o) do
713
+ good_tf_values.each do |good_value|
714
+ with_value(good_value) do
715
+ it_should_assign_successfully
716
+ it_should_output "<v:rect o:userdrawn=\"#{good_value}\"/>"
717
+ end
718
+ end
719
+
720
+ with_values(bad_tf_values) do
721
+ it_should_raise_an_exception
722
+ end
723
+ end
724
+
725
+ for_attribute(:user_hidden, displays_as: :userhidden, with_namespace: :o) do
726
+ good_tf_values.each do |good_value|
727
+ with_value(good_value) do
728
+ it_should_assign_successfully
729
+ it_should_output "<v:rect o:userhidden=\"#{good_value}\"/>"
730
+ end
731
+ end
732
+
733
+ with_values(bad_tf_values) do
734
+ it_should_raise_an_exception
735
+ end
736
+ end
737
+
738
+
739
+ end