Ejemplo n.º 1
0
        public void Compare_ConflictsHaveCorrectValues()
        {
            var instance1 = new MergeTestObject()
            {
                Property1 = 1,
                Property2 = 1,
                Property3 = "foo"
            };

            var instance2 = new MergeTestObject()
            {
                Property1 = 2,
                Property2 = 2,
                Property3 = "bar"
            };

            var merger = MergerHelper.CreateMerger();

            var conflicts = merger.CompareAlgorithm.Compare(instance1, instance2);

            var conflict = conflicts.First(c => c.PropertyName == "Property1");
            Assert.AreEqual(instance1.Property1.ToString(), conflict.SourceValue);
            Assert.AreEqual(instance2.Property1.ToString(), conflict.DestinationValue);

            conflict = conflicts.First(c => c.PropertyName == "Property2");
            Assert.AreEqual(instance1.Property2.ToString(), conflict.SourceValue);
            Assert.AreEqual(instance2.Property2.ToString(), conflict.DestinationValue);

            conflict = conflicts.First(c => c.PropertyName == "Property3");
            Assert.AreEqual(instance1.Property3.ToString(), conflict.SourceValue);
            Assert.AreEqual(instance2.Property3.ToString(), conflict.DestinationValue);
        }
Ejemplo n.º 2
0
        public void Compare_GeneratesOneConflictPerProperty()
        {
            var instance1 = new MergeTestObject()
            {
                Property1 = 1,
                Property2 = 1,
                Property3 = "foo"
            };

            var instance2 = new MergeTestObject()
            {
                Property1 = 2,
                Property2 = 2,
                Property3 = "bar"
            };

            var merger = MergerHelper.CreateMerger();

            var conflicts = merger.CompareAlgorithm.Compare(instance1, instance2);

            Assert.AreEqual(3, conflicts.Count());
            Assert.IsNotNull(conflicts.FirstOrDefault(c => c.PropertyName == "Property1"));
            Assert.IsNotNull(conflicts.FirstOrDefault(c => c.PropertyName == "Property2"));
            Assert.IsNotNull(conflicts.FirstOrDefault(c => c.PropertyName == "Property3"));
        }
Ejemplo n.º 3
0
        public void Wrapper_AreEqual_CustomComparer_WorksProperly()
        {
            var property3Wrapper = new PropertyWrapper<MergeTestObject, string>(o => o.Property3, new SoftStringEqualityComparer(StringComparisonOptions.CaseInsensitive));

            var instance1 = new MergeTestObject()
            {
                Property3 = "foo"
            };

            var instance2 = new MergeTestObject()
            {
                Property3 = "FOO"
            };

            Conflict conflict;
            Assert.IsTrue(property3Wrapper.AreEqual(instance1, instance2, out conflict));
        }
Ejemplo n.º 4
0
        public void WrapperCreator_FromPropertyInfo_WorksProperly()
        {
            var propertyInfo = typeof(MergeTestObject).GetProperty("Property1");

            var propertyWrapper = PropertyWrapperHelper.Create<MergeTestObject>(propertyInfo);

            var instance1 = new MergeTestObject()
            {
                Property1 = 1
            };

            var instance2 = new MergeTestObject();

            propertyWrapper.Copy(instance1, instance2);

            // this should match the name of whatever property is accessed in the lambda above
            Assert.AreEqual("Property1", propertyWrapper.Name);
            Assert.AreEqual(instance1.Property1, instance2.Property1);
        }
Ejemplo n.º 5
0
        public void WrapperCreator_FromExpression_WorksProperly()
        {
            Expression<Func<MergeTestObject, int>> expression = o => o.Property1;

            var propertyWrapper = PropertyWrapperHelper.Create(expression);

            var instance1 = new MergeTestObject()
            {
                Property1 = 1
            };

            var instance2 = new MergeTestObject();

            propertyWrapper.Copy(instance1, instance2);

            // this should match the name of whatever property is accessed in the lambda above
            Assert.AreEqual("Property1", propertyWrapper.Name);
            Assert.AreEqual(instance1.Property1, instance2.Property1);
        }
Ejemplo n.º 6
0
        public void WrapperCreator_FromExpression_WorksProperly()
        {
            Expression<Func<MergeTestObject, int>> expression = o => o.Property1;

            var propertyWrapper = PropertyWrapperHelper.Create(expression);

            var instance1 = new MergeTestObject()
            {
                Property1 = 1
            };

            var instance2 = new MergeTestObject();

            propertyWrapper.Copy(instance1, instance2);

            // this should match the name of whatever property is accessed in the lambda above
            Assert.AreEqual("Property1", propertyWrapper.Name);
            Assert.AreEqual(instance1.Property1, instance2.Property1);
        }
Ejemplo n.º 7
0
        public void WrapperCreator_FromPropertyInfo_WorksProperly()
        {
            var propertyInfo = typeof(MergeTestObject).GetProperty("Property1");

            var propertyWrapper = PropertyWrapperHelper.Create<MergeTestObject>(propertyInfo);

            var instance1 = new MergeTestObject()
            {
                Property1 = 1
            };

            var instance2 = new MergeTestObject();

            propertyWrapper.Copy(instance1, instance2);

            // this should match the name of whatever property is accessed in the lambda above
            Assert.AreEqual("Property1", propertyWrapper.Name);
            Assert.AreEqual(instance1.Property1, instance2.Property1);
        }
Ejemplo n.º 8
0
        public void CalculateMatchScore_ReturnsZeroForNoMatch()
        {
            var instance1 = new MergeTestObject()
            {
                Property1 = 1,
                Property2 = 1,
                Property3 = "foo"
            };

            var instance2 = new MergeTestObject()
            {
                Property1 = 2,
                Property2 = 2,
                Property3 = "bar"
            };

            var merger = MergerHelper.CreateMerger();

            Assert.AreEqual(0, merger.MatchAlgorithm.CalclateMatchIndex(instance1, instance2));
        }
Ejemplo n.º 9
0
        public void CalculateMatchScore_ReturnsZeroForNoMatch()
        {
            var instance1 = new MergeTestObject()
            {
                Property1 = 1,
                Property2 = 1,
                Property3 = "foo"
            };

            var instance2 = new MergeTestObject()
            {
                Property1 = 2,
                Property2 = 2,
                Property3 = "bar"
            };

            var merger = MergerHelper.CreateMerger();

            Assert.AreEqual(0, merger.MatchAlgorithm.CalclateMatchIndex(instance1, instance2));
        }
Ejemplo n.º 10
0
        public void IgnoreProperty_IgnoredPropertiesDontHaveConflicts()
        {
            var instance1 = new MergeTestObject()
            {
                Property1 = 1,
            };

            var instance2 = new MergeTestObject()
            {
                Property1 = 2,
            };

            var merger = MergerHelper.CreateMerger();

            merger.CompareAlgorithm.IgnoreProperty(o => o.Property1);

            var conflicts = merger.CompareAlgorithm.Compare(instance1, instance2);

            Assert.IsFalse(conflicts.Any());
        }
Ejemplo n.º 11
0
        public void MergeMissing_MergesMissingValue()
        {
            var comparer = MergeComparer <MergeTestObject> .Create(o => o.ID, true);

            var instance1 = new MergeTestObject()
            {
                Property3 = "foo"
            };

            var instance2 = new MergeTestObject()
            {
                Property3 = null
            };

            comparer.CompareAlgorithm.MergeMissing(instance1, instance2);

            Assert.AreEqual(instance1.Property3, instance2.Property3);
            Assert.AreEqual("foo", instance1.Property3);
            Assert.AreEqual("foo", instance2.Property3);
        }
Ejemplo n.º 12
0
        public void MergeMissing_DoesNotOverwriteExistingValue()
        {
            var comparer = MergeComparer <MergeTestObject> .Create(o => o.ID, true);

            var instance1 = new MergeTestObject()
            {
                Property1 = 1,
                Property3 = "foo"
            };

            var instance2 = new MergeTestObject()
            {
                Property3 = "bar"
            };

            comparer.CompareAlgorithm.MergeMissing(instance1, instance2);

            Assert.AreNotEqual(instance1.Property3, instance2.Property3);
            Assert.AreEqual("foo", instance1.Property3);
            Assert.AreEqual("bar", instance2.Property3);
        }
Ejemplo n.º 13
0
        public void Wrapper_AreEqual_DefaultComparer_WorksProperly()
        {
            var property1Wrapper = new PropertyWrapper<MergeTestObject, int>(o => o.Property1);
            var property3Wrapper = new PropertyWrapper<MergeTestObject, string>(o => o.Property3);

            var instance1 = new MergeTestObject()
            {
                Property1 = 1,
                Property3 = "foo"
            };

            var instance2 = new MergeTestObject()
            {
                Property1 = instance1.Property1,
                Property3 = instance1.Property3
            };

            Conflict conflict;
            Assert.IsTrue(property1Wrapper.AreEqual(instance1, instance2, out conflict));
            Assert.IsTrue(property3Wrapper.AreEqual(instance1, instance2, out conflict));
        }
Ejemplo n.º 14
0
        public void Wrapper_Copy_OnlyWrappedPropertiesCopied()
        {
            var propertyWrapper = new PropertyWrapper<MergeTestObject, int>(o => o.Property1);

            var instance1 = new MergeTestObject()
            {
                Property1 = 1
            };

            var canary = 666;
            var instance2 = new MergeTestObject()
            {
                Property2 = canary,
                Property3 = canary.ToString()
            };

            propertyWrapper.Copy(instance1, instance2);

            Assert.AreEqual(canary, instance2.Property2);
            Assert.AreEqual(canary.ToString(), instance2.Property3);
        }
Ejemplo n.º 15
0
        public void ForProperty_DiscoveredPropertiesAreOverridenWithForProperty()
        {
            var instance1 = new MergeTestObject()
            {
                Property3 = "foo"
            };

            var instance2 = new MergeTestObject()
            {
                Property3 = "FOO"
            };

            var merger = MergerHelper.CreateMerger();

            // ignore case will result in no conflicts
            merger.CompareAlgorithm.ForProperty(o => o.Property3, new SoftStringEqualityComparer(StringComparisonOptions.CaseInsensitive));

            var conflicts = merger.CompareAlgorithm.Compare(instance1, instance2);

            Assert.IsFalse(conflicts.Any());
        }
Ejemplo n.º 16
0
        public void CalculateMatchScore_UsesSpecifiedEqualityComparer()
        {
            // we'll compare mismatched cases using StringComparer.OrdinalIgnoreCase (specified in MergerHelper.CreateMerger)

            var instance1 = new MergeTestObject()
            {
                Property1 = 1,
                Property2 = 1,
                Property3 = "foo"
            };

            var instance2 = new MergeTestObject()
            {
                Property1 = 2,
                Property2 = 2,
                Property3 = "FOO"
            };

            var merger = MergerHelper.CreateMerger();

            Assert.AreEqual(MergerHelper.Property3Score, merger.MatchAlgorithm.CalclateMatchIndex(instance1, instance2));
        }
Ejemplo n.º 17
0
        public void Wrapper_AreEqual_ReturnsFalseAndConflictHasProperValues()
        {
            var property1Wrapper = new PropertyWrapper<MergeTestObject, int>(o => o.Property1);

            var instance1 = new MergeTestObject()
            {
                Property1 = 1
            };

            var instance2 = new MergeTestObject()
            {
                Property1 = 2
            };

            Conflict conflict;
            Assert.IsFalse(property1Wrapper.AreEqual(instance1, instance2, out conflict));

            Assert.IsNotNull(conflict);
            Assert.AreEqual("Property1", conflict.PropertyName);    // the property name in the lambda above
            Assert.AreEqual(instance1.Property1.ToString(), conflict.SourceValue);
            Assert.AreEqual(instance2.Property1.ToString(), conflict.DestinationValue);
        }
Ejemplo n.º 18
0
        public void MergeAll_OverwritesAllValues()
        {
            var comparer = MergeComparer <MergeTestObject> .Create(o => o.ID, true);

            var instance1 = new MergeTestObject()
            {
                Property1 = 1,
                Property2 = 3,
                Property3 = "foo"
            };

            var instance2 = new MergeTestObject()
            {
                Property2 = 0,
                Property3 = "bar"
            };

            comparer.CompareAlgorithm.MergeAll(instance1, instance2);

            Assert.AreEqual(instance1.Property1, instance2.Property1);
            Assert.AreEqual(instance1.Property2, instance2.Property2);
            Assert.AreEqual(instance1.Property3, instance2.Property3);
        }
Ejemplo n.º 19
0
        public void CalculateMatchScore_ReturnsCorrectMatchScoreTotal()
        {
            var instance1 = new MergeTestObject()
            {
                Property1 = 1,
                Property2 = 1,
                Property3 = "foo"
            };

            var instance2 = new MergeTestObject()
            {
                Property1 = 1,
                Property2 = 1,
                Property3 = "foo"
            };

            var merger = MergerHelper.CreateMerger();

            var totalScore = MergerHelper.Property1Score
                             + MergerHelper.Property2Score
                             + MergerHelper.Property3Score;

            Assert.AreEqual(totalScore, merger.MatchAlgorithm.CalclateMatchIndex(instance1, instance2));
        }
Ejemplo n.º 20
0
        public void CalculateMatchScore_ReturnsCorrectMatchScoreTotal()
        {
            var instance1 = new MergeTestObject()
            {
                Property1 = 1,
                Property2 = 1,
                Property3 = "foo"
            };

            var instance2 = new MergeTestObject()
            {
                Property1 = 1,
                Property2 = 1,
                Property3 = "foo"
            };

            var merger = MergerHelper.CreateMerger();

            var totalScore = MergerHelper.Property1Score
                           + MergerHelper.Property2Score
                           + MergerHelper.Property3Score;

            Assert.AreEqual(totalScore, merger.MatchAlgorithm.CalclateMatchIndex(instance1, instance2));
        }
Ejemplo n.º 21
0
        public void IgnoreProperty_IgnoredPropertiesDontHaveConflicts()
        {
            var instance1 = new MergeTestObject()
            {
                Property1 = 1,
            };

            var instance2 = new MergeTestObject()
            {
                Property1 = 2,
            };

            var merger = MergerHelper.CreateMerger();

            merger.CompareAlgorithm.IgnoreProperty(o => o.Property1);

            var conflicts = merger.CompareAlgorithm.Compare(instance1, instance2);
            Assert.IsFalse(conflicts.Any());
        }
Ejemplo n.º 22
0
        public void CalculateMatchScore_UsesSpecifiedEqualityComparer()
        {
            // we'll compare mismatched cases using StringComparer.OrdinalIgnoreCase (specified in MergerHelper.CreateMerger)

            var instance1 = new MergeTestObject()
            {
                Property1 = 1,
                Property2 = 1,
                Property3 = "foo"
            };

            var instance2 = new MergeTestObject()
            {
                Property1 = 2,
                Property2 = 2,
                Property3 = "FOO"
            };

            var merger = MergerHelper.CreateMerger();

            Assert.AreEqual(MergerHelper.Property3Score, merger.MatchAlgorithm.CalclateMatchIndex(instance1, instance2));
        }
Ejemplo n.º 23
0
        public void Wrapper_Copy_ValueCopied()
        {
            var propertyWrapper = new PropertyWrapper<MergeTestObject, int>(o => o.Property1);

            var instance1 = new MergeTestObject()
            {
                Property1 = 1
            };

            var instance2 = new MergeTestObject();

            propertyWrapper.Copy(instance1, instance2);

            Assert.AreEqual(instance1.Property1, instance2.Property1);
        }
Ejemplo n.º 24
0
        public void Wrapper_Copy_OnlyWrappedPropertiesCopied()
        {
            var propertyWrapper = new PropertyWrapper<MergeTestObject, int>(o => o.Property1);

            var instance1 = new MergeTestObject()
            {
                Property1 = 1
            };

            var canary = 666;
            var instance2 = new MergeTestObject()
            {
                Property2 = canary,
                Property3 = canary.ToString()
            };

            propertyWrapper.Copy(instance1, instance2);

            Assert.AreEqual(canary, instance2.Property2);
            Assert.AreEqual(canary.ToString(), instance2.Property3);
        }
Ejemplo n.º 25
0
        public void Wrapper_AreEqual_ReturnsTrueAndNullConflict()
        {
            var property1Wrapper = new PropertyWrapper<MergeTestObject, int>(o => o.Property1);

            var instance1 = new MergeTestObject()
            {
                Property1 = 1
            };

            var instance2 = new MergeTestObject()
            {
                Property1 = instance1.Property1
            };

            Conflict conflict;
            Assert.IsTrue(property1Wrapper.AreEqual(instance1, instance2, out conflict));
            Assert.IsNull(conflict);
        }
Ejemplo n.º 26
0
        public void Wrapper_AreEqual_ReturnsFalseAndConflictHasProperValues()
        {
            var property1Wrapper = new PropertyWrapper<MergeTestObject, int>(o => o.Property1);

            var instance1 = new MergeTestObject()
            {
                Property1 = 1
            };

            var instance2 = new MergeTestObject()
            {
                Property1 = 2
            };

            Conflict conflict;
            Assert.IsFalse(property1Wrapper.AreEqual(instance1, instance2, out conflict));

            Assert.IsNotNull(conflict);
            Assert.AreEqual("Property1", conflict.PropertyName);    // the property name in the lambda above
            Assert.AreEqual(instance1.Property1.ToString(), conflict.SourceValue);
            Assert.AreEqual(instance2.Property1.ToString(), conflict.DestinationValue);
        }
Ejemplo n.º 27
0
        public void MergeMissing_MergesMissingValue()
        {
            var comparer = MergeComparer<MergeTestObject>.Create(o => o.ID, true);

            var instance1 = new MergeTestObject()
            {
                Property3 = "foo"
            };

            var instance2 = new MergeTestObject()
            {
                Property3 = null
            };

            comparer.CompareAlgorithm.MergeMissing(instance1, instance2);

            Assert.AreEqual(instance1.Property3, instance2.Property3);
            Assert.AreEqual("foo", instance1.Property3);
            Assert.AreEqual("foo", instance2.Property3);
        }
Ejemplo n.º 28
0
        public void MergeMissing_DoesNotOverwriteExistingValue()
        {
            var comparer = MergeComparer<MergeTestObject>.Create(o => o.ID, true);

            var instance1 = new MergeTestObject()
            {
                Property1 = 1,
                Property3 = "foo"
            };

            var instance2 = new MergeTestObject()
            {
                Property3 = "bar"
            };

            comparer.CompareAlgorithm.MergeMissing(instance1, instance2);

            Assert.AreNotEqual(instance1.Property3, instance2.Property3);
            Assert.AreEqual("foo", instance1.Property3);
            Assert.AreEqual("bar", instance2.Property3);
        }
Ejemplo n.º 29
0
        public void MergeAll_OverwritesAllValues()
        {
            var comparer = MergeComparer<MergeTestObject>.Create(o => o.ID, true);

            var instance1 = new MergeTestObject()
            {
                Property1 = 1,
                Property2 = 3,
                Property3 = "foo"
            };

            var instance2 = new MergeTestObject()
            {
                Property2 = 0,
                Property3 = "bar"
            };

            comparer.CompareAlgorithm.MergeAll(instance1, instance2);

            Assert.AreEqual(instance1.Property1, instance2.Property1);
            Assert.AreEqual(instance1.Property2, instance2.Property2);
            Assert.AreEqual(instance1.Property3, instance2.Property3);
        }
Ejemplo n.º 30
0
        public void CalculateMatchScore_SameInstanceReturnsMaxPoints()
        {
            var instance1 = new MergeTestObject()
            {
                Property1 = 1,
                Property2 = 1,
                Property3 = "foo"
            };

            var merger = MergerHelper.CreateMerger();

            Assert.AreEqual(int.MaxValue, merger.MatchAlgorithm.CalclateMatchIndex(instance1, instance1));
        }
Ejemplo n.º 31
0
        public void ForProperty_DiscoveredPropertiesAreOverridenWithForProperty()
        {
            var instance1 = new MergeTestObject()
            {
                Property3 = "foo"
            };

            var instance2 = new MergeTestObject()
            {
                Property3 = "FOO"
            };

            var merger = MergerHelper.CreateMerger();

            // ignore case will result in no conflicts
            merger.CompareAlgorithm.ForProperty(o => o.Property3, new SoftStringEqualityComparer(StringComparisonOptions.CaseInsensitive));

            var conflicts = merger.CompareAlgorithm.Compare(instance1, instance2);

            Assert.IsFalse(conflicts.Any());
        }
Ejemplo n.º 32
0
        public void Compare_NullValueConflicts()
        {
            var instance1 = new MergeTestObject()
            {
                Property1 = 1,
                Property2 = 1,
                Property3 = null
            };

            var instance2 = new MergeTestObject()
            {
                Property1 = 2,
                Property2 = 2,
                Property3 = "bar"
            };

            var instance3 = new MergeTestObject()
            {
                Property1 = 1,
                Property2 = 1,
                Property3 = "foo"
            };

            var instance4 = new MergeTestObject()
            {
                Property1 = 2,
                Property2 = 2,
                Property3 = null
            };

            var merger = MergerHelper.CreateMerger();

            //Test a null source and a destination with a value
            var conflicts = merger.CompareAlgorithm.Compare(instance1, instance2);
            var conflict = conflicts.First(c => c.PropertyName == "Property3");
            Assert.IsNull(conflict.SourceValue);

            //Test a source with a value and a null destination
            conflicts = merger.CompareAlgorithm.Compare(instance3, instance4);
            conflict = conflicts.First(c => c.PropertyName == "Property3");
            Assert.IsNull(conflict.DestinationValue);
        }
Ejemplo n.º 33
0
        public void Merge_OverwritesAllValues()
        {
            List<MergeTestObject> src, dst;

            src = new List<MergeTestObject>();
            dst = new List<MergeTestObject>();

            var source = new MergeTestObject() { Property1 = 1, Property3 = "foo" };
            var destination = new MergeTestObject() { Property1 = 2, Property3 = "bar" };

            // match 1 - 1 conflicts
            src.Add(source);
            dst.Add(destination);

            var merger = MergerHelper.CreateMerger();

            var mergeResults = merger.Merge(src, dst);

            var result = mergeResults.First();
            Assert.AreEqual(source.Property1, destination.Property1);
            Assert.AreEqual(source.Property2, destination.Property2);
            Assert.AreEqual(source.Property3, destination.Property3);
        }
Ejemplo n.º 34
0
        public void Wrapper_AreEqual_DefaultComparer_WorksProperly()
        {
            var property1Wrapper = new PropertyWrapper<MergeTestObject, int>(o => o.Property1);
            var property3Wrapper = new PropertyWrapper<MergeTestObject, string>(o => o.Property3);

            var instance1 = new MergeTestObject()
            {
                Property1 = 1,
                Property3 = "foo"
            };

            var instance2 = new MergeTestObject()
            {
                Property1 = instance1.Property1,
                Property3 = instance1.Property3
            };

            Conflict conflict;
            Assert.IsTrue(property1Wrapper.AreEqual(instance1, instance2, out conflict));
            Assert.IsTrue(property3Wrapper.AreEqual(instance1, instance2, out conflict));
        }
Ejemplo n.º 35
0
        public void Merge_NoConflicts()
        {
            List<MergeTestObject> src, dst;

            src = new List<MergeTestObject>();
            dst = new List<MergeTestObject>();

            var source = new MergeTestObject() { Property1 = 1, Property3 = "foo" };
            var destination = new MergeTestObject() { Property1 = 2, Property3 = "bar" };

            // match 1 - 1 conflicts
            src.Add(source);
            dst.Add(destination);

            var merger = MergerHelper.CreateMerger();

            var mergeResults = merger.Merge(src, dst);

            Assert.IsTrue(mergeResults.All(r => !r.Conflicts.Any()));
        }