* * 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; /** * Own IP address */ private static $ipAddress = FALSE; /** * 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); // Quiet DNS resolver as this is not wanted here self::$configInstance->setConfigEntry('quiet_dns_resolver', TRUE); // Lookup own IP address self::$ipAddress = ConsoleTools::acquireSelfIpAddress(); // 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 boolean key */ public function testUnsettingBooleanConfigKey () { // Will throw this exception $this->expectException(InvalidArgumentException::class); // Test it self::$configInstance->unsetConfigEntry(FALSE); } /** * Tests unsetting decimal key */ public function testUnsettingDecimalConfigKey () { // Will throw this exception $this->expectException(InvalidArgumentException::class); // Test it self::$configInstance->unsetConfigEntry(12345); } /** * Tests unsetting float key */ public function testUnsettingFloatConfigKey () { // Will throw this exception $this->expectException(InvalidArgumentException::class); // Test it self::$configInstance->unsetConfigEntry(123.45); } /** * Tests unsetting array key */ public function testUnsettingArrayConfigKey () { // Will throw this exception $this->expectException(InvalidArgumentException::class); // Test it self::$configInstance->unsetConfigEntry(array()); } /** * Tests unsetting object key */ public function testUnsettingObjectConfigKey () { // Will throw this exception $this->expectException(InvalidArgumentException::class); // Test it self::$configInstance->unsetConfigEntry($this); } /** * Tests unsetting resource key */ public function testUnsettingResourceConfigKey () { // Will throw this exception $this->expectException(InvalidArgumentException::class); // Init some resource $resource = fopen(__FILE__, 'r'); // Test it self::$configInstance->unsetConfigEntry($resource); } /** * 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 a boolean default timezone */ public function testSettingBooleanDefaultTimezone () { // Will throw this exception $this->expectException(InvalidArgumentException::class); // Test it self::$configInstance->setDefaultTimezone(FALSE); } /** * Tests setting a decimal default timezone */ public function testSettingDecimalDefaultTimezone () { // Will throw this exception $this->expectException(InvalidArgumentException::class); // Test it self::$configInstance->setDefaultTimezone(12345); } /** * Tests setting a float default timezone */ public function testSettingFloatDefaultTimezone () { // Will throw this exception $this->expectException(InvalidArgumentException::class); // Test it self::$configInstance->setDefaultTimezone(123.45); } /** * Tests setting an array default timezone */ public function testSettingArrayDefaultTimezone () { // Will throw this exception $this->expectException(InvalidArgumentException::class); // Test it self::$configInstance->setDefaultTimezone(array()); } /** * Tests setting an object default timezone */ public function testSettingObjectDefaultTimezone () { // Will throw this exception $this->expectException(InvalidArgumentException::class); // Test it self::$configInstance->setDefaultTimezone($this); } /** * Tests setting a resource default timezone */ public function testSettingResourceDefaultTimezone () { // Will throw this exception $this->expectException(InvalidArgumentException::class); // Init some resource $resource = fopen(__FILE__, 'r'); // Test it self::$configInstance->setDefaultTimezone($resource); } /** * 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(self::$ipAddress, $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(self::$ipAddress, $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); // Set old back self::$configInstance->setServerAddress(self::$ipAddress); } }