| using System; |
| using System.IO; |
| using Microsoft.VisualStudio.TestTools.UnitTesting; |
| using OfficeOpenXml; |
| using System.Reflection; |
| |
| namespace EPPlusTest |
| { |
| [TestClass] |
| public class WorksheetsTests |
| { |
| private ExcelPackage package; |
| private ExcelWorkbook workbook; |
| |
| [TestInitialize] |
| public void TestInitialize() |
| { |
| package = new ExcelPackage(); |
| workbook = package.Workbook; |
| workbook.Worksheets.Add("NEW1"); |
| } |
| |
| [TestMethod] |
| public void ConfirmFileStructure() |
| { |
| Assert.IsNotNull(package, "Package not created"); |
| Assert.IsNotNull(workbook, "No workbook found"); |
| } |
| |
| [TestMethod] |
| public void ShouldBeAbleToDeleteAndThenAdd() |
| { |
| workbook.Worksheets.Add("NEW2"); |
| workbook.Worksheets.Delete(1); |
| workbook.Worksheets.Add("NEW3"); |
| } |
| |
| [TestMethod] |
| public void DeleteByNameWhereWorkSheetExists() |
| { |
| workbook.Worksheets.Add("NEW2"); |
| workbook.Worksheets.Delete("NEW2"); |
| } |
| |
| [TestMethod, ExpectedException(typeof(ArgumentException))] |
| public void DeleteByNameWhereWorkSheetDoesNotExist() |
| { |
| workbook.Worksheets.Add("NEW2"); |
| workbook.Worksheets.Delete("NEW3"); |
| } |
| |
| [TestMethod] |
| public void MoveBeforeByNameWhereWorkSheetExists() |
| { |
| workbook.Worksheets.Add("NEW2"); |
| workbook.Worksheets.Add("NEW3"); |
| workbook.Worksheets.Add("NEW4"); |
| workbook.Worksheets.Add("NEW5"); |
| |
| workbook.Worksheets.MoveBefore("NEW4", "NEW2"); |
| |
| CompareOrderOfWorksheetsAfterSaving(package); |
| } |
| |
| [TestMethod] |
| public void MoveAfterByNameWhereWorkSheetExists() |
| { |
| workbook.Worksheets.Add("NEW2"); |
| workbook.Worksheets.Add("NEW3"); |
| workbook.Worksheets.Add("NEW4"); |
| workbook.Worksheets.Add("NEW5"); |
| |
| workbook.Worksheets.MoveAfter("NEW4", "NEW2"); |
| |
| CompareOrderOfWorksheetsAfterSaving(package); |
| } |
| |
| [TestMethod] |
| public void MoveBeforeByPositionWhereWorkSheetExists() |
| { |
| workbook.Worksheets.Add("NEW2"); |
| workbook.Worksheets.Add("NEW3"); |
| workbook.Worksheets.Add("NEW4"); |
| workbook.Worksheets.Add("NEW5"); |
| |
| workbook.Worksheets.MoveBefore(4, 2); |
| |
| CompareOrderOfWorksheetsAfterSaving(package); |
| } |
| |
| [TestMethod] |
| public void MoveAfterByPositionWhereWorkSheetExists() |
| { |
| workbook.Worksheets.Add("NEW2"); |
| workbook.Worksheets.Add("NEW3"); |
| workbook.Worksheets.Add("NEW4"); |
| workbook.Worksheets.Add("NEW5"); |
| |
| workbook.Worksheets.MoveAfter(4, 2); |
| |
| CompareOrderOfWorksheetsAfterSaving(package); |
| } |
| #region Delete Column with Save Tests |
| |
| private const string OutputDirectory = @"d:\temp\"; |
| |
| [TestMethod] |
| public void DeleteFirstColumnInRangeColumnShouldBeDeleted() |
| { |
| // Arrange |
| ExcelPackage pck = new ExcelPackage(); |
| using ( |
| Stream file = |
| Assembly.GetExecutingAssembly() |
| .GetManifestResourceStream("EPPlusTest.TestWorkbooks.PreDeleteColumn.xls")) |
| { |
| pck.Load(file); |
| } |
| var wsData = pck.Workbook.Worksheets[1]; |
| |
| // Act |
| wsData.DeleteColumn(1); |
| pck.SaveAs(new FileInfo(OutputDirectory + "AfterDeleteColumn.xlsx")); |
| |
| // Assert |
| Assert.AreEqual("Title", wsData.Cells["A1"].Text); |
| Assert.AreEqual("First Name", wsData.Cells["B1"].Text); |
| Assert.AreEqual("Family Name", wsData.Cells["C1"].Text); |
| } |
| |
| |
| [TestMethod] |
| public void DeleteLastColumnInRangeColumnShouldBeDeleted() |
| { |
| // Arrange |
| ExcelPackage pck = new ExcelPackage(); |
| using ( |
| Stream file = |
| Assembly.GetExecutingAssembly() |
| .GetManifestResourceStream("EPPlusTest.TestWorkbooks.PreDeleteColumn.xls")) |
| { |
| pck.Load(file); |
| } |
| var wsData = pck.Workbook.Worksheets[1]; |
| |
| // Act |
| wsData.DeleteColumn(4); |
| pck.SaveAs(new FileInfo(OutputDirectory + "AfterDeleteColumn.xlsx")); |
| |
| // Assert |
| Assert.AreEqual("Id", wsData.Cells["A1"].Text); |
| Assert.AreEqual("Title", wsData.Cells["B1"].Text); |
| Assert.AreEqual("First Name", wsData.Cells["C1"].Text); |
| } |
| |
| [TestMethod] |
| public void DeleteColumnAfterNormalRangeSheetShouldRemainUnchanged() |
| { |
| // Arrange |
| ExcelPackage pck = new ExcelPackage(); |
| using ( |
| Stream file = |
| Assembly.GetExecutingAssembly() |
| .GetManifestResourceStream("EPPlusTest.TestWorkbooks.PreDeleteColumn.xls")) |
| { |
| pck.Load(file); |
| } |
| var wsData = pck.Workbook.Worksheets[1]; |
| |
| // Act |
| wsData.DeleteColumn(5); |
| pck.SaveAs(new FileInfo(OutputDirectory + "AfterDeleteColumn.xlsx")); |
| |
| // Assert |
| Assert.AreEqual("Id", wsData.Cells["A1"].Text); |
| Assert.AreEqual("Title", wsData.Cells["B1"].Text); |
| Assert.AreEqual("First Name", wsData.Cells["C1"].Text); |
| Assert.AreEqual("Family Name", wsData.Cells["D1"].Text); |
| |
| } |
| |
| [TestMethod] |
| [ExpectedException(typeof(ArgumentException))] |
| public void DeleteColumnBeforeRangeMimitThrowsArgumentException() |
| { |
| // Arrange |
| ExcelPackage pck = new ExcelPackage(); |
| using ( |
| Stream file = |
| Assembly.GetExecutingAssembly() |
| .GetManifestResourceStream("EPPlusTest.TestWorkbooks.PreDeleteColumn.xls")) |
| { |
| pck.Load(file); |
| } |
| var wsData = pck.Workbook.Worksheets[1]; |
| |
| // Act |
| wsData.DeleteColumn(0); |
| |
| // Assert |
| Assert.Fail(); |
| |
| } |
| |
| [TestMethod] |
| [ExpectedException(typeof(ArgumentException))] |
| public void DeleteColumnAfterRangeLimitThrowsArgumentException() |
| { |
| // Arrange |
| ExcelPackage pck = new ExcelPackage(); |
| using ( |
| Stream file = |
| Assembly.GetExecutingAssembly() |
| .GetManifestResourceStream("EPPlusTest.TestWorkbooks.PreDeleteColumn.xls")) |
| { |
| pck.Load(file); |
| } |
| var wsData = pck.Workbook.Worksheets[1]; |
| |
| // Act |
| wsData.DeleteColumn(16385); |
| |
| // Assert |
| Assert.Fail(); |
| |
| } |
| |
| [TestMethod] |
| public void DeleteFirstTwoColumnsFromRangeColumnsShouldBeDeleted() |
| { |
| // Arrange |
| ExcelPackage pck = new ExcelPackage(); |
| using ( |
| Stream file = |
| Assembly.GetExecutingAssembly() |
| .GetManifestResourceStream("EPPlusTest.TestWorkbooks.PreDeleteColumn.xls")) |
| { |
| pck.Load(file); |
| } |
| var wsData = pck.Workbook.Worksheets[1]; |
| |
| // Act |
| wsData.DeleteColumn(1, 2); |
| pck.SaveAs(new FileInfo(OutputDirectory + "AfterDeleteColumn.xlsx")); |
| |
| // Assert |
| Assert.AreEqual("First Name", wsData.Cells["A1"].Text); |
| Assert.AreEqual("Family Name", wsData.Cells["B1"].Text); |
| |
| } |
| #endregion |
| |
| [TestMethod] |
| public void RangeClearMethodShouldNotClearSurroundingCells() |
| { |
| var wks = workbook.Worksheets.Add("test"); |
| wks.Cells[2, 2].Value = "something"; |
| wks.Cells[2, 3].Value = "something"; |
| |
| wks.Cells[2, 3].Clear(); |
| |
| Assert.IsNotNull(wks.Cells[2, 2].Value); |
| Assert.AreEqual("something", wks.Cells[2, 2].Value); |
| Assert.IsNull(wks.Cells[2, 3].Value); |
| } |
| |
| private static void CompareOrderOfWorksheetsAfterSaving(ExcelPackage editedPackage) |
| { |
| var packageStream = new MemoryStream(); |
| editedPackage.SaveAs(packageStream); |
| |
| var newPackage = new ExcelPackage(packageStream); |
| var positionId = 1; |
| foreach (var worksheet in editedPackage.Workbook.Worksheets) |
| { |
| Assert.AreEqual(worksheet.Name, newPackage.Workbook.Worksheets[positionId].Name, "Worksheets are not in the same order"); |
| positionId++; |
| } |
| } |
| } |
| } |