Skip to content

Commit

Permalink
Merge branch '212-patch'
Browse files Browse the repository at this point in the history
  • Loading branch information
stevendaniels committed May 28, 2015
2 parents 67381a6 + 1b71d1c commit fcc9a01
Show file tree
Hide file tree
Showing 2 changed files with 102 additions and 82 deletions.
8 changes: 4 additions & 4 deletions lib/roo/base.rb
Original file line number Diff line number Diff line change
Expand Up @@ -683,9 +683,9 @@ def cell_to_csv(row, col, sheet)

case celltype(row, col, sheet)
when :string
%("#{onecell.tr('"', '""')}") unless onecell.empty?
%("#{onecell.gsub('"', '""')}") unless onecell.empty?
when :boolean
%("#{onecell.tr('"', '""').downcase}")
%("#{onecell.gsub('"', '""').downcase}")
when :float, :percentage
if onecell == onecell.to_i
onecell.to_i.to_s
Expand All @@ -695,7 +695,7 @@ def cell_to_csv(row, col, sheet)
when :formula
case onecell
when String
%("#{onecell.tr('"', '""')}") unless onecell.empty?
%("#{onecell.gsub('"', '""')}") unless onecell.empty?
when Float
if onecell == onecell.to_i
onecell.to_i.to_s
Expand All @@ -712,7 +712,7 @@ def cell_to_csv(row, col, sheet)
when :time
integer_to_timestring(onecell)
when :link
%("#{onecell.url.tr('"', '""')}")
%("#{onecell.url.gsub('"', '""')}")
else
fail "unhandled celltype #{celltype(row, col, sheet)}"
end || ''
Expand Down
176 changes: 98 additions & 78 deletions test/test_generic_spreadsheet.rb
Original file line number Diff line number Diff line change
Expand Up @@ -2,68 +2,67 @@
require File.dirname(__FILE__) + '/test_helper'

class TestBase < Minitest::Test

def setup
@klass = Class.new(Roo::Base) do
def initialize(filename='some_file')
def initialize(filename = 'some_file')
super
@filename = filename
end

def read_cells(sheet=nil)
def read_cells(sheet = nil)
@cells_read[sheet] = true
end

def cell(row, col, sheet=nil)
def cell(row, col, sheet = nil)
sheet ||= default_sheet
@cell[sheet][[row,col]]
@cell[sheet][[row, col]]
end

def celltype(row, col, sheet=nil)
def celltype(row, col, sheet = nil)
sheet ||= default_sheet
@cell_type[sheet][[row,col]]
@cell_type[sheet][[row, col]]
end

def sheets
['my_sheet','blank sheet']
['my_sheet', 'blank sheet']
end
end
@oo = @klass.new
setup_test_sheet(@oo)
end

context 'private method Roo::Base.uri?(filename)' do
should "return true when passed a filename starts with http(s)://" do
should 'return true when passed a filename starts with http(s)://' do
assert_equal true, @oo.send(:uri?, 'http://example.com/')
assert_equal true, @oo.send(:uri?, 'https://example.com/')
end

should "return false when passed a filename which does not start with http(s)://" do
should 'return false when passed a filename which does not start with http(s)://' do
assert_equal false, @oo.send(:uri?, 'example.com')
end

should "return false when passed non-String object such as Tempfile" do
should 'return false when passed non-String object such as Tempfile' do
assert_equal false, @oo.send(:uri?, Tempfile.new('test'))
end
end

def test_setting_invalid_type_does_not_update_cell
@oo.set(1,1,1)
assert_raises(ArgumentError){@oo.set(1,1, :invalid_type)}
assert_equal 1, @oo.cell(1,1)
assert_equal :float, @oo.celltype(1,1)
@oo.set(1, 1, 1)
assert_raises(ArgumentError) { @oo.set(1, 1, :invalid_type) }
assert_equal 1, @oo.cell(1, 1)
assert_equal :float, @oo.celltype(1, 1)
end

def test_first_row
assert_equal 5,@oo.first_row
assert_equal 5, @oo.first_row
end

def test_last_row
assert_equal 16,@oo.last_row
assert_equal 16, @oo.last_row
end

def test_first_column
assert_equal 1,@oo.first_column
assert_equal 1, @oo.first_column
end

def test_first_column_as_letter
Expand All @@ -78,17 +77,16 @@ def test_last_column_as_letter
assert_equal 'G', @oo.last_column_as_letter
end

#TODO: inkonsequente Lieferung Fixnum/Float
def test_rows
assert_equal [41.0,42.0,43.0,44.0,45.0, nil, nil], @oo.row(12)
assert_equal [nil, nil, "dreiundvierzig", "vierundvierzig", "fuenfundvierzig", nil, nil], @oo.row(16)
assert_equal [41.0, 42.0, 43.0, 44.0, 45.0, nil, nil], @oo.row(12)
assert_equal [nil, '"Hello world!"', 'dreiundvierzig', 'vierundvierzig', 'fuenfundvierzig', nil, nil], @oo.row(16)
end

def test_empty_eh
assert @oo.empty?(1,1)
assert !@oo.empty?(8,3)
assert @oo.empty?("A",11)
assert !@oo.empty?("A",12)
assert @oo.empty?(1, 1)
assert !@oo.empty?(8, 3)
assert @oo.empty?('A', 11)
assert !@oo.empty?('A', 12)
end

def test_reload
Expand All @@ -97,34 +95,36 @@ def test_reload
end

def test_to_yaml
assert_equal "--- \n"+yaml_entry(5,1,"date","1961-11-21"), @oo.to_yaml({}, 5,1,5,1)
assert_equal "--- \n"+yaml_entry(8,3,"string","thisisc8"), @oo.to_yaml({}, 8,3,8,3)
assert_equal "--- \n"+yaml_entry(12,3,"float",43.0), @oo.to_yaml({}, 12,3,12,3)
assert_equal "--- \n" + yaml_entry(5, 1, 'date', '1961-11-21'), @oo.to_yaml({}, 5, 1, 5, 1)
assert_equal "--- \n" + yaml_entry(8, 3, 'string', 'thisisc8'), @oo.to_yaml({}, 8, 3, 8, 3)
assert_equal "--- \n" + yaml_entry(12, 3, 'float', 43.0), @oo.to_yaml({}, 12, 3, 12, 3)
assert_equal \
"--- \n"+yaml_entry(12,3,"float",43.0) +
yaml_entry(12,4,"float",44.0) +
yaml_entry(12,5,"float",45.0), @oo.to_yaml({}, 12,3,12)
"--- \n" + yaml_entry(12, 3, 'float', 43.0) +
yaml_entry(12, 4, 'float', 44.0) +
yaml_entry(12, 5, 'float', 45.0), @oo.to_yaml({}, 12, 3, 12)
assert_equal \
"--- \n"+yaml_entry(12,3,"float",43.0)+
yaml_entry(12,4,"float",44.0)+
yaml_entry(12,5,"float",45.0)+
yaml_entry(15,3,"float",43.0)+
yaml_entry(15,4,"float",44.0)+
yaml_entry(15,5,"float",45.0)+
yaml_entry(16,3,"string","dreiundvierzig")+
yaml_entry(16,4,"string","vierundvierzig")+
yaml_entry(16,5,"string","fuenfundvierzig"), @oo.to_yaml({}, 12,3)
"--- \n" + yaml_entry(12, 3, 'float', 43.0) +
yaml_entry(12, 4, 'float', 44.0) +
yaml_entry(12, 5, 'float', 45.0) +
yaml_entry(15, 3, 'float', 43.0) +
yaml_entry(15, 4, 'float', 44.0) +
yaml_entry(15, 5, 'float', 45.0) +
yaml_entry(16, 3, 'string', 'dreiundvierzig') +
yaml_entry(16, 4, 'string', 'vierundvierzig') +
yaml_entry(16, 5, 'string', 'fuenfundvierzig'), @oo.to_yaml({}, 12, 3)
end

def test_to_csv
assert_equal expected_csv,@oo.to_csv
assert_equal expected_csv, @oo.to_csv
end

def test_to_csv_with_separator
assert_equal expected_csv_with_semicolons,@oo.to_csv(nil, ';')
assert_equal expected_csv_with_semicolons, @oo.to_csv(nil, ';')
end
protected
def setup_test_sheet(workbook=nil)

protected

def setup_test_sheet(workbook = nil)
workbook ||= @oo
set_sheet_values(workbook)
set_sheet_types(workbook)
Expand All @@ -133,68 +133,70 @@ def setup_test_sheet(workbook=nil)

def set_sheet_values(workbook)
workbook.instance_variable_get(:@cell)[workbook.default_sheet] = {
[5,1] => Date.civil(1961,11,21).to_s,
[5, 1] => Date.civil(1961, 11, 21).to_s,

[8,3] => "thisisc8",
[8,7] => "thisisg8",
[8, 3] => 'thisisc8',
[8, 7] => 'thisisg8',

[12,1] => 41.0,
[12,2] => 42.0,
[12,3] => 43.0,
[12,4] => 44.0,
[12,5] => 45.0,
[12, 1] => 41.0,
[12, 2] => 42.0,
[12, 3] => 43.0,
[12, 4] => 44.0,
[12, 5] => 45.0,

[15,3] => 43.0,
[15,4] => 44.0,
[15,5] => 45.0,
[15, 3] => 43.0,
[15, 4] => 44.0,
[15, 5] => 45.0,

[16,3] => "dreiundvierzig",
[16,4] => "vierundvierzig",
[16,5] => "fuenfundvierzig"
[16, 2] => '"Hello world!"',
[16, 3] => 'dreiundvierzig',
[16, 4] => 'vierundvierzig',
[16, 5] => 'fuenfundvierzig'
}
end

def set_sheet_types(workbook)
workbook.instance_variable_get(:@cell_type)[workbook.default_sheet] = {
[5,1] => :date,
[5, 1] => :date,

[8,3] => :string,
[8,7] => :string,
[8, 3] => :string,
[8, 7] => :string,

[12,1] => :float,
[12,2] => :float,
[12,3] => :float,
[12,4] => :float,
[12,5] => :float,
[12, 1] => :float,
[12, 2] => :float,
[12, 3] => :float,
[12, 4] => :float,
[12, 5] => :float,

[15,3] => :float,
[15,4] => :float,
[15,5] => :float,
[15, 3] => :float,
[15, 4] => :float,
[15, 5] => :float,

[16,3] => :string,
[16,4] => :string,
[16,5] => :string,
[16, 2] => :string,
[16, 3] => :string,
[16, 4] => :string,
[16, 5] => :string
}
end

def set_first_row(workbook)
row_hash = workbook.instance_variable_get(:@first_row)
row_hash[workbook.default_sheet] = workbook.instance_variable_get(:@cell)[workbook.default_sheet].map{|k,v| k[0]}.min
row_hash[workbook.default_sheet] = workbook.instance_variable_get(:@cell)[workbook.default_sheet].map { |k, _v| k[0] }.min
end

def set_last_row(workbook)
row_hash = workbook.instance_variable_get(:@last_row)
row_hash[workbook.default_sheet] = workbook.instance_variable_get(:@cell)[workbook.default_sheet].map{|k,v| k[0]}.max
row_hash[workbook.default_sheet] = workbook.instance_variable_get(:@cell)[workbook.default_sheet].map { |k, _v| k[0] }.max
end

def set_first_col(workbook)
col_hash = workbook.instance_variable_get(:@first_column)
col_hash[workbook.default_sheet] = workbook.instance_variable_get(:@cell)[workbook.default_sheet].map{|k,v| k[1]}.min
col_hash[workbook.default_sheet] = workbook.instance_variable_get(:@cell)[workbook.default_sheet].map { |k, _v| k[1] }.min
end

def set_last_col(workbook)
col_hash = workbook.instance_variable_get(:@last_column)
col_hash[workbook.default_sheet] = workbook.instance_variable_get(:@cell)[workbook.default_sheet].map{|k,v| k[1]}.max
col_hash[workbook.default_sheet] = workbook.instance_variable_get(:@cell)[workbook.default_sheet].map { |k, _v| k[1] }.max
end

def set_cells_read(workbook)
Expand All @@ -203,9 +205,27 @@ def set_cells_read(workbook)
end

def expected_csv
",,,,,,\n,,,,,,\n,,,,,,\n,,,,,,\n1961-11-21,,,,,,\n,,,,,,\n,,,,,,\n,,\"thisisc8\",,,,\"thisisg8\"\n,,,,,,\n,,,,,,\n,,,,,,\n41,42,43,44,45,,\n,,,,,,\n,,,,,,\n,,43,44,45,,\n,,\"dreiundvierzig\",\"vierundvierzig\",\"fuenfundvierzig\",,\n"
<<EOS
,,,,,,
,,,,,,
,,,,,,
,,,,,,
1961-11-21,,,,,,
,,,,,,
,,,,,,
,,"thisisc8",,,,"thisisg8"
,,,,,,
,,,,,,
,,,,,,
41,42,43,44,45,,
,,,,,,
,,,,,,
,,43,44,45,,
,"""Hello world!""","dreiundvierzig","vierundvierzig","fuenfundvierzig",,
EOS
end

def expected_csv_with_semicolons
expected_csv.gsub /\,/, ';'
expected_csv.gsub(/\,/, ';')
end
end

0 comments on commit fcc9a01

Please sign in to comment.