<?php 
 | 
/** 
 | 
 * PhpUnderControl_PhalApiRequestFormatterFile_Test 
 | 
 * 
 | 
 * 针对 ../../../PhalApi/Request/Formatter/File.php PhalApi_Request_Formatter_File 类的PHPUnit单元测试 
 | 
 * 
 | 
 * @author: dogstar 20160101 
 | 
 */ 
 | 
  
 | 
require_once dirname(__FILE__) . '/../../test_env.php'; 
 | 
  
 | 
if (!class_exists('PhalApi_Request_Formatter_File')) { 
 | 
    require dirname(__FILE__) . '/../../../PhalApi/Request/Formatter/File.php'; 
 | 
} 
 | 
  
 | 
class PhpUnderControl_PhalApiRequestFormatterFile_Test extends PHPUnit_Framework_TestCase 
 | 
{ 
 | 
    public $phalApiRequestFormatterFile; 
 | 
  
 | 
    protected function setUp() 
 | 
    { 
 | 
        parent::setUp(); 
 | 
  
 | 
        $this->phalApiRequestFormatterFile = new PhalApi_Request_Formatter_File(); 
 | 
    } 
 | 
  
 | 
    protected function tearDown() 
 | 
    { 
 | 
    } 
 | 
  
 | 
  
 | 
    /** 
 | 
     * @group testParse 
 | 
     */  
 | 
    public function testParse() 
 | 
    { 
 | 
        $value = array(); 
 | 
  
 | 
        $_FILES['aFile'] = array('name' => 'aHa~', 'type' => 'image/jpeg', 'size' => 100, 'tmp_name' => '/tmp/123456', 'error' => 0); 
 | 
  
 | 
        $rule = array('name' => 'aFile', 'range' => array('image/jpeg'), 'min' => 50, 'max' => 1024, 'require' => true, 'default' => array(), 'type' => 'file'); 
 | 
  
 | 
        $rs = $this->phalApiRequestFormatterFile->parse($value, $rule); 
 | 
    } 
 | 
  
 | 
    /** 
 | 
     * @dataProvider provideFileForSuffix 
 | 
     */ 
 | 
    public function testSuffixSingleInArray($fileIndex, $fileData) 
 | 
    { 
 | 
        $_FILES[$fileIndex] = $fileData; 
 | 
        $value = array(); 
 | 
  
 | 
        $rule = array( 
 | 
            'name' => $fileIndex,  
 | 
            'require' => true,  
 | 
            'default' => array(),  
 | 
            'ext' => array('txt'), 
 | 
            'type' => 'file', 
 | 
        ); 
 | 
        $rs = $this->phalApiRequestFormatterFile->parse($value, $rule); 
 | 
        $this->assertEquals($fileData, $rs); 
 | 
    } 
 | 
  
 | 
    /** 
 | 
     * @dataProvider provideFileForSuffix 
 | 
     */ 
 | 
    public function testSuffixSingleInString($fileIndex, $fileData) 
 | 
    { 
 | 
        $_FILES[$fileIndex] = $fileData; 
 | 
        $value = array(); 
 | 
  
 | 
        $rule = array( 
 | 
            'name' => $fileIndex,  
 | 
            'require' => true,  
 | 
            'default' => array(),  
 | 
            'ext' => 'txt', 
 | 
            'type' => 'file', 
 | 
        ); 
 | 
        $rs = $this->phalApiRequestFormatterFile->parse($value, $rule); 
 | 
        $this->assertEquals($fileData, $rs); 
 | 
    } 
 | 
  
 | 
    /** 
 | 
     * @dataProvider provideFileForSuffix 
 | 
     */ 
 | 
    public function testSuffixMultiInArray($fileIndex, $fileData) 
 | 
    { 
 | 
        $_FILES[$fileIndex] = $fileData; 
 | 
        $value = array(); 
 | 
  
 | 
        $rule = array( 
 | 
            'name' => $fileIndex,  
 | 
            'require' => true,  
 | 
            'default' => array(),  
 | 
            'ext' => array('TXT', 'dat', 'bak'), 
 | 
            'type' => 'file', 
 | 
        ); 
 | 
        $rs = $this->phalApiRequestFormatterFile->parse($value, $rule); 
 | 
        $this->assertEquals($fileData, $rs); 
 | 
    } 
 | 
  
 | 
    /** 
 | 
     * @dataProvider provideFileForSuffix 
 | 
     */ 
 | 
    public function testSuffixSingleInMulti($fileIndex, $fileData) 
 | 
    { 
 | 
        $_FILES[$fileIndex] = $fileData; 
 | 
        $value = array(); 
 | 
  
 | 
        $rule = array( 
 | 
            'name' => $fileIndex,  
 | 
            'require' => true,  
 | 
            'default' => array(),  
 | 
            'ext' => 'DAT, txt, baK', 
 | 
            'type' => 'file', 
 | 
        ); 
 | 
        $rs = $this->phalApiRequestFormatterFile->parse($value, $rule); 
 | 
        $this->assertEquals($fileData, $rs); 
 | 
    } 
 | 
  
 | 
    /** 
 | 
     * @expectedException PhalApi_Exception_BadRequest 
 | 
     */ 
 | 
    public function testSuffixForSpecialBug() 
 | 
    { 
 | 
        // no ext 
 | 
        $aFile = array( 
 | 
            'name' => '2016',  
 | 
            'type' => 'application/text',  
 | 
            'size' => 100,  
 | 
            'tmp_name' => '/tmp/123456',  
 | 
            'error' => 0 
 | 
        ); 
 | 
        $_FILES['aFile'] = $aFile; 
 | 
        $value = array(); 
 | 
  
 | 
        $rule = array( 
 | 
            'name' => 'aFile',  
 | 
            'require' => true,  
 | 
            'default' => array(),  
 | 
            'ext' => 'txt, DAT, baK,', //小心最后的逗号 
 | 
            'type' => 'file', 
 | 
        ); 
 | 
        $rs = $this->phalApiRequestFormatterFile->parse($value, $rule); 
 | 
    } 
 | 
  
 | 
    /** 
 | 
     * @dataProvider provideFileForSuffix 
 | 
     * @expectedException PhalApi_Exception_BadRequest 
 | 
     */ 
 | 
    public function testSuffixMultiInArrayAndExcpetion($fileIndex, $fileData) 
 | 
    { 
 | 
        $_FILES[$fileIndex] = $fileData; 
 | 
        $value = array(); 
 | 
  
 | 
        $rule = array( 
 | 
            'name' => $fileIndex,  
 | 
            'require' => true,  
 | 
            'default' => array(),  
 | 
            'ext' => array('XML', 'HTML'), 
 | 
            'type' => 'file', 
 | 
        ); 
 | 
        $rs = $this->phalApiRequestFormatterFile->parse($value, $rule); 
 | 
    } 
 | 
  
 | 
    public function provideFileForSuffix() 
 | 
    { 
 | 
        // one ext 
 | 
        $bFile = array( 
 | 
            'name' => '2016.txt',  
 | 
            'type' => 'application/text',  
 | 
            'size' => 100,  
 | 
            'tmp_name' => '/tmp/123456',  
 | 
            'error' => 0 
 | 
        ); 
 | 
        // tow ext 
 | 
        $cFile = array( 
 | 
            'name' => '2016.log.txt',  
 | 
            'type' => 'application/text',  
 | 
            'size' => 100,  
 | 
            'tmp_name' => '/tmp/123456',  
 | 
            'error' => 0 
 | 
        ); 
 | 
  
 | 
        return array( 
 | 
            array('bFile', $bFile), 
 | 
            array('cFile', $cFile), 
 | 
        ); 
 | 
    } 
 | 
  
 | 
    public function testParseNotRequire() 
 | 
    { 
 | 
        $value = array(); 
 | 
  
 | 
        $rule = array( 
 | 
            'name' => 'maybeFile',  
 | 
            'require' => false,  
 | 
            'type' => 'file', 
 | 
        ); 
 | 
        $rs = $this->phalApiRequestFormatterFile->parse($value, $rule); 
 | 
        $this->assertNull($rs); 
 | 
    } 
 | 
  
 | 
    public function testParseNotRequireButUpload() 
 | 
    { 
 | 
        $_FILES['maybeFile'] = array( 
 | 
            'name' => '2016.log.txt',  
 | 
            'type' => 'application/text',  
 | 
            'size' => 100,  
 | 
            'tmp_name' => '/tmp/123456',  
 | 
            'error' => 0 
 | 
        ); 
 | 
        $value = array(); 
 | 
  
 | 
        $rule = array( 
 | 
            'name' => 'maybeFile',  
 | 
            'require' => false,  
 | 
            'type' => 'file', 
 | 
        ); 
 | 
        $rs = $this->phalApiRequestFormatterFile->parse($value, $rule); 
 | 
        $this->assertNotNull($rs); 
 | 
    } 
 | 
} 
 |