[!!!][TASK] Remove deprecated PHP classes from EXT:core 95/59195/5
authorBenni Mack <benni@typo3.org>
Tue, 18 Dec 2018 17:27:21 +0000 (18:27 +0100)
committerWouter Wolters <typo3@wouterwolters.nl>
Tue, 18 Dec 2018 21:00:04 +0000 (22:00 +0100)
The following previously deprecated PHP classes are now removed:
- TYPO3\CMS\Core\Encoder\JavaScriptEncoder
- TYPO3\CMS\Core\Resources\Utility\BackendUtility
- TYPO3\CMS\Core\Utility\ClientUtility
- TYPO3\CMS\Core\Utility\PhpOptionsUtility

Resolves: #87201
Releases: master
Change-Id: I0b1896692ebf1f15948a9a3661fdc10ab6f019ff
Reviewed-on: https://review.typo3.org/59195
Reviewed-by: Georg Ringer <georg.ringer@gmail.com>
Tested-by: Georg Ringer <georg.ringer@gmail.com>
Tested-by: TYPO3com <no-reply@typo3.com>
Reviewed-by: Christian Kuhn <lolli@schwarzbu.ch>
Tested-by: Christian Kuhn <lolli@schwarzbu.ch>
Reviewed-by: Wouter Wolters <typo3@wouterwolters.nl>
Tested-by: Wouter Wolters <typo3@wouterwolters.nl>
typo3/sysext/core/Classes/Encoder/JavaScriptEncoder.php [deleted file]
typo3/sysext/core/Classes/Resource/Utility/BackendUtility.php [deleted file]
typo3/sysext/core/Classes/Utility/ClientUtility.php [deleted file]
typo3/sysext/core/Classes/Utility/PhpOptionsUtility.php [deleted file]
typo3/sysext/core/Documentation/Changelog/master/Breaking-87193-DeprecatedFunctionalityRemoved.rst
typo3/sysext/core/Tests/UnitDeprecated/Encoder/JavaScriptEncoderTest.php [deleted file]
typo3/sysext/core/Tests/UnitDeprecated/Utility/ClientUtilityTest.php [deleted file]
typo3/sysext/core/Tests/UnitDeprecated/Utility/GeneralUtilityTest.php
typo3/sysext/install/Configuration/ExtensionScanner/Php/ClassNameMatcher.php
typo3/sysext/install/Configuration/ExtensionScanner/Php/MethodCallStaticMatcher.php

diff --git a/typo3/sysext/core/Classes/Encoder/JavaScriptEncoder.php b/typo3/sysext/core/Classes/Encoder/JavaScriptEncoder.php
deleted file mode 100644 (file)
index 73f0125..0000000
+++ /dev/null
@@ -1,146 +0,0 @@
-<?php
-namespace TYPO3\CMS\Core\Encoder;
-
-/*
- * This file is part of the TYPO3 CMS project.
- *
- * It is free software; you can redistribute it and/or modify it under
- * the terms of the GNU General Public License, either version 2
- * of the License, or any later version.
- *
- * For the full copyright and license information, please read the
- * LICENSE.txt file that was distributed with this source code.
- *
- * The TYPO3 project - inspiring people to share!
- */
-
-/**
- * Adopted from OWASP Enterprise Security API (ESAPI) reference implementation for the JavaScript Codec.
- * Original Author: Mike Boberski
- *
- * This class provides encoding for user input that is intended to be used in a JavaScript context.
- * It encodes all characters except alphanumericals and the immune characters to a hex representation.
- * @copyright 2009-2010 The OWASP Foundation
- * @link http://www.owasp.org/index.php/ESAPI
- * @deprecated since TYPO3 v9.3, will be removed in TYPO3 v10.0
- */
-class JavaScriptEncoder implements \TYPO3\CMS\Core\SingletonInterface
-{
-    /**
-     * A map where the keys are ordinal values of non-alphanumeric single-byte
-     * characters and the values are hexadecimal equivalents as strings.
-     *
-     * @var array
-     */
-    protected $hexMatrix = [];
-
-    /**
-     * Characters that are immune (not dangerous) in the JavaScript context
-     *
-     * @var array
-     */
-    protected $immuneCharacters = [',', '.', '_'];
-
-    /**
-     * TYPO3 charset encoding object
-     *
-     * @var \TYPO3\CMS\Core\Charset\CharsetConverter
-     */
-    protected $charsetConversion;
-
-    /**
-     * Populates the $hex map of non-alphanumeric single-byte characters.
-     *
-     * Alphanumerical character are set to NULL in the matrix.
-     * @deprecated since TYPO3 v9.3, will be removed in TYPO3 v10.0
-     */
-    public function __construct()
-    {
-        trigger_error('TYPO3\'s JavaScriptEncoder will be removed in TYPO3 v10.0, use PHPs native json_encode() or GeneralUtility::quoteJSvalue() instead.', E_USER_DEPRECATED);
-        $this->charsetConversion = \TYPO3\CMS\Core\Utility\GeneralUtility::makeInstance(\TYPO3\CMS\Core\Charset\CharsetConverter::class);
-        for ($i = 0; $i < 256; $i++) {
-            if ($i >= ord('0') && $i <= ord('9') || $i >= ord('A') && $i <= ord('Z') || $i >= ord('a') && $i <= ord('z')) {
-                $this->hexMatrix[$i] = null;
-            } else {
-                $this->hexMatrix[$i] = dechex($i);
-            }
-        }
-    }
-
-    /**
-     * Encodes a string for JavaScript.
-     *
-     * @param string $input The string to encode, may be empty.
-     * @return string The encoded string.
-     */
-    public function encode($input)
-    {
-        $stringLength = mb_strlen($input, 'utf-8');
-        $encodedString = '';
-        for ($i = 0; $i < $stringLength; $i++) {
-            $c = mb_substr($input, $i, 1, 'utf-8');
-            $encodedString .= $this->encodeCharacter($c);
-        }
-        return $encodedString;
-    }
-
-    /**
-     * Returns backslash encoded numeric format. Does not use backslash
-     * character escapes such as, \" or \' as these may cause parsing problems.
-     * For example, if a javascript attribute, such as onmouseover, contains
-     * a \" that will close the entire attribute and allow an attacker to inject
-     * another script attribute.
-     *
-     * @param string $character utf-8 character that needs to be encoded
-     * @return string encoded character
-     */
-    protected function encodeCharacter($character)
-    {
-        if ($this->isImmuneCharacter($character)) {
-            return $character;
-        }
-        $ordinalValue = $this->charsetConversion->utf8CharToUnumber($character);
-        // Check for alphanumeric characters
-        $hex = $this->getHexForNonAlphanumeric($ordinalValue);
-        if ($hex === null) {
-            return $character;
-        }
-        // Encode up to 256 with \\xHH
-        if ($ordinalValue < 256) {
-            $pad = substr('00', strlen($hex));
-            return '\\x' . $pad . strtoupper($hex);
-        }
-        // Otherwise encode with \\uHHHH
-        $pad = substr('0000', strlen($hex));
-        return '\\u' . $pad . strtoupper($hex);
-    }
-
-    /**
-     * Checks if the given character is one of the immune characters
-     *
-     * @param string $character utf-8 character to search for, must not be empty
-     * @return bool TRUE if character is immune, FALSE otherwise
-     */
-    protected function isImmuneCharacter($character)
-    {
-        return in_array($character, $this->immuneCharacters, true);
-    }
-
-    /**
-     * Returns the ordinal value as a hex string of any character that is not a
-     * single-byte alphanumeric. The character should be supplied as a string in
-     * the utf-8 character encoding.
-     * If the character is an alphanumeric character with ordinal value below 255,
-     * then this method will return NULL.
-     *
-     * @param int $ordinalValue Ordinal value of the character
-     * @return string hexadecimal ordinal value of non-alphanumeric characters or NULL otherwise.
-     */
-    protected function getHexForNonAlphanumeric($ordinalValue)
-    {
-        if ($ordinalValue <= 255) {
-            return $this->hexMatrix[$ordinalValue];
-        }
-        return dechex($ordinalValue);
-    }
-}
diff --git a/typo3/sysext/core/Classes/Resource/Utility/BackendUtility.php b/typo3/sysext/core/Classes/Resource/Utility/BackendUtility.php
deleted file mode 100644 (file)
index 7417d92..0000000
+++ /dev/null
@@ -1,53 +0,0 @@
-<?php
-namespace TYPO3\CMS\Core\Resource\Utility;
-
-/*
- * This file is part of the TYPO3 CMS project.
- *
- * It is free software; you can redistribute it and/or modify it under
- * the terms of the GNU General Public License, either version 2
- * of the License, or any later version.
- *
- * For the full copyright and license information, please read the
- * LICENSE.txt file that was distributed with this source code.
- *
- * The TYPO3 project - inspiring people to share!
- */
-
-use TYPO3\CMS\Core\Localization\LanguageService;
-use TYPO3\CMS\Core\Messaging\FlashMessage;
-use TYPO3\CMS\Core\Resource\AbstractFile;
-use TYPO3\CMS\Core\Utility\GeneralUtility;
-
-/**
- * Some Backend Utility functions for working with resources
- */
-class BackendUtility
-{
-    /**
-     * Create a flash message for a file that is marked as missing
-     *
-     * @param AbstractFile $file
-     * @return FlashMessage
-     * @deprecated since TYPO3 v9, will be removed in TYPO3 v10.0.
-     */
-    public static function getFlashMessageForMissingFile(AbstractFile $file)
-    {
-        trigger_error('This method will be removed in TYPO3 v10.0, create the flash message code in your own custom code in the correct context.', E_USER_DEPRECATED);
-
-        /** @var LanguageService $lang */
-        $lang = $GLOBALS['LANG'];
-
-        /** @var FlashMessage $flashMessage */
-        $flashMessage = GeneralUtility::makeInstance(
-            FlashMessage::class,
-            $lang->sL('LLL:EXT:core/Resources/Private/Language/locallang_core.xlf:warning.file_missing_text') .
-            ' <abbr title="' . htmlspecialchars($file->getStorage()->getName() . ' :: ' . $file->getIdentifier()) . '">' .
-            htmlspecialchars($file->getName()) . '</abbr>',
-            $lang->sL('LLL:EXT:core/Resources/Private/Language/locallang_core.xlf:warning.file_missing'),
-            FlashMessage::ERROR
-        );
-
-        return $flashMessage;
-    }
-}
diff --git a/typo3/sysext/core/Classes/Utility/ClientUtility.php b/typo3/sysext/core/Classes/Utility/ClientUtility.php
deleted file mode 100644 (file)
index e198535..0000000
+++ /dev/null
@@ -1,183 +0,0 @@
-<?php
-namespace TYPO3\CMS\Core\Utility;
-
-/*
- * This file is part of the TYPO3 CMS project.
- *
- * It is free software; you can redistribute it and/or modify it under
- * the terms of the GNU General Public License, either version 2
- * of the License, or any later version.
- *
- * For the full copyright and license information, please read the
- * LICENSE.txt file that was distributed with this source code.
- *
- * The TYPO3 project - inspiring people to share!
- */
-
-/**
- * Class to handle and determine browser specific information.
- */
-class ClientUtility
-{
-    /**
-     * Generates an array with abstracted browser information
-     *
-     * @param string $userAgent The useragent string, \TYPO3\CMS\Core\Utility\GeneralUtility::getIndpEnv('HTTP_USER_AGENT')
-     * @return array Contains keys "browser", "version", "system
-     * @deprecated since TYPO3 v9, will be removed in TYPO3 v10.0.
-     */
-    public static function getBrowserInfo($userAgent)
-    {
-        trigger_error('ClientUtility::getBrowserInfo() will be removed with TYPO3 v10.0.', E_USER_DEPRECATED);
-        // Hook: $TYPO3_CONF_VARS['SC_OPTIONS']['t3lib/div/class.t3lib_utility_client.php']['getBrowserInfo']:
-        foreach ($GLOBALS['TYPO3_CONF_VARS']['SC_OPTIONS']['t3lib/div/class.t3lib_utility_client.php']['getBrowserInfo'] ?? [] as $hookFunction) {
-            $returnResult = true;
-            $hookParameters = [
-                'userAgent' => &$userAgent,
-                'returnResult' => &$returnResult
-            ];
-            // need reference for third parameter in \TYPO3\CMS\Core\Utility\GeneralUtility::callUserFunction,
-            // so create a reference to NULL
-            $null = null;
-            $hookResult = GeneralUtility::callUserFunction($hookFunction, $hookParameters, $null);
-            if ($returnResult && is_array($hookResult) && !empty($hookResult)) {
-                return $hookResult;
-            }
-        }
-        $userAgent = trim($userAgent);
-        $browserInfo = [
-            'useragent' => $userAgent
-        ];
-        // Analyze the userAgent string
-        // Declare known browsers to look for
-        $known = [
-            'msie',
-            'firefox',
-            'webkit',
-            'opera',
-            'netscape',
-            'konqueror',
-            'gecko',
-            'chrome',
-            'safari',
-            'seamonkey',
-            'navigator',
-            'mosaic',
-            'lynx',
-            'amaya',
-            'omniweb',
-            'avant',
-            'camino',
-            'flock',
-            'aol'
-        ];
-        $matches = [];
-        $pattern = '#(?P<browser>' . implode('|', $known) . ')[/ ]+(?P<version>[0-9]+(?:\\.[0-9]+)?)#';
-        // Find all phrases (or return empty array if none found)
-        if (!preg_match_all($pattern, strtolower($userAgent), $matches)) {
-            // Microsoft Internet-Explorer 11 does not have a sign of "MSIE" or so in the useragent.
-            // All checks from the pattern above fail here. Look for a special combination of
-            // "Mozilla/5.0" in front, "Trident/7.0" in the middle and "like Gecko" at the end.
-            // The version (revision) is given as "; rv:11.0" in the useragent then.
-            unset($matches);
-            $pattern = '#mozilla/5\\.0 \\(.*trident/7\\.0.*; rv:(?P<version>[0-9]+(?:\\.[0-9]+)?)\\) like gecko#i';
-            if (preg_match_all($pattern, $userAgent, $matches)) {
-                $browserInfo['browser'] = 'msie';
-                $browserInfo['version'] = $matches['version'][0];
-                $browserInfo['all'] = ['msie' => $matches['version'][0]];
-            } else {
-                $browserInfo['browser'] = 'unknown';
-                $browserInfo['version'] = '';
-                $browserInfo['all'] = [];
-            }
-        } else {
-            // Since some UAs have more than one phrase (e.g Firefox has a Gecko phrase,
-            // Opera 7,8 have a MSIE phrase), use the last one found (the right-most one
-            // in the UA).  That's usually the most correct.
-            // For IE use the first match as IE sends multiple MSIE with version, from higher to lower.
-            $lastIndex = count($matches['browser']) - 1;
-            $browserInfo['browser'] = $matches['browser'][$lastIndex];
-            $browserInfo['version'] = $browserInfo['browser'] === 'msie' ? $matches['version'][0] : $matches['version'][$lastIndex];
-            // But return all parsed browsers / version in an extra array
-            $browserInfo['all'] = [];
-            for ($i = 0; $i <= $lastIndex; $i++) {
-                if (!isset($browserInfo['all'][$matches['browser'][$i]])) {
-                    $browserInfo['all'][$matches['browser'][$i]] = $matches['version'][$i];
-                }
-            }
-            // Replace gecko build date with version given by rv
-            if (isset($browserInfo['all']['gecko'])) {
-                preg_match_all('/rv:([0-9\\.]*)/', strtolower($userAgent), $version);
-                if ($version[1][0]) {
-                    $browserInfo['all']['gecko'] = $version[1][0];
-                }
-            }
-        }
-        $browserInfo['all_systems'] = [];
-        if (strstr($userAgent, 'Win')) {
-            // Windows
-            if (strstr($userAgent, 'Windows NT 6.2') || strstr($userAgent, 'Windows NT 6.3')) {
-                $browserInfo['all_systems'][] = 'win8';
-                $browserInfo['all_systems'][] = 'winNT';
-            } elseif (strstr($userAgent, 'Windows NT 6.1')) {
-                $browserInfo['all_systems'][] = 'win7';
-                $browserInfo['all_systems'][] = 'winNT';
-            } elseif (strstr($userAgent, 'Windows NT 6.0')) {
-                $browserInfo['all_systems'][] = 'winVista';
-                $browserInfo['all_systems'][] = 'winNT';
-            } elseif (strstr($userAgent, 'Windows NT 5.1')) {
-                $browserInfo['all_systems'][] = 'winXP';
-                $browserInfo['all_systems'][] = 'winNT';
-            } elseif (strstr($userAgent, 'Windows NT 5.0')) {
-                $browserInfo['all_systems'][] = 'win2k';
-                $browserInfo['all_systems'][] = 'winNT';
-            } elseif (strstr($userAgent, 'Win98') || strstr($userAgent, 'Windows 98')) {
-                $browserInfo['all_systems'][] = 'win98';
-            } elseif (strstr($userAgent, 'Win95') || strstr($userAgent, 'Windows 95')) {
-                $browserInfo['all_systems'][] = 'win95';
-            } elseif (strstr($userAgent, 'WinNT') || strstr($userAgent, 'Windows NT')) {
-                $browserInfo['all_systems'][] = 'winNT';
-            } elseif (strstr($userAgent, 'Win16') || strstr($userAgent, 'Windows 311')) {
-                $browserInfo['all_systems'][] = 'win311';
-            }
-        } elseif (strstr($userAgent, 'Mac')) {
-            if (strstr($userAgent, 'iPad') || strstr($userAgent, 'iPhone') || strstr($userAgent, 'iPod')) {
-                $browserInfo['all_systems'][] = 'iOS';
-                $browserInfo['all_systems'][] = 'mac';
-            } else {
-                $browserInfo['all_systems'][] = 'mac';
-            }
-        } elseif (strstr($userAgent, 'Android')) {
-            $browserInfo['all_systems'][] = 'android';
-            $browserInfo['all_systems'][] = 'linux';
-        } elseif (strstr($userAgent, 'Linux')) {
-            $browserInfo['all_systems'][] = 'linux';
-        } elseif (strstr($userAgent, 'BSD')) {
-            $browserInfo['all_systems'][] = 'unix_bsd';
-        } elseif (strstr($userAgent, 'SGI') && strstr($userAgent, ' IRIX ')) {
-            $browserInfo['all_systems'][] = 'unix_sgi';
-        } elseif (strstr($userAgent, ' SunOS ')) {
-            $browserInfo['all_systems'][] = 'unix_sun';
-        } elseif (strstr($userAgent, ' HP-UX ')) {
-            $browserInfo['all_systems'][] = 'unix_hp';
-        } elseif (strstr($userAgent, 'CrOS')) {
-            $browserInfo['all_systems'][] = 'chrome';
-            $browserInfo['all_systems'][] = 'linux';
-        }
-        return $browserInfo;
-    }
-
-    /**
-     * Returns the version of a browser; Basically getting float value of the input string,
-     * stripping of any non-numeric values in the beginning of the string first.
-     *
-     * @param string $version A string with version number, eg. "/7.32 blablabla
-     * @return float Returns double value, eg. "7.32
-     * @deprecated since TYPO3 v9, will be removed in TYPO3 v10.0.
-     */
-    public static function getVersion($version)
-    {
-        trigger_error('ClientUtility::getVersion() will be removed with TYPO3 v10.0.', E_USER_DEPRECATED);
-        return (float)preg_replace('/^[^0-9]*/', '', $version);
-    }
-}
diff --git a/typo3/sysext/core/Classes/Utility/PhpOptionsUtility.php b/typo3/sysext/core/Classes/Utility/PhpOptionsUtility.php
deleted file mode 100644 (file)
index ee6fc51..0000000
+++ /dev/null
@@ -1,46 +0,0 @@
-<?php
-namespace TYPO3\CMS\Core\Utility;
-
-/*
- * This file is part of the TYPO3 CMS project.
- *
- * It is free software; you can redistribute it and/or modify it under
- * the terms of the GNU General Public License, either version 2
- * of the License, or any later version.
- *
- * For the full copyright and license information, please read the
- * LICENSE.txt file that was distributed with this source code.
- *
- * The TYPO3 project - inspiring people to share!
- */
-
-/**
- * Class to handle php environment specific options / functions
- */
-class PhpOptionsUtility
-{
-    /**
-     * Check if php session.auto_start is enabled
-     *
-     * @return bool TRUE if session.auto_start is enabled, FALSE if disabled
-     * @deprecated since TYPO3 v9.3, will be removed in TYPO3 v10.0. Use custom filter_var()/ini_get() functionality yourself.
-     */
-    public static function isSessionAutoStartEnabled()
-    {
-        trigger_error('The PhpOptionsUtility class will be removed in TYPO3 v10.0. Use custom filter_var()/ini_get() functionality yourself.', E_USER_DEPRECATED);
-        return self::getIniValueBoolean('session.auto_start');
-    }
-
-    /**
-     * Cast an on/off php ini value to boolean
-     *
-     * @param string $configOption
-     * @return bool TRUE if the given option is enabled, FALSE if disabled
-     * @deprecated since TYPO3 v9.3, will be removed in TYPO3 v10.0. Use custom filter_var()/ini_get() functionality yourself.
-     */
-    public static function getIniValueBoolean($configOption)
-    {
-        trigger_error('The PhpOptionsUtility class will be removed in TYPO3 v10.0. Use custom filter_va()/ini_get() functionality yourself.', E_USER_DEPRECATED);
-        return filter_var(ini_get($configOption), FILTER_VALIDATE_BOOLEAN, [FILTER_REQUIRE_SCALAR, FILTER_NULL_ON_FAILURE]);
-    }
-}
index 80ce7b4..9fa64a6 100644 (file)
@@ -9,6 +9,13 @@ See :issue:`87193`
 Description
 ===========
 
+The following PHP classes that have been previously deprecated for v9 have been removed:
+
+* :php:`TYPO3\CMS\Core\Encoder\JavaScriptEncoder`
+* :php:`TYPO3\CMS\Core\Resource\Utility\BackendUtility`
+* :php:`TYPO3\CMS\Core\Utility\ClientUtility`
+* :php:`TYPO3\CMS\Core\Utility\PhpOptionsUtility`
+
 The following PHP class methods that have been previously deprecated for v9 have been removed:
 
 * :php:`TYPO3\CMS\Core\Charset\CharsetConverter->convArray()`
diff --git a/typo3/sysext/core/Tests/UnitDeprecated/Encoder/JavaScriptEncoderTest.php b/typo3/sysext/core/Tests/UnitDeprecated/Encoder/JavaScriptEncoderTest.php
deleted file mode 100644 (file)
index 8b30754..0000000
+++ /dev/null
@@ -1,88 +0,0 @@
-<?php
-namespace TYPO3\CMS\Core\Tests\UnitDeprecated\Encoder;
-
-/*
- * This file is part of the TYPO3 CMS project.
- *
- * It is free software; you can redistribute it and/or modify it under
- * the terms of the GNU General Public License, either version 2
- * of the License, or any later version.
- *
- * For the full copyright and license information, please read the
- * LICENSE.txt file that was distributed with this source code.
- *
- * The TYPO3 project - inspiring people to share!
- */
-
-use TYPO3\CMS\Core\Encoder\JavaScriptEncoder;
-use TYPO3\TestingFramework\Core\Unit\UnitTestCase;
-
-/**
- * Test case
- */
-class JavaScriptEncoderTest extends UnitTestCase
-{
-    /**
-     * @var bool Reset singletons created by subject
-     */
-    protected $resetSingletonInstances = true;
-
-    /**
-     * Data provider for encodeEncodesCorrectly.
-     *
-     * @return array
-     */
-    public function encodeEncodesCorrectlyDataProvider()
-    {
-        return [
-            'Immune characters are returned as is' => [
-                '._,',
-                '._,'
-            ],
-            'Alphanumerical characters are returned as is' => [
-                'abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789',
-                'abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789'
-            ],
-            'Angel brackets and ampersand are encoded' => [
-                '<>&',
-                '\\x3C\\x3E\\x26'
-            ],
-            'Quotes and slashes are encoded' => [
-                '"\'\\/',
-                '\\x22\\x27\\x5C\\x2F'
-            ],
-            'Empty string stays empty' => [
-                '',
-                ''
-            ],
-            'Exclamation mark and space are properly encoded' => [
-                'Hello World!',
-                'Hello\\x20World\\x21'
-            ],
-            'Whitespaces are properly encoded' => [
-                "\t" . LF . CR . ' ',
-                '\\x09\\x0A\\x0D\\x20'
-            ],
-            'Null byte is properly encoded' => [
-                "\0",
-                '\\x00'
-            ],
-            'Umlauts are properly encoded' => [
-                'ÜüÖöÄä',
-                '\\xDC\\xFC\\xD6\\xF6\\xC4\\xE4'
-            ]
-        ];
-    }
-
-    /**
-     * @test
-     * @param string $input
-     * @param string  $expected
-     * @dataProvider encodeEncodesCorrectlyDataProvider
-     */
-    public function encodeEncodesCorrectly($input, $expected)
-    {
-        $subject = new JavaScriptEncoder();
-        $this->assertSame($expected, $subject->encode($input));
-    }
-}
diff --git a/typo3/sysext/core/Tests/UnitDeprecated/Utility/ClientUtilityTest.php b/typo3/sysext/core/Tests/UnitDeprecated/Utility/ClientUtilityTest.php
deleted file mode 100644 (file)
index b7e353d..0000000
+++ /dev/null
@@ -1,483 +0,0 @@
-<?php
-declare(strict_types = 1);
-namespace TYPO3\CMS\Core\Tests\UnitDeprecated\Utility;
-
-/*
- * This file is part of the TYPO3 CMS project.
- *
- * It is free software; you can redistribute it and/or modify it under
- * the terms of the GNU General Public License, either version 2
- * of the License, or any later version.
- *
- * For the full copyright and license information, please read the
- * LICENSE.txt file that was distributed with this source code.
- *
- * The TYPO3 project - inspiring people to share!
- */
-
-use TYPO3\CMS\Core\Utility\ClientUtility;
-use TYPO3\TestingFramework\Core\Unit\UnitTestCase;
-
-/**
- * Testcase for the \TYPO3\CMS\Core\Utility\ClientUtility class.
- */
-class ClientUtilityTest extends UnitTestCase
-{
-    //////////////////////////////////////////////////////////
-    // Utility Functions
-    //////////////////////////////////////////////////////////
-    /**
-     * Compares array of UA strings with expected result array of browser/version pair
-     *
-     * @param array $browserStrings array with userAgent strings
-     * @param array $expectedMembers array with expected browser/version for given userAgent strings
-     */
-    private function analyzeUserAgentStrings($browserStrings, $expectedMembers)
-    {
-        $actual = $expected = [];
-        foreach ($browserStrings as $browserString) {
-            $infoArray = ClientUtility::getBrowserInfo($browserString);
-            $expected[] = $expectedMembers;
-            $explodedVersion = explode('.', $infoArray['version']);
-            $actual[] = [
-                'browser' => $infoArray['browser'],
-                'version' => array_shift($explodedVersion)
-            ];
-        }
-        $this->assertSame($expected, $actual);
-    }
-
-    //////////////////////////////////////////////////////////
-    // Tests concerning getBrowserInfo
-    //////////////////////////////////////////////////////////
-    /**
-     * @test
-     */
-    public function checkBrowserInfoIE6()
-    {
-        $browserStrings = [
-            'Mozilla/4.0 (compatible; MSIE 6.1; Windows XP; .NET CLR 1.1.4322; .NET CLR 2.0.50727)',
-            'Mozilla/4.0 (compatible; MSIE 6.1; Windows XP)',
-            'Mozilla/4.0 (compatible; MSIE 6.01; Windows NT 6.0)',
-            'Mozilla/5.0 (Windows; U; MSIE 6.0; Windows NT 5.1; SV1; .NET CLR 2.0.50727)',
-            'Mozilla/5.0 (compatible; MSIE 6.0; Windows NT 5.1; SV1; .NET CLR 2.0.50727)',
-            'Mozilla/5.0 (compatible; MSIE 6.0; Windows NT 5.1; SV1; .NET CLR 1.1.4325)',
-            'Mozilla/5.0 (compatible; MSIE 6.0; Windows NT 5.1)',
-            'Mozilla/45.0 (compatible; MSIE 6.0; Windows NT 5.1)',
-            'Mozilla/4.08 (compatible; MSIE 6.0; Windows NT 5.1)',
-            'Mozilla/4.01 (compatible; MSIE 6.0; Windows NT 5.1)',
-            'Mozilla/4.0 (X11; MSIE 6.0; i686; .NET CLR 1.1.4322; .NET CLR 2.0.50727; FDM)',
-            'Mozilla/4.0 (Windows; MSIE 6.0; Windows NT 6.0)',
-            'Mozilla/4.0 (Windows; MSIE 6.0; Windows NT 5.2)',
-            'Mozilla/4.0 (Windows; MSIE 6.0; Windows NT 5.0)',
-            'Mozilla/4.0 (Windows; MSIE 6.0; Windows NT 5.1; SV1; .NET CLR 2.0.50727)',
-            'Mozilla/4.0 (MSIE 6.0; Windows NT 5.1)',
-            'Mozilla/4.0 (MSIE 6.0; Windows NT 5.0)',
-            'Mozilla/4.0 (compatible;MSIE 6.0;Windows 98;Q312461)',
-            'Mozilla/4.0 (Compatible; Windows NT 5.1; MSIE 6.0) (compatible; MSIE 6.0; Windows NT 5.1; .NET CLR 1.1.4322; .NET CLR 2.0.50727)',
-            'Mozilla/4.0 (compatible; U; MSIE 6.0; Windows NT 5.1)',
-            'Mozilla/4.0 (compatible; MSIE 6,0; Windows NT 5,1; SV1; Alexa Toolbar)'
-        ];
-        $expectedMembers = [
-            'browser' => 'msie',
-            'version' => '6'
-        ];
-        $this->analyzeUserAgentStrings($browserStrings, $expectedMembers);
-    }
-
-    /**
-     * @test
-     */
-    public function checkBrowserInfoIE7()
-    {
-        $browserStrings = [
-            'Mozilla/5.0 (Windows; U; MSIE 7.0; Windows NT 6.0; en-US)',
-            'Mozilla/5.0 (Windows; U; MSIE 7.0; Windows NT 6.0; el-GR)',
-            'Mozilla/5.0 (MSIE 7.0; Macintosh; U; SunOS; X11; gu; SV1; InfoPath.2; .NET CLR 3.0.04506.30; .NET CLR 3.0.04506.648)',
-            'Mozilla/5.0 (compatible; MSIE 7.0; Windows NT 6.0; WOW64; SLCC1; .NET CLR 2.0.50727; Media Center PC 5.0; c .NET CLR 3.0.04506; .NET CLR 3.5.30707; InfoPath.1; el-GR)',
-            'Mozilla/5.0 (compatible; MSIE 7.0; Windows NT 6.0; SLCC1; .NET CLR 2.0.50727; Media Center PC 5.0; c .NET CLR 3.0.04506; .NET CLR 3.5.30707; InfoPath.1; el-GR)',
-            'Mozilla/5.0 (compatible; MSIE 7.0; Windows NT 6.0; fr-FR)',
-            'Mozilla/5.0 (compatible; MSIE 7.0; Windows NT 6.0; en-US)',
-            'Mozilla/5.0 (compatible; MSIE 7.0; Windows NT 5.2; WOW64; .NET CLR 2.0.50727)',
-            'Mozilla/4.79 [en] (compatible; MSIE 7.0; Windows NT 5.0; .NET CLR 2.0.50727; InfoPath.2; .NET CLR 1.1.4322; .NET CLR 3.0.04506.30; .NET CLR 3.0.04506.648)',
-            'Mozilla/4.0 (Windows; MSIE 7.0; Windows NT 5.1; SV1; .NET CLR 2.0.50727)',
-            'Mozilla/4.0 (Mozilla/4.0; MSIE 7.0; Windows NT 5.1; FDM; SV1; .NET CLR 3.0.04506.30)',
-            'Mozilla/4.0 (Mozilla/4.0; MSIE 7.0; Windows NT 5.1; FDM; SV1)',
-            'Mozilla/4.0 (compatible;MSIE 7.0;Windows NT 6.0)',
-            'Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 6.1; SLCC2; .NET CLR 2.0.50727; .NET CLR 3.5.30729; .NET CLR 3.0.30729; Media Center PC 6.0)',
-            'Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 6.0;)',
-            'Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 6.0; YPC 3.2.0; SLCC1; .NET CLR 2.0.50727; Media Center PC 5.0; InfoPath.2; .NET CLR 3.5.30729; .NET CLR 3.0.30618)',
-            'Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 6.0; YPC 3.2.0; SLCC1; .NET CLR 2.0.50727; .NET CLR 3.0.04506)',
-            'Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 6.0; WOW64; SLCC1; Media Center PC 5.0; .NET CLR 2.0.50727)',
-            'Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 6.0; WOW64; SLCC1; .NET CLR 3.0.04506)',
-            'Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 6.0; WOW64; SLCC1; .NET CLR 2.0.50727; Media Center PC 5.0; InfoPath.2; .NET CLR 3.5.30729; .NET CLR 3.0.30618; .NET CLR 1.1.4322)',
-            'Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 6.3; Trident/7.0; .NET4.0E; .NET4.0C)',
-            'Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 6.0; Trident/5.0)',
-        ];
-        $expectedMembers = [
-            'browser' => 'msie',
-            'version' => '7'
-        ];
-        $this->analyzeUserAgentStrings($browserStrings, $expectedMembers);
-    }
-
-    /**
-     * @test
-     */
-    public function checkBrowserInfoIE8()
-    {
-        $browserStrings = [
-            'Mozilla/4.0 (compatible; MSIE 8.0; Windows NT 6.2; Trident/4.0; SLCC2; .NET CLR 2.0.50727; .NET CLR 3.5.30729; .NET CLR 3.0.30729; Media Center PC 6.0)',
-            'Mozilla/4.0 (compatible; MSIE 8.0; Windows NT 6.1; WOW64; Trident/4.0; SLCC2; Media Center PC 6.0; InfoPath.2; MS-RTC LM 8)',
-            'Mozilla/4.0 (compatible; MSIE 8.0; Windows NT 6.1; WOW64; Trident/4.0; SLCC2; .NET CLR 2.0.50727; InfoPath.2)',
-            'Mozilla/4.0 (compatible; MSIE 8.0; Windows NT 6.1; WOW64; Trident/4.0; SLCC2; .NET CLR 2.0.50727; .NET CLR 3.5.30729; .NET CLR 3.0.30729; Media Center PC 6.0; Zune 3.0)',
-            'Mozilla/4.0 (compatible; MSIE 8.0; Windows NT 6.1; WOW64; Trident/4.0; SLCC2; .NET CLR 2.0.50727; .NET CLR 3.5.30729; .NET CLR 3.0.30729; Media Center PC 6.0; msn OptimizedIE8;ZHCN)',
-            'Mozilla/4.0 (compatible; MSIE 8.0; Windows NT 6.1; WOW64; Trident/4.0; SLCC2; .NET CLR 2.0.50727; .NET CLR 3.5.30729; .NET CLR 3.0.30729; Media Center PC 6.0; MS-RTC LM 8)',
-            'Mozilla/4.0 (compatible; MSIE 8.0; Windows NT 6.1; WOW64; Trident/4.0; SLCC2; .NET CLR 2.0.50727; .NET CLR 3.5.30729; .NET CLR 3.0.30729; Media Center PC 6.0; InfoPath.3; Zune 4.0)',
-            'Mozilla/4.0 (compatible; MSIE 8.0; Windows NT 6.1; WOW64; Trident/4.0; SLCC2; .NET CLR 2.0.50727; .NET CLR 3.5.30729; .NET CLR 3.0.30729; Media Center PC 6.0; InfoPath.3)',
-            'Mozilla/4.0 (compatible; MSIE 8.0; Windows NT 6.1; WOW64; Trident/4.0; SLCC2; .NET CLR 2.0.50727; .NET CLR 3.5.30729; .NET CLR 3.0.30729; Media Center PC 6.0; InfoPath.2; OfficeLiveConnector.1.4; OfficeLivePatch.1.3; yie8)',
-            'Mozilla/4.0 (compatible; MSIE 8.0; Windows NT 6.1; WOW64; Trident/4.0; SLCC2; .NET CLR 2.0.50727; .NET CLR 3.5.30729; .NET CLR 3.0.30729; Media Center PC 6.0; InfoPath.2; OfficeLiveConnector.1.3; OfficeLivePatch.0.0; Zune 3.0; MS-RTC LM 8)',
-            'Mozilla/4.0 (compatible; MSIE 8.0; Windows NT 6.1; WOW64; Trident/4.0; SLCC2; .NET CLR 2.0.50727; .NET CLR 3.5.30729; .NET CLR 3.0.30729; Media Center PC 6.0; InfoPath.2; OfficeLiveConnector.1.3; OfficeLivePatch.0.0; MS-RTC LM 8; Zune 4.0)',
-            'Mozilla/4.0 (compatible; MSIE 8.0; Windows NT 6.1; WOW64; Trident/4.0; SLCC2; .NET CLR 2.0.50727; .NET CLR 3.5.30729; .NET CLR 3.0.30729; Media Center PC 6.0; InfoPath.2; MS-RTC LM 8)',
-            'Mozilla/4.0 (compatible; MSIE 8.0; Windows NT 6.1; WOW64; Trident/4.0; SLCC2; .NET CLR 2.0.50727; .NET CLR 3.5.30729; .NET CLR 3.0.30729; Media Center PC 6.0; InfoPath.2; FDM; OfficeLiveConnector.1.4; OfficeLivePatch.1.3; .NET CLR 1.1.4322)',
-            'Mozilla/4.0 (compatible; MSIE 8.0; Windows NT 6.1; WOW64; Trident/4.0; SLCC2; .NET CLR 2.0.50727; .NET CLR 3.5.30729; .NET CLR 3.0.30729; Media Center PC 6.0; InfoPath.2; .NET4.0C; .NET4.0E; FDM)',
-            'Mozilla/4.0 (compatible; MSIE 8.0; Windows NT 6.1; WOW64; Trident/4.0; SLCC2; .NET CLR 2.0.50727; .NET CLR 3.5.30729; .NET CLR 3.0.30729; Media Center PC 6.0; .NET CLR 4.0.20402; MS-RTC LM 8)',
-            'Mozilla/4.0 (compatible; MSIE 8.0; Windows NT 6.1; WOW64; Trident/4.0; SLCC2; .NET CLR 2.0.50727; .NET CLR 3.5.30729; .NET CLR 3.0.30729; Media Center PC 6.0; .NET CLR 1.1.4322; InfoPath.2; MS-RTC LM 8)',
-            'Mozilla/4.0 (compatible; MSIE 8.0; Windows NT 6.1; WOW64; Trident/4.0; SLCC2; .NET CLR 2.0.50727; .NET CLR 3.5.30729; .NET CLR 3.0.30729; Media Center PC 6.0; .NET CLR 1.1.4322; InfoPath.2)',
-            'Mozilla/4.0 (compatible; MSIE 8.0; Windows NT 6.1; WOW64; Trident/4.0; SLCC2; .NET CLR 2.0.50727; .NET CLR 3.5.30729; .NET CLR 3.0.30729; InfoPath.3; .NET CLR 4.0.20506)',
-            'Mozilla/4.0 (compatible; MSIE 8.0; Windows NT 6.1; WOW64; Trident/4.0; SLCC2; .NET CLR 2.0.50727; .NET CLR 3.5.30729; .NET CLR 3.0.30729)',
-            'Mozilla/4.0 (compatible; MSIE 8.0; Windows NT 6.1; WOW64; Trident/4.0; MRA 5.5 (build 02842); SLCC2; .NET CLR 2.0.50727; .NET CLR 3.5.30729; .NET CLR 3.0.30729; Media Center PC 6.0; InfoPath.2)',
-            'Mozilla/4.0 (compatible; MSIE 8.0; Windows NT 6.0; Trident/4.0; Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; SV1) ; SLCC1; .NET CLR 2.0.50727; .NET CLR 1.1.4322; .NET CLR 3.5.30729; .NET CLR 3.0.30729)'
-        ];
-        $expectedMembers = [
-            'browser' => 'msie',
-            'version' => '8'
-        ];
-        $this->analyzeUserAgentStrings($browserStrings, $expectedMembers);
-    }
-
-    /**
-     * @test
-     */
-    public function checkBrowserInfoIE9()
-    {
-        $browserStrings = [
-            'Mozilla/5.0 (compatible; MSIE 9.0; Windows NT 6.1; Trident/5.0)',
-        ];
-        $expectedMembers = [
-            'browser' => 'msie',
-            'version' => '9'
-        ];
-        $this->analyzeUserAgentStrings($browserStrings, $expectedMembers);
-    }
-
-    /**
-     * @test
-     */
-    public function checkBrowserInfoIE10()
-    {
-        $browserStrings = [
-            'Mozilla/5.0 (compatible; MSIE 10.0; Windows NT 6.2; Trident/6.0)',
-        ];
-        $expectedMembers = [
-            'browser' => 'msie',
-            'version' => '10'
-        ];
-        $this->analyzeUserAgentStrings($browserStrings, $expectedMembers);
-    }
-
-    /**
-     * @test
-     */
-    public function checkBrowserInfoIE11()
-    {
-        $browserStrings = [
-            'Mozilla/5.0 (Windows NT 6.3; Trident/7.0; rv:11.0) like Gecko',
-            'Mozilla/5.0 (Windows NT 6.3; Trident/7.0; .NET4.0E; .NET4.0C; rv:11.0) like Gecko',
-        ];
-        $expectedMembers = [
-            'browser' => 'msie',
-            'version' => '11'
-        ];
-        $this->analyzeUserAgentStrings($browserStrings, $expectedMembers);
-    }
-
-    /**
-     * @test
-     */
-    public function checkGeckoVersion()
-    {
-        $userAgentString = 'Mozilla/5.0 (Windows; U; Windows NT 6.0; de; rv:1.9.2.3) Gecko/20100401 Firefox/3.6.3';
-        $infoArray = ClientUtility::getBrowserInfo($userAgentString);
-        $this->assertEquals('1.9.2.3', $infoArray['all']['gecko']);
-    }
-
-    /**
-     * @test
-     */
-    public function getBrowserInfoReturnsCorrectSystemValueForUserAgentStringOfWindows8()
-    {
-        $userAgentString = 'Mozilla/5.0 (compatible; MSIE 10.0; Windows NT 6.2; Trident/6.0)';
-        $infoArray = ClientUtility::getBrowserInfo($userAgentString);
-        $this->assertContains('win8', $infoArray['all_systems']);
-    }
-
-    /**
-     * @test
-     */
-    public function getBrowserInfoReturnsCorrectSystemValueForUserAgentStringOfWindows8rev1()
-    {
-        $userAgentString = 'Mozilla/5.0 (compatible; MSIE 10.0; Windows NT 6.3; Trident/6.0)';
-        $infoArray = ClientUtility::getBrowserInfo($userAgentString);
-        $this->assertContains('win8', $infoArray['all_systems']);
-    }
-
-    /**
-     * @test
-     */
-    public function getBrowserInfoReturnsCorrectSystemValueForUserAgentStringOfWindows7()
-    {
-        $userAgentString = 'Mozilla/4.0 (compatible; MSIE 8.0; Windows NT 6.1; Trident/4.0; SLCC2; .NET CLR 2.0.50727; .NET CLR 3.5.30729; .NET CLR 3.0.30729; Media Center PC 6.0)';
-        $infoArray = ClientUtility::getBrowserInfo($userAgentString);
-        $this->assertContains('win7', $infoArray['all_systems']);
-    }
-
-    /**
-     * @test
-     */
-    public function getBrowserInfoReturnsCorrectSystemValueForUserAgentStringOfWindowsVista()
-    {
-        $userAgentString = 'Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 6.0; SLCC1; .NET CLR 2.0.50727; .NET CLR 3.0.04506)';
-        $infoArray = ClientUtility::getBrowserInfo($userAgentString);
-        $this->assertContains('winVista', $infoArray['all_systems']);
-    }
-
-    /**
-     * @test
-     */
-    public function getBrowserInfoReturnsCorrectSystemValueForUserAgentStringOfWindowsXp()
-    {
-        $userAgentString = 'Mozilla/4.0 (compatible; MSIE 8.0; Windows NT 5.1; Trident/4.0)';
-        $infoArray = ClientUtility::getBrowserInfo($userAgentString);
-        $this->assertContains('winXP', $infoArray['all_systems']);
-    }
-
-    /**
-     * @test
-     */
-    public function getBrowserInfoReturnsCorrectSystemValueForUserAgentStringOfWindows2k()
-    {
-        $userAgentString = 'Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.0; SV1)';
-        $infoArray = ClientUtility::getBrowserInfo($userAgentString);
-        $this->assertContains('win2k', $infoArray['all_systems']);
-    }
-
-    /**
-     * @test
-     */
-    public function getBrowserInfoReturnsCorrectSystemValueForUserAgentStringOfWindows2kServicePack1()
-    {
-        $userAgentString = 'Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.01; SV1)';
-        $infoArray = ClientUtility::getBrowserInfo($userAgentString);
-        $this->assertContains('win2k', $infoArray['all_systems']);
-    }
-
-    /**
-     * @test
-     */
-    public function getBrowserInfoReturnsCorrectSystemValueForUserAgentStringOfWindowsNt()
-    {
-        $userAgentString = 'Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 4.0)';
-        $infoArray = ClientUtility::getBrowserInfo($userAgentString);
-        $this->assertContains('winNT', $infoArray['all_systems']);
-    }
-
-    /**
-     * @test
-     */
-    public function getBrowserInfoReturnsCorrectSystemValueForUserAgentStringOfIpad()
-    {
-        $userAgentString = 'Mozilla/5.0 (iPad; U; CPU OS 3_2 like Mac OS X; en-us) AppleWebKit/531.21.10 (KHTML, like Gecko) Version/4.0.4 Mobile/7W367a Safari/531.21.10';
-        $infoArray = ClientUtility::getBrowserInfo($userAgentString);
-        $this->assertContains('iOS', $infoArray['all_systems']);
-    }
-
-    /**
-     * @test
-     */
-    public function getBrowserInfoReturnsCorrectSystemValueForUserAgentStringOfIphone()
-    {
-        $userAgentString = 'Mozilla/5.0 (iPhone; U; CPU iPhone OS 4_0 like Mac OS X; en-us) AppleWebKit/532.9 (KHTML, like Gecko) Version/4.0.5 Mobile/8A293 Safari/6531.22.7';
-        $infoArray = ClientUtility::getBrowserInfo($userAgentString);
-        $this->assertContains('iOS', $infoArray['all_systems']);
-    }
-
-    /**
-     * @test
-     */
-    public function getBrowserInfoReturnsCorrectSystemValueForUserAgentStringOfIpod()
-    {
-        $userAgentString = 'Mozilla/5.0 (iPod; U; CPU like Mac OS X; en) AppleWebKit/420.1 (KHTML, like Geckto) Version/3.0 Mobile/3A101a Safari/419.3';
-        $infoArray = ClientUtility::getBrowserInfo($userAgentString);
-        $this->assertContains('iOS', $infoArray['all_systems']);
-    }
-
-    /**
-     * @test
-     */
-    public function getBrowserInfoReturnsCorrectSystemValueForUserAgentStringOfMacOsX()
-    {
-        $userAgentString = 'Mozilla/5.0 (Macintosh; U; Intel Mac OS X 10_6_5; en-us) AppleWebKit/534.15+ (KHTML, like Gecko) Version/5.0.3 Safari/533.19.4';
-        $infoArray = ClientUtility::getBrowserInfo($userAgentString);
-        $this->assertContains('mac', $infoArray['all_systems']);
-    }
-
-    /**
-     * @test
-     */
-    public function getBrowserInfoReturnsCorrectSystemValueForUserAgentStringOfLinux()
-    {
-        $userAgentString = 'Mozilla/5.0 (X11; U; Linux x86_64; en-US; rv:1.9.2.8) Gecko/20100723 Ubuntu/10.04 (lucid) Firefox/3.6.8';
-        $infoArray = ClientUtility::getBrowserInfo($userAgentString);
-        $this->assertContains('linux', $infoArray['all_systems']);
-    }
-
-    /**
-     * @test
-     */
-    public function getBrowserInfoReturnsCorrectSystemValueForUserAgentStringOfSolaris()
-    {
-        $userAgentString = 'Mozilla/5.0 (X11; U; SunOS i86pc; en-US; rv:1.9.1.9) Gecko/20100525 Firefox/3.5.9';
-        $infoArray = ClientUtility::getBrowserInfo($userAgentString);
-        $this->assertContains('unix_sun', $infoArray['all_systems']);
-    }
-
-    /**
-     * Provide various user agent strings for android devices
-     *
-     * @static
-     * @return array List of user agents
-     */
-    public static function androidUserAgentsProvider()
-    {
-        $agents = [
-            'defaultBrowser' => [
-                'agent' => 'Mozilla/5.0 (Linux; U; Android 2.3; en-US; sdk Build/GRH55) AppleWebKit/533.1 (KHTML, like Gecko) Version/4.0 Mobile Safari/533.1'
-            ],
-            'operaMini' => [
-                'agent' => 'Opera/9.80 (Android; Opera Mini/6.0.24556/24.816; U; en) Presto/2.5.25 Version/10.54'
-            ]
-        ];
-        return $agents;
-    }
-
-    /**
-     * @test
-     * @dataProvider androidUserAgentsProvider
-     */
-    public function getBrowserInfoReturnsCorrectSystemValueForUserAgentStringOfAndroid($userAgentString)
-    {
-        $infoArray = ClientUtility::getBrowserInfo($userAgentString);
-        $this->assertContains('android', $infoArray['all_systems']);
-    }
-
-    /**
-     * @test
-     */
-    public function getBrowserInfoReturnsCorrectSystemValueForUserAgentStringOfOpenbsd()
-    {
-        $userAgentString = 'Links (1.00pre20; OpenBSD 4.8 i386; 80x25)';
-        $infoArray = ClientUtility::getBrowserInfo($userAgentString);
-        $this->assertContains('unix_bsd', $infoArray['all_systems']);
-    }
-
-    /**
-     * @test
-     */
-    public function getBrowserInfoReturnsCorrectSystemValueForUserAgentStringOfNetbsd()
-    {
-        $userAgentString = 'Links (2.2; NetBSD 5.1 amd64; 80x25)';
-        $infoArray = ClientUtility::getBrowserInfo($userAgentString);
-        $this->assertContains('unix_bsd', $infoArray['all_systems']);
-    }
-
-    /**
-     * @test
-     */
-    public function getBrowserInfoReturnsCorrectSystemValueForUserAgentStringOfFreebsd()
-    {
-        $userAgentString = 'Mozilla/5.0 (X11; U; FreeBSD amd64; c) AppleWebKit/531.2+ (KHTML, like Gecko) Safari 531.2+ Epiphany/230.2';
-        $infoArray = ClientUtility::getBrowserInfo($userAgentString);
-        $this->assertContains('unix_bsd', $infoArray['all_systems']);
-    }
-
-    /**
-     * @test
-     */
-    public function getBrowserInfoReturnsCorrectSystemValueForUserAgentStringOfChromeOs()
-    {
-        $userAgentString = 'Mozilla/5.0 (X11; U; CrOS i686  9.10.0; en-US) AppleWebKit/532.5 (KHTML, like Gecko) Chrome/4.0.253.0 Safari 532.5';
-        $infoArray = ClientUtility::getBrowserInfo($userAgentString);
-        $this->assertContains('chrome', $infoArray['all_systems']);
-    }
-
-    /**
-     * @test
-     */
-    public function getBrowserInfoReturnsCorrectBrowserValueForUserAgentStringOfSafari()
-    {
-        $userAgentString = 'Mozilla/5.0 (Macintosh; U; Intel Mac OS X 10_6; en-us) AppleWebKit/531.9 (KHTML, like Gecko) Version/4.0.3 Safari/531.9';
-        $infoArray = ClientUtility::getBrowserInfo($userAgentString);
-        $this->assertSame('safari', $infoArray['browser']);
-    }
-
-    /**
-     * @test
-     */
-    public function getBrowserInfoReturnsCorrectBrowserValueForUserAgentStringOfFirefox()
-    {
-        $userAgentString = 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10.6; rv:2.0b8) Gecko/20100101 Firefox/4.0b8';
-        $infoArray = ClientUtility::getBrowserInfo($userAgentString);
-        $this->assertSame('firefox', $infoArray['browser']);
-    }
-
-    /**
-     * @test
-     */
-    public function getBrowserInfoReturnsCorrectBrowserValueForUserAgentStringOfOpera()
-    {
-        $userAgentString = 'Opera/9.80 (X11; FreeBSD 8.1-RELEASE amd64; U; en) Presto/2.2.15 Version/10.10';
-        $infoArray = ClientUtility::getBrowserInfo($userAgentString);
-        $this->assertSame('opera', $infoArray['browser']);
-    }
-
-    /**
-     * @test
-     */
-    public function getBrowserInfoReturnsCorrectBrowserValueForUserAgentStringOfMobileSafariOnAndroid()
-    {
-        $userAgentString = 'Mozilla/5.0 (Linux; U; Android WildPuzzleROM v8.0.7 froyo 2.2; de-de; HTC Wildfire Build/FRF91) AppleWebKit/533.1 (KHTML, like Gecko) Version/4.0 Mobile Safari/533.1';
-        $infoArray = ClientUtility::getBrowserInfo($userAgentString);
-        $this->assertSame('safari', $infoArray['browser']);
-    }
-
-    /**
-     * @test
-     */
-    public function getBrowserInfoReturnsCorrectBrowserValueForUserAgentStringOfMobileSafariOnIphone()
-    {
-        $userAgentString = 'Mozilla/5.0 (iPhone; U; CPU iPhone OS 4_2_1 like Mac OS X; en-us) AppleWebKit/533.17.9 (KHTML, like Gecko) Version/5.0.2 Mobile/8C148 Safari/6533.18.5';
-        $infoArray = ClientUtility::getBrowserInfo($userAgentString);
-        $this->assertSame('safari', $infoArray['browser']);
-    }
-
-    /**
-     * @test
-     */
-    public function getBrowserInfoReturnsCorrectBrowserValueForUserAgentStringOfKonqueror()
-    {
-        $userAgentString = 'Mozilla/5.0 (compatible; Konqueror/4.4; FreeBSD) KHTML/4.4.5 (like Gecko)';
-        $infoArray = ClientUtility::getBrowserInfo($userAgentString);
-        $this->assertSame('konqueror', $infoArray['browser']);
-    }
-}
index 1d572e4..fdd3fcf 100644 (file)
@@ -23,7 +23,7 @@ use TYPO3\CMS\Core\Utility\GeneralUtility;
 use TYPO3\TestingFramework\Core\Unit\UnitTestCase;
 
 /**
- * Testcase for the \TYPO3\CMS\Core\Utility\ClientUtility class.
+ * Test case
  */
 class GeneralUtilityTest extends UnitTestCase
 {
index 6d7860f..e899c95 100644 (file)
@@ -460,6 +460,7 @@ return [
     'TYPO3\CMS\Core\Utility\ClientUtility' => [
         'restFiles' => [
             'Deprecation-82903-DeprecateClientUtility.rst',
+            'Breaking-87193-DeprecatedFunctionalityRemoved.rst',
         ],
     ],
     'TYPO3\CMS\Backend\Tree\Pagetree\ExtdirectTreeCommands' => [
@@ -682,11 +683,13 @@ return [
     'TYPO3\CMS\Core\Utility\PhpOptionsUtility' => [
         'restFiles' => [
             'Deprecation-85102-PhpOptionsUtility.rst',
+            'Breaking-87193-DeprecatedFunctionalityRemoved.rst',
         ],
     ],
     'TYPO3\CMS\Core\Encoding\JavaScriptEncoder' => [
         'restFiles' => [
             'Deprecation-85120-JavaScriptEncoder.rst',
+            'Breaking-87193-DeprecatedFunctionalityRemoved.rst',
         ],
     ],
     'TYPO3\CMS\Frontend\Page\ExternalPageUrlHandler' => [
@@ -949,4 +952,10 @@ return [
             'Deprecation-86366-MethodsInAbstractUpdate.rst'
         ],
     ],
+    'TYPO3\CMS\Core\Resource\Utility\BackendUtility' => [
+        'restFiles' => [
+            'Deprecation-73585-DeprecateTYPO3CMSCoreResourceUtilityBackendUtilitygetFlashMessageForMissingFile.rst',
+            'Breaking-87193-DeprecatedFunctionalityRemoved.rst',
+        ],
+    ],
 ];
index b7067b5..14e8339 100644 (file)
@@ -587,6 +587,7 @@ return [
         'maximumNumberOfArguments' => 0,
         'restFiles' => [
             'Deprecation-85102-PhpOptionsUtility.rst',
+            'Breaking-87193-DeprecatedFunctionalityRemoved.rst',
         ],
     ],
     'TYPO3\CMS\Core\Utility\PhpOptionsUtility::getIniValueBoolean' => [
@@ -594,6 +595,7 @@ return [
         'maximumNumberOfArguments' => 1,
         'restFiles' => [
             'Deprecation-85102-PhpOptionsUtility.rst',
+            'Breaking-87193-DeprecatedFunctionalityRemoved.rst',
         ],
     ],
     'TYPO3\CMS\Backend\Utility\BackendUtility::getModuleUrl' => [