osheet 0.1.0 → 0.2.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.
- 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
|