4 * Test class for Import methods.
8 * @author Sebastian Brückner < sebastian.brueckner@student.hpi.uni-potsdam.de >
10 class ImportTest
extends MediaWikiLangTestCase
{
12 private function getInputStreamSource( $xml ) {
13 if ( ini_get( 'allow_url_fopen' ) != 1 ) {
14 $this->markTestSkipped( 'bug 73283: this test needs allow_url_fopen to be enabled' );
16 $file = 'data:application/xml,' . $xml;
17 $status = ImportStreamSource
::newFromFile( $file );
18 if ( !$status->isGood() ) {
19 throw new MWException( "Cannot create InputStreamSource." );
21 return $status->value
;
25 * @covers WikiImporter::handlePage
26 * @dataProvider getRedirectXML
28 * @param string|null $redirectTitle
30 public function testHandlePageContainsRedirect( $xml, $redirectTitle ) {
31 $source = $this->getInputStreamSource( $xml );
34 $callback = function ( Title
$title, ForeignTitle
$foreignTitle, $revCount,
35 $sRevCount, $pageInfo ) use ( &$redirect ) {
36 if ( array_key_exists( 'redirect', $pageInfo ) ) {
37 $redirect = $pageInfo['redirect'];
41 $importer = new WikiImporter(
43 ConfigFactory
::getDefaultInstance()->makeConfig( 'main' )
45 $importer->setPageOutCallback( $callback );
46 $importer->doImport();
48 $this->assertEquals( $redirectTitle, $redirect );
51 public function getRedirectXML() {
52 // @codingStandardsIgnoreStart Generic.Files.LineLength
56 <mediawiki xmlns
="http://www.mediawiki.org/xml/export-0.10/" xmlns
:xsi
="http://www.w3.org/2001/XMLSchema-instance" xsi
:schemaLocation
="http://www.mediawiki.org/xml/export-0.10/ http://www.mediawiki.org/xml/export-0.10.xsd" version
="0.10" xml
:lang
="en">
61 <redirect title
="Test22"/>
64 <timestamp
>2014-05-27T10
:00:00Z
</timestamp
>
66 <username
>Admin
</username
>
69 <comment
>Admin moved page
[[Test
]] to
[[Test22
]]</comment
>
70 <model
>wikitext
</model
>
71 <format
>text
/x
-wiki
</format
>
72 <text xml
:space
="preserve" bytes
="20">#REDIRECT [[Test22]]</text>
73 <sha1
>tq456o9x3abm7r9ozi6km8yrbbc56o6
</sha1
>
83 <mediawiki xmlns
="http://www.mediawiki.org/xml/export-0.9/" xmlns
:xsi
="http://www.w3.org/2001/XMLSchema-instance" xsi
:schemaLocation
="http://www.mediawiki.org/xml/export-0.9/ http://www.mediawiki.org/xml/export-0.9.xsd" version
="0.9" xml
:lang
="en">
90 <timestamp
>2014-05-27T11
:00:00Z
</timestamp
>
92 <username
>Admin
</username
>
95 <text xml
:space
="preserve" bytes
="4">Abcd
</text
>
96 <sha1
>n7uomjq96szt60fy5w3x7ahf7q8m8rh
</sha1
>
97 <model
>wikitext
</model
>
98 <format
>text
/x
-wiki
</format
>
107 // @codingStandardsIgnoreEnd
111 * @covers WikiImporter::handleSiteInfo
112 * @dataProvider getSiteInfoXML
114 * @param array|null $namespaces
116 public function testSiteInfoContainsNamespaces( $xml, $namespaces ) {
117 $source = $this->getInputStreamSource( $xml );
119 $importNamespaces = null;
120 $callback = function ( array $siteinfo, $innerImporter ) use ( &$importNamespaces ) {
121 $importNamespaces = $siteinfo['_namespaces'];
124 $importer = new WikiImporter(
126 ConfigFactory
::getDefaultInstance()->makeConfig( 'main' )
128 $importer->setSiteInfoCallback( $callback );
129 $importer->doImport();
131 $this->assertEquals( $importNamespaces, $namespaces );
134 public function getSiteInfoXML() {
135 // @codingStandardsIgnoreStart Generic.Files.LineLength
139 <mediawiki xmlns
="http://www.mediawiki.org/xml/export-0.10/" xmlns
:xsi
="http://www.w3.org/2001/XMLSchema-instance" xsi
:schemaLocation
="http://www.mediawiki.org/xml/export-0.10/ http://www.mediawiki.org/xml/export-0.10.xsd" version
="0.10" xml
:lang
="en">
142 <namespace key
="-2" case="first-letter">Media
</namespace>
143 <namespace key
="-1" case="first-letter">Special
</namespace>
144 <namespace key
="0" case="first-letter" />
145 <namespace key
="1" case="first-letter">Talk
</namespace>
146 <namespace key
="2" case="first-letter">User
</namespace>
147 <namespace key
="3" case="first-letter">User talk
</namespace>
148 <namespace key
="100" case="first-letter">Portal
</namespace>
149 <namespace key
="101" case="first-letter">Portal talk
</namespace>
163 '101' => 'Portal talk',
167 // @codingStandardsIgnoreEnd