summaryrefslogtreecommitdiffhomepage
path: root/test/workbook/worksheet/tc_data_validation.rb
diff options
context:
space:
mode:
authorJan-Hendrik Hühne <[email protected]>2012-05-24 10:31:50 +0200
committerJan-Hendrik Hühne <[email protected]>2012-05-24 10:32:09 +0200
commit395bb937970e167fe93ce51650c5d2ff79e4e310 (patch)
tree26f402957dae0ffa4a223f17b8abfe1743314b59 /test/workbook/worksheet/tc_data_validation.rb
parent36a3cbf3970bb30bacec8b3fef435e52fcc4b66e (diff)
downloadcaxlsx-395bb937970e167fe93ce51650c5d2ff79e4e310.tar.gz
caxlsx-395bb937970e167fe93ce51650c5d2ff79e4e310.zip
UnitTests for DataValidation
Diffstat (limited to 'test/workbook/worksheet/tc_data_validation.rb')
-rw-r--r--test/workbook/worksheet/tc_data_validation.rb259
1 files changed, 259 insertions, 0 deletions
diff --git a/test/workbook/worksheet/tc_data_validation.rb b/test/workbook/worksheet/tc_data_validation.rb
new file mode 100644
index 00000000..c30ce251
--- /dev/null
+++ b/test/workbook/worksheet/tc_data_validation.rb
@@ -0,0 +1,259 @@
+# encoding: UTF-8
+require 'tc_helper.rb'
+
+
+class TestDataValidation < Test::Unit::TestCase
+ def setup
+ #inverse defaults
+ @boolean_options = { :allowBlank => false, :showDropDown => true, :showErrorMessage => false, :showInputMessage => true }
+ @nil_options = { :formula1 => 'foo', :formula2 => 'foo', :errorTitle => 'foo', :operator => :lessThan, :prompt => 'foo', :promptTitle => 'foo', :sqref => 'foo' }
+ @type_option = { :type => :whole }
+ @error_style_option = { :errorStyle => :warning }
+
+ @string_options = { :formula1 => 'foo', :formula2 => 'foo', :error => 'foo', :errorTitle => 'foo', :prompt => 'foo', :promptTitle => 'foo', :sqref => 'foo' }
+ @symbol_options = { :errorStyle => :warning, :operator => :lessThan, :type => :whole}
+
+ @options = @boolean_options.merge(@nil_options).merge(@type_option).merge(@error_style_option)
+
+ @dv = Axlsx::DataValidation.new(@options)
+ end
+
+ def test_initialize
+ dv = Axlsx::DataValidation.new
+
+ @boolean_options.each do |key, value|
+ assert_equal(!value, dv.send(key.to_sym), "initialized default #{key} should be #{!value}")
+ assert_equal(value, @dv.send(key.to_sym), "initialized options #{key} should be #{value}")
+ end
+
+ @nil_options.each do |key, value|
+ assert_equal(nil, dv.send(key.to_sym), "initialized default #{key} should be nil")
+ assert_equal(value, @dv.send(key.to_sym), "initialized options #{key} should be #{value}")
+ end
+
+ @type_option.each do |key, value|
+ assert_equal(:none, dv.send(key.to_sym), "initialized default #{key} should be :none")
+ assert_equal(value, @dv.send(key.to_sym), "initialized options #{key} should be #{value}")
+ end
+
+ @error_style_option.each do |key, value|
+ assert_equal(:stop, dv.send(key.to_sym), "initialized default #{key} should be :stop")
+ assert_equal(value, @dv.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") { @dv.send("#{key}=".to_sym, 'A') }
+ assert_nothing_raised { @dv.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") { @dv.send("#{key}=".to_sym, :symbol) }
+ assert_nothing_raised { @dv.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") { @dv.send("#{key}=".to_sym, "foo") }
+ assert_nothing_raised { @dv.send("#{key}=".to_sym, value) }
+ end
+ end
+
+ def test_formula1
+ assert_raise(ArgumentError) { @dv.formula1 = 10 }
+ assert_nothing_raised { @dv.formula1 = "=SUM(A1:A1)" }
+ assert_equal(@dv.formula1, "=SUM(A1:A1)")
+ end
+
+ def test_formula2
+ assert_raise(ArgumentError) { @dv.formula2 = 10 }
+ assert_nothing_raised { @dv.formula2 = "=SUM(A1:A1)" }
+ assert_equal(@dv.formula2, "=SUM(A1:A1)")
+ end
+
+ def test_allowBlank
+ assert_raise(ArgumentError) { @dv.allowBlank = "foo´" }
+ assert_nothing_raised { @dv.allowBlank = false }
+ assert_equal(@dv.allowBlank, false)
+ end
+
+ def test_error
+ assert_raise(ArgumentError) { @dv.error = :symbol }
+ assert_nothing_raised { @dv.error = "This is a error message" }
+ assert_equal(@dv.error, "This is a error message")
+ end
+
+ def test_errorStyle
+ assert_raise(ArgumentError) { @dv.errorStyle = "foo" }
+ assert_nothing_raised { @dv.errorStyle = :information }
+ assert_equal(@dv.errorStyle, :information)
+ end
+
+ def test_errorTitle
+ assert_raise(ArgumentError) { @dv.errorTitle = :symbol }
+ assert_nothing_raised { @dv.errorTitle = "This is the error title" }
+ assert_equal(@dv.errorTitle, "This is the error title")
+ end
+
+ def test_operator
+ assert_raise(ArgumentError) { @dv.operator = "foo" }
+ assert_nothing_raised { @dv.operator = :greaterThan }
+ assert_equal(@dv.operator, :greaterThan)
+ end
+
+ def test_prompt
+ assert_raise(ArgumentError) { @dv.prompt = :symbol }
+ assert_nothing_raised { @dv.prompt = "This is a prompt message" }
+ assert_equal(@dv.prompt, "This is a prompt message")
+ end
+
+ def test_promptTitle
+ assert_raise(ArgumentError) { @dv.promptTitle = :symbol }
+ assert_nothing_raised { @dv.promptTitle = "This is the prompt title" }
+ assert_equal(@dv.promptTitle, "This is the prompt title")
+ end
+
+ def test_showDropDown
+ assert_raise(ArgumentError) { @dv.showDropDown = "foo´" }
+ assert_nothing_raised { @dv.showDropDown = false }
+ assert_equal(@dv.showDropDown, false)
+ end
+
+ def test_showErrorMessage
+ assert_raise(ArgumentError) { @dv.showErrorMessage = "foo´" }
+ assert_nothing_raised { @dv.showErrorMessage = false }
+ assert_equal(@dv.showErrorMessage, false)
+ end
+
+ def test_showInputMessage
+ assert_raise(ArgumentError) { @dv.showInputMessage = "foo´" }
+ assert_nothing_raised { @dv.showInputMessage = false }
+ assert_equal(@dv.showInputMessage, false)
+ end
+
+ def test_sqref
+ assert_raise(ArgumentError) { @dv.sqref = 10 }
+ assert_nothing_raised { @dv.sqref = "A1:A1" }
+ assert_equal(@dv.sqref, "A1:A1")
+ end
+
+ def test_type
+ assert_raise(ArgumentError) { @dv.type = "foo" }
+ assert_nothing_raised { @dv.type = :list }
+ assert_equal(@dv.type, :list)
+ end
+
+ def test_whole_decimal_data_time_textLength_to_xml
+ p = Axlsx::Package.new
+ @ws = p.workbook.add_worksheet :name=>"data_validation"
+ @ws.add_data_validation("A1", { :type => :whole, :operator => :between, :formula1 => '5', :formula2 => '10',
+ :showErrorMessage => true, :errorTitle => 'Wrong input', :error => 'Only values between 5 and 10',
+ :errorStyle => :information, :showInputMessage => true, :promptTitle => 'Be carful!',
+ :prompt => 'Only values between 5 and 10'})
+
+ doc = Nokogiri::XML.parse(@ws.to_xml_string)
+
+ #test attributes
+ assert_equal(1, doc.xpath("//xmlns:worksheet/xmlns:dataValidations[@count='1']/xmlns:dataValidation[@sqref='A1']
+ [@promptTitle='Be carful!'][@prompt='Only values between 5 and 10'][@operator='between'][@errorTitle='Wrong input']
+ [@error='Only values between 5 and 10'][@showErrorMessage='true'][@allowBlank='true'][@showInputMessage='true'][@type='whole']
+ [@errorStyle='information']").size)
+ assert doc.xpath("//xmlns:worksheet/xmlns:dataValidations[@count='1']/xmlns:dataValidation[@sqref='A1']
+ [@promptTitle='Be carful!'][@prompt='Only values between 5 and 10'][@operator='between'][@errorTitle='Wrong input']
+ [@error='Only values between 5 and 10'][@showErrorMessage='true'][@allowBlank='true'][@showInputMessage='true']
+ [@type='whole'][@errorStyle='information']")
+
+ #test forumula1
+ assert_equal(1, doc.xpath("//xmlns:worksheet/xmlns:dataValidations/xmlns:dataValidation/xmlns:formula1").size)
+ assert doc.xpath("//xmlns:worksheet/xmlns:dataValidations/xmlns:dataValidation/xmlns:formula1='5'")
+
+ #test forumula2
+ assert_equal(1, doc.xpath("//xmlns:worksheet/xmlns:dataValidations/xmlns:dataValidation/xmlns:formula2").size)
+ assert doc.xpath("//xmlns:worksheet/xmlns:dataValidations/xmlns:dataValidation/xmlns:formula2='10'")
+ end
+
+ def test_list_to_xml
+ p = Axlsx::Package.new
+ @ws = p.workbook.add_worksheet :name=>"data_validation"
+ @ws.add_data_validation("A1", { :type => :list, :formula1 => 'A1:A5',
+ :showErrorMessage => true, :errorTitle => 'Wrong input', :error => 'Only values from list',
+ :errorStyle => :stop, :showInputMessage => true, :promptTitle => 'Be carful!',
+ :prompt => 'Only values from list', :showDropDown => true})
+
+ doc = Nokogiri::XML.parse(@ws.to_xml_string)
+
+ #test attributes
+ assert_equal(1, doc.xpath("//xmlns:worksheet/xmlns:dataValidations[@count='1']/xmlns:dataValidation[@sqref='A1']
+ [@promptTitle='Be carful!'][@prompt='Only values from list'][@errorTitle='Wrong input'][@error='Only values from list']
+ [@showErrorMessage='true'][@allowBlank='true'][@showInputMessage='true'][@showDropDown='true'][@type='list']
+ [@errorStyle='stop']").size)
+ assert doc.xpath("//xmlns:worksheet/xmlns:dataValidations[@count='1']/xmlns:dataValidation[@sqref='A1']
+ [@promptTitle='Be carful!'][@prompt='Only values from list'][@errorTitle='Wrong input'][@error='Only values from list']
+ [@showErrorMessage='true'][@allowBlank='true'][@showInputMessage='true'][@showDropDown='true'][@type='list'][@errorStyle='stop']")
+
+ #test forumula1
+ assert_equal(1, doc.xpath("//xmlns:worksheet/xmlns:dataValidations/xmlns:dataValidation/xmlns:formula1").size)
+ assert doc.xpath("//xmlns:worksheet/xmlns:dataValidations/xmlns:dataValidation/xmlns:formula1='A1:A5'")
+ end
+
+ def test_custom_to_xml
+ p = Axlsx::Package.new
+ @ws = p.workbook.add_worksheet :name=>"data_validation"
+ @ws.add_data_validation("A1", { :type => :custom, :formula1 => '=5/2',
+ :showErrorMessage => true, :errorTitle => 'Wrong input', :error => 'Only values corresponding formula',
+ :errorStyle => :stop, :showInputMessage => true, :promptTitle => 'Be carful!',
+ :prompt => 'Only values corresponding formula'})
+
+ doc = Nokogiri::XML.parse(@ws.to_xml_string)
+
+ #test attributes
+ assert_equal(1, doc.xpath("//xmlns:worksheet/xmlns:dataValidations[@count='1']/xmlns:dataValidation[@sqref='A1'][@promptTitle='Be carful!']
+ [@prompt='Only values corresponding formula'][@errorTitle='Wrong input'][@error='Only values corresponding formula'][@showErrorMessage='true']
+ [@allowBlank='true'][@showInputMessage='true'][@type='custom'][@errorStyle='stop']").size)
+ assert doc.xpath("//xmlns:worksheet/xmlns:dataValidations[@count='1']/xmlns:dataValidation[@sqref='A1'][@promptTitle='Be carful!']
+ [@prompt='Only values corresponding formula'][@errorTitle='Wrong input'][@error='Only values corresponding formula']
+ [@showErrorMessage='true'][@allowBlank='true'][@showInputMessage='true'][@type='custom'][@errorStyle='stop']")
+
+ #test forumula1
+ assert_equal(1, doc.xpath("//xmlns:worksheet/xmlns:dataValidations/xmlns:dataValidation/xmlns:formula1").size)
+ assert doc.xpath("//xmlns:worksheet/xmlns:dataValidations/xmlns:dataValidation/xmlns:formula1='=5/2'")
+ end
+
+ def test_multiple_datavalidations_to_xml
+ p = Axlsx::Package.new
+ @ws = p.workbook.add_worksheet :name=>"data_validation"
+ @ws.add_data_validation("A1", { :type => :whole, :operator => :between, :formula1 => '5', :formula2 => '10',
+ :showErrorMessage => true, :errorTitle => 'Wrong input', :error => 'Only values between 5 and 10',
+ :errorStyle => :information, :showInputMessage => true, :promptTitle => 'Be carful!',
+ :prompt => 'Only values between 5 and 10'})
+ @ws.add_data_validation("B1", { :type => :list, :formula1 => 'A1:A5',
+ :showErrorMessage => true, :errorTitle => 'Wrong input', :error => 'Only values from list',
+ :errorStyle => :stop, :showInputMessage => true, :promptTitle => 'Be carful!',
+ :prompt => 'Only values from list', :showDropDown => true})
+
+ doc = Nokogiri::XML.parse(@ws.to_xml_string)
+
+ #test attributes
+ assert_equal(1, doc.xpath("//xmlns:worksheet/xmlns:dataValidations[@count='2']/xmlns:dataValidation[@sqref='A1']
+ [@promptTitle='Be carful!'][@prompt='Only values between 5 and 10'][@operator='between'][@errorTitle='Wrong input']
+ [@error='Only values between 5 and 10'][@showErrorMessage='true'][@allowBlank='true'][@showInputMessage='true'][@type='whole']
+ [@errorStyle='information']").size)
+ assert doc.xpath("//xmlns:worksheet/xmlns:dataValidations[@count='2']/xmlns:dataValidation[@sqref='A1']
+ [@promptTitle='Be carful!'][@prompt='Only values between 5 and 10'][@operator='between'][@errorTitle='Wrong input']
+ [@error='Only values between 5 and 10'][@showErrorMessage='true'][@allowBlank='true'][@showInputMessage='true']
+ [@type='whole'][@errorStyle='information']")
+
+ #test attributes
+ assert_equal(1, doc.xpath("//xmlns:worksheet/xmlns:dataValidations[@count='2']/xmlns:dataValidation[@sqref='B1']
+ [@promptTitle='Be carful!'][@prompt='Only values from list'][@errorTitle='Wrong input'][@error='Only values from list']
+ [@showErrorMessage='true'][@allowBlank='true'][@showInputMessage='true'][@showDropDown='true'][@type='list']
+ [@errorStyle='stop']").size)
+ assert doc.xpath("//xmlns:worksheet/xmlns:dataValidations[@count='2']/xmlns:dataValidation[@sqref='B1']
+ [@promptTitle='Be carful!'][@prompt='Only values from list'][@errorTitle='Wrong input'][@error='Only values from list']
+ [@showErrorMessage='true'][@allowBlank='true'][@showInputMessage='true'][@showDropDown='true'][@type='list'][@errorStyle='stop']")
+ end
+end \ No newline at end of file