Migrate ExcelIO from ClosedXML to NPOI

This commit is contained in:
Joseph Doherty
2026-02-06 17:27:09 -05:00
parent 070d915b12
commit dd18a05408
26 changed files with 3034 additions and 2805 deletions
@@ -1,80 +1,81 @@
using ClosedXML.Excel;
using JdeScoping.ExcelIO.Formatting;
using Shouldly;
using Xunit;
namespace JdeScoping.ExcelIO.Tests;
public class HeaderFormatterTests
{
[Fact]
public void ApplyHeaderFormat_Cell_AppliesCorrectStyling()
{
using var workbook = new XLWorkbook();
var worksheet = workbook.Worksheets.Add("Test");
var cell = worksheet.Cell(1, 1);
HeaderFormatter.ApplyHeaderFormat(cell, "Test Header");
cell.Value.GetText().ShouldBe("Test Header");
cell.Style.Font.Bold.ShouldBeTrue();
cell.Style.Alignment.Horizontal.ShouldBe(XLAlignmentHorizontalValues.Center);
cell.Style.Fill.BackgroundColor.ShouldBe(XLColor.Gainsboro);
}
[Fact]
public void ApplyHeaderFormat_Cell_WithoutText_AppliesOnlyStyling()
{
using var workbook = new XLWorkbook();
var worksheet = workbook.Worksheets.Add("Test");
var cell = worksheet.Cell(1, 1);
cell.Value = "Original";
HeaderFormatter.ApplyHeaderFormat(cell);
cell.Value.GetText().ShouldBe("Original");
cell.Style.Font.Bold.ShouldBeTrue();
}
[Fact]
public void ApplyHeaderFormat_Range_AppliesCorrectStyling()
{
using var workbook = new XLWorkbook();
var worksheet = workbook.Worksheets.Add("Test");
var range = worksheet.Range(1, 1, 1, 3);
HeaderFormatter.ApplyHeaderFormat(range, "Header", merge: false);
range.FirstCell().Value.GetText().ShouldBe("Header");
foreach (var cell in range.Cells())
{
cell.Style.Font.Bold.ShouldBeTrue();
cell.Style.Fill.BackgroundColor.ShouldBe(XLColor.Gainsboro);
}
}
[Fact]
public void ApplyHeaderFormat_Range_WithMerge_MergesCells()
{
using var workbook = new XLWorkbook();
var worksheet = workbook.Worksheets.Add("Test");
var range = worksheet.Range(1, 1, 1, 3);
HeaderFormatter.ApplyHeaderFormat(range, "Merged Header", merge: true);
range.IsMerged().ShouldBeTrue();
range.FirstCell().Value.GetText().ShouldBe("Merged Header");
}
[Fact]
public void ApplyHeaderFormat_Range_WithoutMerge_DoesNotMergeCells()
{
using var workbook = new XLWorkbook();
var worksheet = workbook.Worksheets.Add("Test");
var range = worksheet.Range(1, 1, 1, 3);
HeaderFormatter.ApplyHeaderFormat(range, "Not Merged", merge: false);
range.IsMerged().ShouldBeFalse();
}
}
using JdeScoping.ExcelIO.Formatting;
using JdeScoping.ExcelIO.Tests.Fixtures;
using NPOI.XSSF.UserModel;
using Shouldly;
using Xunit;
namespace JdeScoping.ExcelIO.Tests;
public class HeaderFormatterTests
{
[Fact]
public void ApplyHeaderFormat_Cell_AppliesCorrectStyling()
{
using var workbook = new XSSFWorkbook();
var worksheet = workbook.CreateSheet("Test");
var row = worksheet.CreateRow(0);
var cell = row.CreateCell(0);
HeaderFormatter.ApplyHeaderFormat(cell, "Test Header");
ExcelTestHelpers.GetCellText(worksheet, 1, 1).ShouldBe("Test Header");
cell.CellStyle.GetFont(workbook).IsBold.ShouldBeTrue();
cell.CellStyle.Alignment.ShouldBe(NPOI.SS.UserModel.HorizontalAlignment.Center);
ExcelTestHelpers.GetFillForegroundRgb(cell).ShouldBe([0xDC, 0xDC, 0xDC]);
}
[Fact]
public void ApplyHeaderFormat_Cell_WithoutText_AppliesOnlyStyling()
{
using var workbook = new XSSFWorkbook();
var worksheet = workbook.CreateSheet("Test");
var row = worksheet.CreateRow(0);
var cell = row.CreateCell(0);
cell.SetCellValue("Original");
HeaderFormatter.ApplyHeaderFormat(cell);
ExcelTestHelpers.GetCellText(worksheet, 1, 1).ShouldBe("Original");
cell.CellStyle.GetFont(workbook).IsBold.ShouldBeTrue();
}
[Fact]
public void ApplyHeaderFormat_Range_AppliesCorrectStyling()
{
using var workbook = new XSSFWorkbook();
var worksheet = workbook.CreateSheet("Test");
HeaderFormatter.ApplyHeaderFormat(worksheet, 1, 1, 1, 3, "Header", merge: false);
ExcelTestHelpers.GetCellText(worksheet, 1, 1).ShouldBe("Header");
for (var col = 1; col <= 3; col++)
{
var cell = ExcelTestHelpers.GetCell(worksheet, 1, col)!;
cell.CellStyle.GetFont(workbook).IsBold.ShouldBeTrue();
ExcelTestHelpers.GetFillForegroundRgb(cell).ShouldBe([0xDC, 0xDC, 0xDC]);
}
}
[Fact]
public void ApplyHeaderFormat_Range_WithMerge_MergesCells()
{
using var workbook = new XSSFWorkbook();
var worksheet = workbook.CreateSheet("Test");
HeaderFormatter.ApplyHeaderFormat(worksheet, 1, 1, 1, 3, "Merged Header", merge: true);
ExcelTestHelpers.IsMerged(worksheet, 1, 1, 1, 3).ShouldBeTrue();
ExcelTestHelpers.GetCellText(worksheet, 1, 1).ShouldBe("Merged Header");
}
[Fact]
public void ApplyHeaderFormat_Range_WithoutMerge_DoesNotMergeCells()
{
using var workbook = new XSSFWorkbook();
var worksheet = workbook.CreateSheet("Test");
HeaderFormatter.ApplyHeaderFormat(worksheet, 1, 1, 1, 3, "Not Merged", merge: false);
ExcelTestHelpers.IsMerged(worksheet, 1, 1, 1, 3).ShouldBeFalse();
}
}