trait RunTestsInCoroutine

Properties

protected bool $runTestsInCoroutine
protected bool $copyNonCoroutineContext

Methods

mixed
invokeTestMethod(string $methodName, array $testArguments)

Invoke the test method inside a Swoole coroutine container.

bool
runsTestsInCoroutine()

Determine whether tests run in a coroutine.

bool
shouldBootFrameworkForTest()

Determine if framework lifecycle hooks should run for this test.

void
invokeSetupInCoroutine()

No description

void
invokeTearDownInCoroutine(callable $capture)

No description

void
clearNonCoroutineTransactionContext()

Clear transaction context from non-coroutine storage before test starts.

void
cleanupTestContext()

Clean up Context keys that cause test pollution.

Details

at line 34
protected mixed invokeTestMethod(string $methodName, array $testArguments)

Invoke the test method inside a Swoole coroutine container.

Uses PHPUnit 13's official extension point for customizing test method invocation. When coroutines are enabled and we're not already inside one, the test method runs inside Hypervel's coroutine container with full lifecycle management (context copying, setup/teardown hooks, cleanup).

Parameters

string $methodName
array $testArguments

Return Value

mixed

at line 91
protected bool runsTestsInCoroutine()

Determine whether tests run in a coroutine.

Return Value

bool

at line 99
protected bool shouldBootFrameworkForTest()

Determine if framework lifecycle hooks should run for this test.

Return Value

bool

at line 104
protected void invokeSetupInCoroutine()

No description

Return Value

void

at line 119
protected void invokeTearDownInCoroutine(callable $capture)

No description

Parameters

callable $capture

Return Value

void

at line 142
protected void clearNonCoroutineTransactionContext()

Clear transaction context from non-coroutine storage before test starts.

RefreshDatabase starts its wrapper transaction in setUp() (outside coroutine), storing it in nonCoroutineContext. We must preserve this data for copying into the coroutine. Only clear if there are no pending transactions (meaning any data is stale from a previous test that didn't clean up properly).

Return Value

void

at line 158
protected void cleanupTestContext()

Clean up Context keys that cause test pollution.

Only forgets specific keys known to leak between tests. Does not use CoroutineContext::flush() because that would flush data needed by defer callbacks (e.g., Redis connections waiting to be released).

Return Value

void