Skip to content

Commit 9f27ccb

Browse files
Updated InvalidHandleEventException Logic
1 parent 3de211a commit 9f27ccb

File tree

4 files changed

+41
-6
lines changed

4 files changed

+41
-6
lines changed

Src/AsyncAwaitBestPractices.UnitTests/WeakEventManager/Tests_WeakEventManager_EventHandler.cs

Lines changed: 18 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -116,7 +116,7 @@ void HandleTestEvent(object? sender, EventArgs e)
116116
}
117117

118118
[Test]
119-
public void WeakEventManager_HandleEvent_InvalidHandleEvent()
119+
public void WeakEventManager_HandleEvent_InvalidHandleEventName()
120120
{
121121
//Arrange
122122
TestEvent += HandleTestEvent;
@@ -270,5 +270,22 @@ public void WeakEventManager_RemoveventHandler_WhiteSpaceEventName()
270270
Assert.Throws<ArgumentNullException>(() => TestWeakEventManager.RemoveEventHandler(null, " "), "Value cannot be null.\nParameter name: eventName");
271271
#pragma warning enable CS8625
272272
}
273+
274+
[Test]
275+
public void WeakEventManager_HandleEvent_InvalidHandleEvent()
276+
{
277+
//Arrange
278+
TestEvent += HandleTestEvent;
279+
bool didEventFire = false;
280+
281+
void HandleTestEvent(object sender, EventArgs e) => didEventFire = true;
282+
283+
//Act
284+
285+
//Assert
286+
Assert.Throws<InvalidHandleEventException>(() => TestWeakEventManager.HandleEvent(nameof(TestEvent)));
287+
Assert.IsFalse(didEventFire);
288+
TestEvent -= HandleTestEvent;
289+
}
273290
}
274291
}

Src/AsyncAwaitBestPractices.UnitTests/WeakEventManager/Tests_WeakEventManager_EventHandlerT.cs

Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -259,5 +259,22 @@ public void WeakEventManagerT_RemoveventHandler_WhiteSpaceEventName()
259259
//Assert
260260
Assert.Throws<ArgumentNullException>(() => TestStringWeakEventManager.AddEventHandler(s => { var temp = s; }, string.Empty), "Value cannot be null.\nParameter name: eventName");
261261
}
262+
263+
[Test]
264+
public void WeakEventManagerT_HandleEvent_InvalidHandleEvent()
265+
{
266+
//Arrange
267+
TestStringEvent += HandleTestStringEvent;
268+
bool didEventFire = false;
269+
270+
void HandleTestStringEvent(object sender, string e) => didEventFire = true;
271+
272+
//Act
273+
274+
//Assert
275+
Assert.Throws<InvalidHandleEventException>(() => TestStringWeakEventManager.HandleEvent("", nameof(TestStringEvent)));
276+
Assert.IsFalse(didEventFire);
277+
TestStringEvent -= HandleTestStringEvent;
278+
}
262279
}
263280
}

Src/AsyncAwaitBestPractices/WeakEventManager/EventManagerService.cs

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -53,13 +53,14 @@ internal static void HandleEvent(in string eventName, in object? sender, in obje
5353
Tuple<object?, MethodInfo> tuple = toRaise[i];
5454
tuple.Item2.Invoke(tuple.Item1, new[] { sender, eventArgs });
5555
}
56-
catch (TargetParameterCountException e) when (e.Message.Contains("Parameter count mismatch"))
56+
catch (TargetParameterCountException e)
5757
{
5858
throw new InvalidHandleEventException("Parameter count mismatch. If invoking an `event Action` use `HandleEvent(string eventName)` or if invoking an `event Action<T>` use `HandleEvent(object eventArgs, string eventName)`instead.", e);
5959
}
6060
}
6161
}
6262

63+
//From ViewModel
6364
internal static void HandleEvent(in string eventName, in object? actionEventArgs, in Dictionary<string, List<Subscription>> eventHandlers)
6465
{
6566
AddRemoveEvents(eventName, eventHandlers, out var toRaise);
@@ -71,7 +72,7 @@ internal static void HandleEvent(in string eventName, in object? actionEventArgs
7172
var tuple = toRaise[i];
7273
tuple.Item2.Invoke(tuple.Item1, new[] { actionEventArgs });
7374
}
74-
catch (TargetParameterCountException e) when (e.Message.Contains("Parameter count mismatch"))
75+
catch (TargetParameterCountException e)
7576
{
7677
throw new InvalidHandleEventException("Parameter count mismatch. If invoking an `event EventHandler` use `HandleEvent(object sender, TEventArgs eventArgs, string eventName)` or if invoking an `event Action` use `HandleEvent(string eventName)`instead.", e);
7778
}
@@ -89,7 +90,7 @@ internal static void HandleEvent(in string eventName, in Dictionary<string, List
8990
var tuple = toRaise[i];
9091
tuple.Item2.Invoke(tuple.Item1, null);
9192
}
92-
catch (TargetParameterCountException e) when (e.Message.Contains("Parameter count mismatch"))
93+
catch (TargetParameterCountException e)
9394
{
9495
throw new InvalidHandleEventException("Parameter count mismatch. If invoking an `event EventHandler` use `HandleEvent(object sender, TEventArgs eventArgs, string eventName)` or if invoking an `event Action<T>` use `HandleEvent(object eventArgs, string eventName)`instead.", e);
9596
}

Src/HackerNews/ViewModels/NewsViewModel_GoodAsyncAwaitPractices.cs

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -44,7 +44,7 @@ public bool IsListRefreshing
4444
get => _isListRefreshing;
4545
set => SetProperty(ref _isListRefreshing, value);
4646
}
47-
47+
4848
async Task ExecuteRefreshCommand()
4949
{
5050
IsListRefreshing = true;
@@ -87,7 +87,7 @@ async Task<List<string>> GetTopStoryIDs()
8787
catch (Exception e)
8888
{
8989
OnErrorOccurred(e.Message);
90-
return new List<string>();
90+
return Enumerable.Empty<string>().ToList();
9191
}
9292
}
9393

0 commit comments

Comments
 (0)