From: Roland Häder Date: Sun, 16 Jul 2017 16:19:49 +0000 (+0200) Subject: Added first PHPUnit-based unit test. This will test some of the methods in the X-Git-Url: https://git.mxchange.org/?a=commitdiff_plain;h=e49824352d4ee089daaa8043f8463cc196d079ec;p=core.git Added first PHPUnit-based unit test. This will test some of the methods in the configuration class 'FrameworkConfiguration'. Strangely, not all I have tested have 100% coverage ... Why? :-( Signed-off-by: Roland Häder --- diff --git a/tests/framework/config/FrameworkConfigurationTest.php b/tests/framework/config/FrameworkConfigurationTest.php new file mode 100644 index 00000000..8e33a28a --- /dev/null +++ b/tests/framework/config/FrameworkConfigurationTest.php @@ -0,0 +1,754 @@ + + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see . + */ + +class FrameworkConfigurationTest extends TestCase { + + /** + * The configuration instance being tested + */ + private static $configInstance = NULL; + + /** + * Setup test case + */ + public function setUp() { + // Trace message + //* NOISY-DEBUG: */ printf('[%s:%d]: CALLED!' . PHP_EOL, __METHOD__, __LINE__); + + // Call parent method + parent::setUp(); + + // Trace message + //* NOISY-DEBUG: */ printf('[%s:%d]: EXIT!' . PHP_EOL, __METHOD__, __LINE__); + + } + + /** + * Setup test case + */ + public static function setUpBeforeClass() { + // Trace message + //* NOISY-DEBUG: */ printf('[%s:%d]: CALLED!' . PHP_EOL, __METHOD__, __LINE__); + + // Call parent method + parent::setUpBeforeClass(); + + // Init instance + self::$configInstance = FrameworkConfiguration::getSelfInstance(); + + /* + * Disable strict naming-convention check in own class loader, because + * PHP_Invoker doesn't have namespaces. + */ + ClassLoader::enableStrictNamingConventionCheck(FALSE); + + // Trace message + //* NOISY-DEBUG: */ printf('[%s:%d]: EXIT!' . PHP_EOL, __METHOD__, __LINE__); + } + + /** + * Tests if __toString() returns proper name + */ + public function testConfigToStringClassName () { + // Get it + $className = self::$configInstance->__toString(); + + // Should be equal + $this->assertEquals('CoreFramework\Configuration\FrameworkConfiguration', $className); + } + + /** + * Tests getting a singleton instance + */ + public function testGettingSelfConfigInstance () { + // Get instance + $dummyInstance = FrameworkConfiguration::getSelfInstance(); + + // Should be equal to own instance + $this->assertEquals(self::$configInstance, $dummyInstance); + } + + /** + * Tests equals() method + */ + public function testEqualsConfigInstance () { + // Get instance + $dummyInstance = FrameworkConfiguration::getSelfInstance(); + + // Should return TRUE + $this->assertTrue(self::$configInstance->equals($dummyInstance)); + } + + /** + * Tests hashCode() method + */ + public function testHashCodeConfigInstance () { + // Get instance + $dummyInstance = FrameworkConfiguration::getSelfInstance(); + + // Get hash code from both + $hashCodeExpected = self::$configInstance->hashCode(); + $hashCodeActual = $dummyInstance->hashCode(); + + // Should be equal + $this->assertEquals($hashCodeExpected, $hashCodeActual); + } + + /** + * Tests if getting configuration entry returns an array + */ + public function testGettingConfigurationArray () { + // Get it + $config = self::$configInstance->getConfigurationArray(); + + // Should be an array + $this->assertTrue(is_array($config)); + } + + /** + * Tests if getting configuration entry returns a filled array + */ + public function testGettingfilledConfigurationArray () { + // Get it + $config = self::$configInstance->getConfigurationArray(); + + // Should be an array + $this->assertTrue(count($config) > 0); + } + + /** + * Tests if getting whole configuration entry is the same for another + * singleton instance + */ + public function testSameConfigurationArrayGetter () { + // Get instance + $dummyInstance = FrameworkConfiguration::getSelfInstance(); + + // Get it from both instances + $config1 = self::$configInstance->getConfigurationArray(); + $config2 = $dummyInstance->getConfigurationArray(); + + // Should be the same + $this->assertEquals($config1, $config2); + } + + /** + * Tests if a proper exception is thrown when check for a NULL key + */ + public function testCheckingNullConfigKey () { + // Will throw this exception + $this->expectException(NullPointerException::class); + + // Test it + $dummy = self::$configInstance->isConfigurationEntrySet(NULL); + } + + /** + * Tests if a proper exception is thrown when checking a boolean key + */ + public function testCheckingBooleanConfigKey () { + // Will throw this exception + $this->expectException(InvalidArgumentException::class); + + // Test it + $dummy = self::$configInstance->isConfigurationEntrySet(FALSE); + } + + /** + * Tests if a proper exception is thrown when checking an empty key + */ + public function testCheckingEmptyConfigKey () { + // Will throw this exception + $this->expectException(InvalidArgumentException::class); + + // Test it + $dummy = self::$configInstance->isConfigurationEntrySet(''); + } + + /** + * Tests if a proper exception is thrown when checking an array key + */ + public function testCheckingArrayConfigKey () { + // Will throw this exception + $this->expectException(InvalidArgumentException::class); + + // Test it + $dummy = self::$configInstance->isConfigurationEntrySet(array()); + } + + /** + * Tests if a proper exception is thrown when checking a decimal key + */ + public function testCheckingDecimalConfigKey () { + // Will throw this exception + $this->expectException(InvalidArgumentException::class); + + // Test it + $dummy = self::$configInstance->isConfigurationEntrySet(12345); + } + + /** + * Tests if a proper exception is thrown when checking a float key + */ + public function testCheckingFloatConfigKey () { + // Will throw this exception + $this->expectException(InvalidArgumentException::class); + + // Test it + $dummy = self::$configInstance->isConfigurationEntrySet(123.45); + } + + /** + * Tests if a proper exception is thrown when checking an object key + */ + public function testCheckingObjectConfigKey () { + // Will throw this exception + $this->expectException(InvalidArgumentException::class); + + // Test it + $dummy = self::$configInstance->isConfigurationEntrySet($this); + } + + /** + * Tests if a proper exception is thrown when checking a resource key + */ + public function testCheckingResourceConfigKey () { + // Will throw this exception + $this->expectException(InvalidArgumentException::class); + + // Init some resource + $resource = fopen(__FILE__, 'r'); + + // Test it + $dummy = self::$configInstance->isConfigurationEntrySet($resource); + } + + /** + * Tests if checking an existing (well-known) key can be found and returns + * TRUE. + */ + public function testCheckingExistingConfigKey () { + // Should return TRUE + $this->assertTrue(self::$configInstance->isConfigurationEntrySet('application_base_path')); + } + + /** + * Tests if checking a non-existing key will return FALSE. + */ + public function testCheckingNonExistingConfigKey () { + // Should return FALSE + $this->assertFalse(self::$configInstance->isConfigurationEntrySet('__non_existing_key__')); + } + + /** + * Tests if a proper exception is thrown when getting a NULL key + */ + public function testGettingNullConfigKey () { + // Will throw this exception + $this->expectException(NullPointerException::class); + + // Test it + $dummy = self::$configInstance->getConfigEntry(NULL); + } + + /** + * Tests if a proper exception is thrown when getting a boolean key + */ + public function testGettingBooleanConfigKey () { + // Will throw this exception + $this->expectException(InvalidArgumentException::class); + + // Test it + $dummy = self::$configInstance->getConfigEntry(FALSE); + } + + /** + * Tests if a proper exception is thrown when getting an empty key + */ + public function testGettingEmptyConfigKey () { + // Will throw this exception + $this->expectException(InvalidArgumentException::class); + + // Test it + $dummy = self::$configInstance->getConfigEntry(''); + } + + /** + * Tests if a proper exception is thrown when getting a decimal key + */ + public function testGettingDecimalConfigKey () { + // Will throw this exception + $this->expectException(InvalidArgumentException::class); + + // Test it + $dummy = self::$configInstance->getConfigEntry(12345); + } + + /** + * Tests if a proper exception is thrown when getting a float key + */ + public function testGettingFloatConfigKey () { + // Will throw this exception + $this->expectException(InvalidArgumentException::class); + + // Test it + $dummy = self::$configInstance->getConfigEntry(123.45); + } + + /** + * Tests if a proper exception is thrown when getting an array key + */ + public function testGettingArrayConfigKey () { + // Will throw this exception + $this->expectException(InvalidArgumentException::class); + + // Test it + $dummy = self::$configInstance->getConfigEntry(array()); + } + + /** + * Tests if a proper exception is thrown when getting an object key + */ + public function testGettingObjectConfigKey () { + // Will throw this exception + $this->expectException(InvalidArgumentException::class); + + // Test it + $dummy = self::$configInstance->getConfigEntry($this); + } + + /** + * Tests if a proper exception is thrown when getting a resource key + */ + public function testGettingResourceConfigKey () { + // Will throw this exception + $this->expectException(InvalidArgumentException::class); + + // Init some resource + $resource = fopen(__FILE__, 'r'); + + // Test it + $dummy = self::$configInstance->getConfigEntry($resource); + } + + /** + * Tests if getting a non-existing key will cause a proper exception been + * thrown. + */ + public function testGettingNonExistingConfigKey () { + // Should cause this exception + $this->expectException(NoConfigEntryException::class); + + // Get non-existing key + $dummy = self::$configInstance->getConfigEntry('__non_existing_key__'); + } + + /** + * Tests if a generic key 'application_base_path' can be found. + */ + public function testGettingConfigKeyApplicationBasePathExists () { + // Get it from config instance + $value = self::$configInstance->getConfigEntry('application_base_path'); + + // Is it a readable path? + $this->assertDirectoryIsReadable($value); + } + + /** + * Tests setting a NULL key (value doesn't matter) + */ + public function testSettingNullConfigKey () { + // Will throw this exception + $this->expectException(NullPointerException::class); + + // Test it + self::$configInstance->setConfigEntry(NULL, 'foo'); + } + + /** + * Tests setting a boolean key (value doesn't matter) + */ + public function testSettingBooleanConfigKey () { + // Will throw this exception + $this->expectException(InvalidArgumentException::class); + + // Test it + self::$configInstance->setConfigEntry(FALSE, 'foo'); + } + + /** + * Tests setting an empty key (value doesn't matter) + */ + public function testSettingEmptyConfigKey () { + // Will throw this exception + $this->expectException(InvalidArgumentException::class); + + // Test it + self::$configInstance->setConfigEntry('', 'foo'); + } + + /** + * Tests setting a decimal key (value doesn't matter) + */ + public function testSettingDecimalConfigKey () { + // Will throw this exception + $this->expectException(InvalidArgumentException::class); + + // Test it + self::$configInstance->setConfigEntry(12345, 'foo'); + } + + /** + * Tests setting a float key (value doesn't matter) + */ + public function testSettingFloatConfigKey () { + // Will throw this exception + $this->expectException(InvalidArgumentException::class); + + // Test it + self::$configInstance->setConfigEntry(123.45, 'foo'); + } + + /** + * Tests setting an array key (value doesn't matter) + */ + public function testSettingArrayConfigKey () { + // Will throw this exception + $this->expectException(InvalidArgumentException::class); + + // Test it + self::$configInstance->setConfigEntry(array(), 'foo'); + } + + /** + * Tests setting an object key (value doesn't matter) + */ + public function testSettingObjectConfigKey () { + // Will throw this exception + $this->expectException(InvalidArgumentException::class); + + // Test it + self::$configInstance->setConfigEntry($this, 'foo'); + } + + /** + * Tests setting a resource key (value doesn't matter) + */ + public function testSettingResourceConfigKey () { + // Will throw this exception + $this->expectException(InvalidArgumentException::class); + + // Init some resource + $resource = fopen(__FILE__, 'r'); + + // Test it + self::$configInstance->setConfigEntry($resource, 'foo'); + } + + /** + * Tests setting a valid key but array for value + */ + public function testSettingArrayValueConfigKey () { + // Will throw this exception + $this->expectException(InvalidArgumentException::class); + + // Test it + self::$configInstance->setConfigEntry('foo', array()); + } + + /** + * Tests setting a valid key but object for value + */ + public function testSettingObjectValueConfigKey () { + // Will throw this exception + $this->expectException(InvalidArgumentException::class); + + // Test it + self::$configInstance->setConfigEntry('foo', $this); + } + + /** + * Tests setting a valid key but resource for value + */ + public function testSettingResourceValueConfigKey () { + // Will throw this exception + $this->expectException(InvalidArgumentException::class); + + // Init some resource + $resource = fopen(__FILE__, 'r'); + + // Test it + self::$configInstance->setConfigEntry('foo', $resource); + } + + /** + * Tests unsetting NULL key + */ + public function testUnsettingNullConfigKey () { + // Will throw this exception + $this->expectException(NullPointerException::class); + + // Test it + self::$configInstance->unsetConfigEntry(NULL); + } + + /** + * Tests unsetting an empty key + */ + public function testUnettingEmptyConfigKey () { + // Will throw this exception + $this->expectException(InvalidArgumentException::class); + + // Test it + self::$configInstance->unsetConfigEntry(''); + } + + /** + * Tests unsetting a non-existing key + */ + public function testUnettingNonExistingConfigKey () { + // Will throw this exception + $this->expectException(NoConfigEntryException::class); + + // Test it + self::$configInstance->unsetConfigEntry('__non_existing_key__'); + } + + /** + * Tests setting and getting a key will return same value of same type + * (NULL). This unit test does also unset the then existing key. + */ + public function testSettingGettiingNullConfigKey () { + // Set test value + self::$configInstance->setConfigEntry('__test_key', NULL); + + // Get it + $value = self::$configInstance->getConfigEntry('__test_key'); + + // Must be equal + $this->assertEquals(NULL, $value); + + // Unset it + self::$configInstance->unsetConfigEntry('__test_key'); + } + + /** + * Tests setting and getting a key will return same value of same type. + * This unit test does also unset the then existing key. + */ + public function testSettingGettiingConfigKey () { + // Set test value + self::$configInstance->setConfigEntry('__test_key', 'foo'); + + // Get it + $value = self::$configInstance->getConfigEntry('__test_key'); + + // Must be equal + $this->assertEquals('foo', $value); + + // Unset it + self::$configInstance->unsetConfigEntry('__test_key'); + } + + /** + * Tests setting a NULL default timezone + */ + public function testSettingNullDefaultTimezone () { + // Will throw this exception + $this->expectException(NullPointerException::class); + + // Test it + self::$configInstance->setDefaultTimezone(NULL); + } + + /** + * Tests setting an empty default timezone + */ + public function testSettingEmptyDefaultTimezone () { + // Will throw this exception + $this->expectException(InvalidArgumentException::class); + + // Test it + self::$configInstance->setDefaultTimezone(''); + } + + /** + * Tests setting invalid timezone + */ + public function testSettingInvalidDefaultTimezone () { + // Expect Notice + $this->expectException(Notice::class); + + // Try to set it + self::$configInstance->setDefaultTimezone('!invalid!'); + } + + /** + * Tests setting valid timezone + */ + public function testSettingValidDefaultTimezone () { + // Will be true + $this->assertTrue(self::$configInstance->setDefaultTimezone('Europe/Berlin')); + } + + /** + * Tests if detectServerAddress is returning what it should for tests. + * This will always be 127.0.0.1. + */ + public function testConfigDetectServerAddress () { + // Call it + $serverAddress = self::$configInstance->detectServerAddress(); + + // Should be the same + $this->assertEquals('127.0.0.1', $serverAddress); + } + + /** + * Re-tests if detectServerAddress is returning what it should for tests. + * This will always be 127.0.0.1. This call should not invoke + * ConsoleTools's method as the configuration entry is already cached. + */ + public function testConfigDetectServerAddressCached () { + // Call it + $serverAddress = self::$configInstance->detectServerAddress(); + + // Should be the same + $this->assertEquals('127.0.0.1', $serverAddress); + } + + /** + * Tests setting a NULL server address + */ + public function testConfigSettingNullServerAddress () { + // Expect this exception + $this->expectException(NullPointerException::class); + + // Test it + self::$configInstance->setServerAddress(NULL); + } + + /** + * Tests setting a boolean server address + */ + public function testConfigSettingBooleanServerAddress () { + // Expect this exception + $this->expectException(InvalidArgumentException::class); + + // Test it + self::$configInstance->setServerAddress(FALSE); + } + + /** + * Tests setting a decimal server address + */ + public function testConfigSettingDecimalServerAddress () { + // Expect this exception + $this->expectException(InvalidArgumentException::class); + + // Test it + self::$configInstance->setServerAddress(12345); + } + + /** + * Tests setting a float server address + */ + public function testConfigSettingFloatServerAddress () { + // Expect this exception + $this->expectException(InvalidArgumentException::class); + + // Test it + self::$configInstance->setServerAddress(123.45); + } + + /** + * Tests setting an array server address + */ + public function testConfigSettingArrayServerAddress () { + // Expect this exception + $this->expectException(InvalidArgumentException::class); + + // Test it + self::$configInstance->setServerAddress(array()); + } + + /** + * Tests setting an object server address + */ + public function testConfigSettingObjectServerAddress () { + // Expect this exception + $this->expectException(InvalidArgumentException::class); + + // Test it + self::$configInstance->setServerAddress($this); + } + + /** + * Tests setting a resource server address + */ + public function testConfigSettingResourceServerAddress () { + // Expect this exception + $this->expectException(InvalidArgumentException::class); + + // Init some resource + $resource = fopen(__FILE__, 'r'); + + // Test it + self::$configInstance->setServerAddress($resource); + } + + /** + * Tests setting an empty server address + */ + public function testConfigSettingEmptyServerAddress () { + // Expect this exception + $this->expectException(InvalidArgumentException::class); + + // Test it + self::$configInstance->setServerAddress(''); + } + + /** + * Tests setting a valid server address and getting it back + */ + public function testConfigGettingValidServerAddress () { + // Test it + self::$configInstance->setServerAddress('127.0.0.1'); + + // Get it back + $serverAddress = self::$configInstance->getServerAddress(); + + // Should be equal + $this->assertEquals('127.0.0.1', $serverAddress); + } + +}