axlsx 1.1.6 → 1.1.7

Sign up to get free protection for your applications and to get access to all the features.
Files changed (48) hide show
  1. data/README.md +19 -6
  2. data/examples/axis-titles.xlsx +0 -0
  3. data/examples/basic_charts.rb +46 -0
  4. data/examples/basic_charts.xlsx +0 -0
  5. data/examples/charts.xlsx +0 -0
  6. data/examples/example.rb +17 -1
  7. data/examples/example.xlsx +0 -0
  8. data/examples/example_streamed.xlsx +0 -0
  9. data/examples/extractive.xlsx +0 -0
  10. data/examples/no-use_autowidth.xlsx +0 -0
  11. data/examples/pie_chart_excel.xlsx +0 -0
  12. data/examples/pie_chart_saved.xlsx +0 -0
  13. data/examples/shared_strings_example.xlsx +0 -0
  14. data/examples/sheet_view.rb +34 -0
  15. data/examples/sheet_view.xlsx +0 -0
  16. data/examples/~$example.xlsx +0 -0
  17. data/lib/axlsx.rb +3 -2
  18. data/lib/axlsx/drawing/axis.rb +18 -0
  19. data/lib/axlsx/drawing/cat_axis.rb +3 -3
  20. data/lib/axlsx/drawing/chart.rb +3 -3
  21. data/lib/axlsx/drawing/drawing.rb +0 -1
  22. data/lib/axlsx/drawing/graphic_frame.rb +2 -2
  23. data/lib/axlsx/drawing/num_data.rb +2 -2
  24. data/lib/axlsx/drawing/title.rb +21 -9
  25. data/lib/axlsx/package.rb +9 -5
  26. data/lib/axlsx/util/validators.rb +28 -4
  27. data/lib/axlsx/version.rb +1 -1
  28. data/lib/axlsx/workbook/workbook.rb +7 -3
  29. data/lib/axlsx/workbook/worksheet/cell.rb +4 -0
  30. data/lib/axlsx/workbook/worksheet/page_setup.rb +1 -1
  31. data/lib/axlsx/workbook/worksheet/pane.rb +144 -0
  32. data/lib/axlsx/workbook/worksheet/selection.rb +111 -0
  33. data/lib/axlsx/workbook/worksheet/sheet_view.rb +379 -0
  34. data/lib/axlsx/workbook/worksheet/worksheet.rb +27 -10
  35. data/test/drawing/tc_axis.rb +19 -2
  36. data/test/drawing/tc_cat_axis.rb +3 -3
  37. data/test/drawing/tc_num_data.rb +5 -1
  38. data/test/drawing/tc_title.rb +16 -0
  39. data/test/tc_package.rb +24 -4
  40. data/test/util/tc_validators.rb +68 -11
  41. data/test/workbook/worksheet/tc_pane.rb +94 -0
  42. data/test/workbook/worksheet/tc_selection.rb +94 -0
  43. data/test/workbook/worksheet/tc_sheet_view.rb +214 -0
  44. data/test/workbook/worksheet/tc_worksheet.rb +0 -7
  45. metadata +28 -13
  46. data/examples/pie_chart.rb +0 -16
  47. data/examples/pie_chart.xlsx +0 -0
  48. data/examples/~$pie_chart_saved.xlsx +0 -0
@@ -16,6 +16,15 @@ module Axlsx
16
16
  yield @sheet_protection if block_given?
17
17
  @sheet_protection
18
18
  end
19
+
20
+ # The sheet view object for this worksheet
21
+ # @return [SheetView]
22
+ # @see [SheetView]
23
+ def sheet_view
24
+ @sheet_view ||= SheetView.new
25
+ yield @sheet_view if block_given?
26
+ @sheet_view
27
+ end
19
28
 
20
29
  # The workbook that owns this worksheet
21
30
  # @return [Workbook]
@@ -51,14 +60,21 @@ module Axlsx
51
60
 
52
61
  # Indicates if the worksheet should show gridlines or not
53
62
  # @return Boolean
54
- attr_reader :show_gridlines
55
-
63
+ # @deprecated Use {SheetView#show_grid_lines} instead.
64
+ def show_gridlines
65
+ warn('axlsx::DEPRECIATED: Worksheet#show_gridlines has been depreciated. This value can get over SheetView#show_grid_lines.')
66
+ sheet_view.show_grid_lines
67
+ end
56
68
 
57
69
  # Indicates if the worksheet is selected in the workbook
58
70
  # It is possible to have more than one worksheet selected, however it might cause issues
59
71
  # in some older versions of excel when using copy and paste.
60
72
  # @return Boolean
61
- attr_reader :selected
73
+ # @deprecated Use {SheetView#tab_selected} instead.
74
+ def selected
75
+ warn('axlsx::DEPRECIATED: Worksheet#selected has been depreciated. This value can get over SheetView#tab_selected.')
76
+ sheet_view.tab_selected
77
+ end
62
78
 
63
79
  # Indicates if the worksheet will be fit by witdh or height to a specific number of pages.
64
80
  # To alter the width or height for page fitting, please use page_setup.fit_to_widht or page_setup.fit_to_height.
@@ -160,14 +176,12 @@ module Axlsx
160
176
  self.workbook = wb
161
177
  @workbook.worksheets << self
162
178
  @page_marging = @page_setup = @print_options = nil
163
- @drawing = @page_margins = @auto_filter = @sheet_protection = nil
179
+ @drawing = @page_margins = @auto_filter = @sheet_protection = @sheet_view = nil
164
180
  @merged_cells = []
165
181
  @auto_fit_data = []
166
182
  @conditional_formattings = []
167
183
  @data_validations = []
168
184
  @comments = Comments.new(self)
169
- @selected = false
170
- @show_gridlines = true
171
185
  self.name = "Sheet" + (index+1).to_s
172
186
  @page_margins = PageMargins.new options[:page_margins] if options[:page_margins]
173
187
  @page_setup = PageSetup.new options[:page_setup] if options[:page_setup]
@@ -246,16 +260,20 @@ module Axlsx
246
260
  # Indicates if gridlines should be shown in the sheet.
247
261
  # This is true by default.
248
262
  # @return [Boolean]
263
+ # @deprecated Use {SheetView#show_grid_lines=} instead.
249
264
  def show_gridlines=(v)
265
+ warn('axlsx::DEPRECIATED: Worksheet#show_gridlines= has been depreciated. This value can be set over SheetView#show_grid_lines=.')
250
266
  Axlsx::validate_boolean v
251
- @show_gridlines = v
267
+ sheet_view.show_grid_lines = v
252
268
  end
253
269
 
254
270
  # @see selected
255
271
  # @return [Boolean]
272
+ # @deprecated Use {SheetView#tab_selected=} instead.
256
273
  def selected=(v)
274
+ warn('axlsx::DEPRECIATED: Worksheet#selected= has been depreciated. This value can be set over SheetView#tab_selected=.')
257
275
  Axlsx::validate_boolean v
258
- @selected = v
276
+ sheet_view.tab_selected = v
259
277
  end
260
278
 
261
279
 
@@ -492,8 +510,7 @@ module Axlsx
492
510
  str.concat "<worksheet xmlns=\"%s\" xmlns:r=\"%s\">" % [XML_NS, XML_NS_R]
493
511
  str.concat "<sheetPr><pageSetUpPr fitToPage=\"%s\"></pageSetUpPr></sheetPr>" % fit_to_page if fit_to_page
494
512
  str.concat "<dimension ref=\"%s\"></dimension>" % dimension unless rows.size == 0
495
- str.concat "<sheetViews><sheetView tabSelected='%s' workbookViewId='0' showGridLines='%s'><selection activeCell=\"A1\" sqref=\"A1\"/></sheetView></sheetViews>" % [@selected, show_gridlines]
496
-
513
+ @sheet_view.to_xml_string(str) if @sheet_view
497
514
  if @column_info.size > 0
498
515
  str << "<cols>"
499
516
  @column_info.each { |col| col.to_xml_string(str) }
@@ -2,8 +2,10 @@ require 'tc_helper.rb'
2
2
 
3
3
  class TestAxis < Test::Unit::TestCase
4
4
  def setup
5
- @axis = Axlsx::Axis.new 12345, 54321, :gridlines => false
5
+
6
+ @axis = Axlsx::Axis.new 12345, 54321, :gridlines => false, :title => 'Foo'
6
7
  end
8
+
7
9
  def teardown
8
10
  end
9
11
 
@@ -14,6 +16,21 @@ class TestAxis < Test::Unit::TestCase
14
16
  assert_equal(@axis.crosses, :autoZero, "tick label position default incorrect")
15
17
  assert(@axis.scaling.is_a?(Axlsx::Scaling) && @axis.scaling.orientation == :minMax, "scaling default incorrect")
16
18
  assert_raise(ArgumentError) { Axlsx::Axis.new( -1234, 'abcd') }
19
+ assert_equal('Foo', @axis.title.text)
20
+ end
21
+
22
+ def test_cell_based_axis_title
23
+ p = Axlsx::Package.new
24
+ p.workbook.add_worksheet(:name=>'foosheet') do |sheet|
25
+ sheet.add_row ['battle victories']
26
+ sheet.add_row ['bird', 1, 2, 1]
27
+ sheet.add_row ['cat', 7, 9, 10]
28
+ sheet.add_chart(Axlsx::Line3DChart) do |chart|
29
+ chart.add_series :data => sheet['B2:D2'], :labels => sheet['B1']
30
+ chart.valAxis.title = sheet['A1']
31
+ assert_equal('battle victories', chart.valAxis.title.text)
32
+ end
33
+ end
17
34
  end
18
35
 
19
36
  def test_axis_position
@@ -57,6 +74,6 @@ class TestAxis < Test::Unit::TestCase
57
74
  assert(doc.xpath("//c:crosses[@val='#{@axis.crosses.to_s}']"))
58
75
  assert(doc.xpath("//c:crossAx[@val='#{@axis.crossAx.to_s}']"))
59
76
  assert(doc.xpath("//a:bodyPr[@rot='#{@axis.label_rotation.to_s}']"))
60
-
77
+ assert(doc.xpath("//a:t[text()='Foo']"))
61
78
  end
62
79
  end
@@ -10,7 +10,7 @@ class TestCatAxis < Test::Unit::TestCase
10
10
  def test_initialization
11
11
  assert_equal(@axis.auto, 1, "axis auto default incorrect")
12
12
  assert_equal(@axis.lblAlgn, :ctr, "label align default incorrect")
13
- assert_equal(@axis.lblOffset, "100%", "label offset default incorrect")
13
+ assert_equal(@axis.lblOffset, "100", "label offset default incorrect")
14
14
  end
15
15
 
16
16
  def test_auto
@@ -24,8 +24,8 @@ class TestCatAxis < Test::Unit::TestCase
24
24
  end
25
25
 
26
26
  def test_lblOffset
27
- assert_raise(ArgumentError, "requires valid label offset") { @axis.lblOffset = 100 }
28
- assert_nothing_raised("accepts valid label offset") { @axis.lblOffset = "20%" }
27
+ assert_raise(ArgumentError, "requires valid label offset") { @axis.lblOffset = 'foo' }
28
+ assert_nothing_raised("accepts valid label offset") { @axis.lblOffset = "20" }
29
29
  end
30
30
 
31
31
  end
@@ -9,7 +9,11 @@ class TestNumData < Test::Unit::TestCase
9
9
  def test_initialize
10
10
  assert_equal(@num_data.format_code, "General")
11
11
  end
12
-
12
+
13
+ def test_formula_based_cell
14
+
15
+ end
16
+
13
17
  def test_format_code
14
18
  assert_raise(ArgumentError) {@num_data.format_code = 7}
15
19
  assert_nothing_raised {@num_data.format_code = 'foo_bar'}
@@ -1,3 +1,5 @@
1
+ $LOAD_PATH.unshift "#{File.dirname(__FILE__)}/../"
2
+
1
3
  require 'tc_helper.rb'
2
4
 
3
5
  class TestTitle < Test::Unit::TestCase
@@ -30,4 +32,18 @@ class TestTitle < Test::Unit::TestCase
30
32
  assert(@title.text == "one")
31
33
  end
32
34
 
35
+ def test_to_xml_string_text
36
+ @chart.title.text = 'foo'
37
+ doc = Nokogiri::XML(@chart.to_xml_string)
38
+ assert_equal(1, doc.xpath('//c:rich').size)
39
+ assert_equal(1, doc.xpath("//a:t[text()='foo']").size)
40
+ end
41
+
42
+ def test_to_xml_string_cell
43
+ @chart.title.cell = @row.cells.first
44
+ doc = Nokogiri::XML(@chart.to_xml_string)
45
+ assert_equal(1, doc.xpath('//c:strCache').size)
46
+ assert_equal(1, doc.xpath('//c:v[text()="one"]').size)
47
+ end
48
+
33
49
  end
@@ -9,9 +9,29 @@ class TestPackage < Test::Unit::TestCase
9
9
  ws.add_row ['Yes!', 'We', 'can!']
10
10
  ws.add_comment :author => 'alice', :text => 'Hi Bob', :ref => 'A12'
11
11
  ws.add_comment :author => 'bob', :text => 'Hi Alice', :ref => 'F19'
12
+ ws.sheet_view do |vs|
13
+ vs.pane do |p|
14
+ p.active_pane = :top_right
15
+ p.state = :split
16
+ p.x_split = 11080
17
+ p.y_split = 5000
18
+ p.top_left_cell = 'C44'
19
+ end
20
+
21
+ vs.add_selection(:top_left, { :active_cell => 'A2', :sqref => 'A2' })
22
+ vs.add_selection(:top_right, { :active_cell => 'I10', :sqref => 'I10' })
23
+ vs.add_selection(:bottom_left, { :active_cell => 'E55', :sqref => 'E55' })
24
+ vs.add_selection(:bottom_right, { :active_cell => 'I57', :sqref => 'I57' })
25
+ end
26
+
27
+ ws.add_chart(Axlsx::Pie3DChart, :title => "これは?", :start_at => [0,3]) do |chart|
28
+ chart.add_series :data=>[1,2,3], :labels=>["a", "b", "c"]
29
+ end
30
+
31
+ ws.add_chart(Axlsx::Line3DChart, :title => "axis labels") do |chart|
32
+ chart.valAxis.title = 'bob'
33
+ end
12
34
 
13
- chart = ws.add_chart Axlsx::Pie3DChart, :title => "これは?", :start_at => [0,3]
14
- chart.add_series :data=>[1,2,3], :labels=>["a", "b", "c"]
15
35
  @fname = 'axlsx_test_serialization.xlsx'
16
36
  img = File.expand_path('../../examples/image1.jpeg', __FILE__)
17
37
  ws.add_image(:image_src => img, :noSelect => true, :noMove => true, :hyperlink=>"http://axlsx.blogspot.com") do |image|
@@ -100,7 +120,7 @@ class TestPackage < Test::Unit::TestCase
100
120
 
101
121
 
102
122
  #no mystery parts
103
- assert_equal(p.size, 18)
123
+ assert_equal(p.size, 19)
104
124
 
105
125
  end
106
126
 
@@ -143,7 +163,7 @@ class TestPackage < Test::Unit::TestCase
143
163
  # in testing.
144
164
  assert(stream.size > 80000)
145
165
  end
146
-
166
+
147
167
  def test_encrypt
148
168
  # this is no where near close to ready yet
149
169
  assert(@package.encrypt('your_mom.xlsxl', 'has a password') == false)
@@ -83,15 +83,25 @@ class TestValidators < Test::Unit::TestCase
83
83
  assert_raise(ArgumentError) { Axlsx.validate_number_with_unit "mm" }
84
84
  assert_raise(ArgumentError) { Axlsx.validate_number_with_unit "-29cm" }
85
85
 
86
- #page_scale
87
- assert_nothing_raised { Axlsx.validate_page_scale 10 }
88
- assert_nothing_raised { Axlsx.validate_page_scale 100 }
89
- assert_nothing_raised { Axlsx.validate_page_scale 400 }
90
- assert_raise(ArgumentError) { Axlsx.validate_page_scale 9 }
91
- assert_raise(ArgumentError) { Axlsx.validate_page_scale 10.0 }
92
- assert_raise(ArgumentError) { Axlsx.validate_page_scale 400.1 }
93
- assert_raise(ArgumentError) { Axlsx.validate_page_scale "99" }
94
-
86
+ #scale_10_400
87
+ assert_nothing_raised { Axlsx.validate_scale_10_400 10 }
88
+ assert_nothing_raised { Axlsx.validate_scale_10_400 100 }
89
+ assert_nothing_raised { Axlsx.validate_scale_10_400 400 }
90
+ assert_raise(ArgumentError) { Axlsx.validate_scale_10_400 9 }
91
+ assert_raise(ArgumentError) { Axlsx.validate_scale_10_400 10.0 }
92
+ assert_raise(ArgumentError) { Axlsx.validate_scale_10_400 400.1 }
93
+ assert_raise(ArgumentError) { Axlsx.validate_scale_10_400 "99" }
94
+
95
+ #scale_0_10_400
96
+ assert_nothing_raised { Axlsx.validate_scale_0_10_400 0 }
97
+ assert_nothing_raised { Axlsx.validate_scale_0_10_400 10 }
98
+ assert_nothing_raised { Axlsx.validate_scale_0_10_400 100 }
99
+ assert_nothing_raised { Axlsx.validate_scale_0_10_400 400 }
100
+ assert_raise(ArgumentError) { Axlsx.validate_scale_0_10_400 9 }
101
+ assert_raise(ArgumentError) { Axlsx.validate_scale_0_10_400 10.0 }
102
+ assert_raise(ArgumentError) { Axlsx.validate_scale_0_10_400 400.1 }
103
+ assert_raise(ArgumentError) { Axlsx.validate_scale_0_10_400 "99" }
104
+
95
105
  #page_orientation
96
106
  assert_nothing_raised { Axlsx.validate_page_orientation :default }
97
107
  assert_nothing_raised { Axlsx.validate_page_orientation :landscape }
@@ -99,6 +109,53 @@ class TestValidators < Test::Unit::TestCase
99
109
  assert_raise(ArgumentError) { Axlsx.validate_page_orientation nil }
100
110
  assert_raise(ArgumentError) { Axlsx.validate_page_orientation 1 }
101
111
  assert_raise(ArgumentError) { Axlsx.validate_page_orientation "landscape" }
112
+
113
+ #data_validation_error_style
114
+ [:information, :stop, :warning].each do |sym|
115
+ assert_nothing_raised { Axlsx.validate_data_validation_error_style sym }
116
+ end
117
+ assert_raise(ArgumentError) { Axlsx.validate_data_validation_error_style :other_symbol }
118
+ assert_raise(ArgumentError) { Axlsx.validate_data_validation_error_style 'warning' }
119
+ assert_raise(ArgumentError) { Axlsx.validate_data_validation_error_style 0 }
120
+
121
+ #data_validation_operator
122
+ [:lessThan, :lessThanOrEqual, :equal, :notEqual, :greaterThanOrEqual, :greaterThan, :between, :notBetween].each do |sym|
123
+ assert_nothing_raised { Axlsx.validate_data_validation_operator sym }
124
+ end
125
+ assert_raise(ArgumentError) { Axlsx.validate_data_validation_error_style :other_symbol }
126
+ assert_raise(ArgumentError) { Axlsx.validate_data_validation_error_style 'lessThan' }
127
+ assert_raise(ArgumentError) { Axlsx.validate_data_validation_error_style 0 }
128
+
129
+ #data_validation_type
130
+ [:custom, :data, :decimal, :list, :none, :textLength, :time, :whole].each do |sym|
131
+ assert_nothing_raised { Axlsx.validate_data_validation_type sym }
132
+ end
133
+ assert_raise(ArgumentError) { Axlsx.validate_data_validation_error_style :other_symbol }
134
+ assert_raise(ArgumentError) { Axlsx.validate_data_validation_error_style 'decimal' }
135
+ assert_raise(ArgumentError) { Axlsx.validate_data_validation_error_style 0 }
136
+
137
+ #sheet_view_type
138
+ [:normal, :page_break_preview, :page_layout].each do |sym|
139
+ assert_nothing_raised { Axlsx.validate_sheet_view_type sym }
140
+ end
141
+ assert_raise(ArgumentError) { Axlsx.validate_data_validation_error_style :other_symbol }
142
+ assert_raise(ArgumentError) { Axlsx.validate_data_validation_error_style 'page_layout' }
143
+ assert_raise(ArgumentError) { Axlsx.validate_data_validation_error_style 0 }
144
+
145
+ #active_pane_type
146
+ [:bottom_left, :bottom_right, :top_left, :top_right].each do |sym|
147
+ assert_nothing_raised { Axlsx.validate_pane_type sym }
148
+ end
149
+ assert_raise(ArgumentError) { Axlsx.validate_pane_type :other_symbol }
150
+ assert_raise(ArgumentError) { Axlsx.validate_pane_type 'bottom_left' }
151
+ assert_raise(ArgumentError) { Axlsx.validate_pane_type 0 }
152
+
153
+ #split_state_type
154
+ [:frozen, :frozen_split, :split].each do |sym|
155
+ assert_nothing_raised { Axlsx.validate_split_state_type sym }
156
+ end
157
+ assert_raise(ArgumentError) { Axlsx.validate_split_state_type :other_symbol }
158
+ assert_raise(ArgumentError) { Axlsx.validate_split_state_type 'frozen_split' }
159
+ assert_raise(ArgumentError) { Axlsx.validate_split_state_type 0 }
102
160
  end
103
- end
104
-
161
+ end
@@ -0,0 +1,94 @@
1
+ # encoding: UTF-8
2
+ $LOAD_PATH.unshift "#{File.dirname(__FILE__)}/../../"
3
+ require 'tc_helper.rb'
4
+
5
+ class TestPane < Test::Unit::TestCase
6
+ def setup
7
+ #inverse defaults for booleans
8
+ @nil_options = { :active_pane => :bottom_left, :state => :frozen, :top_left_cell => 'A2' }
9
+ @int_0_options = { :x_split => 2, :y_split => 2 }
10
+
11
+ @string_options = { :top_left_cell => 'A2' }
12
+ @integer_options = { :x_split => 2, :y_split => 2 }
13
+ @symbol_options = { :active_pane => :bottom_left, :state => :frozen }
14
+
15
+ @options = @nil_options.merge(@int_0_options)
16
+
17
+ @pane = Axlsx::Pane.new(@options)
18
+ end
19
+
20
+ def test_initialize
21
+ pane = Axlsx::Pane.new
22
+
23
+ @nil_options.each do |key, value|
24
+ assert_equal(nil, pane.send(key.to_sym), "initialized default #{key} should be nil")
25
+ assert_equal(value, @pane.send(key.to_sym), "initialized options #{key} should be #{value}")
26
+ end
27
+
28
+ @int_0_options.each do |key, value|
29
+ assert_equal(0, pane.send(key.to_sym), "initialized default #{key} should be 0")
30
+ assert_equal(value, @pane.send(key.to_sym), "initialized options #{key} should be #{value}")
31
+ end
32
+ end
33
+
34
+ def test_string_attribute_validation
35
+ @string_options.each do |key, value|
36
+ assert_raise(ArgumentError, "#{key} must be string") { @pane.send("#{key}=".to_sym, :symbol) }
37
+ assert_nothing_raised { @pane.send("#{key}=".to_sym, "foo") }
38
+ end
39
+ end
40
+
41
+ def test_symbol_attribute_validation
42
+ @symbol_options.each do |key, value|
43
+ assert_raise(ArgumentError, "#{key} must be symbol") { @pane.send("#{key}=".to_sym, "foo") }
44
+ assert_nothing_raised { @pane.send("#{key}=".to_sym, value) }
45
+ end
46
+ end
47
+
48
+ def test_integer_attribute_validation
49
+ @integer_options.each do |key, value|
50
+ assert_raise(ArgumentError, "#{key} must be integer") { @pane.send("#{key}=".to_sym, "foo") }
51
+ assert_nothing_raised { @pane.send("#{key}=".to_sym, value) }
52
+ end
53
+ end
54
+
55
+ def test_active_pane
56
+ assert_raise(ArgumentError) { @pane.active_pane = "10" }
57
+ assert_nothing_raised { @pane.active_pane = :top_left }
58
+ assert_equal(@pane.active_pane, :top_left)
59
+ end
60
+
61
+ def test_state
62
+ assert_raise(ArgumentError) { @pane.state = "foo" }
63
+ assert_nothing_raised { @pane.state = :frozen_split }
64
+ assert_equal(@pane.state, :frozen_split)
65
+ end
66
+
67
+ def test_x_split
68
+ assert_raise(ArgumentError) { @pane.x_split = "foo´" }
69
+ assert_nothing_raised { @pane.x_split = 200 }
70
+ assert_equal(@pane.x_split, 200)
71
+ end
72
+
73
+ def test_y_split
74
+ assert_raise(ArgumentError) { @pane.y_split = 'foo' }
75
+ assert_nothing_raised { @pane.y_split = 300 }
76
+ assert_equal(@pane.y_split, 300)
77
+ end
78
+
79
+ def test_top_left_cell
80
+ assert_raise(ArgumentError) { @pane.top_left_cell = :cell }
81
+ assert_nothing_raised { @pane.top_left_cell = "A2" }
82
+ assert_equal(@pane.top_left_cell, "A2")
83
+ end
84
+
85
+ def test_to_xml
86
+ doc = Nokogiri::XML.parse(@pane.to_xml_string)
87
+ assert_equal(1, doc.xpath("//pane[@ySplit=2][@xSplit='2'][@topLeftCell='A2'][@state='frozen'][@activePane='bottomLeft']").size)
88
+ end
89
+ def test_to_xml_frozen
90
+ pane = Axlsx::Pane.new :state => :frozen, :y_split => 2
91
+ doc = Nokogiri::XML(pane.to_xml_string)
92
+ assert_equal(1, doc.xpath("//pane[@topLeftCell='A3']").size)
93
+ end
94
+ end
@@ -0,0 +1,94 @@
1
+ # encoding: UTF-8
2
+ require 'tc_helper.rb'
3
+
4
+ class TestSelection < Test::Unit::TestCase
5
+ def setup
6
+ @nil_options = { :active_cell => 'A2', :active_cell_id => 1, :pane => :top_left, :sqref => 'A2' }
7
+ @options = @nil_options
8
+
9
+ @string_options = { :active_cell => 'A2', :sqref => 'A2' }
10
+ @integer_options = { :active_cell_id => 1 }
11
+ @symbol_options = { :pane => :top_left }
12
+
13
+ @selection = Axlsx::Selection.new(@options)
14
+ end
15
+
16
+ def test_initialize
17
+ selection = Axlsx::Selection.new
18
+
19
+ @nil_options.each do |key, value|
20
+ assert_equal(nil, selection.send(key.to_sym), "initialized default #{key} should be nil")
21
+ assert_equal(value, @selection.send(key.to_sym), "initialized options #{key} should be #{value}")
22
+ end
23
+ end
24
+
25
+ def test_string_attribute_validation
26
+ @string_options.each do |key, value|
27
+ assert_raise(ArgumentError, "#{key} must be string") { @selection.send("#{key}=".to_sym, :symbol) }
28
+ assert_nothing_raised { @selection.send("#{key}=".to_sym, "foo") }
29
+ end
30
+ end
31
+
32
+ def test_symbol_attribute_validation
33
+ @symbol_options.each do |key, value|
34
+ assert_raise(ArgumentError, "#{key} must be symbol") { @selection.send("#{key}=".to_sym, "foo") }
35
+ assert_nothing_raised { @selection.send("#{key}=".to_sym, value) }
36
+ end
37
+ end
38
+
39
+ def test_integer_attribute_validation
40
+ @integer_options.each do |key, value|
41
+ assert_raise(ArgumentError, "#{key} must be integer") { @selection.send("#{key}=".to_sym, "foo") }
42
+ assert_nothing_raised { @selection.send("#{key}=".to_sym, value) }
43
+ end
44
+ end
45
+
46
+ def test_active_cell
47
+ assert_raise(ArgumentError) { @selection.active_cell = :active_cell }
48
+ assert_nothing_raised { @selection.active_cell = "F5" }
49
+ assert_equal(@selection.active_cell, "F5")
50
+ end
51
+
52
+ def test_active_cell_id
53
+ assert_raise(ArgumentError) { @selection.active_cell_id = "foo" }
54
+ assert_nothing_raised { @selection.active_cell_id = 11 }
55
+ assert_equal(@selection.active_cell_id, 11)
56
+ end
57
+
58
+ def test_pane
59
+ assert_raise(ArgumentError) { @selection.pane = "foo´" }
60
+ assert_nothing_raised { @selection.pane = :bottom_right }
61
+ assert_equal(@selection.pane, :bottom_right)
62
+ end
63
+
64
+ def test_sqref
65
+ assert_raise(ArgumentError) { @selection.sqref = :sqref }
66
+ assert_nothing_raised { @selection.sqref = "G32" }
67
+ assert_equal(@selection.sqref, "G32")
68
+ end
69
+
70
+ def test_to_xml
71
+ p = Axlsx::Package.new
72
+ @ws = p.workbook.add_worksheet :name => "sheetview"
73
+ @ws.sheet_view do |vs|
74
+ vs.add_selection(:top_left, { :active_cell => 'B2', :sqref => 'B2' })
75
+ vs.add_selection(:top_right, { :active_cell => 'I10', :sqref => 'I10' })
76
+ vs.add_selection(:bottom_left, { :active_cell => 'E55', :sqref => 'E55' })
77
+ vs.add_selection(:bottom_right, { :active_cell => 'I57', :sqref => 'I57' })
78
+ end
79
+
80
+ doc = Nokogiri::XML.parse(@ws.to_xml_string)
81
+
82
+ assert_equal(1, doc.xpath("//xmlns:worksheet/xmlns:sheetViews/xmlns:sheetView/xmlns:selection[@sqref='B2'][@pane='topLeft'][@activeCell='B2']").size)
83
+ assert doc.xpath("//xmlns:worksheet/xmlns:sheetViews/xmlns:sheetView/xmlns:selection[@sqref='B2'][@pane='topLeft'][@activeCell='B2']")
84
+
85
+ assert_equal(1, doc.xpath("//xmlns:worksheet/xmlns:sheetViews/xmlns:sheetView/xmlns:selection[@sqref='I10'][@pane='topRight'][@activeCell='I10']").size)
86
+ assert doc.xpath("//xmlns:worksheet/xmlns:sheetViews/xmlns:sheetView/xmlns:selection[@sqref='I10'][@pane='topRight'][@activeCell='I10']")
87
+
88
+ assert_equal(1, doc.xpath("//xmlns:worksheet/xmlns:sheetViews/xmlns:sheetView/xmlns:selection[@sqref='E55'][@pane='bottomLeft'][@activeCell='E55']").size)
89
+ assert doc.xpath("//xmlns:worksheet/xmlns:sheetViews/xmlns:sheetView/xmlns:selection[@sqref='E55'][@pane='bottomLeft'][@activeCell='E55']")
90
+
91
+ assert_equal(1, doc.xpath("//xmlns:worksheet/xmlns:sheetViews/xmlns:sheetView/xmlns:selection[@sqref='I57'][@pane='bottomRight'][@activeCell='I57']").size)
92
+ assert doc.xpath("//xmlns:worksheet/xmlns:sheetViews/xmlns:sheetView/xmlns:selection[@sqref='I57'][@pane='bottomRight'][@activeCell='I57']")
93
+ end
94
+ end