using System; using System.Collections.Generic; using System.Collections.Specialized; namespace ObservableCollections.Tests { public struct ViewContainer : IEquatable>, IComparable> { public ViewContainer(T value) { Value = value; } public T Value { get; } public static implicit operator ViewContainer(T value) => new(value); public override int GetHashCode() { return Value.GetHashCode(); } public int CompareTo(ViewContainer other) { return Comparer.Default.Compare(Value, other.Value); } public bool Equals(ViewContainer other) { return EqualityComparer.Default.Equals(Value, other.Value); } } public class TestFilter : ISynchronizedViewFilter> { readonly Func, bool> filter; public List<(T, ViewContainer)> CalledWhenTrue = new(); public List<(T, ViewContainer)> CalledWhenFalse = new(); public List>> CalledOnCollectionChanged = new(); public TestFilter(Func, bool> filter) { this.filter = filter; } public void Clear() { CalledWhenTrue.Clear(); CalledWhenFalse.Clear(); CalledOnCollectionChanged.Clear(); } public bool IsMatch(T value, ViewContainer view) { return this.filter.Invoke(value, view); } public void OnCollectionChanged(in SynchronizedViewChangedEventArgs> args) { CalledOnCollectionChanged.Add(args); } public void WhenTrue(T value, ViewContainer view) { CalledWhenTrue.Add((value, view)); } public void WhenFalse(T value, ViewContainer view) { CalledWhenFalse.Add((value, view)); } } public class TestFilter2 : ISynchronizedViewFilter, ViewContainer> { readonly Func, ViewContainer, bool> filter; public List<(KeyValuePair, ViewContainer)> CalledWhenTrue = new(); public List<(KeyValuePair, ViewContainer)> CalledWhenFalse = new(); public List, ViewContainer>> CalledOnCollectionChanged = new(); public TestFilter2(Func, ViewContainer, bool> filter) { this.filter = filter; } public void Clear() { CalledWhenTrue.Clear(); CalledWhenFalse.Clear(); CalledOnCollectionChanged.Clear(); } public bool IsMatch(KeyValuePair value, ViewContainer view) { return this.filter.Invoke(value, view); } public void OnCollectionChanged(in SynchronizedViewChangedEventArgs, ViewContainer> args) { CalledOnCollectionChanged.Add(args); } public void WhenTrue(KeyValuePair value, ViewContainer view) { CalledWhenTrue.Add((value, view)); } public void WhenFalse(KeyValuePair value, ViewContainer view) { CalledWhenFalse.Add((value, view)); } } }