expectWarning() and friends have been deprecated in PHPUnit 9.6, and removed in PHPUnit 10. Unfortunately, there is no simple replacement because PHPUnit no longer converts them to exceptions in the first place. In fact, Sebastian Bergmann explicitly stated that he does not consider the use case of > a library developer to verify a code block warns its consumer when > certain action is performed worth supporting. So, add an ad-hoc replacement for all the deprecated methods. This is quite ugly, but it's simple enough given the low number of usages. On the bright side, this new method does not halt the test when the warning is triggered. This seems to align with the developers' expectation, seen in a few existing tests, that any code following the notice will be executed. Bug: T342110 Change-Id: I214abfed4280834840c115777ed78eb0a5570da9
82 lines
2.3 KiB
PHP
82 lines
2.3 KiB
PHP
<?php
|
|
namespace MediaWiki\Tests;
|
|
|
|
use MediaWiki\MediaWikiEntryPoint;
|
|
use MediaWiki\MediaWikiServices;
|
|
use MediaWiki\Request\FauxRequest;
|
|
use MediaWikiIntegrationTestCase;
|
|
use RequestContext;
|
|
use Wikimedia\TestingAccessWrapper;
|
|
|
|
/**
|
|
* @covers \MediaWiki\MediaWikiEntryPoint
|
|
*/
|
|
class MediaWikiEntryPointTest extends MediaWikiIntegrationTestCase {
|
|
|
|
private function newEntryPoint(): MediaWikiEntryPoint {
|
|
$context = new RequestContext();
|
|
$context->setRequest( new FauxRequest() );
|
|
$environment = new MockEnvironment();
|
|
$services = $this->createMock( MediaWikiServices::class );
|
|
|
|
$mw = $this->getMockBuilder( MediaWikiEntryPoint::class )
|
|
->onlyMethods( [ 'execute' ] )
|
|
->setConstructorArgs( [ $context, $environment, $services ] )
|
|
->getMockForAbstractClass();
|
|
|
|
return $mw;
|
|
}
|
|
|
|
/**
|
|
* Assert that we can create, flush, and access output buffers.
|
|
*
|
|
* Note that can't test the behaviour for non-removable buffers,
|
|
* because then we are stuck with a non-removable buffer,
|
|
* and PHPUnit will choke on it.
|
|
*
|
|
* We also can't test that content gets send to the client by calling
|
|
* flush(), since we can't mock that function, and we can't capture
|
|
* its output.
|
|
*/
|
|
public function testOutputBuffer() {
|
|
$oldLevel = ob_get_level();
|
|
|
|
$mw = TestingAccessWrapper::newFromObject( $this->newEntryPoint() );
|
|
$mw->enableOutputCapture();
|
|
|
|
$mw->startOutputBuffer();
|
|
$this->assertSame( 1, $mw->getOutputBufferLevel(), 'getOutputBufferLevel' );
|
|
|
|
print 'Testing test';
|
|
$this->assertSame( 12, $mw->getOutputBufferLength(), 'getOutputBufferLength' );
|
|
|
|
$mw->flushOutputBuffer();
|
|
|
|
$this->assertSame( $oldLevel, ob_get_level(), 'ob_get_level' );
|
|
$this->assertSame( 'Testing test', $mw->drainOutputBuffer() );
|
|
}
|
|
|
|
/**
|
|
* Check that flushOutputBuffer() will not try to send output
|
|
* when in post-send mode.
|
|
*/
|
|
public function testFlushOutputBuffers_sent() {
|
|
$mw = TestingAccessWrapper::newFromObject( $this->newEntryPoint() );
|
|
$mw->enableOutputCapture();
|
|
|
|
ob_start( null, 0, PHP_OUTPUT_HANDLER_STDFLAGS & ~PHP_OUTPUT_HANDLER_FLUSHABLE );
|
|
print 'Testing test';
|
|
|
|
$mw->enterPostSendMode();
|
|
|
|
$this->expectPHPError(
|
|
E_USER_NOTICE,
|
|
static function () use ( $mw ) {
|
|
$mw->flushOutputBuffer();
|
|
}
|
|
);
|
|
|
|
$this->assertSame( '', $mw->drainOutputBuffer() );
|
|
}
|
|
|
|
}
|