diff options
| author | Noel Peden <[email protected]> | 2022-10-21 04:19:01 -0700 |
|---|---|---|
| committer | GitHub <[email protected]> | 2022-10-21 04:19:01 -0700 |
| commit | 315c3f04224ba2f4b44fe2ce633315a6e79f62cb (patch) | |
| tree | d67454ea279e19f25b37b05fee0a43a80d19a158 /test | |
| parent | bcc88ca556b3b8527ba0ad56424f93ef170b9c31 (diff) | |
| parent | 449056492f8c9fd44684dbf7bbe18f401fe5e6ad (diff) | |
| download | caxlsx-315c3f04224ba2f4b44fe2ce633315a6e79f62cb.tar.gz caxlsx-315c3f04224ba2f4b44fe2ce633315a6e79f62cb.zip | |
Merge pull request #168 from westonganger/merge_axlsx_styler
Merge axlsx_styler gem into caxlsx
Diffstat (limited to 'test')
| -rw-r--r-- | test/tc_axlsx.rb | 8 | ||||
| -rw-r--r-- | test/tc_package.rb | 35 | ||||
| -rw-r--r-- | test/workbook/worksheet/tc_border_creator.rb | 73 | ||||
| -rw-r--r-- | test/workbook/worksheet/tc_worksheet.rb | 244 |
4 files changed, 360 insertions, 0 deletions
diff --git a/test/tc_axlsx.rb b/test/tc_axlsx.rb index e58ebafe..3903fc42 100644 --- a/test/tc_axlsx.rb +++ b/test/tc_axlsx.rb @@ -132,4 +132,12 @@ class TestAxlsx < Test::Unit::TestCase nil_subject = InstanceValuesSubject.new(nil_obj: nil) assert_equal({"nil_obj" => nil}, Axlsx.instance_values_for(nil_subject), 'should return nil ivars') end + + def test_hash_deep_merge + h1 = {foo: {bar: true}} + h2 = {foo: {baz: true}} + assert_equal({foo: {baz: true}}, h1.merge(h2)) + assert_equal({foo: {bar: true, baz: true}}, Axlsx.hash_deep_merge(h1, h2)) + 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 new file mode 100644 index 00000000..86b47fc1 --- /dev/null +++ b/test/workbook/worksheet/tc_border_creator.rb @@ -0,0 +1,73 @@ +require 'tc_helper.rb' + +class TestBorderCreator < Test::Unit::TestCase + def setup + @p = Axlsx::Package.new + @wb = @p.workbook + @ws = @wb.add_worksheet + end + + def test_defaults + 3.times do + @ws.add_row [1,2,3] + end + + bc = Axlsx::BorderCreator.new(@ws, @ws["A1:B2"], {}) + 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"]) + 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"], :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" + end + + def test_draw + 5.times do + @ws.add_row [1,2,3,4,5] + end + + bc = Axlsx::BorderCreator.new(@ws, @ws["A1:C3"], {edges: ["top", :left], style: :thick, color: "ffffff"}) + + bc.draw + + 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 |
