/tests/Zend/Filter/Compress/ZipTest.php

https://github.com/MontmereLimited/zf2 · PHP · 300 lines · 201 code · 32 blank · 67 comment · 9 complexity · 64acb30d4934e83c0f640b1141a90d6f MD5 · raw file

  1. <?php
  2. /**
  3. * Zend Framework
  4. *
  5. * LICENSE
  6. *
  7. * This source file is subject to the new BSD license that is bundled
  8. * with this package in the file LICENSE.txt.
  9. * It is also available through the world-wide-web at this URL:
  10. * http://framework.zend.com/license/new-bsd
  11. * If you did not receive a copy of the license and are unable to
  12. * obtain it through the world-wide-web, please send an email
  13. * to license@zend.com so we can send you a copy immediately.
  14. *
  15. * @category Zend
  16. * @package Zend_Filter
  17. * @subpackage UnitTests
  18. * @copyright Copyright (c) 2005-2012 Zend Technologies USA Inc. (http://www.zend.com)
  19. * @license http://framework.zend.com/license/new-bsd New BSD License
  20. */
  21. namespace ZendTest\Filter\Compress;
  22. use Zend\Filter\Compress\Zip as ZipCompression;
  23. /**
  24. * @category Zend
  25. * @package Zend_Filter
  26. * @subpackage UnitTests
  27. * @group Zend_Filter
  28. * @copyright Copyright (c) 2005-2012 Zend Technologies USA Inc. (http://www.zend.com)
  29. * @license http://framework.zend.com/license/new-bsd New BSD License
  30. */
  31. class ZipTest extends \PHPUnit_Framework_TestCase
  32. {
  33. public function setUp()
  34. {
  35. if (!extension_loaded('zip')) {
  36. $this->markTestSkipped('This adapter needs the zip extension');
  37. }
  38. $files = array(
  39. dirname(__DIR__) . '/_files/compressed.zip',
  40. dirname(__DIR__) . '/_files/zipextracted.txt',
  41. dirname(__DIR__) . '/_files/zip.tmp',
  42. dirname(__DIR__) . '/_files/_compress/Compress/First/Second/zipextracted.txt',
  43. dirname(__DIR__) . '/_files/_compress/Compress/First/Second',
  44. dirname(__DIR__) . '/_files/_compress/Compress/First/zipextracted.txt',
  45. dirname(__DIR__) . '/_files/_compress/Compress/First',
  46. dirname(__DIR__) . '/_files/_compress/Compress/zipextracted.txt',
  47. dirname(__DIR__) . '/_files/_compress/Compress',
  48. dirname(__DIR__) . '/_files/_compress/zipextracted.txt',
  49. dirname(__DIR__) . '/_files/_compress'
  50. );
  51. foreach($files as $file) {
  52. if (file_exists($file)) {
  53. if (is_dir($file)) {
  54. rmdir($file);
  55. } else {
  56. unlink($file);
  57. }
  58. }
  59. }
  60. if (!file_exists(dirname(__DIR__) . '/_files/Compress/First/Second')) {
  61. mkdir(dirname(__DIR__) . '/_files/Compress/First/Second', 0777, true);
  62. file_put_contents(dirname(__DIR__) . '/_files/Compress/First/Second/zipextracted.txt', 'compress me');
  63. file_put_contents(dirname(__DIR__) . '/_files/Compress/First/zipextracted.txt', 'compress me');
  64. file_put_contents(dirname(__DIR__) . '/_files/Compress/zipextracted.txt', 'compress me');
  65. }
  66. }
  67. public function tearDown()
  68. {
  69. $files = array(
  70. dirname(__DIR__) . '/_files/compressed.zip',
  71. dirname(__DIR__) . '/_files/zipextracted.txt',
  72. dirname(__DIR__) . '/_files/zip.tmp',
  73. dirname(__DIR__) . '/_files/_compress/Compress/First/Second/zipextracted.txt',
  74. dirname(__DIR__) . '/_files/_compress/Compress/First/Second',
  75. dirname(__DIR__) . '/_files/_compress/Compress/First/zipextracted.txt',
  76. dirname(__DIR__) . '/_files/_compress/Compress/First',
  77. dirname(__DIR__) . '/_files/_compress/Compress/zipextracted.txt',
  78. dirname(__DIR__) . '/_files/_compress/Compress',
  79. dirname(__DIR__) . '/_files/_compress/zipextracted.txt',
  80. dirname(__DIR__) . '/_files/_compress'
  81. );
  82. foreach($files as $file) {
  83. if (file_exists($file)) {
  84. if (is_dir($file)) {
  85. rmdir($file);
  86. } else {
  87. unlink($file);
  88. }
  89. }
  90. }
  91. if (!file_exists(dirname(__DIR__) . '/_files/Compress/First/Second')) {
  92. mkdir(dirname(__DIR__) . '/_files/Compress/First/Second', 0777, true);
  93. file_put_contents(dirname(__DIR__) . '/_files/Compress/First/Second/zipextracted.txt', 'compress me');
  94. file_put_contents(dirname(__DIR__) . '/_files/Compress/First/zipextracted.txt', 'compress me');
  95. file_put_contents(dirname(__DIR__) . '/_files/Compress/zipextracted.txt', 'compress me');
  96. }
  97. }
  98. /**
  99. * Basic usage
  100. *
  101. * @return void
  102. */
  103. public function testBasicUsage()
  104. {
  105. $filter = new ZipCompression(
  106. array(
  107. 'archive' => dirname(__DIR__) . '/_files/compressed.zip',
  108. 'target' => dirname(__DIR__) . '/_files/zipextracted.txt'
  109. )
  110. );
  111. $content = $filter->compress('compress me');
  112. $this->assertEquals(dirname(__DIR__) . DIRECTORY_SEPARATOR . '_files'
  113. . DIRECTORY_SEPARATOR . 'compressed.zip', $content);
  114. $content = $filter->decompress($content);
  115. $this->assertEquals(dirname(__DIR__) . DIRECTORY_SEPARATOR . '_files' . DIRECTORY_SEPARATOR, $content);
  116. $content = file_get_contents(dirname(__DIR__) . '/_files/zipextracted.txt');
  117. $this->assertEquals('compress me', $content);
  118. }
  119. /**
  120. * Setting Options
  121. *
  122. * @return void
  123. */
  124. public function testZipGetSetOptions()
  125. {
  126. $filter = new ZipCompression();
  127. $this->assertEquals(array('archive' => null, 'target' => null), $filter->getOptions());
  128. $this->assertEquals(null, $filter->getOptions('archive'));
  129. $this->assertNull($filter->getOptions('nooption'));
  130. $filter->setOptions(array('nooption' => 'foo'));
  131. $this->assertNull($filter->getOptions('nooption'));
  132. $filter->setOptions(array('archive' => 'temp.txt'));
  133. $this->assertEquals('temp.txt', $filter->getOptions('archive'));
  134. }
  135. /**
  136. * Setting Archive
  137. *
  138. * @return void
  139. */
  140. public function testZipGetSetArchive()
  141. {
  142. $filter = new ZipCompression();
  143. $this->assertEquals(null, $filter->getArchive());
  144. $filter->setArchive('Testfile.txt');
  145. $this->assertEquals('Testfile.txt', $filter->getArchive());
  146. $this->assertEquals('Testfile.txt', $filter->getOptions('archive'));
  147. }
  148. /**
  149. * Setting Target
  150. *
  151. * @return void
  152. */
  153. public function testZipGetSetTarget()
  154. {
  155. $filter = new ZipCompression();
  156. $this->assertNull($filter->getTarget());
  157. $filter->setTarget('Testfile.txt');
  158. $this->assertEquals('Testfile.txt', $filter->getTarget());
  159. $this->assertEquals('Testfile.txt', $filter->getOptions('target'));
  160. $this->setExpectedException('\Zend\Filter\Exception\InvalidArgumentException', 'does not exist');
  161. $filter->setTarget('/unknown/path/to/file.txt');
  162. }
  163. /**
  164. * Compress to Archive
  165. *
  166. * @return void
  167. */
  168. public function testZipCompressFile()
  169. {
  170. $filter = new ZipCompression(
  171. array(
  172. 'archive' => dirname(__DIR__) . '/_files/compressed.zip',
  173. 'target' => dirname(__DIR__) . '/_files/zipextracted.txt'
  174. )
  175. );
  176. file_put_contents(dirname(__DIR__) . '/_files/zipextracted.txt', 'compress me');
  177. $content = $filter->compress(dirname(__DIR__) . '/_files/zipextracted.txt');
  178. $this->assertEquals(dirname(__DIR__) . DIRECTORY_SEPARATOR . '_files'
  179. . DIRECTORY_SEPARATOR . 'compressed.zip', $content);
  180. $content = $filter->decompress($content);
  181. $this->assertEquals(dirname(__DIR__) . DIRECTORY_SEPARATOR . '_files' . DIRECTORY_SEPARATOR, $content);
  182. $content = file_get_contents(dirname(__DIR__) . '/_files/zipextracted.txt');
  183. $this->assertEquals('compress me', $content);
  184. }
  185. /**
  186. * Basic usage
  187. *
  188. * @return void
  189. */
  190. public function testCompressNonExistingTargetFile()
  191. {
  192. $filter = new ZipCompression(
  193. array(
  194. 'archive' => dirname(__DIR__) . '/_files/compressed.zip',
  195. 'target' => dirname(__DIR__) . '/_files'
  196. )
  197. );
  198. $content = $filter->compress('compress me');
  199. $this->assertEquals(dirname(__DIR__) . DIRECTORY_SEPARATOR . '_files'
  200. . DIRECTORY_SEPARATOR . 'compressed.zip', $content);
  201. $content = $filter->decompress($content);
  202. $this->assertEquals(dirname(__DIR__) . DIRECTORY_SEPARATOR . '_files' . DIRECTORY_SEPARATOR, $content);
  203. $content = file_get_contents(dirname(__DIR__) . '/_files/zip.tmp');
  204. $this->assertEquals('compress me', $content);
  205. }
  206. /**
  207. * Compress directory to Archive
  208. *
  209. * @return void
  210. */
  211. public function testZipCompressDirectory()
  212. {
  213. $filter = new ZipCompression(
  214. array(
  215. 'archive' => dirname(__DIR__) . '/_files/compressed.zip',
  216. 'target' => dirname(__DIR__) . '/_files/_compress'
  217. )
  218. );
  219. $content = $filter->compress(dirname(__DIR__) . '/_files/Compress');
  220. $this->assertEquals(dirname(__DIR__) . DIRECTORY_SEPARATOR . '_files'
  221. . DIRECTORY_SEPARATOR . 'compressed.zip', $content);
  222. mkdir(dirname(__DIR__) . DIRECTORY_SEPARATOR . '_files' . DIRECTORY_SEPARATOR . '_compress');
  223. $content = $filter->decompress($content);
  224. $this->assertEquals(dirname(__DIR__) . DIRECTORY_SEPARATOR . '_files' . DIRECTORY_SEPARATOR . '_compress'
  225. . DIRECTORY_SEPARATOR, $content);
  226. $base = dirname(__DIR__) . DIRECTORY_SEPARATOR . '_files'
  227. . DIRECTORY_SEPARATOR . '_compress' . DIRECTORY_SEPARATOR . 'Compress' . DIRECTORY_SEPARATOR;
  228. $this->assertTrue(file_exists($base));
  229. $this->assertTrue(file_exists($base . 'zipextracted.txt'));
  230. $this->assertTrue(file_exists($base . 'First' . DIRECTORY_SEPARATOR . 'zipextracted.txt'));
  231. $this->assertTrue(file_exists($base . 'First' . DIRECTORY_SEPARATOR .
  232. 'Second' . DIRECTORY_SEPARATOR . 'zipextracted.txt'));
  233. $content = file_get_contents(dirname(__DIR__) . '/_files/Compress/zipextracted.txt');
  234. $this->assertEquals('compress me', $content);
  235. }
  236. /**
  237. * testing toString
  238. *
  239. * @return void
  240. */
  241. public function testZipToString()
  242. {
  243. $filter = new ZipCompression();
  244. $this->assertEquals('Zip', $filter->toString());
  245. }
  246. public function testDecompressWillThrowExceptionWhenDecompressingWithNoTarget()
  247. {
  248. $filter = new ZipCompression(
  249. array(
  250. 'archive' => dirname(__DIR__) . '/_files/compressed.zip',
  251. 'target' => dirname(__DIR__) . '/_files/_compress'
  252. )
  253. );
  254. $content = $filter->compress('compress me');
  255. $this->assertEquals(dirname(__DIR__) . DIRECTORY_SEPARATOR . '_files'
  256. . DIRECTORY_SEPARATOR . 'compressed.zip', $content);
  257. $filter = new ZipCompression(
  258. array(
  259. 'archive' => dirname(__DIR__) . '/_files/compressed.zip',
  260. 'target' => dirname(__DIR__) . '/_files/_compress'
  261. )
  262. );
  263. $content = $filter->decompress($content);
  264. $this->assertEquals(dirname(__DIR__) . DIRECTORY_SEPARATOR . '_files' . DIRECTORY_SEPARATOR, $content);
  265. $content = file_get_contents(dirname(__DIR__) . '/_files/_compress');
  266. $this->assertEquals('compress me', $content);
  267. }
  268. }