spec/lib/roo/xls/excel2003xml_spec.rb in roo-xls-1.1.0 vs spec/lib/roo/xls/excel2003xml_spec.rb in roo-xls-1.2.0
- old
+ new
@@ -1,15 +1,205 @@
require 'spec_helper'
-describe Roo::Excel2003XML do
+RSpec.describe Roo::Excel2003XML do
+ subject { instance }
+
+ let(:instance) { described_class.new(path) }
+ let(:path) { File.join(test_files_dir, test_file) }
+ let(:test_files_dir) { 'test/files' }
+
describe '.new' do
context 'with an xml file' do
- let(:path) { 'test/files/datetime.xml' }
+ let(:test_file) { 'datetime.xml' }
- it 'loads the file' do
- expect {
- Roo::Excel2003XML.new(path)
- }.to_not raise_error
+ it 'loads the file without error' do
+ expect { subject }.to_not raise_error
+ end
+ end
+ end
+
+ describe '#cell' do
+ subject { super().cell(cell[:row], cell[:col]) }
+
+ before(:each) { instance.default_sheet = instance.sheets.first }
+
+ context 'with merged cells' do
+ # See font_colors_screenshot_in_Mac_Excel_16.10.png for a screenshot of
+ # this how this file looks in Mac Excel 16.10.
+ let(:test_file) { 'font_colors.xml' }
+
+ context 'the top-left cell in a merged cell' do
+ let(:cell) { { :row => 1, :col => 'A' } }
+
+ it 'returns the contents of the merged cell' do
+ is_expected.to eq 'Roo::Xls Test of Font Colors'
+ end
+ end
+
+ context 'the cell to the right of the top-left cell in a merged cell' do
+ let(:cell) { { :row => 2, :col => 'A' } }
+ it { is_expected.to be_nil }
+ end
+
+ context 'the cell below the top-left cell in a merged cell' do
+ let(:cell) { { :row => 2, :col => 'B' } }
+ it { is_expected.to be_nil }
+ end
+
+ context 'the first cell to the right of an entire merged cell' do
+ let(:cell) { { :row => 1, :col => 'K' } }
+
+ it 'returns the expected contents' do
+ is_expected.to eq 'This entire COLUMN should be ITALIC and GREEN'
+ end
+ end
+
+ context 'the first cell below an entire merged cell' do
+ let(:cell) { { :row => 6, :col => 'A' } }
+
+ it 'returns the expected contents' do
+ is_expected.to eq '(The above should be font "Courier New", size 24)'
+ end
+ end
+ end
+ end
+
+ describe '#font' do
+ subject { super().font(cell[:row], cell[:col]) }
+
+ before(:each) { instance.default_sheet = instance.sheets.first }
+
+ # See font_colors_screenshot_in_Mac_Excel_16.10.png for a screenshot of
+ # this how this file looks in Mac Excel 16.10.
+ let(:test_file) { 'font_colors.xml' }
+
+ let(:default_attrs) do
+ {
+ :name => 'Arial',
+ :size => '12',
+ :color => '#000000',
+ :bold? => false,
+ :italic? => false,
+ :underline? => false
+ }
+ end
+
+ let(:expected_attrs) { default_attrs }
+
+ context 'with no font styling' do
+ let(:cell) { { :row => 6, :col => 'A' } }
+
+ it 'returns default font attributes' do
+ is_expected.to have_attributes(default_attrs)
+ end
+ end
+
+ context 'with styling set on an individual cell' do
+ context 'when set font name and size' do
+ let(:cell) { { :row => 1, :col => 'A' } }
+
+ it 'returns expected font attributes including name and size' do
+ expects = default_attrs.merge({ :name => 'Courier New', :size => '24' })
+ is_expected.to have_attributes(expects)
+ end
+ end
+
+ context 'when colored BLACK' do
+ let(:cell) { { :row => 7, :col => 'A' } }
+
+ it 'returns default font attributes (which include black)' do
+ is_expected.to have_attributes(default_attrs)
+ end
+ end
+
+ context 'when colored RED' do
+ let(:cell) { { :row => 8, :col => 'A' } }
+
+ it 'returns defaults plus red color' do
+ expects = default_attrs.merge({ :color => '#FF0000' })
+ is_expected.to have_attributes(expects)
+ end
+ end
+
+ context 'when colored BLUE' do
+ let(:cell) { { :row => 9, :col => 'A' } }
+
+ it 'returns defaults plus blue color' do
+ expects = default_attrs.merge({ :color => '#0066CC' })
+ is_expected.to have_attributes(expects)
+ end
+ end
+
+ context 'when BOLD' do
+ let(:cell) { { :row => 10, :col => 'A' } }
+
+ it 'returns defaults plus bold style' do
+ # somehow in Excel, this ended up "no color" rather than black...
+ expects = default_attrs.merge({ :bold? => true, :color => nil })
+ is_expected.to have_attributes(expects)
+ end
+ end
+
+ context 'when ITALIC' do
+ let(:cell) { { :row => 11, :col => 'A' } }
+
+ it 'returns defaults plus italic style' do
+ # somehow in Excel, this ended up "no color" rather than black...
+ expects = default_attrs.merge({ :italic? => true, :color => nil })
+ is_expected.to have_attributes(expects)
+ end
+ end
+
+ context 'when UNDERLINED' do
+ let(:cell) { { :row => 12, :col => 'A' } }
+
+ it 'returns defaults plus underlined style' do
+ # somehow in Excel, this ended up "no color" rather than black...
+ expects = default_attrs.merge({ :underline? => true, :color => nil })
+ is_expected.to have_attributes(expects)
+ end
+ end
+
+ context 'when BOLD, ITALIC, UNDERLINED, and colored PURPLE' do
+ let(:cell) { { :row => 13, :col => 'A' } }
+
+ it 'returns defaults plus bold, italic, underlined, and purple color' do
+ expects = default_attrs.merge({
+ :color => '#666699',
+ :bold? => true,
+ :italic? => true,
+ :underline? => true
+ })
+ is_expected.to have_attributes(expects)
+ end
+ end
+ end
+
+ context 'with styling set on an entire row' do
+ let(:row_style) do
+ default_attrs.merge({ :color => '#ED7D31', :bold? => true })
+ end
+
+ context 'when no cell styling' do
+ let(:cell) { { :row => 14, :col => 'L' } }
+
+ it 'returns the row style' do
+ is_expected.to have_attributes(row_style)
+ end
+ end
+ end
+
+ context 'with styling set on an entire column' do
+ let(:col_style) do
+ default_attrs.merge({ :color => '#00FF00', :italic? => true })
+ end
+
+ context 'when no cell styling' do
+ let(:cell) { { :row => 20, :col => 'K' } }
+
+ it 'returns the column style' do
+ is_expected.to have_attributes(col_style)
+ end
end
end
end
end