//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());
            }
        }
Esempio n. 2
0
 public ClassWithNotSettableRecursion(IClassWithRecursion subclass)
 {
     Subclass = subclass;
 }