From: Stanislav Malyshev Date: Tue, 16 Jan 2018 23:11:08 +0000 (-0800) Subject: Create factory for MWHttpRequest X-Git-Tag: 1.31.0-rc.0~819^2 X-Git-Url: https://git.heureux-cyclage.org/?p=lhc%2Fweb%2Fwiklou.git;a=commitdiff_plain;h=ebbfe592fe02e38ab2201c0141e7468284e8ff68 Create factory for MWHttpRequest This will allow classes that need MWHttpRequest to inject HttpRequestFactory and thus make it overridable and testable. Also made MWHttpRequest abstract class since it doesn't implement execute anyway. Maybe a good idea to move execute to an abstract method? Change-Id: I5c0e035542ff5f791a21a95ed13bed4cea6906d0 --- diff --git a/autoload.php b/autoload.php index 5d6104cc04..3302415ba2 100644 --- a/autoload.php +++ b/autoload.php @@ -878,6 +878,7 @@ $wgAutoloadLocalClasses = [ 'MediaWiki\\EditPage\\TextboxBuilder' => __DIR__ . '/includes/editpage/TextboxBuilder.php', 'MediaWiki\\Edit\\PreparedEdit' => __DIR__ . '/includes/edit/PreparedEdit.php', 'MediaWiki\\HeaderCallback' => __DIR__ . '/includes/HeaderCallback.php', + 'MediaWiki\\Http\\HttpRequestFactory' => __DIR__ . '/includes/http/HttpRequestFactory.php', 'MediaWiki\\Interwiki\\ClassicInterwikiLookup' => __DIR__ . '/includes/interwiki/ClassicInterwikiLookup.php', 'MediaWiki\\Interwiki\\InterwikiLookup' => __DIR__ . '/includes/interwiki/InterwikiLookup.php', 'MediaWiki\\Interwiki\\InterwikiLookupAdapter' => __DIR__ . '/includes/interwiki/InterwikiLookupAdapter.php', diff --git a/includes/MediaWikiServices.php b/includes/MediaWikiServices.php index 5b173cd122..00767c7f6c 100644 --- a/includes/MediaWikiServices.php +++ b/includes/MediaWikiServices.php @@ -10,6 +10,7 @@ use GenderCache; use GlobalVarConfig; use Hooks; use IBufferingStatsdDataFactory; +use MediaWiki\Http\HttpRequestFactory; use MediaWiki\Preferences\PreferencesFactory; use MediaWiki\Shell\CommandFactory; use MediaWiki\Storage\BlobStore; @@ -734,6 +735,14 @@ class MediaWikiServices extends ServiceContainer { return $this->getService( 'PreferencesFactory' ); } + /** + * @since 1.31 + * @return HttpRequestFactory + */ + public function getHttpRequestFactory() { + return $this->getService( 'HttpRequestFactory' ); + } + /////////////////////////////////////////////////////////////////////////// // NOTE: When adding a service getter here, don't forget to add a test // case for it in MediaWikiServicesTest::provideGetters() and in diff --git a/includes/ServiceWiring.php b/includes/ServiceWiring.php index 79e5b848f7..dab3b5cf6c 100644 --- a/includes/ServiceWiring.php +++ b/includes/ServiceWiring.php @@ -508,6 +508,10 @@ return [ return new DefaultPreferencesFactory( $config, $wgContLang, $authManager, $linkRenderer ); }, + 'HttpRequestFactory' => function ( MediaWikiServices $services ) { + return new \MediaWiki\Http\HttpRequestFactory(); + }, + /////////////////////////////////////////////////////////////////////////// // NOTE: When adding a service here, don't forget to add a getter function // in the MediaWikiServices class. The convenience getter should just call diff --git a/includes/http/HttpRequestFactory.php b/includes/http/HttpRequestFactory.php new file mode 100644 index 0000000000..80f9b68862 --- /dev/null +++ b/includes/http/HttpRequestFactory.php @@ -0,0 +1,82 @@ +getHttpRequestFactory() + ->create( $url, $options, $caller ); } /** diff --git a/tests/integration/includes/http/MWHttpRequestTestCase.php b/tests/integration/includes/http/MWHttpRequestTestCase.php index 81473df227..3b02e28b44 100644 --- a/tests/integration/includes/http/MWHttpRequestTestCase.php +++ b/tests/integration/includes/http/MWHttpRequestTestCase.php @@ -2,7 +2,7 @@ use Wikimedia\TestingAccessWrapper; -class MWHttpRequestTestCase extends PHPUnit_Framework_TestCase { +abstract class MWHttpRequestTestCase extends PHPUnit_Framework_TestCase { protected static $httpEngine; protected $oldHttpEngine; diff --git a/tests/phpunit/includes/MediaWikiServicesTest.php b/tests/phpunit/includes/MediaWikiServicesTest.php index dbb7799b55..d19340b462 100644 --- a/tests/phpunit/includes/MediaWikiServicesTest.php +++ b/tests/phpunit/includes/MediaWikiServicesTest.php @@ -1,4 +1,6 @@ [ 'BlobStore', BlobStore::class ], '_SqlBlobStore' => [ '_SqlBlobStore', SqlBlobStore::class ], 'RevisionStore' => [ 'RevisionStore', RevisionStore::class ], + 'HttpRequestFactory' => [ 'HttpRequestFactory', HttpRequestFactory::class ], ]; }