axlsx 1.1.4 → 1.1.5

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 (81) hide show
  1. data/README.md +10 -3
  2. data/Rakefile +7 -1
  3. data/examples/chart_colors.rb +1 -1
  4. data/examples/chart_colors.xlsx +0 -0
  5. data/examples/doc/_index.html +84 -0
  6. data/examples/doc/class_list.html +47 -0
  7. data/examples/doc/css/common.css +1 -0
  8. data/examples/doc/css/full_list.css +55 -0
  9. data/examples/doc/css/style.css +322 -0
  10. data/examples/doc/file_list.html +46 -0
  11. data/examples/doc/frames.html +13 -0
  12. data/examples/doc/index.html +84 -0
  13. data/examples/doc/js/app.js +205 -0
  14. data/examples/doc/js/full_list.js +173 -0
  15. data/examples/doc/js/jquery.js +16 -0
  16. data/examples/doc/method_list.html +46 -0
  17. data/examples/doc/top-level-namespace.html +95 -0
  18. data/examples/example.rb +12 -5
  19. data/examples/example.xlsx +0 -0
  20. data/examples/example_streamed.xlsx +0 -0
  21. data/examples/extractive.rb +3 -0
  22. data/lib/axlsx.rb +4 -4
  23. data/lib/axlsx/drawing/drawing.rb +7 -2
  24. data/lib/axlsx/drawing/graphic_frame.rb +2 -1
  25. data/lib/axlsx/drawing/num_data_source.rb +3 -0
  26. data/lib/axlsx/drawing/vml_drawing.rb +42 -0
  27. data/lib/axlsx/drawing/vml_drawing.rb~ +6 -0
  28. data/lib/axlsx/drawing/vml_shape.rb +128 -0
  29. data/lib/axlsx/drawing/vml_shape.rb~ +61 -0
  30. data/lib/axlsx/package.rb +24 -0
  31. data/lib/axlsx/rels/relationships.rb +0 -10
  32. data/lib/axlsx/stylesheet/gradient_fill.rb +1 -1
  33. data/lib/axlsx/util/constants.rb +24 -0
  34. data/lib/axlsx/util/validators.rb +32 -4
  35. data/lib/axlsx/version.rb +1 -1
  36. data/lib/axlsx/workbook/workbook.rb +21 -0
  37. data/lib/axlsx/workbook/worksheet/cell.rb +4 -2
  38. data/lib/axlsx/workbook/worksheet/comment.rb +107 -0
  39. data/lib/axlsx/workbook/worksheet/comment.rb~ +91 -0
  40. data/lib/axlsx/workbook/worksheet/comments.rb +77 -0
  41. data/lib/axlsx/workbook/worksheet/comments.rb~ +86 -0
  42. data/lib/axlsx/workbook/worksheet/page_setup.rb +90 -0
  43. data/lib/axlsx/workbook/worksheet/print_options.rb +63 -0
  44. data/lib/axlsx/workbook/worksheet/row.rb +2 -2
  45. data/lib/axlsx/workbook/worksheet/worksheet.rb +72 -9
  46. data/test/doc_props/tc_core.rb +3 -1
  47. data/test/drawing/tc_hyperlink.rb +4 -0
  48. data/test/drawing/tc_line_series.rb +6 -2
  49. data/test/drawing/tc_pie_series.rb +6 -1
  50. data/test/drawing/tc_vml_drawing.rb +25 -0
  51. data/{examples/#extractive.csv# → test/drawing/tc_vml_drawing.rb~} +0 -0
  52. data/test/drawing/tc_vml_shape.rb +100 -0
  53. data/test/rels/tc_relationship.rb +1 -0
  54. data/test/stylesheet/tc_gradient_fill.rb +8 -0
  55. data/test/stylesheet/tc_pattern_fill.rb +7 -1
  56. data/test/tc_helper.rb +1 -0
  57. data/test/tc_package.rb +16 -5
  58. data/test/util/tc_validators.rb +29 -0
  59. data/test/workbook/worksheet/tc_cell.rb +17 -0
  60. data/test/workbook/worksheet/tc_comment.rb +56 -0
  61. data/test/workbook/worksheet/tc_comments.rb +50 -0
  62. data/test/workbook/worksheet/tc_page_setup.rb +103 -0
  63. data/test/workbook/worksheet/tc_print_options.rb +72 -0
  64. data/test/workbook/worksheet/tc_row.rb +19 -13
  65. data/test/workbook/worksheet/tc_worksheet.rb +60 -7
  66. metadata +56 -24
  67. data/examples/#extractive.rb# +0 -45
  68. data/examples/chart_colors.rb~ +0 -0
  69. data/examples/colored_series_data.xlsx +0 -0
  70. data/examples/example.csv +0 -1000
  71. data/examples/extractive.csv +0 -1
  72. data/examples/extractive.csv~ +0 -1
  73. data/examples/extractive.rb~ +0 -3
  74. data/examples/extractive.xlsx +0 -0
  75. data/examples/no-use_autowidth.xlsx +0 -0
  76. data/examples/shared_strings_example.xlsx +0 -0
  77. data/examples/stack.rb +0 -21
  78. data/examples/stack.rb~ +0 -27
  79. data/examples/stack.xlsx +0 -0
  80. data/examples/~$chart_colors.xlsx +0 -0
  81. data/examples/~$extractive.xlsx +0 -0
@@ -4,6 +4,8 @@ class TestCore < Test::Unit::TestCase
4
4
 
5
5
  def setup
6
6
  @core = Axlsx::Core.new
7
+ # could still see some false positives if the second changes between the next two calls
8
+ @time = Time.now.strftime('%Y-%m-%dT%H:%M:%S')
7
9
  @doc = Nokogiri::XML(@core.to_xml_string)
8
10
  end
9
11
 
@@ -18,7 +20,7 @@ class TestCore < Test::Unit::TestCase
18
20
  end
19
21
 
20
22
  def test_populates_created
21
- assert_equal(@doc.xpath('//dcterms:created').text, Time.now.strftime('%Y-%m-%dT%H:%M:%S'), "dcterms:created incorrect")
23
+ assert_equal(@doc.xpath('//dcterms:created').text, @time, "dcterms:created incorrect")
22
24
  end
23
25
 
24
26
  def test_populates_default_name
@@ -66,4 +66,8 @@ class TestHyperlink < Test::Unit::TestCase
66
66
  assert_equal(@hyperlink.history, false )
67
67
  end
68
68
 
69
+ def test_to_xml_string
70
+ doc = Nokogiri::XML(@p.workbook.worksheets.first.drawing.to_xml_string)
71
+ assert(doc.xpath("//a:hlinkClick"))
72
+ end
69
73
  end
@@ -6,7 +6,7 @@ class TestLineSeries < Test::Unit::TestCase
6
6
  p = Axlsx::Package.new
7
7
  @ws = p.workbook.add_worksheet :name=>"hmmm"
8
8
  chart = @ws.drawing.add_chart Axlsx::Line3DChart, :title => "fishery"
9
- @series = chart.add_series :data=>[0,1,2], :labels=>["zero", "one", "two"], :title=>"bob"
9
+ @series = chart.add_series :data=>[0,1,2], :labels=>["zero", "one", "two"], :title=>"bob", :color => "#FF0000"
10
10
  end
11
11
 
12
12
  def test_initialize
@@ -15,6 +15,10 @@ class TestLineSeries < Test::Unit::TestCase
15
15
  assert_equal(@series.data.class, Axlsx::NumDataSource)
16
16
 
17
17
  end
18
-
18
+
19
+ def test_to_xml_string
20
+ doc = Nokogiri::XML(@series.to_xml_string)
21
+ assert(doc.xpath("//srgbClr[@val='#{@series.color}']"))
22
+ end
19
23
  #TODO serialization testing
20
24
  end
@@ -6,7 +6,7 @@ class TestPieSeries < Test::Unit::TestCase
6
6
  p = Axlsx::Package.new
7
7
  @ws = p.workbook.add_worksheet :name=>"hmmm"
8
8
  chart = @ws.drawing.add_chart Axlsx::Pie3DChart, :title => "fishery"
9
- @series = chart.add_series :data=>[0,1,2], :labels=>["zero", "one", "two"], :title=>"bob"
9
+ @series = chart.add_series :data=>[0,1,2], :labels=>["zero", "one", "two"], :title=>"bob", :colors => ["FF0000", "00FF00", "0000FF"]
10
10
  end
11
11
 
12
12
  def test_initialize
@@ -22,6 +22,11 @@ class TestPieSeries < Test::Unit::TestCase
22
22
  assert(@series.explosion == 20)
23
23
  end
24
24
 
25
+ def test_to_xml_string
26
+ doc = Nokogiri::XML(@series.to_xml_string)
27
+ assert(doc.xpath("//srgbClr[@val='#{@series.colors[0]}']"))
28
+
29
+ end
25
30
  #TODO test unique serialization parts
26
31
 
27
32
  end
@@ -0,0 +1,25 @@
1
+ require 'tc_helper.rb'
2
+
3
+ class TestVmlDrawing < Test::Unit::TestCase
4
+
5
+ def setup
6
+ p = Axlsx::Package.new
7
+ wb = p.workbook
8
+ @ws = wb.add_worksheet
9
+ @ws.add_comment :ref => 'A1', :text => 'penut machine', :author => 'crank'
10
+ @ws.add_comment :ref => 'C3', :text => 'rust bucket', :author => 'PO'
11
+ @vml_drawing = @ws.comments.vml_drawing
12
+ end
13
+
14
+ def test_initialize
15
+ assert_raise(ArgumentError) { Axlsx::VmlDrawing.new }
16
+ end
17
+
18
+ def test_to_xml_string
19
+ str = @vml_drawing.to_xml_string()
20
+ doc = Nokogiri::XML(str)
21
+ assert_equal(doc.xpath("//v:shape").size, 2)
22
+ assert(doc.xpath("//o:idmap[@o:data='#{@ws.index+1}']"))
23
+ end
24
+
25
+ end
@@ -0,0 +1,100 @@
1
+ require 'tc_helper.rb'
2
+
3
+ class TestVmlShape < Test::Unit::TestCase
4
+
5
+ def setup
6
+ p = Axlsx::Package.new
7
+ wb = p.workbook
8
+ @ws = wb.add_worksheet
9
+ @ws.add_comment :ref => 'A1', :text => 'penut machine', :author => 'crank'
10
+ @ws.add_comment :ref => 'C3', :text => 'rust bucket', :author => 'PO'
11
+ @comments = @ws.comments
12
+ end
13
+
14
+ def test_initialize
15
+ assert_raise(ArgumentError) { Axlsx::VmlDrawing.new }
16
+ end
17
+
18
+ def test_row
19
+ shape = @comments.first.vml_shape
20
+ assert_equal(shape.row, 0)
21
+ shape = @comments.last.vml_shape
22
+ assert_equal(shape.row, 2)
23
+ end
24
+
25
+ def test_column
26
+ shape = @comments.first.vml_shape
27
+ assert_equal(shape.column, 0)
28
+ shape = @comments.last.vml_shape
29
+ assert_equal(shape.column, 2)
30
+ end
31
+
32
+ def test_left_column
33
+ shape = @comments.first.vml_shape
34
+ shape.left_column = 3
35
+ assert(shape.left_column == 3)
36
+ assert_raise(ArgumentError) { shape.left_column = [] }
37
+ end
38
+
39
+ def test_left_offset
40
+ shape = @comments.first.vml_shape
41
+ shape.left_offset = 3
42
+ assert(shape.left_offset == 3)
43
+ assert_raise(ArgumentError) { shape.left_offset = [] }
44
+ end
45
+
46
+ def test_right_column
47
+ shape = @comments.first.vml_shape
48
+ shape.right_column = 3
49
+ assert(shape.right_column == 3)
50
+ assert_raise(ArgumentError) { shape.right_column = [] }
51
+ end
52
+
53
+ def test_right_offset
54
+ shape = @comments.first.vml_shape
55
+ shape.right_offset = 3
56
+ assert(shape.right_offset == 3)
57
+ assert_raise(ArgumentError) { shape.right_offset = [] }
58
+ end
59
+
60
+ def test_top_offset
61
+ shape = @comments.first.vml_shape
62
+ shape.top_offset = 3
63
+ assert(shape.top_offset == 3)
64
+ assert_raise(ArgumentError) { shape.top_offset = [] }
65
+ end
66
+
67
+ def test_bottom_offset
68
+ shape = @comments.first.vml_shape
69
+ shape.bottom_offset = 3
70
+ assert(shape.bottom_offset == 3)
71
+ assert_raise(ArgumentError) { shape.bottom_offset = [] }
72
+ end
73
+
74
+ def test_bottom_row
75
+ shape = @comments.first.vml_shape
76
+ shape.bottom_row = 3
77
+ assert(shape.bottom_row == 3)
78
+ assert_raise(ArgumentError) { shape.bottom_row = [] }
79
+ end
80
+
81
+ def test_top_row
82
+ shape = @comments.first.vml_shape
83
+ shape.top_row = 3
84
+ assert(shape.top_row == 3)
85
+ assert_raise(ArgumentError) { shape.top_row = [] }
86
+ end
87
+
88
+ def test_to_xml_string
89
+ str = @comments.vml_drawing.to_xml_string()
90
+ doc = Nokogiri::XML(str)
91
+ assert_equal(doc.xpath("//v:shape").size, 2)
92
+ @comments.each do |comment|
93
+ shape = comment.vml_shape
94
+ assert(doc.xpath("//v:shape/x:ClientData/x:Row[text()='#{shape.row}']").size == 1)
95
+ assert(doc.xpath("//v:shape/x:ClientData/x:Column[text()='#{shape.column}']").size == 1)
96
+ assert(doc.xpath("//v:shape/x:ClientData/x:Anchor[text()='#{shape.left_column}, #{shape.left_offset}, #{shape.top_row}, #{shape.top_offset}, #{shape.right_column}, #{shape.right_offset}, #{shape.bottom_row}, #{shape.bottom_offset}']").size == 1)
97
+ end
98
+ end
99
+
100
+ end
@@ -10,6 +10,7 @@ class TestRelationships < Test::Unit::TestCase
10
10
  def test_type
11
11
  assert_raise(ArgumentError) { Axlsx::Relationship.new 'type', 'target' }
12
12
  assert_nothing_raised { Axlsx::Relationship.new Axlsx::WORKSHEET_R, 'target' }
13
+ assert_nothing_raised { Axlsx::Relationship.new Axlsx::COMMENT_R, 'target' }
13
14
  end
14
15
 
15
16
  def test_target_mode
@@ -61,4 +61,12 @@ class TestGradientFill < Test::Unit::TestCase
61
61
  assert(@item.stop.size == 1)
62
62
  assert(@item.stop.last.is_a?(Axlsx::GradientStop))
63
63
  end
64
+
65
+ def test_to_xml_string
66
+ @item.stop << Axlsx::GradientStop.new(Axlsx::Color.new(:rgb => "000000"), 0.5)
67
+ @item.stop << Axlsx::GradientStop.new(Axlsx::Color.new(:rgb => "FFFFFF"), 0.5)
68
+ @item.type = :path
69
+ doc = Nokogiri::XML(@item.to_xml_string)
70
+ assert(doc.xpath("//color[@rgb='FF000000']"))
71
+ end
64
72
  end
@@ -33,5 +33,11 @@ class TestPatternFill < Test::Unit::TestCase
33
33
  assert_nothing_raised { @item.patternType = :lightUp }
34
34
  assert_equal(@item.patternType, :lightUp)
35
35
  end
36
-
36
+
37
+ def test_to_xml_string
38
+ @item = Axlsx::PatternFill.new :bgColor => Axlsx::Color.new(:rgb => "FF0000"), :fgColor => Axlsx::Color.new(:rgb=>"00FF00")
39
+ doc = Nokogiri::XML(@item.to_xml_string)
40
+ assert(doc.xpath('//color[@rgb="FFFF0000"]'))
41
+ assert(doc.xpath('//color[@rgb="FF00FF00"]'))
42
+ end
37
43
  end
@@ -1,3 +1,4 @@
1
1
  $LOAD_PATH.unshift "#{File.dirname(__FILE__)}/../lib"
2
+ require 'cover_me' unless RUBY_VERSION == '1.8.7'
2
3
  require 'test/unit'
3
4
  require "axlsx.rb"
@@ -4,10 +4,23 @@ class TestPackage < Test::Unit::TestCase
4
4
  def setup
5
5
  @package = Axlsx::Package.new
6
6
  ws = @package.workbook.add_worksheet
7
+ ws.add_row ['yes', 'we', 'can']
8
+ ws.add_comment :author => 'bob', :text => 'penny!', :ref => 'A1'
7
9
  chart = ws.add_chart Axlsx::Pie3DChart
8
10
  chart.add_series :data=>[1,2,3], :labels=>["a", "b", "c"]
9
11
  @fname = 'axlsx_test_serialization.xlsx'
12
+ img = File.expand_path('../../examples/image1.jpeg', __FILE__)
13
+ ws.add_image(:image_src => img, :noSelect => true, :noMove => true, :hyperlink=>"http://axlsx.blogspot.com") do |image|
14
+ image.width=720
15
+ image.height=666
16
+ image.hyperlink.tooltip = "Labeled Link"
17
+ image.start_at 2, 2
18
+ end
19
+ end
10
20
 
21
+ def test_use_autowidth
22
+ @package.use_autowidth = false
23
+ assert(@package.workbook.use_autowidth == false)
11
24
  end
12
25
 
13
26
  def test_core_accessor
@@ -55,10 +68,6 @@ class TestPackage < Test::Unit::TestCase
55
68
 
56
69
  def test_parts
57
70
  p = @package.send(:parts)
58
- p.each do |part|
59
- #all parts must have :doc, :entry, :schema
60
- assert(part.keys.size == 3 && part.keys.reject{ |k| [:doc, :entry, :schema].include? k}.empty?)
61
- end
62
71
  #all parts have an entry
63
72
  assert_equal(p.select{ |part| part[:entry] =~ /_rels\/\.rels/ }.size, 1, "rels missing")
64
73
  assert_equal(p.select{ |part| part[:entry] =~ /docProps\/core\.xml/ }.size, 1, "core missing")
@@ -72,9 +81,11 @@ class TestPackage < Test::Unit::TestCase
72
81
  assert_equal(p.select{ |part| part[:entry] =~ /xl\/charts\/chart\d\.xml/ }.size, @package.workbook.charts.size, "one or more charts missing")
73
82
  assert_equal(p.select{ |part| part[:entry] =~ /xl\/worksheets\/sheet\d\.xml/ }.size, @package.workbook.worksheets.size, "one or more sheet missing")
74
83
  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")
84
+ assert_equal(p.select{ |part| part[:entry] =~ /xl\/comments\d\.xml/ }.size, @package.workbook.worksheets.size, "one or more sheet rels missing")
85
+
75
86
 
76
87
  #no mystery parts
77
- assert_equal(p.size, 12)
88
+ assert_equal(p.size, 15)
78
89
 
79
90
  end
80
91
 
@@ -70,6 +70,35 @@ class TestValidators < Test::Unit::TestCase
70
70
  assert_raise(ArgumentError) { Axlsx.validate_relationship_type "http://some.url" }
71
71
  assert_raise(ArgumentError) { Axlsx.validate_relationship_type false }
72
72
 
73
+ #number_with_unit
74
+ assert_nothing_raised { Axlsx.validate_number_with_unit "210mm" }
75
+ assert_nothing_raised { Axlsx.validate_number_with_unit "8.5in" }
76
+ assert_nothing_raised { Axlsx.validate_number_with_unit "29.7cm" }
77
+ assert_nothing_raised { Axlsx.validate_number_with_unit "120pt" }
78
+ assert_nothing_raised { Axlsx.validate_number_with_unit "0pc" }
79
+ assert_nothing_raised { Axlsx.validate_number_with_unit "12.34pi" }
80
+ assert_raise(ArgumentError) { Axlsx.validate_number_with_unit nil }
81
+ assert_raise(ArgumentError) { Axlsx.validate_number_with_unit "210" }
82
+ assert_raise(ArgumentError) { Axlsx.validate_number_with_unit 210 }
83
+ assert_raise(ArgumentError) { Axlsx.validate_number_with_unit "mm" }
84
+ assert_raise(ArgumentError) { Axlsx.validate_number_with_unit "-29cm" }
85
+
86
+ #page_scale
87
+ assert_nothing_raised { Axlsx.validate_page_scale 10 }
88
+ assert_nothing_raised { Axlsx.validate_page_scale 100 }
89
+ assert_nothing_raised { Axlsx.validate_page_scale 400 }
90
+ assert_raise(ArgumentError) { Axlsx.validate_page_scale 9 }
91
+ assert_raise(ArgumentError) { Axlsx.validate_page_scale 10.0 }
92
+ assert_raise(ArgumentError) { Axlsx.validate_page_scale 400.1 }
93
+ assert_raise(ArgumentError) { Axlsx.validate_page_scale "99" }
94
+
95
+ #page_orientation
96
+ assert_nothing_raised { Axlsx.validate_page_orientation :default }
97
+ assert_nothing_raised { Axlsx.validate_page_orientation :landscape }
98
+ assert_nothing_raised { Axlsx.validate_page_orientation :portrait }
99
+ assert_raise(ArgumentError) { Axlsx.validate_page_orientation nil }
100
+ assert_raise(ArgumentError) { Axlsx.validate_page_orientation 1 }
101
+ assert_raise(ArgumentError) { Axlsx.validate_page_orientation "landscape" }
73
102
  end
74
103
  end
75
104
 
@@ -244,6 +244,23 @@ class TestCell < Test::Unit::TestCase
244
244
  c_xml = Nokogiri::XML(@c.to_xml_string(1,1))
245
245
  assert_equal(c_xml.xpath("/c[@s=1]").size, 1)
246
246
  end
247
+
248
+ def test_to_xml_string_nil
249
+ @c.value = nil
250
+ c_xml = Nokogiri::XML(@c.to_xml_string(1,1))
251
+ assert_equal(c_xml.xpath("/c[@s=1]").size, 1)
252
+ end
253
+
254
+ def test_to_xml_string_formula
255
+ p = Axlsx::Package.new
256
+ ws = p.workbook.add_worksheet do |ws|
257
+ ws.add_row ["=IF(2+2=4,4,5)"]
258
+ end
259
+ doc = Nokogiri::XML(ws.to_xml_string)
260
+ assert("//f[text()=['IF(2+2=4,4,5)']")
261
+
262
+ end
263
+
247
264
  def test_to_xml
248
265
  # TODO This could use some much more stringent testing related to the xml content generated!
249
266
  row = @ws.add_row [Time.now, Date.today, true, 1, 1.0, "text", "=sum(A1:A2)"]
@@ -0,0 +1,56 @@
1
+ require 'tc_helper.rb'
2
+
3
+ class TestComment < Test::Unit::TestCase
4
+ def setup
5
+ p = Axlsx::Package.new
6
+ wb = p.workbook
7
+ @ws = wb.add_worksheet
8
+ @c1 = @ws.add_comment :ref => 'A1', :text => 'penut machine', :author => 'crank'
9
+ @c2 = @ws.add_comment :ref => 'C3', :text => 'rust bucket', :author => 'PO'
10
+ end
11
+
12
+ def test_initailize
13
+ assert_raise(ArgumentError) { Axlsx::Comment.new }
14
+ end
15
+
16
+ def test_author
17
+ assert(@c1.author == 'crank')
18
+ assert(@c2.author == 'PO')
19
+ end
20
+
21
+ def test_text
22
+ assert(@c1.text == 'penut machine')
23
+ assert(@c2.text == 'rust bucket')
24
+ end
25
+
26
+ def test_author_index
27
+ assert_equal(@c1.author_index, 1)
28
+ assert_equal(@c2.author_index, 0)
29
+ end
30
+
31
+ def test_ref
32
+ assert(@c1.ref == 'A1')
33
+ assert(@c2.ref == 'C3')
34
+ end
35
+
36
+ def test_vml_shape
37
+ assert(@c1.vml_shape.is_a?(Axlsx::VmlShape))
38
+ assert(@c1.vml_shape.column == Axlsx::name_to_indices(@c1.ref)[0])
39
+ assert(@c1.vml_shape.row == Axlsx::name_to_indices(@c1.ref)[1])
40
+ assert(@c1.vml_shape.row == Axlsx::name_to_indices(@c1.ref)[1])
41
+ assert(@c1.vml_shape.left_column == Axlsx::name_to_indices(@c1.ref)[1]+1)
42
+ assert(@c1.vml_shape.top_row == Axlsx::name_to_indices(@c1.ref)[1])
43
+ assert(@c1.vml_shape.right_column == Axlsx::name_to_indices(@c1.ref)[0]+4)
44
+ assert(@c1.vml_shape.bottom_row == Axlsx::name_to_indices(@c1.ref)[1]+4)
45
+ end
46
+
47
+ def to_xml_string
48
+ doc = Nokogiri::XML(@c1.to_xml_string)
49
+ assert_equal(doc.xpath("//comment[@ref='#{@c1.ref}']").size, 1)
50
+ assert_equal(doc.xpath("//comment[@authorId='#{@c1.author_index.to}']").size, 1)
51
+ assert_equal(doc.xpath("//t[text()='#{@c1.author}']").size, 1)
52
+ assert_equal(doc.xpath("//t[text()='#{@c1.text}']").size, 1)
53
+ end
54
+
55
+ end
56
+
@@ -0,0 +1,50 @@
1
+ require 'tc_helper.rb'
2
+
3
+ class TestComments < Test::Unit::TestCase
4
+ def setup
5
+ p = Axlsx::Package.new
6
+ wb = p.workbook
7
+ @ws = wb.add_worksheet
8
+ @c1 = @ws.add_comment :ref => 'A1', :text => 'penut machine', :author => 'crank'
9
+ @c2 = @ws.add_comment :ref => 'C3', :text => 'rust bucket', :author => 'PO'
10
+ end
11
+
12
+ def test_initialize
13
+ assert_raise(ArgumentError) { Axlsx::Comments.new }
14
+ assert(@ws.comments.vml_drawing.is_a?(Axlsx::VmlDrawing))
15
+ end
16
+
17
+ def test_add_comment
18
+ assert_equal(@ws.comments.size, 2)
19
+ assert_raise(ArgumentError) { @ws.comments.add_comment() }
20
+ assert_raise(ArgumentError) { @ws.comments.add_comment(:text => 'Yes We Can', :ref => 'A1') }
21
+ assert_raise(ArgumentError) { @ws.comments.add_comment(:author => 'bob', :ref => 'A1') }
22
+ assert_raise(ArgumentError) { @ws.comments.add_comment(:author => 'bob', :text => 'Yes We Can')}
23
+ assert_nothing_raised { @ws.comments.add_comment(:author => 'bob', :text => 'Yes We Can', :ref => 'A1') }
24
+ assert_equal(@ws.comments.size, 3)
25
+ end
26
+ def test_authors
27
+ assert_equal(@ws.comments.authors.size, @ws.comments.size)
28
+ @ws.add_comment(:text => 'Yes We Can!', :author => :bob, :ref => 'F1')
29
+ assert_equal(@ws.comments.authors.size, 3)
30
+ @ws.add_comment(:text => 'Yes We Can!', :author => :bob, :ref => 'F1')
31
+ assert_equal(@ws.comments.authors.size, 3, 'only unique authors are returned')
32
+ end
33
+ def test_pn
34
+ assert_equal(@ws.comments.pn, Axlsx::COMMENT_PN % (@ws.index+1).to_s)
35
+ end
36
+
37
+ def test_index
38
+ assert_equal(@ws.index, @ws.comments.index)
39
+ end
40
+ def test_to_xml_string
41
+ doc = Nokogiri::XML(@ws.comments.to_xml_string)
42
+ # puts doc.xpath("comments").to_xml
43
+ # TODO figure out why these xpath expressions dont work!
44
+ # assert(doc.xpath("//comments"))
45
+ # assert_equal(doc.xpath("//xmlns:author").size, @ws.comments.authors.size)
46
+ # assert_equal(doc.xpath("//comment").size, @ws.comments.size)
47
+ end
48
+ end
49
+
50
+