From b264e9e0879e086eda05ccc12b58e1853311aaac Mon Sep 17 00:00:00 2001 From: David Carlin Date: Mon, 7 Jan 2019 11:42:23 +1100 Subject: [PATCH 1/2] Failing test to show that ampersand gets escaped --- spec/fixtures/escaped.xlsx | Bin 0 -> 3549 bytes spec/sheet_spec.rb | 6 ++++++ 2 files changed, 6 insertions(+) create mode 100644 spec/fixtures/escaped.xlsx diff --git a/spec/fixtures/escaped.xlsx b/spec/fixtures/escaped.xlsx new file mode 100644 index 0000000000000000000000000000000000000000..a8ee7724dbdb4eb321de419dca07334fefd8e661 GIT binary patch literal 3549 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 Sy#FOVa2W!*3)=sC1N{e; Date: Mon, 7 Jan 2019 12:03:55 +1100 Subject: [PATCH 2/2] Added working example for when xlsx file uses shared strings --- spec/fixtures/escaped2.xlsx | Bin 0 -> 8572 bytes spec/sheet_spec.rb | 14 ++++++++++---- 2 files changed, 10 insertions(+), 4 deletions(-) create mode 100644 spec/fixtures/escaped2.xlsx diff --git a/spec/fixtures/escaped2.xlsx b/spec/fixtures/escaped2.xlsx new file mode 100644 index 0000000000000000000000000000000000000000..7a70942487bd224317b251d9ce87249addb8e284 GIT binary patch literal 8572 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 literal 0 HcmV?d00001 diff --git a/spec/sheet_spec.rb b/spec/sheet_spec.rb index 59bd14e..4d2ef14 100644 --- a/spec/sheet_spec.rb +++ b/spec/sheet_spec.rb @@ -3,19 +3,25 @@ describe 'sheet' do let(:book_with_images) { Creek::Book.new('spec/fixtures/sample-with-images.xlsx') } let(:book_no_images) { Creek::Book.new('spec/fixtures/sample.xlsx') } - let(:book_escaped) { Creek::Book.new('spec/fixtures/escaped.xlsx') } let(:sheetfile) { 'worksheets/sheet1.xml' } let(:sheet_with_images) { Creek::Sheet.new(book_with_images, 'Sheet 1', 1, '', '', '1', sheetfile) } let(:sheet_no_images) { Creek::Sheet.new(book_no_images, 'Sheet 1', 1, '', '', '1', sheetfile) } - let(:sheet_escaped) { book_escaped.sheets[0] } def load_cell(rows, cell_name) cell = rows.find { |row| !row[cell_name].nil? } cell[cell_name] if cell end - it 'does not escape ampersand' do - expect(sheet_escaped.rows.to_enum.map(&:values)).to eq([["abc", "def"], ["ghi", "j&k"]]) + context 'escaped ampersand' do + let(:book_escaped) { Creek::Book.new('spec/fixtures/escaped.xlsx') } + it 'does NOT escape ampersand' do + expect(book_escaped.sheets[0].rows.to_enum.map(&:values)).to eq([["abc", "def"], ["ghi", "j&k"]]) + end + + let(:book_escaped2) { Creek::Book.new('spec/fixtures/escaped2.xlsx') } + it 'does escape ampersand' do + expect(book_escaped2.sheets[0].rows.to_enum.map(&:values)).to eq([["abc", "def"], ["ghi", "j&k"]]) + end end describe '#rows' do