Initial commit: apps.supersam24.ru
This commit is contained in:
commit
e955e1da36
6566 files changed
+1271095
No files matched your search
@@ -0,0 +1,25 @@
|
||||
<?php
|
||||
|
||||
namespace Cake\Test\Composer\Installer;
|
||||
|
||||
use Cake\Composer\Installer\PluginInstaller as PluginInstallerSrc;
|
||||
|
||||
/**
|
||||
* Test double for static methods in PluginInstaller
|
||||
*/
|
||||
class PluginInstaller extends PluginInstallerSrc
|
||||
{
|
||||
|
||||
/**
|
||||
* Overriden to return a test-config file
|
||||
*
|
||||
* @param string $vendorDir
|
||||
* @return string path to test plugins config file
|
||||
*/
|
||||
public static function configFile($vendorDir)
|
||||
{
|
||||
$root = sys_get_temp_dir() . DIRECTORY_SEPARATOR . 'plugin-installer-test';
|
||||
|
||||
return $root . DIRECTORY_SEPARATOR . 'vendor' . DIRECTORY_SEPARATOR . 'cakephp-plugins.php';
|
||||
}
|
||||
}
|
||||
+418
@@ -0,0 +1,418 @@
|
||||
<?php
|
||||
namespace Cake\Test\TestCase\Composer\Installer;
|
||||
|
||||
use Cake\Test\Composer\Installer\PluginInstaller;
|
||||
use Composer\Composer;
|
||||
use Composer\Package\Package;
|
||||
use Composer\Repository\RepositoryManager;
|
||||
use PHPUnit\Framework\TestCase;
|
||||
|
||||
class PluginInstallerTest extends TestCase
|
||||
{
|
||||
|
||||
public $package;
|
||||
|
||||
public $installer;
|
||||
|
||||
/**
|
||||
* Directories used during tests
|
||||
*
|
||||
* @var string
|
||||
*/
|
||||
protected $testDirs = [
|
||||
'',
|
||||
'vendor',
|
||||
'plugins',
|
||||
'plugins/Foo',
|
||||
'plugins/Fee',
|
||||
'plugins/Foe',
|
||||
'plugins/Fum',
|
||||
'app_plugins',
|
||||
'app_plugins/Bar',
|
||||
];
|
||||
|
||||
/**
|
||||
* setUp
|
||||
*
|
||||
* @return void
|
||||
*/
|
||||
public function setUp()
|
||||
{
|
||||
parent::setUp();
|
||||
$this->package = new Package('CamelCased', '1.0', '1.0');
|
||||
$this->package->setType('cakephp-plugin');
|
||||
|
||||
$this->path = sys_get_temp_dir() . DIRECTORY_SEPARATOR . 'plugin-installer-test';
|
||||
|
||||
foreach ($this->testDirs as $dir) {
|
||||
if (!is_dir($this->path . '/' . $dir)) {
|
||||
mkdir($this->path . '/' . $dir);
|
||||
}
|
||||
}
|
||||
|
||||
$composer = new Composer();
|
||||
$config = $this->getMockBuilder('Composer\Config')->getMock();
|
||||
$config->expects($this->any())
|
||||
->method('get')
|
||||
->will($this->returnValue($this->path . '/vendor'));
|
||||
$composer->setConfig($config);
|
||||
|
||||
$this->io = $this->getMockBuilder('Composer\IO\IOInterface')->getMock();
|
||||
$rm = new RepositoryManager(
|
||||
$this->io,
|
||||
$config
|
||||
);
|
||||
$composer->setRepositoryManager($rm);
|
||||
|
||||
$this->installer = new PluginInstaller($this->io, $composer);
|
||||
}
|
||||
|
||||
public function tearDown()
|
||||
{
|
||||
parent::tearDown();
|
||||
$dirs = array_reverse($this->testDirs);
|
||||
|
||||
if (is_file($this->path . '/vendor/cakephp-plugins.php')) {
|
||||
unlink($this->path . '/vendor/cakephp-plugins.php');
|
||||
}
|
||||
|
||||
foreach ($dirs as $dir) {
|
||||
if (is_dir($this->path . '/' . $dir)) {
|
||||
rmdir($this->path . '/' . $dir);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Sanity test
|
||||
*
|
||||
* The test double should return a path to a test file, where
|
||||
* the containing folder
|
||||
*
|
||||
* @return void
|
||||
*/
|
||||
public function testConfigFile()
|
||||
{
|
||||
$path = PluginInstaller::configFile("");
|
||||
$this->assertFileExists(dirname($path));
|
||||
}
|
||||
|
||||
/**
|
||||
* Ensure that primary namespace detection works.
|
||||
*
|
||||
* @return void
|
||||
*/
|
||||
public function testPrimaryNamespace()
|
||||
{
|
||||
$autoload = [
|
||||
'psr-4' => [
|
||||
'FOC\\Authenticate' => ''
|
||||
]
|
||||
];
|
||||
$this->package->setAutoload($autoload);
|
||||
|
||||
$ns = PluginInstaller::primaryNamespace($this->package);
|
||||
$this->assertEquals('FOC\Authenticate', $ns);
|
||||
|
||||
$autoload = [
|
||||
'psr-4' => [
|
||||
'FOC\Acl\Test' => './tests',
|
||||
'FOC\Acl' => ''
|
||||
]
|
||||
];
|
||||
$this->package->setAutoload($autoload);
|
||||
$ns = PluginInstaller::primaryNamespace($this->package);
|
||||
$this->assertEquals('FOC\Acl', $ns);
|
||||
|
||||
$autoload = [
|
||||
'psr-4' => [
|
||||
'Foo\Bar' => 'foo',
|
||||
'Acme\Plugin' => './src'
|
||||
]
|
||||
];
|
||||
$this->package->setAutoload($autoload);
|
||||
$ns = PluginInstaller::primaryNamespace($this->package);
|
||||
$this->assertEquals('Acme\Plugin', $ns);
|
||||
|
||||
$autoload = [
|
||||
'psr-4' => [
|
||||
'Foo\Bar' => 'bar',
|
||||
'Foo\\' => ''
|
||||
]
|
||||
];
|
||||
$this->package->setAutoload($autoload);
|
||||
$ns = PluginInstaller::primaryNamespace($this->package);
|
||||
$this->assertEquals('Foo', $ns);
|
||||
|
||||
$autoload = [
|
||||
'psr-4' => [
|
||||
'Foo\Bar' => 'bar',
|
||||
'Foo' => '.'
|
||||
]
|
||||
];
|
||||
$this->package->setAutoload($autoload);
|
||||
$ns = PluginInstaller::primaryNamespace($this->package);
|
||||
$this->assertEquals('Foo', $ns);
|
||||
|
||||
$autoload = [
|
||||
'psr-4' => [
|
||||
'Acme\Foo\Bar' => 'bar',
|
||||
'Acme\Foo\\' => ''
|
||||
]
|
||||
];
|
||||
$this->package->setAutoload($autoload);
|
||||
$ns = PluginInstaller::primaryNamespace($this->package);
|
||||
$this->assertEquals('Acme\Foo', $ns);
|
||||
|
||||
$autoload = [
|
||||
'psr-4' => [
|
||||
'Acme\Foo\Bar' => '',
|
||||
'Acme\Foo' => 'src'
|
||||
]
|
||||
];
|
||||
$this->package->setAutoload($autoload);
|
||||
$name = PluginInstaller::primaryNamespace($this->package);
|
||||
$this->assertEquals('Acme\Foo', $name);
|
||||
}
|
||||
|
||||
public function testDeterminePlugins()
|
||||
{
|
||||
$plugin1 = new Package('cakephp/the-thing', '1.0', '1.0');
|
||||
$plugin1->setType('cakephp-plugin');
|
||||
$plugin1->setAutoload([
|
||||
'psr-4' => [
|
||||
'TheThing' => 'src/'
|
||||
]
|
||||
]);
|
||||
|
||||
$plugin2 = new Package('cakephp/princess', '1.0', '1.0');
|
||||
$plugin2->setType('cakephp-plugin');
|
||||
$plugin2->setAutoload([
|
||||
'psr-4' => [
|
||||
'Princess' => 'src/'
|
||||
]
|
||||
]);
|
||||
|
||||
$packages = [
|
||||
$plugin1,
|
||||
new Package('SomethingElse', '1.0', '1.0'),
|
||||
$plugin2
|
||||
];
|
||||
|
||||
$return = PluginInstaller::determinePlugins(
|
||||
$packages,
|
||||
$this->path . '/doesnt-exist',
|
||||
$this->path . '/vendor'
|
||||
);
|
||||
|
||||
$expected = [
|
||||
'Princess' => $this->path . '/vendor/cakephp/princess',
|
||||
'TheThing' => $this->path . '/vendor/cakephp/the-thing'
|
||||
];
|
||||
$this->assertSame($expected, $return, 'Only composer-loaded plugins should be listed');
|
||||
|
||||
$return = PluginInstaller::determinePlugins(
|
||||
$packages,
|
||||
$this->path . '/plugins',
|
||||
$this->path . '/vendor'
|
||||
);
|
||||
|
||||
$expected = [
|
||||
'Fee' => $this->path . '/plugins/Fee',
|
||||
'Foe' => $this->path . '/plugins/Foe',
|
||||
'Foo' => $this->path . '/plugins/Foo',
|
||||
'Fum' => $this->path . '/plugins/Fum',
|
||||
'Princess' => $this->path . '/vendor/cakephp/princess',
|
||||
'TheThing' => $this->path . '/vendor/cakephp/the-thing'
|
||||
];
|
||||
$this->assertSame($expected, $return, 'Composer and application plugins should be listed');
|
||||
|
||||
$return = PluginInstaller::determinePlugins(
|
||||
$packages,
|
||||
[$this->path . '/plugins', $this->path . '/app_plugins'],
|
||||
$this->path . '/vendor'
|
||||
);
|
||||
|
||||
$expected = [
|
||||
'Bar' => $this->path . '/app_plugins/Bar',
|
||||
'Fee' => $this->path . '/plugins/Fee',
|
||||
'Foe' => $this->path . '/plugins/Foe',
|
||||
'Foo' => $this->path . '/plugins/Foo',
|
||||
'Fum' => $this->path . '/plugins/Fum',
|
||||
'Princess' => $this->path . '/vendor/cakephp/princess',
|
||||
'TheThing' => $this->path . '/vendor/cakephp/the-thing'
|
||||
];
|
||||
$this->assertSame($expected, $return, 'Composer and application plugins should be listed');
|
||||
}
|
||||
|
||||
public function testWriteConfigFile()
|
||||
{
|
||||
$plugins = [
|
||||
'Fee' => $this->path . '/plugins/Fee',
|
||||
'Foe' => $this->path . '/plugins/Foe',
|
||||
'Foo' => $this->path . '/plugins/Foo',
|
||||
'Fum' => $this->path . '/plugins/Fum',
|
||||
'OddOneOut' => '/some/other/path',
|
||||
'Princess' => $this->path . '/vendor/cakephp/princess',
|
||||
'TheThing' => $this->path . '/vendor/cakephp/the-thing',
|
||||
'Vendor\Plugin' => $this->path . '/vendor/vendor/plugin'
|
||||
];
|
||||
|
||||
$path = $this->path . '/vendor/cakephp-plugins.php';
|
||||
PluginInstaller::writeConfigFile($path, $plugins);
|
||||
|
||||
$this->assertFileExists($path);
|
||||
$contents = file_get_contents($path);
|
||||
|
||||
$this->assertContains('<?php', $contents);
|
||||
$this->assertContains('$baseDir = dirname(dirname(__FILE__));', $contents);
|
||||
$this->assertContains(
|
||||
"'Fee' => \$baseDir . '/plugins/Fee/'",
|
||||
$contents,
|
||||
'paths should be relative for app-plugins'
|
||||
);
|
||||
$this->assertContains(
|
||||
"'Princess' => \$baseDir . '/vendor/cakephp/princess/'",
|
||||
$contents,
|
||||
'paths should be relative for vendor-plugins'
|
||||
);
|
||||
$this->assertContains(
|
||||
"'OddOneOut' => '/some/other/path/'",
|
||||
$contents,
|
||||
'paths should stay absolute if it\'s not under the application root'
|
||||
);
|
||||
$this->assertContains(
|
||||
"'Vendor/Plugin' => \$baseDir . '/vendor/vendor/plugin/'",
|
||||
$contents,
|
||||
'Plugin namespaces should use forward slash'
|
||||
);
|
||||
|
||||
// Ensure all plugin paths are slash terminated
|
||||
foreach ($plugins as &$plugin) {
|
||||
$plugin .= '/';
|
||||
}
|
||||
unset($plugin);
|
||||
|
||||
$result = require $path;
|
||||
$expected = [
|
||||
'plugins' => $plugins
|
||||
];
|
||||
$expected['plugins']['Vendor/Plugin'] = $expected['plugins']['Vendor\Plugin'];
|
||||
unset($expected['plugins']['Vendor\Plugin']);
|
||||
$this->assertSame($expected, $result, 'The evaluated result should be the same as the input except for namespaced plugin');
|
||||
}
|
||||
|
||||
public function testUpdateConfigNoConfigFile()
|
||||
{
|
||||
$this->installer->updateConfig('DebugKit', '/vendor/cakephp/DebugKit');
|
||||
$this->assertFileExists($this->path . '/vendor/cakephp-plugins.php');
|
||||
$contents = file_get_contents($this->path . '/vendor/cakephp-plugins.php');
|
||||
$this->assertContains('<?php', $contents);
|
||||
$this->assertContains("'plugins' =>", $contents);
|
||||
$this->assertContains("'DebugKit' => '/vendor/cakephp/DebugKit/'", $contents);
|
||||
}
|
||||
|
||||
public function testUpdateConfigAddPathInvalidFile()
|
||||
{
|
||||
file_put_contents($this->path . '/vendor/cakephp-plugins.php', '<?php $foo = "DERP";');
|
||||
|
||||
$this->io->expects($this->once())
|
||||
->method('write');
|
||||
$this->installer->updateConfig('DebugKit', '/vendor/cakephp/DebugKit');
|
||||
}
|
||||
|
||||
public function testUpdateConfigAddPathFileExists()
|
||||
{
|
||||
file_put_contents(
|
||||
$this->path . '/vendor/cakephp-plugins.php',
|
||||
'<?php $config = ["plugins" => ["Bake" => "/some/path"]];'
|
||||
);
|
||||
|
||||
$this->installer->updateConfig('DebugKit', '/vendor/cakephp/DebugKit');
|
||||
$contents = file_get_contents($this->path . '/vendor/cakephp-plugins.php');
|
||||
$this->assertContains('<?php', $contents);
|
||||
$this->assertContains("'plugins' =>", $contents);
|
||||
$this->assertContains("'DebugKit' => '/vendor/cakephp/DebugKit/'", $contents);
|
||||
$this->assertContains("'Bake' => '/some/path/'", $contents);
|
||||
}
|
||||
|
||||
/**
|
||||
* testUpdateConfigAddRootPath
|
||||
*
|
||||
* @return void
|
||||
*/
|
||||
public function testUpdateConfigAddRootPath()
|
||||
{
|
||||
file_put_contents(
|
||||
$this->path . '/vendor/cakephp-plugins.php',
|
||||
'<?php return ["plugins" => ["Bake" => "/some/path"]];'
|
||||
);
|
||||
|
||||
$this->installer->updateConfig('DebugKit', $this->path . '/vendor/cakephp/debugkit');
|
||||
$contents = file_get_contents($this->path . '/vendor/cakephp-plugins.php');
|
||||
$this->assertContains('<?php', $contents);
|
||||
$this->assertContains('$baseDir = dirname(dirname(__FILE__));', $contents);
|
||||
$this->assertContains("'DebugKit' => \$baseDir . '/vendor/cakephp/debugkit/'", $contents);
|
||||
$this->assertContains("'Bake' => '/some/path/'", $contents);
|
||||
}
|
||||
|
||||
/**
|
||||
* testUpdateConfigAddPath
|
||||
*
|
||||
* @return void
|
||||
*/
|
||||
public function testUpdateConfigAddPath()
|
||||
{
|
||||
file_put_contents(
|
||||
$this->path . '/vendor/cakephp-plugins.php',
|
||||
'<?php return ["plugins" => ["Bake" => "/some/path"]];'
|
||||
);
|
||||
|
||||
$this->installer->updateConfig('DebugKit', '/vendor/cakephp/debugkit');
|
||||
$this->installer->updateConfig('ADmad\JwtAuth', '/vendor/admad/cakephp-jwt-auth');
|
||||
|
||||
$contents = file_get_contents($this->path . '/vendor/cakephp-plugins.php');
|
||||
$this->assertContains('<?php', $contents);
|
||||
$this->assertContains("'DebugKit' => '/vendor/cakephp/debugkit/'", $contents);
|
||||
$this->assertContains("'Bake' => '/some/path/'", $contents);
|
||||
$this->assertContains("'ADmad/JwtAuth' => '/vendor/admad/cakephp-jwt-auth/'", $contents);
|
||||
}
|
||||
|
||||
/**
|
||||
* test adding windows paths.
|
||||
*
|
||||
* @return void
|
||||
*/
|
||||
public function testUpdateConfigAddPathWindows()
|
||||
{
|
||||
file_put_contents(
|
||||
$this->path . '/vendor/cakephp-plugins.php',
|
||||
'<?php return ["plugins" => ["Bake" => "/some/path"]];'
|
||||
);
|
||||
|
||||
$this->installer->updateConfig('DebugKit', '\vendor\cakephp\debugkit');
|
||||
|
||||
$contents = file_get_contents($this->path . '/vendor/cakephp-plugins.php');
|
||||
$this->assertContains('<?php', $contents);
|
||||
$this->assertContains("'DebugKit' => '/vendor/cakephp/debugkit/'", $contents);
|
||||
}
|
||||
|
||||
/**
|
||||
* testUpdateConfigRemovePath
|
||||
*
|
||||
* @return void
|
||||
*/
|
||||
public function testUpdateConfigRemovePath()
|
||||
{
|
||||
file_put_contents(
|
||||
$this->path . '/vendor/cakephp-plugins.php',
|
||||
'<?php $config = ["plugins" => ["Bake" => "/some/path"]];'
|
||||
);
|
||||
|
||||
$this->installer->updateConfig('Bake', '');
|
||||
$contents = file_get_contents($this->path . '/vendor/cakephp-plugins.php');
|
||||
$this->assertContains('<?php', $contents);
|
||||
$this->assertContains("'plugins' =>", $contents);
|
||||
$this->assertNotContains("Bake", $contents);
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,4 @@
|
||||
<?php
|
||||
|
||||
$loader = require __DIR__ . '/../vendor/autoload.php';
|
||||
$loader->add('Cake\Test\TestCase\Composer', __DIR__ . 'TestCase');
|
||||
Reference in new issue
Block a user