public void Observable_EventsIn() { var npc = new NotifyPropertyChangedImpl(); var events = npc.EventsIn <EventArgs>().ToList(); Assert.True(events.Count == 1); }
public void Observable_RemoveEventHandlers() { var npc = new NotifyPropertyChangedImpl(); npc.PropertyChanged += (sender, args) => { }; npc.PropertyChanged += (sender, args) => { }; Assert.Equal(2, npc.RemoveEventHandlers()); }
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()); }
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); }
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); }
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); } }
static TfsWorkItemWrapper() { NotifyPropertyChangedImpl.AddDependency <TfsWorkItemWrapper>("IsHighlighted", "FontWeight"); }