axlsx 1.2.0 → 1.3.3

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 (161) hide show
  1. data/.yardopts +3 -2
  2. data/CHANGELOG.md +34 -1
  3. data/README.md +47 -33
  4. data/Rakefile +1 -1
  5. data/examples/auto_filter.rb +16 -0
  6. data/examples/basic_charts.rb +4 -0
  7. data/examples/colored_links.rb +59 -0
  8. data/examples/doc/_index.html +88 -0
  9. data/examples/doc/class_list.html +53 -0
  10. data/examples/doc/css/common.css +1 -0
  11. data/examples/doc/css/full_list.css +57 -0
  12. data/examples/doc/css/style.css +328 -0
  13. data/examples/doc/file_list.html +52 -0
  14. data/examples/doc/frames.html +28 -0
  15. data/examples/doc/index.html +88 -0
  16. data/examples/doc/js/app.js +214 -0
  17. data/examples/doc/js/full_list.js +173 -0
  18. data/examples/doc/js/jquery.js +4 -0
  19. data/examples/doc/method_list.html +52 -0
  20. data/examples/doc/top-level-namespace.html +102 -0
  21. data/examples/example.rb +447 -257
  22. data/examples/finance.rb +82 -0
  23. data/examples/hyperlinks.rb +23 -0
  24. data/examples/page_setup.rb +11 -0
  25. data/examples/skydrive/axlsx.csv +1 -0
  26. data/examples/skydrive/axlsx.xlsx +0 -0
  27. data/examples/skydrive/real_example.rb +8 -8
  28. data/examples/sprk2012/Screen Shot 2012-09-11 at 10.42.06 PM.png +0 -0
  29. data/examples/sprk2012/Screen Shot 2012-09-11 at 11.07.48 PM.png +0 -0
  30. data/examples/sprk2012/Screen Shot 2012-09-11 at 8.31.50 PM.png +0 -0
  31. data/examples/sprk2012/Screen Shot 2012-09-11 at 9.23.27 PM.png +0 -0
  32. data/examples/sprk2012/Screen Shot 2012-09-11 at 9.32.06 PM.png +0 -0
  33. data/examples/sprk2012/Screen Shot 2012-09-11 at 9.33.35 PM.png +0 -0
  34. data/examples/sprk2012/Screen Shot 2012-09-11 at 9.46.44 PM.png +0 -0
  35. data/examples/sprk2012/Screen Shot 2012-09-12 at 5.07.23 PM.png +0 -0
  36. data/examples/sprk2012/basics.rb +11 -0
  37. data/examples/sprk2012/basics.xlsx +0 -0
  38. data/examples/sprk2012/gravatar.jpeg +0 -0
  39. data/examples/sprk2012/hair_club.jpg +0 -0
  40. data/examples/sprk2012/images.rb +9 -0
  41. data/examples/{example.xlsx → sprk2012/images.xlsx} +0 -0
  42. data/examples/sprk2012/line_chart.rb +56 -0
  43. data/examples/sprk2012/line_chart.xlsx +0 -0
  44. data/examples/sprk2012/sprk2012.key +0 -0
  45. data/examples/sprk2012/styles.rb +20 -0
  46. data/examples/sprk2012/styles.xlsx +0 -0
  47. data/examples/styles.rb +62 -0
  48. data/lib/axlsx/content_type/abstract_content_type.rb +32 -0
  49. data/lib/axlsx/content_type/content_type.rb +1 -1
  50. data/lib/axlsx/content_type/default.rb +6 -37
  51. data/lib/axlsx/content_type/override.rb +6 -38
  52. data/lib/axlsx/doc_props/app.rb +10 -7
  53. data/lib/axlsx/drawing/axis.rb +4 -4
  54. data/lib/axlsx/drawing/chart.rb +2 -3
  55. data/lib/axlsx/drawing/d_lbls.rb +21 -31
  56. data/lib/axlsx/drawing/drawing.rb +6 -0
  57. data/lib/axlsx/drawing/hyperlink.rb +40 -32
  58. data/lib/axlsx/drawing/marker.rb +13 -13
  59. data/lib/axlsx/drawing/num_data.rb +6 -6
  60. data/lib/axlsx/drawing/num_data_source.rb +17 -16
  61. data/lib/axlsx/drawing/one_cell_anchor.rb +20 -22
  62. data/lib/axlsx/drawing/pic.rb +25 -27
  63. data/lib/axlsx/drawing/picture_locking.rb +12 -44
  64. data/lib/axlsx/drawing/scaling.rb +13 -13
  65. data/lib/axlsx/drawing/scatter_chart.rb +3 -3
  66. data/lib/axlsx/drawing/series.rb +3 -6
  67. data/lib/axlsx/drawing/str_data.rb +3 -3
  68. data/lib/axlsx/drawing/str_val.rb +7 -8
  69. data/lib/axlsx/drawing/view_3D.rb +52 -38
  70. data/lib/axlsx/drawing/vml_shape.rb +23 -23
  71. data/lib/axlsx/package.rb +14 -17
  72. data/lib/axlsx/stylesheet/border.rb +29 -20
  73. data/lib/axlsx/stylesheet/border_pr.rb +5 -4
  74. data/lib/axlsx/stylesheet/cell_alignment.rb +55 -29
  75. data/lib/axlsx/stylesheet/cell_protection.rb +7 -4
  76. data/lib/axlsx/stylesheet/cell_style.rb +19 -14
  77. data/lib/axlsx/stylesheet/color.rb +19 -16
  78. data/lib/axlsx/stylesheet/dxf.rb +4 -4
  79. data/lib/axlsx/stylesheet/font.rb +22 -22
  80. data/lib/axlsx/stylesheet/gradient_fill.rb +45 -21
  81. data/lib/axlsx/stylesheet/num_fmt.rb +22 -13
  82. data/lib/axlsx/stylesheet/pattern_fill.rb +12 -21
  83. data/lib/axlsx/stylesheet/styles.rb +11 -2
  84. data/lib/axlsx/stylesheet/table_style.rb +17 -16
  85. data/lib/axlsx/stylesheet/table_style_element.rb +15 -11
  86. data/lib/axlsx/stylesheet/table_styles.rb +14 -11
  87. data/lib/axlsx/stylesheet/xf.rb +28 -26
  88. data/lib/axlsx/util/accessors.rb +49 -0
  89. data/lib/axlsx/util/constants.rb +105 -4
  90. data/lib/axlsx/util/options_parser.rb +15 -0
  91. data/lib/axlsx/util/serialized_attributes.rb +46 -0
  92. data/lib/axlsx/util/simple_typed_list.rb +16 -2
  93. data/lib/axlsx/util/validators.rb +33 -8
  94. data/lib/axlsx/version.rb +2 -2
  95. data/lib/axlsx/workbook/defined_name.rb +13 -58
  96. data/lib/axlsx/workbook/workbook.rb +33 -2
  97. data/lib/axlsx/workbook/worksheet/auto_filter/auto_filter.rb +77 -0
  98. data/lib/axlsx/workbook/worksheet/auto_filter/filter_column.rb +94 -0
  99. data/lib/axlsx/workbook/worksheet/auto_filter/filters.rb +246 -0
  100. data/lib/axlsx/workbook/worksheet/cell.rb +82 -45
  101. data/lib/axlsx/workbook/worksheet/cfvo.rb +15 -15
  102. data/lib/axlsx/workbook/worksheet/cfvos.rb +18 -0
  103. data/lib/axlsx/workbook/worksheet/col.rb +34 -27
  104. data/lib/axlsx/workbook/worksheet/color_scale.rb +7 -13
  105. data/lib/axlsx/workbook/worksheet/comment.rb +14 -11
  106. data/lib/axlsx/workbook/worksheet/conditional_formatting.rb +11 -11
  107. data/lib/axlsx/workbook/worksheet/conditional_formatting_rule.rb +27 -25
  108. data/lib/axlsx/workbook/worksheet/data_bar.rb +44 -34
  109. data/lib/axlsx/workbook/worksheet/data_validation.rb +61 -62
  110. data/lib/axlsx/workbook/worksheet/date_time_converter.rb +1 -1
  111. data/lib/axlsx/workbook/worksheet/dimension.rb +0 -1
  112. data/lib/axlsx/workbook/worksheet/icon_set.rb +20 -20
  113. data/lib/axlsx/workbook/worksheet/page_margins.rb +21 -19
  114. data/lib/axlsx/workbook/worksheet/page_set_up_pr.rb +44 -0
  115. data/lib/axlsx/workbook/worksheet/page_setup.rb +152 -23
  116. data/lib/axlsx/workbook/worksheet/pane.rb +48 -51
  117. data/lib/axlsx/workbook/worksheet/print_options.rb +8 -30
  118. data/lib/axlsx/workbook/worksheet/protected_range.rb +16 -13
  119. data/lib/axlsx/workbook/worksheet/row.rb +48 -81
  120. data/lib/axlsx/workbook/worksheet/selection.rb +30 -38
  121. data/lib/axlsx/workbook/worksheet/sheet_calc_pr.rb +29 -0
  122. data/lib/axlsx/workbook/worksheet/sheet_pr.rb +49 -4
  123. data/lib/axlsx/workbook/worksheet/sheet_protection.rb +51 -155
  124. data/lib/axlsx/workbook/worksheet/sheet_view.rb +68 -234
  125. data/lib/axlsx/workbook/worksheet/table.rb +22 -17
  126. data/lib/axlsx/workbook/worksheet/table_style_info.rb +51 -0
  127. data/lib/axlsx/workbook/worksheet/worksheet.rb +51 -14
  128. data/lib/axlsx/workbook/worksheet/worksheet_drawing.rb +1 -1
  129. data/lib/axlsx/workbook/worksheet/worksheet_hyperlink.rb +79 -0
  130. data/lib/axlsx/workbook/worksheet/worksheet_hyperlinks.rb +38 -0
  131. data/lib/axlsx.rb +19 -5
  132. data/test/content_type/tc_default.rb +0 -11
  133. data/test/content_type/tc_override.rb +0 -13
  134. data/test/drawing/tc_d_lbls.rb +14 -4
  135. data/test/stylesheet/tc_styles.rb +13 -0
  136. data/test/tc_axlsx.rb +20 -2
  137. data/test/tc_package.rb +1 -0
  138. data/test/util/tc_validators.rb +22 -1
  139. data/test/workbook/tc_defined_name.rb +2 -2
  140. data/test/workbook/tc_workbook.rb +15 -0
  141. data/test/workbook/worksheet/auto_filter/tc_auto_filter.rb +38 -0
  142. data/test/workbook/worksheet/auto_filter/tc_filter_column.rb +76 -0
  143. data/test/workbook/worksheet/auto_filter/tc_filters.rb +50 -0
  144. data/test/workbook/worksheet/tc_cell.rb +35 -5
  145. data/test/workbook/worksheet/tc_col.rb +11 -1
  146. data/test/workbook/worksheet/tc_page_set_up_pr.rb +15 -0
  147. data/test/workbook/worksheet/tc_page_setup.rb +6 -1
  148. data/test/workbook/worksheet/tc_pane.rb +5 -45
  149. data/test/workbook/worksheet/tc_row.rb +4 -4
  150. data/test/workbook/worksheet/tc_selection.rb +9 -48
  151. data/test/workbook/worksheet/tc_sheet_calc_pr.rb +18 -0
  152. data/test/workbook/worksheet/tc_sheet_pr.rb +27 -0
  153. data/test/workbook/worksheet/{table/tc_table.rb → tc_table.rb} +6 -1
  154. data/test/workbook/worksheet/tc_table_style_info.rb +53 -0
  155. data/test/workbook/worksheet/tc_worksheet.rb +17 -3
  156. data/test/workbook/worksheet/tc_worksheet_hyperlink.rb +64 -0
  157. metadata +74 -10
  158. data/examples/example_streamed.xlsx +0 -0
  159. data/examples/no-use_autowidth.xlsx +0 -0
  160. data/examples/shared_strings_example.xlsx +0 -0
  161. data/lib/axlsx/workbook/worksheet/auto_filter.rb +0 -34
@@ -7,7 +7,7 @@ class TestCol < Test::Unit::TestCase
7
7
  end
8
8
 
9
9
  def test_initialize
10
- options = { :width => 12, :collapsed => true, :hidden => true, :outlineLevel => 1, :phonetic => true, :style => 1}
10
+ options = { :width => 12, :collapsed => true, :hidden => true, :outline_level => 1, :phonetic => true, :style => 1}
11
11
 
12
12
  col = Axlsx::Col.new 0, 0, options
13
13
  options.each{ |key, value| assert_equal(col.send(key.to_sym), value) }
@@ -58,6 +58,16 @@ class TestCol < Test::Unit::TestCase
58
58
  assert_nothing_raised(ArgumentError, 'phonetic must be boolean(ish)') { @col.phonetic = true }
59
59
  end
60
60
 
61
+ def test_to_xml_string
62
+ @col.width = 100
63
+ doc = Nokogiri::XML(@col.to_xml_string)
64
+ assert_equal(1, doc.xpath("//col [@bestFit='#{@col.best_fit}']").size)
65
+ assert_equal(1, doc.xpath("//col [@max=#{@col.max}]").size)
66
+ assert_equal(1, doc.xpath("//col [@min=#{@col.min}]").size)
67
+ assert_equal(1, doc.xpath("//col [@width=#{@col.width}]").size)
68
+ assert_equal(1, doc.xpath("//col [@customWidth='#{@col.custom_width}']").size)
69
+ end
70
+
61
71
  def test_style
62
72
  assert_equal(@col.style, nil)
63
73
  @col.style = 1
@@ -0,0 +1,15 @@
1
+ require 'tc_helper.rb'
2
+
3
+ class TestPageSetUpPr < Test::Unit::TestCase
4
+ def setup
5
+ @page_setup_pr = Axlsx::PageSetUpPr.new(:fit_to_page => true, :auto_page_breaks => true)
6
+ end
7
+
8
+ def test_fit_to_page
9
+ assert_equal true, @page_setup_pr.fit_to_page
10
+ end
11
+
12
+ def test_auto_page_breaks
13
+ assert_equal true, @page_setup_pr.auto_page_breaks
14
+ end
15
+ end
@@ -44,6 +44,11 @@ class TestPageSetup < Test::Unit::TestCase
44
44
  assert_equal(50, @ps.scale)
45
45
  end
46
46
 
47
+ def test_paper_size
48
+ assert_raise(ArgumentError) { @ps.paper_size = 119 }
49
+ assert_nothing_raised { @ps.paper_size = 10 }
50
+ end
51
+
47
52
  def test_set_some_values
48
53
  @ps.set(:fit_to_width => 2, :orientation => :portrait)
49
54
  assert_equal(2, @ps.fit_to_width)
@@ -58,7 +63,7 @@ class TestPageSetup < Test::Unit::TestCase
58
63
  assert(@ps.fit_to_width == nil && @ps.fit_to_height == nil)
59
64
  assert(@ps.fit_to_page? == false)
60
65
  end
61
-
66
+
62
67
  def test_with_height_fit_to_page?
63
68
  assert(@ps.fit_to_width == nil && @ps.fit_to_height == nil)
64
69
  @ps.set(:fit_to_height => 1)
@@ -7,61 +7,21 @@ class TestPane < Test::Unit::TestCase
7
7
  #inverse defaults for booleans
8
8
  @nil_options = { :active_pane => :bottom_left, :state => :frozen, :top_left_cell => 'A2' }
9
9
  @int_0_options = { :x_split => 2, :y_split => 2 }
10
-
11
- @string_options = { :top_left_cell => 'A2' }
12
- @integer_options = { :x_split => 2, :y_split => 2 }
13
- @symbol_options = { :active_pane => :bottom_left, :state => :frozen }
14
-
15
- @options = @nil_options.merge(@int_0_options)
16
-
10
+ @options = @nil_options.merge(@int_0_options)
17
11
  @pane = Axlsx::Pane.new(@options)
18
12
  end
19
-
20
- def test_initialize
21
- pane = Axlsx::Pane.new
22
-
23
- @nil_options.each do |key, value|
24
- assert_equal(nil, pane.send(key.to_sym), "initialized default #{key} should be nil")
25
- assert_equal(value, @pane.send(key.to_sym), "initialized options #{key} should be #{value}")
26
- end
27
-
28
- @int_0_options.each do |key, value|
29
- assert_equal(0, pane.send(key.to_sym), "initialized default #{key} should be 0")
30
- assert_equal(value, @pane.send(key.to_sym), "initialized options #{key} should be #{value}")
31
- end
32
- end
33
-
34
- def test_string_attribute_validation
35
- @string_options.each do |key, value|
36
- assert_raise(ArgumentError, "#{key} must be string") { @pane.send("#{key}=".to_sym, :symbol) }
37
- assert_nothing_raised { @pane.send("#{key}=".to_sym, "foo") }
38
- end
39
- end
40
-
41
- def test_symbol_attribute_validation
42
- @symbol_options.each do |key, value|
43
- assert_raise(ArgumentError, "#{key} must be symbol") { @pane.send("#{key}=".to_sym, "foo") }
44
- assert_nothing_raised { @pane.send("#{key}=".to_sym, value) }
45
- end
46
- end
47
-
48
- def test_integer_attribute_validation
49
- @integer_options.each do |key, value|
50
- assert_raise(ArgumentError, "#{key} must be integer") { @pane.send("#{key}=".to_sym, "foo") }
51
- assert_nothing_raised { @pane.send("#{key}=".to_sym, value) }
52
- end
53
- end
54
-
13
+
14
+
55
15
  def test_active_pane
56
16
  assert_raise(ArgumentError) { @pane.active_pane = "10" }
57
17
  assert_nothing_raised { @pane.active_pane = :top_left }
58
- assert_equal(@pane.active_pane, :top_left)
18
+ assert_equal(@pane.active_pane, "topLeft")
59
19
  end
60
20
 
61
21
  def test_state
62
22
  assert_raise(ArgumentError) { @pane.state = "foo" }
63
23
  assert_nothing_raised { @pane.state = :frozen_split }
64
- assert_equal(@pane.state, :frozen_split)
24
+ assert_equal(@pane.state, "frozenSplit")
65
25
  end
66
26
 
67
27
  def test_x_split
@@ -12,13 +12,13 @@ class TestRow < Test::Unit::TestCase
12
12
  assert(@row.cells.empty?, "no cells by default")
13
13
  assert_equal(@row.worksheet, @ws, "has a reference to the worksheet")
14
14
  assert_nil(@row.height, "height defaults to nil")
15
- assert(!@row.custom_height?, "no custom height by default")
15
+ assert(!@row.custom_height, "no custom height by default")
16
16
  end
17
17
 
18
18
  def test_initialize_with_fixed_height
19
19
  row = @ws.add_row([1,2,3,4,5], :height=>40)
20
20
  assert_equal(40, row.height)
21
- assert(row.custom_height?)
21
+ assert(row.custom_height)
22
22
  end
23
23
 
24
24
  def test_style
@@ -57,7 +57,7 @@ class TestRow < Test::Unit::TestCase
57
57
 
58
58
  def test_custom_height
59
59
  @row.height = 20
60
- assert(@row.custom_height?)
60
+ assert(@row.custom_height)
61
61
  end
62
62
 
63
63
  def test_height
@@ -111,7 +111,7 @@ class TestRow < Test::Unit::TestCase
111
111
  @row.add_cell 1
112
112
  @row.height = 20
113
113
  r_s_xml = Nokogiri::XML(@row.to_xml_string(0, ''))
114
- assert_equal(r_s_xml.xpath(".//row[@r=1][@ht=20][@customHeight=1]").size, 1)
114
+ assert_equal(r_s_xml.xpath(".//row[@r=1][@ht=20][@customHeight='true']").size, 1)
115
115
  end
116
116
 
117
117
  end
@@ -3,70 +3,34 @@ require 'tc_helper.rb'
3
3
 
4
4
  class TestSelection < Test::Unit::TestCase
5
5
  def setup
6
- @nil_options = { :active_cell => 'A2', :active_cell_id => 1, :pane => :top_left, :sqref => 'A2' }
7
- @options = @nil_options
8
-
9
- @string_options = { :active_cell => 'A2', :sqref => 'A2' }
10
- @integer_options = { :active_cell_id => 1 }
11
- @symbol_options = { :pane => :top_left }
12
-
6
+ @options = { :active_cell => 'A2', :active_cell_id => 1, :pane => :top_left, :sqref => 'A2' }
13
7
  @selection = Axlsx::Selection.new(@options)
14
8
  end
15
-
16
- def test_initialize
17
- selection = Axlsx::Selection.new
18
-
19
- @nil_options.each do |key, value|
20
- assert_equal(nil, selection.send(key.to_sym), "initialized default #{key} should be nil")
21
- assert_equal(value, @selection.send(key.to_sym), "initialized options #{key} should be #{value}")
22
- end
23
- end
24
-
25
- def test_string_attribute_validation
26
- @string_options.each do |key, value|
27
- assert_raise(ArgumentError, "#{key} must be string") { @selection.send("#{key}=".to_sym, :symbol) }
28
- assert_nothing_raised { @selection.send("#{key}=".to_sym, "foo") }
29
- end
30
- end
31
-
32
- def test_symbol_attribute_validation
33
- @symbol_options.each do |key, value|
34
- assert_raise(ArgumentError, "#{key} must be symbol") { @selection.send("#{key}=".to_sym, "foo") }
35
- assert_nothing_raised { @selection.send("#{key}=".to_sym, value) }
36
- end
37
- end
38
-
39
- def test_integer_attribute_validation
40
- @integer_options.each do |key, value|
41
- assert_raise(ArgumentError, "#{key} must be integer") { @selection.send("#{key}=".to_sym, "foo") }
42
- assert_nothing_raised { @selection.send("#{key}=".to_sym, value) }
43
- end
44
- end
45
-
9
+
46
10
  def test_active_cell
47
11
  assert_raise(ArgumentError) { @selection.active_cell = :active_cell }
48
12
  assert_nothing_raised { @selection.active_cell = "F5" }
49
13
  assert_equal(@selection.active_cell, "F5")
50
14
  end
51
-
15
+
52
16
  def test_active_cell_id
53
17
  assert_raise(ArgumentError) { @selection.active_cell_id = "foo" }
54
18
  assert_nothing_raised { @selection.active_cell_id = 11 }
55
19
  assert_equal(@selection.active_cell_id, 11)
56
20
  end
57
-
21
+
58
22
  def test_pane
59
23
  assert_raise(ArgumentError) { @selection.pane = "foo´" }
60
24
  assert_nothing_raised { @selection.pane = :bottom_right }
61
- assert_equal(@selection.pane, :bottom_right)
25
+ assert_equal(@selection.pane, "bottomRight")
62
26
  end
63
-
27
+
64
28
  def test_sqref
65
29
  assert_raise(ArgumentError) { @selection.sqref = :sqref }
66
30
  assert_nothing_raised { @selection.sqref = "G32" }
67
31
  assert_equal(@selection.sqref, "G32")
68
32
  end
69
-
33
+
70
34
  def test_to_xml
71
35
  p = Axlsx::Package.new
72
36
  @ws = p.workbook.add_worksheet :name => "sheetview"
@@ -76,18 +40,15 @@ class TestSelection < Test::Unit::TestCase
76
40
  vs.add_selection(:bottom_left, { :active_cell => 'E55', :sqref => 'E55' })
77
41
  vs.add_selection(:bottom_right, { :active_cell => 'I57', :sqref => 'I57' })
78
42
  end
79
-
43
+
80
44
  doc = Nokogiri::XML.parse(@ws.to_xml_string)
81
-
45
+
82
46
  assert_equal(1, doc.xpath("//xmlns:worksheet/xmlns:sheetViews/xmlns:sheetView/xmlns:selection[@sqref='B2'][@pane='topLeft'][@activeCell='B2']").size)
83
47
  assert doc.xpath("//xmlns:worksheet/xmlns:sheetViews/xmlns:sheetView/xmlns:selection[@sqref='B2'][@pane='topLeft'][@activeCell='B2']")
84
-
85
48
  assert_equal(1, doc.xpath("//xmlns:worksheet/xmlns:sheetViews/xmlns:sheetView/xmlns:selection[@sqref='I10'][@pane='topRight'][@activeCell='I10']").size)
86
49
  assert doc.xpath("//xmlns:worksheet/xmlns:sheetViews/xmlns:sheetView/xmlns:selection[@sqref='I10'][@pane='topRight'][@activeCell='I10']")
87
-
88
50
  assert_equal(1, doc.xpath("//xmlns:worksheet/xmlns:sheetViews/xmlns:sheetView/xmlns:selection[@sqref='E55'][@pane='bottomLeft'][@activeCell='E55']").size)
89
51
  assert doc.xpath("//xmlns:worksheet/xmlns:sheetViews/xmlns:sheetView/xmlns:selection[@sqref='E55'][@pane='bottomLeft'][@activeCell='E55']")
90
-
91
52
  assert_equal(1, doc.xpath("//xmlns:worksheet/xmlns:sheetViews/xmlns:sheetView/xmlns:selection[@sqref='I57'][@pane='bottomRight'][@activeCell='I57']").size)
92
53
  assert doc.xpath("//xmlns:worksheet/xmlns:sheetViews/xmlns:sheetView/xmlns:selection[@sqref='I57'][@pane='bottomRight'][@activeCell='I57']")
93
54
  end
@@ -0,0 +1,18 @@
1
+ require 'tc_helper'
2
+
3
+ class TestSheetCalcPr < Test::Unit::TestCase
4
+
5
+ def setup
6
+ @sheet_calc_pr = Axlsx::SheetCalcPr.new(:full_calc_on_load => false)
7
+ end
8
+
9
+ def test_full_calc_on_load
10
+ assert_equal false, @sheet_calc_pr.full_calc_on_load
11
+ assert Axlsx::SheetCalcPr.new.full_calc_on_load
12
+ end
13
+
14
+ def test_to_xml_string
15
+ doc = Nokogiri::XML(@sheet_calc_pr.to_xml_string)
16
+ assert_equal 1, doc.xpath('//sheetCalcPr[@fullCalcOnLoad="false"]').size
17
+ end
18
+ end
@@ -0,0 +1,27 @@
1
+ require 'tc_helper.rb'
2
+
3
+
4
+ class TestSheetPr < Test::Unit::TestCase
5
+
6
+ def setup
7
+ worksheet = Axlsx::Package.new.workbook.add_worksheet
8
+ @options = {
9
+ :sync_horizontal => false,
10
+ :sync_vertical => false,
11
+ :transtion_evaluation => true,
12
+ :transition_entry => true,
13
+ :published => false,
14
+ :filter_mode => true,
15
+ :enable_format_conditions_calculation => false,
16
+ :code_name => '007',
17
+ :sync_ref => 'foo'
18
+ }
19
+ @sheet_pr = Axlsx::SheetPr.new(worksheet, @options)
20
+ end
21
+
22
+ def test_initialization
23
+ @options.each do |key, value|
24
+ assert_equal value, @sheet_pr.send(key)
25
+ end
26
+ end
27
+ end
@@ -15,6 +15,12 @@ class TestTable < Test::Unit::TestCase
15
15
 
16
16
  end
17
17
 
18
+ def test_table_style_info
19
+ table = @ws.add_table('A1:D5', :name => 'foo', :style_info => { :show_row_stripes => true, :name => "TableStyleMedium25" })
20
+ assert_equal('TableStyleMedium25', table.table_style_info.name)
21
+ assert_equal(true, table.table_style_info.show_row_stripes)
22
+ end
23
+
18
24
  def test_add_table
19
25
  name = "test"
20
26
  table = @ws.add_table("A1:D5", :name => name)
@@ -22,7 +28,6 @@ class TestTable < Test::Unit::TestCase
22
28
  assert_equal(@ws.workbook.tables.last, table, "must be added to workbook table collection")
23
29
  assert_equal(@ws.tables.last, table, "must be added to worksheet table collection")
24
30
  assert_equal(table.name, name, "options for name are applied")
25
-
26
31
  end
27
32
 
28
33
  def test_pn
@@ -0,0 +1,53 @@
1
+ require 'tc_helper.rb'
2
+
3
+ class TestTableStyleInfo < Test::Unit::TestCase
4
+ def setup
5
+ p = Axlsx::Package.new
6
+ @ws = p.workbook.add_worksheet
7
+ 40.times do
8
+ @ws.add_row %w(aa bb cc dd ee ff gg hh ii jj kk)
9
+ end
10
+ @table = @ws.add_table(Axlsx::cell_range([@ws.rows.first.cells.first,@ws.rows.last.cells.last], false), :name => 'foo')
11
+ @options = { :show_first_column => 1,
12
+ :show_last_column => 1,
13
+ :show_row_stripes => 1,
14
+ :show_column_stripes => 1,
15
+ :name => "TableStyleDark4" }
16
+
17
+
18
+ end
19
+
20
+ def test_initialize
21
+ table_style = Axlsx::TableStyleInfo.new @options
22
+ @options.each do |key, value|
23
+ assert_equal(value, table_style.send(key.to_sym))
24
+ end
25
+ end
26
+
27
+ def test_boolean_properties
28
+ table_style = Axlsx::TableStyleInfo.new
29
+ @options.keys.each do |key|
30
+ assert_nothing_raised { table_style.send("#{key.to_sym}=", true) }
31
+ assert_raises(ArgumentError) { table_style.send(key.to_sym, 'foo') }
32
+ end
33
+ end
34
+ def doc
35
+ @doc ||= Nokogiri::XML(Axlsx::TableStyleInfo.new(@options).to_xml_string)
36
+ end
37
+
38
+ def test_to_xml_string_first_column
39
+ assert(doc.xpath('//tableStyleInfo[@showLastColumn=1]'))
40
+ end
41
+
42
+ def test_to_xml_string_row_stripes
43
+ assert(doc.xpath('//tableStyleInfo[@showRowStripes=1]'))
44
+ end
45
+
46
+ def test_to_xml_string_column_stripes
47
+ assert(doc.xpath('//tableStyleInfo[@showColumnStripes=1]'))
48
+ end
49
+
50
+ def test_to_xml_string_name
51
+ assert(doc.xpath("//tableStyleInfo[@name=#{@options[:name]}]"))
52
+ end
53
+ end
@@ -246,7 +246,7 @@ class TestWorksheet < Test::Unit::TestCase
246
246
 
247
247
  def test_to_xml_string_auto_filter
248
248
  @ws.add_row [1, "two"]
249
- @ws.auto_filter = "A1:B1"
249
+ @ws.auto_filter.range = "A1:B1"
250
250
  doc = Nokogiri::XML(@ws.to_xml_string)
251
251
  assert_equal(doc.xpath('//xmlns:worksheet/xmlns:autoFilter[@ref="A1:B1"]').size, 1)
252
252
  end
@@ -324,13 +324,20 @@ class TestWorksheet < Test::Unit::TestCase
324
324
  assert_equal(0, @ws.rows.last.cells.last.value.index("\v"))
325
325
  assert_equal(nil,@ws.to_xml_string.index("\v"))
326
326
  end
327
+
328
+ def test_to_xml_string_with_newlines
329
+ cell_with_newline = "foo\n\r\nbar"
330
+ @ws.add_row [cell_with_newline]
331
+ assert_equal("foo\n\r\nbar", @ws.rows.last.cells.last.value)
332
+ assert_not_nil(@ws.to_xml_string.index("foo\n\r\nbar"))
333
+ end
327
334
  # Make sure the XML for all optional elements (like pageMargins, autoFilter, ...)
328
335
  # is generated in correct order.
329
336
  def test_valid_with_optional_elements
330
337
  @ws.page_margins.set :left => 9
331
338
  @ws.page_setup.set :fit_to_width => 1
332
339
  @ws.print_options.set :headings => true
333
- @ws.auto_filter = "A1:C3"
340
+ @ws.auto_filter.range = "A1:C3"
334
341
  @ws.merge_cells "A4:A5"
335
342
  @ws.add_chart Axlsx::Pie3DChart
336
343
  @ws.add_table "E1:F3"
@@ -417,7 +424,14 @@ class TestWorksheet < Test::Unit::TestCase
417
424
  def test_auto_filter
418
425
  assert(@ws.auto_filter.range.nil?)
419
426
  assert_raise(ArgumentError) { @ws.auto_filter = 123 }
420
- @ws.auto_filter = "A1:D9"
427
+ @ws.auto_filter.range = "A1:D9"
421
428
  assert_equal(@ws.auto_filter.range, "A1:D9")
422
429
  end
430
+
431
+ def test_sheet_pr_for_auto_filter
432
+ @ws.auto_filter.range = 'A1:D9'
433
+ @ws.auto_filter.add_column 0, :filters, :filter_items => [1]
434
+ doc = Nokogiri::XML(@ws.to_xml_string)
435
+ assert(doc.xpath('//sheetPr[@filterMode="true"]'))
436
+ end
423
437
  end
@@ -0,0 +1,64 @@
1
+ require 'tc_helper.rb'
2
+
3
+ class TestWorksheetHyperlink < Test::Unit::TestCase
4
+ def setup
5
+ p = Axlsx::Package.new
6
+ wb = p.workbook
7
+ @ws = wb.add_worksheet
8
+ @options = { :location => 'https://github.com/randym/axlsx', :tooltip => 'axlsx', :ref => 'A1', :display => 'AXSLX', :target => :internal }
9
+ @a = @ws.add_hyperlink @options
10
+ end
11
+
12
+ def test_initailize
13
+ assert_raise(ArgumentError) { Axlsx::WorksheetHyperlink.new }
14
+ end
15
+
16
+ def test_location
17
+ assert_equal(@options[:location], @a.location)
18
+ end
19
+
20
+ def test_tooltip
21
+ assert_equal(@options[:tooltip], @a.tooltip)
22
+ end
23
+
24
+ def test_target
25
+ assert_equal(@options[:target], @a.instance_values['target'])
26
+ end
27
+
28
+ def test_display
29
+ assert_equal(@options[:display], @a.display)
30
+ end
31
+ def test_ref
32
+ assert_equal(@options[:ref], @a.ref)
33
+ end
34
+
35
+ def test_id
36
+ @a.target = :external
37
+
38
+ assert_equal("rId1", @a.id)
39
+ @a.target = :internal
40
+ assert_equal(nil, @a.id)
41
+ end
42
+
43
+
44
+ def test_to_xml_string_with_non_external
45
+ doc = Nokogiri::XML(@ws.to_xml_string)
46
+ assert_equal(doc.xpath("//xmlns:hyperlink[@ref='#{@a.ref}']").size, 1)
47
+ assert_equal(doc.xpath("//xmlns:hyperlink[@tooltip='#{@a.tooltip}']").size, 1)
48
+ assert_equal(doc.xpath("//xmlns:hyperlink[@location='#{@a.location}']").size, 1)
49
+ assert_equal(doc.xpath("//xmlns:hyperlink[@display='#{@a.display}']").size, 1)
50
+ assert_equal(doc.xpath("//xmlns:hyperlink[@r:id='#{@a.id}']").size, 0)
51
+ end
52
+
53
+ def test_to_xml_stirng_with_external
54
+ @a.target = :external
55
+ doc = Nokogiri::XML(@ws.to_xml_string)
56
+ assert_equal(doc.xpath("//xmlns:hyperlink[@ref='#{@a.ref}']").size, 1)
57
+ assert_equal(doc.xpath("//xmlns:hyperlink[@tooltip='#{@a.tooltip}']").size, 1)
58
+ assert_equal(doc.xpath("//xmlns:hyperlink[@display='#{@a.display}']").size, 1)
59
+ assert_equal(doc.xpath("//xmlns:hyperlink[@location='#{@a.location}']").size, 0)
60
+ assert_equal(doc.xpath("//xmlns:hyperlink[@r:id='#{@a.id}']").size, 1)
61
+ end
62
+ end
63
+
64
+