axlsx 1.0.18 → 1.1.0

Sign up to get free protection for your applications and to get access to all the features.
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
@@ -0,0 +1,39 @@
1
+ require 'tc_helper.rb'
2
+
3
+ class TestAxlsx < Test::Unit::TestCase
4
+
5
+ def setup_wide
6
+ @wide_test_points = { "A3" => 0,
7
+ "Z3" => 25,
8
+ "B3" => 1,
9
+ "AA3" => 1 * 26 + 0,
10
+ "AAA3" => 1 * 26**2 + 1 * 26 + 0,
11
+ "AAZ3" => 1 * 26**2 + 1 * 26 + 25,
12
+ "ABA3" => 1 * 26**2 + 2 * 26 + 0,
13
+ "BZU3" => 2 * 26**2 + 26 * 26 + 20
14
+ }
15
+ end
16
+
17
+ def test_cell_range
18
+ #To do
19
+ end
20
+
21
+ def test_name_to_indices
22
+ setup_wide
23
+ @wide_test_points.each do |key, value|
24
+ assert_equal(Axlsx.name_to_indices(key), [value,2])
25
+ end
26
+ end
27
+
28
+ def test_col_ref
29
+ setup_wide
30
+ @wide_test_points.each do |key, value|
31
+ assert_equal(Axlsx.col_ref(value), key.gsub(/\d+/, ''))
32
+ end
33
+ end
34
+
35
+ def test_cell_r
36
+ # todo
37
+ end
38
+
39
+ end
File without changes
@@ -0,0 +1,3 @@
1
+ $LOAD_PATH.unshift "#{File.dirname(__FILE__)}/../lib"
2
+ require 'test/unit'
3
+ require "axlsx.rb"
@@ -0,0 +1,3 @@
1
+ $LOAD_PATH.unshift "#{File.dirname(__FILE__)}/../lib"
2
+ require 'test/unit'
3
+ require "tc_helper.rb"
@@ -1,8 +1,7 @@
1
- require 'test/unit'
2
- require 'axlsx.rb'
1
+ require 'tc_helper.rb'
3
2
 
4
3
  class TestPackage < Test::Unit::TestCase
5
- def setup
4
+ def setup
6
5
  @package = Axlsx::Package.new
7
6
  ws = @package.workbook.add_worksheet
8
7
  chart = ws.add_chart Axlsx::Pie3DChart
@@ -39,16 +38,16 @@ class TestPackage < Test::Unit::TestCase
39
38
  fname = 'axlsx_test_serialization.xlsx'
40
39
  assert_nothing_raised do
41
40
  begin
42
- z= @package.serialize(@fname)
41
+ z= @package.serialize(@fname)
43
42
  zf = Zip::ZipFile.open(@fname)
44
43
  @package.send(:parts).each{ |part| zf.get_entry(part[:entry]) }
45
- File.delete(@fname)
44
+ File.delete(@fname)
46
45
  rescue Errno::EACCES
47
46
  puts "WARNING:: test_serialization requires write access."
48
47
  end
49
- end
48
+ end
50
49
  end
51
-
50
+
52
51
  def test_validation
53
52
  assert_equal(@package.validate.size, 0, @package.validate)
54
53
  #how to test for failure? the internal validations on the models are so strict I cant break anthing.....
@@ -58,7 +57,7 @@ class TestPackage < Test::Unit::TestCase
58
57
  p = @package.send(:parts)
59
58
  p.each do |part|
60
59
  #all parts must have :doc, :entry, :schema
61
- assert(part.keys.size == 3 && part.keys.reject{ |k| [:doc, :entry, :schema].include? k}.empty?)
60
+ assert(part.keys.size == 3 && part.keys.reject{ |k| [:doc, :entry, :schema].include? k}.empty?)
62
61
  end
63
62
  #all parts have an entry
64
63
  assert_equal(p.select{ |part| part[:entry] =~ /_rels\/\.rels/ }.size, 1, "rels missing")
@@ -76,7 +75,7 @@ class TestPackage < Test::Unit::TestCase
76
75
 
77
76
  #no mystery parts
78
77
  assert_equal(p.size, 12)
79
-
78
+
80
79
  end
81
80
 
82
81
  def test_shared_strings_requires_part
@@ -84,7 +83,7 @@ class TestPackage < Test::Unit::TestCase
84
83
  p = @package.send(:parts)
85
84
  assert_equal(p.select{ |part| part[:entry] =~/xl\/sharedStrings.xml/}.size, 1, "shared strings table missing")
86
85
  end
87
-
86
+
88
87
  def test_workbook_is_a_workbook
89
88
  assert @package.workbook.is_a? Axlsx::Workbook
90
89
  end
@@ -106,4 +105,8 @@ class TestPackage < Test::Unit::TestCase
106
105
  assert(ct.select { |ct| ct.ContentType == Axlsx::SHARED_STRINGS_CT }.size == 1)
107
106
  end
108
107
 
108
+ def test_name_to_indices
109
+ assert(Axlsx::name_to_indices('A1') == [0,0])
110
+ assert(Axlsx::name_to_indices('A100') == [0,99], 'needs to axcept rows that contain 0')
111
+ end
109
112
  end
@@ -1,11 +1,10 @@
1
- require 'test/unit'
2
- require 'axlsx.rb'
1
+ require 'tc_helper.rb'
3
2
  class TestSimpleTypedList < Test::Unit::TestCase
4
- def setup
3
+ def setup
5
4
  @list = Axlsx::SimpleTypedList.new Fixnum
6
5
  end
7
6
 
8
- def teardown
7
+ def teardown
9
8
  end
10
9
 
11
10
  def test_type_is_a_class_or_array_of_class
@@ -15,18 +14,18 @@ class TestSimpleTypedList < Test::Unit::TestCase
15
14
  assert_raise(ArgumentError) { Axlsx::SimpleTypedList.new "1" }
16
15
  assert_raise(ArgumentError) { Axlsx::SimpleTypedList.new [Integer, "Class"] }
17
16
  end
18
-
17
+
19
18
  def test_indexed_based_assignment
20
19
  #should not allow nil assignment
21
20
  assert_raise(ArgumentError) { @list[0] = nil }
22
21
  assert_raise(ArgumentError) { @list[0] = "1" }
23
22
  assert_nothing_raised { @list[0] = 1 }
24
23
  end
25
-
24
+
26
25
  def test_concat_assignment
27
26
  assert_raise(ArgumentError) { @list << nil }
28
27
  assert_raise(ArgumentError) { @list << "1" }
29
- assert_nothing_raised { @list << 1 }
28
+ assert_nothing_raised { @list << 1 }
30
29
  end
31
30
 
32
31
  def test_concat_should_return_index
@@ -59,8 +58,8 @@ class TestSimpleTypedList < Test::Unit::TestCase
59
58
  assert_nothing_raised { @list.delete_at 3 }
60
59
  @list.unlock
61
60
  #ignore garbage
62
- assert_nothing_raised { @list.delete 0 }
63
- assert_nothing_raised { @list.delete 9 }
61
+ assert_nothing_raised { @list.delete 0 }
62
+ assert_nothing_raised { @list.delete 9 }
64
63
  end
65
64
 
66
65
  end
@@ -1,30 +1,29 @@
1
- require 'test/unit'
2
- require 'axlsx.rb'
1
+ require 'tc_helper.rb'
3
2
  class TestValidators < Test::Unit::TestCase
4
- def setup
3
+ def setup
5
4
  end
6
5
  def teardown
7
6
  end
8
-
7
+
9
8
  def test_validators
10
9
  #unsigned_int
11
10
  assert_nothing_raised { Axlsx.validate_unsigned_int 1 }
12
11
  assert_nothing_raised { Axlsx.validate_unsigned_int +1 }
13
12
  assert_raise(ArgumentError) { Axlsx.validate_unsigned_int -1 }
14
13
  assert_raise(ArgumentError) { Axlsx.validate_unsigned_int '1' }
15
-
14
+
16
15
  #int
17
16
  assert_nothing_raised { Axlsx.validate_int 1 }
18
17
  assert_nothing_raised { Axlsx.validate_int -1 }
19
18
  assert_raise(ArgumentError) { Axlsx.validate_int 'a' }
20
19
  assert_raise(ArgumentError) { Axlsx.validate_int Array }
21
-
20
+
22
21
  #boolean (as 0 or 1, :true, :false, true, false, or "true," "false")
23
22
  [0,1,:true, :false, true, false, "true", "false"].each do |v|
24
23
  assert_nothing_raised { Axlsx.validate_boolean 0 }
25
24
  end
26
25
  assert_raise(ArgumentError) { Axlsx.validate_boolean 2 }
27
-
26
+
28
27
  #string
29
28
  assert_nothing_raised { Axlsx.validate_string "1" }
30
29
  assert_raise(ArgumentError) { Axlsx.validate_string 2 }
@@ -64,7 +63,7 @@ class TestValidators < Test::Unit::TestCase
64
63
  assert_raise(ArgumentError) { Axlsx.validate_content_type nil }
65
64
  assert_raise(ArgumentError) { Axlsx.validate_content_type "http://some.url" }
66
65
  assert_raise(ArgumentError) { Axlsx.validate_content_type false }
67
-
66
+
68
67
  #relationshipType
69
68
  assert_nothing_raised { Axlsx.validate_relationship_type Axlsx::WORKBOOK_R }
70
69
  assert_raise(ArgumentError) { Axlsx.validate_relationship_type nil }
@@ -1,14 +1,13 @@
1
- require 'test/unit'
2
- require 'axlsx.rb'
1
+ require 'tc_helper.rb'
3
2
 
4
3
  class TestSharedStringsTable < Test::Unit::TestCase
5
4
 
6
- def setup
5
+ def setup
7
6
  @p = Axlsx::Package.new :use_shared_strings=>true
8
7
  ws = @p.workbook.add_worksheet
9
8
  ws.add_row ['a', 1, 'b']
10
9
  ws.add_row ['b', 1, 'c']
11
- ws.add_row ['c', 1, 'd']
10
+ ws.add_row ['c', 1, 'd']
12
11
  end
13
12
 
14
13
  def test_workbook_has_shared_strings
@@ -25,9 +24,9 @@ class TestSharedStringsTable < Test::Unit::TestCase
25
24
  assert_equal(sst.unique_count, 4)
26
25
  end
27
26
 
28
- def test_valid_document
27
+ def test_valid_document
29
28
  schema = Nokogiri::XML::Schema(File.open(Axlsx::SML_XSD))
30
- doc = Nokogiri::XML(@p.workbook.shared_strings.to_xml)
29
+ doc = Nokogiri::XML(@p.workbook.shared_strings.to_xml_string)
31
30
  errors = []
32
31
  schema.validate(doc).each do |error|
33
32
  puts error.message
@@ -1,15 +1,21 @@
1
- require 'test/unit'
2
- require 'axlsx.rb'
1
+ require 'tc_helper.rb'
3
2
 
4
3
  class TestWorkbook < Test::Unit::TestCase
5
- def setup
4
+ def setup
6
5
  p = Axlsx::Package.new
7
- @wb = p.workbook
6
+ @wb = p.workbook
8
7
  end
9
8
 
10
9
  def teardown
11
10
  end
12
11
 
12
+ def test_no_autowidth
13
+ assert_equal(@wb.use_autowidth, true)
14
+ assert_raise(ArgumentError) {@wb.use_autowidth = 0.1}
15
+ assert_nothing_raised {@wb.use_autowidth = false}
16
+ assert_equal(@wb.use_autowidth, false)
17
+ end
18
+
13
19
  def test_date1904
14
20
  assert_equal(Axlsx::Workbook.date1904, @wb.date1904)
15
21
  @wb.date1904 = :false
@@ -18,6 +24,8 @@ class TestWorkbook < Test::Unit::TestCase
18
24
  assert_equal(Axlsx::Workbook.date1904, @wb.date1904)
19
25
  end
20
26
 
27
+
28
+
21
29
  def test_shared_strings
22
30
  assert_equal(@wb.use_shared_strings, nil)
23
31
  assert_raise(ArgumentError) {@wb.use_shared_strings = 'bpb'}
@@ -42,7 +50,7 @@ class TestWorkbook < Test::Unit::TestCase
42
50
 
43
51
  def test_to_xml
44
52
  schema = Nokogiri::XML::Schema(File.open(Axlsx::SML_XSD))
45
- doc = Nokogiri::XML(@wb.to_xml)
53
+ doc = Nokogiri::XML(@wb.to_xml_string)
46
54
  errors = []
47
55
  schema.validate(doc).each do |error|
48
56
  errors.push error
@@ -60,9 +68,19 @@ class TestWorkbook < Test::Unit::TestCase
60
68
 
61
69
  def test_to_xml_adds_worksheet_when_worksheets_is_empty
62
70
  assert(@wb.worksheets.empty?)
63
- @wb.to_xml
71
+ @wb.to_xml_string
64
72
  assert(@wb.worksheets.size == 1)
65
73
  end
66
74
 
67
75
 
76
+ def test_to_xml_string_defined_names
77
+ @wb.add_worksheet do |sheet|
78
+ sheet.add_row [1, "two"]
79
+ sheet.auto_filter = "A1:B1"
80
+ end
81
+ doc = Nokogiri::XML(@wb.to_xml_string)
82
+ assert_equal(doc.xpath('//xmlns:workbook/xmlns:definedNames/xmlns:definedName').inner_text, @wb.worksheets[0].abs_auto_filter)
83
+ end
84
+
85
+
68
86
  end
@@ -0,0 +1,71 @@
1
+ require 'tc_helper.rb'
2
+
3
+ class TestTable < Test::Unit::TestCase
4
+ def setup
5
+ p = Axlsx::Package.new
6
+ @ws = p.workbook.add_worksheet
7
+ 40.times do
8
+ @ws << ["aa","aa","aa","aa","aa","aa"]
9
+ end
10
+ end
11
+
12
+ def test_initialization
13
+ assert(@ws.workbook.tables.empty?)
14
+ assert(@ws.tables.empty?)
15
+
16
+ end
17
+
18
+ def test_add_table
19
+ name = "test"
20
+ table = @ws.add_table("A1:D5", :name => name)
21
+ assert(table.is_a?(Axlsx::Table), "must create a table")
22
+ assert_equal(@ws.workbook.tables.last, table, "must be added to workbook table collection")
23
+ assert_equal(@ws.tables.last, table, "must be added to worksheet table collection")
24
+ assert_equal(table.name, name, "options for name are applied")
25
+
26
+ end
27
+
28
+ def test_charts
29
+ assert(@ws.drawing.charts.empty?)
30
+ chart = @ws.add_chart(Axlsx::Pie3DChart, :title=>"bob", :start_at=>[0,0], :end_at=>[1,1])
31
+ assert_equal(@ws.drawing.charts.last, chart, "add chart is returned")
32
+ chart = @ws.add_chart(Axlsx::Pie3DChart, :title=>"nancy", :start_at=>[1,5], :end_at=>[5,10])
33
+ assert_equal(@ws.drawing.charts.last, chart, "add chart is returned")
34
+ end
35
+
36
+ def test_pn
37
+ table = @ws.add_table("A1:D5")
38
+ assert_equal(@ws.tables.first.pn, "tables/table1.xml")
39
+ end
40
+
41
+ def test_rId
42
+ table = @ws.add_table("A1:D5")
43
+ assert_equal(@ws.tables.first.rId, "rId1")
44
+ end
45
+
46
+ def test_index
47
+ table = @ws.add_table("A1:D5")
48
+ assert_equal(@ws.tables.first.index, @ws.workbook.tables.index(@ws.tables.first))
49
+ end
50
+
51
+ def test_relationships
52
+ assert(@ws.relationships.empty?)
53
+ table = @ws.add_table("A1:D5")
54
+ assert_equal(@ws.relationships.size, 1, "adding a table adds a relationship")
55
+ table = @ws.add_table("F1:J5")
56
+ assert_equal(@ws.relationships.size, 2, "adding a table adds a relationship")
57
+ end
58
+
59
+ def test_to_xml_string
60
+ table = @ws.add_table("A1:D5")
61
+ schema = Nokogiri::XML::Schema(File.open(Axlsx::SML_XSD))
62
+ doc = Nokogiri::XML(table.to_xml_string)
63
+ errors = []
64
+ schema.validate(doc).each do |error|
65
+ errors.push error
66
+ puts error.message
67
+ end
68
+ assert(errors.empty?, "error free validation")
69
+ end
70
+
71
+ end
@@ -0,0 +1,72 @@
1
+ require 'test/unit'
2
+ require 'tc_helper.rb'
3
+
4
+ class TestTable < Test::Unit::TestCase
5
+ def setup
6
+ p = Axlsx::Package.new
7
+ @ws = p.workbook.add_worksheet
8
+ 40.times do
9
+ @ws << ["aa","aa","aa","aa","aa","aa"]
10
+ end
11
+ end
12
+
13
+ def test_initialization
14
+ assert(@ws.workbook.tables.empty?)
15
+ assert(@ws.tables.empty?)
16
+
17
+ end
18
+
19
+ def test_add_table
20
+ name = "test"
21
+ table = @ws.add_table("A1:D5", :name => name)
22
+ assert(table.is_a?(Axlsx::Table), "must create a table")
23
+ assert_equal(@ws.workbook.tables.last, table, "must be added to workbook table collection")
24
+ assert_equal(@ws.tables.last, table, "must be added to worksheet table collection")
25
+ assert_equal(table.name, name, "options for name are applied")
26
+
27
+ end
28
+
29
+ def test_charts
30
+ assert(@ws.drawing.charts.empty?)
31
+ chart = @ws.add_chart(Axlsx::Pie3DChart, :title=>"bob", :start_at=>[0,0], :end_at=>[1,1])
32
+ assert_equal(@ws.drawing.charts.last, chart, "add chart is returned")
33
+ chart = @ws.add_chart(Axlsx::Pie3DChart, :title=>"nancy", :start_at=>[1,5], :end_at=>[5,10])
34
+ assert_equal(@ws.drawing.charts.last, chart, "add chart is returned")
35
+ end
36
+
37
+ def test_pn
38
+ table = @ws.add_table("A1:D5")
39
+ assert_equal(@ws.tables.first.pn, "tables/table1.xml")
40
+ end
41
+
42
+ def test_rId
43
+ table = @ws.add_table("A1:D5")
44
+ assert_equal(@ws.tables.first.rId, "rId1")
45
+ end
46
+
47
+ def test_index
48
+ table = @ws.add_table("A1:D5")
49
+ assert_equal(@ws.tables.first.index, @ws.workbook.tables.index(@ws.tables.first))
50
+ end
51
+
52
+ def test_relationships
53
+ assert(@ws.relationships.empty?)
54
+ table = @ws.add_table("A1:D5")
55
+ assert_equal(@ws.relationships.size, 1, "adding a table adds a relationship")
56
+ table = @ws.add_table("F1:J5")
57
+ assert_equal(@ws.relationships.size, 2, "adding a table adds a relationship")
58
+ end
59
+
60
+ def test_to_xml
61
+ table = @ws.add_table("A1:D5")
62
+ schema = Nokogiri::XML::Schema(File.open(Axlsx::SML_XSD))
63
+ doc = Nokogiri::XML(table.to_xml)
64
+ errors = []
65
+ schema.validate(doc).each do |error|
66
+ errors.push error
67
+ puts error.message
68
+ end
69
+ assert(errors.empty?, "error free validation")
70
+ end
71
+
72
+ end