|  | 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); | 
|  | } | 
|  | } | 
|  | } | 
|  | } |