//private void AllFieldsAreEqual(IDevice expectedDevice, IDevice actualDevice) //{ // foreach (var field in typeof(IDevice).GetFields(BindingFlags.Public | BindingFlags.NonPublic | BindingFlags.Instance | BindingFlags.Static)) // { // Assert.AreEqual(field.GetValue(expectedDevice), field.GetValue(actualDevice)); // } //} //private void AllPropertiesAreEqual(IDevice expectedDevice, IDevice actualDevice) //{ // foreach (var property in typeof(IDevice).GetProperties(BindingFlags.Public | BindingFlags.NonPublic | BindingFlags.Instance | BindingFlags.Static)) // { // Assert.AreEqual(property.GetValue(expectedDevice), property.GetValue(actualDevice)); // } //} //private IDevice CreateFirstNotEmptyIDevice() //{ // var notEmptyDevice = new TapakoDevice() // { // //DevicePath = "Testpfad", // //DriverName = "lustiger Name", // IpAddress = ("192.168.1.1"), // MacAddress = ("000000000000"), // Manufacturer = "der lustige Mann", // }; // return notEmptyDevice; //} //[TestMethod] //public void MergeEmptyDevicesShallNotThrowError() //{ // var iDevice1 = new DeviceBase(); // var iDevice2 = new DeviceBase(); // ObjectMerger.ObjectMerger.MergeObjects(iDevice1, iDevice2); // ObjectMerger.ObjectMerger.MergeObjects(iDevice2, iDevice1); //} //[TestMethod] //[Ignore] //public async Task MergeNotEmptyDevicesShallNotThrowException() //{ // var a = Task.Run(async () => // { // for (int i = 0; i < 50; i++) // { // RandomExtension.RandomExtension.MaxRecursionDepth = 5; // var iDevice1 = // random.GetRandom<DeviceBase>(implementations: // new[] {typeof (SkillCheckPresenceDummy), typeof (SkillMoveCartDummy)}); // var iDevice2 = // random.GetRandom<DeviceBase>(implementations: // new[] {typeof (SkillCheckPresenceDummy), typeof (SkillMoveCartDummy)}); // await ObjectMerger.ObjectMerger.AsyncMergeObjects(iDevice1, iDevice2); // } // }); // await a; //} //[TestMethod] //[Ignore] //public void MergeEmptyDevicesShallCreateNewEmptyDevice() //{ // var iDevice1 = new DeviceBase(); // var iDevice2 = new DeviceBase(); // var mergedDevice = ObjectMerger.ObjectMerger.MergeObjects(iDevice1, iDevice2); // AllFieldsAreEqual(iDevice1, mergedDevice); // AllPropertiesAreEqual(iDevice1, mergedDevice); // AllFieldsAreEqual(iDevice2, mergedDevice); // AllPropertiesAreEqual(iDevice2, mergedDevice); // aktuelles Problem is noch, dass die Getter Method z.t. neue Instanzen erzeugen, wodurch nicht nur die Vorhandenen Sachen kopiert werden //} //[TestMethod] //[Ignore] //public void MergeDevicesShallReturnValidResult() //{ // var iDevice1 = new DeviceBase(); // var iDevice2 = new DeviceBase(); // var mergedDevice = ObjectMerger.ObjectMerger.MergeObjects(iDevice1, iDevice2); // AllFieldsAreEqual(mergedDevice, iDevice1); // AllPropertiesAreEqual(mergedDevice, iDevice2); //} //[TestMethod] //[Ignore] //public void MergeDeviceWithSkillsShallNotThrowError() //{ // var iDevice1 = new DeviceBase(); // var iDevice2 = new DeviceBase(); // iDevice1.Skills = new SkillList(); // iDevice2.Skills = new SkillList(); // var skill1 = new SkillCheckPresenceDummy(null, new object()); // var skill2 = new SkillMoveCartDummy(); // iDevice1.Skills.Add(skill1); // iDevice2.Skills.Add(skill2); // var mergedDevice = ObjectMerger.ObjectMerger.MergeObjects(iDevice1, iDevice2); //} //[TestMethod] //public void MergeDevicesWithIdenticalConnectionsShallContainNotMoreConnections() //{ // var iDevice1 = new DeviceBase(); // var iDevice2 = new DeviceBase(); // iDevice1.Connections = new ConnectionList() // { // new Connection() {Name = "abc"}, // new Connection() {Name = "bcd" } // }; // iDevice2.Connections = new ConnectionList() // { // new Connection() {Name = "abc"}, // new Connection() {Name = "bcd" } // }; // var mergedDevice = ObjectMerger.ObjectMerger.MergeObjects(iDevice1, iDevice2); // Assert.AreEqual(mergedDevice, iDevice1); //} //[TestMethod] //[Ignore] //public void MergeDeviceWithSkillsToDeviceWithoutSkills() //{ // var iDevice1 = new DeviceBase(); // var iDevice2 = new DeviceBase(); // iDevice2.Skills = new SkillList(); // var skill1 = new SkillCheckPresenceDummy(null, new object()); // var skill2 = new SkillMoveCartDummy(); // iDevice2.Skills.Add(skill1); // iDevice2.Skills.Add(skill2); // var mergedDevice = ObjectMerger.ObjectMerger.MergeObjects(iDevice1, iDevice2); // Assert.AreEqual(2, mergedDevice.Skills.Count()); //} //[TestMethod] //[Ignore] //public void MergeDeviceBaseSkillsShallWork() //{ // var iDevice1 = new DeviceBase(); // var iDevice2 = new DeviceBase(); // iDevice1.Skills = new SkillList(); // iDevice2.Skills = new SkillList(); // var skill1 = new SkillCheckPresenceDummy(null, new object()); // var skill2 = new SkillMoveCartDummy(); // iDevice1.Skills.Add(skill1); // iDevice2.Skills.Add(skill2); // var mergedDevice = ObjectMerger.ObjectMerger.MergeObjects(iDevice1, iDevice2); // Console.WriteLine(mergedDevice.Skills); // Assert.IsTrue(mergedDevice.Skills.Contains(skill1)); // Assert.IsTrue(mergedDevice.Skills.Contains(skill2)); //} //[TestMethod] //[Ignore] //public void MergeClassWithSkillsShallWork() //{ // var class1 = new ClassWithSkills(); // var class2 = new ClassWithSkills(); // var skill1 = new SkillCheckPresenceDummy(null, new object()); // var skill2 = new SkillMoveCartDummy(); // class1.Skills.Add(skill1); // class2.Skills.Add(skill2); // var mergedDevice = ObjectMerger.ObjectMerger.MergeObjects(class1, class2); // Console.WriteLine("Skills: "); // foreach (var skill in class1.Skills) // { // Console.WriteLine(skill); // } // Assert.IsTrue(mergedDevice.Skills.Contains(skill1)); // Assert.IsTrue(mergedDevice.Skills.Contains(skill2)); //} //[TestMethod] //[Ignore] //public void MergeClassWithSkillsShallNotDuplicateSkillsWithDifferentInstances() //{ // var class1 = new ClassWithSkills(); // var class2 = new ClassWithSkills(); // var skill1 = new SkillMoveCartDummy(); // var skill2 = new SkillMoveCartDummy(); // class1.Skills.Add(skill1); // class2.Skills.Add(skill2); // var mergedDevice = ObjectMerger.ObjectMerger.MergeObjects(class1, class2); // Console.WriteLine("Skills: "); // foreach (var skill in class1.Skills) // { // Console.WriteLine(skill); // } // Assert.AreEqual(1, mergedDevice.Skills.Count()); //} //[TestMethod] //[Ignore] //public void MergeClassWithSkillsShallNotDuplicateSkillsWithDifferentInstancesMultipleTimes() //{ // var class1 = new ClassWithSkills(); // var class2 = new ClassWithSkills(); // var skill1 = new SkillMoveCartDummy(); // var skill2 = new SkillMoveCartDummy(); // var skill3 = new GenericEmptyDummy(null) {CurrentSetupStep = new SetupStep { Name = "Test" } }; // var skill4 = new GenericEmptyDummy(null) {CurrentSetupStep = new SetupStep { Name = "Test" } }; // class1.Skills.Add(skill1); // class1.Skills.Add(skill3); // class1.Skills.Add(skill4); // class2.Skills.Add(skill2); // class2.Skills.Add(skill4); // class2.Skills.Add(skill4); // var mergedDevice = ObjectMerger.ObjectMerger.MergeObjects(class1, class2); // var mergedDevice2 = ObjectMerger.ObjectMerger.MergeObjects(mergedDevice, class2); // Console.WriteLine("Skills: "); // foreach (var skill in mergedDevice2.Skills) // { // Console.WriteLine(skill); // } // Assert.AreEqual(2, mergedDevice2.Skills.Count()); //} //[TestMethod] //[Ignore] //public void MergeHandlesStrategyContextRecursion() //{ // var class1 = new ClassWithSkills(); // var class2 = new ClassWithSkills(); // var skill1 = new SkillMoveCartDummy(); // var skill2 = new SkillMoveCartDummy(class2); // var skill3 = new GenericEmptyDummy(class1) { CurrentSetupStep = new SetupStep { Name = "Test" } }; // var skill4 = new GenericEmptyDummy(null) { CurrentSetupStep = new SetupStep { Name = "Test" } }; // class1.Skills.Add(skill1); // class1.Skills.Add(skill3); // class1.Skills.Add(skill4); // class2.Skills.Add(skill2); // class2.Skills.Add(skill4); // class2.Skills.Add(skill4); // var mergedDevice1 = ObjectMerger.ObjectMerger.MergeObjects(class1, class2); // var mergedDevice2 = ObjectMerger.ObjectMerger.MergeObjects(class2, class1); // foreach (var skill in mergedDevice1.Skills) // { // Assert.AreEqual(mergedDevice1, skill.Context); // } // foreach (var skill in mergedDevice2.Skills) // { // Assert.AreEqual(mergedDevice2, skill.Context); // } // // Validate, that there was no error // Assert.IsTrue(mergedDevice1.Skills.Any()); // Assert.IsTrue(mergedDevice2.Skills.Any()); // Assert.AreEqual(2, mergedDevice2.Skills.Count()); //} private string ClassWithRecursionToString(IClassWithRecursion item, int ident = 0, int limit = 10) { var builder = new StringBuilder(); string browseName; string identation = ""; for (int i = 0; i < ident; i++) { builder.Append("\t"); identation = builder.ToString(); } builder.Append(ident.ToString("0 ")); if (item == null) { browseName = "Null"; builder.AppendLine(browseName); return(builder.ToString()); } else { browseName = string.Format("{0}", item); builder.AppendLine(browseName); if (ident < limit) { builder.Append(ClassWithRecursionToString(item.Subclass, ident + 1)); } else { builder.Append(identation); builder.Append("\t"); builder.Append("..."); } return(builder.ToString()); } }
public ClassWithNotSettableRecursion(IClassWithRecursion subclass) { Subclass = subclass; }