public void UseCustomComparer() { CompareLogic compareLogic = new CompareLogic(); SpecificTenant tenant1 = new SpecificTenant(); tenant1.Name = "wire"; tenant1.Amount = 37; SpecificTenant tenant2 = new SpecificTenant(); tenant2.Name = "wire"; tenant2.Amount = 155; //No Custom Comparer Assert.IsFalse(compareLogic.Compare(tenant1, tenant2).AreEqual); //specify custom selector compareLogic.Config.CustomComparers.Add(new MyCustomComparer(RootComparerFactory.GetRootComparer())); Assert.IsTrue(compareLogic.Compare(tenant1, tenant2).AreEqual); tenant2.Amount = 42; Assert.IsFalse(compareLogic.Compare(tenant1, tenant2).AreEqual); }
private static IList <string> GetAsserts(object untest, object tested, string fieldName) { var asserts = new List <string>(); if (untest != null) { _compareLogic = new CompareLogic { Config = new ComparisonConfig { MaxDifferences = int.MaxValue, MaxStructDepth = _depth, CompareChildren = _analyzeComplexFields, CustomComparers = { new ColorComparer(RootComparerFactory.GetRootComparer()) } } }; var generateGraph = GenerateGraph(untest, tested, fieldName); if (generateGraph.Any(x => x == Error)) { _compareLogic.Config.CompareChildren = false; generateGraph = GenerateGraph(untest, tested, fieldName); } if (generateGraph.All(x => x != Error)) { asserts.AddRange(generateGraph); } } return(asserts); }
public void SerializeAllScenarios() { CompareLogic compareLogic = new CompareLogic(new ComparisonConfig() { AttributesToIgnore = new List <Type>(new[] { typeof(ObsoleteAttribute) }), MembersToIgnore = new List <string>(new[] { "Version" }), CustomComparers = new List <BaseTypeComparer>(new BaseTypeComparer[] { new JObjectComparer(RootComparerFactory.GetRootComparer()), new UriComparer(RootComparerFactory.GetRootComparer()) }) }); XmlSerializer serializer = new XmlSerializer(typeof(AdaptiveCard)); foreach (var file in Directory.EnumerateFiles(@"..\..\..\..\..\..\..\samples\v1.0\Scenarios")) { string json = File.ReadAllText(file); var card = JsonConvert.DeserializeObject <AdaptiveCard>(json, new JsonSerializerSettings { Converters = { new StrictIntConverter() } }); StringBuilder sb = new StringBuilder(); serializer.Serialize(new StringWriter(sb), card); string xml = sb.ToString(); var card2 = (AdaptiveCard)serializer.Deserialize(new StringReader(xml)); var result = compareLogic.Compare(card, card2); Assert.IsTrue(result.AreEqual, result.DifferencesString); } }
/// <summary> /// Determines if 2 same type object are equal. Fields can be ignored /// </summary> /// <param name="gcimsData"></param> /// <param name="erisData"></param> /// <param name="propertyNameList"></param> /// <param name="log"></param> /// <returns></returns> public static bool AreEqualGcimsToMonster1(Employee gcimsData, Employee erisData, out string propertyNameList, ref ILog log) { var compareLogic = new CompareLogic { Config = { TreatStringEmptyAndNullTheSame = true, CaseSensitive = false, MaxDifferences = 100 } }; compareLogic.Config.CustomComparers.Add(new EmployeeComparerforUpdated(RootComparerFactory.GetRootComparer())); compareLogic.Config.CustomComparers.Add(new EmployeeComparerforFlagged(RootComparerFactory.GetRootComparer())); var result = compareLogic.Compare(gcimsData, erisData); var diffs = result.Differences.Select(a => a.PropertyName).ToArray(); var localPropertyNameList = string.Join(",", diffs); propertyNameList = localPropertyNameList; if (diffs?.Length > 0) { log.Info($"Property differences include: {localPropertyNameList}"); } return(result.AreEqual); }
public void UseCustomComparer() { SpecificTenant tenant1 = new SpecificTenant(); tenant1.Name = "wire"; tenant1.Amount = 37; SpecificTenant tenant2 = new SpecificTenant(); tenant2.Name = "wire"; tenant2.Amount = 155; //No Custom Comparer Assert.IsFalse(_compare.Compare(tenant1, tenant2).AreEqual); //specify custom selector _compare.Config.CustomComparers.Add(new MyCustomComparer(RootComparerFactory.GetRootComparer())); Assert.IsTrue(_compare.Compare(tenant1, tenant2).AreEqual); tenant2.Amount = 42; Assert.IsFalse(_compare.Compare(tenant1, tenant2).AreEqual); //restore _compare.Config.CustomComparers = new List <BaseTypeComparer>(); }
public static void IsEqual <TCommand>(this object actual, TCommand expected) { var command = Assert.IsType <CommandMessage <TCommand> >(actual); CompareExtensions.Config.MembersToIgnore.Add("CommandId"); CompareExtensions.Config.MembersToIgnore.Add("Metadata"); CompareExtensions.Config.MaxDifferences = 100; CompareExtensions.Config.CustomComparers.Add(new ValueObjectComparer(RootComparerFactory.GetRootComparer())); command.ShouldCompare(new CommandMessage <TCommand>(Guid.Empty, expected)); }
protected SerializerSpec(T fixture) { Expect.NotNull(fixture, nameof(fixture)); Fixture = fixture; var customComparer = new ShoppingCartItemArrayComparer(RootComparerFactory.GetRootComparer()); Comparer = new CompareLogic(new ComparisonConfig { CustomComparers = new List <BaseTypeComparer> { customComparer }, }); }
public IChangeManager DetectChanges(object newEntry, object oldEntry) { CompareLogic compareLogic = new CompareLogic(); compareLogic.Config.MaxDifferences = int.MaxValue; compareLogic.Config.CompareStaticFields = false; //静态字段不比较 compareLogic.Config.CompareStaticProperties = false; //静态属性不比较 compareLogic.Config.Caching = true; compareLogic.Config.CustomComparers.Add(new ZopDictionaryComparer(RootComparerFactory.GetRootComparer())); compareLogic.Config.CustomComparers.Add(new ZopListComparer(RootComparerFactory.GetRootComparer())); compareLogic.Config.CustomComparers.Add(new EntityCollectionComparer(RootComparerFactory.GetRootComparer())); var result = compareLogic.Compare(oldEntry, newEntry); return(this.changeManagerFactory.Create(result)); }
public void VerifySerializationForAllScenarioFiles() { CompareLogic compareLogic = new CompareLogic(new ComparisonConfig() { AttributesToIgnore = new List <Type>(new[] { typeof(ObsoleteAttribute) }), MembersToIgnore = new List <string>(new[] { "Version" }), CustomComparers = new List <BaseTypeComparer>(new BaseTypeComparer[] { new JObjectComparer(RootComparerFactory.GetRootComparer()), new UriComparer(RootComparerFactory.GetRootComparer()) }) }); XmlSerializer serializer = new XmlSerializer(typeof(AdaptiveCard)); foreach (var version in Directory.EnumerateDirectories(@"..\..\..\..\..\..\..\samples\", "v*")) { var folder = Path.Combine($"{version}\\scenarios"); if (Directory.Exists(folder)) { foreach (var file in Directory.EnumerateFiles(folder, "*.json")) { string json = File.ReadAllText(file); var card = JsonConvert.DeserializeObject <AdaptiveCard>(json, new JsonSerializerSettings { Converters = { new StrictIntConverter() } }); // test XML serialization round-trips StringBuilder sb = new StringBuilder(); serializer.Serialize(new StringWriter(sb), card); string xml = sb.ToString(); var card2 = (AdaptiveCard)serializer.Deserialize(new StringReader(xml)); var result = compareLogic.Compare(card, card2); Assert.IsTrue(result.AreEqual, $"XML serialization different: {Path.GetFullPath(file)}: {result.DifferencesString}"); // test JSON serialization round-trips var card3 = JsonConvert.DeserializeObject <AdaptiveCard>(JsonConvert.SerializeObject(card)); result = compareLogic.Compare(card, card3); Assert.IsTrue(result.AreEqual, $"JSON Serialization different: {Path.GetFullPath(file)}: {result.DifferencesString}"); } } } }
public async Task <object> RunAsync(ExpectExceptionScenario scenario, CancellationToken ct = default) { var checkpoint = await WriteGivens(scenario.Givens); var exception = await Catch.Exception(() => _resolver(scenario.When)(scenario.When, ct)); if (exception == null) { var recordedEvents = await ReadThens(checkpoint); if (recordedEvents.Length != 0) { return(scenario.ButRecordedEvents(recordedEvents)); } return(scenario.ButThrewNoException()); } var config = new ComparisonConfig { MaxDifferences = int.MaxValue, MaxStructDepth = 5, MembersToIgnore = { "StackTrace", "Source", "TargetSite" }, IgnoreObjectTypes = true, CustomComparers = new List <BaseTypeComparer> { new ValidationFailureComparer(RootComparerFactory.GetRootComparer()), //new PointMComparer(RootComparerFactory.GetRootComparer()) } }; var comparer = new CompareLogic(config); var result = comparer.Compare(scenario.Throws, exception); if (result.AreEqual) { return(scenario.Pass()); } return(scenario.ButThrewException(exception)); }
public static bool HasTheSameDataAs(this DataSet left, DataSet right) { var config = new ComparisonConfig(); config.CustomComparers.Add(new NDbUnitDataSetComparer(RootComparerFactory.GetRootComparer())); config.CustomComparers.Add(new NDbUnitDataTableComparer(RootComparerFactory.GetRootComparer())); config.CustomComparers.Add(new NDbUnitDataRowCollectionComparer(RootComparerFactory.GetRootComparer())); config.MaxDifferences = MAX_DIFFERENCES_BEFORE_ABORT; var comparer = new CompareLogic(config); var result = comparer.Compare(left, right); if (!result.AreEqual) { Log(result.DifferencesString); } return(result.AreEqual); }
private bool AreEqualGCIMSToHR(Employee GCIMSData, Employee HRData, out string propertyNameList) { CompareLogic compareLogic = new CompareLogic(); compareLogic.Config.TreatStringEmptyAndNullTheSame = true; compareLogic.Config.CaseSensitive = false; compareLogic.Config.MaxDifferences = 100; compareLogic.Config.CustomComparers.Add(new EmployeeComparer(RootComparerFactory.GetRootComparer())); ComparisonResult result = compareLogic.Compare(GCIMSData, HRData); string[] diffs = result.Differences.Select(a => a.PropertyName).ToArray(); string propertynamelist = string.Join(",", diffs); propertyNameList = propertynamelist; if (diffs != null && diffs.Length > 0) { log.Info(string.Format("Property differences include: {0}", propertynamelist)); } return(result.AreEqual); }
public static IEnumerable <Diffs> BuildDiffs(Object state1, Object state2) { //ComparisonConfig config = new ComparisonConfig(); //config.MaxDifferences = int.MaxValue; //config.CustomComparers = new List<BaseTypeComparer>(); //config.CustomComparers.Add(new ExpandoObjectComparer(RootComparerFactory.GetRootComparer())); //config.CustomComparers.Add(new FirstNullClassComparer(RootComparerFactory.GetRootComparer())); //config.CustomComparers.Add(new CollectionComparer(RootComparerFactory.GetRootComparer())); ComparisonConfig config = new ComparisonConfig(); config.MaxDifferences = int.MaxValue; config.CompareChildren = true; config.CustomComparers.Add(new CustomListComparer(RootComparerFactory.GetRootComparer())); config.CustomComparers.Add(new CustomExpandoObjectComparer(RootComparerFactory.GetRootComparer())); config.CustomComparers.Add(new NullToObjectComparer(RootComparerFactory.GetRootComparer())); CompareLogic compareLogic = new CompareLogic(config); ComparisonResult result = compareLogic.Compare(state1, state2); IEnumerable <Diffs> diffs = DiffsFromComparisonResult(result); return(diffs); //return diffs.Select(Translate); }
public void ExpandoObject() { var a = new DynamicContainer { expando = JsonConvert.DeserializeObject <ExpandoObject>("{\"test\": \"1\"}") }; var b = new DynamicContainer { expando = JsonConvert.DeserializeObject <ExpandoObject>("{\"test\": \"2\"}") }; var compareLogic = new CompareLogic(); compareLogic.Config.MembersToIgnore.Add("test"); compareLogic.Config.CustomComparers.Add(new StringMightBeFloat(RootComparerFactory.GetRootComparer())); compareLogic.Config.MaxDifferences = 50; var result = compareLogic.Compare(a, b); Console.WriteLine(result.DifferencesString); Assert.IsTrue(result.AreEqual); }
/// <summary> /// Constructor that takes a default root comparer /// </summary> public CustomComparer() : this(RootComparerFactory.GetRootComparer()) { }
static void Main(string[] args) { Pupil pashka = new Pupil { Name = "Pashka", Age = 15 }; Pupil jeka = new Pupil { Name = "Jeka", Age = 18 }; Pupil sashka = new Pupil { Name = "Sashka", Age = 21 }; Pupil stasik = new Pupil { Name = "Stasik", Age = 35 }; School school96 = new School { Name = "96", Pupil = new List <Pupil>() { pashka } }; School school143 = new School { Name = "143", Pupil = new List <Pupil>() { pashka, jeka, sashka }, Room = new Room { Color = "red", Table = new Table { Form = "circle" } } }; School school54 = new School { Name = "54", Pupil = new List <Pupil> { jeka, pashka }, Room = new Room { Color = "green", Table = new Table { Form = "rectangle" } } }; ReadOnlySchool school104 = new ReadOnlySchool { Name = "104", pupil = new List <Pupil> { jeka, pashka } }; ComparisonConfig config = new ComparisonConfig(); config.MaxDifferences = int.MaxValue; config.CompareChildren = true; //config.IgnoreCollectionOrder = true; config.CustomComparers.Add(new CustomListComparer(RootComparerFactory.GetRootComparer())); config.CustomComparers.Add(new CustomExpandoObjectComparer(RootComparerFactory.GetRootComparer())); config.CustomComparers.Add(new NullToObjectComparer(RootComparerFactory.GetRootComparer())); ////config.CustomComparers = new List<BaseTypeComparer>(); ////config.CustomComparers.Add(new ExpandoObjectComparer(RootComparerFactory.GetRootComparer())); ////config.CustomComparers.Add(new FirstNullClassComparer(RootComparerFactory.GetRootComparer())); ////config.CustomComparers.Add(new CollectionComparer(RootComparerFactory.GetRootComparer())); CompareLogic compareLogic = new CompareLogic(config); //ComparisonResult result = compareLogic.Compare(school143, school54); //var diffsResult = Scc.Portal.Orchard.AuditTrails.DiffsBuilder.DiffsBuilder.BuildDiffs(school143, school54); dynamic a = new ExpandoObject(); dynamic b = new ExpandoObject(); a.Table = "Table"; b.Table = "Chair"; b.Wall = "Rectangle"; b.Pupil = new HashSet <Pupil> { jeka, pashka }; ComparisonResult expandoResult = compareLogic.Compare(a, b); var diffsResult = Scc.Portal.Orchard.AuditTrails.DiffsBuilder.DiffsBuilder.BuildDiffs(a, b); var yes = true; }
/// <summary> /// Initializes a new instance of the <see cref="CustomGlobalDateComparer" /> class. /// Global date comparer. /// </summary> public CustomGlobalDateComparer() : base(RootComparerFactory.GetRootComparer()) { }
public void SerializeAllScenarios() { CompareLogic compareLogic = new CompareLogic(new ComparisonConfig() { AttributesToIgnore = new List <Type>(new[] { typeof(ObsoleteAttribute) }), MembersToIgnore = new List <string>(new[] { "Version" }), CustomComparers = new List <BaseTypeComparer>(new[] { new JObjectComparer(RootComparerFactory.GetRootComparer()) }) }); XmlSerializer serializer = new XmlSerializer(typeof(AdaptiveCard)); foreach (var file in Directory.EnumerateFiles(@"..\..\..\..\..\..\..\samples\v1.0\Scenarios")) { string json = File.ReadAllText(file); var card = JsonConvert.DeserializeObject <AdaptiveCard>(json); StringBuilder sb = new StringBuilder(); serializer.Serialize(new StringWriter(sb), card); string xml = sb.ToString(); var card2 = (AdaptiveCard)serializer.Deserialize(new StringReader(xml)); var result = compareLogic.Compare(card, card2); //Assert.IsTrue(result.AreEqual, result.DifferencesString); // TODO: This is failing on the Url serialization changing %20 to a space. // The serilaization is working through. Will bring this back once I fix the test } }
public void Detector() { var date = DateTime.Now; var user1 = new User(1) { Password = null, Posts = new List <Post>() { new Post(1) { CreatedDate = date, Description = date.Ticks.ToString(), Title = "²âÊÔ1", Author = new Author(1) { Title = "author" } } , new Post(2) { CreatedDate = date, Description = date.Ticks.ToString(), Title = "²âÊÔ", Author = new Author(2) { Title = "author" } } , new Post(3) { CreatedDate = date, Description = date.Ticks.ToString(), Title = "²âÊÔ", Author = new Author(3) { Title = null } } , new Post(4) { CreatedDate = date, Description = date.Ticks.ToString(), Title = "²âÊÔ2", Author = null } , new Post(5) { CreatedDate = date, Description = date.Ticks.ToString(), Title = "²âÊÔb", Author = null } , new Post(6) { CreatedDate = date, Description = date.Ticks.ToString(), Title = "²âÊÔb", Author = new Author(3) { } } } }; var user2 = user1.Clone <User>(); user2.Password = ""; user2.Aaccount = null; var post1 = user2.Posts.FirstOrDefault(f => f.Id == 1); user2.Posts.Remove(post1); var post2 = user2.Posts.FirstOrDefault(f => f.Id == 2); post2.Title = "²âÊÔÐÞ¸Ä×Ó¼¶"; var post3 = user2.Posts.FirstOrDefault(f => f.Id == 3); post3.Author.Title = "²âÊÔÐÞ¸Ä×Ó×Ó¼¶"; var post4 = user2.Posts.FirstOrDefault(f => f.Id == 4); post4.Author = new Author(1) { Title = "Ìí¼Ó×Ó×Ó¼¶£¬ÉèÖÃID" }; var post5 = user2.Posts.FirstOrDefault(f => f.Id == 5); post5.Author = new Author() { Title = "Ìí¼Ó×Ó×Ó¼¶£¬²»ÉèÖÃID" }; var post6 = user2.Posts.FirstOrDefault(f => f.Id == 6); post6.Author = null; var post7 = new Post(7) { CreatedDate = date, Description = date.Ticks.ToString(), Title = "²âÊÔ", Author = null }; user2.Posts.Add(post7); CompareLogic compareLogic = new CompareLogic(); compareLogic.Config.MaxDifferences = int.MaxValue; compareLogic.Config.CompareStaticFields = false; //¾²Ì¬×ֶβ»±È½Ï compareLogic.Config.CompareStaticProperties = false; //¾²Ì¬ÊôÐÔ²»±È½Ï compareLogic.Config.Caching = true; compareLogic.Config.CustomComparers.Add(new ZopDictionaryComparer(RootComparerFactory.GetRootComparer())); compareLogic.Config.CustomComparers.Add(new ZopListComparer(RootComparerFactory.GetRootComparer())); compareLogic.Config.CustomComparers.Add(new EntityCollectionComparer(RootComparerFactory.GetRootComparer())); var result = compareLogic.Compare(user1, user2); ChangeManagerFactory changeManagerFactory = new ChangeManagerFactory(); IChangeManager changeManager = changeManagerFactory.Create(new EntityChange(user1, user2, 0), result); var ch = changeManager.GetChange(); string json = ch.ToJsonString(); User user3 = json.ToFromJson <User>(); }
public AddressComparer() { _logic = new CompareLogic(); _logic.Config.CustomComparers.Add(new IPointComparer(RootComparerFactory.GetRootComparer())); }
public EquatableComparer() : base(RootComparerFactory.GetRootComparer()) { }
/// <summary> /// Constructor that takes a the predication with a default root comparer /// </summary> /// <param name="compare">A function to determine if two objects are equal</param> public CustomComparer(Func <T1, T2, bool> compare) : this(RootComparerFactory.GetRootComparer(), compare) { }