View source
<?php
namespace Drupal\Tests\system_stream_wrapper\Kernel\File;
use Drupal\KernelTests\KernelTestBase;
class ExtensionStreamTest extends KernelTestBase {
public static $modules = [
'system',
'system_stream_wrapper',
'file_test',
];
protected $streamWrappers = [];
protected $baseUrl;
public function setUp() : void {
parent::setUp();
$this->baseUrl = $this->container
->get('request_stack')
->getCurrentRequest()
->getUriForPath(base_path());
$stream_wrapper_manager = $this->container
->get('stream_wrapper_manager');
foreach ([
'module',
'theme',
'profile',
] as $scheme) {
$this->streamWrappers[$scheme] = $stream_wrapper_manager
->getViaScheme($scheme);
}
$theme_installer = $this->container
->get('theme_installer');
$theme_installer
->install([
'bartik',
'seven',
]);
}
public function testInvalidStreamUri($uri) {
$this
->setInstallProfile('minimal');
$this
->enableModules([
'minimal',
]);
$message = "\\InvalidArgumentException thrown on invalid uri {$uri}.";
try {
$this->streamWrappers['module']
->dirname($uri);
$this
->fail($message);
} catch (\InvalidArgumentException $e) {
$this
->assertSame($e
->getMessage(), "Malformed uri parameter passed: {$uri}", $message);
}
}
public function providerInvalidUris() {
return [
[
'invalid/uri',
],
[
'invalid_uri',
],
[
'module/invalid/uri',
],
[
'module/invalid_uri',
],
[
'module:invalid_uri',
],
[
'module::/invalid/uri',
],
[
'module::/invalid_uri',
],
[
'module//:invalid/uri',
],
[
'module//invalid_uri',
],
[
'module//invalid/uri',
],
];
}
public function testStreamWrapperMethods($uri, $dirname, $realpath, $getExternalUrl) {
$this
->setInstallProfile('minimal');
$this
->enableModules([
'minimal',
]);
$realpath = strpos($realpath, 'or is not') === FALSE ? DRUPAL_ROOT . $realpath : $realpath;
$getExternalUrl = strpos($getExternalUrl, 'or is not') === FALSE ? "{$this->baseUrl}{$getExternalUrl}" : $getExternalUrl;
$case = compact('dirname', 'realpath', 'getExternalUrl');
foreach ($case as $method => $expected) {
list($scheme, ) = explode('://', $uri);
$this->streamWrappers[$scheme]
->setUri($uri);
if (strpos($expected, 'or is not') !== FALSE) {
$message = sprintf('Exception thrown: \\InvalidArgumentException("%s").', $expected);
try {
$this->streamWrappers[$scheme]
->{$method}();
$this
->fail($message);
} catch (\InvalidArgumentException $e) {
$this
->assertSame($expected, $e
->getMessage(), $message);
} catch (\RuntimeException $e) {
$this
->assertSame($expected, $e
->getMessage(), $message);
}
}
elseif (is_string($expected)) {
$this
->assertSame($expected, $this->streamWrappers[$scheme]
->{$method}(), sprintf("%s failed", $method));
}
}
}
public function testDirnameAsParameter() {
$this
->setInstallProfile('minimal');
$this
->enableModules([
'minimal',
]);
$this
->assertEquals('module://system', $this->streamWrappers['module']
->dirname('module://system/system.admin.css'));
}
public function providerStreamWrapperMethods() {
return [
[
'module://system',
'module://system',
'/core/modules/system',
'core/modules/system',
],
[
'module://system/css/system.admin.css',
'module://system/css',
'/core/modules/system/css/system.admin.css',
'core/modules/system/css/system.admin.css',
],
[
'module://file_test/file_test.dummy.inc',
'module://file_test',
'/core/modules/file/tests/file_test/file_test.dummy.inc',
'core/modules/file/tests/file_test/file_test.dummy.inc',
],
[
'module://file_test/src/file_test.dummy.inc',
'module://file_test/src',
'/core/modules/file/tests/file_test/src/file_test.dummy.inc',
'core/modules/file/tests/file_test/src/file_test.dummy.inc',
],
[
'module://ckeditor/ckeditor.info.yml',
'Module ckeditor does not exist or is not installed',
'Module ckeditor does not exist or is not installed',
'Module ckeditor does not exist or is not installed',
],
[
'module://foo_bar/foo.bar.js',
'Module foo_bar does not exist or is not installed',
'Module foo_bar does not exist or is not installed',
'Module foo_bar does not exist or is not installed',
],
[
'theme://seven',
'theme://seven',
'/core/themes/seven',
'core/themes/seven',
],
[
'theme://seven/style.css',
'theme://seven',
'/core/themes/seven/style.css',
'core/themes/seven/style.css',
],
[
'theme://bartik/color/preview.js',
'theme://bartik/color',
'/core/themes/bartik/color/preview.js',
'core/themes/bartik/color/preview.js',
],
[
'theme://fifteen/screenshot.png',
'Theme fifteen does not exist or is not installed',
'Theme fifteen does not exist or is not installed',
'Theme fifteen does not exist or is not installed',
],
[
'theme://stark/stark.info.yml',
'Theme stark does not exist or is not installed',
'Theme stark does not exist or is not installed',
'Theme stark does not exist or is not installed',
],
[
'profile://',
'profile://',
'/core/profiles/minimal',
'core/profiles/minimal',
],
[
'profile://config/install/block.block.stark_login.yml',
'profile://config/install',
'/core/profiles/minimal/config/install/block.block.stark_login.yml',
'core/profiles/minimal/config/install/block.block.stark_login.yml',
],
[
'profile://config/install/node.type.article.yml',
'profile://config/install',
'/core/profiles/minimal/config/install/node.type.article.yml',
'core/profiles/minimal/config/install/node.type.article.yml',
],
[
'profile://minimal.info.yml',
'profile://',
'/core/profiles/minimal/minimal.info.yml',
'core/profiles/minimal/minimal.info.yml',
],
];
}
}