Exemple #1
0
        public void CanCreateFromIObservableVector()
        {
            RunOnUIThread.Execute(() =>
            {
                var data       = new WinRTObservableVector(Enumerable.Range(0, 100).Select(i => string.Format("Item #{0}", i)));
                var dataSource = new InspectingDataSource(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);
            });
        }
Exemple #2
0
 public void CanCreateFromIBindableIterable()
 {
     RunOnUIThread.Execute(() =>
     {
         var dataSource = new InspectingDataSource(Enumerable.Range(0, 100));
         Verify.AreEqual(100, dataSource.Count);
         Verify.AreEqual(4, dataSource.GetAt(4));
     });
 }
Exemple #3
0
 public void ValidateGetSetItemsSource()
 {
     RunOnUIThread.Execute(() =>
     {
         ItemsRepeater repeater = new ItemsRepeater();
         var dataSource         = new InspectingDataSource(Enumerable.Range(0, 10).Select(i => string.Format("Item #{0}", i)));
         repeater.SetValue(ItemsRepeater.ItemsSourceProperty, dataSource);
         Verify.AreSame(dataSource, repeater.GetValue(ItemsRepeater.ItemsSourceProperty) as ItemsSourceView);
         Verify.AreSame(dataSource, repeater.ItemsSourceView);
     });
 }
Exemple #4
0
 public void VerifyUniqueIdMappingInterface()
 {
     RunOnUIThread.Execute(() =>
     {
         var data       = new ObservableVectorWithUniqueIds(Enumerable.Range(0, 10));
         var dataSource = new InspectingDataSource(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 ValidateGetElementAtCachingForLayout()
        {
            List <int>      data       = Enumerable.Range(0, 15).ToList();
            ItemsSourceView dataSource = null;

            RunOnUIThread.Execute(() => dataSource = new InspectingDataSource(data));
            ScrollViewer scrollViewer = null;
            var          repeater     = SetupRepeater(dataSource, null /*layout*/, out scrollViewer);
            bool         layoutRan    = false;

            RunOnUIThread.Execute(() =>
            {
                var layout = new MockVirtualizingLayout();
                layout.MeasureLayoutFunc = (availableSize, context) =>
                {
                    Verify.AreEqual(15, context.ItemCount);
                    var element0 = context.GetOrCreateElementAt(0);
                    Verify.IsNotNull(element0);
                    var element1 = context.GetOrCreateElementAt(1);
                    Verify.IsNotNull(element1);
                    Verify.AreNotSame(element0, element1);

                    var element1again = context.GetOrCreateElementAt(1);
                    Verify.AreSame(element1, element1again);

                    var element10 = context.GetOrCreateElementAt(10);
                    Verify.IsNotNull(element10);
                    Verify.AreNotSame(element0, element10);
                    Verify.AreNotSame(element1, element10);

                    context.RecycleElement(element1);

                    var element0New = context.GetOrCreateElementAt(0);
                    Verify.AreSame(element0, element0New);

                    context.RecycleElement(element10);
                    context.RecycleElement(element0);

                    layoutRan = true;
                    return(new Size(10, 10));
                };

                repeater.Layout = layout;
                repeater.UpdateLayout();
                Verify.IsTrue(layoutRan);
            });

            IdleSynchronizer.Wait();
        }
Exemple #6
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 InspectingDataSource(collection);
                    foreach (int i in collection)
                    {
                        Verify.AreEqual(i, dataSource.IndexOf(i));
                    }

                    Verify.AreEqual(-1, dataSource.IndexOf(11));
                }

#if false // On Uno the underlying field is an IList which does support IndexOf
                // Enumerabl.Range returns IEnumerable which does not provide IndexOf
                var testingItemsSourceView = new InspectingDataSource(Enumerable.Range(0, 10));
                var index = -1;
                try
                {
                    index = testingItemsSourceView.IndexOf(0);
                }catch (Exception) { }
                Verify.AreEqual(-1, index);
#endif

                var nullContainingEnumerable = new CustomEnumerable();
                var testingItemsSourceView2  = new InspectingDataSource(nullContainingEnumerable);

                Verify.AreEqual(1, testingItemsSourceView2.IndexOf(null));
            });
        }
        public void ValidateElementClearingOrderFromFlowLayout()
        {
            ItemsSourceView dataSource = null;

            RunOnUIThread.Execute(() => dataSource = new InspectingDataSource(Enumerable.Range(0, 15).ToList()));
            ScrollViewer scrollViewer     = null;
            var          repeater         = SetupRepeater(dataSource, null /*layout*/, out scrollViewer);
            List <int>   clearedIndices   = new List <int>();
            var          viewChangedEvent = new ManualResetEvent(false);

            RunOnUIThread.Execute(() =>
            {
                scrollViewer.ViewChanged += (sender, args) =>
                {
                    if (!args.IsIntermediate)
                    {
                        viewChangedEvent.Set();
                    }
                };

                repeater.Layout           = new StackLayout();
                repeater.ElementPrepared += (sender, args) =>
                {
                    ((FrameworkElement)args.Element).Height = 20;
                };
                repeater.UpdateLayout();

                repeater.ElementClearing += (sender, args) =>
                {
                    int index = repeater.GetElementIndex(args.Element);
                    Log.Comment("Clearing.." + index);
                    clearedIndices.Add(index);
                };

                scrollViewer.ChangeView(null, 100.0, null, disableAnimation: true);
            });

            Verify.IsTrue(viewChangedEvent.WaitOne(DefaultWaitTime), "Waiting for ViewChanged.");
            IdleSynchronizer.Wait();

            RunOnUIThread.Execute(() =>
            {
                // Validate order is 0, 1, 2, 3
                for (int i = 0; i < 4; i++)
                {
                    Verify.AreEqual(i, clearedIndices[i]);
                }

                clearedIndices.Clear();
                viewChangedEvent.Reset();
                scrollViewer.ChangeView(null, 0.0, null, disableAnimation: true);
            });

            Verify.IsTrue(viewChangedEvent.WaitOne(DefaultWaitTime), "Waiting for ViewChanged.");
            IdleSynchronizer.Wait();

            RunOnUIThread.Execute(() =>
            {
                // Validate order is backwards 14, 13, 12, 11
                for (int i = 0; i < 4; i++)
                {
                    Verify.AreEqual(14 - i, clearedIndices[i]);
                }
            });
        }