/
githubmirror
/
aspnetcore
Обзор
Документация
Войти
/
githubmirror
/
aspnetcore
Код
Запросы
0
Пакеты
0
Релизы
0
Аналитика
Безопасность
main
src/Components/Testing/test/TestLockProviderTests.cs
128 строк
3 KB
Javier Calvarro Nelson
[Blazor] Add Components.Testing E2E test infrastructure (#65958)
15 апр 2026, 18:32
Не верифицирован
15 апр 2026, 18:32
33557cf
Код
Авторство
О чём код?
// Licensed to the .NET Foundation under one or more agreements. // The .NET Foundation licenses this file to you under the MIT license. using Microsoft.AspNetCore.Components.Testing.Infrastructure; namespace Microsoft.AspNetCore.Components.Testing.Tests; public class TestLockProviderTests { [Fact] public async Task WaitOn_CompletesWhenReleased() { // Arrange var provider = new TestLockProvider(); var key = "test-key"; // Act var waitTask = provider.WaitOn(key); Assert.False(waitTask.IsCompleted); provider.Release(key); // Assert await waitTask; Assert.True(waitTask.IsCompleted); } [Fact] public async Task WaitOn_SameKey_ReturnsSameTask() { // Arrange var provider = new TestLockProvider(); var key = "same-key"; // Act var task1 = provider.WaitOn(key); var task2 = provider.WaitOn(key); // Assert Assert.Same(task1, task2); provider.Release(key); await task1; } [Fact] public async Task Release_BeforeWaitOn_CompletesImmediately() { // Arrange var provider = new TestLockProvider(); var key = "pre-released"; // Act — release first, then wait var released = provider.Release(key); var waitTask = provider.WaitOn(key); // Assert Assert.True(released); Assert.True(waitTask.IsCompleted); await waitTask; } [Fact] public void Release_ReturnsTrueOnFirstCall() { // Arrange var provider = new TestLockProvider(); var key = "release-once"; // Act & Assert Assert.True(provider.Release(key)); } [Fact] public void Release_ReturnsFalseOnSubsequentCalls() { // Arrange var provider = new TestLockProvider(); var key = "release-twice"; // Act provider.Release(key); var secondRelease = provider.Release(key); // Assert Assert.False(secondRelease); } [Fact] public async Task MultipleKeys_AreIndependent() { // Arrange var provider = new TestLockProvider(); // Act var task1 = provider.WaitOn("key-1"); var task2 = provider.WaitOn("key-2"); provider.Release("key-1"); await task1; // Assert Assert.True(task1.IsCompleted); Assert.False(task2.IsCompleted); provider.Release("key-2"); await task2; Assert.True(task2.IsCompleted); } [Fact] public async Task ConcurrentWaitAndRelease_WorksCorrectly() { // Arrange var provider = new TestLockProvider(); var keys = Enumerable.Range(0, 10).Select(i => $"concurrent-{i}").ToArray(); // Act — start all waits var tasks = keys.Select(k => provider.WaitOn(k)).ToArray(); // Release all concurrently await Task.WhenAll(keys.Select(k => Task.Run(() => provider.Release(k)))); // Assert — all should complete await Task.WhenAll(tasks); Assert.All(tasks, t => Assert.True(t.IsCompleted)); } }