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.
- 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
|