diff options
| author | Weston Ganger <[email protected]> | 2022-10-12 23:02:49 -0700 |
|---|---|---|
| committer | Weston Ganger <[email protected]> | 2022-10-12 23:10:08 -0700 |
| commit | 28d59a1dba55a9d98ceed26ac3bed6267cf18481 (patch) | |
| tree | 5b05b8926dd301f7bf0e714df848a5a209653348 /test | |
| parent | 56f0977033d87c29fbcb5a20f0bd61d8fe3fb1ec (diff) | |
| download | caxlsx-28d59a1dba55a9d98ceed26ac3bed6267cf18481.tar.gz caxlsx-28d59a1dba55a9d98ceed26ac3bed6267cf18481.zip | |
Resolve all TODOs
Diffstat (limited to 'test')
| -rw-r--r-- | test/tc_axlsx | 0 | ||||
| -rw-r--r-- | test/tc_axlsx_styler.rb | 284 | ||||
| -rw-r--r-- | test/tc_package.rb | 35 | ||||
| -rw-r--r-- | test/workbook/worksheet/tc_border_creator.rb | 43 | ||||
| -rw-r--r-- | test/workbook/worksheet/tc_worksheet.rb | 244 |
5 files changed, 317 insertions, 289 deletions
diff --git a/test/tc_axlsx b/test/tc_axlsx deleted file mode 100644 index e69de29b..00000000 --- a/test/tc_axlsx +++ /dev/null diff --git a/test/tc_axlsx_styler.rb b/test/tc_axlsx_styler.rb deleted file mode 100644 index e790a458..00000000 --- a/test/tc_axlsx_styler.rb +++ /dev/null @@ -1,284 +0,0 @@ -# encoding: UTF-8 -require 'tc_helper.rb' - -class TestAxlsxStyler < Test::Unit::TestCase - - def test_to_stream_automatically_performs_apply_styles - p = Axlsx::Package.new - wb = p.workbook - - assert_nil wb.styles_applied - wb.add_worksheet do |sheet| - sheet.add_row ['A1', 'B1'] - sheet.add_style 'A1:B1', b: true - end - - p.to_stream - - assert_equal 1, wb.styles.style_index.count - end - - def test_serialize_automatically_performs_apply_styles - p = Axlsx::Package.new - wb = p.workbook - - assert_nil wb.styles_applied - wb.add_worksheet do |sheet| - sheet.add_row ['A1', 'B1'] - sheet.add_style 'A1:B1', b: true - end - - @fname = 'axlsx_test_serialization.xlsx' - - p.serialize(@fname) - - assert_equal true, wb.styles_applied - assert_equal 1, wb.styles.style_index.count - - File.delete(@fname) - end - - def test_merge_styles_1 - p = Axlsx::Package.new - wb = p.workbook - - bold = wb.styles.add_style b: true - - wb.add_worksheet do |sheet| - sheet.add_row - sheet.add_row ['', '1', '2', '3'], style: [nil, bold] - sheet.add_row ['', '4', '5', '6'], style: bold - sheet.add_row ['', '7', '8', '9'] - sheet.add_style 'B2:D4', b: true - sheet.add_border 'B2:D4', { style: :thin, color: '000000' } - end - - wb.apply_styles - - assert_equal 9, wb.styles.style_index.count - end - - def test_merge_styles_2 - p = Axlsx::Package.new - wb = p.workbook - - bold = wb.styles.add_style b: true - - wb.add_worksheet do |sheet| - sheet.add_row ['A1', 'B1'], style: [nil, bold] - sheet.add_row ['A2', 'B2'], style: bold - sheet.add_row ['A3', 'B3'] - sheet.add_style 'A1:A2', i: true - end - - wb.apply_styles - - assert_equal 3, wb.styles.style_index.count - end - - def test_merge_styles_3 - p = Axlsx::Package.new - wb = p.workbook - - bold = wb.styles.add_style b: true - - wb.add_worksheet do |sheet| - sheet.add_row ['A1', 'B1'], style: [nil, bold] - sheet.add_row ['A2', 'B2'] - sheet.add_style 'B1:B2', bg_color: 'FF0000' - end - - wb.apply_styles - - assert_equal 3, wb.styles.style_index.count - end - - def test_table_with_borders - p = Axlsx::Package.new - wb = p.workbook - - wb.add_worksheet do |sheet| - sheet.add_row - sheet.add_row ['', 'Product', 'Category', 'Price'] - sheet.add_row ['', 'Butter', 'Dairy', 4.99] - sheet.add_row ['', 'Bread', 'Baked Goods', 3.45] - sheet.add_row ['', 'Broccoli', 'Produce', 2.99] - sheet.add_row ['', 'Pizza', 'Frozen Foods', 4.99] - sheet.column_widths 5, 20, 20, 20 - - sheet.add_style 'B2:D2', b: true - sheet.add_style 'B2:B6', b: true - sheet.add_style 'B2:D2', bg_color: '95AFBA' - sheet.add_style 'B3:D6', bg_color: 'E2F89C' - sheet.add_style 'D3:D6', alignment: { horizontal: :left } - sheet.add_border 'B2:D6' - sheet.add_border 'B3:D3', [:top] - sheet.add_border 'B3:D3', edges: [:bottom], style: :medium - sheet.add_border 'B3:D3', edges: [:bottom], style: :medium, color: '32f332' - end - - wb.apply_styles - - assert_equal true, wb.styles_applied - assert_equal 12, wb.styles.style_index.count - assert_equal 12 + 2, wb.styles.style_index.keys.max - end - - def test_duplicate_borders - p = Axlsx::Package.new - wb = p.workbook - - wb.add_worksheet do |sheet| - sheet.add_row - sheet.add_row ['', 'B2', 'C2', 'D2'] - sheet.add_row ['', 'B3', 'C3', 'D3'] - sheet.add_row ['', 'B4', 'C4', 'D4'] - - sheet.add_border 'B2:D4' - sheet.add_border 'B2:D4' - end - - wb.apply_styles - - assert_equal true, wb.styles_applied - assert_equal 8, wb.styles.style_index.count - assert_equal 8, wb.styled_cells.count - end - - def test_multiple_style_borders_on_same_cells - p = Axlsx::Package.new - wb = p.workbook - - wb.add_worksheet do |sheet| - sheet.add_row - sheet.add_row ['', 'B2', 'C2', 'D2'] - sheet.add_row ['', 'B3', 'C3', 'D3'] - - sheet.add_border 'B2:D3', :all - sheet.add_border 'B2:D2', edges: [:bottom], style: :thick, color: 'ff0000' - end - - wb.apply_styles - - assert_equal true, wb.styles_applied - assert_equal 6, wb.styles.style_index.count - assert_equal 6, wb.styled_cells.count - - b2_cell_style = { - border: { - style: :thick, - color: 'ff0000', - edges: [:bottom, :left, :top] - }, - type: :xf, - name: 'Arial', - sz: 11, - family: 1 - } - assert_equal b2_cell_style, wb.styles.style_index.values.find{|x| x == b2_cell_style} - - d3_cell_style = { - border: { - style: :thin, - color: '000000', - edges: [:bottom, :right] - }, - type: :xf, - name: 'Arial', - sz: 11, - family: 1 - } - assert_equal d3_cell_style, wb.styles.style_index.values.find{|x| x == d3_cell_style} - end - - def test_mixed_borders_1 - p = Axlsx::Package.new - wb = p.workbook - - wb.add_worksheet do |sheet| - sheet.add_row - sheet.add_row ['', '1', '2', '3'] - sheet.add_row ['', '4', '5', '6'] - sheet.add_row ['', '7', '8', '9'] - sheet.add_style 'B2:D4', border: { style: :thin, color: '000000' } - sheet.add_border 'C3:D4', style: :medium - end - - wb.apply_styles - - assert_equal 9, wb.styled_cells.count - assert_equal 2, wb.styles.style_index.count - end - - def test_mixed_borders_2 - p = Axlsx::Package.new - wb = p.workbook - - wb.add_worksheet do |sheet| - sheet.add_row - sheet.add_row ['', '1', '2', '3'] - sheet.add_row ['', '4', '5', '6'] - sheet.add_row ['', '7', '8', '9'] - sheet.add_border 'B2:D4', style: :medium - sheet.add_style 'D2:D4', border: { style: :thin, color: '000000' } - end - - wb.apply_styles - - assert_equal 8, wb.styled_cells.count - assert_equal 6, wb.styles.style_index.count - end - - def test_dxf_cell - p = Axlsx::Package.new - wb = p.workbook - - wb.add_worksheet do |sheet| - sheet.add_row (1..2).to_a - sheet.add_style "A1:A1", { bg_color: "AA0000" } - - sheet.add_row (1..2).to_a - sheet.add_style "B1:B1", { bg_color: "CC0000" } - - sheet.add_row (1..2).to_a - sheet.add_style "A3:B3", { bg_color: "00FF00" } - - wb.styles.add_style(bg_color: "0000FF", type: :dxf) - end - - wb.apply_styles - - assert_equal 1, wb.styles.dxfs.count - - assert_equal 6, wb.styles.cellXfs.count - end - - def test_default_font_with_style_index - p = Axlsx::Package.new - wb = p.workbook - - wb.styles.fonts[0].name = 'Pontiac' ### TODO, is this a valid font name in all environments - wb.styles.fonts[0].sz = 12 - - wb.add_worksheet do |sheet| - sheet.add_row [1,2,3] - sheet.add_style "A1:C1", { color: "FFFFFF" } - end - - wb.apply_styles - - assert_equal 1, wb.styles.style_index.size - - assert_equal( - { - type: :xf, - name: "Pontiac", - sz: 12, - family: 1, - color: "FFFFFF", - }, - wb.styles.style_index.values.first - ) - end - -end diff --git a/test/tc_package.rb b/test/tc_package.rb index 79fe20f5..0788d029 100644 --- a/test/tc_package.rb +++ b/test/tc_package.rb @@ -157,6 +157,26 @@ class TestPackage < Test::Unit::TestCase end end + def test_serialize_automatically_performs_apply_styles + p = Axlsx::Package.new + wb = p.workbook + + assert_nil wb.styles_applied + wb.add_worksheet do |sheet| + sheet.add_row ['A1', 'B1'] + sheet.add_style 'A1:B1', b: true + end + + @fname = 'axlsx_test_serialization.xlsx' + + p.serialize(@fname) + + assert_equal true, wb.styles_applied + assert_equal 1, wb.styles.style_index.count + + File.delete(@fname) + end + def assert_zip_file_matches_package(fname, package) zf = Zip::File.open(fname) package.send(:parts).each{ |part| zf.get_entry(part[:entry]) } @@ -305,6 +325,21 @@ class TestPackage < Test::Unit::TestCase assert(Axlsx::Relationship.ids_cache.empty?) end + def test_to_stream_automatically_performs_apply_styles + p = Axlsx::Package.new + wb = p.workbook + + assert_nil wb.styles_applied + wb.add_worksheet do |sheet| + sheet.add_row ['A1', 'B1'] + sheet.add_style 'A1:B1', b: true + end + + p.to_stream + + assert_equal 1, wb.styles.style_index.count + end + def test_encrypt # this is no where near close to ready yet assert(@package.encrypt('your_mom.xlsxl', 'has a password') == false) diff --git a/test/workbook/worksheet/tc_border_creator.rb b/test/workbook/worksheet/tc_border_creator.rb index 95a85b18..86b47fc1 100644 --- a/test/workbook/worksheet/tc_border_creator.rb +++ b/test/workbook/worksheet/tc_border_creator.rb @@ -13,16 +13,26 @@ class TestBorderCreator < Test::Unit::TestCase end bc = Axlsx::BorderCreator.new(@ws, @ws["A1:B2"], {}) - assert_equal bc.instance_variable_get(:@edges), :all + assert_equal bc.instance_variable_get(:@edges), Axlsx::Border::EDGES assert_equal bc.instance_variable_get(:@width), :thin assert_equal bc.instance_variable_get(:@color), "000000" - bc = Axlsx::BorderCreator.new(@ws, @ws["A1:B2"], [:top]) + bc = Axlsx::BorderCreator.new(@ws, @ws["A1:B2"], ["top"]) assert_equal bc.instance_variable_get(:@edges), [:top] assert_equal bc.instance_variable_get(:@width), :thin assert_equal bc.instance_variable_get(:@color), "000000" - bc = Axlsx::BorderCreator.new(@ws, @ws["A1:B2"], {edges: [:top], style: :thick, color: "ffffff"}) + bc = Axlsx::BorderCreator.new(@ws, @ws["A1:B2"], :all) + assert_equal bc.instance_variable_get(:@edges), Axlsx::Border::EDGES + assert_equal bc.instance_variable_get(:@width), :thin + assert_equal bc.instance_variable_get(:@color), "000000" + + bc = Axlsx::BorderCreator.new(@ws, @ws["A1:B2"], [:foo]) + assert_equal bc.instance_variable_get(:@edges), [] + assert_equal bc.instance_variable_get(:@width), :thin + assert_equal bc.instance_variable_get(:@color), "000000" + + bc = Axlsx::BorderCreator.new(@ws, @ws["A1:B2"], {edges: ["top"], style: :thick, color: "ffffff"}) assert_equal bc.instance_variable_get(:@edges), [:top] assert_equal bc.instance_variable_get(:@width), :thick assert_equal bc.instance_variable_get(:@color), "ffffff" @@ -33,8 +43,31 @@ class TestBorderCreator < Test::Unit::TestCase @ws.add_row [1,2,3,4,5] end - bc = Axlsx::BorderCreator.new(@ws, @ws["A1:C3"], {}) + bc = Axlsx::BorderCreator.new(@ws, @ws["A1:C3"], {edges: ["top", :left], style: :thick, color: "ffffff"}) + bc.draw - # TODO add more expectations + + assert_equal 2, @ws.styles.borders.size + + @wb.apply_styles + + assert_equal 5, @ws.styles.borders.size + + assert_equal 2, @ws.styles.borders[2].prs.size + assert_equal ["FFFFFFFF"], @ws.styles.borders[2].prs.map(&:color).map(&:rgb).uniq + assert_equal [:thick], @ws.styles.borders[2].prs.map(&:style).uniq + assert_equal [:left, :top], @ws.styles.borders[2].prs.map(&:name) + + + assert_equal 1, @ws.styles.borders[3].prs.size + assert_equal ["FFFFFFFF"], @ws.styles.borders[3].prs.map(&:color).map(&:rgb).uniq + assert_equal [:thick], @ws.styles.borders[3].prs.map(&:style).uniq + assert_equal [:top], @ws.styles.borders[3].prs.map(&:name) + + assert_equal 1, @ws.styles.borders[4].prs.size + assert_equal ["FFFFFFFF"], @ws.styles.borders[4].prs.map(&:color).map(&:rgb).uniq + assert_equal [:thick], @ws.styles.borders[4].prs.map(&:style).uniq + assert_equal [:left], @ws.styles.borders[4].prs.map(&:name) end + end diff --git a/test/workbook/worksheet/tc_worksheet.rb b/test/workbook/worksheet/tc_worksheet.rb index c679e18c..6dbea530 100644 --- a/test/workbook/worksheet/tc_worksheet.rb +++ b/test/workbook/worksheet/tc_worksheet.rb @@ -629,4 +629,248 @@ class TestWorksheet < Test::Unit::TestCase assert_equal(doc.xpath('//xmlns:worksheet/xmlns:sheetPr/xmlns:outlinePr').size, 1) assert_equal(doc.xpath('//xmlns:worksheet/xmlns:sheetPr/xmlns:outlinePr[@summaryBelow=0][@summaryRight=1]').size, 1) end + + def test_merge_styles_1 + p = Axlsx::Package.new + wb = p.workbook + + bold = wb.styles.add_style b: true + + wb.add_worksheet do |sheet| + sheet.add_row + sheet.add_row ['', '1', '2', '3'], style: [nil, bold] + sheet.add_row ['', '4', '5', '6'], style: bold + sheet.add_row ['', '7', '8', '9'] + sheet.add_style 'B2:D4', b: true + sheet.add_border 'B2:D4', { style: :thin, color: '000000' } + end + + wb.apply_styles + + assert_equal 9, wb.styles.style_index.count + end + + def test_merge_styles_2 + p = Axlsx::Package.new + wb = p.workbook + + bold = wb.styles.add_style b: true + + wb.add_worksheet do |sheet| + sheet.add_row ['A1', 'B1'], style: [nil, bold] + sheet.add_row ['A2', 'B2'], style: bold + sheet.add_row ['A3', 'B3'] + sheet.add_style 'A1:A2', i: true + end + + wb.apply_styles + + assert_equal 3, wb.styles.style_index.count + end + + def test_merge_styles_3 + p = Axlsx::Package.new + wb = p.workbook + + bold = wb.styles.add_style b: true + + wb.add_worksheet do |sheet| + sheet.add_row ['A1', 'B1'], style: [nil, bold] + sheet.add_row ['A2', 'B2'] + sheet.add_style 'B1:B2', bg_color: 'FF0000' + end + + wb.apply_styles + + assert_equal 3, wb.styles.style_index.count + end + + def test_table_with_borders + p = Axlsx::Package.new + wb = p.workbook + + wb.add_worksheet do |sheet| + sheet.add_row + sheet.add_row ['', 'Product', 'Category', 'Price'] + sheet.add_row ['', 'Butter', 'Dairy', 4.99] + sheet.add_row ['', 'Bread', 'Baked Goods', 3.45] + sheet.add_row ['', 'Broccoli', 'Produce', 2.99] + sheet.add_row ['', 'Pizza', 'Frozen Foods', 4.99] + sheet.column_widths 5, 20, 20, 20 + + sheet.add_style 'B2:D2', b: true + sheet.add_style 'B2:B6', b: true + sheet.add_style 'B2:D2', bg_color: '95AFBA' + sheet.add_style 'B3:D6', bg_color: 'E2F89C' + sheet.add_style 'D3:D6', alignment: { horizontal: :left } + sheet.add_border 'B2:D6' + sheet.add_border 'B3:D3', [:top] + sheet.add_border 'B3:D3', edges: [:bottom], style: :medium + sheet.add_border 'B3:D3', edges: [:bottom], style: :medium, color: '32f332' + end + + wb.apply_styles + + assert_equal true, wb.styles_applied + assert_equal 12, wb.styles.style_index.count + assert_equal 12 + 2, wb.styles.style_index.keys.max + end + + def test_duplicate_borders + p = Axlsx::Package.new + wb = p.workbook + + wb.add_worksheet do |sheet| + sheet.add_row + sheet.add_row ['', 'B2', 'C2', 'D2'] + sheet.add_row ['', 'B3', 'C3', 'D3'] + sheet.add_row ['', 'B4', 'C4', 'D4'] + + sheet.add_border 'B2:D4' + sheet.add_border 'B2:D4' + end + + wb.apply_styles + + assert_equal true, wb.styles_applied + assert_equal 8, wb.styles.style_index.count + assert_equal 8, wb.styled_cells.count + end + + def test_multiple_style_borders_on_same_cells + p = Axlsx::Package.new + wb = p.workbook + + wb.add_worksheet do |sheet| + sheet.add_row + sheet.add_row ['', 'B2', 'C2', 'D2'] + sheet.add_row ['', 'B3', 'C3', 'D3'] + + sheet.add_border 'B2:D3', :all + sheet.add_border 'B2:D2', edges: [:bottom], style: :thick, color: 'ff0000' + end + + wb.apply_styles + + assert_equal true, wb.styles_applied + assert_equal 6, wb.styles.style_index.count + assert_equal 6, wb.styled_cells.count + + b2_cell_style = { + border: { + style: :thick, + color: 'ff0000', + edges: [:bottom, :left, :top] + }, + type: :xf, + name: 'Arial', + sz: 11, + family: 1 + } + assert_equal b2_cell_style, wb.styles.style_index.values.find{|x| x == b2_cell_style} + + d3_cell_style = { + border: { + style: :thin, + color: '000000', + edges: [:bottom, :right] + }, + type: :xf, + name: 'Arial', + sz: 11, + family: 1 + } + assert_equal d3_cell_style, wb.styles.style_index.values.find{|x| x == d3_cell_style} + end + + def test_mixed_borders_1 + p = Axlsx::Package.new + wb = p.workbook + + wb.add_worksheet do |sheet| + sheet.add_row + sheet.add_row ['', '1', '2', '3'] + sheet.add_row ['', '4', '5', '6'] + sheet.add_row ['', '7', '8', '9'] + sheet.add_style 'B2:D4', border: { style: :thin, color: '000000' } + sheet.add_border 'C3:D4', style: :medium + end + + wb.apply_styles + + assert_equal 9, wb.styled_cells.count + assert_equal 2, wb.styles.style_index.count + end + + def test_mixed_borders_2 + p = Axlsx::Package.new + wb = p.workbook + + wb.add_worksheet do |sheet| + sheet.add_row + sheet.add_row ['', '1', '2', '3'] + sheet.add_row ['', '4', '5', '6'] + sheet.add_row ['', '7', '8', '9'] + sheet.add_border 'B2:D4', style: :medium + sheet.add_style 'D2:D4', border: { style: :thin, color: '000000' } + end + + wb.apply_styles + + assert_equal 8, wb.styled_cells.count + assert_equal 6, wb.styles.style_index.count + end + + def test_dxf_cell + p = Axlsx::Package.new + wb = p.workbook + + wb.add_worksheet do |sheet| + sheet.add_row (1..2).to_a + sheet.add_style "A1:A1", { bg_color: "AA0000" } + + sheet.add_row (1..2).to_a + sheet.add_style "B1:B1", { bg_color: "CC0000" } + + sheet.add_row (1..2).to_a + sheet.add_style "A3:B3", { bg_color: "00FF00" } + + wb.styles.add_style(bg_color: "0000FF", type: :dxf) + end + + wb.apply_styles + + assert_equal 1, wb.styles.dxfs.count + + assert_equal 6, wb.styles.cellXfs.count + end + + def test_default_font_with_style_index + p = Axlsx::Package.new + wb = p.workbook + + wb.styles.fonts[0].name = 'Times New Roman' + wb.styles.fonts[0].sz = 12 + + wb.add_worksheet do |sheet| + sheet.add_row [1,2,3] + sheet.add_style "A1:C1", { color: "FFFFFF" } + end + + wb.apply_styles + + assert_equal 1, wb.styles.style_index.size + + assert_equal( + { + type: :xf, + name: "Times New Roman", + sz: 12, + family: 1, + color: "FFFFFF", + }, + wb.styles.style_index.values.first + ) + end + end |
