public void ConstructorSetsCorrectData()
        {
            // Arrange
            Func <Task <IEnumerable <object> > > loadAction = () => Task.FromResult(Enumerable.Empty <object>());

            // Act
            var page = new UserSubPage("TITLE", loadAction, 123);

            // Assert
            Assert.AreEqual(123, page.Count);
            Assert.AreEqual("TITLE", page.Title);
        }
        public void NotifyPropertyChangedIsImplementedCorrectly()
        {
            // Arrange
            Func <Task <IEnumerable <object> > > loadAction = () => Task.FromResult(Enumerable.Empty <object>());
            var page   = new UserSubPage("", loadAction, 0);
            var tester = new PropertyChangedTester(page);

            // Act
            tester.Test(nameof(UserSubPage.Dispatcher));

            // Assert
            tester.Verify();
        }
        public void AsyncLoadCallsFunction()
        {
            // Arrange
            bool called = false;
            Func <Task <IEnumerable <object> > > loadAction = () =>
            {
                called = true;
                return(Task.FromResult(Enumerable.Range(1, 2).Cast <object>()));
            };

            var waitHandle  = new ManualResetEventSlim(false);
            int loadChanges = 0;
            var page        = new UserSubPage("", loadAction, 2)
            {
                Dispatcher = new SyncDispatcher()
            };

            page.PropertyChanged += (s, e) =>
            {
                if (e.PropertyName == nameof(UserSubPage.IsLoading))
                {
                    loadChanges++;

                    if (loadChanges == 2)
                    {
                        waitHandle.Set();
                    }
                }
            };

            // Act
            var items      = page.Items;
            var firstCount = items.Count;

            waitHandle.Wait(1000);

            // Assert
            Assert.IsNotNull(items);
            Assert.AreEqual(0, firstCount);
            Assert.IsTrue(called);
            Assert.AreEqual(2, loadChanges);
            Assert.AreEqual(2, items.Count);
        }