2022-02-23 15:58:18 +00:00
< ? php declare ( strict_types = 1 );
2019-03-04 10:08:59 +00:00
/*
* This file is part of Composer .
*
* ( c ) Nils Adermann < naderman @ naderman . de >
* Jordi Boggiano < j . boggiano @ seld . be >
*
* For the full copyright and license information , please view the LICENSE
* file that was distributed with this source code .
*/
namespace Composer\Test\Util ;
use Composer\Util\Zip ;
2020-02-07 03:18:45 +00:00
use Composer\Test\TestCase ;
2019-03-04 10:08:59 +00:00
/**
* @ author Andreas Schempp < andreas . schempp @ terminal42 . ch >
*/
class ZipTest extends TestCase
{
2022-02-18 09:38:54 +00:00
public function testThrowsExceptionIfZipExtensionIsNotLoaded () : void
2019-03-04 10:08:59 +00:00
{
if ( extension_loaded ( 'zip' )) {
$this -> markTestSkipped ( 'The PHP zip extension is loaded.' );
}
2021-12-09 19:55:26 +00:00
self :: expectException ( 'RuntimeException' );
self :: expectExceptionMessage ( 'The Zip Util requires PHP\'s zip extension' );
2019-03-04 10:08:59 +00:00
Zip :: getComposerJson ( '' );
}
2022-02-18 09:38:54 +00:00
public function testReturnsNullifTheZipIsNotFound () : void
2019-03-04 10:08:59 +00:00
{
if ( ! extension_loaded ( 'zip' )) {
$this -> markTestSkipped ( 'The PHP zip extension is not loaded.' );
}
$result = Zip :: getComposerJson ( __DIR__ . '/Fixtures/Zip/invalid.zip' );
$this -> assertNull ( $result );
}
2022-02-18 09:38:54 +00:00
public function testReturnsNullIfTheZipIsEmpty () : void
2019-03-04 10:08:59 +00:00
{
if ( ! extension_loaded ( 'zip' )) {
$this -> markTestSkipped ( 'The PHP zip extension is not loaded.' );
}
$result = Zip :: getComposerJson ( __DIR__ . '/Fixtures/Zip/empty.zip' );
$this -> assertNull ( $result );
}
2022-02-18 09:38:54 +00:00
public function testThrowsExceptionIfTheZipHasNoComposerJson () : void
2019-03-04 10:08:59 +00:00
{
if ( ! extension_loaded ( 'zip' )) {
$this -> markTestSkipped ( 'The PHP zip extension is not loaded.' );
}
2021-12-09 19:55:26 +00:00
self :: expectException ( 'RuntimeException' );
self :: expectExceptionMessage ( 'No composer.json found either at the top level or within the topmost directory' );
2020-09-10 15:21:11 +00:00
2020-07-21 15:10:26 +00:00
Zip :: getComposerJson ( __DIR__ . '/Fixtures/Zip/nojson.zip' );
2019-03-04 10:08:59 +00:00
}
2022-02-18 09:38:54 +00:00
public function testThrowsExceptionIfTheComposerJsonIsInASubSubfolder () : void
2019-03-04 10:08:59 +00:00
{
if ( ! extension_loaded ( 'zip' )) {
$this -> markTestSkipped ( 'The PHP zip extension is not loaded.' );
}
2021-12-09 19:55:26 +00:00
self :: expectException ( 'RuntimeException' );
self :: expectExceptionMessage ( 'No composer.json found either at the top level or within the topmost directory' );
2020-09-10 15:21:11 +00:00
2020-07-21 15:10:26 +00:00
Zip :: getComposerJson ( __DIR__ . '/Fixtures/Zip/subfolders.zip' );
2019-03-04 10:08:59 +00:00
}
2022-02-18 09:38:54 +00:00
public function testReturnsComposerJsonInZipRoot () : void
2019-03-04 10:08:59 +00:00
{
if ( ! extension_loaded ( 'zip' )) {
$this -> markTestSkipped ( 'The PHP zip extension is not loaded.' );
}
$result = Zip :: getComposerJson ( __DIR__ . '/Fixtures/Zip/root.zip' );
$this -> assertEquals ( " { \n \" name \" : \" foo/bar \" \n } \n " , $result );
}
2022-02-18 09:38:54 +00:00
public function testReturnsComposerJsonInFirstFolder () : void
2019-03-04 10:08:59 +00:00
{
if ( ! extension_loaded ( 'zip' )) {
$this -> markTestSkipped ( 'The PHP zip extension is not loaded.' );
}
$result = Zip :: getComposerJson ( __DIR__ . '/Fixtures/Zip/folder.zip' );
$this -> assertEquals ( " { \n \" name \" : \" foo/bar \" \n } \n " , $result );
}
2022-02-18 09:38:54 +00:00
public function testMultipleTopLevelDirsIsInvalid () : void
2019-03-04 10:08:59 +00:00
{
if ( ! extension_loaded ( 'zip' )) {
$this -> markTestSkipped ( 'The PHP zip extension is not loaded.' );
}
2021-12-09 19:55:26 +00:00
self :: expectException ( 'RuntimeException' );
self :: expectExceptionMessage ( 'Archive has more than one top level directories, and no composer.json was found on the top level, so it\'s an invalid archive. Top level paths found were: folder1/,folder2/' );
2020-09-10 15:21:11 +00:00
2020-07-21 15:10:26 +00:00
Zip :: getComposerJson ( __DIR__ . '/Fixtures/Zip/multiple.zip' );
2020-07-16 15:00:29 +00:00
}
2022-02-18 09:38:54 +00:00
public function testReturnsComposerJsonFromFirstSubfolder () : void
2020-07-16 15:00:29 +00:00
{
if ( ! extension_loaded ( 'zip' )) {
$this -> markTestSkipped ( 'The PHP zip extension is not loaded.' );
}
$result = Zip :: getComposerJson ( __DIR__ . '/Fixtures/Zip/single-sub.zip' );
2019-03-04 10:08:59 +00:00
$this -> assertEquals ( " { \n \" name \" : \" foo/bar \" \n } \n " , $result );
}
}