summaryrefslogtreecommitdiffhomepage
diff options
context:
space:
mode:
-rw-r--r--lib/axlsx/workbook/worksheet/worksheet.rb2
-rw-r--r--test/workbook/worksheet/tc_worksheet.rb11
2 files changed, 12 insertions, 1 deletions
diff --git a/lib/axlsx/workbook/worksheet/worksheet.rb b/lib/axlsx/workbook/worksheet/worksheet.rb
index 6fbd384e..9cfefa51 100644
--- a/lib/axlsx/workbook/worksheet/worksheet.rb
+++ b/lib/axlsx/workbook/worksheet/worksheet.rb
@@ -656,7 +656,7 @@ module Axlsx
def validate_sheet_name(name)
DataTypeValidator.validate :worksheet_name, String, name
- raise ArgumentError, (ERR_SHEET_NAME_TOO_LONG % name) if name.size > 31
+ raise ArgumentError, (ERR_SHEET_NAME_TOO_LONG % name) if name.bytesize > 31
raise ArgumentError, (ERR_SHEET_NAME_CHARACTER_FORBIDDEN % name) if '[]*/\?:'.chars.any? { |char| name.include? char }
name = Axlsx::coder.encode(name)
sheet_names = @workbook.worksheets.reject { |s| s == self }.map { |s| s.name }
diff --git a/test/workbook/worksheet/tc_worksheet.rb b/test/workbook/worksheet/tc_worksheet.rb
index fa8832d8..781f5250 100644
--- a/test/workbook/worksheet/tc_worksheet.rb
+++ b/test/workbook/worksheet/tc_worksheet.rb
@@ -29,6 +29,17 @@ class TestWorksheet < Test::Unit::TestCase
assert_raises(ArgumentError) { @ws.name = 'foo?bar' }
end
+ def test_exception_if_name_too_long
+ assert_nothing_raised { @ws.name = 'x' * 31 }
+ assert_raises(ArgumentError) { @ws.name = 'x' * 32 }
+ end
+
+ def test_exception_if_name_too_long_because_of_multibyte_characters
+ three_byte_character = "✔"
+ assert_nothing_raised { @ws.name = 'x' * 28 + three_byte_character}
+ assert_raises(ArgumentError) { @ws.name = 'x' * 29 + three_byte_character }
+ end
+
def test_page_margins
assert(@ws.page_margins.is_a? Axlsx::PageMargins)
end