public function catchError_does_not_lose_subscription()
{
$subscribes = 0;
$unsubscribes = 0;
$tracer = Observable::create(function () use(&$subscribes, &$unsubscribes) {
++$subscribes;
return new CallbackDisposable(function () use(&$unsubscribes) {
++$unsubscribes;
});
});
// Try it without catchError()
$s = $tracer->subscribe(new CallbackObserver());
$this->assertEquals($subscribes, 1, '1 subscribes');
$this->assertEquals($unsubscribes, 0, '0 unsubscribes');
$s->dispose();
$this->assertEquals($subscribes, 1, 'After dispose: 1 subscribes');
$this->assertEquals($unsubscribes, 1, 'After dispose: 1 unsubscribes');
// And now try again with catchError(function()):
$subscribes = 0;
$unsubscribes = 0;
$s = $tracer->catchError(function () {
return Observable::never();
})->subscribe(new CallbackObserver());
$this->assertEquals($subscribes, 1, 'catchError(Observable): 1 subscribes');
$this->assertEquals($unsubscribes, 0, 'catchError(Observable): 0 unsubscribes');
$s->dispose();
$this->assertEquals($subscribes, 1, 'catchError(Observable): After dispose: 1 subscribes');
$this->assertEquals($unsubscribes, 1, 'catchError(Observable): After dispose: 1 unsubscribes');
}