xmlss 0.4.1 → 1.0.0.rc.1
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.
- data/Gemfile.lock +3 -3
- data/README.rdoc +4 -4
- data/bench/profiler_runner.rb +1 -1
- data/examples/example_workbook.rb +1 -1
- data/examples/simple.rb +18 -1
- data/examples/simple.xml +22 -0
- data/lib/xmlss/element/cell.rb +52 -1
- data/lib/xmlss/element/column.rb +2 -0
- data/lib/xmlss/element/row.rb +2 -0
- data/lib/xmlss/element/worksheet.rb +14 -6
- data/lib/xmlss/element_stack.rb +69 -0
- data/lib/xmlss/style/alignment.rb +2 -0
- data/lib/xmlss/style/base.rb +2 -0
- data/lib/xmlss/style/border.rb +10 -0
- data/lib/xmlss/style/font.rb +2 -0
- data/lib/xmlss/style/interior.rb +2 -0
- data/lib/xmlss/style/number_format.rb +2 -0
- data/lib/xmlss/style/protection.rb +2 -0
- data/lib/xmlss/version.rb +1 -1
- data/lib/xmlss/workbook.rb +75 -58
- data/lib/xmlss/writer.rb +244 -0
- data/test/element/cell_test.rb +60 -1
- data/test/element/column_test.rb +5 -0
- data/test/element/row_test.rb +5 -0
- data/test/element/worksheet_test.rb +9 -4
- data/test/element_stack_test.rb +117 -0
- data/test/style/alignment_test.rb +5 -0
- data/test/style/base_test.rb +5 -0
- data/test/style/border_test.rb +26 -2
- data/test/style/font_test.rb +5 -0
- data/test/style/interior_test.rb +5 -0
- data/test/style/number_format_test.rb +5 -0
- data/test/style/protection_test.rb +6 -1
- data/test/workbook_test.rb +29 -13
- data/test/writer_test.rb +413 -0
- data/xmlss.gemspec +1 -1
- metadata +30 -25
- data/lib/xmlss/element/data.rb +0 -58
- data/lib/xmlss/undies_writer.rb +0 -175
- data/test/element/data_test.rb +0 -67
- data/test/undies_writer_test.rb +0 -372
data/test/workbook_test.rb
CHANGED
@@ -5,20 +5,28 @@ module Xmlss::Worbook
|
|
5
5
|
|
6
6
|
class BasicTests < Assert::Context
|
7
7
|
desc "Xmlss::Workbook"
|
8
|
-
before { @wkbk = Xmlss::Workbook.new }
|
8
|
+
before { @wkbk = Xmlss::Workbook.new(Xmlss::Writer.new) }
|
9
9
|
subject { @wkbk }
|
10
10
|
|
11
|
+
should have_class_method :writer, :styles_stack, :worksheets_stack
|
11
12
|
should have_instance_methods :to_s, :to_file
|
12
|
-
|
13
|
+
|
13
14
|
should have_instance_methods :style, :alignment, :borders, :border
|
14
15
|
should have_instance_methods :font, :interior, :number_format, :protection
|
15
16
|
|
17
|
+
should have_instance_methods :worksheet, :column, :row, :cell
|
18
|
+
|
19
|
+
should have_instance_methods :data, :type
|
20
|
+
should have_instance_methods :index, :style_id, :formula, :href
|
21
|
+
should have_instance_methods :merge_across, :merge_down, :height
|
22
|
+
should have_instance_methods :auto_fit_height, :hidden, :width
|
23
|
+
should have_instance_methods :auto_fit_width, :name
|
24
|
+
|
16
25
|
should "return element objs when calling its element methods" do
|
17
26
|
assert_kind_of Xmlss::Element::Worksheet, subject.worksheet('test')
|
18
27
|
assert_kind_of Xmlss::Element::Column, subject.column
|
19
28
|
assert_kind_of Xmlss::Element::Row, subject.row
|
20
29
|
assert_kind_of Xmlss::Element::Cell, subject.cell
|
21
|
-
assert_kind_of Xmlss::Element::Data, subject.data('test')
|
22
30
|
end
|
23
31
|
|
24
32
|
should "return style objs when calling its style methods" do
|
@@ -31,6 +39,13 @@ module Xmlss::Worbook
|
|
31
39
|
assert_kind_of Xmlss::Style::Protection, subject.protection
|
32
40
|
end
|
33
41
|
|
42
|
+
should "not complain if setting an attribute when there's no current element" do
|
43
|
+
# it should just do nothing and go on
|
44
|
+
assert_nothing_raised do
|
45
|
+
subject.index(1)
|
46
|
+
end
|
47
|
+
end
|
48
|
+
|
34
49
|
should "return workbook markup string" do
|
35
50
|
assert_match /<Workbook /, subject.to_s
|
36
51
|
end
|
@@ -46,7 +61,7 @@ module Xmlss::Worbook
|
|
46
61
|
end
|
47
62
|
|
48
63
|
should "maintain the workbook's scope throughout content blocks" do
|
49
|
-
wkbk = Xmlss::Workbook.new do
|
64
|
+
wkbk = Xmlss::Workbook.new(Xmlss::Writer.new) do
|
50
65
|
style('test') {
|
51
66
|
alignment
|
52
67
|
borders {
|
@@ -57,7 +72,8 @@ module Xmlss::Worbook
|
|
57
72
|
number_format
|
58
73
|
protection
|
59
74
|
}
|
60
|
-
worksheet
|
75
|
+
worksheet {
|
76
|
+
name 'test'
|
61
77
|
column
|
62
78
|
|
63
79
|
row {
|
@@ -67,7 +83,7 @@ module Xmlss::Worbook
|
|
67
83
|
end
|
68
84
|
|
69
85
|
assert_equal(
|
70
|
-
"<?xml version=\"1.0\" encoding=\"UTF-8\"
|
86
|
+
"<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<Workbook xmlns=\"urn:schemas-microsoft-com:office:spreadsheet\" xmlns:ss=\"urn:schemas-microsoft-com:office:spreadsheet\"><Styles><Style ss:ID=\"test\"><Alignment /><Borders><Border ss:LineStyle=\"Continuous\" ss:Weight=\"1\" /></Borders><Font /><Interior /><NumberFormat /><Protection /></Style></Styles><Worksheet ss:Name=\"test\"><Table><Column /><Row><Cell><Data ss:Type=\"Number\">#{wkbk.object_id}</Data></Cell></Row></Table></Worksheet></Workbook>",
|
71
87
|
wkbk.to_s
|
72
88
|
)
|
73
89
|
end
|
@@ -78,31 +94,31 @@ module Xmlss::Worbook
|
|
78
94
|
|
79
95
|
should "bork if non hash-like data is provided" do
|
80
96
|
assert_raises NoMethodError do
|
81
|
-
Xmlss::Workbook.new(
|
97
|
+
Xmlss::Workbook.new(Xmlss::Writer.new, "some data")
|
82
98
|
end
|
83
99
|
assert_respond_to(
|
84
100
|
:some,
|
85
|
-
Xmlss::Workbook.new(
|
101
|
+
Xmlss::Workbook.new(Xmlss::Writer.new, :some => 'data')
|
86
102
|
)
|
87
103
|
end
|
88
104
|
|
89
105
|
should "complain if trying to set data that conflict with public methods" do
|
90
106
|
assert_raises ArgumentError do
|
91
|
-
Xmlss::Workbook.new(
|
107
|
+
Xmlss::Workbook.new(Xmlss::Writer.new, :worksheet => "yay!")
|
92
108
|
end
|
93
109
|
end
|
94
110
|
|
95
111
|
should "respond to each data key with its value" do
|
96
|
-
wkbk = Xmlss::Workbook.new(
|
112
|
+
wkbk = Xmlss::Workbook.new(Xmlss::Writer.new, :some => 'data')
|
97
113
|
assert_equal "data", wkbk.some
|
98
114
|
end
|
99
115
|
|
100
116
|
should "be able to access its data in the workbook definition" do
|
101
|
-
wkbk = Xmlss::Workbook.new(
|
102
|
-
worksheet
|
117
|
+
wkbk = Xmlss::Workbook.new(Xmlss::Writer.new, :worksheet_name => "awesome") do
|
118
|
+
worksheet worksheet_name
|
103
119
|
end
|
104
120
|
assert_equal(
|
105
|
-
"<?xml version=\"1.0\" encoding=\"UTF-8\"
|
121
|
+
"<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<Workbook xmlns=\"urn:schemas-microsoft-com:office:spreadsheet\" xmlns:ss=\"urn:schemas-microsoft-com:office:spreadsheet\"><Styles></Styles><Worksheet ss:Name=\"awesome\"><Table /></Worksheet></Workbook>",
|
106
122
|
wkbk.to_s
|
107
123
|
)
|
108
124
|
end
|
data/test/writer_test.rb
ADDED
@@ -0,0 +1,413 @@
|
|
1
|
+
require 'assert'
|
2
|
+
|
3
|
+
require 'xmlss/writer'
|
4
|
+
require 'xmlss/workbook'
|
5
|
+
|
6
|
+
module Xmlss
|
7
|
+
|
8
|
+
|
9
|
+
|
10
|
+
class BasicTests < Assert::Context
|
11
|
+
desc "UndiesWriter"
|
12
|
+
setup do
|
13
|
+
@w = Writer.new
|
14
|
+
end
|
15
|
+
subject { @w }
|
16
|
+
|
17
|
+
should have_class_methods :attributes, :classify, :coerce
|
18
|
+
should have_readers :styles_markup, :worksheets_markup
|
19
|
+
should have_instance_methods :write, :push, :pop, :flush, :workbook
|
20
|
+
|
21
|
+
should have_instance_methods :style, :alignment, :borders, :border
|
22
|
+
should have_instance_methods :font, :interior, :number_format, :protection
|
23
|
+
|
24
|
+
should have_instance_methods :worksheet, :column, :row, :cell
|
25
|
+
|
26
|
+
should "have empty markup by default" do
|
27
|
+
assert_empty subject.worksheets_markup
|
28
|
+
assert_empty subject.styles_markup
|
29
|
+
end
|
30
|
+
|
31
|
+
should "return itself when flushed" do
|
32
|
+
assert_equal subject, subject.flush
|
33
|
+
end
|
34
|
+
|
35
|
+
end
|
36
|
+
|
37
|
+
|
38
|
+
|
39
|
+
class HelpersTests < BasicTests
|
40
|
+
|
41
|
+
should "coerce certain values for xml output" do
|
42
|
+
assert_equal 1, Writer.coerce(true)
|
43
|
+
assert_nil Writer.coerce(false)
|
44
|
+
assert_nil Writer.coerce("")
|
45
|
+
assert_equal "hi", Writer.coerce("hi")
|
46
|
+
assert_equal 1, Writer.coerce(1)
|
47
|
+
end
|
48
|
+
|
49
|
+
should "classify underscored string" do
|
50
|
+
assert_equal "Hi", Writer.classify("Hi")
|
51
|
+
assert_equal "Hi", Writer.classify("hi")
|
52
|
+
assert_equal "Hithere", Writer.classify("HiThere")
|
53
|
+
assert_equal "Hithere", Writer.classify("hithere")
|
54
|
+
assert_equal "HiThere", Writer.classify("Hi_There")
|
55
|
+
assert_equal "HiThere", Writer.classify("Hi_there")
|
56
|
+
assert_equal "HiThere", Writer.classify("hi_there")
|
57
|
+
end
|
58
|
+
|
59
|
+
should "convert a list of attributes for xml output" do
|
60
|
+
class Thing
|
61
|
+
def keys; [:thing, :other, 'some', 'hi', :hi_there]; end
|
62
|
+
|
63
|
+
def thing; true; end
|
64
|
+
def other; false; end
|
65
|
+
def some; ""; end
|
66
|
+
def hi; :there; end
|
67
|
+
def hi_there; "you"; end
|
68
|
+
end
|
69
|
+
thing = Thing.new
|
70
|
+
exp = {
|
71
|
+
"ss:Hi" => "there",
|
72
|
+
"ss:HiThere" => "you",
|
73
|
+
"ss:Thing" => "1"
|
74
|
+
}
|
75
|
+
|
76
|
+
assert_equal exp, Writer.attributes(thing, thing.keys)
|
77
|
+
end
|
78
|
+
|
79
|
+
end
|
80
|
+
|
81
|
+
|
82
|
+
|
83
|
+
class StyleWritingTests < BasicTests
|
84
|
+
|
85
|
+
should "write alignment markup" do
|
86
|
+
subject.write(Xmlss::Style::Alignment.new({
|
87
|
+
:wrap_text => true,
|
88
|
+
:horizontal => :center,
|
89
|
+
:vertical => :bottom,
|
90
|
+
:rotate => 90
|
91
|
+
}))
|
92
|
+
subject.flush
|
93
|
+
|
94
|
+
assert_equal(
|
95
|
+
"<Alignment ss:Horizontal=\"Center\" ss:Rotate=\"90\" ss:Vertical=\"Bottom\" ss:WrapText=\"1\" />",
|
96
|
+
subject.styles_markup.to_s
|
97
|
+
)
|
98
|
+
end
|
99
|
+
|
100
|
+
should "write border markup" do
|
101
|
+
subject.write(Xmlss::Style::Border.new({
|
102
|
+
:color => '#FF0000',
|
103
|
+
:position => :top,
|
104
|
+
:weight => :thick,
|
105
|
+
:line_style => :dot
|
106
|
+
}))
|
107
|
+
subject.flush
|
108
|
+
|
109
|
+
assert_equal(
|
110
|
+
"<Border ss:Color=\"#FF0000\" ss:LineStyle=\"Dot\" ss:Position=\"Top\" ss:Weight=\"3\" />",
|
111
|
+
subject.styles_markup.to_s
|
112
|
+
)
|
113
|
+
end
|
114
|
+
|
115
|
+
should "write border collection markup" do
|
116
|
+
subject.write(Xmlss::Style::Borders.new)
|
117
|
+
subject.push(:styles)
|
118
|
+
|
119
|
+
subject.write(Xmlss::Style::Border.new({
|
120
|
+
:color => '#FF0000',
|
121
|
+
:position => :top
|
122
|
+
}))
|
123
|
+
|
124
|
+
subject.write(Xmlss::Style::Border.new({
|
125
|
+
:position => :left
|
126
|
+
}))
|
127
|
+
|
128
|
+
subject.flush
|
129
|
+
|
130
|
+
assert_equal(
|
131
|
+
"<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>",
|
132
|
+
subject.styles_markup.to_s
|
133
|
+
)
|
134
|
+
end
|
135
|
+
|
136
|
+
should "write font markup" do
|
137
|
+
subject.write(Xmlss::Style::Font.new({
|
138
|
+
:bold => true,
|
139
|
+
:color => '#FF0000',
|
140
|
+
:italic => true,
|
141
|
+
:size => 10,
|
142
|
+
:strike_through => true,
|
143
|
+
:underline => :single,
|
144
|
+
:alignment => :superscript,
|
145
|
+
:name => 'Verdana'
|
146
|
+
}))
|
147
|
+
subject.flush
|
148
|
+
|
149
|
+
assert_equal(
|
150
|
+
"<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\" />",
|
151
|
+
subject.styles_markup.to_s
|
152
|
+
)
|
153
|
+
end
|
154
|
+
|
155
|
+
should "write interior markup" do
|
156
|
+
subject.write(Xmlss::Style::Interior.new({
|
157
|
+
:color => "#000000",
|
158
|
+
:pattern => :solid,
|
159
|
+
:pattern_color => "#FF0000"
|
160
|
+
}))
|
161
|
+
subject.flush
|
162
|
+
|
163
|
+
assert_equal(
|
164
|
+
"<Interior ss:Color=\"#000000\" ss:Pattern=\"Solid\" ss:PatternColor=\"#FF0000\" />",
|
165
|
+
subject.styles_markup.to_s
|
166
|
+
)
|
167
|
+
end
|
168
|
+
|
169
|
+
should "write number format markup" do
|
170
|
+
subject.write(Xmlss::Style::NumberFormat.new("General"))
|
171
|
+
subject.flush
|
172
|
+
|
173
|
+
assert_equal(
|
174
|
+
"<NumberFormat ss:Format=\"General\" />",
|
175
|
+
subject.styles_markup.to_s
|
176
|
+
)
|
177
|
+
end
|
178
|
+
|
179
|
+
should "write protection markup" do
|
180
|
+
subject.write(Xmlss::Style::Protection.new(true))
|
181
|
+
subject.flush
|
182
|
+
|
183
|
+
assert_equal(
|
184
|
+
"<Protection ss:Protect=\"1\" />",
|
185
|
+
subject.styles_markup.to_s
|
186
|
+
)
|
187
|
+
end
|
188
|
+
|
189
|
+
should "write full style markup" do
|
190
|
+
subject.write(Xmlss::Style::Base.new(:write_markup_test))
|
191
|
+
subject.push(:styles)
|
192
|
+
|
193
|
+
subject.write(Xmlss::Style::Alignment.new({
|
194
|
+
:horizontal => :left,
|
195
|
+
:vertical => :center,
|
196
|
+
:wrap_text => true
|
197
|
+
}))
|
198
|
+
|
199
|
+
subject.write(Xmlss::Style::Borders.new)
|
200
|
+
subject.push(:styles)
|
201
|
+
|
202
|
+
subject.write(Xmlss::Style::Border.new({:position => :left}))
|
203
|
+
subject.write(Xmlss::Style::Border.new({:position => :right}))
|
204
|
+
|
205
|
+
subject.pop(:styles)
|
206
|
+
subject.write(Xmlss::Style::Font.new({:bold => true}))
|
207
|
+
subject.write(Xmlss::Style::Interior.new({:color => "#000000"}))
|
208
|
+
subject.write(Xmlss::Style::NumberFormat.new("General"))
|
209
|
+
subject.write(Xmlss::Style::Protection.new(true))
|
210
|
+
|
211
|
+
subject.flush
|
212
|
+
|
213
|
+
assert_equal(
|
214
|
+
"<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>",
|
215
|
+
subject.styles_markup.to_s
|
216
|
+
)
|
217
|
+
end
|
218
|
+
|
219
|
+
end
|
220
|
+
|
221
|
+
|
222
|
+
|
223
|
+
class WorksheetWritingTests < BasicTests
|
224
|
+
desc "writing worksheet markup"
|
225
|
+
|
226
|
+
should "write cell data markup" do
|
227
|
+
subject.write(Xmlss::Element::Cell.new("some data"))
|
228
|
+
subject.flush
|
229
|
+
|
230
|
+
assert_equal(
|
231
|
+
"<Cell><Data ss:Type=\"String\">some data</Data></Cell>",
|
232
|
+
subject.worksheets_markup.to_s
|
233
|
+
)
|
234
|
+
end
|
235
|
+
|
236
|
+
should "write cell data markup w/ \\n line breaks" do
|
237
|
+
subject.write(Xmlss::Element::Cell.new("line\nbreak", :type => :string))
|
238
|
+
subject.flush
|
239
|
+
|
240
|
+
assert_equal "<Cell><Data ss:Type=\"String\">line#{Writer::LB}break</Data></Cell>", subject.worksheets_markup.to_s
|
241
|
+
end
|
242
|
+
|
243
|
+
should "write cell data markup w/ \\r line breaks" do
|
244
|
+
subject.write(Xmlss::Element::Cell.new("line\rbreak", :type => :string))
|
245
|
+
subject.flush
|
246
|
+
|
247
|
+
assert_equal "<Cell><Data ss:Type=\"String\">line#{Writer::LB}break</Data></Cell>", subject.worksheets_markup.to_s
|
248
|
+
end
|
249
|
+
|
250
|
+
should "write cell data markup w/ \\r\\n line breaks" do
|
251
|
+
subject.write(Xmlss::Element::Cell.new("line\r\nbreak", :type => :string))
|
252
|
+
subject.flush
|
253
|
+
|
254
|
+
assert_equal "<Cell><Data ss:Type=\"String\">line#{Writer::LB}break</Data></Cell>", subject.worksheets_markup.to_s
|
255
|
+
end
|
256
|
+
|
257
|
+
should "write cell data markup w/ \\n\\r line breaks" do
|
258
|
+
subject.write(Xmlss::Element::Cell.new("line\n\rbreak", :type => :string))
|
259
|
+
subject.flush
|
260
|
+
|
261
|
+
assert_equal "<Cell><Data ss:Type=\"String\">line#{Writer::LB}break</Data></Cell>", subject.worksheets_markup.to_s
|
262
|
+
end
|
263
|
+
|
264
|
+
should "write cell data markup w/ line breaks and leading space" do
|
265
|
+
subject.write(Xmlss::Element::Cell.new(%s{
|
266
|
+
Should
|
267
|
+
honor
|
268
|
+
this}, :type => :string))
|
269
|
+
subject.flush
|
270
|
+
|
271
|
+
assert_equal(
|
272
|
+
"<Cell><Data ss:Type=\"String\">#{Writer::LB}Should#{Writer::LB} honor#{Writer::LB} this</Data></Cell>",
|
273
|
+
subject.worksheets_markup.to_s
|
274
|
+
)
|
275
|
+
end
|
276
|
+
|
277
|
+
should "write cell data markup w/ escaped values" do
|
278
|
+
subject.write(Xmlss::Element::Cell.new("some\n&<>'\"/\ndata"))
|
279
|
+
subject.flush
|
280
|
+
|
281
|
+
assert_equal(
|
282
|
+
"<Cell><Data ss:Type=\"String\">some &<>'"/ data</Data></Cell>",
|
283
|
+
subject.worksheets_markup.to_s
|
284
|
+
)
|
285
|
+
end
|
286
|
+
|
287
|
+
should "write worksheet element markup" do
|
288
|
+
subject.write(Xmlss::Element::Worksheet.new('awesome'))
|
289
|
+
subject.push(:worksheets)
|
290
|
+
|
291
|
+
subject.write(Xmlss::Element::Column.new({
|
292
|
+
:width => 120,
|
293
|
+
:style_id => 'narrowcolumn'
|
294
|
+
}))
|
295
|
+
|
296
|
+
subject.write(Xmlss::Element::Row.new({
|
297
|
+
:hidden => true,
|
298
|
+
:height => 120,
|
299
|
+
:style_id => 'awesome'
|
300
|
+
}))
|
301
|
+
subject.push(:worksheets)
|
302
|
+
|
303
|
+
subject.write(Xmlss::Element::Cell.new({
|
304
|
+
:index => 2,
|
305
|
+
:data => "100",
|
306
|
+
:type => :number,
|
307
|
+
:href => "http://www.google.com"
|
308
|
+
}))
|
309
|
+
|
310
|
+
subject.flush
|
311
|
+
|
312
|
+
assert_equal(
|
313
|
+
"<Worksheet ss:Name=\"awesome\"><Table><Column ss:StyleID=\"narrowcolumn\" ss:Width=\"120\" /><Row ss:Height=\"120\" ss:Hidden=\"1\" ss:StyleID=\"awesome\"><Cell ss:HRef=\"http://www.google.com\" ss:Index=\"2\"><Data ss:Type=\"Number\">100</Data></Cell></Row></Table></Worksheet>",
|
314
|
+
subject.worksheets_markup.to_s
|
315
|
+
)
|
316
|
+
end
|
317
|
+
|
318
|
+
should "write multiple cells with data in a row" do
|
319
|
+
subject.write(Xmlss::Element::Row.new)
|
320
|
+
subject.push(:worksheets)
|
321
|
+
|
322
|
+
2.times { subject.write(Xmlss::Element::Cell.new("100")) }
|
323
|
+
subject.pop(:worksheets)
|
324
|
+
|
325
|
+
subject.flush
|
326
|
+
|
327
|
+
assert_equal(
|
328
|
+
"<Row><Cell><Data ss:Type=\"String\">100</Data></Cell><Cell><Data ss:Type=\"String\">100</Data></Cell></Row>",
|
329
|
+
subject.worksheets_markup.to_s
|
330
|
+
)
|
331
|
+
end
|
332
|
+
|
333
|
+
should "write multiple rows with cells in a worksheet" do
|
334
|
+
subject.write(Xmlss::Element::Worksheet.new('two rows'))
|
335
|
+
subject.push(:worksheets)
|
336
|
+
|
337
|
+
subject.write(Xmlss::Element::Row.new)
|
338
|
+
subject.push(:worksheets)
|
339
|
+
subject.write(Xmlss::Element::Cell.new("row1"))
|
340
|
+
subject.pop(:worksheets)
|
341
|
+
|
342
|
+
subject.write(Xmlss::Element::Row.new)
|
343
|
+
subject.push(:worksheets)
|
344
|
+
subject.write(Xmlss::Element::Cell.new("row2"))
|
345
|
+
subject.pop(:worksheets)
|
346
|
+
|
347
|
+
subject.pop(:worksheets)
|
348
|
+
subject.flush
|
349
|
+
|
350
|
+
assert_equal(
|
351
|
+
"<Worksheet ss:Name=\"two rows\"><Table><Row><Cell><Data ss:Type=\"String\">row1</Data></Cell></Row><Row><Cell><Data ss:Type=\"String\">row2</Data></Cell></Row></Table></Worksheet>",
|
352
|
+
subject.worksheets_markup.to_s
|
353
|
+
)
|
354
|
+
end
|
355
|
+
|
356
|
+
end
|
357
|
+
|
358
|
+
|
359
|
+
|
360
|
+
class WorkbookWritingTests < BasicTests
|
361
|
+
|
362
|
+
def build_workbook(writer)
|
363
|
+
writer.write(Xmlss::Style::Base.new(:some_font))
|
364
|
+
writer.push(:styles)
|
365
|
+
writer.write(Xmlss::Style::Font.new({:bold => true}))
|
366
|
+
writer.pop(:styles)
|
367
|
+
|
368
|
+
writer.write(Xmlss::Style::Base.new(:some_numformat))
|
369
|
+
writer.push(:styles)
|
370
|
+
writer.write(Xmlss::Style::NumberFormat.new("General"))
|
371
|
+
writer.pop(:styles)
|
372
|
+
|
373
|
+
writer.write(Xmlss::Element::Worksheet.new('test1'))
|
374
|
+
writer.push(:worksheets)
|
375
|
+
writer.write(Xmlss::Element::Row.new({:hidden => true}))
|
376
|
+
writer.push(:worksheets)
|
377
|
+
writer.write(Xmlss::Element::Cell.new("some data", {:index => 2}))
|
378
|
+
writer.pop(:worksheets)
|
379
|
+
writer.pop(:worksheets)
|
380
|
+
|
381
|
+
writer.write(Xmlss::Element::Worksheet.new('test2'))
|
382
|
+
writer.push(:worksheets)
|
383
|
+
writer.write(Xmlss::Element::Row.new({:hidden => true}))
|
384
|
+
writer.push(:worksheets)
|
385
|
+
writer.write(Xmlss::Element::Cell.new("some data", {:index => 2}))
|
386
|
+
writer.pop(:worksheets)
|
387
|
+
writer.pop(:worksheets)
|
388
|
+
|
389
|
+
writer.flush
|
390
|
+
end
|
391
|
+
|
392
|
+
should "return workbook markup" do
|
393
|
+
build_workbook(subject)
|
394
|
+
assert_equal(
|
395
|
+
"<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<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=\"test1\"><Table><Row ss:Hidden=\"1\"><Cell ss:Index=\"2\"><Data ss:Type=\"String\">some data</Data></Cell></Row></Table></Worksheet><Worksheet ss:Name=\"test2\"><Table><Row ss:Hidden=\"1\"><Cell ss:Index=\"2\"><Data ss:Type=\"String\">some data</Data></Cell></Row></Table></Worksheet></Workbook>",
|
396
|
+
subject.workbook
|
397
|
+
)
|
398
|
+
end
|
399
|
+
|
400
|
+
should "return pretty workbook markup" do
|
401
|
+
writer = Writer.new(:pp => 2)
|
402
|
+
build_workbook(writer)
|
403
|
+
assert_equal(
|
404
|
+
"<?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=\"test1\">\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 <Worksheet ss:Name=\"test2\">\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>",
|
405
|
+
writer.workbook
|
406
|
+
)
|
407
|
+
end
|
408
|
+
|
409
|
+
|
410
|
+
|
411
|
+
end
|
412
|
+
|
413
|
+
end
|
data/xmlss.gemspec
CHANGED
@@ -19,6 +19,6 @@ Gem::Specification.new do |s|
|
|
19
19
|
|
20
20
|
s.add_development_dependency("bundler", ["~> 1.0"])
|
21
21
|
s.add_development_dependency("assert", ["~> 0.6"])
|
22
|
-
s.add_dependency("undies", ["~> 2.2"])
|
22
|
+
s.add_dependency("undies", ["~> 2.2.1"])
|
23
23
|
s.add_dependency("enumeration", ["~> 1.3"])
|
24
24
|
end
|