2 use MediaWiki\MediaWikiServices;
5 * Test class for Import methods.
9 * @author Sebastian Brückner < sebastian.brueckner@student.hpi.uni-potsdam.de >
11 class ImportTest extends MediaWikiLangTestCase {
13 private function getDataSource( $xml ) {
14 return new ImportStringSource( $xml );
18 * @covers WikiImporter
19 * @dataProvider getUnknownTagsXML
22 * @param string $title
24 public function testUnknownXMLTags( $xml, $text, $title ) {
25 $source = $this->getDataSource( $xml );
27 $importer = new WikiImporter(
29 MediaWikiServices::getInstance()->getMainConfig()
32 $importer->doImport();
33 $title = Title::newFromText( $title );
34 $this->assertTrue( $title->exists() );
36 $this->assertEquals( WikiPage::factory( $title )->getContent()->getNativeData(), $text );
39 public function getUnknownTagsXML() {
40 // @codingStandardsIgnoreStart Generic.Files.LineLength
44 <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">
45 <page unknown="123" dontknow="533">
46 <title>TestImportPage</title>
47 <unknowntag>Should be ignored</unknowntag>
49 <id unknown="123" dontknow="533">14</id>
51 <id unknown="123" dontknow="533">15</id>
52 <unknowntag>Should be ignored</unknowntag>
53 <timestamp>2016-01-03T11:18:43Z</timestamp>
55 <unknowntag>Should be ignored</unknowntag>
56 <username unknown="123" dontknow="533">Admin</username>
59 <model>wikitext</model>
60 <format>text/x-wiki</format>
61 <text xml:space="preserve" bytes="0">noitazinagro tseb eht si ikiWaideM</text>
62 <sha1>phoiac9h4m842xq45sp7s6u21eteeq1</sha1>
63 <unknowntag>Should be ignored</unknowntag>
66 <unknowntag>Should be ignored</unknowntag>
70 'noitazinagro tseb eht si ikiWaideM',
74 // @codingStandardsIgnoreEnd
78 * @covers WikiImporter::handlePage
79 * @dataProvider getRedirectXML
81 * @param string|null $redirectTitle
83 public function testHandlePageContainsRedirect( $xml, $redirectTitle ) {
84 $source = $this->getDataSource( $xml );
87 $callback = function ( Title $title, ForeignTitle $foreignTitle, $revCount,
88 $sRevCount, $pageInfo ) use ( &$redirect ) {
89 if ( array_key_exists( 'redirect', $pageInfo ) ) {
90 $redirect = $pageInfo['redirect'];
94 $importer = new WikiImporter(
96 MediaWikiServices::getInstance()->getMainConfig()
98 $importer->setPageOutCallback( $callback );
99 $importer->doImport();
101 $this->assertEquals( $redirectTitle, $redirect );
104 public function getRedirectXML() {
105 // @codingStandardsIgnoreStart Generic.Files.LineLength
109 <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">
114 <redirect title="Test22"/>
117 <timestamp>2014-05-27T10:00:00Z</timestamp>
119 <username>Admin</username>
122 <comment>Admin moved page [[Test]] to [[Test22]]</comment>
123 <model>wikitext</model>
124 <format>text/x-wiki</format>
125 <text xml:space="preserve" bytes="20">#REDIRECT [[Test22]]</text>
126 <sha1>tq456o9x3abm7r9ozi6km8yrbbc56o6</sha1>
136 <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">
143 <timestamp>2014-05-27T11:00:00Z</timestamp>
145 <username>Admin</username>
148 <text xml:space="preserve" bytes="4">Abcd</text>
149 <sha1>n7uomjq96szt60fy5w3x7ahf7q8m8rh</sha1>
150 <model>wikitext</model>
151 <format>text/x-wiki</format>
160 // @codingStandardsIgnoreEnd
164 * @covers WikiImporter::handleSiteInfo
165 * @dataProvider getSiteInfoXML
167 * @param array|null $namespaces
169 public function testSiteInfoContainsNamespaces( $xml, $namespaces ) {
170 $source = $this->getDataSource( $xml );
172 $importNamespaces = null;
173 $callback = function ( array $siteinfo, $innerImporter ) use ( &$importNamespaces ) {
174 $importNamespaces = $siteinfo['_namespaces'];
177 $importer = new WikiImporter(
179 MediaWikiServices::getInstance()->getMainConfig()
181 $importer->setSiteInfoCallback( $callback );
182 $importer->doImport();
184 $this->assertEquals( $importNamespaces, $namespaces );
187 public function getSiteInfoXML() {
188 // @codingStandardsIgnoreStart Generic.Files.LineLength
192 <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">
195 <namespace key="-2" case="first-letter">Media</namespace>
196 <namespace key="-1" case="first-letter">Special</namespace>
197 <namespace key="0" case="first-letter" />
198 <namespace key="1" case="first-letter">Talk</namespace>
199 <namespace key="2" case="first-letter">User</namespace>
200 <namespace key="3" case="first-letter">User talk</namespace>
201 <namespace key="100" case="first-letter">Portal</namespace>
202 <namespace key="101" case="first-letter">Portal talk</namespace>
216 '101' => 'Portal talk',
220 // @codingStandardsIgnoreEnd