public void PropertiesBasic() { var propertiesType = this._assembly.GetType("AssemblyToProcess.Basic.Properties"); var propertiesInstance = (dynamic) Activator.CreateInstance(propertiesType); PropertyExtensions.SetPrivatePropertyValue( propertiesInstance, "BackedProperty", 1.23); PropertyExtensions.SetPrivatePropertyValue( propertiesInstance, "PrivateProperty", 123); propertiesType.GetProperty("PublicProperty").SetValue(propertiesInstance, "I'm public."); // Hand copy. var hCopy = propertiesInstance.HCopy(); var hGetter = new ObjectGetter(propertiesType, hCopy); Assert.Equal(1.23, hGetter.PrivatePropertyValue("BackedProperty")); Assert.Equal(123, hGetter.PrivatePropertyValue("PrivateProperty")); Assert.Equal("I'm public.", hGetter.PropertyValue("PublicProperty")); // Deep copy. var dCopy = propertiesInstance.DeepCopy(); var dGetter = new ObjectGetter(propertiesType, dCopy); Assert.Equal(1.23, dGetter.PrivatePropertyValue("BackedProperty")); Assert.Equal(123, dGetter.PrivatePropertyValue("PrivateProperty")); Assert.Equal("I'm public.", dGetter.PropertyValue("PublicProperty")); }
public void PropertiesBasic() { var propertiesType = this._assembly.GetType("AssemblyToProcess.Basic.Properties"); var propertiesInstance = (dynamic)Activator.CreateInstance(propertiesType); PropertyExtensions.SetPrivatePropertyValue( propertiesInstance, "BackedProperty", 1.23); PropertyExtensions.SetPrivatePropertyValue( propertiesInstance, "PrivateProperty", 123); propertiesType.GetProperty("PublicProperty").SetValue(propertiesInstance, "I'm public."); // Hand copy. var hCopy = propertiesInstance.HCopy(); var hGetter = new ObjectGetter(propertiesType, hCopy); Assert.Equal(1.23, hGetter.PrivatePropertyValue("BackedProperty")); Assert.Equal(123, hGetter.PrivatePropertyValue("PrivateProperty")); Assert.Equal("I'm public.", hGetter.PropertyValue("PublicProperty")); // Deep copy. var dCopy = propertiesInstance.DeepCopy(); var dGetter = new ObjectGetter(propertiesType, dCopy); Assert.Equal(1.23, dGetter.PrivatePropertyValue("BackedProperty")); Assert.Equal(123, dGetter.PrivatePropertyValue("PrivateProperty")); Assert.Equal("I'm public.", dGetter.PropertyValue("PublicProperty")); }
/// we cannot have a reference to System.Web for Session here, so we use a delegate public static void SetFunctionForRetrievingCurrentObjectFromWebSession( ObjectSetter setter, ObjectGetter getter) { ObjDelegateSet = setter; ObjDelegateGet = getter; }
/// we cannot have a reference to System.Web for Session here, so we use a delegate public static void SetFunctionForRetrievingCurrentObjectFromWebSession( ObjectSetter setter, ObjectGetter getter) { ObjDelegateSet = setter; ObjDelegateGet = getter; }
public T Get(string id) { var obj = (T)Cache.Get(id); if (obj == null) { obj = ObjectGetter.Get(id); Cache.Set(id, obj, DateTimeOffset.Now.AddHours(ExpirationInHours)); } return(obj); }
public void GetObjects() { var dbContext = new DesignTimeDbContextFactory().CreateDbContext(null); var repo = new GenericRepository <int, OfferedObject>(dbContext); repo.Add(new OfferedObject { CurrentTransactionType = TransactionType.Free, PublishedAt = DateTime.UtcNow, Photos = new System.Collections.Generic.List <ObjectPhoto> { new ObjectPhoto { AddedAtUtc = DateTime.UtcNow } }, }); repo.SaveChanges(); var impression = new Mock <IObjectImpressionsManager>(); var objectQueryHelper = new ObjectQueryHelper(); var userDataManager = new Mock <IUserDataManager>(); userDataManager.Setup(u => u.AddCurrentUserIfNeeded()).ReturnsAsync((new Login { LoginLocation = new Point(10, 1) }, null as User)); var configs = new Mock <IConfiguration>(); configs.Setup(c => c["Settings:IncludeObjectLessThan"]).Returns("500"); var photoConstructor = new Mock <Infrastructure.IPhotoUrlConstructor>(); photoConstructor.Setup(p => p.Construct(It.IsAny <ObjectPhoto>())).Returns("Hello there"); var objectGetter = new ObjectGetter(repo, photoConstructor.Object, impression.Object, objectQueryHelper, null, configs.Object, userDataManager.Object); var objects = objectGetter.GetObjects(new PagingArguments { Size = 10, StartObject = 0 }); Assert.True(true); }
public void FieldsBasic() { var fieldsType = this._assembly.GetType("AssemblyToProcess.Basic.Fields"); var fieldsInstance = (dynamic)Activator.CreateInstance(fieldsType); PropertyExtensions.SetPrivateFieldValue(fieldsInstance, "_privateField", "I'm private."); fieldsType.GetField("PublicField").SetValue(fieldsInstance, 123); // Hand copy. var hCopy = fieldsInstance.HCopy(); var hGetter = new ObjectGetter(fieldsType, hCopy); Assert.Equal("I'm private.", hGetter.PrivateFieldValue("_privateField")); Assert.Equal(123, hGetter.FieldValue("PublicField")); // Deep copy. var dCopy = fieldsInstance.DeepCopy(); var dGetter = new ObjectGetter(fieldsType, dCopy); Assert.Equal("I'm private.", dGetter.PrivateFieldValue("_privateField")); Assert.Equal(123, dGetter.FieldValue("PublicField")); }
public void FluentGetterTest() { var type = typeof(NiceAct); var act = new NiceAct() { Name = "Hu", Age = 22, Country = Country.China, Birthday = DateTime.Today }; var d = new Dictionary <string, object>(); d["Name"] = "Ax"; d["Age"] = 10086; d["Country"] = Country.China; d["Birthday"] = DateTime.Today.AddDays(10); d["IsValid"] = true; var g1 = ObjectGetter.Type(type).Instance(act); var g2 = ObjectGetter.Type(type).InitialValues(d); var g3 = ObjectGetter.Type <NiceAct>().Instance(act); var g4 = ObjectGetter.Type <NiceAct>().InitialValues(d); var g5 = ObjectGetter.Type(type).Value("Name"); var g6 = ObjectGetter.Type <NiceAct>().Value("Name"); var g7 = ObjectGetter.Type <NiceAct>().Value(t => t.Name); var g8 = ObjectGetter.Type <NiceAct>().Value <string>(t => t.Name); Assert.Equal("Hu", g1.GetValue <string>("Name")); Assert.Equal("Ax", g2.GetValue <string>("Name")); Assert.Equal("Hu", g3.GetValue <string>("Name")); Assert.Equal("Ax", g4.GetValue <string>("Name")); Assert.Equal("Hu", g5.Instance(act).Value); Assert.Equal("Hu", g6.Instance(act).Value); Assert.Equal("Hu", g7.Instance(act).Value); Assert.Equal("Hu", g8.Instance(act).Value); }
public void FieldsBasic() { var fieldsType = this._assembly.GetType("AssemblyToProcess.Basic.Fields"); var fieldsInstance = (dynamic) Activator.CreateInstance(fieldsType); PropertyExtensions.SetPrivateFieldValue(fieldsInstance, "_privateField", "I'm private."); fieldsType.GetField("PublicField").SetValue(fieldsInstance, 123); // Hand copy. var hCopy = fieldsInstance.HCopy(); var hGetter = new ObjectGetter(fieldsType, hCopy); Assert.Equal("I'm private.", hGetter.PrivateFieldValue("_privateField")); Assert.Equal(123, hGetter.FieldValue("PublicField")); // Deep copy. var dCopy = fieldsInstance.DeepCopy(); var dGetter = new ObjectGetter(fieldsType, dCopy); Assert.Equal("I'm private.", dGetter.PrivateFieldValue("_privateField")); Assert.Equal(123, dGetter.FieldValue("PublicField")); }
public void ObjectInheritanceTest() { var inheritsAbstractType = this._assembly.GetType("AssemblyToProcess.Abstracts.InheritsAbstract"); var inheritsAbstractInstance = (dynamic)Activator.CreateInstance(inheritsAbstractType); inheritsAbstractType.GetField("MainObject").SetValue(inheritsAbstractInstance, "main obj"); inheritsAbstractType.GetProperty("InterfaceProperty").SetValue(inheritsAbstractInstance, 123); // Hand copy. var hCopy = inheritsAbstractInstance.HCopy(); var hGet = new ObjectGetter(inheritsAbstractType, hCopy); Assert.Equal("main obj", hGet.FieldValue("MainObject")); Assert.Equal(123, hGet.PropertyValue("InterfaceProperty")); // Deep copy. var dCopy = inheritsAbstractInstance.DeepCopy(); var dGet = new ObjectGetter(inheritsAbstractType, dCopy); Assert.Equal("main obj", dGet.FieldValue("MainObject")); Assert.Equal(123, dGet.PropertyValue("InterfaceProperty")); }
public void ObjectInheritanceTest() { var inheritsAbstractType = this._assembly.GetType("AssemblyToProcess.Abstracts.InheritsAbstract"); var inheritsAbstractInstance = (dynamic) Activator.CreateInstance(inheritsAbstractType); inheritsAbstractType.GetField("MainObject").SetValue(inheritsAbstractInstance, "main obj"); inheritsAbstractType.GetProperty("InterfaceProperty").SetValue(inheritsAbstractInstance, 123); // Hand copy. var hCopy = inheritsAbstractInstance.HCopy(); var hGet = new ObjectGetter(inheritsAbstractType, hCopy); Assert.Equal("main obj", hGet.FieldValue("MainObject")); Assert.Equal(123, hGet.PropertyValue("InterfaceProperty")); // Deep copy. var dCopy = inheritsAbstractInstance.DeepCopy(); var dGet = new ObjectGetter(inheritsAbstractType, dCopy); Assert.Equal("main obj", dGet.FieldValue("MainObject")); Assert.Equal(123, dGet.PropertyValue("InterfaceProperty")); }
public void ObjectDictionaryTest() { var fieldsType = this._assembly.GetType("AssemblyToProcess.Basic.Fields"); dynamic fieldInstanceOne = this.GetFieldInstance("first", 1); dynamic fieldInstanceTwo = this.GetFieldInstance("second", 2); dynamic fieldInstanceThree = this.GetFieldInstance("third", 3); var dictionaryType = Assembly.GetAssembly(typeof (Dictionary<Fields, Fields>)) .GetType("System.Collections.Generic.Dictionary`2"); var dictionaryInstance = (dynamic) Activator .CreateInstance(dictionaryType.MakeGenericType(fieldsType, fieldsType)); dynamic dictionaryAdd = dictionaryInstance.GetType().GetMethod("Add"); dictionaryAdd.Invoke(dictionaryInstance, new[] {fieldInstanceOne, fieldInstanceOne}); dictionaryAdd.Invoke(dictionaryInstance, new[] {fieldInstanceTwo, fieldInstanceTwo}); dictionaryAdd.Invoke(dictionaryInstance, new[] {fieldInstanceThree, null}); var hasDictionaryType = this._assembly.GetType("AssemblyToProcess.Enumerables.HasDictionary"); var hasDictionaryInstance = (dynamic) Activator.CreateInstance(hasDictionaryType); hasDictionaryType.GetField("DictionaryOfObjects").SetValue(hasDictionaryInstance, dictionaryInstance); // Hand copy. var hCopy = hasDictionaryInstance.HCopy(); foreach (var item in hCopy.DictionaryOfObjects) { ObjectGetter hGetter = new ObjectGetter(fieldsType, item.Value); if (1 == item.Key.PublicField) { Assert.Equal("first", hGetter.PrivateFieldValue("_privateField")); Assert.Equal(1, hGetter.FieldValue("PublicField")); } else if (2 == item.Key.PublicField) { Assert.Equal("second", hGetter.PrivateFieldValue("_privateField")); Assert.Equal(2, hGetter.FieldValue("PublicField")); } else { // Are nulls handled properly? Assert.Equal(null, (Fields) item.Value); } } // Deep copy. dynamic dCopy = hasDictionaryInstance.DeepCopy(); foreach (var item in dCopy.DictionaryOfObjects) { ObjectGetter dGetter = new ObjectGetter(fieldsType, item.Value); if (1 == item.Key.PublicField) { Assert.Equal("first", dGetter.PrivateFieldValue("_privateField")); Assert.Equal(1, dGetter.FieldValue("PublicField")); } else if (2 == item.Key.PublicField) { Assert.Equal("second", dGetter.PrivateFieldValue("_privateField")); Assert.Equal(2, dGetter.FieldValue("PublicField")); } else { // Are nulls handled properly? Assert.Equal(null, (Fields) item.Value); } } // Bad copy. dynamic bCopy = hasDictionaryInstance.BCopy(); foreach (var item in bCopy.DictionaryOfObjects) { ObjectGetter bGetter = new ObjectGetter(fieldsType, item.Value); if (1 == item.Key.PublicField) { Assert.Equal("first", bGetter.PrivateFieldValue("_privateField")); Assert.Equal(1, bGetter.FieldValue("PublicField")); } else if (2 == item.Key.PublicField) { Assert.Equal("second", bGetter.PrivateFieldValue("_privateField")); Assert.Equal(2, bGetter.FieldValue("PublicField")); } else { // Are nulls handled properly? Assert.Equal(null, (Fields) item.Value); } } // Modify. dynamic dictionaryClear = dictionaryInstance.GetType().GetMethod("Clear"); dictionaryClear.Invoke(dictionaryInstance, new dynamic[0]); dictionaryAdd.Invoke(dictionaryInstance, new[] {fieldInstanceTwo, fieldInstanceOne}); dictionaryAdd.Invoke(dictionaryInstance, new[] {fieldInstanceThree, null}); // Hand copy. foreach (var item in hCopy.DictionaryOfObjects) { ObjectGetter hGetter = new ObjectGetter(fieldsType, item.Value); if (1 == item.Key.PublicField) { Assert.Equal("first", hGetter.PrivateFieldValue("_privateField")); Assert.Equal(1, hGetter.FieldValue("PublicField")); } else if (2 == item.Key.PublicField) { Assert.Equal("second", hGetter.PrivateFieldValue("_privateField")); Assert.Equal(2, hGetter.FieldValue("PublicField")); } else { // Are nulls handled properly? Assert.Equal(null, (Fields) item.Value); } } // Deep copy. foreach (var item in dCopy.DictionaryOfObjects) { ObjectGetter dGetter = new ObjectGetter(fieldsType, item.Value); if (1 == item.Key.PublicField) { Assert.Equal("first", dGetter.PrivateFieldValue("_privateField")); Assert.Equal(1, dGetter.FieldValue("PublicField")); } else if (2 == item.Key.PublicField) { Assert.Equal("second", dGetter.PrivateFieldValue("_privateField")); Assert.Equal(2, dGetter.FieldValue("PublicField")); } else { // Are nulls handled properly? Assert.Equal(null, (Fields) item.Value); } } // Bad copy. foreach (var item in bCopy.DictionaryOfObjects) { ObjectGetter bGetter = new ObjectGetter(fieldsType, item.Value); if (2 == item.Key.PublicField) { Assert.Equal("first", bGetter.PrivateFieldValue("_privateField")); Assert.Equal(1, bGetter.FieldValue("PublicField")); } else { // Are nulls handled properly? Assert.Equal(null, (Fields) item.Value); } } }
public void Tests() { var propT = this._assembly.GetType("AssemblyToProcess.Basic.Properties"); var propI = (dynamic)Activator.CreateInstance(propT); PropertyExtensions.SetPrivatePropertyValue(propI, "BackedProperty", 1.23); PropertyExtensions.SetPrivatePropertyValue(propI, "PrivateProperty", 123); propT.GetProperty("PublicProperty").SetValue(propI, "I'm public."); var typicalIT = this._assembly.GetType("AssemblyToProcess.Inherits.TypicalInheritance"); var typicalII = (dynamic)Activator.CreateInstance(typicalIT); typicalIT.GetField("Properties").SetValue(typicalII, propI); // Hand copy. var hCopy = typicalII.HCopy(); var hGet = new ObjectGetter(typicalIT, hCopy); var fValue = hGet.FieldValue("Properties"); hGet = new ObjectGetter(propT, fValue); Assert.Equal(1.23, hGet.PrivatePropertyValue("BackedProperty")); Assert.Equal(0, hGet.PrivatePropertyValue("PrivateProperty")); // Won't copy since it's private. Assert.Equal("I'm public.", hGet.PropertyValue("PublicProperty")); // Deep copy. var dCopy = typicalII.DeepCopy(); var dGet = new ObjectGetter(typicalIT, dCopy); fValue = dGet.FieldValue("Properties"); dGet = new ObjectGetter(propT, fValue); Assert.Equal(1.23, dGet.PrivatePropertyValue("BackedProperty")); Assert.Equal(123, dGet.PrivatePropertyValue("PrivateProperty")); Assert.Equal("I'm public.", dGet.PropertyValue("PublicProperty")); // Bad copy. var bCopy = typicalII.BCopy(); var bGet = new ObjectGetter(typicalIT, bCopy); fValue = bGet.FieldValue("Properties"); bGet = new ObjectGetter(propT, fValue); Assert.Equal(1.23, bGet.PrivatePropertyValue("BackedProperty")); Assert.Equal(123, bGet.PrivatePropertyValue("PrivateProperty")); Assert.Equal("I'm public.", bGet.PropertyValue("PublicProperty")); // Modify. PropertyExtensions.SetPrivatePropertyValue(propI, "BackedProperty", 2.34); PropertyExtensions.SetPrivatePropertyValue(propI, "PrivateProperty", 234); propT.GetProperty("PublicProperty").SetValue(propI, "I'm changed!"); typicalIT.GetField("Properties").SetValue(typicalII, propI); // Hand copy. hGet = new ObjectGetter(typicalIT, hCopy); fValue = hGet.FieldValue("Properties"); hGet = new ObjectGetter(propT, fValue); Assert.Equal(1.23, hGet.PrivatePropertyValue("BackedProperty")); Assert.Equal(0, hGet.PrivatePropertyValue("PrivateProperty")); // Won't copy since it's private. Assert.Equal("I'm public.", hGet.PropertyValue("PublicProperty")); // Deep copy. dGet = new ObjectGetter(typicalIT, dCopy); fValue = dGet.FieldValue("Properties"); dGet = new ObjectGetter(propT, fValue); Assert.Equal(1.23, dGet.PrivatePropertyValue("BackedProperty")); Assert.Equal(123, dGet.PrivatePropertyValue("PrivateProperty")); Assert.Equal("I'm public.", dGet.PropertyValue("PublicProperty")); // Bad copy. bGet = new ObjectGetter(typicalIT, bCopy); fValue = bGet.FieldValue("Properties"); bGet = new ObjectGetter(propT, fValue); Assert.Equal(2.34, bGet.PrivatePropertyValue("BackedProperty")); Assert.Equal(234, bGet.PrivatePropertyValue("PrivateProperty")); Assert.Equal("I'm changed!", bGet.PropertyValue("PublicProperty")); }
public void ObjectListTest() { var fieldsType = this._assembly.GetType("AssemblyToProcess.Basic.Fields"); dynamic fieldInstanceOne = this.GetFieldInstance("first", 1); dynamic fieldInstanceTwo = this.GetFieldInstance("second", 2); var listType = Assembly.GetAssembly(typeof (List<>)) .GetType("System.Collections.Generic.List`1"); var listInstance = (dynamic) Activator.CreateInstance(listType.MakeGenericType(fieldsType)); dynamic listAdd = listInstance.GetType().GetMethod("Add"); listAdd.Invoke(listInstance, new[] {fieldInstanceOne}); listAdd.Invoke(listInstance, new[] {fieldInstanceTwo}); listAdd.Invoke(listInstance, new dynamic[] {null}); var hasListType = this._assembly.GetType("AssemblyToProcess.Enumerables.HasList"); var hasListInstance = (dynamic) Activator.CreateInstance(hasListType); hasListType.GetField("ListOfObjects").SetValue(hasListInstance, listInstance); // Hand copy. var hCopy = hasListInstance.HCopy(); var hGetter = new ObjectGetter(fieldsType, hCopy.ListOfObjects[0]); Assert.Equal("first", hGetter.PrivateFieldValue("_privateField")); Assert.Equal(1, hGetter.FieldValue("PublicField")); hGetter = new ObjectGetter(fieldsType, hCopy.ListOfObjects[1]); Assert.Equal("second", hGetter.PrivateFieldValue("_privateField")); Assert.Equal(2, hGetter.FieldValue("PublicField")); // Are nulls handled properly? Assert.Equal(null, (Fields) hCopy.ListOfObjects[2]); // Deep copy. var dCopy = hasListInstance.DeepCopy(); var dGetter = new ObjectGetter(fieldsType, dCopy.ListOfObjects[0]); Assert.Equal("first", dGetter.PrivateFieldValue("_privateField")); Assert.Equal(1, dGetter.FieldValue("PublicField")); dGetter = new ObjectGetter(fieldsType, dCopy.ListOfObjects[1]); Assert.Equal("second", dGetter.PrivateFieldValue("_privateField")); Assert.Equal(2, dGetter.FieldValue("PublicField")); // Are nulls handled properly? Assert.Equal(null, (Fields) dCopy.ListOfObjects[2]); // Bad copy. var bCopy = hasListInstance.BCopy(); var bGetter = new ObjectGetter(fieldsType, bCopy.ListOfObjects[0]); Assert.Equal("first", bGetter.PrivateFieldValue("_privateField")); Assert.Equal(1, bGetter.FieldValue("PublicField")); bGetter = new ObjectGetter(fieldsType, bCopy.ListOfObjects[1]); Assert.Equal("second", bGetter.PrivateFieldValue("_privateField")); Assert.Equal(2, bGetter.FieldValue("PublicField")); // Are nulls handled properly? Assert.Equal(null, (Fields) bCopy.ListOfObjects[2]); // Modify. dynamic listClear = listInstance.GetType().GetMethod("Clear"); listClear.Invoke(listInstance, new dynamic[0]); listAdd.Invoke(listInstance, new[] {fieldInstanceTwo}); listAdd.Invoke(listInstance, new dynamic[] {null}); // Hand copy. hGetter = new ObjectGetter(fieldsType, hCopy.ListOfObjects[0]); Assert.Equal("first", hGetter.PrivateFieldValue("_privateField")); Assert.Equal(1, hGetter.FieldValue("PublicField")); hGetter = new ObjectGetter(fieldsType, hCopy.ListOfObjects[1]); Assert.Equal("second", hGetter.PrivateFieldValue("_privateField")); Assert.Equal(2, hGetter.FieldValue("PublicField")); // Are nulls handled properly? Assert.Equal(null, (Fields) hCopy.ListOfObjects[2]); // Deep copy. dGetter = new ObjectGetter(fieldsType, dCopy.ListOfObjects[0]); Assert.Equal("first", dGetter.PrivateFieldValue("_privateField")); Assert.Equal(1, dGetter.FieldValue("PublicField")); dGetter = new ObjectGetter(fieldsType, dCopy.ListOfObjects[1]); Assert.Equal("second", dGetter.PrivateFieldValue("_privateField")); Assert.Equal(2, dGetter.FieldValue("PublicField")); // Are nulls handled properly? Assert.Equal(null, (Fields) dCopy.ListOfObjects[2]); // Bad copy. bGetter = new ObjectGetter(fieldsType, bCopy.ListOfObjects[0]); Assert.Equal("second", bGetter.PrivateFieldValue("_privateField")); Assert.Equal(2, bGetter.FieldValue("PublicField")); // Are nulls handled properly? Assert.Equal(null, (Fields) bCopy.ListOfObjects[1]); }
public void Tests() { var propT = this._assembly.GetType("AssemblyToProcess.Basic.Properties"); var propI = (dynamic) Activator.CreateInstance(propT); PropertyExtensions.SetPrivatePropertyValue(propI, "BackedProperty", 1.23); PropertyExtensions.SetPrivatePropertyValue(propI, "PrivateProperty", 123); propT.GetProperty("PublicProperty").SetValue(propI, "I'm public."); var typicalIT = this._assembly.GetType("AssemblyToProcess.Inherits.TypicalInheritance"); var typicalII = (dynamic) Activator.CreateInstance(typicalIT); typicalIT.GetField("Properties").SetValue(typicalII, propI); // Hand copy. var hCopy = typicalII.HCopy(); var hGet = new ObjectGetter(typicalIT, hCopy); var fValue = hGet.FieldValue("Properties"); hGet = new ObjectGetter(propT, fValue); Assert.Equal(1.23, hGet.PrivatePropertyValue("BackedProperty")); Assert.Equal(0, hGet.PrivatePropertyValue("PrivateProperty")); // Won't copy since it's private. Assert.Equal("I'm public.", hGet.PropertyValue("PublicProperty")); // Deep copy. var dCopy = typicalII.DeepCopy(); var dGet = new ObjectGetter(typicalIT, dCopy); fValue = dGet.FieldValue("Properties"); dGet = new ObjectGetter(propT, fValue); Assert.Equal(1.23, dGet.PrivatePropertyValue("BackedProperty")); Assert.Equal(123, dGet.PrivatePropertyValue("PrivateProperty")); Assert.Equal("I'm public.", dGet.PropertyValue("PublicProperty")); // Bad copy. var bCopy = typicalII.BCopy(); var bGet = new ObjectGetter(typicalIT, bCopy); fValue = bGet.FieldValue("Properties"); bGet = new ObjectGetter(propT, fValue); Assert.Equal(1.23, bGet.PrivatePropertyValue("BackedProperty")); Assert.Equal(123, bGet.PrivatePropertyValue("PrivateProperty")); Assert.Equal("I'm public.", bGet.PropertyValue("PublicProperty")); // Modify. PropertyExtensions.SetPrivatePropertyValue(propI, "BackedProperty", 2.34); PropertyExtensions.SetPrivatePropertyValue(propI, "PrivateProperty", 234); propT.GetProperty("PublicProperty").SetValue(propI, "I'm changed!"); typicalIT.GetField("Properties").SetValue(typicalII, propI); // Hand copy. hGet = new ObjectGetter(typicalIT, hCopy); fValue = hGet.FieldValue("Properties"); hGet = new ObjectGetter(propT, fValue); Assert.Equal(1.23, hGet.PrivatePropertyValue("BackedProperty")); Assert.Equal(0, hGet.PrivatePropertyValue("PrivateProperty")); // Won't copy since it's private. Assert.Equal("I'm public.", hGet.PropertyValue("PublicProperty")); // Deep copy. dGet = new ObjectGetter(typicalIT, dCopy); fValue = dGet.FieldValue("Properties"); dGet = new ObjectGetter(propT, fValue); Assert.Equal(1.23, dGet.PrivatePropertyValue("BackedProperty")); Assert.Equal(123, dGet.PrivatePropertyValue("PrivateProperty")); Assert.Equal("I'm public.", dGet.PropertyValue("PublicProperty")); // Bad copy. bGet = new ObjectGetter(typicalIT, bCopy); fValue = bGet.FieldValue("Properties"); bGet = new ObjectGetter(propT, fValue); Assert.Equal(2.34, bGet.PrivatePropertyValue("BackedProperty")); Assert.Equal(234, bGet.PrivatePropertyValue("PrivateProperty")); Assert.Equal("I'm changed!", bGet.PropertyValue("PublicProperty")); }
public void ArrayOfObjects() { var fieldsType = this._assembly.GetType("AssemblyToProcess.Basic.Fields"); dynamic fieldInstanceOne = this.GetFieldInstance("first", 1); dynamic fieldInstanceTwo = this.GetFieldInstance("second", 2); dynamic fieldsArrayInstance = Array.CreateInstance(fieldsType, 3); fieldsArrayInstance.SetValue(fieldInstanceOne, 0); fieldsArrayInstance.SetValue(fieldInstanceTwo, 1); fieldsArrayInstance.SetValue(null, 2); var arrayOfObjectsType = this._assembly .GetType("AssemblyToProcess.Arrays.ArrayOfObjects"); var arrayOfObjectsInstance = (dynamic) Activator.CreateInstance(arrayOfObjectsType); arrayOfObjectsType.GetField("FieldsArray").SetValue(arrayOfObjectsInstance, fieldsArrayInstance); // Hand copy. var hCopy = arrayOfObjectsInstance.HCopy(); var hGetter = new ObjectGetter(fieldsType, hCopy.FieldsArray[0]); Assert.Equal("first", hGetter.PrivateFieldValue("_privateField")); Assert.Equal(1, hGetter.FieldValue("PublicField")); hGetter = new ObjectGetter(fieldsType, hCopy.FieldsArray[1]); Assert.Equal("second", hGetter.PrivateFieldValue("_privateField")); Assert.Equal(2, hGetter.FieldValue("PublicField")); // Are nulls handled properly? Assert.Equal(null, (Fields)hCopy.FieldsArray[2]); // Deep copy. var dCopy = arrayOfObjectsInstance.DeepCopy(); var dGetter = new ObjectGetter(fieldsType, dCopy.FieldsArray[0]); Assert.Equal("first", dGetter.PrivateFieldValue("_privateField")); Assert.Equal(1, dGetter.FieldValue("PublicField")); dGetter = new ObjectGetter(fieldsType, dCopy.FieldsArray[1]); Assert.Equal("second", dGetter.PrivateFieldValue("_privateField")); Assert.Equal(2, dGetter.FieldValue("PublicField")); // Are nulls handled properly? Assert.Equal(null, (Fields)dCopy.FieldsArray[2]); // Bad copy. var bCopy = arrayOfObjectsInstance.BCopy(); var bGetter = new ObjectGetter(fieldsType, bCopy.FieldsArray[0]); Assert.Equal("first", bGetter.PrivateFieldValue("_privateField")); Assert.Equal(1, bGetter.FieldValue("PublicField")); bGetter = new ObjectGetter(fieldsType, bCopy.FieldsArray[1]); Assert.Equal("second", bGetter.PrivateFieldValue("_privateField")); Assert.Equal(2, bGetter.FieldValue("PublicField")); // Are nulls handled properly? Assert.Equal(null, (Fields)bCopy.FieldsArray[2]); // Modify. fieldInstanceOne = this.GetFieldInstance("third", 3); fieldInstanceTwo = this.GetFieldInstance("fourth", 4); fieldsArrayInstance.SetValue(fieldInstanceOne, 0); fieldsArrayInstance.SetValue(fieldInstanceTwo, 1); arrayOfObjectsType.GetField("FieldsArray").SetValue(arrayOfObjectsInstance, fieldsArrayInstance); // Hand copy (should stay the same). hGetter = new ObjectGetter(fieldsType, hCopy.FieldsArray[0]); Assert.Equal("first", hGetter.PrivateFieldValue("_privateField")); Assert.Equal(1, hGetter.FieldValue("PublicField")); hGetter = new ObjectGetter(fieldsType, hCopy.FieldsArray[1]); Assert.Equal("second", hGetter.PrivateFieldValue("_privateField")); Assert.Equal(2, hGetter.FieldValue("PublicField")); // Are nulls handled properly? Assert.Equal(null, (Fields)hCopy.FieldsArray[2]); // Deep copy (should stay the same). dGetter = new ObjectGetter(fieldsType, dCopy.FieldsArray[0]); Assert.Equal("first", dGetter.PrivateFieldValue("_privateField")); Assert.Equal(1, dGetter.FieldValue("PublicField")); dGetter = new ObjectGetter(fieldsType, dCopy.FieldsArray[1]); Assert.Equal("second", dGetter.PrivateFieldValue("_privateField")); Assert.Equal(2, dGetter.FieldValue("PublicField")); // Are nulls handled properly? Assert.Equal(null, (Fields)dCopy.FieldsArray[2]); // Bad copy (should be modified). bGetter = new ObjectGetter(fieldsType, bCopy.FieldsArray[0]); Assert.Equal("third", bGetter.PrivateFieldValue("_privateField")); Assert.Equal(3, bGetter.FieldValue("PublicField")); bGetter = new ObjectGetter(fieldsType, bCopy.FieldsArray[1]); Assert.Equal("fourth", bGetter.PrivateFieldValue("_privateField")); Assert.Equal(4, bGetter.FieldValue("PublicField")); // Are nulls handled properly? Assert.Equal(null, (Fields)bCopy.FieldsArray[2]); }
public void ObjectDictionaryTest() { var fieldsType = this._assembly.GetType("AssemblyToProcess.Basic.Fields"); dynamic fieldInstanceOne = this.GetFieldInstance("first", 1); dynamic fieldInstanceTwo = this.GetFieldInstance("second", 2); dynamic fieldInstanceThree = this.GetFieldInstance("third", 3); var dictionaryType = Assembly.GetAssembly(typeof(Dictionary <Fields, Fields>)) .GetType("System.Collections.Generic.Dictionary`2"); var dictionaryInstance = (dynamic)Activator .CreateInstance(dictionaryType.MakeGenericType(fieldsType, fieldsType)); dynamic dictionaryAdd = dictionaryInstance.GetType().GetMethod("Add"); dictionaryAdd.Invoke(dictionaryInstance, new[] { fieldInstanceOne, fieldInstanceOne }); dictionaryAdd.Invoke(dictionaryInstance, new[] { fieldInstanceTwo, fieldInstanceTwo }); dictionaryAdd.Invoke(dictionaryInstance, new[] { fieldInstanceThree, null }); var hasDictionaryType = this._assembly.GetType("AssemblyToProcess.Enumerables.HasDictionary"); var hasDictionaryInstance = (dynamic)Activator.CreateInstance(hasDictionaryType); hasDictionaryType.GetField("DictionaryOfObjects").SetValue(hasDictionaryInstance, dictionaryInstance); // Hand copy. var hCopy = hasDictionaryInstance.HCopy(); foreach (var item in hCopy.DictionaryOfObjects) { ObjectGetter hGetter = new ObjectGetter(fieldsType, item.Value); if (1 == item.Key.PublicField) { Assert.Equal("first", hGetter.PrivateFieldValue("_privateField")); Assert.Equal(1, hGetter.FieldValue("PublicField")); } else if (2 == item.Key.PublicField) { Assert.Equal("second", hGetter.PrivateFieldValue("_privateField")); Assert.Equal(2, hGetter.FieldValue("PublicField")); } else { // Are nulls handled properly? Assert.Equal(null, (Fields)item.Value); } } // Deep copy. dynamic dCopy = hasDictionaryInstance.DeepCopy(); foreach (var item in dCopy.DictionaryOfObjects) { ObjectGetter dGetter = new ObjectGetter(fieldsType, item.Value); if (1 == item.Key.PublicField) { Assert.Equal("first", dGetter.PrivateFieldValue("_privateField")); Assert.Equal(1, dGetter.FieldValue("PublicField")); } else if (2 == item.Key.PublicField) { Assert.Equal("second", dGetter.PrivateFieldValue("_privateField")); Assert.Equal(2, dGetter.FieldValue("PublicField")); } else { // Are nulls handled properly? Assert.Equal(null, (Fields)item.Value); } } // Bad copy. dynamic bCopy = hasDictionaryInstance.BCopy(); foreach (var item in bCopy.DictionaryOfObjects) { ObjectGetter bGetter = new ObjectGetter(fieldsType, item.Value); if (1 == item.Key.PublicField) { Assert.Equal("first", bGetter.PrivateFieldValue("_privateField")); Assert.Equal(1, bGetter.FieldValue("PublicField")); } else if (2 == item.Key.PublicField) { Assert.Equal("second", bGetter.PrivateFieldValue("_privateField")); Assert.Equal(2, bGetter.FieldValue("PublicField")); } else { // Are nulls handled properly? Assert.Equal(null, (Fields)item.Value); } } // Modify. dynamic dictionaryClear = dictionaryInstance.GetType().GetMethod("Clear"); dictionaryClear.Invoke(dictionaryInstance, new dynamic[0]); dictionaryAdd.Invoke(dictionaryInstance, new[] { fieldInstanceTwo, fieldInstanceOne }); dictionaryAdd.Invoke(dictionaryInstance, new[] { fieldInstanceThree, null }); // Hand copy. foreach (var item in hCopy.DictionaryOfObjects) { ObjectGetter hGetter = new ObjectGetter(fieldsType, item.Value); if (1 == item.Key.PublicField) { Assert.Equal("first", hGetter.PrivateFieldValue("_privateField")); Assert.Equal(1, hGetter.FieldValue("PublicField")); } else if (2 == item.Key.PublicField) { Assert.Equal("second", hGetter.PrivateFieldValue("_privateField")); Assert.Equal(2, hGetter.FieldValue("PublicField")); } else { // Are nulls handled properly? Assert.Equal(null, (Fields)item.Value); } } // Deep copy. foreach (var item in dCopy.DictionaryOfObjects) { ObjectGetter dGetter = new ObjectGetter(fieldsType, item.Value); if (1 == item.Key.PublicField) { Assert.Equal("first", dGetter.PrivateFieldValue("_privateField")); Assert.Equal(1, dGetter.FieldValue("PublicField")); } else if (2 == item.Key.PublicField) { Assert.Equal("second", dGetter.PrivateFieldValue("_privateField")); Assert.Equal(2, dGetter.FieldValue("PublicField")); } else { // Are nulls handled properly? Assert.Equal(null, (Fields)item.Value); } } // Bad copy. foreach (var item in bCopy.DictionaryOfObjects) { ObjectGetter bGetter = new ObjectGetter(fieldsType, item.Value); if (2 == item.Key.PublicField) { Assert.Equal("first", bGetter.PrivateFieldValue("_privateField")); Assert.Equal(1, bGetter.FieldValue("PublicField")); } else { // Are nulls handled properly? Assert.Equal(null, (Fields)item.Value); } } }
public async Task GetObjects_ShouldReturnCorrectDistances() { var geometryFactory = NtsGeometryServices.Instance.CreateGeometryFactory(srid: 4326); var users = new List <User> { new User { Status = UserStatus.Available, UserName = "******", }, new User { Status = UserStatus.Available, UserName = "******", }, new User { Status = UserStatus.Available, UserName = "******", } }; var logins = new List <Login> { new Login { User = users[0], LoggedAt = DateTime.UtcNow.AddDays(-10), LoginLocation = new Point(40, 40) { SRID = 4326 }, }, new Login { User = users[0], LoggedAt = DateTime.UtcNow.AddDays(0), LoginLocation = new Point(10, 10) { SRID = 4326 }, }, new Login { User = users[1], LoggedAt = DateTime.UtcNow.AddDays(10), LoginLocation = new Point(40, 40) { SRID = 4326 }, }, new Login { User = users[2], LoggedAt = DateTime.UtcNow.AddDays(10), LoginLocation = new Point(10.003, 10) { SRID = 4326 }, } }; users[0].Logins = new List <Login> { logins[0], logins[1] }; users[1].Logins = new List <Login> { logins[2] }; users[2].Logins = new List <Login> { logins[3] }; var objects = new List <OfferedObject> { new OfferedObject { OfferedObjectId = 1, PublishedAt = DateTime.UtcNow.AddDays(-1), ObjectStatus = ObjectStatus.Available, OwnerLogin = logins[0], CurrentTransactionType = TransactionType.Free, Photos = new List <ObjectPhoto>(), Tags = new List <ObjectTag>(), Impressions = new List <ObjectImpression>() }, new OfferedObject { OfferedObjectId = 2, PublishedAt = DateTime.UtcNow.AddDays(-1), ObjectStatus = ObjectStatus.Available, OwnerLogin = logins[1], CurrentTransactionType = TransactionType.Free, Photos = new List <ObjectPhoto>(), Tags = new List <ObjectTag>(), Impressions = new List <ObjectImpression>() }, new OfferedObject { OfferedObjectId = 3, PublishedAt = DateTime.UtcNow.AddDays(-1), ObjectStatus = ObjectStatus.Available, OwnerLogin = logins[2], CurrentTransactionType = TransactionType.Free, Photos = new List <ObjectPhoto>(), Tags = new List <ObjectTag>(), Impressions = new List <ObjectImpression>() }, new OfferedObject { OfferedObjectId = 4, PublishedAt = DateTime.UtcNow.AddDays(-1), ObjectStatus = ObjectStatus.Available, OwnerLogin = logins[2], CurrentTransactionType = TransactionType.Free, Photos = new List <ObjectPhoto>(), Tags = new List <ObjectTag>(), Impressions = new List <ObjectImpression>() }, }; var objectsRepo = new Mock <IRepository <int, OfferedObject> >(); var objectsMock = objects.AsQueryable().BuildMock(); objectsRepo.Setup(o => o.Table).Returns(objects.AsQueryable().BuildMock().Object); var loginRepo = new Mock <IRepository <Guid, Login> >(); var photoConstructor = new Mock <IPhotoUrlConstructor>(); var impression = new Mock <IObjectImpressionsManager>(); var objectQueryHelper = new ObjectQueryHelper(); var userDataManager = new Mock <IUserDataManager>(); userDataManager.Setup(u => u.AddCurrentUserIfNeeded()).ReturnsAsync((logins[3], users[2])); var configs = new Mock <IConfiguration>(); configs.Setup(c => c["Settings:IncludeObjectLessThan"]).Returns("500"); var getter = new ObjectGetter(objectsRepo.Object, photoConstructor.Object, impression.Object, objectQueryHelper, null, configs.Object, userDataManager.Object); var result = await getter.GetObjects(new PagingArguments { StartObject = 0, Size = 20 }); Assert.True(result.Count == 4); }
public void ArrayOfObjects() { var fieldsType = this._assembly.GetType("AssemblyToProcess.Basic.Fields"); dynamic fieldInstanceOne = this.GetFieldInstance("first", 1); dynamic fieldInstanceTwo = this.GetFieldInstance("second", 2); dynamic fieldsArrayInstance = Array.CreateInstance(fieldsType, 3); fieldsArrayInstance.SetValue(fieldInstanceOne, 0); fieldsArrayInstance.SetValue(fieldInstanceTwo, 1); fieldsArrayInstance.SetValue(null, 2); var arrayOfObjectsType = this._assembly .GetType("AssemblyToProcess.Arrays.ArrayOfObjects"); var arrayOfObjectsInstance = (dynamic)Activator.CreateInstance(arrayOfObjectsType); arrayOfObjectsType.GetField("FieldsArray").SetValue(arrayOfObjectsInstance, fieldsArrayInstance); // Hand copy. var hCopy = arrayOfObjectsInstance.HCopy(); var hGetter = new ObjectGetter(fieldsType, hCopy.FieldsArray[0]); Assert.Equal("first", hGetter.PrivateFieldValue("_privateField")); Assert.Equal(1, hGetter.FieldValue("PublicField")); hGetter = new ObjectGetter(fieldsType, hCopy.FieldsArray[1]); Assert.Equal("second", hGetter.PrivateFieldValue("_privateField")); Assert.Equal(2, hGetter.FieldValue("PublicField")); // Are nulls handled properly? Assert.Equal(null, (Fields)hCopy.FieldsArray[2]); // Deep copy. var dCopy = arrayOfObjectsInstance.DeepCopy(); var dGetter = new ObjectGetter(fieldsType, dCopy.FieldsArray[0]); Assert.Equal("first", dGetter.PrivateFieldValue("_privateField")); Assert.Equal(1, dGetter.FieldValue("PublicField")); dGetter = new ObjectGetter(fieldsType, dCopy.FieldsArray[1]); Assert.Equal("second", dGetter.PrivateFieldValue("_privateField")); Assert.Equal(2, dGetter.FieldValue("PublicField")); // Are nulls handled properly? Assert.Equal(null, (Fields)dCopy.FieldsArray[2]); // Bad copy. var bCopy = arrayOfObjectsInstance.BCopy(); var bGetter = new ObjectGetter(fieldsType, bCopy.FieldsArray[0]); Assert.Equal("first", bGetter.PrivateFieldValue("_privateField")); Assert.Equal(1, bGetter.FieldValue("PublicField")); bGetter = new ObjectGetter(fieldsType, bCopy.FieldsArray[1]); Assert.Equal("second", bGetter.PrivateFieldValue("_privateField")); Assert.Equal(2, bGetter.FieldValue("PublicField")); // Are nulls handled properly? Assert.Equal(null, (Fields)bCopy.FieldsArray[2]); // Modify. fieldInstanceOne = this.GetFieldInstance("third", 3); fieldInstanceTwo = this.GetFieldInstance("fourth", 4); fieldsArrayInstance.SetValue(fieldInstanceOne, 0); fieldsArrayInstance.SetValue(fieldInstanceTwo, 1); arrayOfObjectsType.GetField("FieldsArray").SetValue(arrayOfObjectsInstance, fieldsArrayInstance); // Hand copy (should stay the same). hGetter = new ObjectGetter(fieldsType, hCopy.FieldsArray[0]); Assert.Equal("first", hGetter.PrivateFieldValue("_privateField")); Assert.Equal(1, hGetter.FieldValue("PublicField")); hGetter = new ObjectGetter(fieldsType, hCopy.FieldsArray[1]); Assert.Equal("second", hGetter.PrivateFieldValue("_privateField")); Assert.Equal(2, hGetter.FieldValue("PublicField")); // Are nulls handled properly? Assert.Equal(null, (Fields)hCopy.FieldsArray[2]); // Deep copy (should stay the same). dGetter = new ObjectGetter(fieldsType, dCopy.FieldsArray[0]); Assert.Equal("first", dGetter.PrivateFieldValue("_privateField")); Assert.Equal(1, dGetter.FieldValue("PublicField")); dGetter = new ObjectGetter(fieldsType, dCopy.FieldsArray[1]); Assert.Equal("second", dGetter.PrivateFieldValue("_privateField")); Assert.Equal(2, dGetter.FieldValue("PublicField")); // Are nulls handled properly? Assert.Equal(null, (Fields)dCopy.FieldsArray[2]); // Bad copy (should be modified). bGetter = new ObjectGetter(fieldsType, bCopy.FieldsArray[0]); Assert.Equal("third", bGetter.PrivateFieldValue("_privateField")); Assert.Equal(3, bGetter.FieldValue("PublicField")); bGetter = new ObjectGetter(fieldsType, bCopy.FieldsArray[1]); Assert.Equal("fourth", bGetter.PrivateFieldValue("_privateField")); Assert.Equal(4, bGetter.FieldValue("PublicField")); // Are nulls handled properly? Assert.Equal(null, (Fields)bCopy.FieldsArray[2]); }
public void ObjectListTest() { var fieldsType = this._assembly.GetType("AssemblyToProcess.Basic.Fields"); dynamic fieldInstanceOne = this.GetFieldInstance("first", 1); dynamic fieldInstanceTwo = this.GetFieldInstance("second", 2); var listType = Assembly.GetAssembly(typeof(List <>)) .GetType("System.Collections.Generic.List`1"); var listInstance = (dynamic)Activator.CreateInstance(listType.MakeGenericType(fieldsType)); dynamic listAdd = listInstance.GetType().GetMethod("Add"); listAdd.Invoke(listInstance, new[] { fieldInstanceOne }); listAdd.Invoke(listInstance, new[] { fieldInstanceTwo }); listAdd.Invoke(listInstance, new dynamic[] { null }); var hasListType = this._assembly.GetType("AssemblyToProcess.Enumerables.HasList"); var hasListInstance = (dynamic)Activator.CreateInstance(hasListType); hasListType.GetField("ListOfObjects").SetValue(hasListInstance, listInstance); // Hand copy. var hCopy = hasListInstance.HCopy(); var hGetter = new ObjectGetter(fieldsType, hCopy.ListOfObjects[0]); Assert.Equal("first", hGetter.PrivateFieldValue("_privateField")); Assert.Equal(1, hGetter.FieldValue("PublicField")); hGetter = new ObjectGetter(fieldsType, hCopy.ListOfObjects[1]); Assert.Equal("second", hGetter.PrivateFieldValue("_privateField")); Assert.Equal(2, hGetter.FieldValue("PublicField")); // Are nulls handled properly? Assert.Equal(null, (Fields)hCopy.ListOfObjects[2]); // Deep copy. var dCopy = hasListInstance.DeepCopy(); var dGetter = new ObjectGetter(fieldsType, dCopy.ListOfObjects[0]); Assert.Equal("first", dGetter.PrivateFieldValue("_privateField")); Assert.Equal(1, dGetter.FieldValue("PublicField")); dGetter = new ObjectGetter(fieldsType, dCopy.ListOfObjects[1]); Assert.Equal("second", dGetter.PrivateFieldValue("_privateField")); Assert.Equal(2, dGetter.FieldValue("PublicField")); // Are nulls handled properly? Assert.Equal(null, (Fields)dCopy.ListOfObjects[2]); // Bad copy. var bCopy = hasListInstance.BCopy(); var bGetter = new ObjectGetter(fieldsType, bCopy.ListOfObjects[0]); Assert.Equal("first", bGetter.PrivateFieldValue("_privateField")); Assert.Equal(1, bGetter.FieldValue("PublicField")); bGetter = new ObjectGetter(fieldsType, bCopy.ListOfObjects[1]); Assert.Equal("second", bGetter.PrivateFieldValue("_privateField")); Assert.Equal(2, bGetter.FieldValue("PublicField")); // Are nulls handled properly? Assert.Equal(null, (Fields)bCopy.ListOfObjects[2]); // Modify. dynamic listClear = listInstance.GetType().GetMethod("Clear"); listClear.Invoke(listInstance, new dynamic[0]); listAdd.Invoke(listInstance, new[] { fieldInstanceTwo }); listAdd.Invoke(listInstance, new dynamic[] { null }); // Hand copy. hGetter = new ObjectGetter(fieldsType, hCopy.ListOfObjects[0]); Assert.Equal("first", hGetter.PrivateFieldValue("_privateField")); Assert.Equal(1, hGetter.FieldValue("PublicField")); hGetter = new ObjectGetter(fieldsType, hCopy.ListOfObjects[1]); Assert.Equal("second", hGetter.PrivateFieldValue("_privateField")); Assert.Equal(2, hGetter.FieldValue("PublicField")); // Are nulls handled properly? Assert.Equal(null, (Fields)hCopy.ListOfObjects[2]); // Deep copy. dGetter = new ObjectGetter(fieldsType, dCopy.ListOfObjects[0]); Assert.Equal("first", dGetter.PrivateFieldValue("_privateField")); Assert.Equal(1, dGetter.FieldValue("PublicField")); dGetter = new ObjectGetter(fieldsType, dCopy.ListOfObjects[1]); Assert.Equal("second", dGetter.PrivateFieldValue("_privateField")); Assert.Equal(2, dGetter.FieldValue("PublicField")); // Are nulls handled properly? Assert.Equal(null, (Fields)dCopy.ListOfObjects[2]); // Bad copy. bGetter = new ObjectGetter(fieldsType, bCopy.ListOfObjects[0]); Assert.Equal("second", bGetter.PrivateFieldValue("_privateField")); Assert.Equal(2, bGetter.FieldValue("PublicField")); // Are nulls handled properly? Assert.Equal(null, (Fields)bCopy.ListOfObjects[1]); }