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); }
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")); }
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)); }
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); }
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); }
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)); }
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()); }
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); }
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); }
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)); }
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); }
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()); }
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)); }
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); }
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); }
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)); }
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); }
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); }
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); }
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); }
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); }
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)); }
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); }
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); }
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())); }