Skip to content

Commit

Permalink
Bug: can't modify frozen string.
Browse files Browse the repository at this point in the history
  • Loading branch information
dblock committed Sep 1, 2011
1 parent ced383f commit 164dcfb
Show file tree
Hide file tree
Showing 2 changed files with 13 additions and 0 deletions.
3 changes: 3 additions & 0 deletions lib/spreadsheet/encodings.rb
Original file line number Diff line number Diff line change
Expand Up @@ -4,14 +4,17 @@ module Spreadsheet
module Encodings
if RUBY_VERSION >= '1.9'
def client string, internal='UTF-16LE'
string = string.dup
string.force_encoding internal
string.encode Spreadsheet.client_encoding
end
def internal string, client=Spreadsheet.client_encoding
string = string.dup
string.force_encoding client
string.encode('UTF-16LE').force_encoding('ASCII-8BIT')
end
def utf8 string, client=Spreadsheet.client_encoding
string = string.dup
string.force_encoding client
string.encode('UTF-8')
end
Expand Down
10 changes: 10 additions & 0 deletions test/integration.rb
Original file line number Diff line number Diff line change
Expand Up @@ -1296,5 +1296,15 @@ def test_read_baltic
end
end
=end
def test_write_frozen_string
Spreadsheet.client_encoding = 'UTF-16LE'
book = Spreadsheet::Workbook.new
path = File.join @var, 'test_write_workbook.xls'
sheet1 = book.create_worksheet
str1 = "Frozen String".freeze
sheet1[0,0] = str1
sheet1.row(0).push str1
book.write path
end
end
end

6 comments on commit 164dcfb

@zdavatz
Copy link

@zdavatz zdavatz commented on 164dcfb Sep 2, 2011

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

This test delivers me the following error:

  1. Error:
    test_write_frozen_string(Spreadsheet::TestIntegration):
    Iconv::InvalidCharacter: "g"
    /home/zeno/.software/spreadsheet/lib/spreadsheet/encodings.rb:32:in iconv' /home/zeno/.software/spreadsheet/lib/spreadsheet/encodings.rb:32:ininternal'
    /home/zeno/.software/spreadsheet/lib/spreadsheet/excel/writer/biff8.rb:43:in _unicode_string' /home/zeno/.software/spreadsheet/lib/spreadsheet/excel/writer/workbook.rb:509:in_write_sst'
    /usr/lib/ruby/1.8/fileutils.rb:243:in each_with_index' /home/zeno/.software/spreadsheet/lib/spreadsheet/excel/writer/workbook.rb:503:ineach'
    /home/zeno/.software/spreadsheet/lib/spreadsheet/excel/writer/workbook.rb:503:in each_with_index' /home/zeno/.software/spreadsheet/lib/spreadsheet/excel/writer/workbook.rb:503:in_write_sst'
    /home/zeno/.software/spreadsheet/lib/spreadsheet/excel/writer/workbook.rb:490:in write_sst' /home/zeno/.software/spreadsheet/lib/spreadsheet/excel/writer/workbook.rb:440:inwrite_from_scratch'
    /home/zeno/.software/spreadsheet/lib/spreadsheet/excel/writer/workbook.rb:621:in write_workbook' /home/zeno/.software/spreadsheet/lib/spreadsheet/writer.rb:15:inwrite'
    /home/zeno/.software/spreadsheet/lib/spreadsheet/writer.rb:14:in open' /home/zeno/.software/spreadsheet/lib/spreadsheet/writer.rb:14:inwrite'
    /home/zeno/.software/spreadsheet/lib/spreadsheet/workbook.rb:112:in write' test/integration.rb:1305:intest_write_frozen_string'

Why is that?

@dblock
Copy link
Owner Author

@dblock dblock commented on 164dcfb Sep 2, 2011

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I am not sure. For starters this is running with ruby 1.8.7, but I am not succeeding at running tests with that version. I get /home/dblock/.rvm/gems/ruby-1.8.7-p334/gems/rake-0.9.2/lib/rake/rake_test_loader.rb:11:in `require': /home/dblock/source/spreadsheet/dblock/test/suite.rb:12: undefined (?...) sequence: /(?<!suite).rb$/ (SyntaxError) or a missing ole/storage.

How do you run the tests with 1.8.7?

@zdavatz
Copy link

@zdavatz zdavatz commented on 164dcfb Sep 5, 2011

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Thank you for helping out.

With Ruby 1.9.2 on my Linux Gentoo I get:

~/.software/spreadsheet> ruby test/integration.rb
Loaded suite test/integration
Started
......................E...
Finished in 0.915108 seconds.

  1. Error:
    test_write_frozen_string(Spreadsheet::TestIntegration):
    RuntimeError: can't modify frozen string
    /usr/lib/ruby/gems/1.9.1/gems/spreadsheet-0.6.5.8/lib/spreadsheet/encodings.rb:11:in force_encoding' /usr/lib/ruby/gems/1.9.1/gems/spreadsheet-0.6.5.8/lib/spreadsheet/encodings.rb:11:ininternal'
    /usr/lib/ruby/gems/1.9.1/gems/spreadsheet-0.6.5.8/lib/spreadsheet/excel/writer/biff8.rb:43:in _unicode_string' /usr/lib/ruby/gems/1.9.1/gems/spreadsheet-0.6.5.8/lib/spreadsheet/excel/writer/workbook.rb:509:inblock in _write_sst'
    /usr/lib/ruby/gems/1.9.1/gems/spreadsheet-0.6.5.8/lib/spreadsheet/excel/writer/workbook.rb:503:in each' /usr/lib/ruby/gems/1.9.1/gems/spreadsheet-0.6.5.8/lib/spreadsheet/excel/writer/workbook.rb:503:ineach_with_index'
    /usr/lib/ruby/gems/1.9.1/gems/spreadsheet-0.6.5.8/lib/spreadsheet/excel/writer/workbook.rb:503:in _write_sst' /usr/lib/ruby/gems/1.9.1/gems/spreadsheet-0.6.5.8/lib/spreadsheet/excel/writer/workbook.rb:490:inwrite_sst'
    /usr/lib/ruby/gems/1.9.1/gems/spreadsheet-0.6.5.8/lib/spreadsheet/excel/writer/workbook.rb:440:in write_from_scratch' /usr/lib/ruby/gems/1.9.1/gems/spreadsheet-0.6.5.8/lib/spreadsheet/excel/writer/workbook.rb:621:inwrite_workbook'
    /usr/lib/ruby/gems/1.9.1/gems/spreadsheet-0.6.5.8/lib/spreadsheet/writer.rb:15:in block in write' /usr/lib/ruby/gems/1.9.1/gems/spreadsheet-0.6.5.8/lib/spreadsheet/writer.rb:14:inopen'
    /usr/lib/ruby/gems/1.9.1/gems/spreadsheet-0.6.5.8/lib/spreadsheet/writer.rb:14:in write' /usr/lib/ruby/gems/1.9.1/gems/spreadsheet-0.6.5.8/lib/spreadsheet/workbook.rb:112:inwrite'
    test/integration.rb:1306:in `test_write_frozen_string'

26 tests, 807 assertions, 0 failures, 1 errors, 0 skips

With Ruby 1.8.6 on my Linux Gentoo I get:

Loaded suite test/integration
Started
......................E...
Finished in 1.632229 seconds.

  1. Error:
    test_write_frozen_string(Spreadsheet::TestIntegration):
    Iconv::InvalidCharacter: "g"
    /home/zeno/.software/spreadsheet/lib/spreadsheet/encodings.rb:32:in iconv' /home/zeno/.software/spreadsheet/lib/spreadsheet/encodings.rb:32:ininternal'
    /home/zeno/.software/spreadsheet/lib/spreadsheet/excel/writer/biff8.rb:43:in _unicode_string' /home/zeno/.software/spreadsheet/lib/spreadsheet/excel/writer/workbook.rb:509:in_write_sst'
    /usr/lib/ruby/1.8/fileutils.rb:243:in each_with_index' /home/zeno/.software/spreadsheet/lib/spreadsheet/excel/writer/workbook.rb:503:ineach'
    /home/zeno/.software/spreadsheet/lib/spreadsheet/excel/writer/workbook.rb:503:in each_with_index' /home/zeno/.software/spreadsheet/lib/spreadsheet/excel/writer/workbook.rb:503:in_write_sst'
    /home/zeno/.software/spreadsheet/lib/spreadsheet/excel/writer/workbook.rb:490:in write_sst' /home/zeno/.software/spreadsheet/lib/spreadsheet/excel/writer/workbook.rb:440:inwrite_from_scratch'
    /home/zeno/.software/spreadsheet/lib/spreadsheet/excel/writer/workbook.rb:621:in write_workbook' /home/zeno/.software/spreadsheet/lib/spreadsheet/writer.rb:15:inwrite'
    /home/zeno/.software/spreadsheet/lib/spreadsheet/writer.rb:14:in open' /home/zeno/.software/spreadsheet/lib/spreadsheet/writer.rb:14:inwrite'
    /home/zeno/.software/spreadsheet/lib/spreadsheet/workbook.rb:112:in write' test/integration.rb:1306:intest_write_frozen_string'

BTW: The ruby-ole error seems to be connected to when you switch Ruby Versions. I get the same error, but once I close and reopen the terminal the error is gone.

Best
Zeno

@dblock
Copy link
Owner Author

@dblock dblock commented on 164dcfb Sep 5, 2011

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Zeno, you're not using the modified source, you're using an installed gem from the previous version. It's pretty clear from error stack. If you're not convinced, look at the above code, line 11 of encodings.rb after my patch is not calling force_encoding, yet that's the error you get.

@zdavatz
Copy link

@zdavatz zdavatz commented on 164dcfb Sep 7, 2011

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

this is fixed in:

http://scm.ywesee.com/?p=spreadsheet/.git;a=summary

In the testcase

string = "Frozen String.".freeze

works but

string = "Frozen String".freeze

does not work. (there is one string after 'g')

@dblock
Copy link
Owner Author

@dblock dblock commented on 164dcfb Sep 7, 2011 via email

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Please sign in to comment.