From cef875427461410e1ebb4d3d3cdf5ee30cbfdb41 Mon Sep 17 00:00:00 2001 From: B1tF8er Date: Thu, 4 Oct 2018 12:37:59 -0600 Subject: [PATCH 1/2] Support Enum --- GrootUnitTest/GrootUnitTest.csproj | 3 ++ GrootUnitTest/models/Item.cs | 16 ++++++++++ GrootUnitTest/models/ItemType.cs | 12 +++++++ GrootUnitTest/resources/item.csv | 4 +++ GrootUnitTest/test/GetObjectFromCsvTest.cs | 37 ++++++++++++++++++++++ 5 files changed, 72 insertions(+) create mode 100644 GrootUnitTest/models/Item.cs create mode 100644 GrootUnitTest/models/ItemType.cs create mode 100644 GrootUnitTest/resources/item.csv diff --git a/GrootUnitTest/GrootUnitTest.csproj b/GrootUnitTest/GrootUnitTest.csproj index 0ae4ca8..77eea19 100644 --- a/GrootUnitTest/GrootUnitTest.csproj +++ b/GrootUnitTest/GrootUnitTest.csproj @@ -17,5 +17,8 @@ Always + + Always + diff --git a/GrootUnitTest/models/Item.cs b/GrootUnitTest/models/Item.cs new file mode 100644 index 0000000..d4d47ef --- /dev/null +++ b/GrootUnitTest/models/Item.cs @@ -0,0 +1,16 @@ +using Groot; + +namespace GrootUnitTest.models +{ + public class Item + { + [GrootField("name")] + public string Name { get; set; } + + [GrootField("amount")] + public int Amount { get; set; } + + [GrootField("type")] + public ItemType Type { get; set; } + } +} \ No newline at end of file diff --git a/GrootUnitTest/models/ItemType.cs b/GrootUnitTest/models/ItemType.cs new file mode 100644 index 0000000..b67dd46 --- /dev/null +++ b/GrootUnitTest/models/ItemType.cs @@ -0,0 +1,12 @@ +using Groot; + +namespace GrootUnitTest.models +{ + public enum ItemType + { + Plastic=1, + Wood=2, + Iron=3, + Fabric=4 + }; +} \ No newline at end of file diff --git a/GrootUnitTest/resources/item.csv b/GrootUnitTest/resources/item.csv new file mode 100644 index 0000000..1c83e31 --- /dev/null +++ b/GrootUnitTest/resources/item.csv @@ -0,0 +1,4 @@ +name, amount, type +itema, 68, 1 +itemb, 42, 2 +itemc, 55, 1 \ No newline at end of file diff --git a/GrootUnitTest/test/GetObjectFromCsvTest.cs b/GrootUnitTest/test/GetObjectFromCsvTest.cs index 4395d28..1a1e6c0 100644 --- a/GrootUnitTest/test/GetObjectFromCsvTest.cs +++ b/GrootUnitTest/test/GetObjectFromCsvTest.cs @@ -8,6 +8,9 @@ namespace GrootUnitTest.test [TestClass] public class GetObjectFromCsvTest { + private const string itemName = "itema"; + private const string mappedFieldWithNoCustomAttr = "mappedFieldWithCustomAttr"; + [TestMethod] public void AutoMapForNoCustomAttr() { @@ -47,5 +50,39 @@ public void NoAutoMapForNoCustomAttr() Assert.AreEqual(232.29M, paul.Height, "mappedFieldWithCustomAttr"); } + + [TestMethod] + public void AutoMapForNoCustomAttrUsingEnum() + { + var path = Path.GetFullPath("resources/item.csv"); + var types = Groot.Groot.GetObjectFromCsv(path); + + Assert.AreEqual(3, types.Count(), "rows amount"); + + var itema = types.First(t => t.Name == itemName); + + Assert.IsNotNull(itema); + Assert.AreEqual(itemName, itema.Name, mappedFieldWithNoCustomAttr); + Assert.AreEqual(68, itema.Amount, mappedFieldWithNoCustomAttr); + Assert.AreEqual(models.ItemType.Plastic, itema.Type, mappedFieldWithNoCustomAttr); + + } + + [TestMethod] + public void NoAutoMapForNoCustomAttrUsingEnum() + { + var path = Path.GetFullPath("resources/item.csv"); + var types = Groot.Groot.GetObjectFromCsv(path, false); + + Assert.AreEqual(3, types.Count(), "rows amount"); + + var itema = types.First(t => t.Name == itemName); + + Assert.IsNotNull(itema); + Assert.AreEqual(itemName, itema.Name, mappedFieldWithNoCustomAttr); + Assert.AreEqual(68, itema.Amount, mappedFieldWithNoCustomAttr); + Assert.AreEqual(models.ItemType.Plastic, itema.Type, mappedFieldWithNoCustomAttr); + + } } } \ No newline at end of file From 921794b28f81636381205c7f109785b481c9ad2c Mon Sep 17 00:00:00 2001 From: B1tF8er Date: Thu, 4 Oct 2018 12:47:05 -0600 Subject: [PATCH 2/2] Support Enum --- Groot/Groot.cs | 12 ++++++++++-- 1 file changed, 10 insertions(+), 2 deletions(-) diff --git a/Groot/Groot.cs b/Groot/Groot.cs index a46df46..7d917b9 100644 --- a/Groot/Groot.cs +++ b/Groot/Groot.cs @@ -61,7 +61,7 @@ public static IEnumerable GetObjectFromCsv(string filePath, bool autoMapFo .ToList() .ForEach(prop => { - prop.SetValue(tElem, Convert.ChangeType(x.Value, prop.PropertyType), null); + prop.SetValue(tElem, ChangeType(prop, x.Value), null); }); } @@ -70,6 +70,14 @@ public static IEnumerable GetObjectFromCsv(string filePath, bool autoMapFo } - + private static object ChangeType(PropertyInfo prop, string value) + { + if (prop.PropertyType.IsEnum) + return Enum.Parse(prop.PropertyType, value); + + return Convert.ChangeType(value, prop.PropertyType); + } + + } } \ No newline at end of file