xmlss 0.4.1 → 1.0.0.rc.1

Sign up to get free protection for your applications and to get access to all the features.
Files changed (41) hide show
  1. data/Gemfile.lock +3 -3
  2. data/README.rdoc +4 -4
  3. data/bench/profiler_runner.rb +1 -1
  4. data/examples/example_workbook.rb +1 -1
  5. data/examples/simple.rb +18 -1
  6. data/examples/simple.xml +22 -0
  7. data/lib/xmlss/element/cell.rb +52 -1
  8. data/lib/xmlss/element/column.rb +2 -0
  9. data/lib/xmlss/element/row.rb +2 -0
  10. data/lib/xmlss/element/worksheet.rb +14 -6
  11. data/lib/xmlss/element_stack.rb +69 -0
  12. data/lib/xmlss/style/alignment.rb +2 -0
  13. data/lib/xmlss/style/base.rb +2 -0
  14. data/lib/xmlss/style/border.rb +10 -0
  15. data/lib/xmlss/style/font.rb +2 -0
  16. data/lib/xmlss/style/interior.rb +2 -0
  17. data/lib/xmlss/style/number_format.rb +2 -0
  18. data/lib/xmlss/style/protection.rb +2 -0
  19. data/lib/xmlss/version.rb +1 -1
  20. data/lib/xmlss/workbook.rb +75 -58
  21. data/lib/xmlss/writer.rb +244 -0
  22. data/test/element/cell_test.rb +60 -1
  23. data/test/element/column_test.rb +5 -0
  24. data/test/element/row_test.rb +5 -0
  25. data/test/element/worksheet_test.rb +9 -4
  26. data/test/element_stack_test.rb +117 -0
  27. data/test/style/alignment_test.rb +5 -0
  28. data/test/style/base_test.rb +5 -0
  29. data/test/style/border_test.rb +26 -2
  30. data/test/style/font_test.rb +5 -0
  31. data/test/style/interior_test.rb +5 -0
  32. data/test/style/number_format_test.rb +5 -0
  33. data/test/style/protection_test.rb +6 -1
  34. data/test/workbook_test.rb +29 -13
  35. data/test/writer_test.rb +413 -0
  36. data/xmlss.gemspec +1 -1
  37. metadata +30 -25
  38. data/lib/xmlss/element/data.rb +0 -58
  39. data/lib/xmlss/undies_writer.rb +0 -175
  40. data/test/element/data_test.rb +0 -67
  41. data/test/undies_writer_test.rb +0 -372
@@ -1,372 +0,0 @@
1
- require 'assert'
2
-
3
- require 'xmlss/undies_writer'
4
- require 'xmlss/workbook'
5
-
6
- class Xmlss::UndiesWriter
7
-
8
- class BasicTests < Assert::Context
9
- desc "UndiesWriter"
10
- setup do
11
- @w = Xmlss::UndiesWriter.new
12
- end
13
- subject { @w }
14
-
15
- should have_class_methods :attributes, :classify, :coerce
16
- should have_readers :style_markup, :element_markup
17
- should have_instance_method :flush, :workbook
18
- should have_instance_methods :style, :alignment, :borders, :border
19
- should have_instance_methods :font, :interior, :number_format, :protection
20
- should have_instance_methods :worksheet, :column, :row, :data
21
-
22
- should "return itself when flushed" do
23
- assert_equal subject, subject.flush
24
- end
25
-
26
- end
27
-
28
- class HelpersTests < BasicTests
29
-
30
- should "coerce certain values for xml output" do
31
- assert_equal 1, Xmlss::UndiesWriter.coerce(true)
32
- assert_nil Xmlss::UndiesWriter.coerce(false)
33
- assert_nil Xmlss::UndiesWriter.coerce("")
34
- assert_equal "hi", Xmlss::UndiesWriter.coerce("hi")
35
- assert_equal 1, Xmlss::UndiesWriter.coerce(1)
36
- end
37
-
38
- should "classify underscored string" do
39
- assert_equal "Hi", Xmlss::UndiesWriter.classify("Hi")
40
- assert_equal "Hi", Xmlss::UndiesWriter.classify("hi")
41
- assert_equal "Hithere", Xmlss::UndiesWriter.classify("HiThere")
42
- assert_equal "Hithere", Xmlss::UndiesWriter.classify("hithere")
43
- assert_equal "HiThere", Xmlss::UndiesWriter.classify("Hi_There")
44
- assert_equal "HiThere", Xmlss::UndiesWriter.classify("Hi_there")
45
- assert_equal "HiThere", Xmlss::UndiesWriter.classify("hi_there")
46
- end
47
-
48
- should "convert a list of attributes for xml output" do
49
- class Thing
50
- def keys; [:thing, :other, 'some', 'hi', :hi_there]; end
51
-
52
- def thing; true; end
53
- def other; false; end
54
- def some; ""; end
55
- def hi; :there; end
56
- def hi_there; "you"; end
57
- end
58
- thing = Thing.new
59
- exp = {
60
- "ss:Hi" => "there",
61
- "ss:HiThere" => "you",
62
- "ss:Thing" => "1"
63
- }
64
-
65
- assert_equal exp, Xmlss::UndiesWriter.attributes(thing, thing.keys)
66
- end
67
-
68
- end
69
-
70
- class StyleWritingTests < BasicTests
71
- desc "writing style markup"
72
-
73
- should "write alignment markup" do
74
- subject.alignment(Xmlss::Style::Alignment.new({
75
- :wrap_text => true,
76
- :horizontal => :center,
77
- :vertical => :bottom,
78
- :rotate => 90
79
- }))
80
- subject.flush
81
-
82
- assert_equal(
83
- "<Alignment ss:Horizontal=\"Center\" ss:Rotate=\"90\" ss:Vertical=\"Bottom\" ss:WrapText=\"1\" />",
84
- subject.style_markup
85
- )
86
- end
87
-
88
- should "write border markup" do
89
- subject.border(Xmlss::Style::Border.new({
90
- :color => '#FF0000',
91
- :position => :top,
92
- :weight => :thick,
93
- :line_style => :dot
94
- }))
95
- subject.flush
96
-
97
- assert_equal(
98
- "<Border ss:Color=\"#FF0000\" ss:LineStyle=\"Dot\" ss:Position=\"Top\" ss:Weight=\"3\" />",
99
- subject.style_markup
100
- )
101
- end
102
-
103
- should "write border collection markup" do
104
- subject.borders {
105
- subject.border(Xmlss::Style::Border.new({
106
- :color => '#FF0000',
107
- :position => :top
108
- }))
109
- subject.border(Xmlss::Style::Border.new({
110
- :position => :left
111
- }))
112
- }
113
- subject.flush
114
-
115
- assert_equal(
116
- "<Borders><Border ss:Color=\"#FF0000\" ss:LineStyle=\"Continuous\" ss:Position=\"Top\" ss:Weight=\"1\" /><Border ss:LineStyle=\"Continuous\" ss:Position=\"Left\" ss:Weight=\"1\" /></Borders>",
117
- subject.style_markup
118
- )
119
- end
120
-
121
- should "write font markup" do
122
- subject.font(Xmlss::Style::Font.new({
123
- :bold => true,
124
- :color => '#FF0000',
125
- :italic => true,
126
- :size => 10,
127
- :strike_through => true,
128
- :underline => :single,
129
- :alignment => :superscript,
130
- :name => 'Verdana'
131
- }))
132
- subject.flush
133
-
134
- assert_equal(
135
- "<Font ss:Bold=\"1\" ss:Color=\"#FF0000\" ss:FontName=\"Verdana\" ss:Italic=\"1\" ss:Size=\"10\" ss:StrikeThrough=\"1\" ss:Underline=\"Single\" ss:VerticalAlign=\"Superscript\" />",
136
- subject.style_markup
137
- )
138
- end
139
-
140
- should "write interior markup" do
141
- subject.interior(Xmlss::Style::Interior.new({
142
- :color => "#000000",
143
- :pattern => :solid,
144
- :pattern_color => "#FF0000"
145
- }))
146
- subject.flush
147
-
148
- assert_equal(
149
- "<Interior ss:Color=\"#000000\" ss:Pattern=\"Solid\" ss:PatternColor=\"#FF0000\" />",
150
- subject.style_markup
151
- )
152
- end
153
-
154
- should "write number format markup" do
155
- subject.number_format(Xmlss::Style::NumberFormat.new("General"))
156
- subject.flush
157
-
158
- assert_equal(
159
- "<NumberFormat ss:Format=\"General\" />",
160
- subject.style_markup
161
- )
162
- end
163
-
164
- should "write protection markup" do
165
- subject.protection(Xmlss::Style::Protection.new(true))
166
- subject.flush
167
-
168
- assert_equal(
169
- "<Protection ss:Protect=\"1\" />",
170
- subject.style_markup
171
- )
172
- end
173
-
174
- should "write full style markup" do
175
- subject.style(Xmlss::Style::Base.new(:write_markup_test)) {
176
- subject.alignment(Xmlss::Style::Alignment.new({
177
- :horizontal => :left,
178
- :vertical => :center,
179
- :wrap_text => true
180
- }))
181
- subject.borders {
182
- subject.border(Xmlss::Style::Border.new({:position => :left}))
183
- subject.border(Xmlss::Style::Border.new({:position => :right}))
184
- }
185
- subject.font(Xmlss::Style::Font.new({:bold => true}))
186
- subject.interior(Xmlss::Style::Interior.new({:color => "#000000"}))
187
- subject.number_format(Xmlss::Style::NumberFormat.new("General"))
188
- subject.protection(Xmlss::Style::Protection.new(true))
189
- }
190
- subject.flush
191
-
192
- assert_equal(
193
- "<Style ss:ID=\"write_markup_test\"><Alignment ss:Horizontal=\"Left\" ss:Vertical=\"Center\" ss:WrapText=\"1\" /><Borders><Border ss:LineStyle=\"Continuous\" ss:Position=\"Left\" ss:Weight=\"1\" /><Border ss:LineStyle=\"Continuous\" ss:Position=\"Right\" ss:Weight=\"1\" /></Borders><Font ss:Bold=\"1\" /><Interior ss:Color=\"#000000\" /><NumberFormat ss:Format=\"General\" /><Protection ss:Protect=\"1\" /></Style>",
194
- subject.style_markup
195
- )
196
- end
197
-
198
- end
199
-
200
-
201
- class WorksheetWritingTests < BasicTests
202
- desc "writing worksheet markup"
203
-
204
- should "write data markup" do
205
- subject.data(Xmlss::Element::Data.new("some data"))
206
- subject.flush
207
-
208
- assert_equal(
209
- "<Data ss:Type=\"String\">some data</Data>",
210
- subject.element_markup
211
- )
212
- end
213
-
214
- should "write data markup w/ \\n line breaks" do
215
- subject.data(Xmlss::Element::Data.new("line\nbreak", :type => :string))
216
- subject.flush
217
-
218
- assert_equal "<Data ss:Type=\"String\">line#{Xmlss::UndiesWriter::LB}break</Data>", subject.element_markup
219
- end
220
-
221
- should "write data markup w/ \\r line breaks" do
222
- subject.data(Xmlss::Element::Data.new("line\rbreak", :type => :string))
223
- subject.flush
224
-
225
- assert_equal "<Data ss:Type=\"String\">line#{Xmlss::UndiesWriter::LB}break</Data>", subject.element_markup
226
- end
227
-
228
- should "write data markup w/ \\r\\n line breaks" do
229
- subject.data(Xmlss::Element::Data.new("line\r\nbreak", :type => :string))
230
- subject.flush
231
-
232
- assert_equal "<Data ss:Type=\"String\">line#{Xmlss::UndiesWriter::LB}break</Data>", subject.element_markup
233
- end
234
-
235
- should "write data markup w/ \\n\\r line breaks" do
236
- subject.data(Xmlss::Element::Data.new("line\n\rbreak", :type => :string))
237
- subject.flush
238
-
239
- assert_equal "<Data ss:Type=\"String\">line#{Xmlss::UndiesWriter::LB}break</Data>", subject.element_markup
240
- end
241
-
242
- should "write data markup w/ line breaks and leading space" do
243
- subject.data(Xmlss::Element::Data.new(%s{
244
- Should
245
- honor
246
- this}, :type => :string))
247
- subject.flush
248
-
249
- assert_equal(
250
- "<Data ss:Type=\"String\">#{Xmlss::UndiesWriter::LB}Should#{Xmlss::UndiesWriter::LB} honor#{Xmlss::UndiesWriter::LB} this</Data>",
251
- subject.element_markup
252
- )
253
- end
254
-
255
- should "write data markup w/ escaped values" do
256
- subject.data(Xmlss::Element::Data.new("some\n&<>'\"/\ndata"))
257
- subject.flush
258
-
259
- assert_equal(
260
- "<Data ss:Type=\"String\">some&#13;&#10;&amp;&lt;&gt;&#x27;&quot;&#x2F;&#13;&#10;data</Data>",
261
- subject.element_markup
262
- )
263
- end
264
-
265
- should "write cell markup" do
266
- subject.cell(Xmlss::Element::Cell.new({:index => 2})) {
267
- subject.data(Xmlss::Element::Data.new("some data"))
268
- }
269
- subject.flush
270
-
271
- assert_equal(
272
- "<Cell ss:Index=\"2\"><Data ss:Type=\"String\">some data</Data></Cell>",
273
- subject.element_markup
274
- )
275
- end
276
-
277
- should "write row markup" do
278
- subject.row(Xmlss::Element::Row.new({:hidden => true})) {
279
- subject.cell(Xmlss::Element::Cell.new({:index => 2})) {
280
- subject.data(Xmlss::Element::Data.new("some data"))
281
- }
282
- }
283
- subject.flush
284
-
285
- assert_equal(
286
- "<Row ss:Hidden=\"1\"><Cell ss:Index=\"2\"><Data ss:Type=\"String\">some data</Data></Cell></Row>",
287
- subject.element_markup
288
- )
289
- end
290
-
291
- should "write column markup" do
292
- subject.column(Xmlss::Element::Column.new({:hidden => true}))
293
- subject.flush
294
-
295
- assert_equal(
296
- "<Column ss:Hidden=\"1\" />",
297
- subject.element_markup
298
- )
299
- end
300
-
301
- should "write worksheet markup" do
302
- subject.worksheet(Xmlss::Element::Worksheet.new('test')) {
303
- subject.row(Xmlss::Element::Row.new({:hidden => true})) {
304
- subject.cell(Xmlss::Element::Cell.new({:index => 2})) {
305
- subject.data(Xmlss::Element::Data.new("some data"))
306
- }
307
- }
308
- }
309
- subject.flush
310
-
311
- assert_equal(
312
- "<Worksheet ss:Name=\"test\"><Table><Row ss:Hidden=\"1\"><Cell ss:Index=\"2\"><Data ss:Type=\"String\">some data</Data></Cell></Row></Table></Worksheet>",
313
- subject.element_markup
314
- )
315
- end
316
-
317
- should "return workbook markup" do
318
- subject.style(Xmlss::Style::Base.new(:some_font)) {
319
- subject.font(Xmlss::Style::Font.new({:bold => true}))
320
- }
321
-
322
- subject.style(Xmlss::Style::Base.new(:some_numformat)) {
323
- subject.number_format(Xmlss::Style::NumberFormat.new("General"))
324
- }
325
-
326
- subject.worksheet(Xmlss::Element::Worksheet.new('test')) {
327
- subject.row(Xmlss::Element::Row.new({:hidden => true})) {
328
- subject.cell(Xmlss::Element::Cell.new({:index => 2})) {
329
- subject.data(Xmlss::Element::Data.new("some data"))
330
- }
331
- }
332
- }
333
-
334
- subject.flush
335
-
336
- assert_equal(
337
- "<?xml version=\"1.0\" encoding=\"UTF-8\"?><Workbook xmlns=\"urn:schemas-microsoft-com:office:spreadsheet\" xmlns:ss=\"urn:schemas-microsoft-com:office:spreadsheet\"><Styles><Style ss:ID=\"some_font\"><Font ss:Bold=\"1\" /></Style><Style ss:ID=\"some_numformat\"><NumberFormat ss:Format=\"General\" /></Style></Styles><Worksheet ss:Name=\"test\"><Table><Row ss:Hidden=\"1\"><Cell ss:Index=\"2\"><Data ss:Type=\"String\">some data</Data></Cell></Row></Table></Worksheet></Workbook>",
338
- subject.workbook
339
- )
340
- end
341
-
342
- should "return pretty workbook markup" do
343
- writer = Xmlss::UndiesWriter.new(:pp => 2)
344
- writer.style(Xmlss::Style::Base.new(:some_font)) {
345
- writer.font(Xmlss::Style::Font.new({:bold => true}))
346
- }
347
-
348
- writer.style(Xmlss::Style::Base.new(:some_numformat)) {
349
- writer.number_format(Xmlss::Style::NumberFormat.new("General"))
350
- }
351
-
352
- writer.worksheet(Xmlss::Element::Worksheet.new('test')) {
353
- writer.row(Xmlss::Element::Row.new({:hidden => true})) {
354
- writer.cell(Xmlss::Element::Cell.new({:index => 2})) {
355
- writer.data(Xmlss::Element::Data.new("some data"))
356
- }
357
- }
358
- }
359
-
360
- writer.flush
361
-
362
- assert_equal(
363
- "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<Workbook xmlns=\"urn:schemas-microsoft-com:office:spreadsheet\" xmlns:ss=\"urn:schemas-microsoft-com:office:spreadsheet\">\n <Styles>\n <Style ss:ID=\"some_font\">\n <Font ss:Bold=\"1\" />\n </Style>\n <Style ss:ID=\"some_numformat\">\n <NumberFormat ss:Format=\"General\" />\n </Style>\n </Styles>\n <Worksheet ss:Name=\"test\">\n <Table>\n <Row ss:Hidden=\"1\">\n <Cell ss:Index=\"2\">\n <Data ss:Type=\"String\">some data</Data>\n </Cell>\n </Row>\n </Table>\n </Worksheet>\n</Workbook>",
364
- writer.workbook
365
- )
366
- end
367
-
368
-
369
-
370
- end
371
-
372
- end