osheet 0.10.0 → 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.
Files changed (75) hide show
  1. data/Gemfile +0 -1
  2. data/Gemfile.lock +9 -6
  3. data/Rakefile +35 -19
  4. data/bench/bench_runner.rb +91 -0
  5. data/bench/profiler_runner.rb +1 -0
  6. data/examples/basic.rb +1 -1
  7. data/examples/basic.xls +2 -1
  8. data/examples/basic_with_templates.rb +2 -2
  9. data/examples/basic_with_templates.xls +3 -3
  10. data/examples/formats.rb +2 -2
  11. data/examples/formats.xls +46 -46
  12. data/examples/formula.rb +2 -2
  13. data/examples/styles.rb +2 -2
  14. data/examples/styles.xls +5 -5
  15. data/examples/trivial.rb +2 -2
  16. data/lib/osheet/cell.rb +48 -46
  17. data/lib/osheet/column.rb +23 -29
  18. data/lib/osheet/format.rb +3 -3
  19. data/lib/osheet/meta_element.rb +2 -1
  20. data/lib/osheet/mixin.rb +21 -9
  21. data/lib/osheet/partial.rb +5 -9
  22. data/lib/osheet/row.rb +28 -32
  23. data/lib/osheet/style.rb +11 -25
  24. data/lib/osheet/styled_element.rb +9 -1
  25. data/lib/osheet/template.rb +3 -8
  26. data/lib/osheet/version.rb +1 -1
  27. data/lib/osheet/workbook.rb +135 -43
  28. data/lib/osheet/workbook_api.rb +208 -0
  29. data/lib/osheet/workbook_element.rb +225 -8
  30. data/lib/osheet/worksheet.rb +22 -28
  31. data/lib/osheet/xmlss_writer/style_cache.rb +64 -0
  32. data/lib/osheet/xmlss_writer/style_settings.rb +148 -0
  33. data/lib/osheet/xmlss_writer.rb +143 -1
  34. data/lib/osheet.rb +3 -29
  35. data/osheet.gemspec +4 -1
  36. data/test/cell_test.rb +33 -98
  37. data/test/column_test.rb +20 -88
  38. data/test/{mixins.rb → fixtures/mixins.rb} +6 -4
  39. data/test/fixtures/test_writer.rb +68 -0
  40. data/test/format_test.rb +2 -2
  41. data/test/helper.rb +34 -68
  42. data/test/mixin_test.rb +37 -43
  43. data/test/partial_test.rb +3 -26
  44. data/test/row_test.rb +32 -85
  45. data/test/style_test.rb +9 -26
  46. data/test/template_test.rb +5 -6
  47. data/test/workbook_element_test.rb +231 -0
  48. data/test/workbook_test.rb +225 -116
  49. data/test/worksheet_test.rb +51 -98
  50. data/test/xmlss_writer/api_test.rb +139 -0
  51. data/test/xmlss_writer/style_cache_test.rb +65 -0
  52. data/test/xmlss_writer/style_settings_test.rb +263 -0
  53. data/test/xmlss_writer/styles_test.rb +121 -153
  54. data/test/xmlss_writer_test.rb +91 -0
  55. metadata +75 -50
  56. data/lib/osheet/associations.rb +0 -58
  57. data/lib/osheet/instance.rb +0 -30
  58. data/lib/osheet/markup_element.rb +0 -22
  59. data/lib/osheet/partial_set.rb +0 -57
  60. data/lib/osheet/railtie.rb +0 -9
  61. data/lib/osheet/style_set.rb +0 -39
  62. data/lib/osheet/template_set.rb +0 -51
  63. data/lib/osheet/view_handler/rails.rb +0 -44
  64. data/lib/osheet/view_handler/tilt.rb +0 -42
  65. data/lib/osheet/view_handler.rb +0 -2
  66. data/lib/osheet/worksheet_element.rb +0 -17
  67. data/lib/osheet/xmlss_writer/base.rb +0 -49
  68. data/lib/osheet/xmlss_writer/elements.rb +0 -56
  69. data/lib/osheet/xmlss_writer/styles.rb +0 -216
  70. data/test/osheet_test.rb +0 -13
  71. data/test/partial_set_test.rb +0 -64
  72. data/test/style_set_test.rb +0 -47
  73. data/test/template_set_test.rb +0 -74
  74. data/test/xmlss_writer/base_test.rb +0 -103
  75. data/test/xmlss_writer/elements_test.rb +0 -172
@@ -1,134 +1,87 @@
1
1
  require "assert"
2
+
3
+ require 'osheet/column'
4
+ require 'osheet/row'
2
5
  require 'osheet/worksheet'
3
6
 
4
7
  module Osheet
5
8
 
6
- class WorksheetTest < Assert::Context
7
- desc "Osheet::Worksheet"
9
+ class WorksheetTests < Assert::Context
10
+ desc "a Worksheet"
8
11
  before { @wksht = Worksheet.new }
9
12
  subject { @wksht }
10
13
 
11
- should_be_a_workbook_element(Worksheet)
14
+ should be_a_meta_element
12
15
 
13
- should have_instance_methods :name, :attributes, :meta
16
+ should have_instance_methods :name
17
+ should have_instance_methods :columns, :column
18
+ should have_instance_methods :rows, :row
14
19
 
15
20
  should "set it's defaults" do
16
- assert_equal nil, subject.send(:get_ivar, "name")
17
- assert_equal [], subject.columns
18
- assert_equal [], subject.rows
19
-
20
- assert_equal nil, subject.meta
21
- end
22
-
23
- should_hm(Worksheet, :columns, Column)
24
- should_hm(Worksheet, :rows, Row)
25
-
26
- should "know it's attribute(s)" do
27
- subject.send(:name, "Poo!")
28
- [:name].each do |a|
29
- assert subject.attributes.has_key?(a)
30
- end
31
- assert_equal "Poo!", subject.attributes[:name]
21
+ assert_equal nil, subject.name
22
+ assert_equal [], subject.columns
23
+ assert_equal [], subject.rows
32
24
  end
33
25
 
34
26
  end
35
27
 
36
- class WorksheetNameMetaTest < WorksheetTest
37
- desc "A named worksheet with meta"
38
- before do
39
- @wksht = Worksheet.new {
40
- name "Poo!"
41
- meta({})
42
- }
43
- end
44
-
45
- should "know it's name and meta" do
46
- assert_equal "Poo!", subject.send(:get_ivar, "name")
47
- assert_equal({}, subject.meta)
48
- end
49
-
50
- should "set it's name" do
51
- subject.name(false)
52
- assert_equal 'false', subject.name
53
- subject.name('la')
54
- assert_equal 'la', subject.name
55
- subject.name(nil)
56
- assert_equal 'la', subject.name
57
- end
28
+ class WorksheetColumnTests < WorksheetTests
29
+ desc "with columns"
30
+ before {
31
+ @col = Column.new
32
+ @wksht.column(@col)
33
+ }
58
34
 
59
- should "complain if name is longer than 31 chars" do
60
- assert_raises ArgumentError do
61
- subject.name('a'*32)
62
- end
63
- assert_nothing_raised do
64
- subject.name('a'*31)
65
- end
35
+ should "know its cols" do
36
+ assert_equal 1, subject.columns.size
37
+ assert_same @col, subject.columns.first
66
38
  end
67
39
 
68
40
  end
69
41
 
70
- class WorksheetColumnRowTest < WorksheetTest
71
- desc "A worksheet that has columns and rows"
72
- before do
73
- @wksht = Worksheet.new {
74
- column
75
- row { cell {
76
- format :number
77
- data 1
78
- } }
79
- }
80
- end
42
+ class WorksheetRowTests < WorksheetTests
43
+ desc "with rows"
44
+ before {
45
+ @row = Row.new
46
+ @wksht.row(@row)
47
+ }
81
48
 
82
- should "set it's columns" do
83
- columns = subject.columns
84
- assert_equal 1, columns.size
85
- assert_kind_of Column, columns.first
86
- assert_equal subject.columns, columns.first.columns
49
+ should "know its rows" do
50
+ assert_equal 1, subject.rows.size
51
+ assert_same @row, subject.rows.first
87
52
  end
88
53
 
89
- should "set it's rows" do
90
- rows = subject.rows
91
- assert_equal 1, rows.size
92
- assert_kind_of Row, rows.first
93
- assert_equal subject.columns, rows.first.columns
94
- assert_equal subject.columns, rows.first.cells.first.columns
54
+ should "only keep the latest row" do
55
+ new_row = Row.new(120)
56
+ subject.row(new_row)
57
+
58
+ assert_equal 1, subject.rows.size
59
+ assert_same new_row, subject.rows.last
95
60
  end
96
61
 
97
62
  end
98
63
 
99
- class WorksheetWorkbookPartialTest < WorksheetTest
100
- desc "A workbook that defines worksheet partials"
64
+ class WorksheetNameTests < WorksheetTests
65
+ desc "with a name"
101
66
  before do
102
- @wksht = Workbook.new {
103
- partial(:worksheet_stuff) {
104
- row {}
105
- row {}
106
- }
107
-
108
- worksheet {
109
- add :worksheet_stuff
110
- }
111
- }
67
+ @wksht = Worksheet.new("fun")
112
68
  end
113
69
 
114
- should "add it's partials to it's markup" do
115
- assert_equal 2, subject.worksheets.first.rows.size
70
+ should "know it's name" do
71
+ assert_equal "fun", subject.name
116
72
  end
117
73
 
118
- end
119
-
120
- class WorksheetBindingTest < WorksheetTest
121
- desc "a worksheet defined w/ a block"
122
-
123
- should "access instance vars from that block's binding" do
124
- @test = 'test'
125
- @worksheet = Worksheet.new { name @test }
74
+ should "set it's name" do
75
+ subject.name(false)
76
+ assert_equal 'false', subject.name
77
+ subject.name('la')
78
+ assert_equal 'la', subject.name
79
+ subject.name(nil)
80
+ assert_equal 'la', subject.name
81
+ end
126
82
 
127
- assert !@worksheet.send(:instance_variable_get, "@test").nil?
128
- assert_equal @test, @worksheet.send(:instance_variable_get, "@test")
129
- assert_equal @test.object_id, @worksheet.send(:instance_variable_get, "@test").object_id
130
- assert_equal @test, @worksheet.attributes[:name]
131
- assert_equal @test.object_id, @worksheet.attributes[:name].object_id
83
+ should "set it's name with an init parameter" do
84
+ assert_equal "more fun", Worksheet.new("more fun").name
132
85
  end
133
86
 
134
87
  end
@@ -0,0 +1,139 @@
1
+ require "assert"
2
+
3
+ require 'osheet/xmlss_writer'
4
+
5
+ module Osheet
6
+
7
+ class XmlssWriter::ApiTest < Assert::Context
8
+ before do
9
+ @writer = XmlssWriter.new
10
+ @workbook = Workbook.new(@writer)
11
+ end
12
+ subject { @writer }
13
+
14
+ end
15
+
16
+ class XmlssWriter::CellTests < XmlssWriter::ApiTest
17
+ desc "when writing a cell"
18
+ before do
19
+ @cell = Osheet::Cell.new(100)
20
+ @cell.style_class "awesome thing"
21
+ @cell.format :number
22
+ @cell.href 'http://example.com'
23
+ @cell.rowspan 2
24
+ @cell.colspan 5
25
+ @cell.index 3
26
+ @cell.formula "=R1C1"
27
+ @xmlss_cell = subject.cell(@cell)
28
+ end
29
+
30
+ should "create an Xmlss::Cell with correct attributes" do
31
+ assert_kind_of ::Xmlss::Element::Cell, @xmlss_cell
32
+ assert_equal 100, @xmlss_cell.data
33
+ assert_equal 'http://example.com', @xmlss_cell.href
34
+ assert_equal 3, @xmlss_cell.index
35
+ assert_equal "=R1C1", @xmlss_cell.formula
36
+ assert_equal 1, @xmlss_cell.merge_down
37
+ assert_equal 4, @xmlss_cell.merge_across
38
+ end
39
+
40
+ should "style the cell" do
41
+ assert_equal ".awesome.thing..number_none_0_nocomma_black", @xmlss_cell.style_id
42
+ assert_equal 1, subject.style_cache.size
43
+ end
44
+
45
+ should "write cell element markup" do
46
+ assert_equal(
47
+ "<Cell ss:Formula=\"=R1C1\" ss:HRef=\"http://example.com\" ss:Index=\"3\" ss:MergeAcross=\"4\" ss:MergeDown=\"1\" ss:StyleID=\".awesome.thing..number_none_0_nocomma_black\"><Data ss:Type=\"Number\">100</Data></Cell>",
48
+ xmlss_element_markup(subject)
49
+ )
50
+ end
51
+
52
+ end
53
+
54
+ class XmlssWriter::RowTests < XmlssWriter::ApiTest
55
+ desc "when writing a row"
56
+ before do
57
+ @row = Osheet::Row.new
58
+ @row.style_class "awesome thing"
59
+ @row.height 100
60
+ @row.autofit true
61
+ @row.hidden true
62
+ @xmlss_row = subject.row(@row)
63
+ end
64
+
65
+ should "create an Xmlss::Row with correct attributes" do
66
+ assert_kind_of ::Xmlss::Element::Row, @xmlss_row
67
+ assert_equal 100, @xmlss_row.height
68
+ assert_equal true, @xmlss_row.auto_fit_height
69
+ assert_equal true, @xmlss_row.hidden
70
+ end
71
+
72
+ should "style the row" do
73
+ assert_equal ".awesome.thing", @xmlss_row.style_id
74
+ assert_equal 1, subject.style_cache.size
75
+ end
76
+
77
+ should "write row element markup" do
78
+ assert_equal(
79
+ "<Row ss:AutoFitHeight=\"1\" ss:Height=\"100\" ss:Hidden=\"1\" ss:StyleID=\".awesome.thing\" />",
80
+ xmlss_element_markup(subject)
81
+ )
82
+ end
83
+
84
+ end
85
+
86
+ class XmlssWriter::ColumnTests < XmlssWriter::ApiTest
87
+ desc "when writing a column"
88
+ before do
89
+ @column = Osheet::Column.new
90
+ @column.style_class "awesome"
91
+ @column.width 100
92
+ @column.autofit true
93
+ @column.hidden true
94
+ @xmlss_column = subject.column(@column)
95
+ end
96
+
97
+ should "create an Xmlss::Column with correct attributes" do
98
+ assert_kind_of ::Xmlss::Element::Column, @xmlss_column
99
+ assert_equal 100, @xmlss_column.width
100
+ assert_equal true, @xmlss_column.auto_fit_width
101
+ assert_equal true, @xmlss_column.hidden
102
+ end
103
+
104
+ should "style an Xmlss column" do
105
+ assert_equal ".awesome", @xmlss_column.style_id
106
+ assert_equal 1, subject.style_cache.size
107
+ end
108
+
109
+ should "write column element markup" do
110
+ assert_equal(
111
+ "<Column ss:AutoFitWidth=\"1\" ss:Hidden=\"1\" ss:StyleID=\".awesome\" ss:Width=\"100\" />",
112
+ xmlss_element_markup(subject)
113
+ )
114
+ end
115
+
116
+ end
117
+
118
+ class XmlssWriter::WorksheetTests < XmlssWriter::ApiTest
119
+ desc "when writing a worksheet"
120
+ before do
121
+ @worksheet = Worksheet.new("testsheet2")
122
+ @xmlss_worksheet = subject.worksheet(@worksheet)
123
+ end
124
+
125
+ should "create an Xmlss::Worksheet with correct attributes" do
126
+ assert_kind_of ::Xmlss::Element::Worksheet, @xmlss_worksheet
127
+ assert_equal "testsheet2", @xmlss_worksheet.name
128
+ end
129
+
130
+ should "write worksheet element markup" do
131
+ assert_equal(
132
+ "<Worksheet ss:Name=\"testsheet2\"><Table /></Worksheet>",
133
+ xmlss_element_markup(subject)
134
+ )
135
+ end
136
+
137
+ end
138
+
139
+ end
@@ -0,0 +1,65 @@
1
+ require "assert"
2
+
3
+ require 'osheet/xmlss_writer/style_cache'
4
+
5
+ module Osheet
6
+
7
+ class XmlssWriterStyleCacheTests < Assert::Context
8
+ desc "the style cache"
9
+ before do
10
+ @workbook = Workbook.new
11
+ @workbook.style('.align.center') { @workbook.align :center }
12
+ @workbook.style('.font.size') { @workbook.font 14 }
13
+ @workbook.style('.font.weight') { @workbook.font :bold }
14
+ @workbook.style('.font.style') { @workbook.font :italic }
15
+ @workbook.style('.bg.color') { @workbook.bg '#FF0000' }
16
+ @workbook.style('.border.color') { @workbook.border '#FF0000', :thin }
17
+ @xmlss_workbook = Xmlss::Workbook.new(Xmlss::Writer.new)
18
+
19
+ @cache = XmlssWriter::StyleCache.new(@workbook, @xmlss_workbook)
20
+ end
21
+ subject { @cache }
22
+
23
+ should have_reader :styles
24
+ should have_instance_method :get, :keys, :empty?, :size, :[]
25
+
26
+ should "have no cached styles by default" do
27
+ assert_empty subject
28
+ end
29
+
30
+ should "key based off class value and format key" do
31
+ assert_equal '', subject.send(:key, '', nil)
32
+ assert_equal '.awesome', subject.send(:key, 'awesome', nil)
33
+ assert_equal '.awesome.thing', subject.send(:key, 'awesome thing', nil)
34
+ assert_equal '.awesome..something', subject.send(:key, 'awesome', 'something')
35
+ assert_equal '..something', subject.send(:key, '', 'something')
36
+ end
37
+
38
+ should "return nil if trying to get the style for an empty class and general format" do
39
+ assert_not_nil subject.get('font', Osheet::Format.new(:general))
40
+ assert_nil subject.get('', Osheet::Format.new(:general))
41
+ end
42
+
43
+ should "build and cache styles if not already cached" do
44
+ assert_equal 0, subject.size
45
+ subject.get('font', Osheet::Format.new(:currency))
46
+ assert_equal 1, subject.size
47
+ end
48
+
49
+ should "return cached style if requesting an already cached style" do
50
+ assert_equal 0, subject.size
51
+ subject.get('font', Osheet::Format.new(:currency))
52
+ subject.get('font', Osheet::Format.new(:currency))
53
+ assert_equal 1, subject.size
54
+ end
55
+
56
+ should "build styles with ids matching the cache key" do
57
+ key = subject.send(:key, 'font', Osheet::Format.new(:currency).key)
58
+ assert_equal key, subject.get('font', Osheet::Format.new(:currency)).id
59
+ end
60
+
61
+ end
62
+
63
+
64
+
65
+ end
@@ -0,0 +1,263 @@
1
+ require "assert"
2
+
3
+ require 'osheet/xmlss_writer/style_settings'
4
+
5
+ module Osheet
6
+
7
+ class XmlssWriterStyleSettingsTests < Assert::Context
8
+ desc "the style writer when building"
9
+ before do
10
+ @settings = XmlssWriter::StyleSettings.new([])
11
+ @workbook = Workbook.new
12
+ @workbook.style('.align.center') { @workbook.align :center }
13
+ @workbook.style('.font.size') { @workbook.font 14 }
14
+ @workbook.style('.font.weight') { @workbook.font :bold }
15
+ @workbook.style('.font.style') { @workbook.font :italic }
16
+ @workbook.style('.bg.color') { @workbook.bg '#FF0000' }
17
+ @workbook.style('.border.color') { @workbook.border '#FF0000', :thin }
18
+ end
19
+ subject { @settings }
20
+
21
+ should have_reader :styles, :value
22
+ should have_instance_method :setting, :[]
23
+
24
+ should "be empty if no styles given" do
25
+ assert_equal({}, subject.value)
26
+ end
27
+
28
+ should "conditionally run a block if the setting exists and is not empty" do
29
+ settings = XmlssWriter::StyleSettings.new([@workbook.styles.first])
30
+ @something = ''
31
+
32
+ settings.setting(:font) { @something = 'i should be empty' }
33
+ assert_empty @something
34
+
35
+ settings.setting(:align) { @something = 'i should not be empty' }
36
+ assert_not_empty @something
37
+ end
38
+
39
+ end
40
+
41
+
42
+
43
+ class XmlssWriterAlignmentSettingsTests < XmlssWriterStyleSettingsTests
44
+ desc "align settings"
45
+
46
+ should "translate horizontal directives" do
47
+ assert_equal({:horizontal => :left}, subject.send(:align_settings, [:left]))
48
+ assert_equal({:horizontal => :center}, subject.send(:align_settings, [:center]))
49
+ assert_equal({:horizontal => :right}, subject.send(:align_settings, [:right]))
50
+ end
51
+
52
+ should "translate vertical directives" do
53
+ assert_equal({:vertical => :top}, subject.send(:align_settings, [:top]))
54
+ assert_equal({:vertical => :center}, subject.send(:align_settings, [:middle]))
55
+ assert_equal({:vertical => :bottom}, subject.send(:align_settings, [:bottom]))
56
+ end
57
+
58
+ should "translate wrap text and rotate directives" do
59
+ assert_equal({:wrap_text => true}, subject.send(:align_settings, [:wrap]))
60
+ assert_equal({:rotate => 90}, subject.send(:align_settings, [90]))
61
+ end
62
+
63
+ end
64
+
65
+
66
+
67
+ class XmlssWriterFontSettingsTests < XmlssWriterStyleSettingsTests
68
+ desc "font settings"
69
+
70
+ should "translate size, color and name directives" do
71
+ assert_equal({:size => 12}, subject.send(:font_settings, [12]))
72
+ assert_equal({:color => '#FFFFFF'}, subject.send(:font_settings, ['#FFFFFF']))
73
+ assert_equal({:name => 'Arial'}, subject.send(:font_settings, ['Arial']))
74
+ end
75
+
76
+ should "translate style directives" do
77
+ assert_equal({:bold => true}, subject.send(:font_settings, [:bold]))
78
+ assert_equal({:italic => true}, subject.send(:font_settings, [:italic]))
79
+ assert_equal({:shadow => true}, subject.send(:font_settings, [:shadow]))
80
+ assert_equal({:alignment => :subscript}, subject.send(:font_settings, [:subscript]))
81
+ assert_equal({:alignment => :superscript}, subject.send(:font_settings, [:superscript]))
82
+ assert_equal({:strike_through => true}, subject.send(:font_settings, [:strikethrough]))
83
+ end
84
+
85
+ should "translate underline directives" do
86
+ assert_equal({:underline => :single}, subject.send(:font_settings, [:underline]))
87
+ assert_equal({:underline => :double}, subject.send(:font_settings, [:double_underline]))
88
+ assert_equal({:underline => :single_accounting}, subject.send(:font_settings, [:accounting_underline]))
89
+ assert_equal({:underline => :double_accounting}, subject.send(:font_settings, [:double_accounting_underline]))
90
+ end
91
+
92
+ end
93
+
94
+
95
+
96
+
97
+ class XmlssWriterBgSettingsTests < XmlssWriterStyleSettingsTests
98
+ desc "bg settings"
99
+
100
+ should "translate color directives" do
101
+ assert_equal({:color => '#FFFFFF', :pattern => :solid}, subject.send(:bg_settings, ['#FFFFFF']))
102
+ end
103
+
104
+ should "translate pattern directives" do
105
+ assert_equal({:pattern => :solid}, subject.send(:bg_settings, [:solid]))
106
+ assert_equal({
107
+ :pattern => :horz_stripe,
108
+ :pattern_color => '#0000FF'
109
+ }, subject.send(:bg_settings, [{:horz_stripe => '#0000FF'}]))
110
+ end
111
+
112
+ end
113
+
114
+
115
+
116
+
117
+
118
+ class XmlssWriterBorderSettingsTests < XmlssWriterStyleSettingsTests
119
+ desc "border settings"
120
+
121
+ should "translate color directives" do
122
+ assert_equal({:color => '#FFFFFF'}, subject.send(:border_settings, ['#FFFFFF']))
123
+ end
124
+
125
+ should "translate position directives" do
126
+ assert_equal({:position => :top}, subject.send(:border_settings, [:top]))
127
+ end
128
+
129
+ should "translate weight directives" do
130
+ assert_equal({:weight => :thick}, subject.send(:border_settings, [:thick]))
131
+ end
132
+
133
+ should "translate line_style directives" do
134
+ assert_equal({:line_style => :dot}, subject.send(:border_settings, [:dot]))
135
+ end
136
+
137
+ should "translate position specific directives" do
138
+ assert_equal({
139
+ :position => :left,
140
+ :color => '#FFFFFF',
141
+ :weight => :thin
142
+ }, subject.send(:border_left_settings, ['#FFFFFF', :thin]))
143
+ end
144
+
145
+ end
146
+
147
+
148
+
149
+ class XmlssWriterParseSettingsTests < XmlssWriterStyleSettingsTests
150
+ desc "settings"
151
+
152
+ should "parse Osheet style objs for their settings" do
153
+ assert_equal({
154
+ :align => {
155
+ :horizontal => :center
156
+ }
157
+ }, subject.send(:style_settings, @workbook.styles.first))
158
+
159
+ assert_equal({
160
+ :border_top => {
161
+ :position=>:top,
162
+ :color=>"#FF0000",
163
+ :weight=>:thin
164
+ },
165
+ :border_right => {
166
+ :position=>:right,
167
+ :color=>"#FF0000",
168
+ :weight=>:thin
169
+ },
170
+ :border_bottom => {
171
+ :position=>:bottom,
172
+ :color=>"#FF0000",
173
+ :weight=>:thin
174
+ },
175
+ :border_left => {
176
+ :position=>:left,
177
+ :color=>"#FF0000",
178
+ :weight=>:thin
179
+ }
180
+ }, subject.send(:style_settings, @workbook.styles.last))
181
+ end
182
+
183
+ should "merge style settings from multiple Osheet style objs" do
184
+ set1 = {
185
+ :font => {
186
+ :color => '#FF0000',
187
+ :name => "Arial"
188
+ }
189
+ }
190
+ set2 = {
191
+ :font => {
192
+ :color => '#0000FF',
193
+ :size => 12
194
+ }
195
+ }
196
+ set3 = {
197
+ :align => {
198
+ :horizontal => :center
199
+ }
200
+ }
201
+
202
+ # should concat keys in both sets
203
+ assert_equal({
204
+ :font => {
205
+ :color => '#0000FF',
206
+ :name => "Arial",
207
+ :size => 12
208
+ }
209
+ }, subject.send(:merged_settings, set1.dup, set2.dup))
210
+
211
+ # should add keys not in first set
212
+ assert_equal({
213
+ :font => {
214
+ :color => '#0000FF',
215
+ :size => 12
216
+ },
217
+ :align => {
218
+ :horizontal => :center
219
+ }
220
+ }, subject.send(:merged_settings, set2.dup, set3.dup))
221
+
222
+ end
223
+
224
+ should "set its value given its set of styles" do
225
+ assert_equal({
226
+ :align => {
227
+ :horizontal => :center
228
+ },
229
+ :font => {
230
+ :bold => true,
231
+ :italic => true,
232
+ :size => 14
233
+ },
234
+ :bg => {
235
+ :pattern => :solid,
236
+ :color => "#FF0000"
237
+ },
238
+ :border_top => {
239
+ :position => :top,
240
+ :color => "#FF0000",
241
+ :weight => :thin
242
+ },
243
+ :border_right => {
244
+ :position => :right,
245
+ :color => "#FF0000",
246
+ :weight => :thin
247
+ },
248
+ :border_bottom => {
249
+ :position => :bottom,
250
+ :color => "#FF0000",
251
+ :weight => :thin
252
+ },
253
+ :border_left => {
254
+ :position => :left,
255
+ :color => "#FF0000",
256
+ :weight => :thin
257
+ }
258
+ }, XmlssWriter::StyleSettings.new(@workbook.styles).value)
259
+ end
260
+ end
261
+
262
+ end
263
+