From a822bc406b9c97f3ad8e35d297cbd421b8eae94e Mon Sep 17 00:00:00 2001 From: Drew Tingen Date: Tue, 14 Jul 2020 13:18:08 -0400 Subject: [PATCH] feat: Tests for GetProperty and SetProperty --- .../Extensions/ReflectionExtensionsTest.cs | 185 +++++++++++++++++- 1 file changed, 184 insertions(+), 1 deletion(-) diff --git a/ICD.Common.Utils.Tests/Extensions/ReflectionExtensionsTest.cs b/ICD.Common.Utils.Tests/Extensions/ReflectionExtensionsTest.cs index 2b03880..3555b09 100644 --- a/ICD.Common.Utils.Tests/Extensions/ReflectionExtensionsTest.cs +++ b/ICD.Common.Utils.Tests/Extensions/ReflectionExtensionsTest.cs @@ -1,4 +1,6 @@ -using NUnit.Framework; +using System; +using ICD.Common.Utils.Extensions; +using NUnit.Framework; namespace ICD.Common.Utils.Tests.Extensions { @@ -10,5 +12,186 @@ namespace ICD.Common.Utils.Tests.Extensions { Assert.Inconclusive(); } + + #region Get/Set Property Tests + + + private sealed class PropertyTestClass + { + private readonly InternalPropertyTestClass m_InternalClass; + public string PropertyString { get; set; } + public int PropertyInt { get; set; } + public DateTime PropertyDateTime { get; set; } + public InternalPropertyTestClass InternalClass { get { return m_InternalClass; } } + + public PropertyTestClass() + { + m_InternalClass = new InternalPropertyTestClass(); + } + + internal sealed class InternalPropertyTestClass + { + private readonly DeepPropertyTestClass m_DeepClass; + + public string InternalPropertyString { get; set; } + public int InternalPropertyInt { get; set; } + public DateTime InternalPropertyDateTime { get; set; } + + public DeepPropertyTestClass DeepClass { get { return m_DeepClass; } } + + public InternalPropertyTestClass() + { + m_DeepClass = new DeepPropertyTestClass(); + } + + internal sealed class DeepPropertyTestClass + { + public string DeepPropertyString { get; set; } + public int DeepPropertyInt { get; set; } + public DateTime DeepPropertyDateTime { get; set; } + } + } + } + + + [Test] + public void GetPropertyTest() + { + var testClass = new PropertyTestClass(); + + int testInt = 15; + string testString = "TestString"; + var testDateTime = DateTime.Parse("1987-08-27"); + + testClass.PropertyInt = testInt; + testClass.PropertyString = testString; + testClass.PropertyDateTime = testDateTime; + + int internalTestInt = 34; + string internalTestString = "InternalTestString"; + var internalTestDateTime = DateTime.Parse("2011-12-05"); + + testClass.InternalClass.InternalPropertyInt = internalTestInt; + testClass.InternalClass.InternalPropertyString = internalTestString; + testClass.InternalClass.InternalPropertyDateTime = internalTestDateTime; + + int deepTestInt = int.MaxValue; + string deepTestString = "HelloThere"; + var deepTestDateTime = DateTime.Parse("1776-07-04"); + + testClass.InternalClass.DeepClass.DeepPropertyInt = deepTestInt; + testClass.InternalClass.DeepClass.DeepPropertyString = deepTestString; + testClass.InternalClass.DeepClass.DeepPropertyDateTime = deepTestDateTime; + + object propertyInt; + object propertyString; + object propertyDateTime; + object fakeObject; + + // Test at first level + Assert.True(testClass.GetProperty(out propertyInt, "PropertyInt"), "Couldn't get PropertyInt"); + Assert.AreEqual(testInt, propertyInt, "PropertyInt wasn't expected value"); + Assert.True(testClass.GetProperty(out propertyString, "PropertyString"), "Couldn't Get PropertyString"); + Assert.AreEqual(testString, propertyString, "PropertyString wasn't expected value"); + Assert.True(testClass.GetProperty(out propertyDateTime, "PropertyDateTime"), "Couldn't get PropertyDateTime"); + Assert.AreEqual(testDateTime, propertyDateTime, "PropertyDateTime wasn't expected value"); + // Test properties that don't exist + Assert.False(testClass.GetProperty(out fakeObject, "FakePropertyName")); + + + // Test at second level + Assert.True(testClass.GetProperty(out propertyInt, "InternalClass", "InternalPropertyInt"), "Couldn't get InternalPropertyInt"); + Assert.AreEqual(internalTestInt, propertyInt, "InternalPropertyInt wasn't expected value"); + Assert.True(testClass.GetProperty(out propertyString, "InternalClass", "InternalPropertyString"), "Couldn't Get InternalPropertyString"); + Assert.AreEqual(internalTestString, propertyString, "InternalPropertyString wasn't expected value"); + Assert.True(testClass.GetProperty(out propertyDateTime, "InternalClass", "InternalPropertyDateTime"), "Couldn't get InternalPropertyDateTime"); + Assert.AreEqual(internalTestDateTime, propertyDateTime, "InternalPropertyDateTime wasn't expected value"); + // Test properties that don't exist + Assert.False(testClass.GetProperty(out fakeObject, "InternalClass", "FakePropertyName")); + + // Test at third level + Assert.True(testClass.GetProperty(out propertyInt, "InternalClass", "DeepClass", "DeepPropertyInt"), "Couldn't get DeepPropertyInt"); + Assert.AreEqual(deepTestInt, propertyInt, "DeepPropertyInt wasn't expected value"); + Assert.True(testClass.GetProperty(out propertyString, "InternalClass", "DeepClass", "DeepPropertyString"), "Couldn't Get DeepPropertyString"); + Assert.AreEqual(deepTestString, propertyString, "DeepPropertyString wasn't expected value"); + Assert.True(testClass.GetProperty(out propertyDateTime, "InternalClass", "DeepClass", "DeepPropertyDateTime"), "Couldn't get DeepPropertyDateTime"); + Assert.AreEqual(deepTestDateTime, propertyDateTime, "DeepPropertyDateTime wasn't expected value"); + // Test properties that don't exist + Assert.False(testClass.GetProperty(out fakeObject, "InternalClass", "DeepClass", "FakePropertyName")); + + + // Test Default/Null Cases + var emptyTestClass = new PropertyTestClass(); + Assert.True(emptyTestClass.GetProperty(out propertyInt, "PropertyInt"), "Couldn't get empty PropertyInt"); + Assert.AreEqual(default(int), propertyInt, "Empty PropertyInt wasn't expected value"); + Assert.True(emptyTestClass.GetProperty(out propertyString, "PropertyString"), "Couldn't Get empty PropertyString"); + Assert.AreEqual(default(string), propertyString, "Empty PropertyString wasn't expected value"); + Assert.True(emptyTestClass.GetProperty(out propertyDateTime, "PropertyDateTime"), "Couldn't get empty PropertyDateTime"); + Assert.AreEqual(default(DateTime), propertyDateTime, "Empty PropertyDateTime wasn't expected value"); + + + } + + [Test] + public void SetPropertyTest() + { + var testClass = new PropertyTestClass(); + + int testInt = 15; + string testString = "TestString"; + var testDateTime = DateTime.Parse("1987-08-27"); + + int internalTestInt = 34; + string internalTestString = "InternalTestString"; + var internalTestDateTime = DateTime.Parse("2011-12-05"); + + int deepTestInt = int.MaxValue; + string deepTestString = "HelloThere"; + var deepTestDateTime = DateTime.Parse("1776-07-04"); + + // Test at first level + Assert.True(testClass.SetProperty(testInt, "PropertyInt"), "Couldn't get PropertyInt"); + Assert.AreEqual(testInt, testClass.PropertyInt, "PropertyInt wasn't expected value"); + Assert.True(testClass.SetProperty(testString, "PropertyString"), "Couldn't Get PropertyString"); + Assert.AreEqual(testString, testClass.PropertyString, "PropertyString wasn't expected value"); + Assert.True(testClass.SetProperty(testDateTime, "PropertyDateTime"), "Couldn't get PropertyDateTime"); + Assert.AreEqual(testDateTime, testClass.PropertyDateTime, "PropertyDateTime wasn't expected value"); + // Test properties that don't exist + Assert.False(testClass.SetProperty("SomeObject", "FakePropertyName")); + + + // Test at second level + Assert.True(testClass.SetProperty(internalTestInt, "InternalClass", "InternalPropertyInt"), "Couldn't get InternalPropertyInt"); + Assert.AreEqual(internalTestInt, testClass.InternalClass.InternalPropertyInt, "InternalPropertyInt wasn't expected value"); + Assert.True(testClass.SetProperty(internalTestString, "InternalClass", "InternalPropertyString"), "Couldn't Get InternalPropertyString"); + Assert.AreEqual(internalTestString, testClass.InternalClass.InternalPropertyString, "InternalPropertyString wasn't expected value"); + Assert.True(testClass.SetProperty(internalTestDateTime, "InternalClass", "InternalPropertyDateTime"), "Couldn't get InternalPropertyDateTime"); + Assert.AreEqual(internalTestDateTime, testClass.InternalClass.InternalPropertyDateTime, "InternalPropertyDateTime wasn't expected value"); + // Test properties that don't exist + Assert.False(testClass.SetProperty("SomeAdditionalObject", "InternalClass", "FakePropertyName")); + + // Test at third level + Assert.True(testClass.SetProperty(deepTestInt, "InternalClass", "DeepClass", "DeepPropertyInt"), "Couldn't get DeepPropertyInt"); + Assert.AreEqual(deepTestInt, testClass.InternalClass.DeepClass.DeepPropertyInt, "DeepPropertyInt wasn't expected value"); + Assert.True(testClass.SetProperty(deepTestString, "InternalClass", "DeepClass", "DeepPropertyString"), "Couldn't Get DeepPropertyString"); + Assert.AreEqual(deepTestString, testClass.InternalClass.DeepClass.DeepPropertyString, "DeepPropertyString wasn't expected value"); + Assert.True(testClass.SetProperty(deepTestDateTime, "InternalClass", "DeepClass", "DeepPropertyDateTime"), "Couldn't get DeepPropertyDateTime"); + Assert.AreEqual(deepTestDateTime, testClass.InternalClass.DeepClass.DeepPropertyDateTime, "DeepPropertyDateTime wasn't expected value"); + // Test properties that don't exist + Assert.False(testClass.SetProperty("ThisIsAnObjectToo", "InternalClass", "DeepClass", "FakePropertyName")); + + + // Test Set Default/Null + Assert.True(testClass.SetProperty(default(int), "PropertyInt"), "Couldn't get empty PropertyInt"); + Assert.AreEqual(default(int), testClass.PropertyInt, "Empty PropertyInt wasn't expected value"); + Assert.True(testClass.SetProperty(default(string), "PropertyString"), "Couldn't Get empty PropertyString"); + Assert.AreEqual(default(string), testClass.PropertyString, "Empty PropertyString wasn't expected value"); + Assert.True(testClass.SetProperty(default(DateTime), "PropertyDateTime"), "Couldn't get empty PropertyDateTime"); + Assert.AreEqual(default(DateTime), testClass.PropertyDateTime, "Empty PropertyDateTime wasn't expected value"); + + + } + + #endregion } }