public void ShouldClearDynamicPropertiesOnDispose()
        {
            // Arrange
            var obj = new MyObservableObject(false, null);

            obj.SetDynamicValue <object>("ObjectProp", new ObservableObjectBase());
            Assert.That(obj.GetDynamicValue <object>("ObjectProp"), Is.Not.Null);

            // Act
            obj.Dispose();

            // Assert
            Assert.That(obj.GetDynamicValue <object>("ObjectProp"), Is.Null);
        }
        public void WhenDisposingParentShouldDispose()
        {
            // Arrange
            var container  = new UnityContainer();
            var parent     = new MyObservableObject();
            var collection = new ViewModelTraitCollection(parent, container);

            // Act
            var b0 = collection.Add <MyViewModelTrait>();

            parent.Dispose();

            // Assert
            Assert.That(b0.IsDisposed, Is.True);
        }
        public void ShouldDisposeWith()
        {
            // Arrange
            string somethingReceived = null;
            var    vm = new MyObservableObject(false, null);

            vm.WhenPropertyChanged(x => x.Something).Subscribe(arg => somethingReceived = arg).DisposeWith(vm);

            // Act
            vm.Something = "Hello";
            vm.Dispose();
            vm.Something = "World";

            // Assert
            Assert.That(vm.IsChecked, Is.False);
            Assert.That(somethingReceived, Is.EqualTo("Hello"));
        }