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