diff options
Diffstat (limited to 'tests/lib/UtilTest.php')
-rw-r--r-- | tests/lib/UtilTest.php | 222 |
1 files changed, 143 insertions, 79 deletions
diff --git a/tests/lib/UtilTest.php b/tests/lib/UtilTest.php index c1dea8d5423..6d995be2434 100644 --- a/tests/lib/UtilTest.php +++ b/tests/lib/UtilTest.php @@ -1,4 +1,5 @@ <?php + /** * SPDX-FileCopyrightText: 2016-2024 Nextcloud GmbH and Nextcloud contributors * SPDX-FileCopyrightText: 2016 ownCloud, Inc. @@ -8,6 +9,12 @@ namespace Test; use OC_Util; +use OCP\Files; +use OCP\IConfig; +use OCP\ISession; +use OCP\ITempManager; +use OCP\Server; +use OCP\Util; /** * Class UtilTest @@ -17,7 +24,7 @@ use OC_Util; */ class UtilTest extends \Test\TestCase { public function testGetVersion(): void { - $version = \OCP\Util::getVersion(); + $version = Util::getVersion(); $this->assertTrue(is_array($version)); foreach ($version as $num) { $this->assertTrue(is_int($num)); @@ -41,25 +48,25 @@ class UtilTest extends \Test\TestCase { 'And It Even May <strong>Nest</strong>' ], ]; - $result = OC_Util::sanitizeHTML($badArray); + $result = Util::sanitizeHTML($badArray); $this->assertEquals($goodArray, $result); $badString = '<img onload="alert(1)" />'; - $result = OC_Util::sanitizeHTML($badString); + $result = Util::sanitizeHTML($badString); $this->assertEquals('<img onload="alert(1)" />', $result); $badString = "<script>alert('Hacked!');</script>"; - $result = OC_Util::sanitizeHTML($badString); + $result = Util::sanitizeHTML($badString); $this->assertEquals('<script>alert('Hacked!');</script>', $result); $goodString = 'This is a good string without HTML.'; - $result = OC_Util::sanitizeHTML($goodString); + $result = Util::sanitizeHTML($goodString); $this->assertEquals('This is a good string without HTML.', $result); } public function testEncodePath(): void { $component = '/ยง#@test%&^รค/-child'; - $result = OC_Util::encodePath($component); + $result = Util::encodePath($component); $this->assertEquals('/%C2%A7%23%40test%25%26%5E%C3%A4/-child', $result); } @@ -86,7 +93,7 @@ class UtilTest extends \Test\TestCase { * So we check that with strict email verification we fallback to the default */ public function testGetDefaultEmailAddressStrict(): void { - $email = \OCP\Util::getDefaultEmailAddress('no-reply'); + $email = Util::getDefaultEmailAddress('no-reply'); $this->assertEquals('no-reply@localhost.localdomain', $email); } @@ -94,33 +101,33 @@ class UtilTest extends \Test\TestCase { * If no strict email check is enabled "localhost" should validate as a valid email domain */ public function testGetDefaultEmailAddress(): void { - $config = \OC::$server->getConfig(); + $config = Server::get(IConfig::class); $config->setAppValue('core', 'enforce_strict_email_check', 'no'); - $email = \OCP\Util::getDefaultEmailAddress('no-reply'); + $email = Util::getDefaultEmailAddress('no-reply'); $this->assertEquals('no-reply@localhost', $email); $config->deleteAppValue('core', 'enforce_strict_email_check'); } public function testGetDefaultEmailAddressFromConfig(): void { - $config = \OC::$server->getConfig(); + $config = Server::get(IConfig::class); $config->setSystemValue('mail_domain', 'example.com'); - $email = \OCP\Util::getDefaultEmailAddress('no-reply'); + $email = Util::getDefaultEmailAddress('no-reply'); $this->assertEquals('no-reply@example.com', $email); $config->deleteSystemValue('mail_domain'); } public function testGetConfiguredEmailAddressFromConfig(): void { - $config = \OC::$server->getConfig(); + $config = Server::get(IConfig::class); $config->setSystemValue('mail_domain', 'example.com'); $config->setSystemValue('mail_from_address', 'owncloud'); - $email = \OCP\Util::getDefaultEmailAddress('no-reply'); + $email = Util::getDefaultEmailAddress('no-reply'); $this->assertEquals('owncloud@example.com', $email); $config->deleteSystemValue('mail_domain'); $config->deleteSystemValue('mail_from_address'); } public function testGetInstanceIdGeneratesValidId(): void { - \OC::$server->getConfig()->deleteSystemValue('instanceid'); + Server::get(IConfig::class)->deleteSystemValue('instanceid'); $instanceId = OC_Util::getInstanceId(); $this->assertStringStartsWith('oc', $instanceId); $matchesRegex = preg_match('/^[a-z0-9]+$/', $instanceId); @@ -131,37 +138,37 @@ class UtilTest extends \Test\TestCase { * Test needUpgrade() when the core version is increased */ public function testNeedUpgradeCore(): void { - $config = \OC::$server->getConfig(); + $config = Server::get(IConfig::class); $oldConfigVersion = $config->getSystemValue('version', '0.0.0'); - $oldSessionVersion = \OC::$server->getSession()->get('OC_Version'); + $oldSessionVersion = Server::get(ISession::class)->get('OC_Version'); - $this->assertFalse(\OCP\Util::needUpgrade()); + $this->assertFalse(Util::needUpgrade()); $config->setSystemValue('version', '7.0.0.0'); - \OC::$server->getSession()->set('OC_Version', [7, 0, 0, 1]); - self::invokePrivate(new \OCP\Util, 'needUpgradeCache', [null]); + Server::get(ISession::class)->set('OC_Version', [7, 0, 0, 1]); + self::invokePrivate(new Util, 'needUpgradeCache', [null]); - $this->assertTrue(\OCP\Util::needUpgrade()); + $this->assertTrue(Util::needUpgrade()); $config->setSystemValue('version', $oldConfigVersion); - \OC::$server->getSession()->set('OC_Version', $oldSessionVersion); - self::invokePrivate(new \OCP\Util, 'needUpgradeCache', [null]); + Server::get(ISession::class)->set('OC_Version', $oldSessionVersion); + self::invokePrivate(new Util, 'needUpgradeCache', [null]); - $this->assertFalse(\OCP\Util::needUpgrade()); + $this->assertFalse(Util::needUpgrade()); } public function testCheckDataDirectoryValidity(): void { - $dataDir = \OC::$server->getTempManager()->getTemporaryFolder(); + $dataDir = Server::get(ITempManager::class)->getTemporaryFolder(); touch($dataDir . '/.ncdata'); $errors = \OC_Util::checkDataDirectoryValidity($dataDir); $this->assertEmpty($errors); - \OCP\Files::rmdirr($dataDir); + Files::rmdirr($dataDir); - $dataDir = \OC::$server->getTempManager()->getTemporaryFolder(); + $dataDir = Server::get(ITempManager::class)->getTemporaryFolder(); // no touch $errors = \OC_Util::checkDataDirectoryValidity($dataDir); $this->assertNotEmpty($errors); - \OCP\Files::rmdirr($dataDir); + Files::rmdirr($dataDir); $errors = \OC_Util::checkDataDirectoryValidity('relative/path'); $this->assertNotEmpty($errors); @@ -170,39 +177,37 @@ class UtilTest extends \Test\TestCase { protected function setUp(): void { parent::setUp(); - \OC_Util::$scripts = []; \OC_Util::$styles = []; - self::invokePrivate(\OCP\Util::class, 'scripts', [[]]); - self::invokePrivate(\OCP\Util::class, 'scriptDeps', [[]]); + self::invokePrivate(Util::class, 'scripts', [[]]); + self::invokePrivate(Util::class, 'scriptDeps', [[]]); } protected function tearDown(): void { parent::tearDown(); - \OC_Util::$scripts = []; \OC_Util::$styles = []; - self::invokePrivate(\OCP\Util::class, 'scripts', [[]]); - self::invokePrivate(\OCP\Util::class, 'scriptDeps', [[]]); + self::invokePrivate(Util::class, 'scripts', [[]]); + self::invokePrivate(Util::class, 'scriptDeps', [[]]); } public function testAddScript(): void { - \OCP\Util::addScript('first', 'myFirstJSFile'); - \OCP\Util::addScript('core', 'myFancyJSFile1'); - \OCP\Util::addScript('files', 'myFancyJSFile2', 'core'); - \OCP\Util::addScript('myApp5', 'myApp5JSFile', 'myApp2'); - \OCP\Util::addScript('myApp', 'myFancyJSFile3'); - \OCP\Util::addScript('core', 'myFancyJSFile4'); + Util::addScript('first', 'myFirstJSFile'); + Util::addScript('core', 'myFancyJSFile1'); + Util::addScript('files', 'myFancyJSFile2', 'core'); + Util::addScript('myApp5', 'myApp5JSFile', 'myApp2'); + Util::addScript('myApp', 'myFancyJSFile3'); + Util::addScript('core', 'myFancyJSFile4'); // after itself - \OCP\Util::addScript('core', 'myFancyJSFile5', 'core'); + Util::addScript('core', 'myFancyJSFile5', 'core'); // add duplicate - \OCP\Util::addScript('core', 'myFancyJSFile1'); + Util::addScript('core', 'myFancyJSFile1'); // dependency chain - \OCP\Util::addScript('myApp4', 'myApp4JSFile', 'myApp3'); - \OCP\Util::addScript('myApp3', 'myApp3JSFile', 'myApp2'); - \OCP\Util::addScript('myApp2', 'myApp2JSFile', 'myApp'); - \OCP\Util::addScript('core', 'common'); - \OCP\Util::addScript('core', 'main'); + Util::addScript('myApp4', 'myApp4JSFile', 'myApp3'); + Util::addScript('myApp3', 'myApp3JSFile', 'myApp2'); + Util::addScript('myApp2', 'myApp2JSFile', 'myApp'); + Util::addScript('core', 'common'); + Util::addScript('core', 'main'); - $scripts = \OCP\Util::getScripts(); + $scripts = Util::getScripts(); // Core should appear first $this->assertEquals( @@ -278,49 +283,32 @@ class UtilTest extends \Test\TestCase { } public function testAddScriptCircularDependency(): void { - \OCP\Util::addScript('circular', 'file1', 'dependency'); - \OCP\Util::addScript('dependency', 'file2', 'circular'); + Util::addScript('circular', 'file1', 'dependency'); + Util::addScript('dependency', 'file2', 'circular'); - $scripts = \OCP\Util::getScripts(); + $scripts = Util::getScripts(); $this->assertContains('circular/js/file1', $scripts); $this->assertContains('dependency/js/file2', $scripts); } - public function testAddVendorScript(): void { - \OC_Util::addVendorScript('core', 'myFancyJSFile1'); - \OC_Util::addVendorScript('myApp', 'myFancyJSFile2'); - \OC_Util::addVendorScript('core', 'myFancyJSFile0', true); - \OC_Util::addVendorScript('core', 'myFancyJSFile10', true); - // add duplicate - \OC_Util::addVendorScript('core', 'myFancyJSFile1'); - - $this->assertEquals([ - 'core/vendor/myFancyJSFile10', - 'core/vendor/myFancyJSFile0', - 'core/vendor/myFancyJSFile1', - 'myApp/vendor/myFancyJSFile2', - ], \OC_Util::$scripts); - $this->assertEquals([], \OC_Util::$styles); - } - public function testAddTranslations(): void { - \OC_Util::addTranslations('appId', 'de'); + Util::addTranslations('appId', 'de'); $this->assertEquals([ 'appId/l10n/de' - ], \OC_Util::$scripts); + ], Util::getScripts()); $this->assertEquals([], \OC_Util::$styles); } public function testAddStyle(): void { - \OC_Util::addStyle('core', 'myFancyCSSFile1'); - \OC_Util::addStyle('myApp', 'myFancyCSSFile2'); - \OC_Util::addStyle('core', 'myFancyCSSFile0', true); - \OC_Util::addStyle('core', 'myFancyCSSFile10', true); + Util::addStyle('core', 'myFancyCSSFile1'); + Util::addStyle('myApp', 'myFancyCSSFile2'); + Util::addStyle('core', 'myFancyCSSFile0', true); + Util::addStyle('core', 'myFancyCSSFile10', true); // add duplicate - \OC_Util::addStyle('core', 'myFancyCSSFile1'); + Util::addStyle('core', 'myFancyCSSFile1'); - $this->assertEquals([], \OC_Util::$scripts); + $this->assertEquals([], Util::getScripts()); $this->assertEquals([ 'core/css/myFancyCSSFile10', 'core/css/myFancyCSSFile0', @@ -337,7 +325,7 @@ class UtilTest extends \Test\TestCase { // add duplicate \OC_Util::addVendorStyle('core', 'myFancyCSSFile1'); - $this->assertEquals([], \OC_Util::$scripts); + $this->assertEquals([], Util::getScripts()); $this->assertEquals([ 'core/vendor/myFancyCSSFile10', 'core/vendor/myFancyCSSFile0', @@ -347,9 +335,85 @@ class UtilTest extends \Test\TestCase { } public function testShortenMultibyteString(): void { - $this->assertEquals('Short nuff', \OCP\Util::shortenMultibyteString('Short nuff', 255)); - $this->assertEquals('ABC', \OCP\Util::shortenMultibyteString('ABCDEF', 3)); + $this->assertEquals('Short nuff', Util::shortenMultibyteString('Short nuff', 255)); + $this->assertEquals('ABC', Util::shortenMultibyteString('ABCDEF', 3)); // each of the characters is 12 bytes - $this->assertEquals('๐', \OCP\Util::shortenMultibyteString('๐๐๐', 16, 2)); + $this->assertEquals('๐', Util::shortenMultibyteString('๐๐๐', 16, 2)); + } + + #[\PHPUnit\Framework\Attributes\DataProvider('humanFileSizeProvider')] + public function testHumanFileSize($expected, $input): void { + $result = Util::humanFileSize($input); + $this->assertEquals($expected, $result); + } + + public static function humanFileSizeProvider(): array { + return [ + ['0 B', 0], + ['1 KB', 1024], + ['9.5 MB', 10000000], + ['1.3 GB', 1395864371], + ['465.7 GB', 500000000000], + ['454.7 TB', 500000000000000], + ['444.1 PB', 500000000000000000], + ]; + } + + #[\PHPUnit\Framework\Attributes\DataProvider('providesComputerFileSize')] + public function testComputerFileSize($expected, $input): void { + $result = Util::computerFileSize($input); + $this->assertEquals($expected, $result); + } + + public static function providesComputerFileSize(): array { + return [ + [0.0, '0 B'], + [1024.0, '1 KB'], + [1395864371.0, '1.3 GB'], + [9961472.0, '9.5 MB'], + [500041567437.0, '465.7 GB'], + [false, '12 GB etfrhzui'] + ]; } + + public function testMb_array_change_key_case(): void { + $arrayStart = [ + 'Foo' => 'bar', + 'Bar' => 'foo', + ]; + $arrayResult = [ + 'foo' => 'bar', + 'bar' => 'foo', + ]; + $result = Util::mb_array_change_key_case($arrayStart); + $expected = $arrayResult; + $this->assertEquals($result, $expected); + + $arrayStart = [ + 'foo' => 'bar', + 'bar' => 'foo', + ]; + $arrayResult = [ + 'FOO' => 'bar', + 'BAR' => 'foo', + ]; + $result = Util::mb_array_change_key_case($arrayStart, MB_CASE_UPPER); + $expected = $arrayResult; + $this->assertEquals($result, $expected); + } + + public function testRecursiveArraySearch(): void { + $haystack = [ + 'Foo' => 'own', + 'Bar' => 'Cloud', + ]; + + $result = Util::recursiveArraySearch($haystack, 'own'); + $expected = 'Foo'; + $this->assertEquals($result, $expected); + + $result = Util::recursiveArraySearch($haystack, 'NotFound'); + $this->assertFalse($result); + } + } |