public void CanCreateFromIObservableVector() { RunOnUIThread.Execute(() => { var data = new WinRTObservableVector(Enumerable.Range(0, 100).Select(i => string.Format("Item #{0}", i))); var dataSource = new ItemsSourceView(data); var recorder = new CollectionChangeRecorder(dataSource); Verify.AreEqual(100, dataSource.Count); Verify.AreEqual("Item #4", (string)dataSource.GetAt(4)); Verify.IsFalse(dataSource.HasKeyIndexMapping); data.Insert(4, "Inserted Item"); data.RemoveAt(7); data[15] = "Replaced Item"; data.Clear(); VerifyRecordedCollectionChanges( expected: new NotifyCollectionChangedEventArgs[] { CollectionChangeEventArgsConverters.CreateNotifyArgs(NotifyCollectionChangedAction.Add, -1, 0, 4, 1), CollectionChangeEventArgsConverters.CreateNotifyArgs(NotifyCollectionChangedAction.Remove, 7, 1, -1, 0), CollectionChangeEventArgsConverters.CreateNotifyArgs(NotifyCollectionChangedAction.Replace, 15, 1, 15, 1), CollectionChangeEventArgsConverters.CreateNotifyArgs(NotifyCollectionChangedAction.Reset, -1, 0, -1, 0), }, actual: recorder.RecordedArgs); }); }
public void VerifyIndexOfBehavior() { RunOnUIThread.Execute(() => { var collections = new List <IEnumerable>(); collections.Add(new ObservableVectorWithUniqueIds(Enumerable.Range(0, 10))); collections.Add(new ObservableCollection <int>(Enumerable.Range(0, 10))); foreach (var collection in collections) { var dataSource = new ItemsSourceView(collection); foreach (int i in collection) { Verify.AreEqual(i, dataSource.IndexOf(i)); } Verify.AreEqual(-1, dataSource.IndexOf(11)); } // Enumerabl.Range returns IEnumerable which does not provide IndexOf var testingItemsSourceView = new ItemsSourceView(Enumerable.Range(0, 10)); var index = -1; try { index = testingItemsSourceView.IndexOf(0); }catch (Exception) { } Verify.AreEqual(-1, index); var nullContainingEnumerable = new CustomEnumerable(); testingItemsSourceView = new ItemsSourceView(nullContainingEnumerable); Verify.AreEqual(1, testingItemsSourceView.IndexOf(null)); }); }
public void CanCreateFromIBindableIterable() { RunOnUIThread.Execute(() => { var dataSource = new ItemsSourceView(Enumerable.Range(0, 100)); Verify.AreEqual(100, dataSource.Count); Verify.AreEqual(4, dataSource.GetAt(4)); }); }
public void VerifyUniqueIdMappingInterface() { RunOnUIThread.Execute(() => { var data = new ObservableVectorWithUniqueIds(Enumerable.Range(0, 10)); var dataSource = new ItemsSourceView(data); Verify.AreEqual(10, dataSource.Count); Verify.AreEqual(true, dataSource.HasKeyIndexMapping); Verify.AreEqual(5, dataSource.IndexFromKey("5")); Verify.AreEqual("5", dataSource.KeyFromIndex(5)); }); }
public void Only_Subscribes_To_Source_CollectionChanged_When_CollectionChanged_Subscribed() { var source = new AvaloniaList <string>(); var target = new ItemsSourceView <string>(source); var debug = (INotifyCollectionChangedDebug)source; Assert.Null(debug.GetCollectionChangedSubscribers()); void Handler(object sender, NotifyCollectionChangedEventArgs e) { } target.CollectionChanged += Handler; Assert.NotNull(debug.GetCollectionChangedSubscribers()); Assert.Equal(1, debug.GetCollectionChangedSubscribers().Length); target.CollectionChanged -= Handler; Assert.Null(debug.GetCollectionChangedSubscribers()); }
public void VerifyNotifyCollectionChangeWithReadonlyListBehavior() { int invocationCount = 0; RunOnUIThread.Execute(() => { var collection = new ReadOnlyNotifyPropertyChangedCollection <object>(); var itemsSourceView = new ItemsSourceView(collection); itemsSourceView.CollectionChanged += ItemsSourceView_CollectionChanged; var underlyingData = new ObservableCollection <object>(); collection.Data = underlyingData; Verify.AreEqual(1, invocationCount); }); void ItemsSourceView_CollectionChanged(object sender, NotifyCollectionChangedEventArgs e) { invocationCount++; } }
public void VerifyReadOnlyListCompatibility() { RunOnUIThread.Execute(() => { var collection = new ReadOnlyNotifyPropertyChangedCollection <object>(); var firstItem = "something1"; collection.Data = new ObservableCollection <object>(); collection.Data.Add(firstItem); collection.Data.Add("something2"); collection.Data.Add("something3"); var itemsSourceView = new ItemsSourceView(collection); Verify.AreEqual(3, itemsSourceView.Count); collection.Data.Add("something4"); Verify.AreEqual(4, itemsSourceView.Count); Verify.AreEqual(firstItem, itemsSourceView.GetAt(0)); Verify.AreEqual(0, itemsSourceView.IndexOf(firstItem)); }); }
public CollectionChangeRecorder(ItemsSourceView source) { source.CollectionChanged += (sender, args) => RecordedArgs.Add(Clone(args)); }
public void Cannot_Wrap_An_ItemsSourceView_In_Another() { var source = new ItemsSourceView <string>(new string[0]); Assert.Throws <ArgumentException>(() => new ItemsSourceView <string>(source)); }