public void It_Doesnt_Attach_Children_With_Same_Name_From_ViewModel()
        {
            var parentViewModel = new ViewModelBase();
            var childViewModel1 = new ViewModelBase("Child1");
            var childViewModel2 = new ViewModelBase("Child1");

            parentViewModel.AttachChild(childViewModel1);

            Assert.Throws <InvalidOperationException>(() => parentViewModel.AttachChild(childViewModel2));
        }
        public void It_Attaches_Multiple_Children_With_Name_From_ViewModel()
        {
            var parentViewModel = new ViewModelBase();
            var childViewModel1 = new ViewModelBase("Child1");
            var childViewModel2 = new ViewModelBase("Child2");

            parentViewModel.AttachChild(childViewModel1);
            parentViewModel.AttachChild(childViewModel2);

            parentViewModel.GetChildren().Should().Contain(childViewModel1);
            parentViewModel.GetChildren().Should().Contain(childViewModel2);
        }
        public void It_Attaches_Child()
        {
            var parentViewModel = new ViewModelBase();
            var childViewModel  = new ViewModelBase();

            parentViewModel.AttachChild(childViewModel);

            parentViewModel.GetChildren().Should().Contain(childViewModel);
        }
        public void It_Gets_Child_On_Attach()
        {
            var parentViewModel = new ViewModelBase();
            var childViewModel  = new TestViewModel();

            var attachedViewModel = parentViewModel.AttachChild(childViewModel);

            attachedViewModel.Should().Be(childViewModel);
            attachedViewModel.Should().BeOfType(typeof(TestViewModel));
        }
        public void It_Shares_View_When_Set_After_Attached()
        {
            var parentViewModel = new ViewModelBase();
            var childViewModel  = new TestViewModel();

            parentViewModel.AttachChild(childViewModel);

            parentViewModel.View = new TestViewModelView();

            childViewModel.View.Should().Be(parentViewModel.View);
        }
        public void It_Disposes_Child_When_Attached()
        {
            var isChildDisposed = false;
            var parentViewModel = new ViewModelBase();
            var childViewModel  = new TestViewModel(onDispose: () => isChildDisposed = true);

            parentViewModel.AttachChild(childViewModel);

            parentViewModel.Dispose();

            isChildDisposed.Should().BeTrue();
        }