Merge "Selenium: replace UserLoginPage with BlankPage where possible"
[lhc/web/wiklou.git] / tests / phpunit / includes / libs / ParamValidator / Util / UploadedFileTestBase.php
1 <?php
2
3 namespace Wikimedia\ParamValidator\Util;
4
5 use RecursiveDirectoryIterator;
6 use RecursiveIteratorIterator;
7 use Wikimedia\AtEase\AtEase;
8
9 class UploadedFileTestBase extends \PHPUnit\Framework\TestCase {
10
11 /** @var string|null */
12 protected static $tmpdir;
13
14 public static function setUpBeforeClass() {
15 parent::setUpBeforeClass();
16
17 // Create a temporary directory for this test's files.
18 self::$tmpdir = null;
19 $base = sys_get_temp_dir() . DIRECTORY_SEPARATOR .
20 'phpunit-ParamValidator-UploadedFileTest-' . time() . '-' . getmypid() . '-';
21 for ( $i = 0; $i < 10000; $i++ ) {
22 $dir = $base . sprintf( '%04d', $i );
23 if ( AtEase::quietCall( 'mkdir', $dir, 0700, false ) === true ) {
24 self::$tmpdir = $dir;
25 break;
26 }
27 }
28 if ( self::$tmpdir === null ) {
29 self::fail( "Could not create temporary directory '{$base}XXXX'" );
30 }
31 }
32
33 public static function tearDownAfterClass() {
34 parent::tearDownAfterClass();
35
36 // Clean up temporary directory.
37 if ( self::$tmpdir !== null ) {
38 $iter = new RecursiveIteratorIterator(
39 new RecursiveDirectoryIterator( self::$tmpdir, RecursiveDirectoryIterator::SKIP_DOTS ),
40 RecursiveIteratorIterator::CHILD_FIRST
41 );
42 foreach ( $iter as $file ) {
43 if ( $file->isDir() ) {
44 rmdir( $file->getRealPath() );
45 } else {
46 unlink( $file->getRealPath() );
47 }
48 }
49 rmdir( self::$tmpdir );
50 self::$tmpdir = null;
51 }
52 }
53
54 protected static function assertTmpdir() {
55 if ( self::$tmpdir === null || !is_dir( self::$tmpdir ) ) {
56 self::fail( 'No temporary directory for ' . static::class );
57 }
58 }
59
60 /**
61 * @param string $prefix For tempnam()
62 * @param string $content Contents of the file
63 * @return string Filename
64 */
65 protected function makeTemp( $prefix, $content = 'foobar' ) {
66 self::assertTmpdir();
67
68 $filename = tempnam( self::$tmpdir, $prefix );
69 if ( $filename === false ) {
70 self::fail( 'Failed to create temporary file' );
71 }
72
73 self::assertSame(
74 strlen( $content ),
75 file_put_contents( $filename, $content ),
76 'Writing test temporary file'
77 );
78
79 return $filename;
80 }
81
82 }