Skip to content

Commit 4fd33d1

Browse files
committed
Migrate tests to xUnit v3 and add cancellation tokens
1 parent b6952cd commit 4fd33d1

11 files changed

Lines changed: 96 additions & 114 deletions

Directory.Packages.props

Lines changed: 14 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -9,16 +9,26 @@
99
<PackageVersion Include="bunit" Version="2.6.2" />
1010
<PackageVersion Include="coverlet.collector" Version="8.0.1" />
1111
<PackageVersion Include="Microsoft.AspNetCore.Components.Web" Version="10.0.5" />
12-
<PackageVersion Include="Microsoft.AspNetCore.Components.WebAssembly.DevServer" Version="10.0.5" />
1312
<PackageVersion Include="Microsoft.AspNetCore.Components.WebAssembly" Version="10.0.5" />
13+
<PackageVersion Include="Microsoft.AspNetCore.Components.WebAssembly.DevServer" Version="10.0.5" />
1414
<PackageVersion Include="Microsoft.Extensions.Http" Version="10.0.5" />
1515
<PackageVersion Include="Microsoft.NET.Test.Sdk" Version="18.3.0" />
1616
<PackageVersion Include="MinVer" Version="7.0.0" />
1717
<PackageVersion Include="PublicApiGenerator" Version="11.5.4" />
1818
<PackageVersion Include="System.Linq.Dynamic.Core" Version="1.7.1" />
1919
<PackageVersion Include="System.Net.Http.Json" Version="10.0.0" />
20-
<PackageVersion Include="Verify.Xunit" Version="31.12.5" />
20+
<PackageVersion Include="Verify.XunitV3" Version="31.13.5" />
2121
<PackageVersion Include="xunit.runner.visualstudio" Version="3.1.5" />
22-
<PackageVersion Include="xunit" Version="2.9.3" />
22+
<PackageVersion Include="xunit.v3" Version="3.2.2" />
23+
</ItemGroup>
24+
25+
<!-- TFM-specific overrides -->
26+
<ItemGroup Condition="'$(TargetFramework)' == 'net9.0'">
27+
<PackageVersion Update="Microsoft.AspNetCore.Components.Web" Version="9.0.14" />
28+
</ItemGroup>
29+
30+
<ItemGroup Condition="'$(TargetFramework)' == 'net8.0'">
31+
<PackageVersion Update="Microsoft.AspNetCore.Components.Web" Version="8.0.25" />
2332
</ItemGroup>
24-
</Project>
33+
34+
</Project>

src/LoreSoft.Blazor.Controls/LoreSoft.Blazor.Controls.csproj

Lines changed: 0 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -9,29 +9,11 @@
99
<EmitCompilerGeneratedFiles>true</EmitCompilerGeneratedFiles>
1010
</PropertyGroup>
1111

12-
<ItemGroup>
13-
<Compile Remove="Binding\**" />
14-
<Content Remove="Binding\**" />
15-
<EmbeddedResource Remove="Binding\**" />
16-
<None Remove="Binding\**" />
17-
</ItemGroup>
18-
1912
<ItemGroup>
2013
<PackageReference Include="System.Linq.Dynamic.Core" />
21-
</ItemGroup>
22-
23-
<ItemGroup Condition="'$(TargetFramework)' == 'net10.0'">
2414
<PackageReference Include="Microsoft.AspNetCore.Components.Web" />
2515
</ItemGroup>
2616

27-
<ItemGroup Condition="'$(TargetFramework)' == 'net9.0'">
28-
<PackageReference Include="Microsoft.AspNetCore.Components.Web" VersionOverride="9.0.14" />
29-
</ItemGroup>
30-
31-
<ItemGroup Condition="'$(TargetFramework)' == 'net8.0'">
32-
<PackageReference Include="Microsoft.AspNetCore.Components.Web" VersionOverride="8.0.25" />
33-
</ItemGroup>
34-
3517
<ItemGroup>
3618
<SupportedPlatform Include="browser" />
3719
</ItemGroup>

test/LoreSoft.Blazor.Controls.Tests/Data/DataGridStateTests.cs

Lines changed: 3 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,5 @@
11
using System.Text.Json;
22

3-
using LoreSoft.Blazor.Controls;
4-
5-
using Xunit;
6-
73
namespace LoreSoft.Blazor.Controls.Tests.Data;
84

95
public class DataGridStateTests
@@ -85,11 +81,11 @@ public void DataGridState_WithColumns_RoundTrips()
8581
Assert.NotNull(result.Columns);
8682
Assert.Equal(2, result.Columns.Count);
8783
Assert.Equal("Name", result.Columns[0].PropertyName);
88-
Assert.Equal(0, result.Columns[0].SortIndex);
84+
Assert.Equal(0, result.Columns[0].SortIndex);
8985
Assert.False(result.Columns[0].SortDescending);
9086
Assert.True(result.Columns[0].Visible);
9187
Assert.Equal("Age", result.Columns[1].PropertyName);
92-
Assert.Equal(1, result.Columns[1].SortIndex);
88+
Assert.Equal(1, result.Columns[1].SortIndex);
9389
Assert.True(result.Columns[1].SortDescending);
9490
Assert.False(result.Columns[1].Visible);
9591
}
@@ -126,7 +122,7 @@ public void DataGridState_WithExtensions_RoundTrips()
126122
var extensions = new Dictionary<string, string?>
127123
{
128124
["pageSize"] = "25",
129-
["theme"] = null
125+
["theme"] = null
130126
};
131127
var state = new DataGridState(query: null, columns: null, extensions: extensions);
132128

test/LoreSoft.Blazor.Controls.Tests/Data/DataPagerStateTests.cs

Lines changed: 0 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -1,12 +1,3 @@
1-
using System;
2-
using System.Collections.Generic;
3-
using System.ComponentModel;
4-
using System.Linq;
5-
using System.Text;
6-
using System.Threading.Tasks;
7-
using LoreSoft.Blazor.Controls;
8-
using Xunit;
9-
101
namespace LoreSoft.Blazor.Controls.Tests.Data;
112

123
public class DataPagerStateTests

test/LoreSoft.Blazor.Controls.Tests/Events/EventBusTests.cs

Lines changed: 29 additions & 27 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,7 @@
11
using LoreSoft.Blazor.Controls.Events;
22

3+
using static Xunit.TestContext;
4+
35
namespace LoreSoft.Blazor.Controls.Tests.Events;
46

57
public class EventBusTests
@@ -78,7 +80,7 @@ public async Task Subscribe_MultipleHandlersForSameEvent_BothReceiveEvents()
7880
// Act
7981
var testEvent = new TestEvent { Message = "test" };
8082

81-
await eventBus.PublishAsync(testEvent);
83+
await eventBus.PublishAsync(testEvent, Current.CancellationToken);
8284

8385
// Assert
8486
Assert.True(handler1Called);
@@ -101,7 +103,7 @@ public async Task Subscribe_DifferentEventTypes_MaintainsSeparateSubscriptions()
101103
eventBus.Subscribe(handler2);
102104

103105
// Act
104-
await eventBus.PublishAsync(new TestEvent { Message = "test" });
106+
await eventBus.PublishAsync(new TestEvent { Message = "test" }, Current.CancellationToken);
105107

106108
// Assert
107109
Assert.True(event1Received);
@@ -127,7 +129,7 @@ public async Task PublishAsync_WithSubscriber_InvokesHandler()
127129
var testEvent = new TestEvent { Message = "test message", Value = 42 };
128130

129131
// Act
130-
await eventBus.PublishAsync(testEvent);
132+
await eventBus.PublishAsync(testEvent, Current.CancellationToken);
131133

132134
// Assert
133135
Assert.NotNull(receivedEvent);
@@ -176,7 +178,7 @@ public async Task PublishAsync_WithMultipleHandlers_InvokesAll()
176178
eventBus.Subscribe(handler2);
177179

178180
// Act
179-
await eventBus.PublishAsync(new TestEvent { Message = "test" });
181+
await eventBus.PublishAsync(new TestEvent { Message = "test" }, Current.CancellationToken);
180182

181183
// Assert
182184
Assert.Equal(1, handler1Count);
@@ -199,7 +201,7 @@ public async Task PublishAsync_WithAsyncHandler_AwaitsCompletion()
199201
eventBus.Subscribe(handler);
200202

201203
// Act
202-
await eventBus.PublishAsync(new TestEvent { Message = "test" });
204+
await eventBus.PublishAsync(new TestEvent { Message = "test" }, Current.CancellationToken);
203205

204206
// Assert
205207
Assert.True(completed);
@@ -212,7 +214,7 @@ public async Task PublishAsync_WithNoSubscribers_CompletesSuccessfully()
212214
var eventBus = new EventBus();
213215

214216
// Act & Assert - should not throw
215-
await eventBus.PublishAsync(new TestEvent { Message = "test" });
217+
await eventBus.PublishAsync(new TestEvent { Message = "test" }, Current.CancellationToken);
216218
}
217219

218220
[Fact]
@@ -224,7 +226,7 @@ public async Task PublishAsync_WithNullEvent_ThrowsArgumentNullException()
224226
TestEvent nullEvent = null!;
225227

226228
// Act & Assert
227-
await Assert.ThrowsAsync<ArgumentNullException>(() => eventBus.PublishAsync(nullEvent).AsTask());
229+
await Assert.ThrowsAsync<ArgumentNullException>(() => eventBus.PublishAsync(nullEvent, Current.CancellationToken).AsTask());
228230
}
229231

230232
[Fact]
@@ -239,9 +241,9 @@ public async Task PublishAsync_MultipleTimes_InvokesHandlerMultipleTimes()
239241
eventBus.Subscribe(handler);
240242

241243
// Act
242-
await eventBus.PublishAsync(new TestEvent { Message = "test1" });
243-
await eventBus.PublishAsync(new TestEvent { Message = "test2" });
244-
await eventBus.PublishAsync(new TestEvent { Message = "test3" });
244+
await eventBus.PublishAsync(new TestEvent { Message = "test1" }, Current.CancellationToken);
245+
await eventBus.PublishAsync(new TestEvent { Message = "test2" }, Current.CancellationToken);
246+
await eventBus.PublishAsync(new TestEvent { Message = "test3" }, Current.CancellationToken);
245247

246248
// Assert
247249
Assert.Equal(3, callCount);
@@ -265,7 +267,7 @@ public async Task Unsubscribe_WithFunc_RemovesHandler()
265267
// Act
266268
eventBus.Unsubscribe(handler);
267269

268-
await eventBus.PublishAsync(new TestEvent { Message = "test" });
270+
await eventBus.PublishAsync(new TestEvent { Message = "test" }, Current.CancellationToken);
269271

270272
// Assert
271273
Assert.Equal(0, callCount);
@@ -285,7 +287,7 @@ public async Task Unsubscribe_WithCancellationTokenFunc_RemovesHandler()
285287
// Act
286288
eventBus.Unsubscribe(handler);
287289

288-
await eventBus.PublishAsync(new TestEvent { Message = "test" });
290+
await eventBus.PublishAsync(new TestEvent { Message = "test" }, Current.CancellationToken);
289291

290292
// Assert
291293
Assert.Equal(0, callCount);
@@ -333,7 +335,7 @@ public async Task Unsubscribe_OneHandlerOfMultiple_OnlyRemovedHandlerNotInvoked(
333335
// Act
334336
eventBus.Unsubscribe(handler1);
335337

336-
await eventBus.PublishAsync(new TestEvent { Message = "test" });
338+
await eventBus.PublishAsync(new TestEvent { Message = "test" }, Current.CancellationToken);
337339

338340
// Assert
339341
Assert.Equal(0, handler1Count);
@@ -354,8 +356,8 @@ public async Task Unsubscribe_BySubscriberObject_RemovesAllHandlersForThatSubscr
354356
// Act
355357
eventBus.Unsubscribe(subscriber);
356358

357-
await eventBus.PublishAsync(new TestEvent { Message = "test" });
358-
await eventBus.PublishAsync(new OtherEvent { Data = "test" });
359+
await eventBus.PublishAsync(new TestEvent { Message = "test" }, Current.CancellationToken);
360+
await eventBus.PublishAsync(new OtherEvent { Data = "test" }, Current.CancellationToken);
359361

360362
// Assert
361363
Assert.Equal(0, subscriber.TestEventCount);
@@ -406,7 +408,7 @@ public async Task PublishAsync_WithCollectedSubscriber_DoesNotInvokeHandler()
406408
GC.Collect();
407409

408410
// Act
409-
await eventBus.PublishAsync(new TestEvent { Message = "test" });
411+
await eventBus.PublishAsync(new TestEvent { Message = "test" }, Current.CancellationToken);
410412

411413
// Assert
412414
Assert.Equal(0, callTracker.CallCount);
@@ -434,7 +436,7 @@ public async Task PublishAsync_WithPartiallyCollectedSubscribers_OnlyInvokesLive
434436
GC.Collect();
435437

436438
// Act
437-
await eventBus.PublishAsync(new TestEvent { Message = "test" });
439+
await eventBus.PublishAsync(new TestEvent { Message = "test" }, Current.CancellationToken);
438440

439441
// Assert
440442
Assert.Equal(1, strongCallTracker.CallCount); // Strong reference handler called
@@ -461,7 +463,7 @@ public async Task PublishAsync_WithMultipleCollectedSubscribers_DoesNotInvokeAny
461463
GC.Collect();
462464

463465
// Act
464-
await eventBus.PublishAsync(new TestEvent { Message = "test" });
466+
await eventBus.PublishAsync(new TestEvent { Message = "test" }, Current.CancellationToken);
465467

466468
// Assert
467469
Assert.Equal(0, callTracker1.CallCount);
@@ -491,7 +493,7 @@ public async Task Subscribe_AfterGarbageCollection_NewHandlerStillWorks()
491493
eventBus.Subscribe<TestEvent>(newSubscriber.HandleEvent);
492494

493495
// Act
494-
await eventBus.PublishAsync(new TestEvent { Message = "test" });
496+
await eventBus.PublishAsync(new TestEvent { Message = "test" }, Current.CancellationToken);
495497

496498
// Assert
497499
Assert.Equal(0, weakCallTracker.CallCount); // Old handler not invoked
@@ -517,8 +519,8 @@ public async Task PublishAsync_WithCollectedSubscribersOfDifferentEventTypes_Cle
517519
GC.Collect();
518520

519521
// Act
520-
await eventBus.PublishAsync(new TestEvent { Message = "test" });
521-
await eventBus.PublishAsync(new OtherEvent { Data = "other" });
522+
await eventBus.PublishAsync(new TestEvent { Message = "test" }, Current.CancellationToken);
523+
await eventBus.PublishAsync(new OtherEvent { Data = "other" }, Current.CancellationToken);
522524

523525
// Assert
524526
Assert.Equal(0, testEventTracker.CallCount);
@@ -550,7 +552,7 @@ public async Task PublishAsync_WithMixedStrongAndWeakReferences_BehavesCorrectly
550552
GC.Collect();
551553

552554
// Act
553-
await eventBus.PublishAsync(new TestEvent { Message = "test" });
555+
await eventBus.PublishAsync(new TestEvent { Message = "test" }, Current.CancellationToken);
554556

555557
// Assert
556558
Assert.Equal(1, strongTracker1.CallCount); // Strong reference invoked
@@ -577,7 +579,7 @@ public async Task Unsubscribe_BeforeGarbageCollection_PreventsLeaks()
577579
GC.Collect();
578580

579581
// Assert - Publishing should complete without error
580-
await eventBus.PublishAsync(new TestEvent { Message = "test" });
582+
await eventBus.PublishAsync(new TestEvent { Message = "test" }, Current.CancellationToken);
581583

582584
Assert.Equal(0, subscriber._tracker.CallCount);
583585
}
@@ -625,8 +627,8 @@ public async Task PublishAsync_WithMultipleEventTypes_OnlyInvokesMatchingHandler
625627
eventBus.Subscribe(otherHandler);
626628

627629
// Act
628-
await eventBus.PublishAsync(new TestEvent { Message = "test" });
629-
await eventBus.PublishAsync(new OtherEvent { Data = "other" });
630+
await eventBus.PublishAsync(new TestEvent { Message = "test" }, Current.CancellationToken);
631+
await eventBus.PublishAsync(new OtherEvent { Data = "other" }, Current.CancellationToken);
630632

631633
// Assert
632634
Assert.Equal(1, testEventCount);
@@ -651,8 +653,8 @@ public async Task Unsubscribe_FromOneEventType_DoesNotAffectOtherEventTypes()
651653
// Act
652654
eventBus.Unsubscribe(testHandler);
653655

654-
await eventBus.PublishAsync(new TestEvent { Message = "test" });
655-
await eventBus.PublishAsync(new OtherEvent { Data = "other" });
656+
await eventBus.PublishAsync(new TestEvent { Message = "test" }, Current.CancellationToken);
657+
await eventBus.PublishAsync(new OtherEvent { Data = "other" }, Current.CancellationToken);
656658

657659
// Assert
658660
Assert.Equal(0, testEventCount);

test/LoreSoft.Blazor.Controls.Tests/Events/WeakDelegateTests.cs

Lines changed: 8 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,7 @@
11
using LoreSoft.Blazor.Controls.Events;
22

3+
using static Xunit.TestContext;
4+
35
namespace LoreSoft.Blazor.Controls.Tests.Events;
46

57
public class WeakDelegateTests
@@ -56,7 +58,7 @@ public async Task InvokeAsync_WithSyncAction_ExecutesSuccessfully()
5658
var weakDelegate = new WeakDelegate(handler);
5759

5860
// Act
59-
await weakDelegate.InvokeAsync();
61+
await weakDelegate.InvokeAsync(cancellationToken: Current.CancellationToken);
6062

6163
// Assert
6264
Assert.Equal(1, _callCount);
@@ -72,7 +74,7 @@ public async Task InvokeAsync_WithSyncActionWithParameter_ExecutesSuccessfully()
7274
var weakDelegate = new WeakDelegate(handler);
7375

7476
// Act
75-
await weakDelegate.InvokeAsync("test");
77+
await weakDelegate.InvokeAsync("test", Current.CancellationToken);
7678

7779
// Assert
7880
Assert.Equal("test", _lastParameter);
@@ -92,7 +94,7 @@ public async Task InvokeAsync_WithTaskReturningHandler_AwaitsCompletion()
9294
var weakDelegate = new WeakDelegate(handler);
9395

9496
// Act
95-
await weakDelegate.InvokeAsync();
97+
await weakDelegate.InvokeAsync(cancellationToken: Current.CancellationToken);
9698

9799
// Assert
98100
Assert.Equal(1, _callCount);
@@ -112,7 +114,7 @@ public async Task InvokeAsync_WithValueTaskReturningHandler_AwaitsCompletion()
112114
var weakDelegate = new WeakDelegate(handler);
113115

114116
// Act
115-
await weakDelegate.InvokeAsync();
117+
await weakDelegate.InvokeAsync(cancellationToken: Current.CancellationToken);
116118

117119
// Assert
118120
Assert.Equal(1, _callCount);
@@ -191,7 +193,7 @@ public async Task InvokeAsync_WhenTargetCollected_ReturnsCompletedTask()
191193
GC.Collect();
192194

193195
// Act
194-
await weakDelegate.InvokeAsync();
196+
await weakDelegate.InvokeAsync(cancellationToken: Current.CancellationToken);
195197

196198
// Assert - should not throw and return completed task
197199
Assert.True(weakDelegate.IsAlive == false);
@@ -277,7 +279,7 @@ public async Task InvokeAsync_WithInstanceMethod_ExecutesOnCorrectTarget()
277279
var weakDelegate = new WeakDelegate(handler);
278280

279281
// Act
280-
await weakDelegate.InvokeAsync();
282+
await weakDelegate.InvokeAsync(cancellationToken: Current.CancellationToken);
281283

282284
// Assert
283285
Assert.Equal(1, target.CallCount);

0 commit comments

Comments
 (0)