Skip to content

Add HeadlessTestRunner with simulated MultiThreaded mode #1734

Add HeadlessTestRunner with simulated MultiThreaded mode

Add HeadlessTestRunner with simulated MultiThreaded mode #1734

GitHub Actions / Test Results (macOS, SingleThread, Debug) failed Jul 17, 2024 in 0s

Test Results (macOS, SingleThread, Debug) ❌

Tests failed

❌ TestResults-macOS-SingleThread-Debug.trx

3210 tests were completed in 354s with 3127 passed, 4 failed and 79 skipped.

Test suite Passed Failed Skipped Time
osu.Framework.Tests.Platform.GameHostSuspendTest 1✔️ 1❌ 5s
osu.Framework.Tests.Platform.HeadlessGameHostTest 4✔️ 1❌ 11s
osu.Framework.Tests.Visual.Testing.TestSceneGlobalStatisticsDisplay 2❌ 313ms

❌ osu.Framework.Tests.Platform.GameHostSuspendTest

❌ TestPauseResume(MultiThreaded)
	System.InvalidOperationException : Cannot exit when thread is Paused.
✔️ TestPauseResume(SingleThread)

❌ osu.Framework.Tests.Platform.HeadlessGameHostTest

✔️ TestGameHostDisposalWhenNeverRun
❌ TestGameHostExceptionDuringAsynchronousChildLoad
	  Expected: <System.InvalidOperationException>
	  But was:  <System.TimeoutException: This GameHost could not start HeadlessGameHostTest+ExceptionDuringAsynchronousLoadTestGame because another GameHost was already running.
	   at osu.Framework.Platform.GameHost.Run(Game game) in /Users/runner/work/osu-framework/osu-framework/osu.Framework/Platform/GameHost.cs:line 707
	   at osu.Framework.Tests.Platform.HeadlessGameHostTest.<>c__DisplayClass1_0.<TestGameHostExceptionDuringAsynchronousChildLoad>b__0() in /Users/runner/work/osu-framework/osu-framework/osu.Framework.Tests/Platform/HeadlessGameHostTest.cs:line 44
	   at NUnit.Framework.Assert.Throws(IResolveConstraint expression, TestDelegate code, String message, Object[] args)>
	
✔️ TestGameHostExceptionDuringSetupHost
✔️ TestIpc
✔️ TestThreadSafetyResetOnEnteringThread

❌ osu.Framework.Tests.Visual.Testing.TestSceneGlobalStatisticsDisplay

❌ TestConstructor
	System.AggregateException : One or more errors occurred. (Stack empty.)
	  ----> System.InvalidOperationException : Stack empty.
❌ TestUpdateStats
	System.AggregateException : One or more errors occurred. (Stack empty.)
	  ----> System.InvalidOperationException : Stack empty.

Annotations

Check failure on line 244 in osu.Framework/Threading/GameThread.cs

See this annotation in the file changed.

@github-actions github-actions / Test Results (macOS, SingleThread, Debug)

osu.Framework.Tests.Platform.GameHostSuspendTest ► TestPauseResume(MultiThreaded)

Failed test found in:
  TestResults-macOS-SingleThread-Debug.trx
Error:
  System.InvalidOperationException : Cannot exit when thread is Paused.
Raw output
System.InvalidOperationException : Cannot exit when thread is Paused.
   at osu.Framework.Threading.GameThread.Exit() in /Users/runner/work/osu-framework/osu-framework/osu.Framework/Threading/GameThread.cs:line 244
   at osu.Framework.Platform.ThreadRunner.Stop() in /Users/runner/work/osu-framework/osu-framework/osu.Framework/Platform/ThreadRunner.cs:line 141
   at osu.Framework.Platform.GameHost.<performExit>g__exit|164_0() in /Users/runner/work/osu-framework/osu-framework/osu.Framework/Platform/GameHost.cs:line 676
   at osu.Framework.Threading.Scheduler.Add(Action task, Boolean forceScheduled) in /Users/runner/work/osu-framework/osu-framework/osu.Framework/Threading/Scheduler.cs:line 269
   at osu.Framework.Platform.GameHost.performExit(Boolean immediately) in /Users/runner/work/osu-framework/osu-framework/osu.Framework/Platform/GameHost.cs:line 669
   at osu.Framework.Platform.GameHost.PerformExit(Boolean immediately) in /Users/runner/work/osu-framework/osu-framework/osu.Framework/Platform/GameHost.cs:line 657
   at osu.Framework.Platform.GameHost.Exit() in /Users/runner/work/osu-framework/osu-framework/osu.Framework/Platform/GameHost.cs:line 634
   at osu.Framework.Game.Exit() in /Users/runner/work/osu-framework/osu-framework/osu.Framework/Game.cs:line 469
   at osu.Framework.Tests.Platform.GameHostSuspendTest.TestPauseResume(ExecutionMode threadMode) in /Users/runner/work/osu-framework/osu-framework/osu.Framework.Tests/Platform/GameHostSuspendTest.cs:line 82
   at InvokeStub_GameHostSuspendTest.TestPauseResume(Object, Span`1)
   at System.Reflection.MethodBaseInvoker.InvokeWithOneArg(Object obj, BindingFlags invokeAttr, Binder binder, Object[] parameters, CultureInfo culture)

Check failure on line 44 in osu.Framework.Tests/Platform/HeadlessGameHostTest.cs

See this annotation in the file changed.

@github-actions github-actions / Test Results (macOS, SingleThread, Debug)

osu.Framework.Tests.Platform.HeadlessGameHostTest ► TestGameHostExceptionDuringAsynchronousChildLoad

Failed test found in:
  TestResults-macOS-SingleThread-Debug.trx
Error:
    Expected: <System.InvalidOperationException>
    But was:  <System.TimeoutException: This GameHost could not start HeadlessGameHostTest+ExceptionDuringAsynchronousLoadTestGame because another GameHost was already running.
     at osu.Framework.Platform.GameHost.Run(Game game) in /Users/runner/work/osu-framework/osu-framework/osu.Framework/Platform/GameHost.cs:line 707
     at osu.Framework.Tests.Platform.HeadlessGameHostTest.<>c__DisplayClass1_0.<TestGameHostExceptionDuringAsynchronousChildLoad>b__0() in /Users/runner/work/osu-framework/osu-framework/osu.Framework.Tests/Platform/HeadlessGameHostTest.cs:line 44
     at NUnit.Framework.Assert.Throws(IResolveConstraint expression, TestDelegate code, String message, Object[] args)>
  
Raw output
  Expected: <System.InvalidOperationException>
  But was:  <System.TimeoutException: This GameHost could not start HeadlessGameHostTest+ExceptionDuringAsynchronousLoadTestGame because another GameHost was already running.
   at osu.Framework.Platform.GameHost.Run(Game game) in /Users/runner/work/osu-framework/osu-framework/osu.Framework/Platform/GameHost.cs:line 707
   at osu.Framework.Tests.Platform.HeadlessGameHostTest.<>c__DisplayClass1_0.<TestGameHostExceptionDuringAsynchronousChildLoad>b__0() in /Users/runner/work/osu-framework/osu-framework/osu.Framework.Tests/Platform/HeadlessGameHostTest.cs:line 44
   at NUnit.Framework.Assert.Throws(IResolveConstraint expression, TestDelegate code, String message, Object[] args)>

   at osu.Framework.Tests.Platform.HeadlessGameHostTest.TestGameHostExceptionDuringAsynchronousChildLoad() in /Users/runner/work/osu-framework/osu-framework/osu.Framework.Tests/Platform/HeadlessGameHostTest.cs:line 44

1)    at osu.Framework.Tests.Platform.HeadlessGameHostTest.TestGameHostExceptionDuringAsynchronousChildLoad() in /Users/runner/work/osu-framework/osu-framework/osu.Framework.Tests/Platform/HeadlessGameHostTest.cs:line 44

Check failure on line 502 in osu.Framework/Testing/TestScene.cs

See this annotation in the file changed.

@github-actions github-actions / Test Results (macOS, SingleThread, Debug)

osu.Framework.Tests.Visual.Testing.TestSceneGlobalStatisticsDisplay ► TestConstructor

Failed test found in:
  TestResults-macOS-SingleThread-Debug.trx
Error:
  System.AggregateException : One or more errors occurred. (Stack empty.)
    ----> System.InvalidOperationException : Stack empty.
Raw output
System.AggregateException : One or more errors occurred. (Stack empty.)
  ----> System.InvalidOperationException : Stack empty.
   at osu.Framework.Testing.TestScene.checkForErrors() in /Users/runner/work/osu-framework/osu-framework/osu.Framework/Testing/TestScene.cs:line 502
   at osu.Framework.Testing.TestScene.UseTestSceneRunnerAttribute.AfterTest(ITest test) in /Users/runner/work/osu-framework/osu-framework/osu.Framework/Testing/TestScene.cs:line 565
   at NUnit.Framework.Internal.Commands.TestActionCommand.<>c__DisplayClass0_0.<.ctor>b__1(TestExecutionContext context)
   at NUnit.Framework.Internal.Commands.BeforeAndAfterTestCommand.<>c__DisplayClass1_0.<Execute>b__1()
   at NUnit.Framework.Internal.Commands.DelegatingTestCommand.RunTestMethodInThreadAbortSafeZone(TestExecutionContext context, Action action)
--InvalidOperationException
   at System.Collections.Generic.Stack`1.ThrowForEmptyStack()
   at System.Collections.Generic.Stack`1.Pop()
   at osu.Framework.Statistics.TypePerformanceMonitor.EndCollecting(Object obj) in /Users/runner/work/osu-framework/osu-framework/osu.Framework/Statistics/TypePerformanceMonitor.cs:line 56
   at osu.Framework.Graphics.Containers.CompositeDrawable.UpdateSubTree() in /Users/runner/work/osu-framework/osu-framework/osu.Framework/Graphics/Containers/CompositeDrawable.cs:line 929
   at osu.Framework.Graphics.Containers.CompositeDrawable.updateChild(Drawable c) in /Users/runner/work/osu-framework/osu-framework/osu.Framework/Graphics/Containers/CompositeDrawable.cs:line 954
   at osu.Framework.Graphics.Containers.CompositeDrawable.UpdateSubTree() in /Users/runner/work/osu-framework/osu-framework/osu.Framework/Graphics/Containers/CompositeDrawable.cs:line 928
   at osu.Framework.Graphics.Containers.CompositeDrawable.updateChild(Drawable c) in /Users/runner/work/osu-framework/osu-framework/osu.Framework/Graphics/Containers/CompositeDrawable.cs:line 954
   at osu.Framework.Graphics.Containers.CompositeDrawable.UpdateSubTree() in /Users/runner/work/osu-framework/osu-framework/osu.Framework/Graphics/Containers/CompositeDrawable.cs:line 928
   at osu.Framework.Graphics.Containers.CompositeDrawable.updateChild(Drawable c) in /Users/runner/work/osu-framework/osu-framework/osu.Framework/Graphics/Containers/CompositeDrawable.cs:line 954
   at osu.Framework.Graphics.Containers.CompositeDrawable.UpdateSubTree() in /Users/runner/work/osu-framework/osu-framework/osu.Framework/Graphics/Containers/CompositeDrawable.cs:line 928
   at osu.Framework.Graphics.Containers.CompositeDrawable.updateChild(Drawable c) in /Users/runner/work/osu-framework/osu-framework/osu.Framework/Graphics/Containers/CompositeDrawable.cs:line 954
   at osu.Framework.Graphics.Containers.CompositeDrawable.UpdateSubTree() in /Users/runner/work/osu-framework/osu-framework/osu.Framework/Graphics/Containers/CompositeDrawable.cs:line 928
   at osu.Framework.Graphics.Containers.CompositeDrawable.updateChild(Drawable c) in /Users/runner/work/osu-framework/osu-framework/osu.Framework/Graphics/Containers/CompositeDrawable.cs:line 954
   at osu.Framework.Graphics.Containers.CompositeDrawable.UpdateSubTree() in /Users/runner/work/osu-framework/osu-framework/osu.Framework/Graphics/Containers/CompositeDrawable.cs:line 935
   at osu.Framework.Graphics.Containers.CompositeDrawable.updateChild(Drawable c) in /Users/runner/work/osu-framework/osu-framework/osu.Framework/Graphics/Containers/CompositeDrawable.cs:line 954
   at osu.Framework.Graphics.Containers.CompositeDrawable.UpdateSubTree() in /Users/runner/work/osu-framework/osu-framework/osu.Framework/Graphics/Containers/CompositeDrawable.cs:line 935
   at osu.Framework.Graphics.Containers.CompositeDrawable.updateChild(Drawable c) in /Users/runner/work/osu-framework/osu-framework/osu.Framework/Graphics/Containers/CompositeDrawable.cs:line 954
   at osu.Framework.Graphics.Containers.CompositeDrawable.UpdateSubTree() in /Users/runner/work/osu-framework/osu-framework/osu.Framework/Graphics/Containers/CompositeDrawable.cs:line 935
   at osu.Framework.Graphics.Containers.CompositeDrawable.updateChild(Drawable c) in /Users/runner/work/osu-framework/osu-framework/osu.Framework/Graphics/Containers/CompositeDrawable.cs:line 954
   at osu.Framework.Graphics.Containers.CompositeDrawable.UpdateSubTree() in /Users/runner/work/osu-framework/osu-framework/osu.Framework/Graphics/Containers/CompositeDrawable.cs:line 935
   at osu.Framework.Graphics.Containers.CompositeDrawable.updateChild(Drawable c) in /Users/runner/work/osu-framework/osu-framework/osu.Framework/Graphics/Containers/CompositeDrawable.cs:line 954
   at osu.Framework.Graphics.Containers.CompositeDrawable.UpdateSubTree() in /Users/runner/work/osu-framework/osu-framework/osu.Framework/Graphics/Containers/CompositeDrawable.cs:line 935
   at osu.Framework.Graphics.Containers.CompositeDrawable.updateChild(Drawable c) in /Users/runner/work/osu-framework/osu-framework/osu.Framework/Graphics/Containers/CompositeDrawable.cs:line 954
   at osu.Framework.Graphics.Containers.CompositeDrawable.UpdateSubTree() in /Users/runner/work/osu-framework/osu-framework/osu.Framework/Graphics/Containers/CompositeDrawable.cs:line 935
   at osu.Framework.Graphics.Containers.CompositeDrawable.updateChild(Drawable c) in /Users/runner/work/osu-framework/osu-framework/osu.Framework/Graphics/Containers/CompositeDrawable.cs:line 954
   at osu.Framework.Graphics.Containers.CompositeDrawable.UpdateSubTree() in /Users/runner/work/osu-framework/osu-framework/osu.Framework/Graphics/Containers/CompositeDrawable.cs:line 935
   at osu.Framework.Platform.GameHost.UpdateFrame() in /Users/runner/work/osu-framework/osu-framework/osu.Framework/Platform/GameHost.cs:line 481
   at osu.Framework.Platform.HeadlessGameHost.UpdateFrame() in /Users/runner/work/osu-framework/osu-framework/osu.Framework/Platform/HeadlessGameHost.cs:line 105
   at osu.Framework.Threading.GameThread.processFrame() in /Users/runner/work/osu-framework/osu-framework/osu.Framework/Threading/GameThread.cs:line 458
--- End of stack trace from previous location ---
   at osu.Framework.Platform.GameHost.<>c__DisplayClass141_0.<abortExecutionFromException>b__0() in /Users/runner/work/osu-framework/osu-framework/osu.Framework/Platform/GameHost.cs:line 419
   at osu.Framework.Threading.ScheduledDelegate.InvokeTask() in /Users/runner/work/osu-framework/osu-framework/osu.Framework/Threading/ScheduledDelegate.cs:line 106
   at osu.Framework.Threading.ScheduledDelegate.RunTaskInternal() in /Users/runner/work/osu-framework/osu-framework/osu.Framework/Threading/ScheduledDelegate.cs:line 92
   at osu.Framework.Threading.Scheduler.Update() in /Users/runner/work/osu-framework/osu-framework/osu.Framework/Threading/Scheduler.cs:line 124
   at osu.Framework.Threading.GameThread.processFrame() in /Users/runner/work/osu-framework/osu-framework/osu.Framework/Threading/GameThread.cs:line 453
   at osu.Framework.Threading.GameThread.RunSingleFrame() in /Users/runner/work/osu-framework/osu-framework/osu.Framework/Threading/GameThread.cs:line 298
   at osu.Framework.Platform.ThreadRunner.RunMainLoop() in /Users/runner/work/osu-framework/osu-framework/osu.Framework/Platform/ThreadRunner.cs:line 100
   at osu.Framework.Testing.HeadlessThreadRunner.RunMainLoop() in /Users/runner/work/osu-framework/osu-framework/osu.Framework/Testing/HeadlessThreadRunner.cs:line 22
   at osu.Framework.Platform.GameHost.windowUpdate() in /Users/runner/work/osu-framework/osu-framework/osu.Framework/Platform/GameHost.cs:line 1129
   at osu.Framework.Platform.GameHost.Run(Game game) in /Users/runner/work/osu-framework/osu-framework/osu.Framework/Platform/GameHost.cs:line 806
   at osu.Framework.Testing.TestScene.<>c__DisplayClass50_0.<SetupGameHostForNUnit>b__0() in /Users/runner/work/osu-framework/osu-framework/osu.Framework/Testing/TestScene.cs:line 459
   at System.Threading.ExecutionContext.RunInternal(ExecutionContext executionContext, ContextCallback callback, Object state)
--- End of stack trace from previous location ---
   at System.Threading.ExecutionContext.RunInternal(ExecutionContext executionContext, ContextCallback callback, Object state)
   at System.Threading.Tasks.Task.ExecuteWithThreadLocal(Task& currentTaskSlot, Thread threadPoolThread)

Check failure on line 502 in osu.Framework/Testing/TestScene.cs

See this annotation in the file changed.

@github-actions github-actions / Test Results (macOS, SingleThread, Debug)

osu.Framework.Tests.Visual.Testing.TestSceneGlobalStatisticsDisplay ► TestUpdateStats

Failed test found in:
  TestResults-macOS-SingleThread-Debug.trx
Error:
  System.AggregateException : One or more errors occurred. (Stack empty.)
    ----> System.InvalidOperationException : Stack empty.
Raw output
System.AggregateException : One or more errors occurred. (Stack empty.)
  ----> System.InvalidOperationException : Stack empty.
   at osu.Framework.Testing.TestScene.checkForErrors() in /Users/runner/work/osu-framework/osu-framework/osu.Framework/Testing/TestScene.cs:line 502
   at osu.Framework.Testing.TestScene.UseTestSceneRunnerAttribute.AfterTest(ITest test) in /Users/runner/work/osu-framework/osu-framework/osu.Framework/Testing/TestScene.cs:line 563
   at NUnit.Framework.Internal.Commands.TestActionCommand.<>c__DisplayClass0_0.<.ctor>b__1(TestExecutionContext context)
   at NUnit.Framework.Internal.Commands.BeforeAndAfterTestCommand.<>c__DisplayClass1_0.<Execute>b__1()
   at NUnit.Framework.Internal.Commands.DelegatingTestCommand.RunTestMethodInThreadAbortSafeZone(TestExecutionContext context, Action action)
--InvalidOperationException
   at System.Collections.Generic.Stack`1.ThrowForEmptyStack()
   at System.Collections.Generic.Stack`1.Pop()
   at osu.Framework.Statistics.TypePerformanceMonitor.EndCollecting(Object obj) in /Users/runner/work/osu-framework/osu-framework/osu.Framework/Statistics/TypePerformanceMonitor.cs:line 56
   at osu.Framework.Graphics.Containers.CompositeDrawable.UpdateSubTree() in /Users/runner/work/osu-framework/osu-framework/osu.Framework/Graphics/Containers/CompositeDrawable.cs:line 929
   at osu.Framework.Graphics.Containers.CompositeDrawable.updateChild(Drawable c) in /Users/runner/work/osu-framework/osu-framework/osu.Framework/Graphics/Containers/CompositeDrawable.cs:line 954
   at osu.Framework.Graphics.Containers.CompositeDrawable.UpdateSubTree() in /Users/runner/work/osu-framework/osu-framework/osu.Framework/Graphics/Containers/CompositeDrawable.cs:line 928
   at osu.Framework.Graphics.Containers.CompositeDrawable.updateChild(Drawable c) in /Users/runner/work/osu-framework/osu-framework/osu.Framework/Graphics/Containers/CompositeDrawable.cs:line 954
   at osu.Framework.Graphics.Containers.CompositeDrawable.UpdateSubTree() in /Users/runner/work/osu-framework/osu-framework/osu.Framework/Graphics/Containers/CompositeDrawable.cs:line 928
   at osu.Framework.Graphics.Containers.CompositeDrawable.updateChild(Drawable c) in /Users/runner/work/osu-framework/osu-framework/osu.Framework/Graphics/Containers/CompositeDrawable.cs:line 954
   at osu.Framework.Graphics.Containers.CompositeDrawable.UpdateSubTree() in /Users/runner/work/osu-framework/osu-framework/osu.Framework/Graphics/Containers/CompositeDrawable.cs:line 928
   at osu.Framework.Graphics.Containers.CompositeDrawable.updateChild(Drawable c) in /Users/runner/work/osu-framework/osu-framework/osu.Framework/Graphics/Containers/CompositeDrawable.cs:line 954
   at osu.Framework.Graphics.Containers.CompositeDrawable.UpdateSubTree() in /Users/runner/work/osu-framework/osu-framework/osu.Framework/Graphics/Containers/CompositeDrawable.cs:line 928
   at osu.Framework.Graphics.Containers.CompositeDrawable.updateChild(Drawable c) in /Users/runner/work/osu-framework/osu-framework/osu.Framework/Graphics/Containers/CompositeDrawable.cs:line 954
   at osu.Framework.Graphics.Containers.CompositeDrawable.UpdateSubTree() in /Users/runner/work/osu-framework/osu-framework/osu.Framework/Graphics/Containers/CompositeDrawable.cs:line 935
   at osu.Framework.Graphics.Containers.CompositeDrawable.updateChild(Drawable c) in /Users/runner/work/osu-framework/osu-framework/osu.Framework/Graphics/Containers/CompositeDrawable.cs:line 954
   at osu.Framework.Graphics.Containers.CompositeDrawable.UpdateSubTree() in /Users/runner/work/osu-framework/osu-framework/osu.Framework/Graphics/Containers/CompositeDrawable.cs:line 935
   at osu.Framework.Graphics.Containers.CompositeDrawable.updateChild(Drawable c) in /Users/runner/work/osu-framework/osu-framework/osu.Framework/Graphics/Containers/CompositeDrawable.cs:line 954
   at osu.Framework.Graphics.Containers.CompositeDrawable.UpdateSubTree() in /Users/runner/work/osu-framework/osu-framework/osu.Framework/Graphics/Containers/CompositeDrawable.cs:line 935
   at osu.Framework.Graphics.Containers.CompositeDrawable.updateChild(Drawable c) in /Users/runner/work/osu-framework/osu-framework/osu.Framework/Graphics/Containers/CompositeDrawable.cs:line 954
   at osu.Framework.Graphics.Containers.CompositeDrawable.UpdateSubTree() in /Users/runner/work/osu-framework/osu-framework/osu.Framework/Graphics/Containers/CompositeDrawable.cs:line 935
   at osu.Framework.Graphics.Containers.CompositeDrawable.updateChild(Drawable c) in /Users/runner/work/osu-framework/osu-framework/osu.Framework/Graphics/Containers/CompositeDrawable.cs:line 954
   at osu.Framework.Graphics.Containers.CompositeDrawable.UpdateSubTree() in /Users/runner/work/osu-framework/osu-framework/osu.Framework/Graphics/Containers/CompositeDrawable.cs:line 935
   at osu.Framework.Graphics.Containers.CompositeDrawable.updateChild(Drawable c) in /Users/runner/work/osu-framework/osu-framework/osu.Framework/Graphics/Containers/CompositeDrawable.cs:line 954
   at osu.Framework.Graphics.Containers.CompositeDrawable.UpdateSubTree() in /Users/runner/work/osu-framework/osu-framework/osu.Framework/Graphics/Containers/CompositeDrawable.cs:line 935
   at osu.Framework.Graphics.Containers.CompositeDrawable.updateChild(Drawable c) in /Users/runner/work/osu-framework/osu-framework/osu.Framework/Graphics/Containers/CompositeDrawable.cs:line 954
   at osu.Framework.Graphics.Containers.CompositeDrawable.UpdateSubTree() in /Users/runner/work/osu-framework/osu-framework/osu.Framework/Graphics/Containers/CompositeDrawable.cs:line 935
   at osu.Framework.Platform.GameHost.UpdateFrame() in /Users/runner/work/osu-framework/osu-framework/osu.Framework/Platform/GameHost.cs:line 481
   at osu.Framework.Platform.HeadlessGameHost.UpdateFrame() in /Users/runner/work/osu-framework/osu-framework/osu.Framework/Platform/HeadlessGameHost.cs:line 105
   at osu.Framework.Threading.GameThread.processFrame() in /Users/runner/work/osu-framework/osu-framework/osu.Framework/Threading/GameThread.cs:line 458
--- End of stack trace from previous location ---
   at osu.Framework.Platform.GameHost.<>c__DisplayClass141_0.<abortExecutionFromException>b__0() in /Users/runner/work/osu-framework/osu-framework/osu.Framework/Platform/GameHost.cs:line 419
   at osu.Framework.Threading.ScheduledDelegate.InvokeTask() in /Users/runner/work/osu-framework/osu-framework/osu.Framework/Threading/ScheduledDelegate.cs:line 106
   at osu.Framework.Threading.ScheduledDelegate.RunTaskInternal() in /Users/runner/work/osu-framework/osu-framework/osu.Framework/Threading/ScheduledDelegate.cs:line 92
   at osu.Framework.Threading.Scheduler.Update() in /Users/runner/work/osu-framework/osu-framework/osu.Framework/Threading/Scheduler.cs:line 124
   at osu.Framework.Threading.GameThread.processFrame() in /Users/runner/work/osu-framework/osu-framework/osu.Framework/Threading/GameThread.cs:line 453
   at osu.Framework.Threading.GameThread.RunSingleFrame() in /Users/runner/work/osu-framework/osu-framework/osu.Framework/Threading/GameThread.cs:line 298
   at osu.Framework.Platform.ThreadRunner.RunMainLoop() in /Users/runner/work/osu-framework/osu-framework/osu.Framework/Platform/ThreadRunner.cs:line 100
   at osu.Framework.Testing.HeadlessThreadRunner.RunMainLoop() in /Users/runner/work/osu-framework/osu-framework/osu.Framework/Testing/HeadlessThreadRunner.cs:line 22
   at osu.Framework.Platform.GameHost.windowUpdate() in /Users/runner/work/osu-framework/osu-framework/osu.Framework/Platform/GameHost.cs:line 1129
   at osu.Framework.Platform.GameHost.Run(Game game) in /Users/runner/work/osu-framework/osu-framework/osu.Framework/Platform/GameHost.cs:line 806
   at osu.Framework.Testing.TestScene.<>c__DisplayClass50_0.<SetupGameHostForNUnit>b__0() in /Users/runner/work/osu-framework/osu-framework/osu.Framework/Testing/TestScene.cs:line 459
   at System.Threading.ExecutionContext.RunInternal(ExecutionContext executionContext, ContextCallback callback, Object state)
--- End of stack trace from previous location ---
   at System.Threading.ExecutionContext.RunInternal(ExecutionContext executionContext, ContextCallback callback, Object state)
   at System.Threading.Tasks.Task.ExecuteWithThreadLocal(Task& currentTaskSlot, Thread threadPoolThread)