DictionariesComparer
Comparator for two IDictionarys.
using System.Collections;
namespace NUnit.Framework.Constraints.Comparers
{
internal class DictionariesComparer : IChainComparer
{
private readonly NUnitEqualityComparer _equalityComparer;
internal DictionariesComparer(NUnitEqualityComparer equalityComparer)
{
_equalityComparer = equalityComparer;
}
public bool? Equal(object x, object y, ref Tolerance tolerance, bool topLevelComparison = true)
{
if (!(x is IDictionary) || !(y is IDictionary))
return null;
IDictionary dictionary = (IDictionary)x;
IDictionary dictionary2 = (IDictionary)y;
if (dictionary.Count != dictionary2.Count)
return false;
CollectionTally collectionTally = new CollectionTally(_equalityComparer, dictionary.Keys);
collectionTally.TryRemove(dictionary2.Keys);
if (collectionTally.Result.MissingItems.Count > 0 || collectionTally.Result.ExtraItems.Count > 0)
return false;
foreach (object key in dictionary.Keys) {
if (!_equalityComparer.AreEqual(dictionary[key], dictionary2[key], ref tolerance, false))
return false;
}
return true;
}
}
}