osheet 0.1.0 → 0.2.0
Sign up to get free protection for your applications and to get access to all the features.
- data/.bundle/config +2 -0
- data/.gitignore +6 -0
- data/Gemfile +4 -0
- data/Gemfile.lock +33 -0
- data/README.rdoc +103 -61
- data/Rakefile +5 -56
- data/examples/basic.rb +73 -0
- data/examples/formats.rb +366 -0
- data/examples/trivial.rb +21 -0
- data/lib/osheet/associations.rb +62 -0
- data/lib/osheet/cell.rb +44 -10
- data/lib/osheet/column.rb +34 -7
- data/lib/osheet/format/accounting.rb +21 -0
- data/lib/osheet/format/currency.rb +23 -0
- data/lib/osheet/format/custom.rb +13 -0
- data/lib/osheet/format/datetime.rb +13 -0
- data/lib/osheet/format/fraction.rb +33 -0
- data/lib/osheet/format/general.rb +9 -0
- data/lib/osheet/format/number.rb +13 -0
- data/lib/osheet/format/numeric.rb +113 -0
- data/lib/osheet/format/percentage.rb +25 -0
- data/lib/osheet/format/scientific.rb +25 -0
- data/lib/osheet/format/special.rb +28 -0
- data/lib/osheet/format/text.rb +11 -0
- data/lib/osheet/format.rb +30 -0
- data/lib/osheet/row.rb +32 -7
- data/lib/osheet/style.rb +65 -0
- data/lib/osheet/style_set.rb +39 -0
- data/lib/osheet/styled_element.rb +18 -0
- data/lib/osheet/template.rb +32 -0
- data/lib/osheet/template_set.rb +57 -0
- data/lib/osheet/version.rb +1 -11
- data/lib/osheet/workbook.rb +32 -16
- data/lib/osheet/workbook_element.rb +21 -0
- data/lib/osheet/worksheet.rb +18 -20
- data/lib/osheet/worksheet_element.rb +15 -0
- data/lib/osheet/xmlss_writer/base.rb +42 -0
- data/lib/osheet/xmlss_writer/elements.rb +68 -0
- data/lib/osheet/xmlss_writer/styles.rb +176 -0
- data/lib/osheet/xmlss_writer.rb +1 -0
- data/lib/osheet.rb +7 -27
- data/osheet.gemspec +26 -0
- data/test/cell_test.rb +83 -0
- data/test/column_test.rb +81 -0
- data/test/env.rb +9 -0
- data/test/format/accounting_test.rb +158 -0
- data/test/format/currency_test.rb +158 -0
- data/test/format/custom_test.rb +22 -0
- data/test/format/datetime_test.rb +22 -0
- data/test/format/fraction_test.rb +84 -0
- data/test/format/general_test.rb +21 -0
- data/test/format/number_test.rb +93 -0
- data/test/format/percentage_test.rb +116 -0
- data/test/format/scientific_test.rb +116 -0
- data/test/format/special_test.rb +51 -0
- data/test/format/text_test.rb +18 -0
- data/test/format_test.rb +35 -0
- data/test/helper.rb +101 -0
- data/test/osheet_test.rb +14 -0
- data/test/row_test.rb +78 -0
- data/test/style_set_test.rb +50 -0
- data/test/style_test.rb +92 -0
- data/test/template_set_test.rb +76 -0
- data/test/template_test.rb +63 -0
- data/test/workbook_test.rb +142 -0
- data/test/worksheet_test.rb +77 -0
- data/test/xmlss_writer/base_test.rb +92 -0
- data/test/xmlss_writer/elements_test.rb +168 -0
- data/test/xmlss_writer/styles_test.rb +253 -0
- metadata +141 -30
- data/lib/osheet/base.rb +0 -95
@@ -0,0 +1,77 @@
|
|
1
|
+
require "test/helper"
|
2
|
+
require 'osheet/worksheet'
|
3
|
+
|
4
|
+
module Osheet
|
5
|
+
class WorksheetTest < Test::Unit::TestCase
|
6
|
+
|
7
|
+
context "Osheet::Worksheet" do
|
8
|
+
subject { Worksheet.new }
|
9
|
+
|
10
|
+
should_be_a_workbook_element(Worksheet)
|
11
|
+
|
12
|
+
should_have_instance_methods :name, :attributes
|
13
|
+
|
14
|
+
should "set it's defaults" do
|
15
|
+
assert_equal nil, subject.send(:instance_variable_get, "@name")
|
16
|
+
assert_equal [], subject.columns
|
17
|
+
assert_equal [], subject.rows
|
18
|
+
end
|
19
|
+
|
20
|
+
should_hm(Worksheet, :columns, Column)
|
21
|
+
should_hm(Worksheet, :rows, Row)
|
22
|
+
|
23
|
+
context "that has some columns and rows" do
|
24
|
+
subject do
|
25
|
+
Worksheet.new do
|
26
|
+
name "Poo!"
|
27
|
+
|
28
|
+
column
|
29
|
+
|
30
|
+
row do
|
31
|
+
cell do
|
32
|
+
format :number
|
33
|
+
data 1
|
34
|
+
end
|
35
|
+
end
|
36
|
+
end
|
37
|
+
end
|
38
|
+
|
39
|
+
should "set it's name" do
|
40
|
+
assert_equal "Poo!", subject.send(:instance_variable_get, "@name")
|
41
|
+
end
|
42
|
+
|
43
|
+
should "know it's name" do
|
44
|
+
subject.name(false)
|
45
|
+
assert_equal false, subject.name
|
46
|
+
subject.name('la')
|
47
|
+
assert_equal 'la', subject.name
|
48
|
+
subject.name(nil)
|
49
|
+
assert_equal 'la', subject.name
|
50
|
+
end
|
51
|
+
|
52
|
+
should "know it's attribute(s)" do
|
53
|
+
[:name].each do |a|
|
54
|
+
assert subject.attributes.has_key?(a)
|
55
|
+
end
|
56
|
+
assert_equal "Poo!", subject.attributes[:name]
|
57
|
+
end
|
58
|
+
should "set it's columns" do
|
59
|
+
columns = subject.columns
|
60
|
+
assert_equal 1, columns.size
|
61
|
+
assert_kind_of Column, columns.first
|
62
|
+
assert_equal subject.columns, columns.first.columns
|
63
|
+
end
|
64
|
+
|
65
|
+
should "set it's rows" do
|
66
|
+
rows = subject.rows
|
67
|
+
assert_equal 1, rows.size
|
68
|
+
assert_kind_of Row, rows.first
|
69
|
+
assert_equal subject.columns, rows.first.columns
|
70
|
+
assert_equal subject.columns, rows.first.cells.first.columns
|
71
|
+
end
|
72
|
+
end
|
73
|
+
|
74
|
+
end
|
75
|
+
|
76
|
+
end
|
77
|
+
end
|
@@ -0,0 +1,92 @@
|
|
1
|
+
require "test/helper"
|
2
|
+
require 'osheet/xmlss_writer'
|
3
|
+
|
4
|
+
module Osheet
|
5
|
+
|
6
|
+
class XmlssWriter::BaseTest < Test::Unit::TestCase
|
7
|
+
context "XmlssWriter::Base" do
|
8
|
+
subject { XmlssWriter::Base.new }
|
9
|
+
|
10
|
+
should_have_readers :workbook, :styles
|
11
|
+
should_have_writer :workbook
|
12
|
+
|
13
|
+
end
|
14
|
+
end
|
15
|
+
|
16
|
+
class XmlssWriter::Workbook < Test::Unit::TestCase
|
17
|
+
context "XmlssWriter workbook" do
|
18
|
+
subject { XmlssWriter::Base.new }
|
19
|
+
before do
|
20
|
+
@workbook = Workbook.new {
|
21
|
+
title "xmlss"
|
22
|
+
worksheet { name "testsheet1" }
|
23
|
+
}
|
24
|
+
end
|
25
|
+
|
26
|
+
should "allow writing an Osheet::Workbook" do
|
27
|
+
assert_nothing_raised do
|
28
|
+
subject.workbook = @workbook
|
29
|
+
end
|
30
|
+
assert_raises ArgumentError do
|
31
|
+
subject.workbook = "poo"
|
32
|
+
end
|
33
|
+
end
|
34
|
+
|
35
|
+
should "create an Xmlss workbook" do
|
36
|
+
assert_nothing_raised do
|
37
|
+
subject.workbook = @workbook
|
38
|
+
end
|
39
|
+
assert_kind_of ::Xmlss::Workbook, subject.workbook
|
40
|
+
assert_equal @workbook.worksheets.size, subject.workbook.worksheets.size
|
41
|
+
end
|
42
|
+
end
|
43
|
+
end
|
44
|
+
|
45
|
+
class XmlssWriter::ToData < Test::Unit::TestCase
|
46
|
+
context "XmlssWriter::Base" do
|
47
|
+
subject do
|
48
|
+
XmlssWriter::Base.new({
|
49
|
+
:workbook => Workbook.new {
|
50
|
+
title "written"
|
51
|
+
worksheet {
|
52
|
+
name "Poo!"
|
53
|
+
column
|
54
|
+
row {
|
55
|
+
cell {
|
56
|
+
data 1
|
57
|
+
format :number
|
58
|
+
}
|
59
|
+
}
|
60
|
+
}
|
61
|
+
}
|
62
|
+
})
|
63
|
+
end
|
64
|
+
after do
|
65
|
+
# remove any test files this creates
|
66
|
+
end
|
67
|
+
|
68
|
+
should_have_instance_methods :to_data, :to_file
|
69
|
+
|
70
|
+
should "return string xml data" do
|
71
|
+
xml_data = nil
|
72
|
+
assert_nothing_raised do
|
73
|
+
xml_data = subject.to_data
|
74
|
+
end
|
75
|
+
assert_kind_of ::String, xml_data
|
76
|
+
assert_match /^<\?xml/, xml_data
|
77
|
+
end
|
78
|
+
|
79
|
+
should "write xml data to a file path" do
|
80
|
+
path = nil
|
81
|
+
assert_nothing_raised do
|
82
|
+
path = subject.to_file("./tmp/base_test.xls")
|
83
|
+
end
|
84
|
+
assert_kind_of ::String, path
|
85
|
+
assert_equal './tmp/base_test.xls', path
|
86
|
+
assert File.exists?(path)
|
87
|
+
end
|
88
|
+
|
89
|
+
end
|
90
|
+
end
|
91
|
+
|
92
|
+
end
|
@@ -0,0 +1,168 @@
|
|
1
|
+
require "test/helper"
|
2
|
+
require 'osheet/xmlss_writer'
|
3
|
+
|
4
|
+
module Osheet
|
5
|
+
|
6
|
+
class XmlssWriter::WorksheetTest < Test::Unit::TestCase
|
7
|
+
context "when writing a worksheet" do
|
8
|
+
subject { XmlssWriter::Base.new }
|
9
|
+
before do
|
10
|
+
@worksheet = Worksheet.new {
|
11
|
+
name "testsheet2"
|
12
|
+
column { width 100 }
|
13
|
+
row { height 50 }
|
14
|
+
}
|
15
|
+
end
|
16
|
+
|
17
|
+
should "create an Xmlss worksheet" do
|
18
|
+
xmlss_worksheet = subject.send(:worksheet, @worksheet)
|
19
|
+
assert_kind_of ::Xmlss::Worksheet, xmlss_worksheet
|
20
|
+
assert_equal @worksheet.attributes[:name], xmlss_worksheet.name
|
21
|
+
assert_kind_of ::Xmlss::Table, xmlss_worksheet.table
|
22
|
+
assert_equal @worksheet.columns.size, xmlss_worksheet.table.columns.size
|
23
|
+
assert_equal @worksheet.rows.size, xmlss_worksheet.table.rows.size
|
24
|
+
end
|
25
|
+
|
26
|
+
should "filter invalid worksheet names" do
|
27
|
+
{ 'valid name' => 'valid name',
|
28
|
+
'valid 2' => 'valid 2',
|
29
|
+
'invalid :' => 'invalid ',
|
30
|
+
'invalid ;' => 'invalid ',
|
31
|
+
'invalid *' => 'invalid ',
|
32
|
+
'invalid /' => 'invalid ',
|
33
|
+
'invalid \\' => 'invalid ',
|
34
|
+
'[invalid]' => "invalid]"
|
35
|
+
}.each do |k,v|
|
36
|
+
assert_equal v, subject.send(:worksheet, Worksheet.new { name k}).name
|
37
|
+
end
|
38
|
+
end
|
39
|
+
end
|
40
|
+
end
|
41
|
+
|
42
|
+
class XmlssWriter::ColumnTest < Test::Unit::TestCase
|
43
|
+
context "when writing a column" do
|
44
|
+
subject { XmlssWriter::Base.new }
|
45
|
+
before do
|
46
|
+
@column = Osheet::Column.new {
|
47
|
+
style_class "awesome"
|
48
|
+
width 100
|
49
|
+
autofit true
|
50
|
+
hidden true
|
51
|
+
meta({
|
52
|
+
:color => 'blue'
|
53
|
+
})
|
54
|
+
}
|
55
|
+
@xmlss_column = subject.send(:column, @column)
|
56
|
+
end
|
57
|
+
|
58
|
+
should "create an Xmlss column" do
|
59
|
+
assert_kind_of ::Xmlss::Column, @xmlss_column
|
60
|
+
assert_equal @column.attributes[:width], @xmlss_column.width
|
61
|
+
assert_equal @column.attributes[:autofit], @xmlss_column.auto_fit_width
|
62
|
+
assert_equal @column.attributes[:hidden], @xmlss_column.hidden
|
63
|
+
end
|
64
|
+
|
65
|
+
should "style an Xmlss column" do
|
66
|
+
assert_equal ".awesome", @xmlss_column.style_id
|
67
|
+
assert_equal 1, subject.styles.size
|
68
|
+
assert_kind_of ::Xmlss::Style::Base, subject.styles.first
|
69
|
+
assert_equal @xmlss_column.style_id, subject.styles.first.id
|
70
|
+
end
|
71
|
+
end
|
72
|
+
end
|
73
|
+
|
74
|
+
class XmlssWriter::RowTest < Test::Unit::TestCase
|
75
|
+
context "when writing a row" do
|
76
|
+
subject { XmlssWriter::Base.new }
|
77
|
+
before do
|
78
|
+
@row = Osheet::Row.new do
|
79
|
+
style_class "awesome thing"
|
80
|
+
height 100
|
81
|
+
autofit true
|
82
|
+
hidden true
|
83
|
+
cell {
|
84
|
+
data 'one hundred'
|
85
|
+
}
|
86
|
+
end
|
87
|
+
subject.workbook = Workbook.new {
|
88
|
+
style('.awesome') {
|
89
|
+
font 14
|
90
|
+
}
|
91
|
+
style('.thing') {
|
92
|
+
font :italic
|
93
|
+
}
|
94
|
+
style('.awesome.thing') {
|
95
|
+
font :bold
|
96
|
+
}
|
97
|
+
}
|
98
|
+
@xmlss_row = subject.send(:row, @row)
|
99
|
+
end
|
100
|
+
|
101
|
+
should "create an Xmlss row" do
|
102
|
+
assert_kind_of ::Xmlss::Row, @xmlss_row
|
103
|
+
assert_equal @row.attributes[:height], @xmlss_row.height
|
104
|
+
assert_equal @row.attributes[:autofit], @xmlss_row.auto_fit_height
|
105
|
+
assert_equal @row.attributes[:hidden], @xmlss_row.hidden
|
106
|
+
assert_equal 1, @xmlss_row.cells.size
|
107
|
+
end
|
108
|
+
|
109
|
+
should "style an Xmlss row" do
|
110
|
+
assert_equal ".awesome.thing", @xmlss_row.style_id
|
111
|
+
assert_equal 1, subject.styles.size
|
112
|
+
assert_kind_of ::Xmlss::Style::Base, subject.styles.first
|
113
|
+
assert_equal @xmlss_row.style_id, subject.styles.first.id
|
114
|
+
assert_equal 14, subject.styles.first.font.size
|
115
|
+
assert_equal true, subject.styles.first.font.bold?
|
116
|
+
assert_equal true, subject.styles.first.font.italic?
|
117
|
+
end
|
118
|
+
end
|
119
|
+
end
|
120
|
+
|
121
|
+
class XmlssWriter::CellTest < Test::Unit::TestCase
|
122
|
+
context "when writing a cell" do
|
123
|
+
subject { XmlssWriter::Base.new }
|
124
|
+
before do
|
125
|
+
@cell = Osheet::Cell.new do
|
126
|
+
style_class "awesome thing"
|
127
|
+
data 100
|
128
|
+
format :number
|
129
|
+
href 'http://example.com'
|
130
|
+
rowspan 2
|
131
|
+
colspan 5
|
132
|
+
end
|
133
|
+
subject.workbook = Workbook.new {
|
134
|
+
style('.awesome') {
|
135
|
+
font 14
|
136
|
+
}
|
137
|
+
style('.thing') {
|
138
|
+
font :italic
|
139
|
+
}
|
140
|
+
style('.awesome.thing') {
|
141
|
+
font :bold
|
142
|
+
}
|
143
|
+
}
|
144
|
+
@xmlss_cell = subject.send(:cell, @cell)
|
145
|
+
end
|
146
|
+
|
147
|
+
should "create an Xmlss cell with appropriate data" do
|
148
|
+
assert_kind_of ::Xmlss::Cell, @xmlss_cell
|
149
|
+
assert_kind_of ::Xmlss::Data, @xmlss_cell.data
|
150
|
+
assert_equal @cell.attributes[:data], @xmlss_cell.data.value
|
151
|
+
assert_equal ::Xmlss::Data.type(:number), @xmlss_cell.data.type
|
152
|
+
assert_equal 'http://example.com', @xmlss_cell.href
|
153
|
+
end
|
154
|
+
|
155
|
+
should "handle rowspan and colspan" do
|
156
|
+
assert_equal 1, @xmlss_cell.merge_down
|
157
|
+
assert_equal 4, @xmlss_cell.merge_across
|
158
|
+
end
|
159
|
+
|
160
|
+
should "style an Xmlss cell" do
|
161
|
+
assert_equal ".awesome.thing..number_none_0_nocomma_black", @xmlss_cell.style_id
|
162
|
+
assert_equal ".awesome.thing..number_none_0_nocomma_black", subject.styles.first.id
|
163
|
+
assert_equal '0', subject.styles.first.number_format.format
|
164
|
+
end
|
165
|
+
end
|
166
|
+
end
|
167
|
+
|
168
|
+
end
|
@@ -0,0 +1,253 @@
|
|
1
|
+
require "test/helper"
|
2
|
+
require 'osheet/xmlss_writer'
|
3
|
+
|
4
|
+
module Osheet
|
5
|
+
|
6
|
+
class XmlssWriter::Style < Test::Unit::TestCase
|
7
|
+
context("Xmlss style writer") do
|
8
|
+
|
9
|
+
subject { XmlssWriter::Base.new }
|
10
|
+
before do
|
11
|
+
subject.workbook = Workbook.new {
|
12
|
+
style('.font.size') { font 14 }
|
13
|
+
style('.font.weight') { font :bold }
|
14
|
+
style('.font.style') { font :italic }
|
15
|
+
}
|
16
|
+
end
|
17
|
+
|
18
|
+
should "key styles based off class str and format" do
|
19
|
+
assert_equal '', subject.send(:style_key, '', nil)
|
20
|
+
assert_equal '.awesome', subject.send(:style_key, 'awesome', nil)
|
21
|
+
assert_equal '.awesome.thing', subject.send(:style_key, 'awesome thing', nil)
|
22
|
+
assert_equal '.awesome..something', subject.send(:style_key, 'awesome', 'something')
|
23
|
+
assert_equal '..something', subject.send(:style_key, '', 'something')
|
24
|
+
end
|
25
|
+
|
26
|
+
should "not build a style obj when writing styles with no class str or format" do
|
27
|
+
assert_equal nil, subject.send(:style, '')
|
28
|
+
end
|
29
|
+
|
30
|
+
should "build a style obj and add it to the writers styles" do
|
31
|
+
xmlss_style = subject.send(:style, 'awesome')
|
32
|
+
assert_kind_of ::Xmlss::Style::Base, xmlss_style
|
33
|
+
assert_equal '.awesome', xmlss_style.id
|
34
|
+
assert_equal 1, subject.styles.size
|
35
|
+
assert_equal xmlss_style, subject.styles.first
|
36
|
+
end
|
37
|
+
|
38
|
+
should "build a style obj from many matching osheet styles" do
|
39
|
+
xmlss_style = subject.send(:style, 'font size weight style')
|
40
|
+
assert_equal 14, xmlss_style.font.size
|
41
|
+
assert_equal true, xmlss_style.font.bold?
|
42
|
+
assert_equal true, xmlss_style.font.italic?
|
43
|
+
end
|
44
|
+
|
45
|
+
should "provide style ids" do
|
46
|
+
assert_equal '', subject.send(:style_id, '')
|
47
|
+
assert_equal '.awesome', subject.send(:style_id, 'awesome')
|
48
|
+
assert_equal '..number_none_0_nocomma_black', subject.send(:style_id, '', Osheet::Format.new(:number))
|
49
|
+
assert_equal 2, subject.styles.size
|
50
|
+
end
|
51
|
+
|
52
|
+
end
|
53
|
+
end
|
54
|
+
|
55
|
+
class XmlssWriter::Alignment < Test::Unit::TestCase
|
56
|
+
context("Alignment style writer") do
|
57
|
+
|
58
|
+
subject { XmlssWriter::Base.new }
|
59
|
+
before do
|
60
|
+
subject.workbook = Workbook.new {
|
61
|
+
[
|
62
|
+
:left, :center, :right,
|
63
|
+
:top, :middle, :bottom,
|
64
|
+
:wrap
|
65
|
+
].each do |s|
|
66
|
+
style(".align.#{s}") { align s }
|
67
|
+
end
|
68
|
+
style('.align.rotate') { align 90 }
|
69
|
+
}
|
70
|
+
end
|
71
|
+
|
72
|
+
should "build a style obj with empty alignment settings by default" do
|
73
|
+
assert_equal nil, subject.send(:style, 'align').alignment
|
74
|
+
end
|
75
|
+
|
76
|
+
should "build style objs for horizontal alignment settings" do
|
77
|
+
assert_equal ::Xmlss::Style::Alignment.horizontal(:left), subject.send(:style, 'align left').alignment.horizontal
|
78
|
+
assert_equal ::Xmlss::Style::Alignment.horizontal(:center), subject.send(:style, 'align center').alignment.horizontal
|
79
|
+
assert_equal ::Xmlss::Style::Alignment.horizontal(:right), subject.send(:style, 'align right').alignment.horizontal
|
80
|
+
end
|
81
|
+
|
82
|
+
should "build style objs for vertical alignment settings" do
|
83
|
+
assert_equal ::Xmlss::Style::Alignment.vertical(:top), subject.send(:style, 'align top').alignment.vertical
|
84
|
+
assert_equal ::Xmlss::Style::Alignment.vertical(:center), subject.send(:style, 'align middle').alignment.vertical
|
85
|
+
assert_equal ::Xmlss::Style::Alignment.vertical(:bottom), subject.send(:style, 'align bottom').alignment.vertical
|
86
|
+
end
|
87
|
+
|
88
|
+
should "build style objs for text wrap settings" do
|
89
|
+
assert_equal true, subject.send(:style, 'align wrap').alignment.wrap_text?
|
90
|
+
end
|
91
|
+
|
92
|
+
should "build style objs for text rotation settings" do
|
93
|
+
assert_equal 90, subject.send(:style, 'align rotate').alignment.rotate
|
94
|
+
end
|
95
|
+
|
96
|
+
end
|
97
|
+
end
|
98
|
+
|
99
|
+
class XmlssWriter::Font < Test::Unit::TestCase
|
100
|
+
context("Font style writer") do
|
101
|
+
|
102
|
+
subject { XmlssWriter::Base.new }
|
103
|
+
before do
|
104
|
+
subject.workbook = Workbook.new {
|
105
|
+
[
|
106
|
+
:underline, :double_underline,
|
107
|
+
:subscript, :superscript,
|
108
|
+
:bold, :italic, :strikethrough,
|
109
|
+
:wrap
|
110
|
+
].each do |s|
|
111
|
+
style(".font.#{s}") { font s }
|
112
|
+
end
|
113
|
+
style('.font.size') { font 14 }
|
114
|
+
style('.font.color') { font '#FF0000' }
|
115
|
+
}
|
116
|
+
end
|
117
|
+
|
118
|
+
should "build a style obj with empty font settings by default" do
|
119
|
+
assert_equal nil, subject.send(:style, 'font').font
|
120
|
+
end
|
121
|
+
|
122
|
+
should "build style objs for font underline settings" do
|
123
|
+
assert_equal ::Xmlss::Style::Font.underline(:single), subject.send(:style, 'font underline').font.underline
|
124
|
+
assert_equal ::Xmlss::Style::Font.underline(:double), subject.send(:style, 'font double_underline').font.underline
|
125
|
+
end
|
126
|
+
|
127
|
+
should "build style objs for font alignment settings" do
|
128
|
+
assert_equal ::Xmlss::Style::Font.alignment(:subscript), subject.send(:style, 'font subscript').font.alignment
|
129
|
+
assert_equal ::Xmlss::Style::Font.alignment(:superscript), subject.send(:style, 'font superscript').font.alignment
|
130
|
+
end
|
131
|
+
|
132
|
+
should "build style objs for font style settings" do
|
133
|
+
assert_equal true, subject.send(:style, 'font bold').font.bold?
|
134
|
+
assert_equal true, subject.send(:style, 'font italic').font.italic?
|
135
|
+
assert_equal true, subject.send(:style, 'font strikethrough').font.strike_through?
|
136
|
+
end
|
137
|
+
|
138
|
+
should "build style objs for font size" do
|
139
|
+
assert_equal 14, subject.send(:style, 'font size').font.size
|
140
|
+
end
|
141
|
+
|
142
|
+
should "build style objs for font color" do
|
143
|
+
assert_equal '#FF0000', subject.send(:style, 'font color').font.color
|
144
|
+
end
|
145
|
+
|
146
|
+
end
|
147
|
+
end
|
148
|
+
|
149
|
+
class XmlssWriter::Bg < Test::Unit::TestCase
|
150
|
+
context("Font bg writer") do
|
151
|
+
|
152
|
+
subject { XmlssWriter::Base.new }
|
153
|
+
before do
|
154
|
+
subject.workbook = Workbook.new {
|
155
|
+
style('.bg.color') { bg '#FF0000' }
|
156
|
+
style('.bg.pattern-only') { bg :solid }
|
157
|
+
style('.bg.pattern-color') { bg :horz_stripe => '#0000FF' }
|
158
|
+
}
|
159
|
+
end
|
160
|
+
|
161
|
+
should "build a style obj with empty bg settings by default" do
|
162
|
+
assert_equal nil, subject.send(:style, 'bg').interior
|
163
|
+
end
|
164
|
+
|
165
|
+
should "build style objs for bg color" do
|
166
|
+
assert_equal '#FF0000', subject.send(:style, 'bg color').interior.color
|
167
|
+
end
|
168
|
+
|
169
|
+
should "build style objs for bg pattern settings" do
|
170
|
+
assert_equal ::Xmlss::Style::Interior.pattern(:solid), subject.send(:style, 'bg pattern-only').interior.pattern
|
171
|
+
assert_equal nil, subject.send(:style, 'bg pattern-only').interior.pattern_color
|
172
|
+
assert_equal ::Xmlss::Style::Interior.pattern(:horz_stripe), subject.send(:style, 'bg pattern-color').interior.pattern
|
173
|
+
assert_equal '#0000FF', subject.send(:style, 'bg pattern-color').interior.pattern_color
|
174
|
+
end
|
175
|
+
|
176
|
+
end
|
177
|
+
end
|
178
|
+
|
179
|
+
class XmlssWriter::Border < Test::Unit::TestCase
|
180
|
+
context("Font border writer") do
|
181
|
+
|
182
|
+
subject { XmlssWriter::Base.new }
|
183
|
+
before do
|
184
|
+
subject.workbook = Workbook.new {
|
185
|
+
::Osheet::Style::BORDER_POSITIONS.each do |p|
|
186
|
+
style(".border.#{p}") { send("border_#{p}", :thin) }
|
187
|
+
end
|
188
|
+
[:hairline, :thin, :medium, :thick].each do |w|
|
189
|
+
style(".border.#{w}") { border_top w }
|
190
|
+
end
|
191
|
+
[:none, :continuous, :dash, :dot, :dash_dot, :dash_dot_dot].each do |s|
|
192
|
+
style(".border.#{s}") { border_top s }
|
193
|
+
end
|
194
|
+
style('.border.color') { border_top '#FF0000' }
|
195
|
+
style('.border.all') { border :thick, :dash, '#FF0000' }
|
196
|
+
}
|
197
|
+
end
|
198
|
+
|
199
|
+
should "build a style obj with empty border settings by default" do
|
200
|
+
style = subject.send(:style, 'border')
|
201
|
+
assert_kind_of ::Xmlss::ItemSet, style.borders
|
202
|
+
assert_equal [], style.borders
|
203
|
+
end
|
204
|
+
|
205
|
+
should "build style objs with identical settings for all positions when using 'border'" do
|
206
|
+
style = subject.send(:style, 'border all')
|
207
|
+
assert_equal 4, style.borders.size
|
208
|
+
assert_equal 1, style.borders.collect{|p| p.weight}.uniq.size
|
209
|
+
assert_equal 1, style.borders.collect{|p| p.line_style}.uniq.size
|
210
|
+
assert_equal 1, style.borders.collect{|p| p.color}.uniq.size
|
211
|
+
end
|
212
|
+
|
213
|
+
should "build style objs for border specific positions" do
|
214
|
+
::Osheet::Style::BORDER_POSITIONS.each do |p|
|
215
|
+
assert_equal ::Xmlss::Style::Border.position(p), subject.send(:style, "border #{p}").borders.first.position
|
216
|
+
end
|
217
|
+
end
|
218
|
+
|
219
|
+
should "build style objs for border weight settings" do
|
220
|
+
[:hairline, :thin, :medium, :thick].each do |w|
|
221
|
+
assert_equal ::Xmlss::Style::Border.weight(w), subject.send(:style, "border #{w}").borders.first.weight
|
222
|
+
end
|
223
|
+
end
|
224
|
+
|
225
|
+
should "build style objs for border style settings" do
|
226
|
+
[:none, :continuous, :dash, :dot, :dash_dot, :dash_dot_dot].each do |s|
|
227
|
+
assert_equal ::Xmlss::Style::Border.line_style(s), subject.send(:style, "border #{s}").borders.first.line_style
|
228
|
+
end
|
229
|
+
end
|
230
|
+
|
231
|
+
should "build style objs for border color" do
|
232
|
+
assert_equal '#FF0000', subject.send(:style, 'border color').borders.first.color
|
233
|
+
end
|
234
|
+
|
235
|
+
end
|
236
|
+
end
|
237
|
+
|
238
|
+
class XmlssWriter::NumberFormat < Test::Unit::TestCase
|
239
|
+
context("Xmlss style number format writer") do
|
240
|
+
|
241
|
+
subject { XmlssWriter::Base.new }
|
242
|
+
|
243
|
+
should "build a style obj with formatting" do
|
244
|
+
# TODO: uncomment when further styles defined
|
245
|
+
#assert_equal '@', subject.send(:style, '', Osheet::Format.new(:text)).number_format.format
|
246
|
+
#assert_equal 'mm/dd/yy', subject.send(:style, '', 'mm/dd/yy').number_format.format
|
247
|
+
end
|
248
|
+
|
249
|
+
end
|
250
|
+
end
|
251
|
+
|
252
|
+
|
253
|
+
end
|