Files
speckle-sharp-connectors/Sdk/Speckle.Connectors.Common.Tests/Threading/ThreadContextTests.cs
T
Adam Hathcock b807be35ff test: add tests for threadcontext (#651)
* add tests for threadcontext

* add test for extensions

* remove needed usage
2025-03-07 16:27:58 +03:00

94 lines
2.4 KiB
C#

using FluentAssertions;
using NUnit.Framework;
using Speckle.Testing;
namespace Speckle.Connectors.Common.Tests.Threading;
public class ThreadContextTests : MoqTest
{
[Test]
[TestCase(true, true, Funcs.RunMain)]
[TestCase(true, false, Funcs.MainToWorker)]
[TestCase(false, true, Funcs.WorkerToMain)]
[TestCase(false, false, Funcs.RunWorker)]
public async Task RunOnThread(bool isMain, bool useMain, Funcs? result)
{
var tc = new TestThreadContext(isMain);
bool resultRan = false;
await tc.RunOnThread(
() =>
{
resultRan = true;
},
useMain
);
resultRan.Should().BeTrue();
tc.Func.Should().Be(result);
}
[Test]
[TestCase(true, true, Funcs.RunMainAsync_T)]
[TestCase(true, false, Funcs.MainToWorker)]
[TestCase(false, true, Funcs.WorkerToMain)]
[TestCase(false, false, Funcs.RunWorkerAsync_T)]
public async Task RunOnThread_T(bool isMain, bool useMain, Funcs? result)
{
var tc = new TestThreadContext(isMain);
bool resultRan = false;
var x = await tc.RunOnThread(
() =>
{
resultRan = true;
return false;
},
useMain
);
resultRan.Should().BeTrue();
x.Should().BeFalse();
tc.Func.Should().Be(result);
}
[Test]
[TestCase(true, true, Funcs.RunMainAsync)]
[TestCase(true, false, Funcs.MainToWorkerAsync)]
[TestCase(false, true, Funcs.WorkerToMainAsync)]
[TestCase(false, false, Funcs.RunWorkerAsync)]
public async Task RunOnThreadAsync(bool isMain, bool useMain, Funcs? result)
{
var tc = new TestThreadContext(isMain);
bool resultRan = false;
await tc.RunOnThreadAsync(
() =>
{
resultRan = true;
return Task.CompletedTask;
},
useMain
);
resultRan.Should().BeTrue();
tc.Func.Should().Be(result);
}
[Test]
[TestCase(true, true, Funcs.RunMainAsync_T)]
[TestCase(true, false, Funcs.MainToWorkerAsync)]
[TestCase(false, true, Funcs.WorkerToMainAsync)]
[TestCase(false, false, Funcs.RunWorkerAsync_T)]
public async Task RunOnThreadAsync_T(bool isMain, bool useMain, Funcs? result)
{
var tc = new TestThreadContext(isMain);
bool resultRan = false;
var x = await tc.RunOnThreadAsync(
() =>
{
resultRan = true;
return Task.FromResult(false);
},
useMain
);
resultRan.Should().BeTrue();
x.Should().BeFalse();
tc.Func.Should().Be(result);
}
}