PageRenderTime 52ms CodeModel.GetById 23ms RepoModel.GetById 1ms app.codeStats 0ms

/tests/Zend/Filter/Compress/RarTest.php

https://bitbucket.org/aboozar/zf2
PHP | 304 lines | 205 code | 35 blank | 64 comment | 9 complexity | cc631fc9e359bc0cead9eab1ca790af7 MD5 | raw file
Possible License(s): BSD-3-Clause
  1. <?php
  2. /**
  3. * Zend Framework (http://framework.zend.com/)
  4. *
  5. * @link http://github.com/zendframework/zf2 for the canonical source repository
  6. * @copyright Copyright (c) 2005-2012 Zend Technologies USA Inc. (http://www.zend.com)
  7. * @license http://framework.zend.com/license/new-bsd New BSD License
  8. * @package Zend_Filter
  9. */
  10. namespace ZendTest\Filter\Compress;
  11. use Zend\Filter\Compress\Rar as RarCompression;
  12. /**
  13. * @category Zend
  14. * @package Zend_Filter
  15. * @subpackage UnitTests
  16. * @group Zend_Filter
  17. */
  18. class RarTest extends \PHPUnit_Framework_TestCase
  19. {
  20. public function setUp()
  21. {
  22. if (!extension_loaded('rar')) {
  23. $this->markTestSkipped('This adapter needs the rar extension');
  24. }
  25. $files = array(
  26. dirname(__DIR__) . '/_files/zipextracted.txt',
  27. dirname(__DIR__) . '/_files/_compress/Compress/First/Second/zipextracted.txt',
  28. dirname(__DIR__) . '/_files/_compress/Compress/First/Second',
  29. dirname(__DIR__) . '/_files/_compress/Compress/First/zipextracted.txt',
  30. dirname(__DIR__) . '/_files/_compress/Compress/First',
  31. dirname(__DIR__) . '/_files/_compress/Compress/zipextracted.txt',
  32. dirname(__DIR__) . '/_files/_compress/Compress',
  33. dirname(__DIR__) . '/_files/_compress/zipextracted.txt',
  34. dirname(__DIR__) . '/_files/_compress'
  35. );
  36. foreach($files as $file) {
  37. if (file_exists($file)) {
  38. if (is_dir($file)) {
  39. rmdir($file);
  40. } else {
  41. unlink($file);
  42. }
  43. }
  44. }
  45. if (!file_exists(dirname(__DIR__) . '/_files/Compress/First/Second')) {
  46. mkdir(dirname(__DIR__) . '/_files/Compress/First/Second', 0777, true);
  47. file_put_contents(dirname(__DIR__) . '/_files/Compress/First/Second/zipextracted.txt', 'compress me');
  48. file_put_contents(dirname(__DIR__) . '/_files/Compress/First/zipextracted.txt', 'compress me');
  49. file_put_contents(dirname(__DIR__) . '/_files/Compress/zipextracted.txt', 'compress me');
  50. }
  51. }
  52. public function tearDown()
  53. {
  54. $files = array(
  55. dirname(__DIR__) . '/_files/zipextracted.txt',
  56. dirname(__DIR__) . '/_files/_compress/Compress/First/Second/zipextracted.txt',
  57. dirname(__DIR__) . '/_files/_compress/Compress/First/Second',
  58. dirname(__DIR__) . '/_files/_compress/Compress/First/zipextracted.txt',
  59. dirname(__DIR__) . '/_files/_compress/Compress/First',
  60. dirname(__DIR__) . '/_files/_compress/Compress/zipextracted.txt',
  61. dirname(__DIR__) . '/_files/_compress/Compress',
  62. dirname(__DIR__) . '/_files/_compress/zipextracted.txt',
  63. dirname(__DIR__) . '/_files/_compress'
  64. );
  65. foreach($files as $file) {
  66. if (file_exists($file)) {
  67. if (is_dir($file)) {
  68. rmdir($file);
  69. } else {
  70. unlink($file);
  71. }
  72. }
  73. }
  74. if (!file_exists(dirname(__DIR__) . '/_files/Compress/First/Second')) {
  75. mkdir(dirname(__DIR__) . '/_files/Compress/First/Second', 0777, true);
  76. file_put_contents(dirname(__DIR__) . '/_files/Compress/First/Second/zipextracted.txt', 'compress me');
  77. file_put_contents(dirname(__DIR__) . '/_files/Compress/First/zipextracted.txt', 'compress me');
  78. file_put_contents(dirname(__DIR__) . '/_files/Compress/zipextracted.txt', 'compress me');
  79. }
  80. }
  81. /**
  82. * Basic usage
  83. *
  84. * @return void
  85. */
  86. public function testBasicUsage()
  87. {
  88. $filter = new RarCompression(
  89. array(
  90. 'archive' => dirname(__DIR__) . '/_files/compressed.rar',
  91. 'target' => dirname(__DIR__) . '/_files/zipextracted.txt',
  92. 'callback' => array(__CLASS__, 'rarCompress')
  93. )
  94. );
  95. $content = $filter->compress('compress me');
  96. $this->assertEquals(dirname(__DIR__) . DIRECTORY_SEPARATOR . '_files'
  97. . DIRECTORY_SEPARATOR . 'compressed.rar', $content);
  98. $content = $filter->decompress($content);
  99. $this->assertEquals(dirname(__DIR__) . DIRECTORY_SEPARATOR . '_files' . DIRECTORY_SEPARATOR, $content);
  100. $content = file_get_contents(dirname(__DIR__) . '/_files/zipextracted.txt');
  101. $this->assertEquals('compress me', $content);
  102. }
  103. /**
  104. * Setting Options
  105. *
  106. * @return void
  107. */
  108. public function testRarGetSetOptions()
  109. {
  110. $filter = new RarCompression();
  111. $this->assertEquals(
  112. array(
  113. 'archive' => null,
  114. 'callback' => null,
  115. 'password' => null,
  116. 'target' => '.',
  117. ),
  118. $filter->getOptions()
  119. );
  120. $this->assertEquals(null, $filter->getOptions('archive'));
  121. $this->assertNull($filter->getOptions('nooption'));
  122. $filter->setOptions(array('nooption' => 'foo'));
  123. $this->assertNull($filter->getOptions('nooption'));
  124. $filter->setOptions(array('archive' => 'temp.txt'));
  125. $this->assertEquals('temp.txt', $filter->getOptions('archive'));
  126. }
  127. /**
  128. * Setting Archive
  129. *
  130. * @return void
  131. */
  132. public function testRarGetSetArchive()
  133. {
  134. $filter = new RarCompression();
  135. $this->assertEquals(null, $filter->getArchive());
  136. $filter->setArchive('Testfile.txt');
  137. $this->assertEquals('Testfile.txt', $filter->getArchive());
  138. $this->assertEquals('Testfile.txt', $filter->getOptions('archive'));
  139. }
  140. /**
  141. * Setting Password
  142. *
  143. * @return void
  144. */
  145. public function testRarGetSetPassword()
  146. {
  147. $filter = new RarCompression();
  148. $this->assertEquals(null, $filter->getPassword());
  149. $filter->setPassword('test');
  150. $this->assertEquals('test', $filter->getPassword());
  151. $this->assertEquals('test', $filter->getOptions('password'));
  152. $filter->setOptions(array('password' => 'test2'));
  153. $this->assertEquals('test2', $filter->getPassword());
  154. $this->assertEquals('test2', $filter->getOptions('password'));
  155. }
  156. /**
  157. * Setting Target
  158. *
  159. * @return void
  160. */
  161. public function testRarGetSetTarget()
  162. {
  163. $filter = new RarCompression();
  164. $this->assertEquals('.', $filter->getTarget());
  165. $filter->setTarget('Testfile.txt');
  166. $this->assertEquals('Testfile.txt', $filter->getTarget());
  167. $this->assertEquals('Testfile.txt', $filter->getOptions('target'));
  168. $this->setExpectedException('Zend\Filter\Exception\InvalidArgumentException', 'does not exist');
  169. $filter->setTarget('/unknown/path/to/file.txt');
  170. }
  171. /**
  172. * Setting Callback
  173. *
  174. * @return void
  175. */
  176. public function testSettingCallback()
  177. {
  178. $filter = new RarCompression();
  179. $callback = array(__CLASS__, 'rarCompress');
  180. $filter->setCallback($callback);
  181. $this->assertEquals($callback, $filter->getCallback());
  182. }
  183. public function testSettingCallbackThrowsExceptionOnMissingCallback()
  184. {
  185. $filter = new RarCompression();
  186. $this->setExpectedException('Zend\Filter\Exception\InvalidArgumentException', 'must be between');
  187. $filter->compress('test.txt');
  188. }
  189. public function testSettingCallbackThrowsExceptionOnInvalidCallback()
  190. {
  191. $filter = new RarCompression();
  192. $this->setExpectedException('Zend\Filter\Exception\InvalidArgumentException', 'must be between');
  193. $filter->setCallback('invalidCallback');
  194. }
  195. /**
  196. * Compress to Archive
  197. *
  198. * @return void
  199. */
  200. public function testRarCompressFile()
  201. {
  202. $filter = new RarCompression(
  203. array(
  204. 'archive' => dirname(__DIR__) . '/_files/compressed.rar',
  205. 'target' => dirname(__DIR__) . '/_files/zipextracted.txt',
  206. 'callback' => array(__CLASS__, 'rarCompress')
  207. )
  208. );
  209. file_put_contents(dirname(__DIR__) . '/_files/zipextracted.txt', 'compress me');
  210. $content = $filter->compress(dirname(__DIR__) . '/_files/zipextracted.txt');
  211. $this->assertEquals(dirname(__DIR__) . DIRECTORY_SEPARATOR . '_files'
  212. . DIRECTORY_SEPARATOR . 'compressed.rar', $content);
  213. $content = $filter->decompress($content);
  214. $this->assertEquals(dirname(__DIR__) . DIRECTORY_SEPARATOR . '_files' . DIRECTORY_SEPARATOR, $content);
  215. $content = file_get_contents(dirname(__DIR__) . '/_files/zipextracted.txt');
  216. $this->assertEquals('compress me', $content);
  217. }
  218. /**
  219. * Compress directory to Filename
  220. *
  221. * @return void
  222. */
  223. public function testRarCompressDirectory()
  224. {
  225. $filter = new RarCompression(
  226. array(
  227. 'archive' => dirname(__DIR__) . '/_files/compressed.rar',
  228. 'target' => dirname(__DIR__) . '/_files/_compress',
  229. 'callback' => array(__CLASS__, 'rarCompress')
  230. )
  231. );
  232. $content = $filter->compress(dirname(__DIR__) . '/_files/Compress');
  233. $this->assertEquals(dirname(__DIR__) . DIRECTORY_SEPARATOR . '_files'
  234. . DIRECTORY_SEPARATOR . 'compressed.rar', $content);
  235. mkdir(dirname(__DIR__) . DIRECTORY_SEPARATOR . '_files' . DIRECTORY_SEPARATOR . '_compress');
  236. $content = $filter->decompress($content);
  237. $this->assertEquals(dirname(__DIR__)
  238. . DIRECTORY_SEPARATOR . '_files' . DIRECTORY_SEPARATOR . '_compress'
  239. . DIRECTORY_SEPARATOR, $content);
  240. $base = dirname(__DIR__) . DIRECTORY_SEPARATOR . '_files'
  241. . DIRECTORY_SEPARATOR . '_compress' . DIRECTORY_SEPARATOR . 'Compress' . DIRECTORY_SEPARATOR;
  242. $this->assertTrue(file_exists($base));
  243. $this->assertTrue(file_exists($base . 'zipextracted.txt'));
  244. $this->assertTrue(file_exists($base . 'First' . DIRECTORY_SEPARATOR . 'zipextracted.txt'));
  245. $this->assertTrue(file_exists($base . 'First' . DIRECTORY_SEPARATOR .
  246. 'Second' . DIRECTORY_SEPARATOR . 'zipextracted.txt'));
  247. $content = file_get_contents(dirname(__DIR__) . '/_files/Compress/zipextracted.txt');
  248. $this->assertEquals('compress me', $content);
  249. }
  250. /**
  251. * testing toString
  252. *
  253. * @return void
  254. */
  255. public function testRarToString()
  256. {
  257. $filter = new RarCompression();
  258. $this->assertEquals('Rar', $filter->toString());
  259. }
  260. /**
  261. * Test callback for compression
  262. *
  263. * @return unknown
  264. */
  265. public static function rarCompress()
  266. {
  267. return true;
  268. }
  269. }