diff options
| author | Jan-Hendrik Hühne <[email protected]> | 2012-06-06 14:50:05 +0200 |
|---|---|---|
| committer | Jan-Hendrik Hühne <[email protected]> | 2012-06-06 14:50:05 +0200 |
| commit | eb0ab7ec68707ada8b537465db639639e2212bc6 (patch) | |
| tree | 7e9380479daae596b4bdd78e3a0d78b0a2a9263b | |
| parent | 5736abaa282f87a67dad102216b98d6d667f213a (diff) | |
| download | caxlsx-eb0ab7ec68707ada8b537465db639639e2212bc6.tar.gz caxlsx-eb0ab7ec68707ada8b537465db639639e2212bc6.zip | |
SheetView bugfixes and test suite
| -rw-r--r-- | lib/axlsx/workbook/worksheet/sheet_view.rb | 24 | ||||
| -rw-r--r-- | test/workbook/worksheet/tc_sheet_view.rb | 222 |
2 files changed, 237 insertions, 9 deletions
diff --git a/lib/axlsx/workbook/worksheet/sheet_view.rb b/lib/axlsx/workbook/worksheet/sheet_view.rb index 18608a21..0ce7fd96 100644 --- a/lib/axlsx/workbook/worksheet/sheet_view.rb +++ b/lib/axlsx/workbook/worksheet/sheet_view.rb @@ -163,7 +163,7 @@ module Axlsx # to a workbookView element in the bookViews collection. # @see type # @return [Integer] - # @default nil + # @default 0 attr_reader :workbook_view_id @@ -241,11 +241,11 @@ module Axlsx # @option options [Integer] zoom_scale_sheet_layout_view Zoom Scale Page Break Preview def initialize(options={}) #defaults - @color_id = @top_left_cell = @workbook_view_id = nil - @right_to_left = @show_formulas = @show_outline_symbol = 0@show_white_space = @tab_selected = false + @color_id = @top_left_cell = nil + @right_to_left = @show_formulas = @show_outline_symbols = @show_white_space = @tab_selected = false @default_grid_color = @show_grid_lines = @show_row_col_headers = @show_ruler = @show_zeros = @window_protection = true @zoom_scale = 100 - @zoom_scale_normal = @zoom_scale_page_layout_view = @zoom_scale_sheet_layout_view = 0 + @zoom_scale_normal = @zoom_scale_page_layout_view = @zoom_scale_sheet_layout_view = @workbook_view_id = 0 # write options to instance variables options.each do |o| @@ -318,16 +318,20 @@ module Axlsx def workbook_view_id=(v); Axlsx::validate_unsigned_int(v); @workbook_view_id = v end + # @see zoom_scale + def zoom_scale=(v); Axlsx::validate_scale_0_10_400(v); @zoom_scale = v end + + # @see zoom_scale_normal - def zoom_scale_normal=(v); Axlsx::validate_scale_10_400(v); @zoom_scale_normal = v end + def zoom_scale_normal=(v); Axlsx::validate_scale_0_10_400(v); @zoom_scale_normal = v end # @see zoom_scale_page_layout_view - def zoom_scale_page_layout_view=(v); Axlsx::validate_scale_10_400(v); @zoom_scale_page_layout_view = v end + def zoom_scale_page_layout_view=(v); Axlsx::validate_scale_0_10_400(v); @zoom_scale_page_layout_view = v end # @see zoom_scale_sheet_layout_view - def zoom_scale_sheet_layout_view=(v); Axlsx::validate_scale_10_400(v); @zoom_scale_sheet_layout_view = v end + def zoom_scale_sheet_layout_view=(v); Axlsx::validate_scale_0_10_400(v); @zoom_scale_sheet_layout_view = v end # Serializes the data validation @@ -336,9 +340,11 @@ module Axlsx def to_xml_string(str = '') str << '<sheetViews>' str << '<sheetView ' - str << instance_values.map { |key, value| '' << key.camelize(:lower) << '="' << value.to_s << '"' }.join(' ') + str << instance_values.map { |key, value| '' << key.gsub(/_(.)/){ $1.upcase } << %{="#{value}"} }.join(' ') # str << instance_values.map { |key, value| '' << key << '="' << value.to_s << '"' unless CHILD_ELEMENTS.include?(key.to_sym) }.join(' ') - str << '></sheetView>' + str << '>' + str << '<selection activeCell="A1" sqref="A1" />' + str << '</sheetView>' str << '</sheetViews>' end end diff --git a/test/workbook/worksheet/tc_sheet_view.rb b/test/workbook/worksheet/tc_sheet_view.rb new file mode 100644 index 00000000..02e6101f --- /dev/null +++ b/test/workbook/worksheet/tc_sheet_view.rb @@ -0,0 +1,222 @@ +# encoding: UTF-8 +require 'tc_helper.rb' + +class TestSheetView < Test::Unit::TestCase + def setup + #inverse defaults for booleans + @boolean_options = { :right_to_left => true, :show_formulas => true, :show_outline_symbols => true, + :show_white_space => true, :tab_selected => true, :default_grid_color => false, :show_grid_lines => false, + :show_row_col_headers => false, :show_ruler => false, :show_zeros => false, :window_protection => false } + @symbol_options = { :view => :page_break_preview } + @nil_options = { :color_id => 2, :top_left_cell => 'A2' } + @int_0 = { :zoom_scale_normal => 100, :zoom_scale_page_layout_view => 100, :zoom_scale_sheet_layout_view => 100, :workbook_view_id => 2 } + @int_100 = { :zoom_scale => 10 } + + @integer_options = { :color_id => 2, :workbook_view_id => 2 }.merge(@int_0).merge(@int_100) + @string_options = { :top_left_cell => 'A2' } + + + @options = @boolean_options.merge(@boolean_options).merge(@symbol_options).merge(@nil_options).merge(@int_0).merge(@int_100) + + @sv = Axlsx::SheetView.new(@options) + end + + def test_initialize + sv = Axlsx::SheetView.new + + @boolean_options.each do |key, value| + assert_equal(!value, sv.send(key.to_sym), "initialized default #{key} should be #{!value}") + assert_equal(value, @sv.send(key.to_sym), "initialized options #{key} should be #{value}") + end + + @nil_options.each do |key, value| + assert_equal(nil, sv.send(key.to_sym), "initialized default #{key} should be nil") + assert_equal(value, @sv.send(key.to_sym), "initialized options #{key} should be #{value}") + end + + @int_0.each do |key, value| + assert_equal(0, sv.send(key.to_sym), "initialized default #{key} should be 0") + assert_equal(value, @sv.send(key.to_sym), "initialized options #{key} should be #{value}") + end + + @int_100.each do |key, value| + assert_equal(100, sv.send(key.to_sym), "initialized default #{key} should be 100") + assert_equal(value, @sv.send(key.to_sym), "initialized options #{key} should be #{value}") + end + end + + def test_boolean_attribute_validation + @boolean_options.each do |key, value| + assert_raise(ArgumentError, "#{key} must be boolean") { @sv.send("#{key}=".to_sym, 'A') } + assert_nothing_raised { @sv.send("#{key}=".to_sym, true) } + end + end + + def test_string_attribute_validation + @string_options.each do |key, value| + assert_raise(ArgumentError, "#{key} must be string") { @sv.send("#{key}=".to_sym, :symbol) } + assert_nothing_raised { @sv.send("#{key}=".to_sym, "foo") } + end + end + + def test_symbol_attribute_validation + @symbol_options.each do |key, value| + assert_raise(ArgumentError, "#{key} must be symbol") { @sv.send("#{key}=".to_sym, "foo") } + assert_nothing_raised { @sv.send("#{key}=".to_sym, value) } + end + end + + def test_integer_attribute_validation + @symbol_options.each do |key, value| + assert_raise(ArgumentError, "#{key} must be integer") { @sv.send("#{key}=".to_sym, "foo") } + assert_nothing_raised { @sv.send("#{key}=".to_sym, value) } + end + end + + def test_color_id + assert_raise(ArgumentError) { @sv.color_id = "10" } + assert_nothing_raised { @sv.color_id = 2 } + assert_equal(@sv.color_id, 2) + end + + def test_default_grid_color + assert_raise(ArgumentError) { @sv.default_grid_color = "foo" } + assert_nothing_raised { @sv.default_grid_color = false } + assert_equal(@sv.default_grid_color, false) + end + + def test_right_to_left + assert_raise(ArgumentError) { @sv.right_to_left = "foo´" } + assert_nothing_raised { @sv.right_to_left = true } + assert_equal(@sv.right_to_left, true) + end + + def test_show_formulas + assert_raise(ArgumentError) { @sv.show_formulas = 'foo' } + assert_nothing_raised { @sv.show_formulas = false } + assert_equal(@sv.show_formulas, false) + end + + def test_show_grid_lines + assert_raise(ArgumentError) { @sv.show_grid_lines = "foo" } + assert_nothing_raised { @sv.show_grid_lines = false } + assert_equal(@sv.show_grid_lines, false) + end + + def test_show_outline_symbols + assert_raise(ArgumentError) { @sv.show_outline_symbols = 'foo' } + assert_nothing_raised { @sv.show_outline_symbols = false } + assert_equal(@sv.show_outline_symbols, false) + end + + def test_show_row_col_headers + assert_raise(ArgumentError) { @sv.show_row_col_headers = "foo" } + assert_nothing_raised { @sv.show_row_col_headers = false } + assert_equal(@sv.show_row_col_headers, false) + end + + def test_show_ruler + assert_raise(ArgumentError) { @sv.show_ruler = 'foo' } + assert_nothing_raised { @sv.show_ruler = false } + assert_equal(@sv.show_ruler, false) + end + + def test_show_white_space + assert_raise(ArgumentError) { @sv.show_white_space = 'foo' } + assert_nothing_raised { @sv.show_white_space = false } + assert_equal(@sv.show_white_space, false) + end + + def test_show_zeros + assert_raise(ArgumentError) { @sv.show_zeros = "foo" } + assert_nothing_raised { @sv.show_zeros = false } + assert_equal(@sv.show_zeros, false) + end + + def test_tab_selected + assert_raise(ArgumentError) { @sv.tab_selected = "foo" } + assert_nothing_raised { @sv.tab_selected = false } + assert_equal(@sv.tab_selected, false) + end + + def test_top_left_cell + assert_raise(ArgumentError) { @sv.top_left_cell = :cell_adress } + assert_nothing_raised { @sv.top_left_cell = "A2" } + assert_equal(@sv.top_left_cell, "A2") + end + + def test_view + assert_raise(ArgumentError) { @sv.view = 'view' } + assert_nothing_raised { @sv.view = :page_break_preview } + assert_equal(@sv.view, :page_break_preview) + end + + def test_window_protection + assert_raise(ArgumentError) { @sv.window_protection = "foo" } + assert_nothing_raised { @sv.window_protection = false } + assert_equal(@sv.window_protection, false) + end + + def test_workbook_view_id + assert_raise(ArgumentError) { @sv.workbook_view_id = "1" } + assert_nothing_raised { @sv.workbook_view_id = 1 } + assert_equal(@sv.workbook_view_id, 1) + end + + def test_zoom_scale + assert_raise(ArgumentError) { @sv.zoom_scale = "50" } + assert_nothing_raised { @sv.zoom_scale = 50 } + assert_equal(@sv.zoom_scale, 50) + end + + def test_zoom_scale_normal + assert_raise(ArgumentError) { @sv.zoom_scale_normal = "50" } + assert_nothing_raised { @sv.zoom_scale_normal = 50 } + assert_equal(@sv.zoom_scale_normal, 50) + end + + def test_zoom_scale_page_layout_view + assert_raise(ArgumentError) { @sv.zoom_scale_page_layout_view = "50" } + assert_nothing_raised { @sv.zoom_scale_page_layout_view = 50 } + assert_equal(@sv.zoom_scale_page_layout_view, 50) + end + + def test_zoom_scale_sheet_layout_view + assert_raise(ArgumentError) { @sv.zoom_scale_sheet_layout_view = "50" } + assert_nothing_raised { @sv.zoom_scale_sheet_layout_view = 50 } + assert_equal(@sv.zoom_scale_sheet_layout_view, 50) + end + + def test_to_xml + p = Axlsx::Package.new + @ws = p.workbook.add_worksheet :name => "sheetview" + @ws.sheet_view do |vs| + vs.view = :page_break_preview + end + + doc = Nokogiri::XML.parse(@ws.to_xml_string) + + assert_equal(1, doc.xpath("//xmlns:worksheet/xmlns:sheetViews/xmlns:sheetView[@topLeftCell=''][@colorId=''] + [@tabSelected='false'][@showWhiteSpace='false'][@showOutlineSymbols='false'][@showFormulas='false'] + [@rightToLeft='false'][@windowProtection='true'][@showZeros='true'][@showRuler='true'] + [@showRowColHeaders='true'][@showGridLines='true'][@defaultGridColor='true'] + [@zoomScale='100'][@workbookViewId='0'][@zoomScaleSheetLayoutView='0'][@zoomScalePageLayoutView='0'] + [@zoomScaleNormal='0'][@view='page_break_preview']").size) + + assert doc.xpath("//xmlns:worksheet/xmlns:sheetViews/xmlns:sheetView[@topLeftCell=''][@colorId=''] + [@tabSelected='false'][@showWhiteSpace='false'][@showOutlineSymbols='false'][@showFormulas='false'] + [@rightToLeft='false'][@windowProtection='true'][@showZeros='true'][@showRuler='true'] + [@showRowColHeaders='true'][@showGridLines='true'][@defaultGridColor='true'] + [@zoomScale='100'][@workbookViewId='0'][@zoomScaleSheetLayoutView='0'][@zoomScalePageLayoutView='0'] + [@zoomScaleNormal='0'][@view='page_break_preview']") + end + + def test_to_xml_string_show_selection + p = Axlsx::Package.new + @ws = p.workbook.add_worksheet :name => "sheetview" + + doc = Nokogiri::XML(@ws.to_xml_string) + assert_equal(1, doc.xpath('//xmlns:worksheet/xmlns:sheetViews/xmlns:sheetView/xmlns:selection[@activeCell="A1"]').size) + assert_equal(1, doc.xpath('//xmlns:worksheet/xmlns:sheetViews/xmlns:sheetView/xmlns:selection[@sqref="A1"]').size) + end +end
\ No newline at end of file |
