axlsx 1.0.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 (179) hide show
  1. data/Rakefile +13 -0
  2. data/lib/axlsx.rb +38 -0
  3. data/lib/axlsx/content_type/content_type.rb +23 -0
  4. data/lib/axlsx/content_type/default.rb +32 -0
  5. data/lib/axlsx/content_type/override.rb +30 -0
  6. data/lib/axlsx/doc_props/app.rb +148 -0
  7. data/lib/axlsx/doc_props/core.rb +34 -0
  8. data/lib/axlsx/drawing/axis.rb +78 -0
  9. data/lib/axlsx/drawing/bar_3D_chart.rb +138 -0
  10. data/lib/axlsx/drawing/bar_series.rb +91 -0
  11. data/lib/axlsx/drawing/cat_axis.rb +58 -0
  12. data/lib/axlsx/drawing/chart.rb +120 -0
  13. data/lib/axlsx/drawing/drawing.rb +121 -0
  14. data/lib/axlsx/drawing/graphic_frame.rb +55 -0
  15. data/lib/axlsx/drawing/marker.rb +57 -0
  16. data/lib/axlsx/drawing/pie_3D_chart.rb +59 -0
  17. data/lib/axlsx/drawing/pie_series.rb +88 -0
  18. data/lib/axlsx/drawing/scaling.rb +53 -0
  19. data/lib/axlsx/drawing/series.rb +70 -0
  20. data/lib/axlsx/drawing/title.rb +69 -0
  21. data/lib/axlsx/drawing/two_cell_anchor.rb +88 -0
  22. data/lib/axlsx/drawing/val_axis.rb +34 -0
  23. data/lib/axlsx/drawing/view_3D.rb +72 -0
  24. data/lib/axlsx/package.rb +181 -0
  25. data/lib/axlsx/rels/relationship.rb +43 -0
  26. data/lib/axlsx/rels/relationships.rb +25 -0
  27. data/lib/axlsx/stylesheet/border.rb +52 -0
  28. data/lib/axlsx/stylesheet/border_pr.rb +65 -0
  29. data/lib/axlsx/stylesheet/cell_alignment.rb +96 -0
  30. data/lib/axlsx/stylesheet/cell_protection.rb +33 -0
  31. data/lib/axlsx/stylesheet/cell_style.rb +60 -0
  32. data/lib/axlsx/stylesheet/color.rb +57 -0
  33. data/lib/axlsx/stylesheet/fill.rb +31 -0
  34. data/lib/axlsx/stylesheet/font.rb +128 -0
  35. data/lib/axlsx/stylesheet/gradient_fill.rb +70 -0
  36. data/lib/axlsx/stylesheet/gradient_stop.rb +31 -0
  37. data/lib/axlsx/stylesheet/num_fmt.rb +61 -0
  38. data/lib/axlsx/stylesheet/pattern_fill.rb +64 -0
  39. data/lib/axlsx/stylesheet/styles.rb +296 -0
  40. data/lib/axlsx/stylesheet/table_style.rb +44 -0
  41. data/lib/axlsx/stylesheet/table_style_element.rb +66 -0
  42. data/lib/axlsx/stylesheet/table_styles.rb +39 -0
  43. data/lib/axlsx/stylesheet/xf.rb +117 -0
  44. data/lib/axlsx/util/constants.rb +189 -0
  45. data/lib/axlsx/util/simple_typed_list.rb +150 -0
  46. data/lib/axlsx/util/validators.rb +132 -0
  47. data/lib/axlsx/workbook/workbook.rb +130 -0
  48. data/lib/axlsx/workbook/worksheet/cell.rb +184 -0
  49. data/lib/axlsx/workbook/worksheet/row.rb +92 -0
  50. data/lib/axlsx/workbook/worksheet/worksheet.rb +194 -0
  51. data/lib/schema/dc.xsd +118 -0
  52. data/lib/schema/dcmitype.xsd +50 -0
  53. data/lib/schema/dcterms.xsd +331 -0
  54. data/lib/schema/dml-chart.xsd +1499 -0
  55. data/lib/schema/dml-chartDrawing.xsd +146 -0
  56. data/lib/schema/dml-compatibility.xsd +14 -0
  57. data/lib/schema/dml-diagram.xsd +1091 -0
  58. data/lib/schema/dml-lockedCanvas.xsd +11 -0
  59. data/lib/schema/dml-main.xsd +3048 -0
  60. data/lib/schema/dml-picture.xsd +23 -0
  61. data/lib/schema/dml-spreadsheetDrawing.xsd +185 -0
  62. data/lib/schema/dml-wordprocessingDrawing.xsd +185 -0
  63. data/lib/schema/opc-contentTypes.xsd +42 -0
  64. data/lib/schema/opc-coreProperties.xsd +50 -0
  65. data/lib/schema/opc-digSig.xsd +49 -0
  66. data/lib/schema/opc-relationships.xsd +33 -0
  67. data/lib/schema/pml.xsd +1676 -0
  68. data/lib/schema/shared-additionalCharacteristics.xsd +28 -0
  69. data/lib/schema/shared-bibliography.xsd +144 -0
  70. data/lib/schema/shared-commonSimpleTypes.xsd +166 -0
  71. data/lib/schema/shared-customXmlDataProperties.xsd +25 -0
  72. data/lib/schema/shared-customXmlSchemaProperties.xsd +18 -0
  73. data/lib/schema/shared-documentPropertiesCustom.xsd +59 -0
  74. data/lib/schema/shared-documentPropertiesExtended.xsd +56 -0
  75. data/lib/schema/shared-documentPropertiesVariantTypes.xsd +195 -0
  76. data/lib/schema/shared-math.xsd +582 -0
  77. data/lib/schema/shared-relationshipReference.xsd +25 -0
  78. data/lib/schema/sml.xsd +4430 -0
  79. data/lib/schema/vml-main.xsd +569 -0
  80. data/lib/schema/vml-officeDrawing.xsd +509 -0
  81. data/lib/schema/vml-presentationDrawing.xsd +12 -0
  82. data/lib/schema/vml-spreadsheetDrawing.xsd +108 -0
  83. data/lib/schema/vml-wordprocessingDrawing.xsd +96 -0
  84. data/lib/schema/wml.xsd +3644 -0
  85. data/lib/schema/xml.xsd +117 -0
  86. data/test/content_type/tc_content_type.rb +81 -0
  87. data/test/content_type/tc_content_type.rb~ +81 -0
  88. data/test/content_type/tc_default.rb +40 -0
  89. data/test/content_type/tc_default.rb~ +40 -0
  90. data/test/content_type/tc_override.rb +40 -0
  91. data/test/content_type/tc_override.rb~ +40 -0
  92. data/test/doc_props/tc_app.rb +19 -0
  93. data/test/doc_props/tc_app.rb~ +19 -0
  94. data/test/doc_props/tc_core.rb +34 -0
  95. data/test/drawing/tc_axis.rb +39 -0
  96. data/test/drawing/tc_axis.rb~ +0 -0
  97. data/test/drawing/tc_bar_3D_chart.rb +66 -0
  98. data/test/drawing/tc_bar_3D_chart.rb~ +4 -0
  99. data/test/drawing/tc_bar_series.rb +34 -0
  100. data/test/drawing/tc_bar_series.rb~ +31 -0
  101. data/test/drawing/tc_cat_axis.rb +32 -0
  102. data/test/drawing/tc_cat_axis.rb~ +39 -0
  103. data/test/drawing/tc_chart.rb +59 -0
  104. data/test/drawing/tc_chart.rb~ +58 -0
  105. data/test/drawing/tc_drawing.rb +71 -0
  106. data/test/drawing/tc_graphic_frame.rb +26 -0
  107. data/test/drawing/tc_graphic_frame.rb~ +21 -0
  108. data/test/drawing/tc_marker.rb +45 -0
  109. data/test/drawing/tc_marker.rb~ +26 -0
  110. data/test/drawing/tc_pie_3D_chart.rb +33 -0
  111. data/test/drawing/tc_pie_3D_chart.rb~ +58 -0
  112. data/test/drawing/tc_pie_series.rb +35 -0
  113. data/test/drawing/tc_pie_series.rb~ +26 -0
  114. data/test/drawing/tc_scaling.rb +37 -0
  115. data/test/drawing/tc_scaling.rb~ +45 -0
  116. data/test/drawing/tc_series.rb +24 -0
  117. data/test/drawing/tc_series.rb~ +31 -0
  118. data/test/drawing/tc_title.rb +34 -0
  119. data/test/drawing/tc_title.rb~ +37 -0
  120. data/test/drawing/tc_two_cell_anchor.rb +37 -0
  121. data/test/drawing/tc_two_cell_anchor.rb~ +35 -0
  122. data/test/drawing/tc_val_axis.rb +20 -0
  123. data/test/drawing/tc_val_axis.rb~ +32 -0
  124. data/test/drawing/tc_view_3D.rb +46 -0
  125. data/test/drawing/tc_view_3D.rb~ +37 -0
  126. data/test/rels/tc_relationship.rb +16 -0
  127. data/test/rels/tc_relationship.rb~ +39 -0
  128. data/test/rels/tc_relationships.rb +32 -0
  129. data/test/rels/tc_relationships.rb~ +37 -0
  130. data/test/stylesheet/tc_border.rb +38 -0
  131. data/test/stylesheet/tc_border.rb~ +31 -0
  132. data/test/stylesheet/tc_border_pr.rb +33 -0
  133. data/test/stylesheet/tc_border_pr.rb~ +31 -0
  134. data/test/stylesheet/tc_cell_alignment.rb +77 -0
  135. data/test/stylesheet/tc_cell_alignment.rb~ +38 -0
  136. data/test/stylesheet/tc_cell_protection.rb +30 -0
  137. data/test/stylesheet/tc_cell_protection.rb~ +77 -0
  138. data/test/stylesheet/tc_cell_style.rb +58 -0
  139. data/test/stylesheet/tc_cell_style.rb~ +30 -0
  140. data/test/stylesheet/tc_color.rb +38 -0
  141. data/test/stylesheet/tc_color.rb~ +38 -0
  142. data/test/stylesheet/tc_fill.rb +19 -0
  143. data/test/stylesheet/tc_fill.rb~ +19 -0
  144. data/test/stylesheet/tc_font.rb +114 -0
  145. data/test/stylesheet/tc_font.rb~ +19 -0
  146. data/test/stylesheet/tc_gradient_fill.rb +65 -0
  147. data/test/stylesheet/tc_gradient_fill.rb~ +114 -0
  148. data/test/stylesheet/tc_gradient_stop.rb +32 -0
  149. data/test/stylesheet/tc_gradient_stop.rb~ +65 -0
  150. data/test/stylesheet/tc_num_fmt.rb +31 -0
  151. data/test/stylesheet/tc_num_fmt.rb~ +32 -0
  152. data/test/stylesheet/tc_pattern_fill.rb +38 -0
  153. data/test/stylesheet/tc_pattern_fill.rb~ +31 -0
  154. data/test/stylesheet/tc_styles.rb +64 -0
  155. data/test/stylesheet/tc_table_style.rb +37 -0
  156. data/test/stylesheet/tc_table_style.rb~ +38 -0
  157. data/test/stylesheet/tc_table_style_element.rb +37 -0
  158. data/test/stylesheet/tc_table_style_element.rb~ +37 -0
  159. data/test/stylesheet/tc_table_styles.rb +30 -0
  160. data/test/stylesheet/tc_table_styles.rb~ +37 -0
  161. data/test/stylesheet/tc_xf.rb +121 -0
  162. data/test/stylesheet/tc_xf.rb~ +30 -0
  163. data/test/tc_app.rb~ +19 -0
  164. data/test/tc_border_pr.rb~ +21 -0
  165. data/test/tc_package.rb +70 -0
  166. data/test/tc_package.rb~ +64 -0
  167. data/test/tc_pie_3D_chart.rb~ +66 -0
  168. data/test/tc_relationships.rb~ +37 -0
  169. data/test/tc_series.rb~ +31 -0
  170. data/test/tc_styles.rb~ +64 -0
  171. data/test/tc_validators.rb~ +77 -0
  172. data/test/tc_worksheet.rb~ +85 -0
  173. data/test/util/tc_simple_typed_list.rb +66 -0
  174. data/test/util/tc_validators.rb +76 -0
  175. data/test/workbook/tc_workbook.rb +53 -0
  176. data/test/workbook/worksheet/tc_cell.rb +78 -0
  177. data/test/workbook/worksheet/tc_row.rb +30 -0
  178. data/test/workbook/worksheet/tc_worksheet.rb +85 -0
  179. metadata +378 -0
@@ -0,0 +1,30 @@
1
+ require 'test/unit'
2
+ require 'axlsx.rb'
3
+
4
+ class TestXf < Test::Unit::TestCase
5
+
6
+ def setup
7
+ @item = Axlsx::Xf.new
8
+ end
9
+
10
+ def teardown
11
+ end
12
+
13
+ def test_initialiation
14
+ assert_equal(@item.defaultTableStyle, "TableStyleMedium9")
15
+ assert_equal(@item.defaultPivotStyle, "PivotStyleLight16")
16
+ end
17
+
18
+ def test_defaultTableStyle
19
+ assert_raise(ArgumentError) { @item.defaultTableStyle = -1.1 }
20
+ assert_nothing_raised { @item.defaultTableStyle = "anyones guess" }
21
+ assert_equal(@item.defaultTableStyle, "anyones guess")
22
+ end
23
+
24
+ def test_defaultPivotStyle
25
+ assert_raise(ArgumentError) { @item.defaultPivotStyle = -1.1 }
26
+ assert_nothing_raised { @item.defaultPivotStyle = "anyones guess" }
27
+ assert_equal(@item.defaultPivotStyle, "anyones guess")
28
+ end
29
+
30
+ end
@@ -0,0 +1,19 @@
1
+ require 'test/unit'
2
+ require 'axlsx.rb'
3
+
4
+ class TestApp < Test::Unit::TestCase
5
+ def setup
6
+ end
7
+ def teardown
8
+ end
9
+
10
+ def test_valid_document
11
+ schema = Nokogiri::XML::Schema(File.open("schema/shared-documentPropertiesExtended.xsd"))
12
+ doc = Nokogiri::XML(Axlsx::App.new.to_xml)
13
+ errors = []
14
+ schema.validate(doc).each do |error|
15
+ errors << error
16
+ end
17
+ assert_equal(errors.size, 0, "app.xml invalid" + errors.map{ |e| e.message }.to_s)
18
+ end
19
+ end
@@ -0,0 +1,21 @@
1
+ require 'test/unit'
2
+ require 'axlsx.rb'
3
+
4
+ class TestBorderPr < Test::Unit::TestCase
5
+ def setup
6
+ @bpr = Axlsx::BorderPr.new
7
+ end
8
+ def teardown
9
+ end
10
+
11
+ def test_valid_document
12
+ schema = Nokogiri::XML::Schema(File.open(Axlsx::SML_XSD))
13
+ doc = Nokogiri::XML(@styles.to_xml)
14
+ errors = []
15
+ schema.validate(doc).each do |error|
16
+ errors.push error
17
+ puts error.message
18
+ end
19
+ assert(errors.size == 0)
20
+ end
21
+
@@ -0,0 +1,70 @@
1
+ require 'test/unit'
2
+ require 'axlsx.rb'
3
+
4
+ class TestPackage < Test::Unit::TestCase
5
+ def setup
6
+ @package = Axlsx::Package.new
7
+ ws = @package.workbook.add_worksheet
8
+ chart = ws.add_chart Axlsx::Pie3DChart
9
+ chart.add_series :data=>[1,2,3], :labels=>["a", "b", "c"]
10
+ end
11
+
12
+ def test_default_objects_are_created
13
+ assert(@package.instance_values["app"].is_a?(Axlsx::App), 'App object not created')
14
+ assert(@package.instance_values["core"].is_a?(Axlsx::Core), 'Core object not created')
15
+ assert(@package.workbook.is_a?(Axlsx::Workbook), 'Workbook object not created')
16
+ assert(Axlsx::Package.new.workbook.worksheets.size == 0, 'Workbook should not have sheets by default')
17
+ end
18
+
19
+ def test_serialization
20
+ fname = 'test_serialization.xlsx'
21
+ assert_nothing_raised do
22
+ if File.writable? fname
23
+ f = File.open(fname, 'w')
24
+ z= @package.serialize(f)
25
+
26
+ zf = Zip::ZipFile.open(f.path)
27
+ @package.send(:parts).each{ |part| zf.get_entry(part[:entry]) }
28
+ File.delete(f.path)
29
+
30
+ else
31
+ puts "Skipping serialization to disk as write permission is not granted to this use in this directory"
32
+ end
33
+ end
34
+
35
+ end
36
+
37
+ def test_validation
38
+ assert_equal(@package.validate.size, 0, @package.validate)
39
+ #how to test for failure? the internal validations on the models are so strict I cant break anthing.....
40
+ end
41
+
42
+ def test_parts
43
+ p = @package.send(:parts)
44
+ p.each do |part|
45
+ #all parts must have :doc, :entry, :schema
46
+ assert(part.keys.size == 3 && part.keys.reject{ |k| [:doc, :entry, :schema].include? k}.empty?)
47
+ end
48
+ #all parts have an entry
49
+ assert_equal(p.select{ |part| part[:entry] =~ /_rels\/\.rels/ }.size, 1, "rels missing")
50
+ assert_equal(p.select{ |part| part[:entry] =~ /docProps\/core\.xml/ }.size, 1, "core missing")
51
+ assert_equal(p.select{ |part| part[:entry] =~ /docProps\/app\.xml/ }.size, 1, "app missing")
52
+ assert_equal(p.select{ |part| part[:entry] =~ /xl\/_rels\/workbook\.xml\.rels/ }.size, 1, "workbook rels missing")
53
+ assert_equal(p.select{ |part| part[:entry] =~ /xl\/workbook\.xml/ }.size, 1, "workbook missing")
54
+ assert_equal(p.select{ |part| part[:entry] =~ /\[Content_Types\]\.xml/ }.size, 1, "content types missing")
55
+ assert_equal(p.select{ |part| part[:entry] =~ /xl\/styles\.xml/ }.size, 1, "styles missin")
56
+ assert_equal(p.select{ |part| part[:entry] =~ /xl\/drawings\/_rels\/drawing\d\.xml\.rels/ }.size, @package.workbook.drawings.size, "one or more drawing rels missing")
57
+ assert_equal(p.select{ |part| part[:entry] =~ /xl\/drawings\/drawing\d\.xml/ }.size, @package.workbook.drawings.size, "one or more drawings missing")
58
+ assert_equal(p.select{ |part| part[:entry] =~ /xl\/charts\/chart\d\.xml/ }.size, @package.workbook.charts.size, "one or more charts missing")
59
+ assert_equal(p.select{ |part| part[:entry] =~ /xl\/worksheets\/sheet\d\.xml/ }.size, @package.workbook.worksheets.size, "one or more sheet missing")
60
+ assert_equal(p.select{ |part| part[:entry] =~ /xl\/worksheets\/_rels\/sheet\d\.xml\.rels/ }.size, @package.workbook.worksheets.size, "one or more sheet rels missing")
61
+
62
+ #no mystery parts
63
+ assert_equal(p.size, 12)
64
+
65
+ end
66
+
67
+ def test_workbook_is_a_workbook
68
+ assert @package.workbook.is_a? Axlsx::Workbook
69
+ end
70
+ end
@@ -0,0 +1,64 @@
1
+ require 'test/unit'
2
+ require 'axlsx.rb'
3
+
4
+ class TestPackage < Test::Unit::TestCase
5
+ def setup
6
+ @package = Axlsx::Package.new
7
+ ws = @package.workbook.add_worksheet
8
+ chart = ws.add_chart Axlsx::Pie3DChart
9
+ chart.add_series :data=>[1,2,3], :labels=>["a", "b", "c"]
10
+ end
11
+
12
+ def test_default_objects_are_created
13
+ assert(@package.instance_values["app"].is_a?(Axlsx::App), 'App object not created')
14
+ assert(@package.instance_values["core"].is_a?(Axlsx::Core), 'Core object not created')
15
+ assert(@package.workbook.is_a?(Axlsx::Workbook), 'Workbook object not created')
16
+ assert(Axlsx::Package.new.workbook.worksheets.size == 0, 'Workbook should not have sheets by default')
17
+ end
18
+
19
+ def test_serialization
20
+ fname = 'test_serialization.xlsx'
21
+ assert_nothing_raised do
22
+ f = File.open(fname, 'w')
23
+ z= @package.serialize(f)
24
+
25
+ zf = Zip::ZipFile.open(f.path)
26
+ @package.send(:parts).each{ |part| zf.get_entry(part[:entry]) }
27
+ File.delete(f.path)
28
+ end
29
+ end
30
+
31
+ def test_validation
32
+ assert_equal(@package.validate.size, 0, @package.validate)
33
+ #how to test for failure? the internal validations on the models are so strict I cant break anthing.....
34
+ end
35
+
36
+ def test_parts
37
+ p = @package.send(:parts)
38
+ p.each do |part|
39
+ #all parts must have :doc, :entry, :schema
40
+ assert(part.keys.size == 3 && part.keys.reject{ |k| [:doc, :entry, :schema].include? k}.empty?)
41
+ end
42
+ #all parts have an entry
43
+ assert_equal(p.select{ |part| part[:entry] =~ /_rels\/\.rels/ }.size, 1, "rels missing")
44
+ assert_equal(p.select{ |part| part[:entry] =~ /docProps\/core\.xml/ }.size, 1, "core missing")
45
+ assert_equal(p.select{ |part| part[:entry] =~ /docProps\/app\.xml/ }.size, 1, "app missing")
46
+ assert_equal(p.select{ |part| part[:entry] =~ /xl\/_rels\/workbook\.xml\.rels/ }.size, 1, "workbook rels missing")
47
+ assert_equal(p.select{ |part| part[:entry] =~ /xl\/workbook\.xml/ }.size, 1, "workbook missing")
48
+ assert_equal(p.select{ |part| part[:entry] =~ /\[Content_Types\]\.xml/ }.size, 1, "content types missing")
49
+ assert_equal(p.select{ |part| part[:entry] =~ /xl\/styles\.xml/ }.size, 1, "styles missin")
50
+ assert_equal(p.select{ |part| part[:entry] =~ /xl\/drawings\/_rels\/drawing\d\.xml\.rels/ }.size, @package.workbook.drawings.size, "one or more drawing rels missing")
51
+ assert_equal(p.select{ |part| part[:entry] =~ /xl\/drawings\/drawing\d\.xml/ }.size, @package.workbook.drawings.size, "one or more drawings missing")
52
+ assert_equal(p.select{ |part| part[:entry] =~ /xl\/charts\/chart\d\.xml/ }.size, @package.workbook.charts.size, "one or more charts missing")
53
+ assert_equal(p.select{ |part| part[:entry] =~ /xl\/worksheets\/sheet\d\.xml/ }.size, @package.workbook.worksheets.size, "one or more sheet missing")
54
+ assert_equal(p.select{ |part| part[:entry] =~ /xl\/worksheets\/_rels\/sheet\d\.xml\.rels/ }.size, @package.workbook.worksheets.size, "one or more sheet rels missing")
55
+
56
+ #no mystery parts
57
+ assert_equal(p.size, 12)
58
+
59
+ end
60
+
61
+ def test_workbook_is_a_workbook
62
+ assert @package.workbook.is_a? Axlsx::Workbook
63
+ end
64
+ end
@@ -0,0 +1,66 @@
1
+ require 'test/unit'
2
+ require 'axlsx.rb'
3
+
4
+ class TestPie3DChart < Test::Unit::TestCase
5
+
6
+ def setup
7
+ p = Axlsx::Package.new
8
+ ws = p.workbook.add_worksheet
9
+ @row = ws.add_row :values=>["one", 1, Time.now]
10
+ @chart = ws.drawing.add_chart Axlsx::Pie3DChart, :title => "fishery"
11
+ end
12
+
13
+ def teardown
14
+ end
15
+
16
+ def test_initialization
17
+ assert_equal(@chart.workbook.charts.last,@chart, "the chart is in the workbook")
18
+ assert_equal(@chart.title.text, "fishery", "the title option has been applied")
19
+ assert((@chart.series.is_a?(Axlsx::SimpleTypedList) && @chart.series.empty?), "The series is initialized and empty")
20
+ end
21
+
22
+ def test_title
23
+ @chart.title.text = 'wowzer'
24
+ assert_equal(@chart.title.text, "wowzer", "the title text via a string")
25
+ assert_equal(@chart.title.cell, nil, "the title cell is nil as we set the title with text.")
26
+ @chart.title.cell = @row.cells.first
27
+ assert_equal(@chart.title.text, "one", "the title text was set via cell reference")
28
+ assert_equal(@chart.title.cell, @row.cells.first)
29
+ end
30
+
31
+ def test_add_series
32
+ s = @chart.add_series :data=>[0,1,2,3], :labels => ["one", 1, "anything"], :title=>"bob"
33
+ assert_equal(@chart.series.last, s, "series has been added to chart series collection")
34
+ assert_equal(s.title, "bob", "series title has been applied")
35
+ assert_equal(s.data, [0,1,2,3], "data option applied")
36
+ assert_equal(s.labels, ["one",1,"anything"], "labels option applied")
37
+ end
38
+
39
+ def test_create_range
40
+
41
+ end
42
+
43
+ def test_pn
44
+ assert_equal(@chart.pn, "charts/chart1.xml")
45
+ end
46
+
47
+ def test_rId
48
+ assert_equal(@chart.rId, "rId1")
49
+ end
50
+
51
+ def test_index
52
+ assert_equal(@chart.index, @chart.workbook.charts.index(@chart))
53
+ end
54
+
55
+ def test_to_xml
56
+ schema = Nokogiri::XML::Schema(File.open(Axlsx::DRAWING_XSD))
57
+ doc = Nokogiri::XML(@chart.to_xml)
58
+ errors = []
59
+ schema.validate(doc).each do |error|
60
+ errors.push error
61
+ puts error.message
62
+ end
63
+ assert(errors.empty?, "error free validation")
64
+ end
65
+
66
+ end
@@ -0,0 +1,37 @@
1
+ require 'test/unit'
2
+ require 'axlsx.rb'
3
+
4
+ class TestRelationships < Test::Unit::TestCase
5
+ def setup
6
+ @rels = Axlsx::Relationships.new
7
+ end
8
+
9
+ def teardown
10
+ end
11
+
12
+ def test_valid_document
13
+ schema = Nokogiri::XML::Schema(File.open("schema/opc-relationships.xsd"))
14
+ doc = Nokogiri::XML(@rels.to_xml)
15
+ errors = []
16
+ schema.validate(doc).each do |error|
17
+ puts error.message
18
+ errors << error
19
+ end
20
+
21
+ @rels << Axlsx::Relationship.new(Axlsx::WORKSHEET_R, "bar")
22
+ doc = Nokogiri::XML(@rels.to_xml)
23
+ errors = []
24
+ schema.validate(doc).each do |error|
25
+ puts error.message
26
+ errors << error
27
+ end
28
+
29
+ assert(errors.size == 0)
30
+ end
31
+
32
+ def test_require_valid_relationship_type
33
+ assert_raise(ArgumentError) { Axlsx::Relationship.new("Unknown", "bar" ) }
34
+ assert_nothing_raised { Axlsx::Relationship.new(Axlsx::CHART_R, "bar") }
35
+ end
36
+
37
+ end
@@ -0,0 +1,31 @@
1
+ require 'test/unit'
2
+ require 'axlsx.rb'
3
+
4
+ class TestSeries < Test::Unit::TestCase
5
+
6
+ def setup
7
+ p = Axlsx::Package.new
8
+ @ws = p.workbook.add_worksheet :name=>"hmmm"
9
+ chart = @ws.drawing.add_chart Axlsx::Pie3DChart, :title => "fishery"
10
+ @series = chart.add_series :data=>[0,1,2], :labels=>["zero", "one", "two"], :title=>"bob"
11
+ end
12
+
13
+ def test_initialize
14
+ assert_equal(@series.title, "bob", "series title has been applied")
15
+ assert_equal(@series.data, [0,1,2], "data option applied")
16
+ assert_equal(@series.labels, ["zero", "one","two"], "labels option applied")
17
+ end
18
+
19
+ def test_range
20
+ labels = @ws.add_row :values=>["one", "two", "three"]
21
+ data = @ws.add_row :values=>[1,2,3]
22
+ s = @series.chart.add_series :data=>data.cells, :labels=>labels.cells
23
+ assert_equal(s.send(:range, s.data), "#{@ws.name}!$A$2:$C$2", "range is created created from cells")
24
+ assert_equal(s.send(:range, s.labels), "#{@ws.name}!$A$1:$C$1", "range is created from cells")
25
+ assert_equal(@series.send(:range, @series.data), "", "no range if the data is a simple array")
26
+ end
27
+
28
+ def test_index
29
+ assert_equal(@series.index, @series.chart.series.index(@series))
30
+ end
31
+ end
@@ -0,0 +1,64 @@
1
+ require 'test/unit'
2
+ require 'axlsx.rb'
3
+
4
+ class TestStyles < Test::Unit::TestCase
5
+ def setup
6
+ @styles = Axlsx::Styles.new
7
+ end
8
+ def teardown
9
+ end
10
+
11
+ def test_valid_document
12
+ schema = Nokogiri::XML::Schema(File.open(Axlsx::SML_XSD))
13
+ doc = Nokogiri::XML(@styles.to_xml)
14
+ errors = []
15
+ schema.validate(doc).each do |error|
16
+ errors.push error
17
+ puts error.message
18
+ end
19
+ assert(errors.size == 0)
20
+ end
21
+
22
+
23
+ def test_add_style
24
+ fill_count = @styles.fills.size
25
+ font_count = @styles.fonts.size
26
+ xf_count = @styles.cellXfs.size
27
+
28
+ @styles.add_style :bg_color=>"FF000000", :fg_color=>"FFFFFFFF", :sz=>13, :numFmt=>Axlsx::NUM_FMT_PERCENT, :alignment=>{:horizontal=>:left}, :borderId=>Axlsx::BORDER_ID_ALL, :hidden=>true, :locked=>true
29
+ assert_equal(@styles.fills.size, fill_count+1)
30
+ assert_equal(@styles.fonts.size, font_count+1)
31
+ assert_equal(@styles.cellXfs.size, xf_count+1)
32
+ xf = @styles.cellXfs.last
33
+ assert_equal(xf.fillId, (@styles.fills.size-1), "points to the last created fill")
34
+ assert_equal(@styles.fills.last.fill_type.fgColor.rgb, "FF000000", "fill created with color")
35
+
36
+ assert_equal(xf.fontId, (@styles.fonts.size-1), "points to the last created font")
37
+ assert_equal(@styles.fonts.last.sz, 13, "font sz applied")
38
+ assert_equal(@styles.fonts.last.color.rgb, "FFFFFFFF", "font color applied")
39
+
40
+ assert_equal(xf.borderId, Axlsx::BORDER_ID_ALL, "border id is set")
41
+ assert_equal(xf.numFmtId, Axlsx::NUM_FMT_PERCENT, "number format id is set")
42
+
43
+ assert(xf.alignment.is_a?(Axlsx::CellAlignment), "alignment was created")
44
+ assert_equal(xf.alignment.horizontal, :left, "horizontal alignment applied")
45
+ assert_equal(xf.applyProtection, 1, "protection applied")
46
+ assert_equal(xf.protection.hidden, true, "hidden protection set")
47
+ assert_equal(xf.protection.locked, true, "cell locking set")
48
+ assert_raise(ArgumentError, "should reject invalid borderId") { @styles.add_style :borderId => 2 }
49
+
50
+ end
51
+
52
+
53
+ #:numFmts, :fonts, :fills, :borders, :cellStyleXfs, :cellXfs, :dxfs, :tableStyles
54
+ def test_ensure_locking
55
+ assert_equal(@styles.numFmts.locked_at, 2, "numFmts should be locked at 2")
56
+ assert_equal(@styles.fonts.locked_at, 1, "fonts should be locked at 1" )
57
+ assert_equal(@styles.fills.locked_at, 2, "fills should be locked at 2" )
58
+ assert_equal(@styles.borders.locked_at, 2, "borders should be locked at two" )
59
+ assert_equal(@styles.cellStyleXfs.locked_at, 1, "cellStyleXfs should be locked at two" )
60
+ assert_equal(@styles.cellXfs.locked_at, 1, "cellXfs should be locked at 1" )
61
+ assert_equal(@styles.dxfs.locked_at, 0, "dxfs should be locked at 0" )
62
+ assert_equal(@styles.tableStyles.locked_at, 0, "tableStyles should be locked at 0" )
63
+ end
64
+ end
@@ -0,0 +1,77 @@
1
+ require 'rubygems'
2
+ require 'test/unit'
3
+ require 'axlsx.rb'
4
+ class TestValidators < Test::Unit::TestCase
5
+ def setup
6
+ end
7
+ def teardown
8
+ end
9
+
10
+ def test_validators
11
+ #unsigned_int
12
+ assert_nothing_raised { Axlsx.validate_unsigned_int 1 }
13
+ assert_nothing_raised { Axlsx.validate_unsigned_int +1 }
14
+ assert_raise(ArgumentError) { Axlsx.validate_unsigned_int -1 }
15
+ assert_raise(ArgumentError) { Axlsx.validate_unsigned_int '1' }
16
+
17
+ #int
18
+ assert_nothing_raised { Axlsx.validate_int 1 }
19
+ assert_nothing_raised { Axlsx.validate_int -1 }
20
+ assert_raise(ArgumentError) { Axlsx.validate_int 'a' }
21
+ assert_raise(ArgumentError) { Axlsx.validate_int Array }
22
+
23
+ #boolean (as 0 or 1)
24
+ assert_nothing_raised { Axlsx.validate_boolean 0 }
25
+ assert_nothing_raised { Axlsx.validate_boolean 1 }
26
+ assert_raise(ArgumentError) { Axlsx.validate_boolean 2 }
27
+ assert_raise(ArgumentError) { Axlsx.validate_boolean false }
28
+
29
+ #string
30
+ assert_nothing_raised { Axlsx.validate_string "1" }
31
+ assert_raise(ArgumentError) { Axlsx.validate_string 2 }
32
+ assert_raise(ArgumentError) { Axlsx.validate_string false }
33
+
34
+ #float
35
+ assert_nothing_raised { Axlsx.validate_float 1.0 }
36
+ assert_raise(ArgumentError) { Axlsx.validate_float 2 }
37
+ assert_raise(ArgumentError) { Axlsx.validate_float false }
38
+
39
+ #pattern_type
40
+ assert_nothing_raised { Axlsx.validate_pattern_type :none }
41
+ assert_raise(ArgumentError) { Axlsx.validate_pattern_type "none" }
42
+ assert_raise(ArgumentError) { Axlsx.validate_pattern_type "crazy_pattern" }
43
+ assert_raise(ArgumentError) { Axlsx.validate_pattern_type false }
44
+
45
+ #gradient_type
46
+ assert_nothing_raised { Axlsx.validate_gradient_type :path }
47
+ assert_raise(ArgumentError) { Axlsx.validate_gradient_type nil }
48
+ assert_raise(ArgumentError) { Axlsx.validate_gradient_type "fractal" }
49
+ assert_raise(ArgumentError) { Axlsx.validate_gradient_type false }
50
+
51
+ #horizontal alignment
52
+ assert_nothing_raised { Axlsx.validate_horizontal_alignment :general }
53
+ assert_raise(ArgumentError) { Axlsx.validate_horizontal_alignment nil }
54
+ assert_raise(ArgumentError) { Axlsx.validate_horizontal_alignment "wavy" }
55
+ assert_raise(ArgumentError) { Axlsx.validate_horizontal_alignment false }
56
+
57
+ #vertical alignment
58
+ assert_nothing_raised { Axlsx.validate_vertical_alignment :top }
59
+ assert_raise(ArgumentError) { Axlsx.validate_vertical_alignment nil }
60
+ assert_raise(ArgumentError) { Axlsx.validate_vertical_alignment "dynamic" }
61
+ assert_raise(ArgumentError) { Axlsx.validate_vertical_alignment false }
62
+
63
+ #contentType
64
+ assert_nothing_raised { Axlsx.validate_content_type Axlsx::WORKBOOK_CT }
65
+ assert_raise(ArgumentError) { Axlsx.validate_content_type nil }
66
+ assert_raise(ArgumentError) { Axlsx.validate_content_type "http://some.url" }
67
+ assert_raise(ArgumentError) { Axlsx.validate_content_type false }
68
+
69
+ #relationshipType
70
+ assert_nothing_raised { Axlsx.validate_relationship_type Axlsx::WORKBOOK_R }
71
+ assert_raise(ArgumentError) { Axlsx.validate_relationship_type nil }
72
+ assert_raise(ArgumentError) { Axlsx.validate_relationship_type "http://some.url" }
73
+ assert_raise(ArgumentError) { Axlsx.validate_relationship_type false }
74
+
75
+ end
76
+ end
77
+