public async Task SplitContainerCollectionOperations(DocumentViewContainerMode mode)
        {
            var controller = new ContentVisibleEventWithContainerTestController();

            controller.Mode = mode;

            await controller.Initialize(new ModelDescriptor());

            var doc = await documentManager.OpenDocument(controller);

            var view = await controller.GetDocumentView();

            Assert.IsTrue(controller.View1.ContentVisible);
            Assert.IsTrue(controller.View2.ContentVisible);
            Assert.IsTrue(controller.View3.ContentVisible);

            var newView = new DocumentViewContent(() => new DummyControl());

            Assert.IsFalse(newView.ContentVisible);

            controller.Container.Views [1] = newView;
            Assert.IsTrue(newView.ContentVisible);
            Assert.IsFalse(controller.View2.ContentVisible);

            controller.Container.Views.RemoveAt(1);
            Assert.IsFalse(newView.ContentVisible);
            Assert.IsTrue(controller.View1.ContentVisible);
            Assert.IsTrue(controller.View3.ContentVisible);

            controller.Container.Views.Clear();
            Assert.IsFalse(controller.View1.ContentVisible);
            Assert.IsFalse(controller.View3.ContentVisible);
        }
        public async Task SwitchModeInternally()
        {
            // Same as SwitchMode, but the switch is done in the UI, not through the API

            var controller = new ContentVisibleEventWithContainerTestController();

            controller.Mode = DocumentViewContainerMode.Tabs;

            await controller.Initialize(new ModelDescriptor());

            var doc = await documentManager.OpenDocument(controller);

            var window     = doc.GetWindow();
            var containter = (MockShellDocumentViewContainer)window.RootView;

            Assert.IsFalse(controller.View1.ContentVisible);
            Assert.IsTrue(controller.View2.ContentVisible);
            Assert.IsFalse(controller.View3.ContentVisible);

            Assert.AreEqual(0, controller.View1_VisibleChangeEvents);
            Assert.AreEqual(1, controller.View2_VisibleChangeEvents);
            Assert.AreEqual(0, controller.View3_VisibleChangeEvents);

            containter.CurrentMode = DocumentViewContainerMode.HorizontalSplit;

            Assert.IsTrue(controller.View1.ContentVisible);
            Assert.IsTrue(controller.View2.ContentVisible);
            Assert.IsTrue(controller.View3.ContentVisible);

            Assert.AreEqual(1, controller.View1_VisibleChangeEvents);
            Assert.AreEqual(1, controller.View2_VisibleChangeEvents);
            Assert.AreEqual(1, controller.View3_VisibleChangeEvents);

            containter.CurrentMode = DocumentViewContainerMode.VerticalSplit;

            Assert.IsTrue(controller.View1.ContentVisible);
            Assert.IsTrue(controller.View2.ContentVisible);
            Assert.IsTrue(controller.View3.ContentVisible);

            Assert.AreEqual(1, controller.View1_VisibleChangeEvents);
            Assert.AreEqual(1, controller.View2_VisibleChangeEvents);
            Assert.AreEqual(1, controller.View3_VisibleChangeEvents);

            containter.CurrentMode = DocumentViewContainerMode.Tabs;

            Assert.IsFalse(controller.View1.ContentVisible);
            Assert.IsTrue(controller.View2.ContentVisible);
            Assert.IsFalse(controller.View3.ContentVisible);

            Assert.AreEqual(2, controller.View1_VisibleChangeEvents);
            Assert.AreEqual(1, controller.View2_VisibleChangeEvents);
            Assert.AreEqual(2, controller.View3_VisibleChangeEvents);

            await doc.Close(true);
        }
        public async Task SwitchMode()
        {
            var controller = new ContentVisibleEventWithContainerTestController();

            controller.Mode = DocumentViewContainerMode.Tabs;

            await controller.Initialize(new ModelDescriptor());

            var doc = await documentManager.OpenDocument(controller);

            var view = await controller.GetDocumentView();

            Assert.IsFalse(controller.View1.ContentVisible);
            Assert.IsTrue(controller.View2.ContentVisible);
            Assert.IsFalse(controller.View3.ContentVisible);

            Assert.AreEqual(0, controller.View1_VisibleChangeEvents);
            Assert.AreEqual(1, controller.View2_VisibleChangeEvents);
            Assert.AreEqual(0, controller.View3_VisibleChangeEvents);

            controller.Container.CurrentMode = DocumentViewContainerMode.HorizontalSplit;

            Assert.IsTrue(controller.View1.ContentVisible);
            Assert.IsTrue(controller.View2.ContentVisible);
            Assert.IsTrue(controller.View3.ContentVisible);

            Assert.AreEqual(1, controller.View1_VisibleChangeEvents);
            Assert.AreEqual(1, controller.View2_VisibleChangeEvents);
            Assert.AreEqual(1, controller.View3_VisibleChangeEvents);

            controller.Container.CurrentMode = DocumentViewContainerMode.VerticalSplit;

            Assert.IsTrue(controller.View1.ContentVisible);
            Assert.IsTrue(controller.View2.ContentVisible);
            Assert.IsTrue(controller.View3.ContentVisible);

            Assert.AreEqual(1, controller.View1_VisibleChangeEvents);
            Assert.AreEqual(1, controller.View2_VisibleChangeEvents);
            Assert.AreEqual(1, controller.View3_VisibleChangeEvents);

            controller.Container.CurrentMode = DocumentViewContainerMode.Tabs;

            Assert.IsFalse(controller.View1.ContentVisible);
            Assert.IsTrue(controller.View2.ContentVisible);
            Assert.IsFalse(controller.View3.ContentVisible);

            Assert.AreEqual(2, controller.View1_VisibleChangeEvents);
            Assert.AreEqual(1, controller.View2_VisibleChangeEvents);
            Assert.AreEqual(2, controller.View3_VisibleChangeEvents);

            await doc.Close(true);
        }
        public async Task WithTabs()
        {
            var controller = new ContentVisibleEventWithContainerTestController();

            controller.Mode = DocumentViewContainerMode.Tabs;

            await controller.Initialize(new ModelDescriptor());

            var doc = await documentManager.OpenDocument(controller);

            var view = await controller.GetDocumentView();

            Assert.IsFalse(controller.View1.ContentVisible);
            Assert.IsTrue(controller.View2.ContentVisible);
            Assert.IsFalse(controller.View3.ContentVisible);

            Assert.AreEqual(0, controller.View1_VisibleChangeEvents);
            Assert.AreEqual(1, controller.View2_VisibleChangeEvents);
            Assert.AreEqual(0, controller.View3_VisibleChangeEvents);

            controller.View3.SetActive();

            Assert.IsFalse(controller.View1.ContentVisible);
            Assert.IsFalse(controller.View2.ContentVisible);
            Assert.IsTrue(controller.View3.ContentVisible);

            Assert.AreEqual(0, controller.View1_VisibleChangeEvents);
            Assert.AreEqual(2, controller.View2_VisibleChangeEvents);
            Assert.AreEqual(1, controller.View3_VisibleChangeEvents);

            controller.View1.SetActive();

            Assert.IsTrue(controller.View1.ContentVisible);
            Assert.IsFalse(controller.View2.ContentVisible);
            Assert.IsFalse(controller.View3.ContentVisible);

            Assert.AreEqual(1, controller.View1_VisibleChangeEvents);
            Assert.AreEqual(2, controller.View2_VisibleChangeEvents);
            Assert.AreEqual(2, controller.View3_VisibleChangeEvents);

            var extraView = new DocumentViewContent(() => new DummyControl());

            controller.Container.Views.Add(extraView);
            Assert.IsFalse(extraView.ContentVisible);

            var doc2 = await documentManager.OpenDocument(new ContentVisibleEventWithContainerTestController());

            doc2.Select();

            Assert.IsFalse(controller.View1.ContentVisible);
            Assert.IsFalse(controller.View2.ContentVisible);
            Assert.IsFalse(controller.View3.ContentVisible);

            Assert.AreEqual(2, controller.View1_VisibleChangeEvents);
            Assert.AreEqual(2, controller.View2_VisibleChangeEvents);
            Assert.AreEqual(2, controller.View3_VisibleChangeEvents);

            await doc.Close(true);

            await doc2.Close(true);
        }