コード例 #1
0
        public void MoveCurrentTest()
        {
            ObservableCollection <TestData> dataList = new ObservableCollection <TestData>()
            {
                new TestData()
                {
                    StrValue = "A"
                },
                new TestData()
                {
                    StrValue = "B"
                },
                new TestData()
                {
                    StrValue = "C"
                }
            };

            DataGrid dataGrid;
            var      target      = new DataGridCurrentItemService();
            var      serviceList = new UIServiceCollection();

            serviceList.Add(new ServiceFactoryMock(target));
            using (TestWindow.Show(dataList, serviceList, out dataGrid))
            {
                dataGrid.Items.MoveCurrentTo(null);
                var helper   = new PrivateAccessHelper <DataGridCurrentItemService, DataGridCurrentItemService_Accessor>(target);
                var provider = helper.Target;
                var previewCurrentChangingEventHandlerHelper = new EventHandlerTestHelper <object, CancelableEventArgs>("PreviewCurrentChanging");
                provider.PreviewCurrentChanging += previewCurrentChangingEventHandlerHelper.Handler;
                var currentChangedEventHandlerHelper = new EventHandlerTestHelper <object, EventArgs>("CurrentChanged");
                provider.CurrentChanged += currentChangedEventHandlerHelper.Handler;

                provider.MoveCurrentTo(dataList[1]);
                Assert.IsTrue(previewCurrentChangingEventHandlerHelper.HandlerInvoked);
                Assert.IsTrue(currentChangedEventHandlerHelper.HandlerInvoked);
                previewCurrentChangingEventHandlerHelper.Reset();
                currentChangedEventHandlerHelper.Reset();

                // Block movement.
                previewCurrentChangingEventHandlerHelper.AdditionalHandling = (sender, args) => { args.Canceled = true; };
                Assert.IsFalse(provider.MoveCurrentTo(dataList[2]));
                Assert.IsTrue(previewCurrentChangingEventHandlerHelper.HandlerInvoked);
                Assert.IsFalse(currentChangedEventHandlerHelper.HandlerInvoked);
                previewCurrentChangingEventHandlerHelper.Reset();
                currentChangedEventHandlerHelper.Reset();

                previewCurrentChangingEventHandlerHelper.AdditionalHandling = null;

                // Move to the same row
                provider.MoveCurrentTo(provider.CurrentItem);
                Assert.IsFalse(previewCurrentChangingEventHandlerHelper.HandlerInvoked);
                Assert.IsFalse(currentChangedEventHandlerHelper.HandlerInvoked);
                previewCurrentChangingEventHandlerHelper.Reset();
                currentChangedEventHandlerHelper.Reset();

                provider.CurrentChanged         -= currentChangedEventHandlerHelper.Handler;
                provider.PreviewCurrentChanging -= previewCurrentChangingEventHandlerHelper.Handler;
            }
        }
コード例 #2
0
        public void ReplaceServiceListTest()
        {
            // Open a window with a control that has services attached.
            var window = new Window();
            var button = new Button();

            window.Content = button;

            UIServiceCollection serviceCollection = new UIServiceCollection();
            var serviceA = new TestServiceA();

            serviceCollection.Add(new ServiceFactoryMock(serviceA));
            UIServiceProvider.SetServiceList(button, serviceCollection);

            // Replace the assigned, yet unattached services.
            serviceCollection = new UIServiceCollection();
            var serviceA2 = new TestServiceA();

            serviceCollection.Add(new ServiceFactoryMock(serviceA2));
            UIServiceProvider.SetServiceList(button, serviceCollection);

            // Verify the old service was disposed.
            Assert.IsTrue(serviceA.IsDisposed);

            // Verify the old service does not become attached to the element.
            using (TestUtils.AutoCloseWindow(window))
            {
                Assert.IsFalse(serviceA.IsAttached);
                Assert.IsTrue(serviceA2.IsAttached);
            }

            Assert.IsTrue(serviceA2.IsDisposed);
        }
コード例 #3
0
        public void DataGridEditingStateDetectionTest()
        {
            ObservableCollection <TestData> dataList = new ObservableCollection <TestData>()
            {
                new TestData()
                {
                    StrValue = "A"
                },
                new TestData()
                {
                    StrValue = "B"
                },
                new TestData()
                {
                    StrValue = "C"
                }
            };

            var target      = new DataGridEditStateService();
            var serviceList = new UIServiceCollection();

            serviceList.Add(new ServiceFactoryMock(target));
            serviceList.Add(new ParameterlessUIServiceFactory()
            {
                ServiceType = typeof(DataGridCurrentCellService)
            });
            serviceList.Add(new ParameterlessUIServiceFactory()
            {
                ServiceType = typeof(DefaultCommandRegulationService)
            });

            DataGrid dataGrid;

            using (TestWindow.Show(dataList, serviceList, out dataGrid))
            {
                dataGrid.CurrentCell = new System.Windows.Controls.DataGridCellInfo(dataList[0], dataGrid.Columns[0]);

                // Verify IsEditing property is correct.
                Assert.IsFalse(target.IsEditingField);

                // Begin editing on the data grid and verify that a _newly_ created adapter will show
                // that the grid is editing.
                if (!dataGrid.BeginEdit())
                {
                    Assert.Inconclusive("Could not begin edit on data grid.");
                }

                Assert.IsTrue(target.IsEditingField);

                // Now commit the row to exit editing.
                if (!dataGrid.CommitEdit(DataGridEditingUnit.Row, true))
                {
                    Assert.Inconclusive("Could not commit edit on data grid.");
                }

                Assert.IsFalse(target.IsEditingField);
            }
        }
コード例 #4
0
        public void PreviewCurrentChangingEventTest()
        {
            ObservableCollection <TestData> dataList = new ObservableCollection <TestData>()
            {
                new TestData()
                {
                    StrValue = "A"
                },
                new TestData()
                {
                    StrValue = "B"
                },
                new TestData()
                {
                    StrValue = "C"
                }
            };

            DataGrid            dataGrid;
            var                 target      = new DataGridCurrentItemService();
            UIServiceCollection serviceList = new UIServiceCollection();

            serviceList.Add(new ServiceFactoryMock(target));
            using (TestWindow.Show(dataList, serviceList, out dataGrid))
            {
                dataGrid.CurrentItem = null;
                var helper   = new PrivateAccessHelper <DataGridCurrentItemService, DataGridCurrentItemService_Accessor>(target);
                var provider = helper.Target;
                var previewCurrentChangingEventHandlerHelper = new EventHandlerTestHelper <object, CancelableEventArgs>("PreviewCurrentChanging");
                provider.PreviewCurrentChanging += previewCurrentChangingEventHandlerHelper.Handler;

                dataGrid.CurrentCell = new DataGridCellInfo(dataList[0], dataGrid.Columns[0]);
                Assert.IsTrue(previewCurrentChangingEventHandlerHelper.HandlerInvoked);
                Assert.IsFalse(previewCurrentChangingEventHandlerHelper.LastInocationEventArgs.IsCancelable);
                previewCurrentChangingEventHandlerHelper.Reset();

                // Move to another line.
                dataGrid.CurrentCell = new DataGridCellInfo(dataList[1], dataGrid.Columns[0]);
                Assert.IsTrue(previewCurrentChangingEventHandlerHelper.HandlerInvoked);
                Assert.IsFalse(previewCurrentChangingEventHandlerHelper.LastInocationEventArgs.IsCancelable);
                previewCurrentChangingEventHandlerHelper.Reset();

                // Move to another cell on the same line
                dataGrid.CurrentCell = new DataGridCellInfo(dataList[1], dataGrid.Columns[1]);
                Assert.IsFalse(previewCurrentChangingEventHandlerHelper.HandlerInvoked);
                previewCurrentChangingEventHandlerHelper.Reset();

                // Move to another line using the provider.
                provider.MoveCurrentTo(dataList[2]);
                Assert.IsTrue(previewCurrentChangingEventHandlerHelper.HandlerInvoked);
                Assert.IsTrue(previewCurrentChangingEventHandlerHelper.LastInocationEventArgs.IsCancelable);

                provider.PreviewCurrentChanging -= previewCurrentChangingEventHandlerHelper.Handler;
            }
        }
コード例 #5
0
        public void CommitEditTest()
        {
            ObservableCollection <TestData> dataList = new ObservableCollection <TestData>()
            {
                new TestData()
                {
                    StrValue = "A"
                },
                new TestData()
                {
                    StrValue = "B"
                },
                new TestData()
                {
                    StrValue = "C"
                }
            };

            var target      = new DataGridEditStateService();
            var serviceList = new UIServiceCollection();

            serviceList.Add(new ServiceFactoryMock(target));
            serviceList.Add(new ParameterlessUIServiceFactory()
            {
                ServiceType = typeof(DataGridCurrentCellService)
            });
            serviceList.Add(new ParameterlessUIServiceFactory()
            {
                ServiceType = typeof(DefaultCommandRegulationService)
            });

            DataGrid dataGrid;

            using (TestWindow.Show(dataList, serviceList, out dataGrid))
            {
                // Begin edit and ensure the grid is indeed in edit mode.
                dataGrid.CurrentCell = new System.Windows.Controls.DataGridCellInfo(dataList[0], dataGrid.Columns[0]);
                Assert.IsTrue(target.BeginItemEdit(), "Begin edit should have succeeded.");
                Assert.IsTrue(target.IsEditingField);

                using (var eventsSink = new DGEventsSink(dataGrid))
                {
                    Assert.IsTrue(target.CommitItemEdit());
                    Assert.IsTrue(eventsSink.RowEditEndingEventRaised);
                    Assert.IsTrue(eventsSink.CellEditEndingEventRaised);

                    eventsSink.Reset();
                    Assert.IsTrue(target.CommitItemEdit());
                    Assert.IsFalse(eventsSink.RowEditEndingEventRaised);
                    Assert.IsFalse(eventsSink.CellEditEndingEventRaised);
                }
            }
        }
コード例 #6
0
        public void BeginEditTest()
        {
            ObservableCollection <TestData> dataList = new ObservableCollection <TestData>()
            {
                new TestData()
                {
                    StrValue = "A"
                },
                new TestData()
                {
                    StrValue = "B"
                },
                new TestData()
                {
                    StrValue = "C"
                }
            };

            var target      = new DataGridEditStateService();
            var serviceList = new UIServiceCollection();

            serviceList.Add(new ServiceFactoryMock(target));
            serviceList.Add(new ParameterlessUIServiceFactory()
            {
                ServiceType = typeof(DataGridCurrentCellService)
            });
            serviceList.Add(new ParameterlessUIServiceFactory()
            {
                ServiceType = typeof(DefaultCommandRegulationService)
            });

            DataGrid dataGrid;

            using (TestWindow.Show(dataList, serviceList, out dataGrid))
            {
                using (var eventsSink = new DGEventsSink(dataGrid))
                {
                    Assert.IsFalse(target.BeginItemEdit(), "Begin edit should have failed, because the data grid has no selected cell.");
                    Assert.IsFalse(eventsSink.BeginningEditEventRaised);

                    // Select a cell eligible for editing.
                    dataGrid.CurrentCell = new System.Windows.Controls.DataGridCellInfo(dataList[0], dataGrid.Columns[0]);
                    Assert.IsTrue(target.BeginItemEdit(), "Begin edit should have succeeded.");
                    Assert.IsTrue(eventsSink.BeginningEditEventRaised);
                    Assert.IsTrue(target.IsEditingField);

                    eventsSink.Reset();
                    Assert.IsTrue(target.BeginItemEdit(), "Although no new editing began, begin edit should return true - meaning the grid is in edit mode.");
                    Assert.IsFalse(eventsSink.BeginningEditEventRaised);
                }
            }
        }
コード例 #7
0
        public void CurrentEditTest()
        {
            ObservableCollection <TestData> dataList = new ObservableCollection <TestData>()
            {
                new TestData()
                {
                    StrValue = "A"
                },
                new TestData()
                {
                    StrValue = "B"
                },
                new TestData()
                {
                    StrValue = "C"
                }
            };

            var target      = new DataGridEditStateService();
            var serviceList = new UIServiceCollection();

            serviceList.Add(new ServiceFactoryMock(target));
            serviceList.Add(new ParameterlessUIServiceFactory()
            {
                ServiceType = typeof(DataGridCurrentCellService)
            });
            serviceList.Add(new ParameterlessUIServiceFactory()
            {
                ServiceType = typeof(DefaultCommandRegulationService)
            });

            DataGrid dataGrid;

            using (TestWindow.Show(dataList, serviceList, out dataGrid))
            {
                // Begin edit and ensure the grid is indeed in edit mode.
                dataGrid.CurrentCell = new DataGridCellInfo(dataList[0], dataGrid.Columns[0]);
                Precondition(target.BeginItemEdit(), "Begin edit should have succeeded.");

                Assert.AreEqual(dataList[0], target.CurrentEdit);
                Precondition(target.CommitItemEdit(), "Failed committing");
                Assert.IsNull(target.CurrentEdit);

                dataGrid.CurrentCell = new DataGridCellInfo(dataList[2], dataGrid.Columns[0]);
                Precondition(dataGrid.BeginEdit(), "Begin edit should have succeeded.");
                Assert.AreEqual(dataList[2], target.CurrentEdit);
                Precondition(target.CancelItemEdit(), "Failed canceling");
                Assert.IsNull(target.CurrentEdit);
            }
        }
コード例 #8
0
        public static IDisposable Show(IList dataList, UIServiceCollection dgServiceList, out DataGrid dataGrid)
        {
            var w = new TestWindow();

            if (dgServiceList != null)
            {
                UIServiceProvider.SetServiceList(w.MainDataGrid, dgServiceList);
            }

            w.DataContext = new ListCollectionView(dataList);

            var result = TestUtils.AutoCloseWindow(w);

            dataGrid = w.MainDataGrid;
            return(result);
        }
コード例 #9
0
        public void SetServiceProviderTest()
        {
            // Open a window with a control without any service.
            Window window = new Window();
            Button button = new Button();

            window.Content = button;
            using (TestUtils.AutoCloseWindow(window))
            {
                var serviceList = UIServiceProvider_Accessor.GetServiceList(button);
                Assert.IsNotNull(serviceList);
                List <IUIServiceFactory> serviceListWrapper = new List <IUIServiceFactory>(serviceList);
                Assert.AreEqual(0, serviceListWrapper.Count);
                Assert.IsNull(UIServiceProvider_Accessor.GetServiceProvider(button));
                var service = UIServiceProvider.GetService(button, typeof(TestServiceBase));
                Assert.IsNull(service);
            }

            // Open a window with a control that has services attached.
            window         = new Window();
            button         = new Button();
            window.Content = button;

            UIServiceCollection serviceCollection = new UIServiceCollection();
            var serviceA = new TestServiceA();

            serviceCollection.Add(new ServiceFactoryMock(serviceA));
            UIServiceProvider.SetServiceList(button, serviceCollection);

            using (TestUtils.AutoCloseWindow(window))
            {
                Assert.IsNotNull(UIServiceProvider_Accessor.GetServiceList(button));
                Assert.IsNotNull(UIServiceProvider_Accessor.GetServiceProvider(button));
                var service = UIServiceProvider.GetService(button, typeof(TestServiceBase));
                Assert.IsInstanceOfType(service, typeof(TestServiceA));
                Assert.IsFalse(serviceA.IsDisposed);
            }

            Assert.IsTrue(serviceA.IsDisposed);
        }
コード例 #10
0
        public void CurrentItemTest()
        {
            ObservableCollection <TestData> dataList = new ObservableCollection <TestData>()
            {
                new TestData()
                {
                    StrValue = "A"
                },
                new TestData()
                {
                    StrValue = "B"
                },
                new TestData()
                {
                    StrValue = "C"
                }
            };

            DataGrid dataGrid;
            var      target      = new DataGridCurrentItemService();
            var      serviceList = new UIServiceCollection();

            serviceList.Add(new ServiceFactoryMock(target));
            using (TestWindow.Show(dataList, serviceList, out dataGrid))
            {
                dataGrid.Items.MoveCurrentTo(null);
                var helper   = new PrivateAccessHelper <DataGridCurrentItemService, DataGridCurrentItemService_Accessor>(target);
                var provider = helper.Target;

                Assert.IsNull(provider.CurrentItem);
                Assert.AreEqual(-1, provider.CurrentPosition);

                Assert.IsTrue(provider.MoveCurrentToFirst());
                Assert.AreSame(dataList[0], provider.CurrentItem);
                Assert.AreSame(dataGrid.CurrentItem, provider.CurrentItem);
                Assert.AreEqual(0, provider.CurrentPosition);

                Assert.IsTrue(provider.MoveCurrentToNext());
                Assert.AreSame(dataList[1], provider.CurrentItem);
                Assert.AreSame(dataGrid.CurrentItem, provider.CurrentItem);
                Assert.AreEqual(1, provider.CurrentPosition);

                Assert.IsTrue(provider.MoveCurrentToLast());
                Assert.AreSame(dataList[2], provider.CurrentItem);
                Assert.AreSame(dataGrid.CurrentItem, provider.CurrentItem);
                Assert.AreEqual(2, provider.CurrentPosition);

                Assert.IsFalse(provider.MoveCurrentToNext());
                Assert.IsNull(provider.CurrentItem);
                Assert.AreSame(dataGrid.CurrentItem, provider.CurrentItem);
                Assert.AreEqual(dataGrid.Items.Count, provider.CurrentPosition);

                dataGrid.CurrentItem = dataList[1];
                Assert.AreSame(dataList[1], provider.CurrentItem);
                Assert.AreSame(dataGrid.CurrentItem, provider.CurrentItem);
                Assert.AreEqual(1, provider.CurrentPosition);

                dataGrid.CurrentItem = null;
                Assert.IsNull(provider.CurrentItem);
                Assert.AreSame(dataGrid.CurrentItem, provider.CurrentItem);
                Assert.AreEqual(-1, provider.CurrentPosition);
            }
        }
コード例 #11
0
 public static void SetServiceList(DependencyObject obj, UIServiceCollection value)
 {
     obj.SetValue(ServiceListProperty, value);
 }