示例#1
0
        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);
        }
示例#3
0
        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);
            }
        }
示例#4
0
文件: Helpers.cs 项目: GSA/ERIS
        /// <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>();
        }
示例#6
0
        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));
        }
示例#7
0
        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
                },
            });
        }
示例#8
0
        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}");
                    }
                }
            }
        }
示例#10
0
        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));
        }
示例#11
0
        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);
        }
示例#12
0
        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);
        }
示例#13
0
        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);
        }
示例#15
0
 /// <summary>
 /// Constructor that takes a default root comparer
 /// </summary>
 public CustomComparer() : this(RootComparerFactory.GetRootComparer())
 {
 }
示例#16
0
        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>();
        }
示例#20
0
 public AddressComparer()
 {
     _logic = new CompareLogic();
     _logic.Config.CustomComparers.Add(new IPointComparer(RootComparerFactory.GetRootComparer()));
 }
示例#21
0
 public EquatableComparer()
     : base(RootComparerFactory.GetRootComparer())
 {
 }
示例#22
0
 /// <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)
 {
 }