예제 #1
0
        public void Observable_EventsIn()
        {
            var npc    = new NotifyPropertyChangedImpl();
            var events = npc.EventsIn <EventArgs>().ToList();

            Assert.True(events.Count == 1);
        }
예제 #2
0
        public void Observable_RemoveEventHandlers()
        {
            var npc = new NotifyPropertyChangedImpl();

            npc.PropertyChanged += (sender, args) => { };
            npc.PropertyChanged += (sender, args) => { };
            Assert.Equal(2, npc.RemoveEventHandlers());
        }
예제 #3
0
        public void NotifyPropertyExtensions_OnPropertyChanged()
        {
            var    npc = new NotifyPropertyChangedImpl();
            string changedPropertyName = null;

            using (npc.OnPropertyChanged().Subscribe(propertyChangedEventArgs => changedPropertyName = propertyChangedEventArgs.PropertyName))
            {
                npc.Name = "Dapplo";
                Assert.Equal(nameof(npc.Name), changedPropertyName);
            }
            // Test if all registrations are gone
            Assert.Equal(0, npc.RemoveEventHandlers());
        }
예제 #4
0
        public void Observable_ForEach()
        {
            string testValue = null;
            var    npc       = new NotifyPropertyChangedImpl();
            var    handler   = npc.OnPropertyChanged().Subscribe(e => testValue = e.PropertyName);

            npc.Name = "Dapplo";
            Assert.Equal(nameof(npc.Name), testValue);
            testValue = null;
            // Test after Unsubscribe
            handler.Dispose();
            npc.Name = "Dapplo2";
            Assert.Null(testValue);
        }
예제 #5
0
        public async Task Observable_ToTask_ExceptionTest()
        {
            var npc = new NotifyPropertyChangedImpl();

            var task = npc.OnPropertyChanged().FirstAsync(e => e.PropertyName.Contains("2")).Select <PropertyChangedEventArgs, bool>(e => throw new Exception("blub")).FirstAsync().ToTask();

            npc.Name = "Dapplo";
            await Task.Delay(100);

            Assert.False(task.IsCanceled || task.IsCompleted || task.IsFaulted);
            npc.Name2 = "Dapplo";
            await Task.Delay(100);

            Assert.True(task.IsFaulted);
        }
예제 #6
0
        public async Task Observable_EnumerableTest()
        {
            var npc = new NotifyPropertyChangedImpl();

            var task = npc.OnPropertyChanged().FirstAsync(e => e.PropertyName.Contains("2")).ToTask();

            npc.Name = "Dapplo";
            await Task.Delay(100);

            Assert.False(task.IsCanceled || task.IsCompleted || task.IsFaulted);
            npc.Name2 = "Dapplo";
            await Task.Delay(100);

            Assert.True(task.IsCompleted);
        }
        public void TestAddOrUpdate_TryRemove()
        {
            var npc = new NotifyPropertyChangedImpl();

            const string testKey = "One";

            var ocd = new ObservableConcurrentDictionary <string, NotifyPropertyChangedImpl>();

            ocd.AddOrUpdate(testKey, npc, (s, impl) => throw new InvalidOperationException());

            // Register without doing, just to make sure we also test the event generation for now
            ocd.CollectionChanged += (sender, args) =>
            {
                Log.Info().WriteLine($"Old location: {args.OldStartingIndex}");
            };

            var isNpcTriggered = false;

            // Subscribe to the PropertyChanged
            using (ocd.OnPropertyChanged().Subscribe(args => isNpcTriggered = true))
            {
                // change a value, a NPC is triggered
                npc.Name = "Robin1";
                // Test trigger
                Assert.True(isNpcTriggered);

                // Reset the trigger test value
                isNpcTriggered = false;

                // Remove the item, this should remove the event registration
                Assert.True(ocd.TryRemove(testKey, out _));

                // change a value, a NPC is triggered
                npc.Name = "Robin2";
                // Make sure we DID NOT get the trigger
                Assert.False(isNpcTriggered);
            }
        }
예제 #8
0
 static TfsWorkItemWrapper()
 {
     NotifyPropertyChangedImpl.AddDependency <TfsWorkItemWrapper>("IsHighlighted", "FontWeight");
 }