diff --git a/src/BootstrapBlazor/Services/WebClientService.cs b/src/BootstrapBlazor/Services/WebClientService.cs index f51baf66dc5..a0f26949b3f 100644 --- a/src/BootstrapBlazor/Services/WebClientService.cs +++ b/src/BootstrapBlazor/Services/WebClientService.cs @@ -26,13 +26,7 @@ public class WebClientService(IIpLocatorFactory ipLocatorFactory, /// 获得 ClientInfo 实例方法 /// Get ClientInfo Instance Method /// - public Task GetClientInfo() => GetClientInfo(CancellationToken.None); - - /// - /// 获得 ClientInfo 实例方法 - /// Get ClientInfo Instance Method - /// - public async Task GetClientInfo(CancellationToken token) + public async Task GetClientInfo(CancellationToken token = default) { _client = new ClientInfo() { diff --git a/test/Directory.Build.props b/test/Directory.Build.props index 482a032863e..800a754b6e9 100644 --- a/test/Directory.Build.props +++ b/test/Directory.Build.props @@ -10,12 +10,12 @@ - + runtime; build; native; contentfiles; analyzers; buildtransitive all - + runtime; build; native; contentfiles; analyzers; buildtransitive all @@ -24,7 +24,6 @@ - diff --git a/test/UnitTest/Components/AjaxTest.cs b/test/UnitTest/Components/AjaxTest.cs index a5c6bb007ca..e9ac18eeb06 100644 --- a/test/UnitTest/Components/AjaxTest.cs +++ b/test/UnitTest/Components/AjaxTest.cs @@ -25,13 +25,13 @@ public async Task Ajax_Test() Assert.False(option.ToJson); var service = Context.Services.GetRequiredService(); - await service.InvokeAsync(option); + await service.InvokeAsync(option, CancellationToken.None); } [Fact] public async Task Goto_Test() { var service = Context.Services.GetRequiredService(); - await service.Goto("http://www.blazor.zone"); + await service.Goto("http://www.blazor.zone", CancellationToken.None); } } diff --git a/test/UnitTest/Components/ContextMenuTest.cs b/test/UnitTest/Components/ContextMenuTest.cs index b8d8fe03ae2..c44ed214750 100644 --- a/test/UnitTest/Components/ContextMenuTest.cs +++ b/test/UnitTest/Components/ContextMenuTest.cs @@ -103,7 +103,7 @@ public async Task ContextMenu_Ok() // 测试 Touch 事件 TriggerTouchStart(row); - await Task.Delay(500); + await Task.Delay(500, CancellationToken.None); row.TouchEnd(); Assert.True(clicked); @@ -250,7 +250,7 @@ public async Task ContextMenu_Table(TableRenderMode renderMode) TriggerTouchStart(row); var options = Context.Services.GetRequiredService>(); - await Task.Delay(100 + options.Value.ContextMenuOptions.OnTouchDelay); + await Task.Delay(100 + options.Value.ContextMenuOptions.OnTouchDelay, CancellationToken.None); row.TouchEnd(); } @@ -314,7 +314,7 @@ public async Task ContextMenu_TreeView() TriggerTouchStart(row); TriggerTouchStart(row); - await Task.Delay(100 + 2 * options.CurrentValue.ContextMenuOptions.OnTouchDelay); + await Task.Delay(100 + 2 * options.CurrentValue.ContextMenuOptions.OnTouchDelay, CancellationToken.None); row.TouchEnd(); } diff --git a/test/UnitTest/Components/CountButtonTest.cs b/test/UnitTest/Components/CountButtonTest.cs index e2f39db6a1b..ce344bf7ad8 100644 --- a/test/UnitTest/Components/CountButtonTest.cs +++ b/test/UnitTest/Components/CountButtonTest.cs @@ -24,7 +24,7 @@ await cut.InvokeAsync(() => }); Assert.Contains("disabled=\"disabled\"", cut.Markup); - await Task.Delay(500); + await Task.Delay(500, CancellationToken.None); Assert.Contains("(1) DisplayText", cut.Markup); cut.WaitForState(() => !cut.Markup.Contains("disabled=\"disabled\""), TimeSpan.FromSeconds(1)); @@ -39,9 +39,9 @@ await cut.InvokeAsync(() => var button = cut.Find("button"); button.Click(); }); - await Task.Delay(500); + await Task.Delay(500, CancellationToken.None); Assert.Contains("(1) CountText", cut.Markup); - await Task.Delay(600); + await Task.Delay(600, CancellationToken.None); cut.Render(pb => { @@ -57,10 +57,10 @@ await cut.InvokeAsync(() => }); Assert.Contains("disabled=\"disabled\"", cut.Markup); - await Task.Delay(500); + await Task.Delay(500, CancellationToken.None); Assert.Contains("2-test-callback", cut.Markup); - await Task.Delay(700); + await Task.Delay(700, CancellationToken.None); Assert.DoesNotContain("disabled=\"disabled\"", cut.Markup); Assert.Contains("DisplayText", cut.Markup); @@ -78,9 +78,9 @@ await cut.InvokeAsync(() => var button = cut.Find("button"); button.Click(); }); - await Task.Delay(500); + await Task.Delay(500, CancellationToken.None); Assert.Equal(1, clickCount); - await Task.Delay(600); + await Task.Delay(600, CancellationToken.None); cut.Render(pb => { @@ -95,8 +95,8 @@ await cut.InvokeAsync(() => var button = cut.Find("button"); button.Click(); }); - await Task.Delay(500); + await Task.Delay(500, CancellationToken.None); Assert.Equal(3, clickCount); - await Task.Delay(600); + await Task.Delay(600, CancellationToken.None); } } diff --git a/test/UnitTest/Components/DisplayTest.cs b/test/UnitTest/Components/DisplayTest.cs index 40f9cec93ee..32f022168c0 100644 --- a/test/UnitTest/Components/DisplayTest.cs +++ b/test/UnitTest/Components/DisplayTest.cs @@ -56,7 +56,7 @@ public async Task LookupService_Ok() { pb.Add(a => a.LookupService, new MockLookupService()); }); - await Task.Delay(100); + await Task.Delay(100, CancellationToken.None); Assert.Contains("Test1,Test2", cut.Markup); cut.Render(pb => @@ -64,7 +64,7 @@ public async Task LookupService_Ok() pb.Add(a => a.LookupServiceKey, null); pb.Add(a => a.Lookup, new List { new("v1", "Test3"), new("v2", "Test4") }); }); - await Task.Delay(100); + await Task.Delay(100, CancellationToken.None); Assert.Contains("Test3,Test4", cut.Markup); } diff --git a/test/UnitTest/Components/LayoutTest.cs b/test/UnitTest/Components/LayoutTest.cs index 898c76d4f2b..a5d3a176ff2 100644 --- a/test/UnitTest/Components/LayoutTest.cs +++ b/test/UnitTest/Components/LayoutTest.cs @@ -500,6 +500,8 @@ public void OnAuthorizing_Ok() [Fact] public void Main_Ok() { + var nav = Context.Services.GetRequiredService(); + nav.NavigateTo("/not-exist"); var cut = Context.Render>>(pb => { pb.Add(a => a.Value, Task.FromResult(new AuthenticationState(new ClaimsPrincipal()))); @@ -514,6 +516,8 @@ public void Main_Ok() [Fact] public void NotAuthorized_Ok() { + var nav = Context.Services.GetRequiredService(); + nav.NavigateTo("/not-exist"); var cut = Context.Render>>(pb => { pb.Add(a => a.Value, Task.FromResult(new AuthenticationState(new ClaimsPrincipal()))); diff --git a/test/UnitTest/Components/RecognizerTest.cs b/test/UnitTest/Components/RecognizerTest.cs index dc7849d49f1..9bf8ac634e0 100644 --- a/test/UnitTest/Components/RecognizerTest.cs +++ b/test/UnitTest/Components/RecognizerTest.cs @@ -75,7 +75,7 @@ public async Task SpeechWave_OnTimeout_Test() })); }); - await Task.Delay(1200); + await Task.Delay(1200, CancellationToken.None); Assert.True(timeout); cut.Render(pb => @@ -83,7 +83,7 @@ public async Task SpeechWave_OnTimeout_Test() pb.Add(a => a.Show, true); pb.Add(a => a.ShowUsedTime, false); }); - await Task.Delay(1200); + await Task.Delay(1200, CancellationToken.None); cut.Render(pb => { diff --git a/test/UnitTest/Components/SearchTest.cs b/test/UnitTest/Components/SearchTest.cs index d312a546c6d..3950f47032c 100644 --- a/test/UnitTest/Components/SearchTest.cs +++ b/test/UnitTest/Components/SearchTest.cs @@ -25,7 +25,7 @@ public async Task OnBlurAsync_Ok() }); }); await cut.InvokeAsync(() => cut.Instance.TriggerFilter("t")); - await Task.Delay(20); + await Task.Delay(20, CancellationToken.None); var item = cut.Find(".dropdown-item"); await cut.InvokeAsync(() => item.Click()); @@ -60,7 +60,7 @@ public async Task ItemTemplate_Ok() }); await cut.InvokeAsync(() => cut.Instance.TriggerFilter("t")); - await Task.Delay(20); + await Task.Delay(20, CancellationToken.None); Assert.Contains("Template-test1-Address 1", cut.Markup); Assert.Contains("Template-test2-Address 2", cut.Markup); @@ -172,7 +172,7 @@ public async Task OnSelectedItemChanged_Ok() }); await cut.InvokeAsync(() => cut.Instance.TriggerFilter("t")); - await Task.Delay(20); + await Task.Delay(20, CancellationToken.None); var item = cut.Find(".dropdown-item"); await cut.InvokeAsync(() => item.Click()); diff --git a/test/UnitTest/Components/SelectGenericTest.cs b/test/UnitTest/Components/SelectGenericTest.cs index 1ac5cb0f316..39259bc4ab1 100644 --- a/test/UnitTest/Components/SelectGenericTest.cs +++ b/test/UnitTest/Components/SelectGenericTest.cs @@ -1007,7 +1007,7 @@ public async Task OnBeforeSelectedItemChange_OK() }); var modals = cut.FindComponents(); var modal = modals[modals.Count - 1]; - _ = Task.Run(() => cut.InvokeAsync(() => cut.FindComponent>().Instance.ConfirmSelectedItem(0))); + _ = Task.Run(() => cut.InvokeAsync(() => cut.FindComponent>().Instance.ConfirmSelectedItem(0)), CancellationToken.None); var tick = DateTime.Now; while (!cut.Markup.Contains("test-swal-footer")) { diff --git a/test/UnitTest/Components/SelectTest.cs b/test/UnitTest/Components/SelectTest.cs index 4f2bec7f3f3..c04e003bd50 100644 --- a/test/UnitTest/Components/SelectTest.cs +++ b/test/UnitTest/Components/SelectTest.cs @@ -1138,7 +1138,7 @@ public async Task OnBeforeSelectedItemChange_OK() }); var modals = cut.FindComponents(); var modal = modals[modals.Count - 1]; - _ = Task.Run(() => cut.InvokeAsync(() => cut.FindComponent>().Instance.ConfirmSelectedItem(0))); + _ = Task.Run(() => cut.InvokeAsync(() => cut.FindComponent>().Instance.ConfirmSelectedItem(0)), CancellationToken.None); var tick = DateTime.Now; while (!cut.Markup.Contains("test-swal-footer")) { diff --git a/test/UnitTest/Components/SwalTest.cs b/test/UnitTest/Components/SwalTest.cs index 8a090868806..97b7975ea39 100644 --- a/test/UnitTest/Components/SwalTest.cs +++ b/test/UnitTest/Components/SwalTest.cs @@ -152,7 +152,7 @@ public void Show_Ok() return Task.CompletedTask; } }); - })); + }), CancellationToken.None); var tick = DateTime.Now; while (!cut.Markup.Contains("test-cancel-text")) @@ -192,7 +192,7 @@ public void Show_Ok() return Task.CompletedTask; } }); - })); + }), CancellationToken.None); tick = DateTime.Now; while (!cut.Markup.Contains("test-cancel-text")) @@ -231,7 +231,7 @@ public void Show_Ok() }); }); - Task.Run(() => cut.InvokeAsync(() => cut.FindComponent>().Instance.ConfirmSelectedItem(0))); + Task.Run(() => cut.InvokeAsync(() => cut.FindComponent>().Instance.ConfirmSelectedItem(0)), CancellationToken.None); tick = DateTime.Now; while (!cut.Markup.Contains("test-swal-footer")) { diff --git a/test/UnitTest/Components/TableTest.cs b/test/UnitTest/Components/TableTest.cs index a0527e73ec9..cc79e1b65ba 100644 --- a/test/UnitTest/Components/TableTest.cs +++ b/test/UnitTest/Components/TableTest.cs @@ -7916,7 +7916,7 @@ public async Task AutoRefresh_Ok() }); }); }); - await Task.Delay(1200); + await Task.Delay(1200, CancellationToken.None); Assert.True(index > 1); } diff --git a/test/UnitTest/Components/TimerTest.cs b/test/UnitTest/Components/TimerTest.cs index 41cdd89e6b9..6e6e9dfc480 100644 --- a/test/UnitTest/Components/TimerTest.cs +++ b/test/UnitTest/Components/TimerTest.cs @@ -113,7 +113,7 @@ public async Task OnStart_Ok() var confirm = cut.Find(".time-panel-btn.confirm"); await cut.InvokeAsync(() => confirm.Click()); - await Task.Delay(2000); + await Task.Delay(2000, CancellationToken.None); Assert.True(timeout); } @@ -138,7 +138,7 @@ public async Task OnCancel_Ok() Assert.True(buttons[1].ClassList.Contains("btn-warning")); Assert.Equal("暂停", buttons[1].GetInnerText()); await cut.InvokeAsync(() => buttons[1].Click()); - await Task.Delay(1000); + await Task.Delay(1000, CancellationToken.None); // resume buttons = cut.FindAll(".timer-buttons button"); diff --git a/test/UnitTest/Components/TreeViewTest.cs b/test/UnitTest/Components/TreeViewTest.cs index c0ce52f196b..c26dfbaf516 100644 --- a/test/UnitTest/Components/TreeViewTest.cs +++ b/test/UnitTest/Components/TreeViewTest.cs @@ -617,7 +617,7 @@ public async Task IsVirtualize_Ok() // 触发第一个节点展开 await cut.InvokeAsync(() => cut.Find(".node-icon.visible").Click()); cut.WaitForState(() => cut.Instance.Items[0].Items.Count == 2); - await Task.Delay(50); + await Task.Delay(50, CancellationToken.None); cut.Contains("--bb-tree-view-level: 0;"); cut.Contains("--bb-tree-view-level: 1;"); diff --git a/test/UnitTest/Components/ValidateTest.cs b/test/UnitTest/Components/ValidateTest.cs index 9133a9c23c3..79dba9043d7 100644 --- a/test/UnitTest/Components/ValidateTest.cs +++ b/test/UnitTest/Components/ValidateTest.cs @@ -406,7 +406,7 @@ public async Task AsyncRules_Ok() var form = cut.Find("form"); var c = cut.Find("input"); await cut.InvokeAsync(() => c.Change("Test")); - await Task.Delay(300); + await Task.Delay(300, CancellationToken.None); await cut.InvokeAsync(() => form.Submit()); Assert.True(invalid); } diff --git a/test/UnitTest/Services/BluetoothServiceTest.cs b/test/UnitTest/Services/BluetoothServiceTest.cs index c75143f883c..0151d3b3436 100644 --- a/test/UnitTest/Services/BluetoothServiceTest.cs +++ b/test/UnitTest/Services/BluetoothServiceTest.cs @@ -22,19 +22,19 @@ public async Task RequestDevice_Ok() var bluetoothService = Context.Services.GetRequiredService(); var services = new List() { BluetoothServicesEnum.DeviceInformation }; - var device = await bluetoothService.RequestDevice(services.GetServicesList()); + var device = await bluetoothService.RequestDevice(services.GetServicesList(), CancellationToken.None); Assert.NotNull(device); Assert.Equal("test", device.Name); Assert.Equal("id_1234", device.Id); Assert.Null(device.ErrorMessage); - await device.Connect(); + await device.Connect(CancellationToken.None); Assert.True(device.Connected); - var val = await device.ReadValue("battery_service", "battery_level"); + var val = await device.ReadValue("battery_service", "battery_level", CancellationToken.None); Assert.Equal([0x31], val); - var v = await device.GetBatteryValue(); + var v = await device.GetBatteryValue(CancellationToken.None); Assert.NotNull(v); Assert.Equal(0x31, v.Value); @@ -43,7 +43,7 @@ public async Task RequestDevice_Ok() mi.Invoke(device, ["test"]); Assert.Equal("test", device.ErrorMessage); - await device.Disconnect(); + await device.Disconnect(CancellationToken.None); Assert.False(device.Connected); await device.DisposeAsync(); @@ -57,11 +57,11 @@ public async Task GetPrimaryServices_Ok() Context.JSInterop.Setup("connect", matcher => matcher.Arguments[0]?.ToString()?.StartsWith("bb_bt_") ?? false).SetResult(true); Context.JSInterop.Setup?>("getPrimaryServices", matcher => matcher.Arguments[0]?.ToString()?.StartsWith("bb_bt_") ?? false).SetResult(["battery_service"]); var bluetoothService = Context.Services.GetRequiredService(); - var device = await bluetoothService.RequestDevice(); + var device = await bluetoothService.RequestDevice(token: CancellationToken.None); Assert.NotNull(device); - await device.Connect(); - var v = await device.GetPrimaryServices(); + await device.Connect(CancellationToken.None); + var v = await device.GetPrimaryServices(CancellationToken.None); Assert.Equal("battery_service", v[0].UUID); } @@ -74,14 +74,14 @@ public async Task GetCharacteristics_Ok() Context.JSInterop.Setup("getPrimaryService", matcher => matcher.Arguments[0]?.ToString()?.StartsWith("bb_bt_") ?? false).SetResult("battery_service"); Context.JSInterop.Setup?>("getCharacteristics", matcher => matcher.Arguments[0]?.ToString()?.StartsWith("bb_bt_") ?? false).SetResult(["battery_level"]); var bluetoothService = Context.Services.GetRequiredService(); - var device = await bluetoothService.RequestDevice(); + var device = await bluetoothService.RequestDevice(token: CancellationToken.None); Assert.NotNull(device); - await device.Connect(); - var service = await device.GetPrimaryService("battery_service"); + await device.Connect(CancellationToken.None); + var service = await device.GetPrimaryService("battery_service", CancellationToken.None); Assert.NotNull(service); - var v = await service.GetCharacteristics(); + var v = await service.GetCharacteristics(CancellationToken.None); Assert.Equal("battery_level", v[0].UUID); } @@ -95,17 +95,17 @@ public async Task ReadValue_null() Context.JSInterop.Setup("getCharacteristic", matcher => matcher.Arguments[0]?.ToString()?.StartsWith("bb_bt_") ?? false).SetResult("battery_level"); Context.JSInterop.Setup("readValue", matcher => matcher.Arguments[0]?.ToString()?.StartsWith("bb_bt_") ?? false).SetResult(null); var bluetoothService = Context.Services.GetRequiredService(); - var device = await bluetoothService.RequestDevice(); + var device = await bluetoothService.RequestDevice(token: CancellationToken.None); Assert.NotNull(device); - await device.Connect(); - var v = await device.ReadValue("battery_service", "battery_level"); + await device.Connect(CancellationToken.None); + var v = await device.ReadValue("battery_service", "battery_level", CancellationToken.None); Assert.Null(v); - var data = await device.GetBatteryValue(); + var data = await device.GetBatteryValue(CancellationToken.None); Assert.Null(v); - var service = await device.GetPrimaryService("battery_service"); + var service = await device.GetPrimaryService("battery_service", CancellationToken.None); Assert.NotNull(service); var mi = service.GetType().GetMethod("OnError"); @@ -113,7 +113,7 @@ public async Task ReadValue_null() mi.Invoke(service, ["test"]); Assert.Equal("test", service.ErrorMessage); - var characteristic = await service.GetCharacteristic("battery_level"); + var characteristic = await service.GetCharacteristic("battery_level", CancellationToken.None); Assert.NotNull(characteristic); mi = characteristic.GetType().GetMethod("OnError"); @@ -121,7 +121,7 @@ public async Task ReadValue_null() mi.Invoke(characteristic, ["test"]); Assert.Equal("test", characteristic.ErrorMessage); - v = await characteristic.ReadValue(); + v = await characteristic.ReadValue(CancellationToken.None); Assert.Null(v); } @@ -132,7 +132,7 @@ public async Task GetAvailability_Ok() Context.JSInterop.Setup("getAvailability", matcher => matcher.Arguments.Count == 0).SetResult(true); var bluetooth = Context.Services.GetRequiredService(); - await bluetooth.GetAvailability(); + await bluetooth.GetAvailability(CancellationToken.None); Assert.True(bluetooth.IsSupport); Assert.True(bluetooth.IsAvailable); Assert.Null(bluetooth.ErrorMessage); @@ -220,11 +220,11 @@ public async Task GetDeviceInfo_null() Context.JSInterop.Setup("getDeviceInfo", matcher => matcher.Arguments[0]?.ToString()?.StartsWith("bb_bt_") ?? false).SetResult(new BluetoothDeviceInfo() { ManufacturerName = "test" }); var bluetoothService = Context.Services.GetRequiredService(); - var device = await bluetoothService.RequestDevice(); + var device = await bluetoothService.RequestDevice(token: CancellationToken.None); Assert.NotNull(device); - await device.Connect(); - var v = await device.GetDeviceInfo(); + await device.Connect(CancellationToken.None); + var v = await device.GetDeviceInfo(CancellationToken.None); Assert.Equal("test", v?.ManufacturerName); } @@ -237,11 +237,11 @@ public async Task GetCurrentTime_null() Context.JSInterop.Setup("getCurrentTime", matcher => (matcher.Arguments[0]?.ToString()?.StartsWith("bb_bt_") ?? false)).SetResult("2024-10-10T10:05:10+07:00"); var bluetoothService = Context.Services.GetRequiredService(); - var device = await bluetoothService.RequestDevice(); + var device = await bluetoothService.RequestDevice(token: CancellationToken.None); Assert.NotNull(device); - await device.Connect(); - var v = await device.GetCurrentTime(); + await device.Connect(CancellationToken.None); + var v = await device.GetCurrentTime(CancellationToken.None); Assert.NotNull(v); Assert.Equal("2024-10-10 10:05:10", v.Value.ToString("yyyy-MM-dd HH:mm:ss")); Assert.Equal(7, v.Value.Offset.TotalHours); @@ -308,15 +308,15 @@ public async Task Notifications_Ok() Context.JSInterop.Setup("startNotifications", matcher => matcher.Arguments[0]?.ToString()?.StartsWith("bb_bt_") ?? false).SetResult(true); Context.JSInterop.Setup("stopNotifications", matcher => matcher.Arguments[0]?.ToString()?.StartsWith("bb_bt_") ?? false).SetResult(true); var bluetoothService = Context.Services.GetRequiredService(); - var device = await bluetoothService.RequestDevice(); + var device = await bluetoothService.RequestDevice(token: CancellationToken.None); Assert.NotNull(device); - await device.Connect(); + await device.Connect(CancellationToken.None); - var service = await device.GetPrimaryService("battery_service"); + var service = await device.GetPrimaryService("battery_service", CancellationToken.None); Assert.NotNull(service); - var characteristic = await service.GetCharacteristic("battery_level"); + var characteristic = await service.GetCharacteristic("battery_level", CancellationToken.None); Assert.NotNull(characteristic); byte[]? buffer = null; @@ -324,11 +324,11 @@ public async Task Notifications_Ok() { buffer = payload; return Task.CompletedTask; - }); + }, CancellationToken.None); Assert.True(notification); Assert.True(characteristic.IsNotify); - notification = await characteristic.StartNotifications(payload => { return Task.CompletedTask; }); + notification = await characteristic.StartNotifications(payload => { return Task.CompletedTask; }, CancellationToken.None); Assert.False(notification); // trigger notification @@ -338,7 +338,7 @@ public async Task Notifications_Ok() mi.Invoke(characteristic, ["battery_level", "1"u8.ToArray()]); Assert.NotNull(buffer); - notification = await characteristic.StopNotifications(); + notification = await characteristic.StopNotifications(CancellationToken.None); Assert.True(notification); Assert.False(characteristic.IsNotify); @@ -346,8 +346,8 @@ public async Task Notifications_Ok() await characteristic.StartNotifications(payload => { return Task.CompletedTask; - }); - notification = await characteristic.StopNotifications(); + }, CancellationToken.None); + notification = await characteristic.StopNotifications(CancellationToken.None); Assert.True(notification); Context.JSInterop.Setup("startNotifications", matcher => matcher.Arguments[0]?.ToString()?.StartsWith("bb_bt_") ?? false).SetResult(true); @@ -355,8 +355,8 @@ await characteristic.StartNotifications(payload => await characteristic.StartNotifications(payload => { return Task.CompletedTask; - }); - notification = await characteristic.StopNotifications(); + }, CancellationToken.None); + notification = await characteristic.StopNotifications(CancellationToken.None); Assert.False(notification); } diff --git a/test/UnitTest/Services/BrowserFingerServiceTest.cs b/test/UnitTest/Services/BrowserFingerServiceTest.cs index 1361aeaff2e..d9e01c7ab05 100644 --- a/test/UnitTest/Services/BrowserFingerServiceTest.cs +++ b/test/UnitTest/Services/BrowserFingerServiceTest.cs @@ -12,7 +12,7 @@ public async Task GetFingerCodeAsync_Ok() { Context.JSInterop.Setup("getFingerCode").SetResult("9527"); var service = Context.Services.GetRequiredService(); - var code = await service.GetFingerCodeAsync(); + var code = await service.GetFingerCodeAsync(CancellationToken.None); Assert.Equal("9527", code); } @@ -21,7 +21,7 @@ public async Task GetClientHubIdAsync_Ok() { Context.JSInterop.Setup("getClientHubId").SetResult("9528"); var service = Context.Services.GetRequiredService(); - var code = await service.GetClientHubIdAsync(); + var code = await service.GetClientHubIdAsync(CancellationToken.None); Assert.Equal("9528", code); } } diff --git a/test/UnitTest/Services/ClipboardServiceTest.cs b/test/UnitTest/Services/ClipboardServiceTest.cs index 80062a19935..3f999bed419 100644 --- a/test/UnitTest/Services/ClipboardServiceTest.cs +++ b/test/UnitTest/Services/ClipboardServiceTest.cs @@ -11,8 +11,8 @@ public class ClipboardServiceTest : BootstrapBlazorTestBase public async Task Clipboard_Ok() { var service = Context.Services.GetRequiredService(); - await service.Copy(null, () => Task.CompletedTask); - await service.Copy("Test", () => Task.CompletedTask); + await service.Copy(null, () => Task.CompletedTask, CancellationToken.None); + await service.Copy("Test", () => Task.CompletedTask, CancellationToken.None); } [Fact] @@ -21,9 +21,9 @@ public async Task GetText() Context.JSInterop.Setup("getTextFromClipboard").SetResult("test123"); var service = Context.Services.GetRequiredService(); - var text = await service.GetText(); + var text = await service.GetText(CancellationToken.None); Assert.Equal("test123", text); - await service.GetText(); + await service.GetText(CancellationToken.None); } [Fact] @@ -31,24 +31,24 @@ public async Task Get() { Context.JSInterop.Setup?>("getAllClipboardContents").SetResult([new() { Data = [0x31, 0x32, 0x33], MimeType = "text/text" }]); var service = Context.Services.GetRequiredService(); - var items = await service.Get(); + var items = await service.Get(CancellationToken.None); var item = items[0]; Assert.Equal("123", item.Text); Assert.Equal("text/text", item.MimeType); Context.JSInterop.Setup?>("getAllClipboardContents").SetResult([new() { Data = [0x31, 0x32, 0x33] }]); - items = await service.Get(); + items = await service.Get(CancellationToken.None); item = items[0]; Assert.Empty(item.Text); Context.JSInterop.Setup?>("getAllClipboardContents").SetResult([new()]); - items = await service.Get(); + items = await service.Get(CancellationToken.None); item = items[0]; Assert.Empty(item.Text); Context.JSInterop.Setup?>("getAllClipboardContents").SetResult(null); - items = await service.Get(); + items = await service.Get(CancellationToken.None); Assert.Empty(items); } } diff --git a/test/UnitTest/Services/ConnectionHubTest.cs b/test/UnitTest/Services/ConnectionHubTest.cs index c61d7dd7721..0c13ffd6874 100644 --- a/test/UnitTest/Services/ConnectionHubTest.cs +++ b/test/UnitTest/Services/ConnectionHubTest.cs @@ -48,7 +48,7 @@ await cut.InvokeAsync(async () => Assert.Equal(1, service.Count); // 触发 Beat 时间 - await Task.Delay(200); + await Task.Delay(200, CancellationToken.None); authorizationContext.SetAuthorized("mock_user"); await cut.InvokeAsync(async () => { @@ -102,7 +102,7 @@ public async Task ExpirationScanFrequency_Ok() Assert.Equal(1, service.Count); Assert.Single(service.Connections); - await Task.Delay(500); + await Task.Delay(500, CancellationToken.None); Assert.Equal(0, service.Count); } @@ -127,7 +127,7 @@ public async Task ExpirationScanFrequency_Cancel() var token = fieldInfo.GetValue(service) as CancellationTokenSource; Assert.NotNull(token); - await Task.Delay(200); + await Task.Delay(200, CancellationToken.None); token.Cancel(); } diff --git a/test/UnitTest/Services/EyeDropperServiceTest.cs b/test/UnitTest/Services/EyeDropperServiceTest.cs index abf0ce62daa..5e659e93f8b 100644 --- a/test/UnitTest/Services/EyeDropperServiceTest.cs +++ b/test/UnitTest/Services/EyeDropperServiceTest.cs @@ -12,7 +12,7 @@ public async Task EyeDropperService_Ok() { Context.JSInterop.Setup("open").SetResult("#FFFFFF"); var service = Context.Services.GetRequiredService(); - var expected = await service.PickAsync(); + var expected = await service.PickAsync(CancellationToken.None); Assert.Equal("#FFFFFF", expected); } } diff --git a/test/UnitTest/Services/SerialServiceTest.cs b/test/UnitTest/Services/SerialServiceTest.cs index 8f4edeae559..c0736aa088c 100644 --- a/test/UnitTest/Services/SerialServiceTest.cs +++ b/test/UnitTest/Services/SerialServiceTest.cs @@ -27,7 +27,7 @@ public async Task GetPort_Ok() Context.JSInterop.Setup("setSignals", matcher => matcher.Arguments.Count == 2 && (matcher.Arguments[0]?.ToString()?.StartsWith("bb_serial_") ?? false)).SetResult(true); var serialService = Context.Services.GetRequiredService(); - var serialPort = await serialService.GetPort(); + var serialPort = await serialService.GetPort(CancellationToken.None); Assert.True(serialService.IsSupport); Assert.NotNull(serialPort); @@ -46,7 +46,7 @@ public async Task GetPort_Ok() ParityType = SerialPortParityType.Odd, StopBits = 1 }; - await serialPort.Open(option); + await serialPort.Open(option, CancellationToken.None); Assert.True(serialPort.IsOpen); Assert.Equal(9600, option.BaudRate); Assert.Equal(1024, option.BufferSize); @@ -55,20 +55,20 @@ public async Task GetPort_Ok() Assert.Equal(SerialPortParityType.Odd, option.ParityType); Assert.Equal(1, option.StopBits); - await serialPort.Write([0x31, 0x32]); + await serialPort.Write([0x31, 0x32], CancellationToken.None); var mi = serialPort.GetType().GetMethod("DataReceiveCallback"); Assert.NotNull(mi); mi.Invoke(serialPort, ["12"u8.ToArray()]); // getInfo - var info = await serialPort.GetUsbInfo(); + var info = await serialPort.GetUsbInfo(CancellationToken.None); Assert.NotNull(info); Assert.Equal("Test", info.UsbVendorId); Assert.Equal("Test123", info.UsbProductId); // getSignals - var signals = await serialPort.GetSignals(); + var signals = await serialPort.GetSignals(CancellationToken.None); Assert.NotNull(signals); Assert.False(signals.RING); Assert.True(signals.DSR); @@ -82,13 +82,13 @@ public async Task GetPort_Ok() DTR = true, RTS = true }; - var ret = await serialPort.SetSignals(signalOption); + var ret = await serialPort.SetSignals(signalOption, CancellationToken.None); Assert.True(ret); Assert.True(signalOption.Break); Assert.True(signalOption.DTR); Assert.True(signalOption.RTS); - await serialPort.Close(); + await serialPort.Close(CancellationToken.None); Assert.False(serialPort.IsOpen); await serialPort.DisposeAsync(); diff --git a/test/UnitTest/Services/ThrottleTest.cs b/test/UnitTest/Services/ThrottleTest.cs index 5db5695fd39..62b5626aeb9 100644 --- a/test/UnitTest/Services/ThrottleTest.cs +++ b/test/UnitTest/Services/ThrottleTest.cs @@ -14,14 +14,14 @@ public async Task Throttle_Ok() var dispatcher = factory.GetOrCreate("test", 200); var count = 0; - dispatcher.Throttle(() => count++); + dispatcher.Throttle(() => count++, CancellationToken.None); Assert.Equal(1, count); - dispatcher.Throttle(() => count++); + dispatcher.Throttle(() => count++, CancellationToken.None); Assert.Equal(1, count); - await Task.Delay(250); - dispatcher.Throttle(() => count++); + await Task.Delay(250, CancellationToken.None); + dispatcher.Throttle(() => count++, CancellationToken.None); Assert.Equal(2, count); } @@ -32,14 +32,14 @@ public async Task ThrottleAsync_Ok() var dispatcher = factory.GetOrCreate("test-async", new ThrottleOptions() { Interval = TimeSpan.FromMilliseconds(200) }); var count = 0; - await dispatcher.ThrottleAsync(Count); + await dispatcher.ThrottleAsync(Count, CancellationToken.None); Assert.Equal(1, count); - await dispatcher.ThrottleAsync(Count); + await dispatcher.ThrottleAsync(Count, CancellationToken.None); Assert.Equal(1, count); - await Task.Delay(250); - await dispatcher.ThrottleAsync(Count); + await Task.Delay(250, CancellationToken.None); + await dispatcher.ThrottleAsync(Count, CancellationToken.None); Assert.Equal(2, count); Task Count() @@ -63,15 +63,15 @@ await dispatcher.ThrottleAsync(async () => { await Task.Delay(100); count++; - }); - await Task.Delay(150); + }, CancellationToken.None); + await Task.Delay(150, CancellationToken.None); // 如果 DelayAfterExecution = false 再次执行时计数 已经超出 200ms // 如果 DelayAfterExecution = true 再次执行时不会计数 invokeTime 重置 未到达 200ms dispatcher.Throttle(() => { count++; - }); + }, CancellationToken.None); } [Fact] @@ -85,16 +85,16 @@ await dispatcher.ThrottleAsync(() => { count++; throw new Exception(); - }); + }, CancellationToken.None); Assert.Equal(1, count); - dispatcher.Throttle(() => throw new InvalidOperationException()); + dispatcher.Throttle(() => throw new InvalidOperationException(), CancellationToken.None); // 发生错误后可以立即执行下一次任务,不限流 dispatcher.Throttle(() => { count++; - }); + }, CancellationToken.None); Assert.Equal(2, count); } @@ -112,9 +112,9 @@ public void ShouldWait_Ok() { var dispatch = new ThrottleDispatcher(new ThrottleOptions()); var count = 0; - dispatch.Throttle(() => count++); + dispatch.Throttle(() => count++, CancellationToken.None); Assert.Equal(1, count); - dispatch.Throttle(() => count++); + dispatch.Throttle(() => count++, CancellationToken.None); Assert.Equal(1, count); } @@ -136,7 +136,7 @@ public async Task MultipleThread_ThrottleAsync_Ok() { await Task.Delay(120); count++; - })); + }, CancellationToken.None)); await Task.WhenAll(tasks); Assert.Equal(1, count); } diff --git a/test/UnitTest/Services/WebClientServiceTest.cs b/test/UnitTest/Services/WebClientServiceTest.cs index 376e62c3622..619ba0099aa 100644 --- a/test/UnitTest/Services/WebClientServiceTest.cs +++ b/test/UnitTest/Services/WebClientServiceTest.cs @@ -26,7 +26,7 @@ public async Task WebClientService_Ok() }; Context.JSInterop.Setup("ping", _ => true).SetResult(mockData); var service = Context.Services.GetRequiredService(); - var client = await service.GetClientInfo(); + var client = await service.GetClientInfo(CancellationToken.None); client.City = "test_city"; client.RequestUrl = "test_url"; @@ -49,7 +49,7 @@ public async Task WebClientOptions_Ok() options.CurrentValue.WebClientOptions.EnableIpLocator = true; var service = Context.Services.GetRequiredService(); - var client = await service.GetClientInfo(); + var client = await service.GetClientInfo(CancellationToken.None); Assert.Null(client.Ip); } @@ -60,7 +60,7 @@ public async Task GetClientInfo_Error() // Exception Context.JSInterop.Setup("ping", _ => true).SetException(new Exception("test-exception")); - var client = await service.GetClientInfo(); + var client = await service.GetClientInfo(CancellationToken.None); } [Fact] diff --git a/test/UnitTest/Services/ZipArchiveServiceTest.cs b/test/UnitTest/Services/ZipArchiveServiceTest.cs index ebc07340345..b4fbc7be400 100644 --- a/test/UnitTest/Services/ZipArchiveServiceTest.cs +++ b/test/UnitTest/Services/ZipArchiveServiceTest.cs @@ -55,7 +55,7 @@ public async Task Archive_Ok() { Directory.Delete(destFolder, true); } - await archService.ExtractToDirectoryAsync(archiveFile, destFolder); + await archService.ExtractToDirectoryAsync(archiveFile, destFolder, token: CancellationToken.None); Assert.True(Directory.Exists(destFolder)); // 删除文件夹 @@ -63,7 +63,7 @@ public async Task Archive_Ok() Assert.False(Directory.Exists(destFolder)); // 异步解压缩单元测试 - await archService.ExtractToDirectoryAsync(archiveFile, destFolder); + await archService.ExtractToDirectoryAsync(archiveFile, destFolder, token: CancellationToken.None); Assert.True(Directory.Exists(destFolder)); // 打包文件夹单元测试 @@ -77,17 +77,27 @@ public async Task Archive_Ok() { File.Delete(destFile); } - await archService.ArchiveDirectoryAsync(destFile, destFolder, includeBaseDirectory: true); + await archService.ArchiveDirectoryAsync(destFile, destFolder, includeBaseDirectory: true, token: CancellationToken.None); Assert.True(File.Exists(destFile)); File.Delete(destFile); - await Assert.ThrowsAsync(() => archService.ArchiveDirectoryAsync(null!, destFolder, includeBaseDirectory: true)); + await Assert.ThrowsAsync(() => archService.ArchiveDirectoryAsync(null!, destFolder, includeBaseDirectory: true, token: CancellationToken.None)); } [Fact] public async Task ZipArchive_Ok() { - var fileName = Path.Combine(AppContext.BaseDirectory, "test", "3.zip"); + var folder = Path.Combine(AppContext.BaseDirectory, "test"); + if (!Directory.Exists(folder)) + { + Directory.CreateDirectory(folder); + } + + // 准备待压缩文件,避免依赖其他单元测试产生的文件导致一起运行时失败 + var item = Path.Combine(folder, "1.txt"); + await File.WriteAllTextAsync(item, "A", CancellationToken.None); + + var fileName = Path.Combine(folder, "3.zip"); if (File.Exists(fileName)) { File.Delete(fileName); @@ -96,9 +106,8 @@ public async Task ZipArchive_Ok() await using var fs = File.OpenWrite(fileName); await using var zip = new ZipArchive(fs, ZipArchiveMode.Create); - var item = Path.Combine(AppContext.BaseDirectory, "test", "1.txt"); zip.CreateEntry("text/"); - await zip.CreateEntryFromFileAsync(item, "text/1.txt"); + await zip.CreateEntryFromFileAsync(item, "text/1.txt", CancellationToken.None); } [Fact] diff --git a/test/UnitTest/UnitTest.csproj b/test/UnitTest/UnitTest.csproj index 3803c56b183..8d0375946aa 100644 --- a/test/UnitTest/UnitTest.csproj +++ b/test/UnitTest/UnitTest.csproj @@ -51,10 +51,10 @@ - - - - + + + +