ZipAdapterTest.php 12 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375
  1. <?php
  2. namespace Alchemy\Zippy\Tests\Adapter;
  3. use Alchemy\Zippy\Adapter\ZipAdapter;
  4. use Alchemy\Zippy\Parser\ParserFactory;
  5. class ZipAdapterTest extends AdapterTestCase
  6. {
  7. protected static $zipFile;
  8. /**
  9. * @var ZipAdapter
  10. */
  11. protected $adapter;
  12. public static function setUpBeforeClass()
  13. {
  14. self::$zipFile = sprintf('%s/%s.zip', self::getResourcesPath(), ZipAdapter::getName());
  15. if (file_exists(self::$zipFile)) {
  16. unlink(self::$zipFile);
  17. }
  18. }
  19. public static function tearDownAfterClass()
  20. {
  21. if (file_exists(self::$zipFile)) {
  22. unlink(self::$zipFile);
  23. }
  24. }
  25. public function setUp()
  26. {
  27. $this->adapter = $this->provideSupportedAdapter();
  28. }
  29. protected function provideNotSupportedAdapter()
  30. {
  31. $inflator = $deflator = $this->getMockBuilder('Alchemy\Zippy\ProcessBuilder\ProcessBuilderFactory')
  32. ->disableOriginalConstructor()
  33. ->setMethods(array('useBinary'))
  34. ->getMock();
  35. $outputParser = ParserFactory::create(ZipAdapter::getName());
  36. $adapter = new ZipAdapter($outputParser, $this->getResourceManagerMock(), $inflator, $deflator);
  37. $this->setProbeIsNotOk($adapter);
  38. return $adapter;
  39. }
  40. protected function provideSupportedAdapter()
  41. {
  42. $inflator = $deflator = $this->getMockBuilder('Alchemy\Zippy\ProcessBuilder\ProcessBuilderFactory')
  43. ->disableOriginalConstructor()
  44. ->setMethods(array('useBinary'))
  45. ->getMock();
  46. $outputParser = ParserFactory::create(ZipAdapter::getName());
  47. $adapter = new ZipAdapter($outputParser, $this->getResourceManagerMock(), $inflator, $deflator);
  48. $this->setProbeIsOk($adapter);
  49. return $adapter;
  50. }
  51. /**
  52. * @expectedException Alchemy\Zippy\Exception\NotSupportedException
  53. */
  54. public function testCreateNoFiles()
  55. {
  56. $mockedProcessBuilder = $this->getMock('Symfony\Component\Process\ProcessBuilder');
  57. $this->adapter->setInflator($this->getMockedProcessBuilderFactory($mockedProcessBuilder));
  58. $this->adapter->create(self::$zipFile, array());
  59. }
  60. public function testCreate()
  61. {
  62. $mockedProcessBuilder = $this->getMock('Symfony\Component\Process\ProcessBuilder');
  63. $mockedProcessBuilder
  64. ->expects($this->at(0))
  65. ->method('add')
  66. ->with($this->equalTo('-r'))
  67. ->will($this->returnSelf());
  68. $mockedProcessBuilder
  69. ->expects($this->at(1))
  70. ->method('add')
  71. ->with($this->equalTo($this->getExpectedAbsolutePathForTarget(self::$zipFile)))
  72. ->will($this->returnSelf());
  73. $mockedProcessBuilder
  74. ->expects($this->at(2))
  75. ->method('setWorkingDirectory')
  76. ->will($this->returnSelf());
  77. $mockedProcessBuilder
  78. ->expects($this->at(3))
  79. ->method('add')
  80. ->with($this->equalTo('lalala'))
  81. ->will($this->returnSelf());
  82. $mockedProcessBuilder
  83. ->expects($this->once())
  84. ->method('getProcess')
  85. ->will($this->returnValue($this->getSuccessFullMockProcess()));
  86. $manager = $this->getResourceManagerMock(__DIR__, array('lalala'));
  87. $outputParser = ParserFactory::create(ZipAdapter::getName());
  88. $deflator = $this->getMockBuilder('Alchemy\Zippy\ProcessBuilder\ProcessBuilderFactory')
  89. ->disableOriginalConstructor()
  90. ->setMethods(array('useBinary'))
  91. ->getMock();
  92. $this->adapter = new ZipAdapter($outputParser, $manager, $this->getMockedProcessBuilderFactory($mockedProcessBuilder), $deflator);
  93. $this->setProbeIsOk($this->adapter);
  94. $this->adapter->create(self::$zipFile, array(__FILE__));
  95. return self::$zipFile;
  96. }
  97. /**
  98. * @depends testCreate
  99. */
  100. public function testOpen($zipFile)
  101. {
  102. $archive = $this->adapter->open($this->getResource($zipFile));
  103. $this->assertInstanceOf('Alchemy\Zippy\Archive\ArchiveInterface', $archive);
  104. }
  105. public function testListMembers()
  106. {
  107. $resource = $this->getResource(self::$zipFile);
  108. $archive = $this->adapter->open($resource);
  109. $mockedProcessBuilder = $this->getMock('Symfony\Component\Process\ProcessBuilder');
  110. $mockedProcessBuilder
  111. ->expects($this->at(0))
  112. ->method('add')
  113. ->with($this->equalTo('-l'))
  114. ->will($this->returnSelf());
  115. $mockedProcessBuilder
  116. ->expects($this->at(1))
  117. ->method('add')
  118. ->with($this->equalTo($resource->getResource()))
  119. ->will($this->returnSelf());
  120. $mockedProcessBuilder
  121. ->expects($this->once())
  122. ->method('getProcess')
  123. ->will($this->returnValue($this->getSuccessFullMockProcess()));
  124. $this->adapter->setDeflator($this->getMockedProcessBuilderFactory($mockedProcessBuilder));
  125. $this->adapter->listMembers($resource);
  126. }
  127. public function testAddFile()
  128. {
  129. $resource = $this->getResource(self::$zipFile);
  130. $mockedProcessBuilder = $this->getMock('Symfony\Component\Process\ProcessBuilder');
  131. $mockedProcessBuilder
  132. ->expects($this->at(0))
  133. ->method('add')
  134. ->with($this->equalTo('-r'))
  135. ->will($this->returnSelf());
  136. $mockedProcessBuilder
  137. ->expects($this->at(1))
  138. ->method('add')
  139. ->with($this->equalTo('-u'))
  140. ->will($this->returnSelf());
  141. $mockedProcessBuilder
  142. ->expects($this->at(2))
  143. ->method('add')
  144. ->with($this->equalTo($resource->getResource()))
  145. ->will($this->returnSelf());
  146. $mockedProcessBuilder
  147. ->expects($this->once())
  148. ->method('getProcess')
  149. ->will($this->returnValue($this->getSuccessFullMockProcess()));
  150. $this->adapter->setInflator($this->getMockedProcessBuilderFactory($mockedProcessBuilder));
  151. $this->adapter->add($resource, array(__DIR__ . '/../TestCase.php'));
  152. }
  153. public function testgetInflatorVersion()
  154. {
  155. $mockedProcessBuilder = $this->getMock('Symfony\Component\Process\ProcessBuilder');
  156. $mockedProcessBuilder
  157. ->expects($this->at(0))
  158. ->method('add')
  159. ->with($this->equalTo('-h'))
  160. ->will($this->returnSelf());
  161. $mockedProcessBuilder
  162. ->expects($this->once())
  163. ->method('getProcess')
  164. ->will($this->returnValue($this->getSuccessFullMockProcess()));
  165. $this->adapter->setParser($this->getMock('Alchemy\Zippy\Parser\ParserInterface'));
  166. $this->adapter->setInflator($this->getMockedProcessBuilderFactory($mockedProcessBuilder));
  167. $this->adapter->getInflatorVersion();
  168. }
  169. public function testgetDeflatorVersion()
  170. {
  171. $mockedProcessBuilder = $this->getMock('Symfony\Component\Process\ProcessBuilder');
  172. $mockedProcessBuilder
  173. ->expects($this->at(0))
  174. ->method('add')
  175. ->with($this->equalTo('-h'))
  176. ->will($this->returnSelf());
  177. $mockedProcessBuilder
  178. ->expects($this->once())
  179. ->method('getProcess')
  180. ->will($this->returnValue($this->getSuccessFullMockProcess()));
  181. $this->adapter->setParser($this->getMock('Alchemy\Zippy\Parser\ParserInterface'));
  182. $this->adapter->setDeflator($this->getMockedProcessBuilderFactory($mockedProcessBuilder));
  183. $this->adapter->getDeflatorVersion();
  184. }
  185. public function testRemoveMembers()
  186. {
  187. $resource = $this->getResource(self::$zipFile);
  188. $mockedProcessBuilder = $this->getMock('Symfony\Component\Process\ProcessBuilder');
  189. $mockedProcessBuilder
  190. ->expects($this->at(0))
  191. ->method('add')
  192. ->with($this->equalTo('-d'))
  193. ->will($this->returnSelf());
  194. $mockedProcessBuilder
  195. ->expects($this->at(1))
  196. ->method('add')
  197. ->with($this->equalTo($resource->getResource()))
  198. ->will($this->returnSelf());
  199. $mockedProcessBuilder
  200. ->expects($this->at(2))
  201. ->method('add')
  202. ->with($this->equalTo(__DIR__ . '/../TestCase.php'))
  203. ->will($this->returnSelf());
  204. $mockedProcessBuilder
  205. ->expects($this->at(3))
  206. ->method('add')
  207. ->with($this->equalTo('path-to-file'))
  208. ->will($this->returnSelf());
  209. $mockedProcessBuilder
  210. ->expects($this->once())
  211. ->method('getProcess')
  212. ->will($this->returnValue($this->getSuccessFullMockProcess()));
  213. $archiveFileMock = $this->getMock('Alchemy\Zippy\Archive\MemberInterface');
  214. $archiveFileMock
  215. ->expects($this->any())
  216. ->method('getLocation')
  217. ->will($this->returnValue('path-to-file'));
  218. $this->adapter->setInflator($this->getMockedProcessBuilderFactory($mockedProcessBuilder));
  219. $this->adapter->remove($resource, array(
  220. __DIR__ . '/../TestCase.php',
  221. $archiveFileMock
  222. ));
  223. }
  224. public function testExtract()
  225. {
  226. $resource = $this->getResource(self::$zipFile);
  227. $mockedProcessBuilder = $this->getMock('Symfony\Component\Process\ProcessBuilder');
  228. $mockedProcessBuilder
  229. ->expects($this->at(0))
  230. ->method('add')
  231. ->with($this->equalTo('-o'))
  232. ->will($this->returnSelf());
  233. $mockedProcessBuilder
  234. ->expects($this->at(1))
  235. ->method('add')
  236. ->with($this->equalTo($resource->getResource()))
  237. ->will($this->returnSelf());
  238. $mockedProcessBuilder
  239. ->expects($this->once())
  240. ->method('getProcess')
  241. ->will($this->returnValue($this->getSuccessFullMockProcess()));
  242. $this->adapter->setDeflator($this->getMockedProcessBuilderFactory($mockedProcessBuilder));
  243. $dir = $this->adapter->extract($resource);
  244. $pathinfo = pathinfo(self::$zipFile);
  245. $this->assertEquals($pathinfo['dirname'], $dir->getPath());
  246. }
  247. public function testExtractWithExtractDirPrecised()
  248. {
  249. $resource = $this->getResource(self::$zipFile);
  250. $mockedProcessBuilder = $this->getMock('Symfony\Component\Process\ProcessBuilder');
  251. $mockedProcessBuilder
  252. ->expects($this->at(0))
  253. ->method('add')
  254. ->with($this->equalTo($resource->getResource()))
  255. ->will($this->returnSelf());
  256. $mockedProcessBuilder
  257. ->expects($this->at(1))
  258. ->method('add')
  259. ->with($this->equalTo('-d'))
  260. ->will($this->returnSelf());
  261. $mockedProcessBuilder
  262. ->expects($this->at(2))
  263. ->method('add')
  264. ->with($this->equalTo(__DIR__))
  265. ->will($this->returnSelf());
  266. $mockedProcessBuilder
  267. ->expects($this->at(3))
  268. ->method('add')
  269. ->with($this->equalTo(__FILE__))
  270. ->will($this->returnSelf());
  271. $mockedProcessBuilder
  272. ->expects($this->once())
  273. ->method('getProcess')
  274. ->will($this->returnValue($this->getSuccessFullMockProcess()));
  275. $this->adapter->setDeflator($this->getMockedProcessBuilderFactory($mockedProcessBuilder));
  276. $this->adapter->extractMembers($resource, array(__FILE__), __DIR__);
  277. }
  278. public function testGetName()
  279. {
  280. $this->assertEquals('zip', ZipAdapter::getName());
  281. }
  282. public function testGetDefaultInflatorBinaryName()
  283. {
  284. $this->assertEquals(array('zip'), ZipAdapter::getDefaultInflatorBinaryName());
  285. }
  286. public function testGetDefaultDeflatorBinaryName()
  287. {
  288. $this->assertEquals(array('unzip'), ZipAdapter::getDefaultDeflatorBinaryName());
  289. }
  290. }