Ejemplo n.º 1
0
        public ComparisonResult Compare(IComparisonContext context, object value1, object value2)
        {
            var list1 = ((IEnumerable) value1).Cast<object>().ToArray();
            var list2 = ((IEnumerable) value2).Cast<object>().ToArray();

            if (list1.Length != list2.Length)
            {
                context.AddDifference(list1.Length, list2.Length, "Count");
                return ComparisonResult.Fail;
            }

            if (list1.Length == 0)
            {
                return ComparisonResult.Pass;
            }

            var zip = list1.Zip(list2, Tuple.Create).ToArray();

            var results = new List<ComparisonResult>();
            var i = 0;
            foreach (var p in zip)
            {
                var innerContext = context.VisitingIndex(i++);
                results.Add(Inner.Compare(innerContext, p.Item1, p.Item2));
            }

            return results.ToResult();
        }
Ejemplo n.º 2
0
        public ComparisonResult Compare(IComparisonContext context, object value1, object value2)
        {
            var list1 = ((IEnumerable)value1).Cast <object>().ToArray();
            var list2 = ((IEnumerable)value2).Cast <object>().ToArray();

            if (list1.Length != list2.Length)
            {
                context.AddDifference(list1.Length, list2.Length, "Count");
                return(ComparisonResult.Fail);
            }

            if (list1.Length == 0)
            {
                return(ComparisonResult.Pass);
            }

            var zip = list1.Zip(list2, Tuple.Create).ToArray();

            var results = new List <ComparisonResult>();
            var i       = 0;

            foreach (var p in zip)
            {
                var innerContext = context.VisitingIndex(i++);
                results.Add(Inner.Compare(innerContext, p.Item1, p.Item2));
            }

            return(results.ToResult());
        }
Ejemplo n.º 3
0
        public Result LoadPredefinedResponses(Dictionary <string, Dictionary <string, ActionResponse> > responses, UtcDateTime now, object evaluationCtx)
        {
            Contract.Requires(responses != null);

            var loadResults = new List <Result>();

            foreach (var stepResp in responses)
            {
                foreach (var actionResp in stepResp.Value)
                {
                    Result loadResult_ = FindActionById(stepResp.Key, actionResp.Key)
                                         .Fold(action => action.LoadPredefinedResponse(actionResp.Value, now, evaluationCtx)
                                               , () => Err($"Error loading predefined responses.  Could not find Step: {stepResp.Key} or Action: {actionResp.Key} in that step."));
                    loadResults.Add(loadResult_);
                }
            }

            Result loadResult = loadResults.ToResult();

            if (loadResult.IsOk)
            {
                MoveToFirstAwaitingStep();
            }

            return(loadResult);
        }
Ejemplo n.º 4
0
        public ComparisonResult Compare(IComparisonContext context, object value1, object value2)
        {
            var dict1 = (IDictionary)value1;
            var dict2 = CastToDictionaryEntries((IDictionary)value2).ToDictionary(e => e.Key, e => e.Value);

            if (dict1.Count != dict2.Count)
            {
                context.AddDifference(dict1.Count, dict2.Count, "Count");
                return(ComparisonResult.Fail);
            }

            if (dict1.Count == 0)
            {
                return(ComparisonResult.Pass);
            }

            var results = new List <ComparisonResult>();

            foreach (DictionaryEntry entry in dict1)
            {
                var key = FindKey(dict2, entry.Key);

                if (key == null)
                {
                    var difference = new MissingEntryDifference(MissingSide.Expected, entry.Key, entry.Value)
                    {
                        Breadcrumb = context.Breadcrumb,
                    };

                    context.AddDifference(difference);

                    continue;
                }

                var value = dict2[key];

                var innerContext = context.VisitingIndex(key);
                results.Add(ValueComparer.Compare(innerContext, entry.Value, value));

                dict2.Remove(key);
            }

            if (dict2.Count == 0)
            {
                return(results.ToResult());
            }

            foreach (var pair in dict2)
            {
                var difference = new MissingEntryDifference(MissingSide.Actual, pair.Key, pair.Value)
                {
                    Breadcrumb = context.Breadcrumb,
                };

                context.AddDifference(difference);
            }

            return(ComparisonResult.Fail);
        }
Ejemplo n.º 5
0
        public ComparisonResult Compare(IComparisonContext context, object value1, object value2)
        {
            var type1 = value1.GetType();
            var type2 = value2.GetType();

            var props1 = ReflectionCache.GetProperties(type1);
            var props2 = ReflectionCache.GetProperties(type2).ToDictionary(p => p.Name);

            var ignored = GetIgnoredPropertiesForTypes(type1, type2);

            var results = new List <ComparisonResult>();

            foreach (var propertyInfo1 in props1)
            {
                if (ignored.Contains(propertyInfo1.Name))
                {
                    props2.Remove(propertyInfo1.Name);
                    continue;
                }

                var propValue1 = propertyInfo1.GetValue(value1);

                if (!props2.ContainsKey(propertyInfo1.Name))
                {
                    if (!IgnoreUnmatchedProperties)
                    {
                        context.AddDifference(propValue1, "(missing)", propertyInfo1.Name);
                        results.Add(ComparisonResult.Fail);
                    }
                    continue;
                }

                var propertyInfo2 = props2[propertyInfo1.Name];
                var propValue2    = propertyInfo2.GetValue(value2);

                var innerContext = context.VisitingProperty(propertyInfo1.Name);
                results.Add(Inner.Compare(innerContext, propValue1, propValue2));

                props2.Remove(propertyInfo1.Name);
            }

            if (!IgnoreUnmatchedProperties && props2.Count > 0)
            {
                foreach (var p in props2)
                {
                    if (ignored.Contains(p.Key))
                    {
                        continue;
                    }

                    var v = p.Value.GetValue(value2);
                    context.AddDifference("(missing)", v, p.Key);
                    results.Add(ComparisonResult.Fail);
                }
            }

            return(results.ToResult());
        }
Ejemplo n.º 6
0
        public ComparisonResult Compare(IComparisonContext context, object value1, object value2)
        {
            var dict1 = (IDictionary) value1;
            var dict2 = CastToDictionaryEntries((IDictionary) value2).ToDictionary(e => e.Key, e => e.Value);

            if (dict1.Count != dict2.Count)
            {
                context.AddDifference(dict1.Count, dict2.Count, "Count");
                return ComparisonResult.Fail;
            }

            if (dict1.Count == 0)
            {
                return ComparisonResult.Pass;
            }

            var results = new List<ComparisonResult>();

            foreach (DictionaryEntry entry in dict1)
            {
                var key = FindKey(dict2, entry.Key);

                if (key == null)
                {
                    var difference = new MissingEntryDifference(MissingSide.Expected, entry.Key, entry.Value)
                    {
                        Breadcrumb = context.Breadcrumb,
                    };

                    context.AddDifference(difference);

                    continue;
                }

                var value = dict2[key];

                var innerContext = context.VisitingIndex(key);
                results.Add(ValueComparer.Compare(innerContext, entry.Value, value));

                dict2.Remove(key);
            }

            if(dict2.Count == 0)
                return results.ToResult();

            foreach (var pair in dict2)
            {
                var difference = new MissingEntryDifference(MissingSide.Actual, pair.Key, pair.Value)
                {
                    Breadcrumb = context.Breadcrumb,
                };

                context.AddDifference(difference);
            }

            return ComparisonResult.Fail;
        }
Ejemplo n.º 7
0
        public ComparisonResult Compare(IComparisonContext context, object value1, object value2)
        {
            var list1 = ((IEnumerable)value1).Cast <object>().ToArray();
            var list2 = ((IEnumerable)value2).Cast <object>().ToArray();

            var results = new List <ComparisonResult>();
            int i       = 0;

            i = CompareLists(context, list1, list2, results, i);
            CompareLists(context, list2, list1, results, i);

            if (list1.Length == 0)
            {
                return(ComparisonResult.Pass);
            }

            return(results.ToResult());
        }