summaryrefslogtreecommitdiff
path: root/www/wiki/tests/phpunit/includes/debug/MWDebugTest.php
diff options
context:
space:
mode:
Diffstat (limited to 'www/wiki/tests/phpunit/includes/debug/MWDebugTest.php')
-rw-r--r--www/wiki/tests/phpunit/includes/debug/MWDebugTest.php140
1 files changed, 140 insertions, 0 deletions
diff --git a/www/wiki/tests/phpunit/includes/debug/MWDebugTest.php b/www/wiki/tests/phpunit/includes/debug/MWDebugTest.php
new file mode 100644
index 00000000..6f0b1db9
--- /dev/null
+++ b/www/wiki/tests/phpunit/includes/debug/MWDebugTest.php
@@ -0,0 +1,140 @@
+<?php
+
+class MWDebugTest extends MediaWikiTestCase {
+
+ protected function setUp() {
+ parent::setUp();
+ /** Clear log before each test */
+ MWDebug::clearLog();
+ }
+
+ public static function setUpBeforeClass() {
+ parent::setUpBeforeClass();
+ MWDebug::init();
+ Wikimedia\suppressWarnings();
+ }
+
+ public static function tearDownAfterClass() {
+ parent::tearDownAfterClass();
+ MWDebug::deinit();
+ Wikimedia\restoreWarnings();
+ }
+
+ /**
+ * @covers MWDebug::log
+ */
+ public function testAddLog() {
+ MWDebug::log( 'logging a string' );
+ $this->assertEquals(
+ [ [
+ 'msg' => 'logging a string',
+ 'type' => 'log',
+ 'caller' => 'MWDebugTest->testAddLog',
+ ] ],
+ MWDebug::getLog()
+ );
+ }
+
+ /**
+ * @covers MWDebug::warning
+ */
+ public function testAddWarning() {
+ MWDebug::warning( 'Warning message' );
+ $this->assertEquals(
+ [ [
+ 'msg' => 'Warning message',
+ 'type' => 'warn',
+ 'caller' => 'MWDebugTest::testAddWarning',
+ ] ],
+ MWDebug::getLog()
+ );
+ }
+
+ /**
+ * @covers MWDebug::deprecated
+ */
+ public function testAvoidDuplicateDeprecations() {
+ MWDebug::deprecated( 'wfOldFunction', '1.0', 'component' );
+ MWDebug::deprecated( 'wfOldFunction', '1.0', 'component' );
+
+ // assertCount() not available on WMF integration server
+ $this->assertEquals( 1,
+ count( MWDebug::getLog() ),
+ "Only one deprecated warning per function should be kept"
+ );
+ }
+
+ /**
+ * @covers MWDebug::deprecated
+ */
+ public function testAvoidNonConsecutivesDuplicateDeprecations() {
+ MWDebug::deprecated( 'wfOldFunction', '1.0', 'component' );
+ MWDebug::warning( 'some warning' );
+ MWDebug::log( 'we could have logged something too' );
+ // Another deprecation
+ MWDebug::deprecated( 'wfOldFunction', '1.0', 'component' );
+
+ // assertCount() not available on WMF integration server
+ $this->assertEquals( 3,
+ count( MWDebug::getLog() ),
+ "Only one deprecated warning per function should be kept"
+ );
+ }
+
+ /**
+ * @covers MWDebug::appendDebugInfoToApiResult
+ */
+ public function testAppendDebugInfoToApiResultXmlFormat() {
+ $request = $this->newApiRequest(
+ [ 'action' => 'help', 'format' => 'xml' ],
+ '/api.php?action=help&format=xml'
+ );
+
+ $context = new RequestContext();
+ $context->setRequest( $request );
+
+ $apiMain = new ApiMain( $context );
+
+ $result = new ApiResult( $apiMain );
+
+ MWDebug::appendDebugInfoToApiResult( $context, $result );
+
+ $this->assertInstanceOf( ApiResult::class, $result );
+ $data = $result->getResultData();
+
+ $expectedKeys = [ 'mwVersion', 'phpEngine', 'phpVersion', 'gitRevision', 'gitBranch',
+ 'gitViewUrl', 'time', 'log', 'debugLog', 'queries', 'request', 'memory',
+ 'memoryPeak', 'includes', '_element' ];
+
+ foreach ( $expectedKeys as $expectedKey ) {
+ $this->assertArrayHasKey( $expectedKey, $data['debuginfo'], "debuginfo has $expectedKey" );
+ }
+
+ $xml = ApiFormatXml::recXmlPrint( 'help', $data, null );
+
+ // exception not thrown
+ $this->assertInternalType( 'string', $xml );
+ }
+
+ /**
+ * @param string[] $params
+ * @param string $requestUrl
+ *
+ * @return FauxRequest
+ */
+ private function newApiRequest( array $params, $requestUrl ) {
+ $request = $this->getMockBuilder( FauxRequest::class )
+ ->setMethods( [ 'getRequestURL' ] )
+ ->setConstructorArgs( [
+ $params
+ ] )
+ ->getMock();
+
+ $request->expects( $this->any() )
+ ->method( 'getRequestURL' )
+ ->will( $this->returnValue( $requestUrl ) );
+
+ return $request;
+ }
+
+}