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(); }
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(); }
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(); }
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(); }
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(); }
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(); }