1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111
|
<?php
namespace React\Promise\Internal;
use Exception;
use PHPUnit\Framework\Attributes\RequiresPhpunit;
use PHPUnit\Framework\Attributes\Test;
use React\Promise\Deferred;
use React\Promise\SimpleTestCancellable;
use React\Promise\SimpleTestCancellableThenable;
use React\Promise\TestCase;
class CancellationQueueTest extends TestCase
{
#[Test]
public function acceptsSimpleCancellableThenable(): void
{
$p = new SimpleTestCancellableThenable();
$cancellationQueue = new CancellationQueue();
$cancellationQueue->enqueue($p);
$cancellationQueue();
self::assertTrue($p->cancelCalled);
}
#[Test]
public function ignoresSimpleCancellable(): void
{
$p = new SimpleTestCancellable();
$cancellationQueue = new CancellationQueue();
$cancellationQueue->enqueue($p);
$cancellationQueue();
self::assertFalse($p->cancelCalled);
}
#[Test]
#[RequiresPhpunit('< 12')]
public function callsCancelOnPromisesEnqueuedBeforeStart(): void
{
$d1 = $this->getCancellableDeferred();
$d2 = $this->getCancellableDeferred();
$cancellationQueue = new CancellationQueue();
$cancellationQueue->enqueue($d1->promise());
$cancellationQueue->enqueue($d2->promise());
$cancellationQueue();
}
#[Test]
#[RequiresPhpunit('< 12')]
public function callsCancelOnPromisesEnqueuedAfterStart(): void
{
$d1 = $this->getCancellableDeferred();
$d2 = $this->getCancellableDeferred();
$cancellationQueue = new CancellationQueue();
$cancellationQueue();
$cancellationQueue->enqueue($d2->promise());
$cancellationQueue->enqueue($d1->promise());
}
#[Test]
#[RequiresPhpunit('< 12')]
public function doesNotCallCancelTwiceWhenStartedTwice(): void
{
$d = $this->getCancellableDeferred();
$cancellationQueue = new CancellationQueue();
$cancellationQueue->enqueue($d->promise());
$cancellationQueue();
$cancellationQueue();
}
#[Test]
#[RequiresPhpunit('< 12')]
public function rethrowsExceptionsThrownFromCancel(): void
{
$this->expectException(Exception::class);
$this->expectExceptionMessage('test');
$mock = $this->createCallableMock();
$mock
->expects(self::once())
->method('__invoke')
->will(self::throwException(new Exception('test')));
$promise = new SimpleTestCancellableThenable($mock);
$cancellationQueue = new CancellationQueue();
$cancellationQueue->enqueue($promise);
$cancellationQueue();
}
/**
* @return Deferred<never>
*/
private function getCancellableDeferred(): Deferred
{
/** @var Deferred<never> */
return new Deferred($this->expectCallableOnce());
}
}
|