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);
            });
        }
Example #2
0
        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));
     });
 }
Example #5
0
        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());
        }
Example #6
0
        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++;
            }
        }
Example #7
0
        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));
            });
        }
Example #8
0
 public CollectionChangeRecorder(ItemsSourceView source)
 {
     source.CollectionChanged += (sender, args) => RecordedArgs.Add(Clone(args));
 }
Example #9
0
        public void Cannot_Wrap_An_ItemsSourceView_In_Another()
        {
            var source = new ItemsSourceView <string>(new string[0]);

            Assert.Throws <ArgumentException>(() => new ItemsSourceView <string>(source));
        }