axlsx 1.3.6 → 2.0.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 (87) hide show
  1. checksums.yaml +4 -4
  2. data/.yardopts_guide +19 -0
  3. data/CHANGELOG.md +8 -0
  4. data/README.md +54 -79
  5. data/Rakefile +0 -5
  6. data/examples/2010_comments.rb +17 -0
  7. data/examples/anchor_swapping.rb +28 -0
  8. data/examples/example.rb +16 -1
  9. data/examples/pivot_table.rb +2 -0
  10. data/examples/underline.rb +13 -0
  11. data/lib/axlsx/doc_props/core.rb +6 -1
  12. data/lib/axlsx/drawing/axes.rb +7 -3
  13. data/lib/axlsx/drawing/bar_3D_chart.rb +2 -2
  14. data/lib/axlsx/drawing/chart.rb +20 -4
  15. data/lib/axlsx/drawing/drawing.rb +2 -17
  16. data/lib/axlsx/drawing/graphic_frame.rb +3 -8
  17. data/lib/axlsx/drawing/hyperlink.rb +5 -12
  18. data/lib/axlsx/drawing/marker.rb +25 -5
  19. data/lib/axlsx/drawing/one_cell_anchor.rb +9 -0
  20. data/lib/axlsx/drawing/pic.rb +17 -23
  21. data/lib/axlsx/drawing/two_cell_anchor.rb +7 -27
  22. data/lib/axlsx/package.rb +36 -16
  23. data/lib/axlsx/rels/relationship.rb +73 -8
  24. data/lib/axlsx/rels/relationships.rb +8 -1
  25. data/lib/axlsx/stylesheet/color.rb +1 -1
  26. data/lib/axlsx/stylesheet/num_fmt.rb +2 -2
  27. data/lib/axlsx/stylesheet/styles.rb +5 -3
  28. data/lib/axlsx/util/serialized_attributes.rb +11 -8
  29. data/lib/axlsx/util/simple_typed_list.rb +34 -13
  30. data/lib/axlsx/util/validators.rb +7 -0
  31. data/lib/axlsx/version.rb +1 -1
  32. data/lib/axlsx/workbook/defined_name.rb +1 -1
  33. data/lib/axlsx/workbook/shared_strings_table.rb +12 -3
  34. data/lib/axlsx/workbook/workbook.rb +31 -8
  35. data/lib/axlsx/workbook/worksheet/break.rb +37 -0
  36. data/lib/axlsx/workbook/worksheet/cell.rb +5 -5
  37. data/lib/axlsx/workbook/worksheet/cell_serializer.rb +1 -1
  38. data/lib/axlsx/workbook/worksheet/col_breaks.rb +35 -0
  39. data/lib/axlsx/workbook/worksheet/comment.rb +6 -5
  40. data/lib/axlsx/workbook/worksheet/comments.rb +3 -3
  41. data/lib/axlsx/workbook/worksheet/conditional_formatting_rule.rb +1 -1
  42. data/lib/axlsx/workbook/worksheet/date_time_converter.rb +6 -5
  43. data/lib/axlsx/workbook/worksheet/pivot_table.rb +32 -18
  44. data/lib/axlsx/workbook/worksheet/pivot_table_cache_definition.rb +4 -3
  45. data/lib/axlsx/workbook/worksheet/pivot_tables.rb +1 -1
  46. data/lib/axlsx/workbook/worksheet/row.rb +1 -1
  47. data/lib/axlsx/workbook/worksheet/row_breaks.rb +33 -0
  48. data/lib/axlsx/workbook/worksheet/table.rb +3 -2
  49. data/lib/axlsx/workbook/worksheet/tables.rb +1 -1
  50. data/lib/axlsx/workbook/worksheet/worksheet.rb +61 -26
  51. data/lib/axlsx/workbook/worksheet/worksheet_comments.rb +6 -5
  52. data/lib/axlsx/workbook/worksheet/worksheet_drawing.rb +3 -9
  53. data/lib/axlsx/workbook/worksheet/worksheet_hyperlink.rb +5 -10
  54. data/lib/axlsx.rb +10 -2
  55. data/lib/schema/sml.xsd +4 -0
  56. data/test/axlsx.qcachegrind +2226 -0
  57. data/test/doc_props/tc_core.rb +7 -0
  58. data/test/drawing/tc_axes.rb +8 -0
  59. data/test/drawing/tc_bar_3D_chart.rb +6 -0
  60. data/test/drawing/tc_chart.rb +13 -0
  61. data/test/drawing/tc_drawing.rb +0 -5
  62. data/test/drawing/tc_graphic_frame.rb +4 -7
  63. data/test/drawing/tc_hyperlink.rb +0 -4
  64. data/test/drawing/tc_pic.rb +14 -3
  65. data/test/drawing/tc_two_cell_anchor.rb +3 -3
  66. data/test/profile.rb +7 -3
  67. data/test/rels/tc_relationship.rb +29 -11
  68. data/test/rels/tc_relationships.rb +12 -1
  69. data/test/stylesheet/tc_color.rb +6 -0
  70. data/test/stylesheet/tc_styles.rb +2 -2
  71. data/test/tc_helper.rb +1 -0
  72. data/test/tc_package.rb +31 -1
  73. data/test/util/tc_serialized_attributes.rb +19 -0
  74. data/test/workbook/tc_shared_strings_table.rb +6 -0
  75. data/test/workbook/tc_workbook.rb +23 -1
  76. data/test/workbook/worksheet/tc_break.rb +49 -0
  77. data/test/workbook/worksheet/tc_comment.rb +17 -6
  78. data/test/workbook/worksheet/tc_conditional_formatting.rb +2 -2
  79. data/test/workbook/worksheet/tc_date_time_converter.rb +3 -11
  80. data/test/workbook/worksheet/tc_pivot_table.rb +40 -22
  81. data/test/workbook/worksheet/tc_pivot_table_cache_definition.rb +9 -1
  82. data/test/workbook/worksheet/tc_sheet_view.rb +39 -39
  83. data/test/workbook/worksheet/tc_table.rb +2 -2
  84. data/test/workbook/worksheet/tc_worksheet.rb +39 -7
  85. data/test/workbook/worksheet/tc_worksheet_hyperlink.rb +2 -11
  86. metadata +39 -11
  87. data/test/example.xlsx +0 -0
@@ -1,5 +1,17 @@
1
1
  require 'tc_helper.rb'
2
2
 
3
+
4
+ def shared_test_pivot_table_xml_validity(pivot_table)
5
+ schema = Nokogiri::XML::Schema(File.open(Axlsx::SML_XSD))
6
+ doc = Nokogiri::XML(pivot_table.to_xml_string)
7
+ errors = []
8
+ schema.validate(doc).each do |error|
9
+ errors.push error
10
+ puts error.message
11
+ end
12
+ assert(errors.empty?, "error free validation")
13
+ end
14
+
3
15
  class TestPivotTable < Test::Unit::TestCase
4
16
  def setup
5
17
  p = Axlsx::Package.new
@@ -24,8 +36,18 @@ class TestPivotTable < Test::Unit::TestCase
24
36
  assert_equal(@ws.pivot_tables.last, pivot_table, "must be added to worksheet pivot tables collection")
25
37
  end
26
38
 
39
+ def test_set_pivot_table_data_sheet
40
+ pivot_table = @ws.add_pivot_table('G5:G6', 'A1:D5')
41
+ data_sheet = @ws.clone
42
+ data_sheet.name = "Pivot Table Data Source"
43
+
44
+ assert_equal(pivot_table.data_sheet.name, @ws.name, "must default to the same sheet the pivot table is added to")
45
+ pivot_table.data_sheet = data_sheet
46
+ assert_equal(pivot_table.data_sheet.name, data_sheet.name, "data sheet assigned to pivot table")
47
+ end
48
+
27
49
  def test_add_pivot_table_with_config
28
- pivot_table = @ws.add_pivot_table('G5:G6', 'A1:D5') do |pt|
50
+ pivot_table = @ws.add_pivot_table('G5:G6', 'A1:E5') do |pt|
29
51
  pt.rows = ['Year', 'Month']
30
52
  pt.columns = ['Type']
31
53
  pt.data = ['Sales']
@@ -33,8 +55,16 @@ class TestPivotTable < Test::Unit::TestCase
33
55
  end
34
56
  assert_equal(['Year', 'Month'], pivot_table.rows)
35
57
  assert_equal(['Type'], pivot_table.columns)
36
- assert_equal(['Sales'], pivot_table.data)
58
+ assert_equal([{:ref=>"Sales"}], pivot_table.data)
37
59
  assert_equal(['Region'], pivot_table.pages)
60
+ shared_test_pivot_table_xml_validity(pivot_table)
61
+ end
62
+
63
+ def test_add_pivot_table_with_options_on_data_field
64
+ pivot_table = @ws.add_pivot_table('G5:G6', 'A1:D5') do |pt|
65
+ pt.data = [{:ref=>"Sales", :subtotal => 'average'}]
66
+ end
67
+ assert_equal([{:ref=>"Sales", :subtotal => 'average'}], pivot_table.data)
38
68
  end
39
69
 
40
70
  def test_header_indices
@@ -53,11 +83,6 @@ class TestPivotTable < Test::Unit::TestCase
53
83
  assert_equal(@ws.pivot_tables.first.pn, "pivotTables/pivotTable1.xml")
54
84
  end
55
85
 
56
- def test_rId
57
- @ws.add_pivot_table('G5:G6', 'A1:D5')
58
- assert_equal(@ws.pivot_tables.first.rId, "rId1")
59
- end
60
-
61
86
  def test_index
62
87
  @ws.add_pivot_table('G5:G6', 'A1:D5')
63
88
  assert_equal(@ws.pivot_tables.first.index, @ws.workbook.pivot_tables.index(@ws.pivot_tables.first))
@@ -73,14 +98,7 @@ class TestPivotTable < Test::Unit::TestCase
73
98
 
74
99
  def test_to_xml_string
75
100
  pivot_table = @ws.add_pivot_table('G5:G6', 'A1:D5')
76
- schema = Nokogiri::XML::Schema(File.open(Axlsx::SML_XSD))
77
- doc = Nokogiri::XML(pivot_table.to_xml_string)
78
- errors = []
79
- schema.validate(doc).each do |error|
80
- errors.push error
81
- puts error.message
82
- end
83
- assert(errors.empty?, "error free validation")
101
+ shared_test_pivot_table_xml_validity(pivot_table)
84
102
  end
85
103
 
86
104
  def test_to_xml_string_with_configuration
@@ -90,13 +108,13 @@ class TestPivotTable < Test::Unit::TestCase
90
108
  pt.data = ['Sales']
91
109
  pt.pages = ['Region']
92
110
  end
93
- schema = Nokogiri::XML::Schema(File.open(Axlsx::SML_XSD))
94
- doc = Nokogiri::XML(pivot_table.to_xml_string)
95
- errors = []
96
- schema.validate(doc).each do |error|
97
- errors.push error
98
- puts error.message
111
+ shared_test_pivot_table_xml_validity(pivot_table)
112
+ end
113
+
114
+ def test_to_xml_string_with_options_on_data_field
115
+ pivot_table = @ws.add_pivot_table('G5:G6', 'A1:E5') do |pt|
116
+ pt.data = [{:ref=>"Sales", :subtotal => 'average'}]
99
117
  end
100
- assert(errors.empty?, "error free validation")
118
+ shared_test_pivot_table_xml_validity(pivot_table)
101
119
  end
102
120
  end
@@ -21,7 +21,7 @@ class TestPivotTableCacheDefinition < Test::Unit::TestCase
21
21
  end
22
22
 
23
23
  def test_rId
24
- assert_equal('rId1', @cache_definition.rId)
24
+ assert_equal @pivot_table.relationships.for(@cache_definition).Id, @cache_definition.rId
25
25
  end
26
26
 
27
27
  def test_index
@@ -32,6 +32,14 @@ class TestPivotTableCacheDefinition < Test::Unit::TestCase
32
32
  assert_equal(1, @cache_definition.cache_id)
33
33
  end
34
34
 
35
+ def test_data_sheet
36
+ data_sheet = @ws.clone
37
+ data_sheet.name = "Pivot Table Data Source"
38
+ @pivot_table.data_sheet = data_sheet
39
+
40
+ assert(@cache_definition.to_xml_string.include?(data_sheet.name), "must set the data source correctly")
41
+ end
42
+
35
43
  def test_to_xml_string
36
44
  schema = Nokogiri::XML::Schema(File.open(Axlsx::SML_XSD))
37
45
  doc = Nokogiri::XML(@cache_definition.to_xml_string)
@@ -5,207 +5,207 @@ require 'tc_helper.rb'
5
5
  class TestSheetView < Test::Unit::TestCase
6
6
  def setup
7
7
  #inverse defaults for booleans
8
- @boolean_options = { :right_to_left => true, :show_formulas => true, :show_outline_symbols => true,
8
+ @boolean_options = { :right_to_left => true, :show_formulas => true, :show_outline_symbols => true,
9
9
  :show_white_space => true, :tab_selected => true, :default_grid_color => false, :show_grid_lines => false,
10
10
  :show_row_col_headers => false, :show_ruler => false, :show_zeros => false, :window_protection => true }
11
11
  @symbol_options = { :view => :page_break_preview }
12
12
  @nil_options = { :color_id => 2, :top_left_cell => 'A2' }
13
13
  @int_0 = { :zoom_scale_normal => 100, :zoom_scale_page_layout_view => 100, :zoom_scale_sheet_layout_view => 100, :workbook_view_id => 2 }
14
14
  @int_100 = { :zoom_scale => 10 }
15
-
15
+
16
16
  @integer_options = { :color_id => 2, :workbook_view_id => 2 }.merge(@int_0).merge(@int_100)
17
17
  @string_options = { :top_left_cell => 'A2' }
18
-
19
-
18
+
19
+
20
20
  @options = @boolean_options.merge(@boolean_options).merge(@symbol_options).merge(@nil_options).merge(@int_0).merge(@int_100)
21
-
21
+
22
22
  @sv = Axlsx::SheetView.new(@options)
23
23
  end
24
-
24
+
25
25
  def test_initialize
26
26
  sv = Axlsx::SheetView.new
27
-
27
+
28
28
  @boolean_options.each do |key, value|
29
29
  assert_equal(!value, sv.send(key.to_sym), "initialized default #{key} should be #{!value}")
30
30
  assert_equal(value, @sv.send(key.to_sym), "initialized options #{key} should be #{value}")
31
31
  end
32
-
32
+
33
33
  @nil_options.each do |key, value|
34
34
  assert_equal(nil, sv.send(key.to_sym), "initialized default #{key} should be nil")
35
35
  assert_equal(value, @sv.send(key.to_sym), "initialized options #{key} should be #{value}")
36
36
  end
37
-
37
+
38
38
  @int_0.each do |key, value|
39
39
  assert_equal(0, sv.send(key.to_sym), "initialized default #{key} should be 0")
40
40
  assert_equal(value, @sv.send(key.to_sym), "initialized options #{key} should be #{value}")
41
41
  end
42
-
42
+
43
43
  @int_100.each do |key, value|
44
44
  assert_equal(100, sv.send(key.to_sym), "initialized default #{key} should be 100")
45
45
  assert_equal(value, @sv.send(key.to_sym), "initialized options #{key} should be #{value}")
46
46
  end
47
47
  end
48
-
48
+
49
49
  def test_boolean_attribute_validation
50
50
  @boolean_options.each do |key, value|
51
51
  assert_raise(ArgumentError, "#{key} must be boolean") { @sv.send("#{key}=".to_sym, 'A') }
52
52
  assert_nothing_raised { @sv.send("#{key}=".to_sym, true) }
53
53
  end
54
54
  end
55
-
55
+
56
56
  def test_string_attribute_validation
57
57
  @string_options.each do |key, value|
58
58
  assert_raise(ArgumentError, "#{key} must be string") { @sv.send("#{key}=".to_sym, :symbol) }
59
59
  assert_nothing_raised { @sv.send("#{key}=".to_sym, "foo") }
60
60
  end
61
61
  end
62
-
62
+
63
63
  def test_symbol_attribute_validation
64
64
  @symbol_options.each do |key, value|
65
65
  assert_raise(ArgumentError, "#{key} must be symbol") { @sv.send("#{key}=".to_sym, "foo") }
66
66
  assert_nothing_raised { @sv.send("#{key}=".to_sym, value) }
67
67
  end
68
68
  end
69
-
69
+
70
70
  def test_integer_attribute_validation
71
71
  @integer_options.each do |key, value|
72
72
  assert_raise(ArgumentError, "#{key} must be integer") { @sv.send("#{key}=".to_sym, "foo") }
73
73
  assert_nothing_raised { @sv.send("#{key}=".to_sym, value) }
74
74
  end
75
75
  end
76
-
76
+
77
77
  def test_color_id
78
78
  assert_raise(ArgumentError) { @sv.color_id = "10" }
79
79
  assert_nothing_raised { @sv.color_id = 2 }
80
80
  assert_equal(@sv.color_id, 2)
81
81
  end
82
-
82
+
83
83
  def test_default_grid_color
84
84
  assert_raise(ArgumentError) { @sv.default_grid_color = "foo" }
85
85
  assert_nothing_raised { @sv.default_grid_color = false }
86
86
  assert_equal(@sv.default_grid_color, false)
87
87
  end
88
-
88
+
89
89
  def test_right_to_left
90
90
  assert_raise(ArgumentError) { @sv.right_to_left = "foo´" }
91
91
  assert_nothing_raised { @sv.right_to_left = true }
92
92
  assert_equal(@sv.right_to_left, true)
93
93
  end
94
-
94
+
95
95
  def test_show_formulas
96
96
  assert_raise(ArgumentError) { @sv.show_formulas = 'foo' }
97
97
  assert_nothing_raised { @sv.show_formulas = false }
98
98
  assert_equal(@sv.show_formulas, false)
99
99
  end
100
-
100
+
101
101
  def test_show_grid_lines
102
102
  assert_raise(ArgumentError) { @sv.show_grid_lines = "foo" }
103
103
  assert_nothing_raised { @sv.show_grid_lines = false }
104
104
  assert_equal(@sv.show_grid_lines, false)
105
105
  end
106
-
106
+
107
107
  def test_show_outline_symbols
108
108
  assert_raise(ArgumentError) { @sv.show_outline_symbols = 'foo' }
109
109
  assert_nothing_raised { @sv.show_outline_symbols = false }
110
110
  assert_equal(@sv.show_outline_symbols, false)
111
111
  end
112
-
112
+
113
113
  def test_show_row_col_headers
114
114
  assert_raise(ArgumentError) { @sv.show_row_col_headers = "foo" }
115
115
  assert_nothing_raised { @sv.show_row_col_headers = false }
116
116
  assert_equal(@sv.show_row_col_headers, false)
117
117
  end
118
-
118
+
119
119
  def test_show_ruler
120
120
  assert_raise(ArgumentError) { @sv.show_ruler = 'foo' }
121
121
  assert_nothing_raised { @sv.show_ruler = false }
122
122
  assert_equal(@sv.show_ruler, false)
123
123
  end
124
-
124
+
125
125
  def test_show_white_space
126
126
  assert_raise(ArgumentError) { @sv.show_white_space = 'foo' }
127
127
  assert_nothing_raised { @sv.show_white_space = false }
128
128
  assert_equal(@sv.show_white_space, false)
129
129
  end
130
-
130
+
131
131
  def test_show_zeros
132
132
  assert_raise(ArgumentError) { @sv.show_zeros = "foo" }
133
133
  assert_nothing_raised { @sv.show_zeros = false }
134
134
  assert_equal(@sv.show_zeros, false)
135
135
  end
136
-
136
+
137
137
  def test_tab_selected
138
138
  assert_raise(ArgumentError) { @sv.tab_selected = "foo" }
139
139
  assert_nothing_raised { @sv.tab_selected = false }
140
140
  assert_equal(@sv.tab_selected, false)
141
141
  end
142
-
142
+
143
143
  def test_top_left_cell
144
144
  assert_raise(ArgumentError) { @sv.top_left_cell = :cell_adress }
145
145
  assert_nothing_raised { @sv.top_left_cell = "A2" }
146
146
  assert_equal(@sv.top_left_cell, "A2")
147
147
  end
148
-
148
+
149
149
  def test_view
150
150
  assert_raise(ArgumentError) { @sv.view = 'view' }
151
151
  assert_nothing_raised { @sv.view = :page_break_preview }
152
152
  assert_equal(@sv.view, :page_break_preview)
153
153
  end
154
-
154
+
155
155
  def test_window_protection
156
156
  assert_raise(ArgumentError) { @sv.window_protection = "foo" }
157
157
  assert_nothing_raised { @sv.window_protection = false }
158
158
  assert_equal(@sv.window_protection, false)
159
159
  end
160
-
160
+
161
161
  def test_workbook_view_id
162
162
  assert_raise(ArgumentError) { @sv.workbook_view_id = "1" }
163
163
  assert_nothing_raised { @sv.workbook_view_id = 1 }
164
164
  assert_equal(@sv.workbook_view_id, 1)
165
165
  end
166
-
166
+
167
167
  def test_zoom_scale
168
168
  assert_raise(ArgumentError) { @sv.zoom_scale = "50" }
169
169
  assert_nothing_raised { @sv.zoom_scale = 50 }
170
170
  assert_equal(@sv.zoom_scale, 50)
171
171
  end
172
-
172
+
173
173
  def test_zoom_scale_normal
174
174
  assert_raise(ArgumentError) { @sv.zoom_scale_normal = "50" }
175
175
  assert_nothing_raised { @sv.zoom_scale_normal = 50 }
176
176
  assert_equal(@sv.zoom_scale_normal, 50)
177
177
  end
178
-
178
+
179
179
  def test_zoom_scale_page_layout_view
180
180
  assert_raise(ArgumentError) { @sv.zoom_scale_page_layout_view = "50" }
181
181
  assert_nothing_raised { @sv.zoom_scale_page_layout_view = 50 }
182
182
  assert_equal(@sv.zoom_scale_page_layout_view, 50)
183
183
  end
184
-
184
+
185
185
  def test_zoom_scale_sheet_layout_view
186
186
  assert_raise(ArgumentError) { @sv.zoom_scale_sheet_layout_view = "50" }
187
187
  assert_nothing_raised { @sv.zoom_scale_sheet_layout_view = 50 }
188
188
  assert_equal(@sv.zoom_scale_sheet_layout_view, 50)
189
189
  end
190
-
190
+
191
191
  def test_to_xml
192
192
  p = Axlsx::Package.new
193
193
  @ws = p.workbook.add_worksheet :name => "sheetview"
194
194
  @ws.sheet_view do |vs|
195
195
  vs.view = :page_break_preview
196
196
  end
197
-
197
+
198
198
  doc = Nokogiri::XML.parse(@ws.sheet_view.to_xml_string)
199
-
199
+
200
200
  assert_equal(1, doc.xpath("//sheetView[@tabSelected='false']").size)
201
-
201
+
202
202
  assert_equal(1, doc.xpath("//sheetView[@tabSelected='false'][@showWhiteSpace='false'][@showOutlineSymbols='false'][@showFormulas='false']
203
203
  [@rightToLeft='false'][@windowProtection='false'][@showZeros='true'][@showRuler='true']
204
204
  [@showRowColHeaders='true'][@showGridLines='true'][@defaultGridColor='true']
205
205
  [@zoomScale='100'][@workbookViewId='0'][@zoomScaleSheetLayoutView='0'][@zoomScalePageLayoutView='0']
206
- [@zoomScaleNormal='0'][@view='page_break_preview']").size)
206
+ [@zoomScaleNormal='0'][@view='pageBreakPreview']").size)
207
207
  end
208
-
208
+
209
209
  def test_add_selection
210
210
  @sv.add_selection(:top_left, :active_cell => "A1")
211
211
  assert_equal('A1', @sv.selections[:top_left].active_cell)
@@ -36,8 +36,8 @@ class TestTable < Test::Unit::TestCase
36
36
  end
37
37
 
38
38
  def test_rId
39
- @ws.add_table("A1:D5")
40
- assert_equal(@ws.tables.first.rId, "rId1")
39
+ table = @ws.add_table("A1:D5")
40
+ assert_equal @ws.relationships.for(table).Id, table.rId
41
41
  end
42
42
 
43
43
  def test_index
@@ -123,9 +123,7 @@ class TestWorksheet < Test::Unit::TestCase
123
123
  end
124
124
 
125
125
  def test_rId
126
- assert_equal(@ws.rId, "rId1")
127
- ws = @ws.workbook.add_worksheet
128
- assert_equal(ws.rId, "rId2")
126
+ assert_equal @ws.workbook.relationships.for(@ws).Id, @ws.rId
129
127
  end
130
128
 
131
129
  def test_index
@@ -169,6 +167,27 @@ class TestWorksheet < Test::Unit::TestCase
169
167
  assert_equal(@ws.workbook.charts.size, 1, "add_chart adds a chart to the workbook")
170
168
  end
171
169
 
170
+ def test_add_page_break_with_string_cell_ref
171
+ assert(@ws.row_breaks.empty?)
172
+ assert(@ws.col_breaks.empty?)
173
+ @ws.add_page_break("B1")
174
+ assert_equal(1, @ws.row_breaks.size)
175
+ assert_equal(1, @ws.col_breaks.size)
176
+ end
177
+
178
+ def test_add_page_break_with_cell
179
+ @ws.add_row [1, 2, 3, 4]
180
+ @ws.add_row [1, 2, 3, 4]
181
+
182
+
183
+ assert(@ws.row_breaks.empty?)
184
+ assert(@ws.col_breaks.empty?)
185
+ @ws.add_page_break(@ws.rows.last.cells[1])
186
+ assert_equal(1, @ws.row_breaks.size)
187
+ assert_equal(1, @ws.col_breaks.size)
188
+ end
189
+
190
+
172
191
  def test_drawing
173
192
  assert @ws.drawing == nil
174
193
  @ws.add_chart(Axlsx::Pie3DChart)
@@ -205,13 +224,20 @@ class TestWorksheet < Test::Unit::TestCase
205
224
  def test_cols
206
225
  @ws.add_row [1,2,3,4]
207
226
  @ws.add_row [1,2,3,4]
208
- @ws.add_row [1,2,3,4]
227
+ @ws.add_row [1,2,3]
209
228
  @ws.add_row [1,2,3,4]
210
229
  c = @ws.cols[1]
211
230
  assert_equal(c.size, 4)
212
231
  assert_equal(c[0].value, 2)
213
232
  end
214
233
 
234
+ def test_cols_with_block
235
+ @ws.add_row [1,2,3]
236
+ @ws.add_row [1]
237
+ cols = @ws.cols {|row, column| :foo }
238
+ assert_equal(:foo, cols[1][1])
239
+ end
240
+
215
241
  def test_row_style
216
242
  @ws.add_row [1,2,3,4]
217
243
  @ws.add_row [1,2,3,4]
@@ -288,6 +314,12 @@ class TestWorksheet < Test::Unit::TestCase
288
314
  assert_equal(doc.xpath('//xmlns:worksheet/xmlns:mergeCells/xmlns:mergeCell[@ref="E1:F1"]').size, 1)
289
315
  end
290
316
 
317
+ def test_to_xml_string_row_breaks
318
+ @ws.add_page_break("A1")
319
+ doc = Nokogiri::XML(@ws.to_xml_string)
320
+ assert_equal(doc.xpath('//xmlns:worksheet/xmlns:rowBreaks/xmlns:brk[@id="0"]').size, 1)
321
+ end
322
+
291
323
  def test_to_xml_string_sheet_protection
292
324
  @ws.sheet_protection.password = 'fish'
293
325
  doc = Nokogiri::XML(@ws.to_xml_string)
@@ -334,16 +366,16 @@ class TestWorksheet < Test::Unit::TestCase
334
366
  def test_to_xml_string_drawing
335
367
  @ws.add_chart Axlsx::Pie3DChart
336
368
  doc = Nokogiri::XML(@ws.to_xml_string)
337
- assert_equal(doc.xpath('//xmlns:worksheet/xmlns:drawing[@r:id="rId1"]').size, 1)
369
+ assert_equal @ws.send(:worksheet_drawing).relationship.Id, doc.xpath('//xmlns:worksheet/xmlns:drawing').first["r:id"]
338
370
  end
339
371
 
340
372
  def test_to_xml_string_tables
341
373
  @ws.add_row ["one", "two"]
342
374
  @ws.add_row [1, 2]
343
- @ws.add_table "A1:B2"
375
+ table = @ws.add_table "A1:B2"
344
376
  doc = Nokogiri::XML(@ws.to_xml_string)
345
377
  assert_equal(doc.xpath('//xmlns:worksheet/xmlns:tableParts[@count="1"]').size, 1)
346
- assert_equal(doc.xpath('//xmlns:worksheet/xmlns:tableParts/xmlns:tablePart[@r:id="rId1"]').size, 1)
378
+ assert_equal table.rId, doc.xpath('//xmlns:worksheet/xmlns:tableParts/xmlns:tablePart').first["r:id"]
347
379
  end
348
380
 
349
381
  def test_to_xml_string
@@ -32,22 +32,13 @@ class TestWorksheetHyperlink < Test::Unit::TestCase
32
32
  assert_equal(@options[:ref], @a.ref)
33
33
  end
34
34
 
35
- def test_id
36
- @a.target = :external
37
-
38
- assert_equal("rId1", @a.id)
39
- @a.target = :internal
40
- assert_equal(nil, @a.id)
41
- end
42
-
43
-
44
35
  def test_to_xml_string_with_non_external
45
36
  doc = Nokogiri::XML(@ws.to_xml_string)
46
37
  assert_equal(doc.xpath("//xmlns:hyperlink[@ref='#{@a.ref}']").size, 1)
47
38
  assert_equal(doc.xpath("//xmlns:hyperlink[@tooltip='#{@a.tooltip}']").size, 1)
48
39
  assert_equal(doc.xpath("//xmlns:hyperlink[@location='#{@a.location}']").size, 1)
49
40
  assert_equal(doc.xpath("//xmlns:hyperlink[@display='#{@a.display}']").size, 1)
50
- assert_equal(doc.xpath("//xmlns:hyperlink[@r:id='#{@a.id}']").size, 0)
41
+ assert_equal(doc.xpath("//xmlns:hyperlink[@r:id]").size, 0)
51
42
  end
52
43
 
53
44
  def test_to_xml_stirng_with_external
@@ -57,7 +48,7 @@ class TestWorksheetHyperlink < Test::Unit::TestCase
57
48
  assert_equal(doc.xpath("//xmlns:hyperlink[@tooltip='#{@a.tooltip}']").size, 1)
58
49
  assert_equal(doc.xpath("//xmlns:hyperlink[@display='#{@a.display}']").size, 1)
59
50
  assert_equal(doc.xpath("//xmlns:hyperlink[@location='#{@a.location}']").size, 0)
60
- assert_equal(doc.xpath("//xmlns:hyperlink[@r:id='#{@a.id}']").size, 1)
51
+ assert_equal(doc.xpath("//xmlns:hyperlink[@r:id='#{@a.relationship.Id}']").size, 1)
61
52
  end
62
53
  end
63
54