| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342 |
- <?php
- declare(strict_types=1);
- /**
- * CakePHP(tm) : Rapid Development Framework (https://cakephp.org)
- * Copyright (c) Cake Software Foundation, Inc. (https://cakefoundation.org)
- *
- * Licensed under The MIT License
- * For full copyright and license information, please see the LICENSE.txt
- * Redistributions of files must retain the above copyright notice
- *
- * @copyright Copyright (c) Cake Software Foundation, Inc. (https://cakefoundation.org)
- * @link https://cakephp.org CakePHP(tm) Project
- * @since 3.0.0
- * @license https://opensource.org/licenses/mit-license.php MIT License
- */
- namespace Cake\Test\TestCase\Core;
- use Cake\Core\Configure;
- use Cake\Http\Response;
- use Cake\TestSuite\TestCase;
- use PHPUnit\Framework\Attributes\DataProvider;
- use stdClass;
- require_once CAKE . 'Core/functions_global.php';
- /**
- * Test cases for functions in Core\functions_global.php
- */
- class FunctionsGlobalTest extends TestCase
- {
- /**
- * Test cases for env()
- */
- public function testEnv(): void
- {
- $_ENV['DOES_NOT_EXIST'] = null;
- $this->assertNull(env('DOES_NOT_EXIST'));
- $this->assertSame('default', env('DOES_NOT_EXIST', 'default'));
- $_ENV['DOES_EXIST'] = 'some value';
- $this->assertSame('some value', env('DOES_EXIST'));
- $this->assertSame('some value', env('DOES_EXIST', 'default'));
- $_ENV['EMPTY_VALUE'] = '';
- $this->assertSame('', env('EMPTY_VALUE'));
- $this->assertSame('', env('EMPTY_VALUE', 'default'));
- $_ENV['ZERO'] = '0';
- $this->assertSame('0', env('ZERO'));
- $this->assertSame('0', env('ZERO', '1'));
- $this->assertSame('', env('DOCUMENT_ROOT'));
- $this->assertStringContainsString('phpunit', env('PHP_SELF'));
- }
- public function testEnv2(): void
- {
- $this->skipIf(!function_exists('ini_get') || ini_get('safe_mode') === '1', 'Safe mode is on.');
- $server = $_SERVER;
- $env = $_ENV;
- $_SERVER = [];
- $_ENV = [];
- $_SERVER['SCRIPT_NAME'] = '/a/test/test.php';
- $this->assertSame(env('SCRIPT_NAME'), '/a/test/test.php');
- $_SERVER = [];
- $_ENV = [];
- $_ENV['CGI_MODE'] = 'BINARY';
- $_ENV['SCRIPT_URL'] = '/a/test/test.php';
- $this->assertSame(env('SCRIPT_NAME'), '/a/test/test.php');
- $_SERVER = [];
- $_ENV = [];
- $this->assertFalse(env('HTTPS'));
- $_SERVER['HTTPS'] = 'on';
- $this->assertTrue(env('HTTPS'));
- $_SERVER['HTTPS'] = '1';
- $this->assertTrue(env('HTTPS'));
- $_SERVER['HTTPS'] = 'I am not empty';
- $this->assertTrue(env('HTTPS'));
- $_SERVER['HTTPS'] = 1;
- $this->assertTrue(env('HTTPS'));
- $_SERVER['HTTPS'] = 'off';
- $this->assertFalse(env('HTTPS'));
- $_SERVER['HTTPS'] = false;
- $this->assertFalse(env('HTTPS'));
- $_SERVER['HTTPS'] = '';
- $this->assertFalse(env('HTTPS'));
- $_SERVER = [];
- $_ENV['SCRIPT_URI'] = 'https://domain.test/a/test.php';
- $this->assertTrue(env('HTTPS'));
- $_ENV['SCRIPT_URI'] = 'http://domain.test/a/test.php';
- $this->assertFalse(env('HTTPS'));
- $_SERVER = [];
- $_ENV = [];
- $this->assertNull(env('TEST_ME'));
- $_ENV['TEST_ME'] = 'a';
- $this->assertSame(env('TEST_ME'), 'a');
- $_SERVER['TEST_ME'] = 'b';
- $this->assertSame(env('TEST_ME'), 'b');
- unset($_ENV['TEST_ME']);
- $this->assertSame(env('TEST_ME'), 'b');
- $_SERVER = $server;
- $_ENV = $env;
- }
- /**
- * Test cases for h()
- *
- * @param mixed $value
- * @param mixed $expected
- */
- #[DataProvider('hInputProvider')]
- public function testH($value, $expected): void
- {
- $result = h($value);
- $this->assertSame($expected, $result);
- }
- public static function hInputProvider(): array
- {
- return [
- ['i am clean', 'i am clean'],
- ['i "need" escaping', 'i "need" escaping'],
- [null, null],
- [1, 1],
- [1.1, 1.1],
- [new stdClass(), '(object)stdClass'],
- [new Response(), ''],
- [['clean', '"clean-me'], ['clean', '"clean-me']],
- ];
- }
- public function testH2(): void
- {
- $string = '<foo>';
- $result = h($string);
- $this->assertSame('<foo>', $result);
- $in = ['this & that', '<p>Which one</p>'];
- $result = h($in);
- $expected = ['this & that', '<p>Which one</p>'];
- $this->assertSame($expected, $result);
- $string = '<foo> & ';
- $result = h($string);
- $this->assertSame('<foo> & &nbsp;', $result);
- $string = '<foo> & ';
- $result = h($string, false);
- $this->assertSame('<foo> & ', $result);
- $string = "An invalid\x80string";
- $result = h($string);
- $this->assertStringContainsString('string', $result);
- $arr = ['<foo>', ' '];
- $result = h($arr);
- $expected = [
- '<foo>',
- '&nbsp;',
- ];
- $this->assertSame($expected, $result);
- $arr = ['<foo>', ' '];
- $result = h($arr, false);
- $expected = [
- '<foo>',
- ' ',
- ];
- $this->assertSame($expected, $result);
- $arr = ['f' => '<foo>', 'n' => ' '];
- $result = h($arr, false);
- $expected = [
- 'f' => '<foo>',
- 'n' => ' ',
- ];
- $this->assertSame($expected, $result);
- $arr = ['invalid' => "\x99An invalid\x80string", 'good' => 'Good string'];
- $result = h($arr);
- $this->assertStringContainsString('An invalid', $result['invalid']);
- $this->assertSame('Good string', $result['good']);
- // Test that boolean values are not converted to strings
- $result = h(false);
- $this->assertFalse($result);
- $arr = ['foo' => false, 'bar' => true];
- $result = h($arr);
- $this->assertFalse($result['foo']);
- $this->assertTrue($result['bar']);
- $obj = new stdClass();
- $result = h($obj);
- $this->assertSame('(object)stdClass', $result);
- $obj = new Response(['body' => 'Body content']);
- $result = h($obj);
- $this->assertSame('Body content', $result);
- }
- /**
- * Test splitting plugin names.
- */
- public function testPluginSplit(): void
- {
- $result = pluginSplit('Something.else');
- $this->assertSame(['Something', 'else'], $result);
- $result = pluginSplit('Something.else.more.dots');
- $this->assertSame(['Something', 'else.more.dots'], $result);
- $result = pluginSplit('Somethingelse');
- $this->assertSame([null, 'Somethingelse'], $result);
- $result = pluginSplit('Something.else', true);
- $this->assertSame(['Something.', 'else'], $result);
- $result = pluginSplit('Something.else.more.dots', true);
- $this->assertSame(['Something.', 'else.more.dots'], $result);
- $result = pluginSplit('Post', false, 'Blog');
- $this->assertSame(['Blog', 'Post'], $result);
- $result = pluginSplit('Blog.Post', false, 'Ultimate');
- $this->assertSame(['Blog', 'Post'], $result);
- }
- /**
- * test namespaceSplit
- */
- public function testNamespaceSplit(): void
- {
- $result = namespaceSplit('Something');
- $this->assertSame(['', 'Something'], $result);
- $result = namespaceSplit('\Something');
- $this->assertSame(['', 'Something'], $result);
- $result = namespaceSplit('Cake\Something');
- $this->assertSame(['Cake', 'Something'], $result);
- $result = namespaceSplit('Cake\Test\Something');
- $this->assertSame(['Cake\Test', 'Something'], $result);
- }
- /**
- * Test error messages coming out when deprecated level is on, manually setting the stack frame
- */
- public function testDeprecationWarningEnabled(): void
- {
- $error = $this->captureError(E_ALL, function (): void {
- deprecationWarning('4.5.0', 'This is deprecated ' . uniqid(), 2);
- });
- $this->assertMatchesRegularExpression(
- '/This is deprecated \w+\n(.*?)[\/\\\]FunctionsGlobalTest.php, line\: \d+/',
- $error->getMessage()
- );
- }
- /**
- * Test error messages coming out when deprecated level is on, not setting the stack frame manually
- */
- public function testDeprecationWarningEnabledDefaultFrame(): void
- {
- $error = $this->captureError(E_ALL, function (): void {
- deprecationWarning('5.0.0', 'This is going away too ' . uniqid());
- });
- $this->assertMatchesRegularExpression(
- '/This is going away too \w+\n(.*?)[\/\\\]TestCase.php, line\: \d+/',
- $error->getMessage()
- );
- }
- /**
- * Test no error when deprecation matches ignore paths.
- */
- public function testDeprecationWarningPathDisabled(): void
- {
- $this->expectNotToPerformAssertions();
- Configure::write('Error.ignoredDeprecationPaths', ['src/TestSuite/*']);
- $this->withErrorReporting(E_ALL, function (): void {
- deprecationWarning('5.0.1', 'This will be gone soon');
- });
- }
- /**
- * Test no error when deprecated level is off.
- */
- public function testDeprecationWarningLevelDisabled(): void
- {
- $this->expectNotToPerformAssertions();
- $this->withErrorReporting(E_ALL ^ E_USER_DEPRECATED, function (): void {
- deprecationWarning('5.0.0', 'This is leaving');
- });
- }
- /**
- * Test error messages coming out when warning level is on.
- */
- public function testTriggerWarningEnabled(): void
- {
- $error = $this->captureError(E_ALL, function (): void {
- triggerWarning('This will be gone one day');
- $this->assertTrue(true);
- });
- $this->assertMatchesRegularExpression('/This will be gone one day - (.*?)[\/\\\]FunctionsGlobalTest.php, line\: \d+/', $error->getMessage());
- }
- /**
- * Test no error when warning level is off.
- */
- public function testTriggerWarningLevelDisabled(): void
- {
- $this->withErrorReporting(E_ALL ^ E_USER_WARNING, function (): void {
- triggerWarning('This was a mistake.');
- $this->assertTrue(true);
- });
- }
- }
|