Beispiel #1
0
        public void CloseAllViews_Always_RemoveViews()
        {
            // Setup
            var data1 = new A();
            var data2 = new InheritedFromA();

            var mocks         = new MockRepository();
            var dialogParent  = mocks.Stub <IWin32Window>();
            var viewHost      = mocks.StrictMock <IViewHost>();
            var documentViews = new List <IView>();

            viewHost.Stub(vh => vh.ViewClosed += null).IgnoreArguments();
            viewHost.Stub(vh => vh.ViewClosed -= null).IgnoreArguments();
            viewHost.Stub(vh => vh.DocumentViews).Return(documentViews);
            viewHost.Expect(vm => vm.AddDocumentView(Arg <TestView> .Is.NotNull,
                                                     Arg <string> .Is.Anything,
                                                     Arg <string> .Is.Null,
                                                     Arg <FontFamily> .Is.Null))
            .WhenCalled(invocation =>
            {
                documentViews.Add(invocation.Arguments[0] as TestView);
            })
            .Repeat.Twice();
            viewHost.Expect(vh => vh.Remove(Arg <TestView> .Is.NotNull))
            .WhenCalled(invocation =>
            {
                documentViews.Remove(invocation.Arguments[0] as TestView);
            })
            .Repeat.Twice();

            mocks.ReplayAll();

            var viewInfos = new ViewInfo[]
            {
                new ViewInfo <A, TestView>(),
                new ViewInfo <InheritedFromA, TestViewDerivative>()
            };

            using (var documentViewController = new DocumentViewController(viewHost, viewInfos, dialogParent))
            {
                documentViewController.OpenViewForData(data1);
                documentViewController.OpenViewForData(data2);

                // Call
                documentViewController.CloseAllViews();
            }

            // Assert
            CollectionAssert.IsEmpty(documentViews);
            mocks.VerifyAll();
        }
Beispiel #2
0
        public void CloseAllViewsFor_DataIsNull_DoNothing()
        {
            // Setup
            var data1    = new A();
            var data2    = new InheritedFromA();
            var testView = new TestView
            {
                Data = data1
            };
            var testViewDerivative = new TestViewDerivative
            {
                Data = data2
            };

            var mocks        = new MockRepository();
            var dialogParent = mocks.Stub <IWin32Window>();
            var viewHost     = mocks.StrictMock <IViewHost>();

            viewHost.Stub(vh => vh.ViewClosed += null).IgnoreArguments();
            viewHost.Stub(vh => vh.ViewClosed -= null).IgnoreArguments();
            viewHost.Stub(vh => vh.DocumentViews).Return(new[]
            {
                testView,
                testViewDerivative
            });

            mocks.ReplayAll();

            var viewInfos = new ViewInfo[]
            {
                new ViewInfo <A, TestView>(),
                new ViewInfo <InheritedFromA, TestViewDerivative>()
            };

            using (var documentViewController = new DocumentViewController(viewHost, viewInfos, dialogParent))
            {
                // Call
                documentViewController.CloseAllViewsFor(null);
            }

            // Assert
            mocks.VerifyAll();
        }
Beispiel #3
0
        public void GetViewInfosFor_ViewInfosWithAdditionalDataCheck_ReturnMatchesWithAdditionalDataCheckTrue()
        {
            // Setup
            var mocks        = new MockRepository();
            var dialogParent = mocks.Stub <IWin32Window>();
            var viewHost     = mocks.StrictMock <IViewHost>();

            viewHost.Stub(vh => vh.ViewClosed += null).IgnoreArguments();
            viewHost.Stub(vh => vh.ViewClosed -= null).IgnoreArguments();

            mocks.ReplayAll();

            var viewInfos = new ViewInfo[]
            {
                new ViewInfo <A, TestView>
                {
                    AdditionalDataCheck = a => true
                },
                new ViewInfo <InheritedFromA, TestView>(),
                new ViewInfo <object, TestView>
                {
                    AdditionalDataCheck = o => false
                }
            };

            using (var documentViewController = new DocumentViewController(viewHost, viewInfos, dialogParent))
            {
                var data = new InheritedFromA();

                // Call
                ViewInfo[] matchedViewInfos = documentViewController.GetViewInfosFor(data).ToArray();

                // Assert
                ViewInfo[] expected =
                {
                    viewInfos[0],
                    viewInfos[1]
                };
                CollectionAssert.AreEqual(expected, matchedViewInfos);
            }

            mocks.VerifyAll();
        }
Beispiel #4
0
        public void OpenViewForData_DataHasMultipleMatchesOnType_ResolveToMostSpecializedAndReturnTrueAndAddToViewHost()
        {
            // Setup
            TestViewDerivative view = null;
            var mocks        = new MockRepository();
            var dialogParent = mocks.Stub <IWin32Window>();
            var viewHost     = mocks.StrictMock <IViewHost>();

            viewHost.Stub(vh => vh.ViewClosed += null).IgnoreArguments();
            viewHost.Stub(vh => vh.ViewClosed -= null).IgnoreArguments();
            viewHost.Stub(vh => vh.DocumentViews).Return(new IView[0]);
            viewHost.Expect(vm => vm.AddDocumentView(Arg <TestViewDerivative> .Is.NotNull,
                                                     Arg <string> .Is.Anything,
                                                     Arg <string> .Is.Null,
                                                     Arg <FontFamily> .Is.Null))
            .WhenCalled(invocation =>
            {
                view = invocation.Arguments[0] as TestViewDerivative;
            });

            mocks.ReplayAll();

            var data = new InheritedFromA();

            var viewInfos = new ViewInfo[]
            {
                new ViewInfo <InheritedFromA, TestViewDerivative>(),
                new ViewInfo <A, TestView>()
            };

            using (var documentViewController = new DocumentViewController(viewHost, viewInfos, dialogParent))
            {
                // Call
                bool result = documentViewController.OpenViewForData(data);

                // Assert
                Assert.IsTrue(result);
                Assert.AreEqual(data, view.Data);
                Assert.IsEmpty(view.Text);
            }

            mocks.VerifyAll();
        }
Beispiel #5
0
        public void OpenViewForData_DataHasSingleMatchOnBaseType_ReturnTrueAndAddToViewHost()
        {
            // Setup
            TestView view         = null;
            var      mocks        = new MockRepository();
            var      dialogParent = mocks.Stub <IWin32Window>();
            var      viewHost     = mocks.StrictMock <IViewHost>();

            const string viewName = "<cool view name>";

            viewHost.Stub(vh => vh.ViewClosed += null).IgnoreArguments();
            viewHost.Stub(vh => vh.ViewClosed -= null).IgnoreArguments();
            viewHost.Stub(vh => vh.DocumentViews).Return(new IView[0]);
            viewHost.Expect(vm => vm.AddDocumentView(Arg <TestView> .Is.NotNull,
                                                     Arg <string> .Is.Equal(viewName),
                                                     Arg <string> .Is.Null,
                                                     Arg <FontFamily> .Is.Null))
            .WhenCalled(invocation =>
            {
                view = invocation.Arguments[0] as TestView;
            });

            mocks.ReplayAll();

            var data = new InheritedFromA();
            var afterCreateCalled = false;

            var viewInfos = new ViewInfo[]
            {
                new ViewInfo <DocumentViewControllerTest, TestView>(),
                new ViewInfo <A, TestView>
                {
                    AfterCreate = (v, o) =>
                    {
                        Assert.IsInstanceOf <TestView>(v);
                        Assert.AreSame(data, o);
                        afterCreateCalled = true;
                    },
                    GetViewName = (v, o) =>
                    {
                        Assert.IsInstanceOf <TestView>(v);
                        Assert.AreSame(data, o);
                        return(viewName);
                    }
                },
                new ViewInfo <int, TestView>()
            };

            using (var documentViewController = new DocumentViewController(viewHost, viewInfos, dialogParent))
            {
                // Call
                bool result = documentViewController.OpenViewForData(data);

                // Assert
                Assert.IsTrue(result);
                Assert.AreEqual(data, view.Data);
                Assert.IsTrue(afterCreateCalled);
            }

            mocks.VerifyAll();
        }
Beispiel #6
0
        public void CloseAllViewsFor_DataDoesNotCorrespondToOpenedViewsButCloseForDataReturnsTrue_RemoveViews()
        {
            // Setup
            var data1          = new A();
            var data2          = new InheritedFromA();
            var unusedViewData = new object();

            var mocks         = new MockRepository();
            var dialogParent  = mocks.Stub <IWin32Window>();
            var viewHost      = mocks.StrictMock <IViewHost>();
            var documentViews = new List <IView>();

            viewHost.Stub(vh => vh.ViewClosed += null).IgnoreArguments();
            viewHost.Stub(vh => vh.ViewClosed -= null).IgnoreArguments();
            viewHost.Stub(vh => vh.DocumentViews).Return(documentViews);
            viewHost.Expect(vm => vm.AddDocumentView(Arg <TestView> .Is.NotNull,
                                                     Arg <string> .Is.Anything,
                                                     Arg <string> .Is.Null,
                                                     Arg <FontFamily> .Is.Null))
            .WhenCalled(invocation =>
            {
                documentViews.Add(invocation.Arguments[0] as TestView);
            })
            .Repeat.Twice();
            viewHost.Expect(vh => vh.Remove(Arg <TestView> .Is.NotNull))
            .WhenCalled(invocation =>
            {
                documentViews.Remove(invocation.Arguments[0] as TestView);
            })
            .Repeat.Twice();
            mocks.ReplayAll();

            var viewInfos = new ViewInfo[]
            {
                new ViewInfo <A, TestView>
                {
                    CloseForData = (view, o) =>
                    {
                        Assert.IsInstanceOf <TestView>(view);
                        Assert.AreSame(data1, view.Data);
                        Assert.AreSame(unusedViewData, o);
                        return(true);
                    }
                },
                new ViewInfo <InheritedFromA, TestViewDerivative>
                {
                    CloseForData = (view, o) =>
                    {
                        Assert.IsInstanceOf <TestView>(view);
                        Assert.AreSame(data2, view.Data);
                        Assert.AreSame(unusedViewData, o);
                        return(true);
                    }
                }
            };

            using (var documentViewController = new DocumentViewController(viewHost, viewInfos, dialogParent))
            {
                documentViewController.OpenViewForData(data1);
                documentViewController.OpenViewForData(data2);

                // Call
                documentViewController.CloseAllViewsFor(unusedViewData);
            }

            // Assert
            mocks.VerifyAll();
        }