Merge "Tweaked BagOStuff::lock() retry times slightly to be faster"
[lhc/web/wiklou.git] / tests / phpunit / includes / ImportTest.php
1 <?php
2
3 /**
4 * Test class for Import methods.
5 *
6 * @group Database
7 *
8 * @author Sebastian Brückner < sebastian.brueckner@student.hpi.uni-potsdam.de >
9 */
10 class ImportTest extends MediaWikiLangTestCase {
11
12 private function getInputStreamSource( $xml ) {
13 $file = 'data:application/xml,' . $xml;
14 $status = ImportStreamSource::newFromFile( $file );
15 if ( !$status->isGood() ) {
16 throw new MWException( "Cannot create InputStreamSource." );
17 }
18 return $status->value;
19 }
20
21 /**
22 * @covers WikiImporter::handlePage
23 * @dataProvider getRedirectXML
24 * @param string $xml
25 * @param string|null $redirectTitle
26 */
27 public function testHandlePageContainsRedirect( $xml, $redirectTitle ) {
28 $source = $this->getInputStreamSource( $xml );
29
30 $redirect = null;
31 $callback = function ( Title $title, ForeignTitle $foreignTitle, $revCount,
32 $sRevCount, $pageInfo ) use ( &$redirect ) {
33 if ( array_key_exists( 'redirect', $pageInfo ) ) {
34 $redirect = $pageInfo['redirect'];
35 }
36 };
37
38 $importer = new WikiImporter( $source, ConfigFactory::getDefaultInstance()->makeConfig( 'main' ) );
39 $importer->setPageOutCallback( $callback );
40 $importer->doImport();
41
42 $this->assertEquals( $redirectTitle, $redirect );
43 }
44
45 public function getRedirectXML() {
46 return array(
47 array(
48 <<< EOF
49 <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">
50 <page>
51 <title>Test</title>
52 <ns>0</ns>
53 <id>21</id>
54 <redirect title="Test22"/>
55 <revision>
56 <id>20</id>
57 <timestamp>2014-05-27T10:00:00Z</timestamp>
58 <contributor>
59 <username>Admin</username>
60 <id>10</id>
61 </contributor>
62 <comment>Admin moved page [[Test]] to [[Test22]]</comment>
63 <model>wikitext</model>
64 <format>text/x-wiki</format>
65 <text xml:space="preserve" bytes="20">#REDIRECT [[Test22]]</text>
66 <sha1>tq456o9x3abm7r9ozi6km8yrbbc56o6</sha1>
67 </revision>
68 </page>
69 </mediawiki>
70 EOF
71 ,
72 'Test22'
73 ),
74 array(
75 <<< EOF
76 <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">
77 <page>
78 <title>Test</title>
79 <ns>0</ns>
80 <id>42</id>
81 <revision>
82 <id>421</id>
83 <timestamp>2014-05-27T11:00:00Z</timestamp>
84 <contributor>
85 <username>Admin</username>
86 <id>10</id>
87 </contributor>
88 <text xml:space="preserve" bytes="4">Abcd</text>
89 <sha1>n7uomjq96szt60fy5w3x7ahf7q8m8rh</sha1>
90 <model>wikitext</model>
91 <format>text/x-wiki</format>
92 </revision>
93 </page>
94 </mediawiki>
95 EOF
96 ,
97 null
98 ),
99 );
100 }
101
102 /**
103 * @covers WikiImporter::handleSiteInfo
104 * @dataProvider getSiteInfoXML
105 * @param string $xml
106 * @param array|null $namespaces
107 */
108 public function testSiteInfoContainsNamespaces( $xml, $namespaces ) {
109 $source = $this->getInputStreamSource( $xml );
110
111 $importNamespaces = null;
112 $callback = function ( array $siteinfo, $innerImporter ) use ( &$importNamespaces ) {
113 $importNamespaces = $siteinfo['_namespaces'];
114 };
115
116 $importer = new WikiImporter( $source, ConfigFactory::getDefaultInstance()->makeConfig( 'main' ) );
117 $importer->setSiteInfoCallback( $callback );
118 $importer->doImport();
119
120 $this->assertEquals( $importNamespaces, $namespaces );
121 }
122
123 public function getSiteInfoXML() {
124 return array(
125 array(
126 <<< EOF
127 <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">
128 <siteinfo>
129 <namespaces>
130 <namespace key="-2" case="first-letter">Media</namespace>
131 <namespace key="-1" case="first-letter">Special</namespace>
132 <namespace key="0" case="first-letter" />
133 <namespace key="1" case="first-letter">Talk</namespace>
134 <namespace key="2" case="first-letter">User</namespace>
135 <namespace key="3" case="first-letter">User talk</namespace>
136 <namespace key="100" case="first-letter">Portal</namespace>
137 <namespace key="101" case="first-letter">Portal talk</namespace>
138 </namespaces>
139 </siteinfo>
140 </mediawiki>
141 EOF
142 ,
143 array(
144 '-2' => 'Media',
145 '-1' => 'Special',
146 '0' => '',
147 '1' => 'Talk',
148 '2' => 'User',
149 '3' => 'User talk',
150 '100' => 'Portal',
151 '101' => 'Portal talk',
152 )
153 ),
154 );
155 }
156
157 }