DoTrustedCallbackTraitTest.php
Same filename in other branches
Namespace
Drupal\Tests\Core\SecurityFile
-
core/
tests/ Drupal/ Tests/ Core/ Security/ DoTrustedCallbackTraitTest.php
View source
<?php
declare (strict_types=1);
namespace Drupal\Tests\Core\Security;
use Drupal\Core\Security\Attribute\TrustedCallback;
use Drupal\Core\Security\TrustedCallbackInterface;
use Drupal\Core\Security\DoTrustedCallbackTrait;
use Drupal\Core\Security\UntrustedCallbackException;
use Drupal\Tests\UnitTestCase;
/**
* @coversDefaultClass \Drupal\Core\Security\DoTrustedCallbackTrait
* @group Security
*/
class DoTrustedCallbackTraitTest extends UnitTestCase {
use DoTrustedCallbackTrait;
/**
* @covers ::doTrustedCallback
* @dataProvider providerTestTrustedCallbacks
*/
public function testTrustedCallbacks(callable $callback, $extra_trusted_interface = NULL) : void {
$return = $this->doTrustedCallback($callback, [], '%s is not trusted', TrustedCallbackInterface::THROW_EXCEPTION, $extra_trusted_interface);
$this->assertSame('test', $return);
}
/**
* Data provider for ::testTrustedCallbacks().
*/
public static function providerTestTrustedCallbacks() {
$closure = function () {
return 'test';
};
$tests['closure'] = [
$closure,
];
$tests['TrustedCallbackInterface_object'] = [
[
new TrustedMethods(),
'callback',
],
TrustedInterface::class,
];
$tests['TrustedCallbackInterface_object_attribute'] = [
[
new TrustedMethods(),
'attributeCallback',
],
TrustedInterface::class,
];
$tests['TrustedCallbackInterface_static_string'] = [
'\\Drupal\\Tests\\Core\\Security\\TrustedMethods::callback',
TrustedInterface::class,
];
$tests['TrustedCallbackInterface_static_array'] = [
[
TrustedMethods::class,
'callback',
],
TrustedInterface::class,
];
$tests['TrustedCallbackInterface_static_array_attribute'] = [
[
TrustedMethods::class,
'attributeCallback',
],
TrustedInterface::class,
];
$tests['extra_trusted_interface_object'] = [
[
new TrustedObject(),
'callback',
],
TrustedInterface::class,
];
$tests['extra_trusted_interface_static_string'] = [
'\\Drupal\\Tests\\Core\\Security\\TrustedObject::callback',
TrustedInterface::class,
];
$tests['extra_trusted_interface_static_array'] = [
[
TrustedObject::class,
'callback',
],
TrustedInterface::class,
];
return $tests;
}
/**
* @covers ::doTrustedCallback
* @dataProvider providerTestUntrustedCallbacks
*/
public function testUntrustedCallbacks(callable $callback, $extra_trusted_interface = NULL) : void {
$this->expectException(UntrustedCallbackException::class);
$this->doTrustedCallback($callback, [], '%s is not trusted', TrustedCallbackInterface::THROW_EXCEPTION, $extra_trusted_interface);
}
/**
* Data provider for ::testUntrustedCallbacks().
*/
public static function providerTestUntrustedCallbacks() {
$tests['TrustedCallbackInterface_object'] = [
[
new TrustedMethods(),
'unTrustedCallback',
],
TrustedInterface::class,
];
$tests['TrustedCallbackInterface_static_string'] = [
'\\Drupal\\Tests\\Core\\Security\\TrustedMethods::unTrustedCallback',
TrustedInterface::class,
];
$tests['TrustedCallbackInterface_static_array'] = [
[
TrustedMethods::class,
'unTrustedCallback',
],
TrustedInterface::class,
];
$tests['untrusted_object'] = [
[
new UntrustedObject(),
'callback',
],
TrustedInterface::class,
];
$tests['untrusted_object_static_string'] = [
'\\Drupal\\Tests\\Core\\Security\\UntrustedObject::callback',
TrustedInterface::class,
];
$tests['untrusted_object_static_array'] = [
[
UntrustedObject::class,
'callback',
],
TrustedInterface::class,
];
$tests['invokable_untrusted_object_static_array'] = [
new InvokableUntrustedObject(),
TrustedInterface::class,
];
return $tests;
}
/**
* @dataProvider errorTypeProvider
*/
public function testException($callback) : void {
$this->expectException(UntrustedCallbackException::class);
$this->expectExceptionMessage('Drupal\\Tests\\Core\\Security\\UntrustedObject::callback is not trusted');
$this->doTrustedCallback($callback, [], '%s is not trusted');
}
/**
* @dataProvider errorTypeProvider
* @group legacy
*/
public function testSilencedDeprecation($callback) : void {
$this->expectDeprecation('Drupal\\Tests\\Core\\Security\\UntrustedObject::callback is not trusted');
$this->doTrustedCallback($callback, [], '%s is not trusted', TrustedCallbackInterface::TRIGGER_SILENCED_DEPRECATION);
}
/**
* @dataProvider errorTypeProvider
* @group legacy
*/
public function testWarning($callback) : void {
$this->expectDeprecation('Passing E_USER_WARNING for $error_type in Drupal\\Core\\Security\\DoTrustedCallbackTrait::doTrustedCallback() is deprecated in drupal:10.3.0 and will be removed from drupal:11.0.0. Use TrustedCallbackInterface::THROW_EXCEPTION or TrustedCallbackInterface::TRIGGER_SILENCED_DEPRECATION instead. See https://www.drupal.org/node/3427367');
$this->expectWarning();
$this->expectWarningMessage('Drupal\\Tests\\Core\\Security\\UntrustedObject::callback is not trusted');
$this->doTrustedCallback($callback, [], '%s is not trusted', TrustedCallbackInterface::TRIGGER_WARNING);
}
/**
* Data provider for tests of ::doTrustedCallback $error_type argument.
*/
public static function errorTypeProvider() {
$tests['untrusted_object'] = [
[
new UntrustedObject(),
'callback',
],
];
$tests['untrusted_object_static_string'] = [
'Drupal\\Tests\\Core\\Security\\UntrustedObject::callback',
];
$tests['untrusted_object_static_array'] = [
[
UntrustedObject::class,
'callback',
],
];
return $tests;
}
}
interface TrustedInterface {
}
class TrustedObject implements TrustedInterface {
public static function callback() {
return 'test';
}
}
class UntrustedObject {
public static function callback() {
return 'test';
}
}
class InvokableUntrustedObject {
public function __invoke() {
return 'test';
}
}
class TrustedMethods implements TrustedCallbackInterface {
public static function trustedCallbacks() {
return [
'callback',
];
}
public static function callback() {
return 'test';
}
public static function attributeCallback() {
return 'test';
}
public static function unTrustedCallback() {
return 'test';
}
}
Classes
Title | Deprecated | Summary |
---|---|---|
DoTrustedCallbackTraitTest | @coversDefaultClass \Drupal\Core\Security\DoTrustedCallbackTrait @group Security | |
InvokableUntrustedObject | ||
TrustedMethods | ||
TrustedObject | ||
UntrustedObject |
Interfaces
Title | Deprecated | Summary |
---|---|---|
TrustedInterface |
Buggy or inaccurate documentation? Please file an issue. Need support? Need help programming? Connect with the Drupal community.