public async Task ActiveViewInHierarchy()
        {
            var controller = new TestController();
            await controller.Initialize(null, null);

            var view = await controller.GetDocumentView();

            Assert.AreEqual(view, view.ActiveViewInHierarchy);

            var attached1 = new DocumentViewContent(c => Task.FromResult <Control> (null));
            var attached2 = new DocumentViewContent(c => Task.FromResult <Control> (null));

            view.AttachedViews.Add(attached1);
            view.AttachedViews.Add(attached2);

            Assert.AreEqual(view, view.ActiveViewInHierarchy);

            attached1.SetActive();
            Assert.AreEqual(attached1, view.ActiveViewInHierarchy);
            Assert.AreEqual(attached1, attached1.ActiveViewInHierarchy);
            Assert.AreEqual(attached2, attached2.ActiveViewInHierarchy);

            attached2.SetActive();
            Assert.AreEqual(attached2, view.ActiveViewInHierarchy);
            Assert.AreEqual(attached1, attached1.ActiveViewInHierarchy);
            Assert.AreEqual(attached2, attached2.ActiveViewInHierarchy);
        }
        protected override Task <DocumentView> OnInitializeView()
        {
            View1.ContentVisibleChanged += (s, a) => View1_VisibleChangeEvents++;
            View2.ContentVisibleChanged += (s, a) => View2_VisibleChangeEvents++;
            View3.ContentVisibleChanged += (s, a) => View3_VisibleChangeEvents++;

            Container.SupportedModes = DocumentViewContainerMode.Tabs | DocumentViewContainerMode.HorizontalSplit | DocumentViewContainerMode.VerticalSplit;
            Container.CurrentMode    = Mode;
            Container.Views.Add(View1);
            Container.Views.Add(View2);
            Container.Views.Add(View3);
            View2.SetActive();
            return(Task.FromResult <DocumentView> (Container));
        }
        public void ActiveViewInHierarchy2()
        {
            var root = new DocumentViewContainer()
            {
                Title = "root"
            };

            root.IsRoot = true;
            Assert.IsNull(root.ActiveViewInHierarchy);
            Assert.IsNull(root.ActiveView);

            var attached1 = new DocumentViewContent(c => Task.FromResult <Control> (null))
            {
                Title = "attached1"
            };

            root.AttachedViews.Add(attached1);
            Assert.IsNull(root.ActiveView);
            Assert.IsNull(root.ActiveViewInHierarchy);

            var view1 = new DocumentViewContent(c => Task.FromResult <Control> (null))
            {
                Title = "view1"
            };

            root.Views.Add(view1);
            Assert.AreEqual(view1, root.ActiveView);
            Assert.AreEqual(view1, root.ActiveViewInHierarchy);
            Assert.AreEqual(view1, view1.ActiveViewInHierarchy);

            attached1.SetActive();
            Assert.AreEqual(view1, root.ActiveView);
            Assert.AreEqual(attached1, root.ActiveViewInHierarchy);

            root.SetActive();
            Assert.AreEqual(view1, root.ActiveView);
            Assert.AreEqual(view1, root.ActiveViewInHierarchy);

            var view2 = new DocumentViewContent(c => Task.FromResult <Control> (null))
            {
                Title = "view2"
            };

            root.Views.Add(view2);
            Assert.AreEqual(view1, root.ActiveView);
            Assert.AreEqual(view1, root.ActiveViewInHierarchy);
            Assert.AreEqual(view2, view2.ActiveViewInHierarchy);

            var container = new DocumentViewContainer();

            root.Views.Add(container);
            Assert.AreEqual(view1, root.ActiveView);
            Assert.AreEqual(view1, root.ActiveViewInHierarchy);
            Assert.IsNull(container.ActiveViewInHierarchy);

            var subView1 = new DocumentViewContent(c => Task.FromResult <Control> (null))
            {
                Title = "subView1"
            };

            container.Views.Add(subView1);
            Assert.AreEqual(view1, root.ActiveView);
            Assert.AreEqual(view1, root.ActiveViewInHierarchy);
            Assert.AreEqual(subView1, container.ActiveView);
            Assert.AreEqual(subView1, container.ActiveViewInHierarchy);
            Assert.AreEqual(subView1, subView1.ActiveViewInHierarchy);

            var subView2 = new DocumentViewContent(c => Task.FromResult <Control> (null))
            {
                Title = "subView2"
            };

            container.Views.Add(subView2);
            Assert.AreEqual(view1, root.ActiveView);
            Assert.AreEqual(view1, root.ActiveViewInHierarchy);
            Assert.AreEqual(subView1, container.ActiveView);
            Assert.AreEqual(subView1, container.ActiveViewInHierarchy);
            Assert.AreEqual(subView2, subView2.ActiveViewInHierarchy);

            container.SetActive();
            Assert.AreEqual(container, root.ActiveView);
            Assert.AreEqual(subView1, root.ActiveViewInHierarchy);
            Assert.AreEqual(subView1, container.ActiveViewInHierarchy);

            subView2.SetActive();
            Assert.AreEqual(subView2, root.ActiveViewInHierarchy);
            Assert.AreEqual(subView2, container.ActiveViewInHierarchy);

            view2.SetActive();
            Assert.AreEqual(view2, root.ActiveViewInHierarchy);
            Assert.AreEqual(subView2, container.ActiveViewInHierarchy);

            subView1.SetActive();
            Assert.AreEqual(view2, root.ActiveViewInHierarchy);
            Assert.AreEqual(subView1, container.ActiveViewInHierarchy);

            container.SetActive();
            Assert.AreEqual(subView1, root.ActiveViewInHierarchy);
            Assert.AreEqual(subView1, container.ActiveViewInHierarchy);
        }