3 namespace Wikimedia\ParamValidator\Util
;
5 use RecursiveDirectoryIterator
;
6 use RecursiveIteratorIterator
;
7 use Wikimedia\AtEase\AtEase
;
9 class UploadedFileTestBase
extends \PHPUnit\Framework\TestCase
{
11 /** @var string|null */
12 protected static $tmpdir;
14 public static function setUpBeforeClass() {
15 parent
::setUpBeforeClass();
17 // Create a temporary directory for this test's files.
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 ) {
28 if ( self
::$tmpdir === null ) {
29 self
::fail( "Could not create temporary directory '{$base}XXXX'" );
33 public static function tearDownAfterClass() {
34 parent
::tearDownAfterClass();
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
42 foreach ( $iter as $file ) {
43 if ( $file->isDir() ) {
44 rmdir( $file->getRealPath() );
46 unlink( $file->getRealPath() );
49 rmdir( self
::$tmpdir );
54 protected static function assertTmpdir() {
55 if ( self
::$tmpdir === null ||
!is_dir( self
::$tmpdir ) ) {
56 self
::fail( 'No temporary directory for ' . static::class );
61 * @param string $prefix For tempnam()
62 * @param string $content Contents of the file
63 * @return string Filename
65 protected function makeTemp( $prefix, $content = 'foobar' ) {
68 $filename = tempnam( self
::$tmpdir, $prefix );
69 if ( $filename === false ) {
70 self
::fail( 'Failed to create temporary file' );
75 file_put_contents( $filename, $content ),
76 'Writing test temporary file'