| <?php | 
| /** | 
|  * PhpUnderControl_PhalApiCryptMcrypt_Test | 
|  * | 
|  * 针对 ./../../PhalApi/Crypt/Mcrypt.php PhalApi_Crypt_Mcrypt 类的PHPUnit单元测试 | 
|  * | 
|  * @author: dogstar 20141210 | 
|  */ | 
|   | 
| require_once dirname(__FILE__) . '/../test_env.php'; | 
|   | 
| if (!class_exists('PhalApi_Crypt_Mcrypt')) { | 
|     require dirname(__FILE__) . '/../../PhalApi/Crypt/Mcrypt.php'; | 
| } | 
|   | 
| class PhpUnderControl_PhalApiCryptMcrypt_Test extends PHPUnit_Framework_TestCase | 
| { | 
|     public $coreCryptMcrypt; | 
|   | 
|     protected function setUp() | 
|     { | 
|         parent::setUp(); | 
|   | 
|         if (!function_exists('mcrypt_module_open')) { | 
|             throw new Exception('function mcrypt_module_open() not exists'); | 
|         } | 
|   | 
|         $this->coreCryptMcrypt = new PhalApi_Crypt_Mcrypt(); | 
|     } | 
|   | 
|     protected function tearDown() | 
|     { | 
|     } | 
|   | 
|   | 
|     /** | 
|      * @group testEncrypt | 
|      */  | 
|     public function testEncrypt() | 
|     { | 
|         $data = 'dogstar test哈哈 !!~~ '; | 
|         $key = '2014'; | 
|   | 
|         $rs = $this->coreCryptMcrypt->encrypt($data, $key); | 
|   | 
|         return array($data, $key, $rs); | 
|     } | 
|   | 
|     /** | 
|      * @depends testEncrypt | 
|      * @group testDecrypt | 
|      */  | 
|     public function testDecrypt($rsData) | 
|     { | 
|         list($data, $key, $encryptData) = $rsData; | 
|   | 
|         $rs = $this->coreCryptMcrypt->decrypt($encryptData, $key); | 
|   | 
|         $this->assertEquals($data, $rs); | 
|     } | 
|   | 
|     /** | 
|      * @dataProvider provideIv | 
|      */ | 
|     public function testWithIV($iv) | 
|     { | 
|         $mcrypt = new PhalApi_Crypt_Mcrypt($iv); | 
|   | 
|         $data = 'dogstar'; | 
|         $key = 'phalapi'; | 
|         $this->assertEquals($mcrypt->decrypt($mcrypt->encrypt($data, $key), $key), $data); | 
|     } | 
|   | 
|     public function provideIv() | 
|     { | 
|         return array( | 
|             array(12), | 
|             array('12'), | 
|             array('12345678'), | 
|             array('1234567890'), | 
|             array('&632(jnD'), | 
|             ); | 
|     } | 
|   | 
|     /** | 
|      * @dataProvider provideComplicateData | 
|      */ | 
|     public function testWorkWithMoreComplicateData($data) | 
|     { | 
|         $mcrypt = new PhalApi_Crypt_Mcrypt('12345678'); | 
|         $key = 'phalapi'; | 
|   | 
|         $encryptData = $mcrypt->encrypt($data, $key); | 
|   | 
|         $decryptData = $mcrypt->decrypt($encryptData, $key); | 
|   | 
|         $this->assertEquals($data, $decryptData); | 
|     } | 
|   | 
|     public function provideComplicateData() | 
|     { | 
|         return array( | 
|             array(''), | 
|             array(' '), | 
|             array('0'), | 
|             array(0), | 
|             array(1), | 
|             array('12#d_'), | 
|             array(12345678), | 
|             array('来点中文行不行?'), | 
|             array('843435Jhe*&混合'), | 
|             ); | 
|     } | 
| } |