Revert "Revert "jQuery 1.8""
[lhc/web/wiklou.git] / tests / phpunit / suites / UploadFromUrlTestSuite.php
1 <?php
2
3 require_once( dirname( dirname( __FILE__ ) ) . '/includes/upload/UploadFromUrlTest.php' );
4
5 class UploadFromUrlTestSuite extends PHPUnit_Framework_TestSuite {
6 public $savedGlobals = array();
7
8 public static function addTables( &$tables ) {
9 $tables[] = 'user_properties';
10 $tables[] = 'filearchive';
11 $tables[] = 'logging';
12 $tables[] = 'updatelog';
13 $tables[] = 'iwlinks';
14
15 return true;
16 }
17
18 function setUp() {
19 global $wgParser, $wgParserConf, $IP, $messageMemc, $wgMemc,
20 $wgUser, $wgLang, $wgOut, $wgRequest, $wgStyleDirectory, $wgEnableParserCache,
21 $wgNamespaceAliases, $wgNamespaceProtection, $parserMemc;
22
23 $tmpGlobals = array();
24
25 $tmpGlobals['wgScript'] = '/index.php';
26 $tmpGlobals['wgScriptPath'] = '/';
27 $tmpGlobals['wgArticlePath'] = '/wiki/$1';
28 $tmpGlobals['wgStyleSheetPath'] = '/skins';
29 $tmpGlobals['wgStylePath'] = '/skins';
30 $tmpGlobals['wgThumbnailScriptPath'] = false;
31 $tmpGlobals['wgLocalFileRepo'] = array(
32 'class' => 'LocalRepo',
33 'name' => 'local',
34 'url' => 'http://example.com/images',
35 'hashLevels' => 2,
36 'transformVia404' => false,
37 'backend' => new FSFileBackend( array(
38 'name' => 'local-backend',
39 'lockManager' => 'fsLockManager',
40 'containerPaths' => array(
41 'local-public' => wfTempDir() . '/test-repo/public',
42 'local-thumb' => wfTempDir() . '/test-repo/thumb',
43 'local-temp' => wfTempDir() . '/test-repo/temp',
44 'local-deleted' => wfTempDir() . '/test-repo/delete',
45 )
46 ) ),
47 );
48 foreach ( $tmpGlobals as $var => $val ) {
49 if ( array_key_exists( $var, $GLOBALS ) ) {
50 $this->savedGlobals[$var] = $GLOBALS[$var];
51 }
52 $GLOBALS[$var] = $val;
53 }
54
55 $wgNamespaceProtection[NS_MEDIAWIKI] = 'editinterface';
56 $wgNamespaceAliases['Image'] = NS_FILE;
57 $wgNamespaceAliases['Image_talk'] = NS_FILE_TALK;
58
59
60 $wgEnableParserCache = false;
61 DeferredUpdates::clearPendingUpdates();
62 $wgMemc = wfGetMainCache();
63 $messageMemc = wfGetMessageCacheStorage();
64 $parserMemc = wfGetParserCacheStorage();
65
66 // $wgContLang = new StubContLang;
67 $wgUser = new User;
68 $context = new RequestContext;
69 $wgLang = $context->getLanguage();
70 $wgOut = $context->getOutput();
71 $wgParser = new StubObject( 'wgParser', $wgParserConf['class'], array( $wgParserConf ) );
72 $wgRequest = $context->getRequest();
73
74 if ( $wgStyleDirectory === false ) {
75 $wgStyleDirectory = "$IP/skins";
76 }
77
78 RepoGroup::destroySingleton();
79 FileBackendGroup::destroySingleton();
80 }
81
82 public function tearDown() {
83 foreach ( $this->savedGlobals as $var => $val ) {
84 $GLOBALS[$var] = $val;
85 }
86 // Restore backends
87 RepoGroup::destroySingleton();
88 FileBackendGroup::destroySingleton();
89
90 $this->teardownUploadDir( $this->uploadDir );
91 }
92
93 private $uploadDir;
94 private $keepUploads;
95
96 /**
97 * Remove the dummy uploads directory
98 */
99 private function teardownUploadDir( $dir ) {
100 if ( $this->keepUploads ) {
101 return;
102 }
103
104 // delete the files first, then the dirs.
105 self::deleteFiles(
106 array (
107 "$dir/3/3a/Foobar.jpg",
108 "$dir/thumb/3/3a/Foobar.jpg/180px-Foobar.jpg",
109 "$dir/thumb/3/3a/Foobar.jpg/200px-Foobar.jpg",
110 "$dir/thumb/3/3a/Foobar.jpg/640px-Foobar.jpg",
111 "$dir/thumb/3/3a/Foobar.jpg/120px-Foobar.jpg",
112
113 "$dir/0/09/Bad.jpg",
114 )
115 );
116
117 self::deleteDirs(
118 array (
119 "$dir/3/3a",
120 "$dir/3",
121 "$dir/thumb/6/65",
122 "$dir/thumb/6",
123 "$dir/thumb/3/3a/Foobar.jpg",
124 "$dir/thumb/3/3a",
125 "$dir/thumb/3",
126
127 "$dir/0/09/",
128 "$dir/0/",
129
130 "$dir/thumb",
131 "$dir",
132 )
133 );
134 }
135
136 /**
137 * Delete the specified files, if they exist.
138 *
139 * @param $files Array: full paths to files to delete.
140 */
141 private static function deleteFiles( $files ) {
142 foreach ( $files as $file ) {
143 if ( file_exists( $file ) ) {
144 unlink( $file );
145 }
146 }
147 }
148
149 /**
150 * Delete the specified directories, if they exist. Must be empty.
151 *
152 * @param $dirs Array: full paths to directories to delete.
153 */
154 private static function deleteDirs( $dirs ) {
155 foreach ( $dirs as $dir ) {
156 if ( is_dir( $dir ) ) {
157 rmdir( $dir );
158 }
159 }
160 }
161
162 /**
163 * Create a dummy uploads directory which will contain a couple
164 * of files in order to pass existence tests.
165 *
166 * @return String: the directory
167 */
168 private function setupUploadDir() {
169 global $IP;
170
171 if ( $this->keepUploads ) {
172 $dir = wfTempDir() . '/mwParser-images';
173
174 if ( is_dir( $dir ) ) {
175 return $dir;
176 }
177 } else {
178 $dir = wfTempDir() . "/mwParser-" . mt_rand() . "-images";
179 }
180
181 wfDebug( "Creating upload directory $dir\n" );
182
183 if ( file_exists( $dir ) ) {
184 wfDebug( "Already exists!\n" );
185 return $dir;
186 }
187
188 wfMkdirParents( $dir . '/3/3a', null, __METHOD__ );
189 copy( "$IP/skins/monobook/headbg.jpg", "$dir/3/3a/Foobar.jpg" );
190
191 wfMkdirParents( $dir . '/0/09', null, __METHOD__ );
192 copy( "$IP/skins/monobook/headbg.jpg", "$dir/0/09/Bad.jpg" );
193
194 return $dir;
195 }
196
197 public static function suite() {
198 // Hack to invoke the autoloader required to get phpunit to recognize
199 // the UploadFromUrlTest class
200 class_exists( 'UploadFromUrlTest' );
201 $suite = new UploadFromUrlTestSuite( 'UploadFromUrlTest' );
202 return $suite;
203 }
204 }