axlsx 1.0.18 → 1.1.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.
Files changed (167) hide show
  1. data/CHANGELOG.md +11 -3
  2. data/README.md +93 -18
  3. data/examples/example.csv +1000 -0
  4. data/examples/example.rb +97 -5
  5. data/examples/example.xlsx +0 -0
  6. data/examples/example_streamed.xlsx +0 -0
  7. data/examples/no-use_autowidth.xlsx +0 -0
  8. data/examples/shared_strings_example.xlsx +0 -0
  9. data/lib/axlsx.rb +30 -9
  10. data/lib/axlsx/content_type/content_type.rb +9 -9
  11. data/lib/axlsx/content_type/default.rb +9 -6
  12. data/lib/axlsx/content_type/override.rb +12 -8
  13. data/lib/axlsx/doc_props/app.rb +37 -40
  14. data/lib/axlsx/doc_props/core.rb +12 -17
  15. data/lib/axlsx/drawing/axis.rb +38 -19
  16. data/lib/axlsx/drawing/bar_3D_chart.rb +33 -32
  17. data/lib/axlsx/drawing/bar_series.rb +13 -14
  18. data/lib/axlsx/drawing/cat_axis.rb +15 -14
  19. data/lib/axlsx/drawing/cat_axis_data.rb +16 -18
  20. data/lib/axlsx/drawing/chart.rb +37 -38
  21. data/lib/axlsx/drawing/drawing.rb +15 -12
  22. data/lib/axlsx/drawing/graphic_frame.rb +21 -21
  23. data/lib/axlsx/drawing/hyperlink.rb +12 -11
  24. data/lib/axlsx/drawing/line_3D_chart.rb +30 -28
  25. data/lib/axlsx/drawing/line_series.rb +11 -11
  26. data/lib/axlsx/drawing/marker.rb +10 -8
  27. data/lib/axlsx/drawing/named_axis_data.rb +36 -0
  28. data/lib/axlsx/drawing/one_cell_anchor.rb +17 -16
  29. data/lib/axlsx/drawing/pic.rb +24 -37
  30. data/lib/axlsx/drawing/picture_locking.rb +21 -18
  31. data/lib/axlsx/drawing/pie_3D_chart.rb +10 -8
  32. data/lib/axlsx/drawing/pie_series.rb +15 -12
  33. data/lib/axlsx/drawing/scaling.rb +10 -10
  34. data/lib/axlsx/drawing/scatter_chart.rb +69 -0
  35. data/lib/axlsx/drawing/scatter_series.rb +39 -0
  36. data/lib/axlsx/drawing/ser_axis.rb +10 -10
  37. data/lib/axlsx/drawing/series.rb +15 -15
  38. data/lib/axlsx/drawing/series_title.rb +14 -14
  39. data/lib/axlsx/drawing/title.rb +26 -26
  40. data/lib/axlsx/drawing/two_cell_anchor.rb +18 -20
  41. data/lib/axlsx/drawing/val_axis.rb +8 -7
  42. data/lib/axlsx/drawing/val_axis_data.rb +17 -17
  43. data/lib/axlsx/drawing/view_3D.rb +22 -20
  44. data/lib/axlsx/package.rb +32 -15
  45. data/lib/axlsx/rels/relationship.rb +9 -6
  46. data/lib/axlsx/rels/relationships.rb +7 -1
  47. data/lib/axlsx/stylesheet/#num_fmt.rb# +69 -0
  48. data/lib/axlsx/stylesheet/border.rb +27 -23
  49. data/lib/axlsx/stylesheet/border_pr.rb +16 -15
  50. data/lib/axlsx/stylesheet/cell_alignment.rb +23 -21
  51. data/lib/axlsx/stylesheet/cell_protection.rb +10 -7
  52. data/lib/axlsx/stylesheet/cell_style.rb +8 -5
  53. data/lib/axlsx/stylesheet/color.rb +20 -14
  54. data/lib/axlsx/stylesheet/fill.rb +7 -5
  55. data/lib/axlsx/stylesheet/font.rb +14 -14
  56. data/lib/axlsx/stylesheet/gradient_fill.rb +19 -16
  57. data/lib/axlsx/stylesheet/gradient_stop.rb +9 -5
  58. data/lib/axlsx/stylesheet/num_fmt.rb +12 -6
  59. data/lib/axlsx/stylesheet/pattern_fill.rb +25 -10
  60. data/lib/axlsx/stylesheet/styles.rb +41 -32
  61. data/lib/axlsx/stylesheet/table_style.rb +9 -4
  62. data/lib/axlsx/stylesheet/table_style_element.rb +10 -7
  63. data/lib/axlsx/stylesheet/table_styles.rb +11 -8
  64. data/lib/axlsx/stylesheet/xf.rb +29 -25
  65. data/lib/axlsx/util/constants.rb +4 -0
  66. data/lib/axlsx/util/simple_typed_list.rb +18 -9
  67. data/lib/axlsx/util/validators.rb +13 -6
  68. data/lib/axlsx/version.rb +1 -1
  69. data/lib/axlsx/workbook/shared_strings_table.rb +19 -21
  70. data/lib/axlsx/workbook/workbook.rb +43 -19
  71. data/lib/axlsx/workbook/worksheet/cell.rb +93 -91
  72. data/lib/axlsx/workbook/worksheet/col.rb +114 -0
  73. data/lib/axlsx/workbook/worksheet/col.rb~ +0 -0
  74. data/lib/axlsx/workbook/worksheet/page_margins.rb +16 -13
  75. data/lib/axlsx/workbook/worksheet/row.rb +13 -13
  76. data/lib/axlsx/workbook/worksheet/table.rb +96 -0
  77. data/lib/axlsx/workbook/worksheet/table.rb~ +97 -0
  78. data/lib/axlsx/workbook/worksheet/worksheet.rb +152 -118
  79. data/lib/schema/dc.xsd +5 -5
  80. data/lib/schema/dcmitype.xsd +5 -3
  81. data/lib/schema/dcterms.xsd +15 -15
  82. data/lib/schema/opc-coreProperties.xsd +6 -2
  83. data/lib/schema/xml.xsd +7 -8
  84. data/test/#benchmark.txt# +7 -0
  85. data/test/#tc_helper.rb# +3 -0
  86. data/test/benchmark.rb +81 -0
  87. data/test/benchmark.rb~ +0 -0
  88. data/test/benchmark.txt +6 -0
  89. data/test/benchmark.txt~ +6 -0
  90. data/test/content_type/tc_content_type.rb +30 -32
  91. data/test/content_type/tc_default.rb +8 -23
  92. data/test/content_type/tc_override.rb +7 -21
  93. data/test/doc_props/tc_app.rb +2 -8
  94. data/test/doc_props/tc_core.rb +6 -7
  95. data/test/drawing/tc_axis.rb +7 -3
  96. data/test/drawing/tc_bar_3D_chart.rb +6 -7
  97. data/test/drawing/tc_bar_series.rb +4 -5
  98. data/test/drawing/tc_cat_axis.rb +2 -3
  99. data/test/drawing/tc_cat_axis_data.rb +2 -3
  100. data/test/drawing/tc_chart.rb +11 -12
  101. data/test/drawing/tc_drawing.rb +7 -8
  102. data/test/drawing/tc_graphic_frame.rb +3 -4
  103. data/test/drawing/tc_hyperlink.rb +2 -3
  104. data/test/drawing/tc_line_3d_chart.rb +5 -6
  105. data/test/drawing/tc_line_series.rb +3 -4
  106. data/test/drawing/tc_marker.rb +3 -4
  107. data/test/drawing/tc_one_cell_anchor.rb +6 -7
  108. data/test/drawing/tc_pic.rb +8 -9
  109. data/test/drawing/tc_picture_locking.rb +2 -3
  110. data/test/drawing/tc_pie_3D_chart.rb +5 -6
  111. data/test/drawing/tc_pie_series.rb +4 -5
  112. data/test/drawing/tc_scaling.rb +3 -4
  113. data/test/drawing/tc_scatter_chart.rb +43 -0
  114. data/test/drawing/tc_scatter_series.rb +20 -0
  115. data/test/drawing/tc_ser_axis.rb +2 -3
  116. data/test/drawing/tc_series.rb +4 -5
  117. data/test/drawing/tc_series_title.rb +4 -5
  118. data/test/drawing/tc_title.rb +4 -5
  119. data/test/drawing/tc_two_cell_anchor.rb +4 -5
  120. data/test/drawing/tc_val_axis.rb +2 -3
  121. data/test/drawing/tc_val_axis_data.rb +2 -3
  122. data/test/drawing/tc_view_3D.rb +6 -7
  123. data/test/example.csv +1000 -0
  124. data/test/example.xlsx +0 -0
  125. data/test/example_streamed.xlsx +0 -0
  126. data/test/profile.rb +33 -0
  127. data/test/rels/tc_relationship.rb +5 -6
  128. data/test/rels/tc_relationships.rb +4 -5
  129. data/test/stylesheet/tc_border.rb +3 -4
  130. data/test/stylesheet/tc_border_pr.rb +3 -4
  131. data/test/stylesheet/tc_cell_alignment.rb +4 -5
  132. data/test/stylesheet/tc_cell_protection.rb +2 -3
  133. data/test/stylesheet/tc_cell_style.rb +2 -3
  134. data/test/stylesheet/tc_color.rb +2 -3
  135. data/test/stylesheet/tc_fill.rb +1 -2
  136. data/test/stylesheet/tc_font.rb +5 -6
  137. data/test/stylesheet/tc_gradient_fill.rb +1 -2
  138. data/test/stylesheet/tc_gradient_stop.rb +1 -2
  139. data/test/stylesheet/tc_num_fmt.rb +1 -2
  140. data/test/stylesheet/tc_pattern_fill.rb +3 -4
  141. data/test/stylesheet/tc_styles.rb +15 -9
  142. data/test/stylesheet/tc_table_style.rb +2 -3
  143. data/test/stylesheet/tc_table_style_element.rb +2 -3
  144. data/test/stylesheet/tc_table_styles.rb +3 -4
  145. data/test/stylesheet/tc_xf.rb +16 -17
  146. data/test/tc_axlsx.rb +39 -0
  147. data/test/tc_axlsx.rb~ +0 -0
  148. data/test/tc_helper.rb +3 -0
  149. data/test/tc_helper.rb~ +3 -0
  150. data/test/tc_package.rb +13 -10
  151. data/test/util/tc_simple_typed_list.rb +8 -9
  152. data/test/util/tc_validators.rb +7 -8
  153. data/test/workbook/tc_shared_strings_table.rb +5 -6
  154. data/test/workbook/tc_workbook.rb +24 -6
  155. data/test/workbook/worksheet/table/tc_table.rb +71 -0
  156. data/test/workbook/worksheet/table/tc_table.rb~ +72 -0
  157. data/test/workbook/worksheet/tc_cell.rb +24 -10
  158. data/test/workbook/worksheet/tc_col.rb +59 -0
  159. data/test/workbook/worksheet/tc_col.rb~ +10 -0
  160. data/test/workbook/worksheet/tc_date_time_converter.rb +1 -2
  161. data/test/workbook/worksheet/tc_page_margins.rb +6 -9
  162. data/test/workbook/worksheet/tc_row.rb +26 -12
  163. data/test/workbook/worksheet/tc_worksheet.rb +134 -68
  164. metadata +150 -90
  165. data/test/drawing/tc_hyperlink.rb~ +0 -71
  166. data/test/workbook/tc_shared_strings_table.rb~ +0 -8
  167. data/test/workbook/worksheet/tc_date_time_converter.rb~ +0 -69
@@ -1,5 +1,4 @@
1
- require 'test/unit'
2
- require 'axlsx.rb'
1
+ require 'tc_helper.rb'
3
2
 
4
3
  class TestCell < Test::Unit::TestCase
5
4
 
@@ -9,6 +8,9 @@ class TestCell < Test::Unit::TestCase
9
8
  p.workbook.styles.add_style :sz=>20
10
9
  @row = @ws.add_row
11
10
  @c = @row.add_cell 1, :type=>:float, :style=>1
11
+ data = (0..26).map { |index| index }
12
+ @ws.add_row data
13
+ @cAA = @ws["AA2"]
12
14
  end
13
15
 
14
16
  def test_initialize
@@ -18,7 +20,6 @@ class TestCell < Test::Unit::TestCase
18
20
  assert_equal(@c.value, 1.0, "type option is applied and value is casted")
19
21
  end
20
22
 
21
-
22
23
  def test_style_date_data
23
24
  c = Axlsx::Cell.new(@c.row, Time.now)
24
25
  assert_equal(Axlsx::STYLE_DATE, c.style)
@@ -40,8 +41,13 @@ class TestCell < Test::Unit::TestCase
40
41
  assert_equal(@c.r, "A1", "calculate cell reference")
41
42
  end
42
43
 
44
+ def test_wide_r
45
+ assert_equal(@cAA.r, "AA2", "calculate cell reference")
46
+ end
47
+
43
48
  def test_r_abs
44
49
  assert_equal(@c.r_abs,"$A$1", "calculate absolute cell reference")
50
+ assert_equal(@cAA.r_abs,"$AA$2", "needs to accept multi-digit columns")
45
51
  end
46
52
 
47
53
  def test_style
@@ -67,7 +73,8 @@ class TestCell < Test::Unit::TestCase
67
73
  end
68
74
 
69
75
  def test_col_ref
70
- assert_equal(@c.send(:col_ref), "A")
76
+ #TODO move to axlsx spec
77
+ assert_equal(Axlsx.col_ref(0), "A")
71
78
  end
72
79
 
73
80
  def test_cell_type_from_value
@@ -91,7 +98,9 @@ class TestCell < Test::Unit::TestCase
91
98
  @c.type = :float
92
99
  assert_equal(@c.send(:cast_value, "1.0"), 1.0)
93
100
  @c.type = :string
94
- assert_equal(@c.send(:cast_value, nil), "")
101
+ assert_equal(@c.send(:cast_value, nil), nil)
102
+ @c.type = :float
103
+ assert_equal(@c.send(:cast_value, nil), nil)
95
104
  @c.type = :boolean
96
105
  assert_equal(@c.send(:cast_value, true), 1)
97
106
  assert_equal(@c.send(:cast_value, false), 0)
@@ -204,13 +213,14 @@ class TestCell < Test::Unit::TestCase
204
213
  end
205
214
 
206
215
  def test_equality
207
- c2 = @row.add_cell 1, :type=>:float, :style=>1
208
- assert(c2.shareable(@c))
216
+ c2 = @row.add_cell 1, :type=>:float, :style=>1
217
+
218
+ assert_equal(c2.shareable_hash,@c.shareable_hash)
209
219
  c3 = @row.add_cell 2, :type=>:float, :style=>1
210
220
  c4 = @row.add_cell 1, :type=>:float, :style=>1, :color => "#FFFFFFFF"
211
- assert_equal(c4.shareable(c2) ,false)
221
+ assert_equal(c4.shareable_hash == c2.shareable_hash,false)
212
222
  c5 = @row.add_cell 1, :type=>:float, :style=>1, :color => "#FFFFFFFF"
213
- assert(c5.shareable(c4))
223
+ assert_equal(c5.shareable_hash, c4.shareable_hash)
214
224
 
215
225
  end
216
226
 
@@ -220,11 +230,15 @@ class TestCell < Test::Unit::TestCase
220
230
  assert_equal(@c.ssti, 1)
221
231
  end
222
232
 
233
+ def test_to_xml_string
234
+ c_xml = Nokogiri::XML(@c.to_xml_string(1,1))
235
+ assert_equal(c_xml.xpath("/c[@s=1]").size, 1)
236
+ end
223
237
  def test_to_xml
224
238
  # TODO This could use some much more stringent testing related to the xml content generated!
225
239
  row = @ws.add_row [Time.now, Date.today, true, 1, 1.0, "text", "=sum(A1:A2)"]
226
240
  schema = Nokogiri::XML::Schema(File.open(Axlsx::SML_XSD))
227
- doc = Nokogiri::XML(@ws.to_xml)
241
+ doc = Nokogiri::XML(@ws.to_xml_string)
228
242
  errors = []
229
243
  schema.validate(doc).each do |error|
230
244
  errors.push error
@@ -0,0 +1,59 @@
1
+ require 'tc_helper.rb'
2
+
3
+ class TestCol < Test::Unit::TestCase
4
+
5
+ def setup
6
+ @col = Axlsx::Col.new 1, 1
7
+ end
8
+
9
+ def test_min_max_required
10
+ assert_raise(ArgumentError, 'min and max must be specified when creating a new column') { Axlsx::Col.new }
11
+ assert_raise(ArgumentError, 'min and max must be specified when creating a new column') { Axlsx::Col.new nil, nil }
12
+ assert_nothing_raised { Axlsx::Col.new 1, 1 }
13
+ end
14
+
15
+ def test_bestFit
16
+ assert_equal(@col.bestFit, nil)
17
+ assert_raise(NoMethodError, 'bestFit is read only') { @col.bestFit = 'bob' }
18
+ @col.width = 1.999
19
+ assert_equal(@col.bestFit, true, 'bestFit should be true when width has been set')
20
+ end
21
+
22
+ def test_collapsed
23
+ assert_equal(@col.collapsed, nil)
24
+ assert_raise(ArgumentError, 'collapsed must be boolean(ish)') { @col.collapsed = 'bob' }
25
+ assert_nothing_raised('collapsed must be boolean(ish)') { @col.collapsed = true }
26
+ end
27
+
28
+ def test_customWidth
29
+ assert_equal(@col.customWidth, nil)
30
+ @col.width = 3
31
+ assert_raise(NoMethodError, 'customWidth is read only') { @col.customWidth = 3 }
32
+ assert_equal(@col.customWidth, true, 'customWidth is true when width is set')
33
+ end
34
+
35
+ def test_hidden
36
+ assert_equal(@col.hidden, nil)
37
+ assert_raise(ArgumentError, 'hidden must be boolean(ish)') { @col.hidden = 'bob' }
38
+ assert_nothing_raised(ArgumentError, 'hidden must be boolean(ish)') { @col.hidden = true }
39
+ end
40
+
41
+ def test_outlineLevel
42
+ assert_equal(@col.outlineLevel, nil)
43
+ assert_raise(ArgumentError, 'outline level cannot be negative') { @col.outlineLevel = -1 }
44
+ assert_raise(ArgumentError, 'outline level cannot be greater than 7') { @col.outlineLevel = 8 }
45
+ assert_nothing_raised('can set outlineLevel') { @col.outlineLevel = 1 }
46
+ end
47
+
48
+ def test_phonetic
49
+ assert_equal(@col.phonetic, nil)
50
+ assert_raise(ArgumentError, 'phonetic must be boolean(ish)') { @col.phonetic = 'bob' }
51
+ assert_nothing_raised(ArgumentError, 'phonetic must be boolean(ish)') { @col.phonetic = true }
52
+ end
53
+
54
+ def test_style
55
+ assert_equal(@col.style, nil)
56
+ #TODO check that the style specified is actually in the styles xfs collection
57
+ end
58
+
59
+ end
@@ -0,0 +1,10 @@
1
+ require 'tc_helper.rb'
2
+
3
+ class TestCol < Test::Unit::TestCase
4
+
5
+ def setup
6
+
7
+ end
8
+
9
+
10
+ end
@@ -1,6 +1,5 @@
1
1
  # -*- coding: utf-8 -*-
2
- require 'test/unit'
3
- require 'axlsx.rb'
2
+ require 'tc_helper.rb'
4
3
 
5
4
  class TestDateTimeConverter < Test::Unit::TestCase
6
5
  def setup
@@ -1,5 +1,4 @@
1
- require 'test/unit'
2
- require 'axlsx.rb'
1
+ require 'tc_helper.rb'
3
2
 
4
3
  class TestPageMargins < Test::Unit::TestCase
5
4
 
@@ -8,7 +7,7 @@ class TestPageMargins < Test::Unit::TestCase
8
7
  ws = p.workbook.add_worksheet :name=>"hmmm"
9
8
  @pm = ws.page_margins
10
9
  end
11
-
10
+
12
11
  def test_initialize
13
12
  assert_equal(Axlsx::PageMargins::DEFAULT_LEFT_RIGHT, @pm.left)
14
13
  assert_equal(Axlsx::PageMargins::DEFAULT_LEFT_RIGHT, @pm.right)
@@ -25,7 +24,7 @@ class TestPageMargins < Test::Unit::TestCase
25
24
  assert_equal(2, optioned.top)
26
25
  assert_equal(1, optioned.bottom)
27
26
  assert_equal(0.1, optioned.header)
28
- assert_equal(0.1, optioned.footer)
27
+ assert_equal(0.1, optioned.footer)
29
28
  end
30
29
 
31
30
 
@@ -48,7 +47,7 @@ class TestPageMargins < Test::Unit::TestCase
48
47
  assert_equal(Axlsx::PageMargins::DEFAULT_HEADER_FOOTER, @pm.header)
49
48
  assert_equal(Axlsx::PageMargins::DEFAULT_HEADER_FOOTER, @pm.footer)
50
49
  end
51
-
50
+
52
51
  def test_to_xml
53
52
  @pm.left = 1.1
54
53
  @pm.right = 1.2
@@ -56,12 +55,10 @@ class TestPageMargins < Test::Unit::TestCase
56
55
  @pm.bottom = 1.4
57
56
  @pm.header = 0.8
58
57
  @pm.footer = 0.9
59
- xml = Nokogiri::XML::Builder.new
60
- @pm.to_xml(xml)
61
- doc = Nokogiri::XML.parse(xml.to_xml)
58
+ doc = Nokogiri::XML.parse(@pm.to_xml_string)
62
59
  assert_equal(1, doc.xpath(".//pageMargins[@left=1.1][@right=1.2][@top=1.3][@bottom=1.4][@header=0.8][@footer=0.9]").size)
63
60
  end
64
-
61
+
65
62
  def test_left
66
63
  assert_raise(ArgumentError) { @pm.left = -1.2 }
67
64
  assert_nothing_raised { @pm.left = 1.5 }
@@ -1,5 +1,4 @@
1
- require 'test/unit'
2
- require 'axlsx.rb'
1
+ require 'tc_helper.rb'
3
2
 
4
3
  class TestRow < Test::Unit::TestCase
5
4
 
@@ -8,7 +7,7 @@ class TestRow < Test::Unit::TestCase
8
7
  @ws = p.workbook.add_worksheet :name=>"hmmm"
9
8
  @row = @ws.add_row
10
9
  end
11
-
10
+
12
11
  def test_initialize
13
12
  assert(@row.cells.empty?, "no cells by default")
14
13
  assert_equal(@row.worksheet, @ws, "has a reference to the worksheet")
@@ -25,7 +24,20 @@ class TestRow < Test::Unit::TestCase
25
24
  def test_style
26
25
  r = @ws.add_row([1,2,3,4,5])
27
26
  r.style=1
28
- r.cells.each { |c| assert_equal(c.style,1) }
27
+ r.cells.each { |c| assert_equal(c.style,1) }
28
+ end
29
+
30
+ def test_nil_cells
31
+ row = @ws.add_row([nil,1,2,nil,4,5,nil])
32
+ r_s_xml = Nokogiri::XML(row.to_xml_string(0, ''))
33
+ assert_equal(r_s_xml.xpath(".//row/c").size, 4)
34
+ end
35
+
36
+ def test_nil_cell_r
37
+ row = @ws.add_row([nil,1,2,nil,4,5,nil])
38
+ r_s_xml = Nokogiri::XML(row.to_xml_string(0, ''))
39
+ assert_equal(r_s_xml.xpath(".//row/c").first['r'], 'B1')
40
+ assert_equal(r_s_xml.xpath(".//row/c").last['r'], 'F1')
29
41
  end
30
42
 
31
43
  def test_index
@@ -54,19 +66,21 @@ class TestRow < Test::Unit::TestCase
54
66
  end
55
67
 
56
68
  def test_to_xml_without_custom_height
57
- xml = Nokogiri::XML::Builder.new
58
- @row.to_xml(xml)
59
- doc = Nokogiri::XML.parse(xml.to_xml)
69
+ doc = Nokogiri::XML.parse(@row.to_xml_string(0))
60
70
  assert_equal(0, doc.xpath(".//row[@ht]").size)
61
71
  assert_equal(0, doc.xpath(".//row[@customHeight]").size)
62
72
  end
63
73
 
64
- def test_to_xml_with_custom_height
74
+ def test_to_xml_string
75
+ r_s_xml = Nokogiri::XML(@row.to_xml_string(0, ''))
76
+ assert_equal(r_s_xml.xpath(".//row[@r=1]").size, 1)
77
+ end
78
+
79
+ def test_to_xml_string_with_custom_height
80
+ @row.add_cell 1
65
81
  @row.height = 20
66
- xml = Nokogiri::XML::Builder.new
67
- @row.to_xml(xml)
68
- doc = Nokogiri::XML.parse(xml.to_xml)
69
- assert_equal(1, doc.xpath(".//row[@ht=20][@customHeight=1]").size)
82
+ r_s_xml = Nokogiri::XML(@row.to_xml_string(0, ''))
83
+ assert_equal(r_s_xml.xpath(".//row[@r=1][@ht=20][@customHeight=1]").size, 1)
70
84
  end
71
85
 
72
86
  end
@@ -1,12 +1,13 @@
1
- require 'test/unit'
2
- require 'axlsx.rb'
1
+ require 'tc_helper.rb'
3
2
 
4
3
  class TestWorksheet < Test::Unit::TestCase
5
- def setup
6
- p = Axlsx::Package.new
7
- @ws = p.workbook.add_worksheet
4
+ def setup
5
+ @p = Axlsx::Package.new
6
+ @wb = @p.workbook
7
+ @ws = @wb.add_worksheet
8
8
  end
9
9
 
10
+
10
11
  def test_pn
11
12
  assert_equal(@ws.pn, "worksheets/sheet1.xml")
12
13
  ws = @ws.workbook.add_worksheet
@@ -14,7 +15,7 @@ class TestWorksheet < Test::Unit::TestCase
14
15
  end
15
16
 
16
17
  def test_page_margins
17
- assert(@ws.page_margins.is_a? Axlsx::PageMargins)
18
+ assert(@ws.page_margins.is_a? Axlsx::PageMargins)
18
19
  end
19
20
 
20
21
  def test_page_margins_yeild
@@ -24,9 +25,15 @@ class TestWorksheet < Test::Unit::TestCase
24
25
  end
25
26
  end
26
27
 
28
+ def test_no_autowidth
29
+ @ws.workbook.use_autowidth = false
30
+ @ws.add_row [1,2,3,4]
31
+ assert_equal(@ws.column_info[0].width, nil)
32
+ end
33
+
27
34
  def test_initialization_options
28
35
  page_margins = {:left => 2, :right => 2, :bottom => 2, :top => 2, :header => 2, :footer => 2}
29
- optioned = @ws.workbook.add_worksheet(:name => 'bob', :page_margins => page_margins)
36
+ optioned = @ws.workbook.add_worksheet(:name => 'bob', :page_margins => page_margins, :selected => true, :show_gridlines => false)
30
37
  assert_equal(optioned.page_margins.left, page_margins[:left])
31
38
  assert_equal(optioned.page_margins.right, page_margins[:right])
32
39
  assert_equal(optioned.page_margins.top, page_margins[:top])
@@ -34,6 +41,21 @@ class TestWorksheet < Test::Unit::TestCase
34
41
  assert_equal(optioned.page_margins.header, page_margins[:header])
35
42
  assert_equal(optioned.page_margins.footer, page_margins[:footer])
36
43
  assert_equal(optioned.name, 'bob')
44
+ assert_equal(optioned.selected, true)
45
+ assert_equal(optioned.show_gridlines, false)
46
+ end
47
+
48
+
49
+ def test_use_gridlines
50
+ assert_raise(ArgumentError) { @ws.show_gridlines = -1.1 }
51
+ assert_nothing_raised { @ws.show_gridlines = false }
52
+ assert_equal(@ws.show_gridlines, false)
53
+ end
54
+
55
+ def test_selected
56
+ assert_raise(ArgumentError) { @ws.selected = -1.1 }
57
+ assert_nothing_raised { @ws.selected = true }
58
+ assert_equal(@ws.selected, true)
37
59
  end
38
60
 
39
61
  def test_rels_pn
@@ -47,7 +69,7 @@ class TestWorksheet < Test::Unit::TestCase
47
69
  ws = @ws.workbook.add_worksheet
48
70
  assert_equal(ws.rId, "rId2")
49
71
  end
50
-
72
+
51
73
  def test_index
52
74
  assert_equal(@ws.index, @ws.workbook.worksheets.index(@ws))
53
75
  end
@@ -62,13 +84,13 @@ class TestWorksheet < Test::Unit::TestCase
62
84
  @ws.add_row [1, 2, 3]
63
85
  @ws.add_row [4, 5, 6]
64
86
  range = @ws["A1:C2"]
65
- first_row = @ws[1]
66
- last_row = @ws[2]
87
+ first_row = @ws[0]
88
+ last_row = @ws[1]
67
89
  assert_equal(@ws.rows[0],first_row)
68
90
  assert_equal(@ws.rows[1],last_row)
69
91
  assert_equal(range.size, 6)
70
92
  assert_equal(range.first, @ws.rows.first.cells.first)
71
- assert_equal(range.last, @ws.rows.last.cells.last)
93
+ assert_equal(range.last, @ws.rows.last.cells.last)
72
94
  end
73
95
 
74
96
  def test_add_row
@@ -94,7 +116,7 @@ class TestWorksheet < Test::Unit::TestCase
94
116
  @ws.add_row [1,2,3,4]
95
117
  @ws.add_row [1,2,3,4]
96
118
  @ws.col_style( (1..2), 1, :row_offset=>1)
97
- @ws.rows[(1..-1)].each do | r |
119
+ @ws.rows[(1..-1)].each do | r |
98
120
  assert_equal(r.cells[1].style, 1)
99
121
  assert_equal(r.cells[2].style, 1)
100
122
  end
@@ -115,7 +137,7 @@ class TestWorksheet < Test::Unit::TestCase
115
137
  @ws.add_row [1,2,3,4]
116
138
  @ws.add_row [1,2,3,4]
117
139
  c = @ws.cols[1]
118
- assert_equal(c.size, 4)
140
+ assert_equal(c.size, 4)
119
141
  assert_equal(c[0].value, 2)
120
142
  end
121
143
 
@@ -125,16 +147,103 @@ class TestWorksheet < Test::Unit::TestCase
125
147
  @ws.add_row [1,2,3,4]
126
148
  @ws.add_row [1,2,3,4]
127
149
  @ws.row_style 1, 1, :col_offset=>1
128
- @ws.rows[1].cells[(1..-1)].each do | c |
150
+ @ws.rows[1].cells[(1..-1)].each do | c |
129
151
  assert_equal(c.style, 1)
130
152
  end
131
153
  assert_equal(@ws.rows[1].cells[0].style, 0)
132
154
  assert_equal(@ws.rows[2].cells[1].style, 0)
133
155
  end
134
-
135
- def test_to_xml
156
+
157
+ def test_to_xml_string_fit_to_page
158
+ @ws.fit_to_page = true
159
+ doc = Nokogiri::XML(@ws.to_xml_string)
160
+ assert_equal(doc.xpath('//xmlns:worksheet/xmlns:sheetPr/xmlns:pageSetUpPr[@fitToPage="true"]').size, 1)
161
+ end
162
+
163
+ def test_to_xml_string_dimensions
164
+ @ws.add_row [1,2,3]
165
+ doc = Nokogiri::XML(@ws.to_xml_string)
166
+ assert_equal(doc.xpath('//xmlns:worksheet/xmlns:dimension[@ref="A1:C1"]').size, 1)
167
+ end
168
+
169
+ def test_to_xml_string_selected
170
+ @ws.selected = true
171
+ doc = Nokogiri::XML(@ws.to_xml_string)
172
+ assert_equal(doc.xpath('//xmlns:worksheet/xmlns:sheetViews/xmlns:sheetView[@tabSelected="true"]').size, 1)
173
+ end
174
+
175
+ def test_to_xml_string_show_gridlines
176
+ @ws.show_gridlines = false
177
+ doc = Nokogiri::XML(@ws.to_xml_string)
178
+ assert_equal(doc.xpath('//xmlns:worksheet/xmlns:sheetViews/xmlns:sheetView[@showGridLines="false"]').size, 1)
179
+ end
180
+
181
+
182
+ def test_to_xml_string_show_selection
183
+ doc = Nokogiri::XML(@ws.to_xml_string)
184
+ assert_equal(doc.xpath('//xmlns:worksheet/xmlns:sheetViews/xmlns:sheetView/xmlns:selection[@activeCell="A1"]').size, 1)
185
+ assert_equal(doc.xpath('//xmlns:worksheet/xmlns:sheetViews/xmlns:sheetView/xmlns:selection[@sqref="A1"]').size, 1)
186
+ end
187
+
188
+ def test_to_xml_string_auto_fit_data
189
+ @ws.add_row [1, "two"]
190
+ doc = Nokogiri::XML(@ws.to_xml_string)
191
+ assert_equal(doc.xpath('//xmlns:worksheet/xmlns:cols/xmlns:col').size, 2)
192
+ end
193
+
194
+ def test_to_xml_string_sheet_data
195
+ @ws.add_row [1, "two"]
196
+ doc = Nokogiri::XML(@ws.to_xml_string)
197
+ assert_equal(doc.xpath('//xmlns:worksheet/xmlns:sheetData/xmlns:row').size, 1)
198
+ end
199
+
200
+ def test_to_xml_string_auto_filter
201
+ @ws.add_row [1, "two"]
202
+ @ws.auto_filter = "A1:B1"
203
+ doc = Nokogiri::XML(@ws.to_xml_string)
204
+ assert_equal(doc.xpath('//xmlns:worksheet/xmlns:autoFilter[@ref="A1:B1"]').size, 1)
205
+ end
206
+
207
+ def test_to_xml_string_merge_cells
208
+ @ws.add_row [1, "two"]
209
+ @ws.merge_cells "A1:D1"
210
+ doc = Nokogiri::XML(@ws.to_xml_string)
211
+ assert_equal(doc.xpath('//xmlns:worksheet/xmlns:mergeCells/xmlns:mergeCell[@ref="A1:D1"]').size, 1)
212
+ end
213
+
214
+ def test_to_xml_string_page_margins
215
+ @ws.page_margins do |pm|
216
+ pm.left = 9
217
+ pm.right = 7
218
+ end
219
+ doc = Nokogiri::XML(@ws.to_xml_string)
220
+ assert_equal(doc.xpath('//xmlns:worksheet/xmlns:pageMargins[@left="9"][@right="7"]').size, 1)
221
+ end
222
+
223
+ def test_to_xml_string_drawing
224
+ c = @ws.add_chart Axlsx::Pie3DChart
225
+ doc = Nokogiri::XML(@ws.to_xml_string)
226
+ assert_equal(doc.xpath('//xmlns:worksheet/xmlns:drawing[@r:id="rId1"]').size, 1)
227
+ end
228
+
229
+ def test_to_xml_string_tables
230
+ @ws.add_row ["one", "two"]
231
+ @ws.add_row [1, 2]
232
+ @ws.add_table "A1:B2"
233
+ doc = Nokogiri::XML(@ws.to_xml_string)
234
+ assert_equal(doc.xpath('//xmlns:worksheet/xmlns:tableParts[@count="1"]').size, 1)
235
+ assert_equal(doc.xpath('//xmlns:worksheet/xmlns:tableParts/xmlns:tablePart[@r:id="rId1"]').size, 1)
236
+ end
237
+
238
+ def test_abs_auto_filter
239
+ @ws.add_row [1, "two", 3]
240
+ @ws.auto_filter = "A1:C1"
241
+ assert_equal(@ws.abs_auto_filter, "'Sheet1'!$A$1:$C$1")
242
+ end
243
+
244
+ def test_to_xml_string
136
245
  schema = Nokogiri::XML::Schema(File.open(Axlsx::SML_XSD))
137
- doc = Nokogiri::XML(@ws.to_xml)
246
+ doc = Nokogiri::XML(@ws.to_xml_string)
138
247
  errors = []
139
248
  schema.validate(doc).each do |error|
140
249
  errors.push error
@@ -146,14 +255,14 @@ class TestWorksheet < Test::Unit::TestCase
146
255
  def test_valid_with_page_margins
147
256
  @ws.page_margins.set :left => 9
148
257
  schema = Nokogiri::XML::Schema(File.open(Axlsx::SML_XSD))
149
- doc = Nokogiri::XML(@ws.to_xml)
258
+ doc = Nokogiri::XML(@ws.to_xml_string)
150
259
  errors = []
151
260
  schema.validate(doc).each do |error|
152
261
  errors.push error
153
262
  puts error.message
154
263
  end
155
264
  assert(errors.empty?, "error free validation")
156
-
265
+
157
266
  end
158
267
 
159
268
  def test_relationships
@@ -164,7 +273,7 @@ class TestWorksheet < Test::Unit::TestCase
164
273
  assert_equal(@ws.relationships.size, 1, "multiple charts still only result in one relationship")
165
274
  end
166
275
 
167
-
276
+
168
277
  def test_name_unique
169
278
  assert_raise(ArgumentError, "worksheet name must be unique") { n = @ws.name; @ws.workbook.add_worksheet(:name=> @ws) }
170
279
  end
@@ -174,52 +283,11 @@ class TestWorksheet < Test::Unit::TestCase
174
283
  assert_nothing_raised { @ws.name = Array.new(31, "A").join('') }
175
284
  end
176
285
 
177
- def test_update_auto_with_data
178
- small = @ws.workbook.styles.add_style(:sz=>2)
179
- big = @ws.workbook.styles.add_style(:sz=>10)
180
-
181
- @ws.add_row ["chasing windmills", "penut"], :style=>small
182
- assert(@ws.auto_fit_data.size == 2, "a data item for each column")
183
-
184
- assert_equal(@ws.auto_fit_data[0], {:sz => 2, :longest => "chasing windmills", :fixed=>nil}, "adding a row updates auto_fit_data if the product of the string length and font is greater for the column")
185
-
186
-
187
- @ws.add_row ["mule"], :style=>big
188
- assert_equal(@ws.auto_fit_data[0], {:sz=>10,:longest=>"mule", :fixed=>nil}, "adding a row updates auto_fit_data if the product of the string length and font is greater for the column")
189
- end
190
-
191
286
  def test_set_fixed_width_column
192
287
  @ws.add_row ["mule", "donkey", "horse"], :widths => [20, :ignore, nil]
193
- assert(@ws.auto_fit_data.size == 3, "a data item for each column")
194
- assert_equal({:sz=>11, :longest=>"mule", :fixed=>20 }, @ws.auto_fit_data[0], "adding a row with fixed width updates :fixed attribute")
195
- assert_equal({:sz=>11, :longest=>"", :fixed=>nil}, @ws.auto_fit_data[1], ":ignore does not set any data")
196
- assert_equal({:sz=>11, :longest=>"horse", :fixed=>nil}, @ws.auto_fit_data[2], "nil, well really anything else just works as normal")
197
- @ws.add_row ["mule", "donkey", "horse"]
198
- assert_equal({:sz=>11, :longest=>"donkey", :fixed=>nil}, @ws.auto_fit_data[1])
199
-
200
- end
201
-
202
- def test_fixed_widths_with_merged_cells
203
- @ws.add_row ["hey, I'm like really long and stuff so I think you will merge me."]
204
- @ws.merge_cells "A1:C1"
205
- @ws.add_row ["but Im Short!"], :widths=> [14.8]
206
- assert_equal(@ws.send(:auto_width, @ws.auto_fit_data[0]), 14.8)
207
- end
208
-
209
- def test_fixed_width_to_auto
210
- @ws.add_row ["hey, I'm like really long and stuff so I think you will merge me."]
211
- @ws.merge_cells "A1:C1"
212
- @ws.add_row ["but Im Short!"], :widths=> [14.8]
213
- assert_equal(@ws.send(:auto_width, @ws.auto_fit_data[0]), 14.8)
214
- @ws.add_row ["no, I like auto!"], :widths=>[:auto]
215
- assert_equal(@ws.auto_fit_data[0][:fixed], nil)
216
- end
217
-
218
- def test_auto_width
219
- assert(@ws.send(:auto_width, {:sz=>11, :longest=>"fisheries"}) > @ws.send(:auto_width, {:sz=>11, :longest=>"fish"}), "longer strings get a longer auto_width at the same font size")
220
-
221
- assert(@ws.send(:auto_width, {:sz=>11, :longest=>"fish"}) < @ws.send(:auto_width, {:sz=>12, :longest=>"fish"}), "larger fonts produce longer with with same string")
222
- assert_equal(@ws.send(:auto_width, {:sz=>11, :longest => "This is a really long string", :fixed=>0.2}), 0.2, "fixed rules!")
288
+ assert(@ws.column_info.size == 3, "a data item for each column")
289
+ assert_equal(@ws.column_info[0].width, 20, "adding a row with fixed width updates :fixed attribute")
290
+ assert_equal(@ws.column_info[1].width, nil, ":ignore does not set any data")
223
291
  end
224
292
 
225
293
  def test_fixed_height
@@ -227,12 +295,10 @@ class TestWorksheet < Test::Unit::TestCase
227
295
  assert_equal(40, @ws.rows[-1].height)
228
296
  end
229
297
 
230
-
231
298
  def test_set_column_width
232
299
  @ws.add_row ["chasing windmills", "penut"]
233
- assert_equal(@ws.auto_fit_data[0][:fixed], nil, 'no fixed by default')
234
300
  @ws.column_widths nil, 0.5
235
- assert_equal(@ws.auto_fit_data[1][:fixed], 0.5, 'eat my width')
301
+ assert_equal(@ws.column_info[1].width, 0.5, 'eat my width')
236
302
  assert_raise(ArgumentError, 'reject invalid columns') { @ws.column_widths 2, 7, nil }
237
303
  assert_raise(ArgumentError, 'only accept unsigned ints') { @ws.column_widths 2, 7, -1 }
238
304
  assert_raise(ArgumentError, 'only accept Integer, Float or Fixnum') { @ws.column_widths 2, 7, "-1" }
@@ -240,7 +306,7 @@ class TestWorksheet < Test::Unit::TestCase
240
306
 
241
307
  def test_merge_cells
242
308
  assert(@ws.merged_cells.is_a?(Array))
243
- assert_equal(@ws.merged_cells.size, 0)
309
+ assert_equal(@ws.merged_cells.size, 0)
244
310
  @ws.add_row [1,2,3]
245
311
  @ws.add_row [4,5,6]
246
312
  @ws.add_row [7,8,9]