. * *///}}} declare(strict_types=1); namespace rabe\Util\tests; use rabe\Util\Settings; use PHPUnit\Framework\TestCase; class SettingsTest extends TestCase { public function testConstruct() { $cfg = new Settings(); $this->assertNotEmpty($cfg); } /** */ public function testLoadNoFile() { $cfg = new Settings(); $this->expectException(\Exception::class); $cfg->load(); } /** */ public function testReadOnly() { $cfg = new Settings(); $this->expectException(\Exception::class); $cfg->answer = 42; } /** */ private function appPath(Settings $cfg, string $dir='') { if (isset($dir)) $dir .= '/'; $path = dirname(__FILE__).'/cfg/'.$dir; $cfg->appPath($path); return $cfg; } /** */ public function testLoad() { $cfg = new Settings(); $cfg = $this->appPath($cfg)->load(); $this->assertNotEmpty($cfg); return $cfg; } /** * @depends testLoad */ public function testMode(Settings $cfg) { $this->assertEquals('default', $cfg->testFiles); $this->assertEquals('prod', $cfg->mode); } /** * @depends testLoad */ public function testNestedSettings(Settings $cfg) { $nested = $cfg->nested; $this->assertIsObject($nested); $this->assertIsIterable($nested); $this->assertEquals(1, $nested->level); $this->assertEquals(2, $nested->nested->level); $this->assertEquals('default', $nested->testFiles); } /** * @depends testLoad */ public function testNestedArray(Settings $cfg) { $nested = $cfg->nested->toArray(); $this->assertIsArray($nested); $this->assertIsIterable($nested); $this->assertEquals(1, $nested['level']); $this->assertEquals(2, $nested['nested']['level']); $this->assertEquals('default', $nested['testFiles']); } /** * @depends testLoad */ public function testSettingNotFound(Settings $cfg) { $this->assertEquals('default', $cfg->testFiles); $this->expectException(\OutOfRangeException::class); $cfg->keyDoesNotExist; } /** */ public function testSiteOverride() { $cfg = new Settings(); $cfg = $this->appPath($cfg)->site('site')->load(); $this->assertEquals('default', $cfg->testFiles); $this->assertEquals('site', $cfg->testFile); $this->assertEquals(42, $cfg->answer); } /** */ public function testTestingOverride() { $cfg = new Settings(); $cfg = $this->appPath($cfg, 'testing')->load(); $this->assertEquals('testing', $cfg->testFiles); $this->assertEquals(42, $cfg->answer); return $cfg; } /** * @depends testTestingOverride */ public function testTestingNumArrayOverride(Settings $cfg) { $data = [ 0 => 'Index0_test', 1 => 'Index1_default', 2 => 'Index2_test', 3 => 'Index3_local', 4 => 'Index4_local', 5 => 'Index5_local', 6 => 'Index6_default', 7 => 'Index7_default', 10 => 'Index10_test' ]; $numArray = $cfg->numArray; foreach ($numArray as $key => $value) { $this->assertEquals($data[$key], $value); } } /** */ public function testLocalOverride() { $cfg = new Settings(); $cfg = $this->appPath($cfg, 'localOverride')->load(); $this->assertEquals(42, $cfg->answer); } /** * @dataProvider fileNameData */ public function testBuildFileName(string $prefix, $type, string $site, string $expected) { $path = './config/'; $cfg = new Settings(); $cfg->appPath('./'); if ($prefix !== '') $cfg->prefix($prefix); if ($site !== '') { $cfg->prefix(); $cfg->site($site); } $this->assertEquals($path.$expected, $cfg->buildFileName($type)); } public function fileNameData() { return [ // prefix, type, 'site', 'expected' ['', '', '', 'conf.php' ], ['', 'default', '', 'default.conf.php' ], ['', 'testing', '', 'testing.conf.php' ], ['MyPrefix', '', '', 'MyPrefix.conf.php' ], ['MyPrefix', 'default', '', 'MyPrefix.default.conf.php' ], ['MyPrefix', 'testing', '', 'MyPrefix.testing.conf.php' ], ['_', '', '', '_.conf.php' ], ['_', 'default', '', '_.default.conf.php' ], ['_', 'testing', '', '_.testing.conf.php' ], ['1', '', '', '1.conf.php' ], ['1', 'default', '', '1.default.conf.php' ], ['1', 'testing', '', '1.testing.conf.php' ], ['other', '', '', 'other.conf.php' ], ['other', 'default', '', 'other.default.conf.php' ], ['other', 'testing', '', 'other.testing.conf.php' ], ['', 0x01, '13', '13/conf.php' ], ['', 0x01, 'a_site', 'a_site/conf.php' ], ]; } } /* jEdit buffer local properties {{{ * :folding=explicit:collapseFolds=1: }}}*/