public void CurrentCellTrackingTest()
        {
            // Create a large enough data list, so that there will be scroll bar.
            var dataList = CreateTestDataList(100);

            DataGrid dataGrid;

            using (TestWindow.Show(dataList, out dataGrid))
            {
                ICurrentCellService target = new DataGridCurrentCellService();
                ((IUIService)target).AttachToElement(dataGrid);

                Assert.IsNull(target.CurrentCell.Item);

                ExpectNonCancelableEvents(target, () => { dataGrid.CurrentCell = new DataGridCellInfo(dataList[1], dataGrid.Columns[0]); });
                Assert.AreSame(dataList[1], target.CurrentCell.Item);
                Assert.AreEqual(0, target.CurrentCell.CellIndex);

                ExpectNonCancelableEvents(target, () => { dataGrid.CurrentCell = new DataGridCellInfo(dataList[5], dataGrid.Columns[2]); });
                Assert.AreSame(dataList[5], target.CurrentCell.Item);
                Assert.AreEqual(2, target.CurrentCell.CellIndex);

                ExpectNoEvents(target, () => { dataGrid.CurrentColumn.DisplayIndex = 0; });
                Assert.AreEqual(0, target.CurrentCell.CellIndex);
            }
        }
        public void MoveToTopTest()
        {
            // Create a large enough data list, so that there will be scroll bar.
            var dataList = CreateTestDataList(100);

            DataGrid dataGrid;

            using (TestWindow.Show(dataList, out dataGrid))
            {
                ICurrentCellService target = new DataGridCurrentCellService();
                ((IUIService)target).AttachToElement(dataGrid);

                ExpectCancelableEvents(target, () => { Assert.IsTrue(target.MoveToTop()); });
                Assert.AreEqual(dataList[0], dataGrid.CurrentItem);

                ExpectNoEvents(target, () => { Assert.IsTrue(target.MoveToTop()); });

                var lastItem = dataList[dataList.Count - 1];
                dataGrid.ScrollIntoView(lastItem);
                ExpectCancelableEvents(target, () => { Assert.IsTrue(target.MoveToBottom()); });
                Assert.AreEqual(lastItem, dataGrid.CurrentItem);

                ExpectNoEvents(target, () => { Assert.IsTrue(target.MoveToBottom()); });

                dataGrid.ScrollIntoView(dataList[0]);
                ExpectCancelableEvents(target, () => { Assert.IsTrue(target.MoveToTop()); });
                Assert.AreEqual(dataList[0], dataGrid.CurrentItem);
            }
        }
        public void DataGridCurrentCellServiceConstructorTest()
        {
            // Create a large enough data list, so that there will be scroll bar.
            var dataList = CreateTestDataList(100);

            DataGrid dataGrid;

            using (TestWindow.Show(dataList, out dataGrid))
            {
                ICurrentCellService target = new DataGridCurrentCellService();
                ((IUIService)target).AttachToElement(dataGrid);
                Assert.IsNull(target.CurrentCell.Item);

                dataGrid.CurrentCell = new DataGridCellInfo(dataList[1], dataGrid.Columns[0]);
                target = new DataGridCurrentCellService();
                ((IUIService)target).AttachToElement(dataGrid);
                Assert.AreSame(dataList[1], target.CurrentCell.Item);

                dataGrid.ScrollIntoView(dataList[70]);
                dataGrid.Dispatcher.Invoke(DispatcherPriority.Render, new Action(() =>
                {
                    dataGrid.CurrentCell = new DataGridCellInfo(dataList[70], dataGrid.Columns[0]);
                }));

                target = new DataGridCurrentCellService();
                ((IUIService)target).AttachToElement(dataGrid);
                Assert.AreSame(dataList[70], target.CurrentCell.Item);
            }
        }
        //[TestMethod()]
        public void CellVisibilityTest()
        {
            // Create a large enough data list, so that there will be scroll bar.
            var dataList = CreateTestDataList(100);

            DataGrid dataGrid;

            using (TestWindow.Show(dataList, out dataGrid))
            {
                ICurrentCellService target = new DataGridCurrentCellService();
                ((IUIService)target).AttachToElement(dataGrid);
            }
            Assert.Inconclusive("I'm not sure this should be implemented. TBD when required.");
        }
        public void MoveUpTest()
        {
            // Create a large enough data list, so that there will be a scroll bar.
            var dataList = CreateTestDataList(100);

            DataGrid dataGrid;

            using (TestWindow.Show(dataList, out dataGrid))
            {
                int currentItemIndex = dataList.Count - 1;
                dataGrid.ScrollIntoView(dataList[currentItemIndex], dataGrid.Columns[0]);
                dataGrid.CurrentCell = new DataGridCellInfo(dataList[currentItemIndex], dataGrid.Columns[0]);
                ICurrentCellService target = new DataGridCurrentCellService();
                ((IUIService)target).AttachToElement(dataGrid);

                ExpectCancelableEvents(target, () => { Assert.IsTrue(target.MoveUp(1)); });
                currentItemIndex--;
                Assert.AreSame(dataList[currentItemIndex], target.CurrentCell.Item);
                Assert.AreSame(dataGrid.CurrentItem, target.CurrentCell.Item);
                Assert.IsNotNull(target.CurrentCell.Item);
                Assert.AreSame(dataGrid.ColumnFromDisplayIndex(0), dataGrid.CurrentCell.Column);

                ExpectNoEvents(target, () => { Assert.IsFalse(target.MoveUp(40)); });

                currentItemIndex -= 40;
                dataGrid.ScrollIntoView(dataList[currentItemIndex]);
                ExpectCancelableEvents(target, () => { Assert.IsTrue(target.MoveUp(40)); });
                Assert.AreSame(dataList[currentItemIndex], target.CurrentCell.Item);
                Assert.AreSame(dataGrid.CurrentItem, target.CurrentCell.Item);
                Assert.IsNotNull(target.CurrentCell.Item);
                Assert.AreSame(dataGrid.ColumnFromDisplayIndex(0), dataGrid.CurrentCell.Column);

                dataGrid.CurrentColumn = dataGrid.ColumnFromDisplayIndex(2);
                currentItemIndex      -= 10;
                dataGrid.ScrollIntoView(dataList[currentItemIndex]);
                ExpectCancelableEvents(target, () => { Assert.IsTrue(target.MoveUp(10)); });
                Assert.AreSame(dataList[currentItemIndex], target.CurrentCell.Item);
                Assert.AreSame(dataGrid.CurrentItem, target.CurrentCell.Item);
                Assert.IsNotNull(target.CurrentCell.Item);
                Assert.AreSame(dataGrid.ColumnFromDisplayIndex(2), dataGrid.CurrentCell.Column);

                ExpectNoEvents(target, () => { Assert.IsFalse(target.MoveUp(90)); });
                Assert.IsNotNull(target.CurrentCell.Item);
            }
        }
        public void MoveDownTest()
        {
            // Create a large enough data list, so that there will be scroll bar.
            var dataList = CreateTestDataList(100);

            DataGrid dataGrid;

            using (TestWindow.Show(dataList, out dataGrid))
            {
                ICurrentCellService target = new DataGridCurrentCellService();
                ((IUIService)target).AttachToElement(dataGrid);

                // Move down, when cell was not yet set, should move to the first cell.
                ExpectCancelableEvents(target, () => { Assert.IsTrue(target.MoveDown(1)); });
                Assert.AreSame(dataList[0], target.CurrentCell.Item);
                Assert.AreSame(dataGrid.CurrentItem, target.CurrentCell.Item);
                Assert.IsNotNull(target.CurrentCell.Item);
                Assert.AreSame(dataGrid.ColumnFromDisplayIndex(0), dataGrid.CurrentCell.Column);

                ExpectCancelableEvents(target, () => { Assert.IsTrue(target.MoveDown(5)); });
                Assert.AreSame(dataList[5], target.CurrentCell.Item);
                Assert.AreSame(dataList[5], dataGrid.CurrentCell.Item);

                // Verify an unloaded item cannot be reached.
                ExpectNoEvents(target, () => { Assert.IsFalse(target.MoveDown(40)); });

                // Now force loading the target item by scrolling to it, and verify the service can move to it.
                dataGrid.ScrollIntoView(dataList[45]);
                ExpectCancelableEvents(target, () => { Assert.IsTrue(target.MoveDown(40)); });
                Assert.AreSame(dataList[45], dataGrid.CurrentCell.Item);

                // Scroll to the last item in the list.
                dataGrid.ScrollIntoView(dataList[dataList.Count - 1]);

                // Try to move beyond the last item in the list.
                ExpectNoEvents(target, () => { Assert.IsFalse(target.MoveDown((uint)dataList.Count + 1)); });
                Assert.IsNotNull(target.CurrentCell.Item);

                // Move to the last item
                Assert.IsTrue(target.MoveDown((uint)(dataGrid.Items.Count - 45 - 1)));
                // Try to move one more item down
                ExpectNoEvents(target, () => { Assert.IsFalse(target.MoveDown(1)); });
            }
        }
        public void MoveToTest()
        {
            // Create a large enough data list, so that there will be scroll bar.
            var dataList = CreateTestDataList(100);

            DataGrid dataGrid;

            using (TestWindow.Show(dataList, out dataGrid))
            {
                ICurrentCellService target = new DataGridCurrentCellService();
                ((IUIService)target).AttachToElement(dataGrid);

                List <Tuple <int, int> > cellPositions = new List <Tuple <int, int> >()
                {
                    new Tuple <int, int>(5, 1),
                    new Tuple <int, int>(1, 0),
                    new Tuple <int, int>(10, 2)
                };

                foreach (var cellPosition in cellPositions)
                {
                    Trace.WriteLine("Trying cell position " + cellPosition);
                    ExpectCancelableEvents(target, () => { Assert.IsTrue(target.MoveTo(new UniversalCellInfo(dataList[cellPosition.Item1], cellPosition.Item2))); });

                    Assert.AreEqual(dataGrid.Items[cellPosition.Item1], dataGrid.CurrentCell.Item, "Failed for cell position " + cellPosition);
                    Assert.AreEqual(dataGrid.Items[cellPosition.Item1], dataGrid.CurrentItem, "Failed for cell position " + cellPosition);
                    Assert.AreEqual(cellPosition.Item2, dataGrid.CurrentCell.Column.DisplayIndex, "Failed for cell position " + cellPosition);
                }

                // Move to an invalid column
                ExpectNoEvents(target, () => { Assert.IsFalse(target.MoveTo(new UniversalCellInfo(dataList[4], 3))); });

                Assert.AreEqual(dataGrid.CurrentItem, target.CurrentCell.Item);
                Assert.AreEqual(dataGrid.CurrentColumn.DisplayIndex, target.CurrentCell.CellIndex);
            }
        }
        public void HorizontalMoveTest()
        {
            // Create a large enough data list, so that there will be scroll bar.
            var dataList = CreateTestDataList(100);

            DataGrid dataGrid;

            using (TestWindow.Show(dataList, out dataGrid))
            {
                dataGrid.CurrentCell = new DataGridCellInfo(dataList[0], dataGrid.Columns[0]);
                ICurrentCellService target = new DataGridCurrentCellService();
                ((IUIService)target).AttachToElement(dataGrid);

                ExpectCancelableEvents(target, () => { Assert.IsTrue(target.MoveRight(1)); });

                Assert.AreEqual(1, target.CurrentCell.CellIndex);
                Assert.AreEqual(dataGrid.CurrentCell.Column.DisplayIndex, target.CurrentCell.CellIndex);

                ExpectCancelableEvents(target, () => { Assert.IsTrue(target.MoveRight(1)); });

                Assert.AreEqual(dataGrid.CurrentCell.Column.DisplayIndex, target.CurrentCell.CellIndex);

                ExpectNoEvents(target, () => { Assert.IsFalse(target.MoveRight(1)); });

                ExpectCancelableEvents(target, () => { Assert.IsTrue(target.MoveLeft(1)); });

                Assert.AreEqual(1, target.CurrentCell.CellIndex);
                Assert.AreEqual(dataGrid.CurrentCell.Column.DisplayIndex, target.CurrentCell.CellIndex);

                ExpectCancelableEvents(target, () => { Assert.IsTrue(target.MoveLeft(1)); });

                Assert.AreEqual(0, target.CurrentCell.CellIndex);
                Assert.AreEqual(dataGrid.CurrentCell.Column.DisplayIndex, target.CurrentCell.CellIndex);

                ExpectNoEvents(target, () => { Assert.IsFalse(target.MoveLeft(1)); });

                ExpectCancelableEvents(target, () => { Assert.IsTrue(target.MoveRight(2)); });

                Assert.AreEqual(2, target.CurrentCell.CellIndex);

                ExpectCancelableEvents(target, () => { Assert.IsTrue(target.MoveLeft(2)); });

                Assert.AreEqual(0, target.CurrentCell.CellIndex);

                ExpectCancelableEvents(target, () => { Assert.IsTrue(target.MoveToRightMost()); });

                Assert.AreEqual(2, target.CurrentCell.CellIndex);

                ExpectCancelableEvents(target, () => { Assert.IsTrue(target.MoveToLeftMost()); });

                Assert.AreEqual(0, target.CurrentCell.CellIndex);

                // Scroll and move.
                dataGrid.CurrentColumn = dataGrid.Columns[0];
                dataGrid.ScrollIntoView(dataList[60]);
                dataGrid.CurrentItem = dataList[60];
                Assert.AreEqual(0, target.CurrentCell.CellIndex);

                ExpectCancelableEvents(target, () => { Assert.IsTrue(target.MoveRight(1)); });

                dataGrid.CurrentColumn = dataGrid.Columns[2];
                dataGrid.ScrollIntoView(dataList[10]);
                dataGrid.CurrentItem = dataList[10];
                Assert.AreEqual(2, target.CurrentCell.CellIndex);

                ExpectCancelableEvents(target, () => { Assert.IsTrue(target.MoveLeft(1)); });
            }
        }