| using System; |
| using System.Collections.Generic; |
| using System.IO; |
| using System.Linq; |
| using System.Reflection; |
| using Microsoft.VisualStudio.TestTools.UnitTesting; |
| using OfficeOpenXml; |
| using OfficeOpenXml.Table; |
| using Rhino.Mocks; |
| using Rhino.Mocks.Constraints; |
| |
| namespace EPPlusTest |
| { |
| [TestClass] |
| public class LoadFromCollectionTests |
| { |
| internal abstract class BaseClass |
| { |
| public string Id { get; set; } |
| public string Name { get; set; } |
| } |
| |
| internal class Implementation : BaseClass |
| { |
| public int Number { get; set; } |
| } |
| |
| internal class Aclass |
| { |
| public string Id { get; set; } |
| public string Name { get; set; } |
| public int Number { get; set; } |
| } |
| |
| [TestMethod] |
| public void ShouldUseAclassProperties() |
| { |
| var items = new List<Aclass>() |
| { |
| new Aclass(){ Id = "123", Name = "Item 1", Number = 3} |
| }; |
| using (var pck = new ExcelPackage(new MemoryStream())) |
| { |
| var sheet = pck.Workbook.Worksheets.Add("sheet"); |
| sheet.Cells["C1"].LoadFromCollection(items, true, TableStyles.Dark1); |
| |
| Assert.AreEqual("Id", sheet.Cells["C1"].Value); |
| } |
| } |
| |
| [TestMethod] |
| public void ShouldUseBaseClassProperties() |
| { |
| var items = new List<BaseClass>() |
| { |
| new Implementation(){ Id = "123", Name = "Item 1", Number = 3} |
| }; |
| using (var pck = new ExcelPackage(new MemoryStream())) |
| { |
| var sheet = pck.Workbook.Worksheets.Add("sheet"); |
| sheet.Cells["C1"].LoadFromCollection(items, true, TableStyles.Dark1); |
| |
| Assert.AreEqual("Id", sheet.Cells["C1"].Value); |
| } |
| } |
| |
| [TestMethod] |
| public void ShouldUseAnonymousProperties() |
| { |
| var objs = new List<BaseClass>() |
| { |
| new Implementation(){ Id = "123", Name = "Item 1", Number = 3} |
| }; |
| var items = objs.Select(x => new {Id = x.Id, Name = x.Name}).ToList(); |
| using (var pck = new ExcelPackage(new MemoryStream())) |
| { |
| var sheet = pck.Workbook.Worksheets.Add("sheet"); |
| sheet.Cells["C1"].LoadFromCollection(items, true, TableStyles.Dark1); |
| |
| Assert.AreEqual("Id", sheet.Cells["C1"].Value); |
| } |
| } |
| [TestMethod] |
| [ExpectedException(typeof(InvalidCastException))] |
| public void ShouldThrowInvalidCastExceptionIf() |
| { |
| var objs = new List<BaseClass>() |
| { |
| new Implementation(){ Id = "123", Name = "Item 1", Number = 3} |
| }; |
| var items = objs.Select(x => new { Id = x.Id, Name = x.Name }).ToList(); |
| using (var pck = new ExcelPackage(new MemoryStream())) |
| { |
| var sheet = pck.Workbook.Worksheets.Add("sheet"); |
| sheet.Cells["C1"].LoadFromCollection(items, true, TableStyles.Dark1, BindingFlags.Public | BindingFlags.Instance, typeof(string).GetMembers()); |
| |
| Assert.AreEqual("Id", sheet.Cells["C1"].Value); |
| } |
| } |
| } |
| } |