Chris@13: $configFile ?: __DIR__ . '/fixtures/empty.php', Chris@13: ]); Chris@13: } Chris@13: Chris@13: public function testDefaults() Chris@13: { Chris@13: $config = $this->getConfig(); Chris@13: Chris@17: $this->assertSame(\function_exists('readline'), $config->hasReadline()); Chris@17: $this->assertSame(\function_exists('readline'), $config->useReadline()); Chris@17: $this->assertSame(\function_exists('pcntl_signal'), $config->hasPcntl()); Chris@17: $this->assertSame(\function_exists('pcntl_signal'), $config->usePcntl()); Chris@13: $this->assertFalse($config->requireSemicolons()); Chris@13: $this->assertSame(Configuration::COLOR_MODE_AUTO, $config->colorMode()); Chris@13: $this->assertNull($config->getStartupMessage()); Chris@13: } Chris@13: Chris@13: public function testGettersAndSetters() Chris@13: { Chris@13: $config = $this->getConfig(); Chris@13: Chris@13: $this->assertNull($config->getDataDir()); Chris@13: $config->setDataDir('wheee'); Chris@13: $this->assertSame('wheee', $config->getDataDir()); Chris@13: Chris@13: $this->assertNull($config->getConfigDir()); Chris@13: $config->setConfigDir('wheee'); Chris@13: $this->assertSame('wheee', $config->getConfigDir()); Chris@13: } Chris@13: Chris@13: /** Chris@13: * @dataProvider directories Chris@13: */ Chris@13: public function testFilesAndDirectories($home, $configFile, $historyFile, $manualDbFile) Chris@13: { Chris@17: $oldHome = \getenv('HOME'); Chris@17: \putenv("HOME=$home"); Chris@13: Chris@13: $config = new Configuration(); Chris@17: $this->assertSame(\realpath($configFile), \realpath($config->getConfigFile())); Chris@17: $this->assertSame(\realpath($historyFile), \realpath($config->getHistoryFile())); Chris@17: $this->assertSame(\realpath($manualDbFile), \realpath($config->getManualDbFile())); Chris@13: Chris@17: \putenv("HOME=$oldHome"); Chris@13: } Chris@13: Chris@13: public function directories() Chris@13: { Chris@17: $base = \realpath(__DIR__ . '/fixtures'); Chris@13: Chris@13: return [ Chris@13: [ Chris@13: $base . '/default', Chris@13: $base . '/default/.config/psysh/config.php', Chris@13: $base . '/default/.config/psysh/psysh_history', Chris@13: $base . '/default/.local/share/psysh/php_manual.sqlite', Chris@13: ], Chris@13: [ Chris@13: $base . '/legacy', Chris@13: $base . '/legacy/.psysh/rc.php', Chris@13: $base . '/legacy/.psysh/history', Chris@13: $base . '/legacy/.psysh/php_manual.sqlite', Chris@13: ], Chris@13: [ Chris@13: $base . '/mixed', Chris@13: $base . '/mixed/.psysh/config.php', Chris@13: $base . '/mixed/.psysh/psysh_history', Chris@13: null, Chris@13: ], Chris@13: ]; Chris@13: } Chris@13: Chris@13: public function testLoadConfig() Chris@13: { Chris@13: $config = $this->getConfig(); Chris@13: $cleaner = new CodeCleaner(); Chris@13: $pager = new PassthruPager(new ConsoleOutput()); Chris@13: Chris@13: $config->loadConfig([ Chris@13: 'useReadline' => false, Chris@13: 'usePcntl' => false, Chris@13: 'codeCleaner' => $cleaner, Chris@13: 'pager' => $pager, Chris@13: 'requireSemicolons' => true, Chris@13: 'errorLoggingLevel' => E_ERROR | E_WARNING, Chris@13: 'colorMode' => Configuration::COLOR_MODE_FORCED, Chris@13: 'startupMessage' => 'Psysh is awesome!', Chris@13: ]); Chris@13: Chris@13: $this->assertFalse($config->useReadline()); Chris@13: $this->assertFalse($config->usePcntl()); Chris@13: $this->assertSame($cleaner, $config->getCodeCleaner()); Chris@13: $this->assertSame($pager, $config->getPager()); Chris@13: $this->assertTrue($config->requireSemicolons()); Chris@13: $this->assertSame(E_ERROR | E_WARNING, $config->errorLoggingLevel()); Chris@13: $this->assertSame(Configuration::COLOR_MODE_FORCED, $config->colorMode()); Chris@13: $this->assertSame('Psysh is awesome!', $config->getStartupMessage()); Chris@13: } Chris@13: Chris@13: public function testLoadConfigFile() Chris@13: { Chris@13: $config = $this->getConfig(__DIR__ . '/fixtures/config.php'); Chris@13: Chris@17: $runtimeDir = $this->joinPath(\realpath(\sys_get_temp_dir()), 'psysh_test', 'withconfig', 'temp'); Chris@13: Chris@17: $this->assertStringStartsWith($runtimeDir, \realpath($config->getTempFile('foo', 123))); Chris@17: $this->assertStringStartsWith($runtimeDir, \realpath(\dirname($config->getPipe('pipe', 123)))); Chris@17: $this->assertStringStartsWith($runtimeDir, \realpath($config->getRuntimeDir())); Chris@13: Chris@17: $this->assertSame(\function_exists('readline'), $config->useReadline()); Chris@13: $this->assertFalse($config->usePcntl()); Chris@13: $this->assertSame(E_ALL & ~E_NOTICE, $config->errorLoggingLevel()); Chris@13: } Chris@13: Chris@13: public function testLoadLocalConfigFile() Chris@13: { Chris@17: $oldPwd = \getcwd(); Chris@17: \chdir(\realpath(__DIR__ . '/fixtures/project/')); Chris@13: Chris@13: $config = new Configuration(); Chris@13: Chris@13: // When no configuration file is specified local project config is merged Chris@13: $this->assertTrue($config->requireSemicolons()); Chris@13: $this->assertFalse($config->useUnicode()); Chris@13: Chris@13: $config = new Configuration(['configFile' => __DIR__ . '/fixtures/config.php']); Chris@13: Chris@13: // Defining a configuration file skips loading local project config Chris@13: $this->assertFalse($config->requireSemicolons()); Chris@13: $this->assertTrue($config->useUnicode()); Chris@13: Chris@17: \chdir($oldPwd); Chris@13: } Chris@13: Chris@13: /** Chris@13: * @expectedException \Psy\Exception\DeprecatedException Chris@13: */ Chris@13: public function testBaseDirConfigIsDeprecated() Chris@13: { Chris@13: $config = new Configuration(['baseDir' => 'fake']); Chris@13: } Chris@13: Chris@13: private function joinPath() Chris@13: { Chris@17: return \implode(DIRECTORY_SEPARATOR, \func_get_args()); Chris@13: } Chris@13: Chris@13: public function testConfigIncludes() Chris@13: { Chris@13: $config = new Configuration([ Chris@13: 'defaultIncludes' => ['/file.php'], Chris@13: 'configFile' => __DIR__ . '/fixtures/empty.php', Chris@13: ]); Chris@13: Chris@13: $includes = $config->getDefaultIncludes(); Chris@13: $this->assertCount(1, $includes); Chris@13: $this->assertSame('/file.php', $includes[0]); Chris@13: } Chris@13: Chris@13: public function testGetOutput() Chris@13: { Chris@13: $config = $this->getConfig(); Chris@13: $output = $config->getOutput(); Chris@13: Chris@13: $this->assertInstanceOf('Psy\Output\ShellOutput', $output); Chris@13: } Chris@13: Chris@13: public function getOutputDecoratedProvider() Chris@13: { Chris@13: return [ Chris@13: 'auto' => [ Chris@13: null, Chris@13: Configuration::COLOR_MODE_AUTO, Chris@13: ], Chris@13: 'forced' => [ Chris@13: true, Chris@13: Configuration::COLOR_MODE_FORCED, Chris@13: ], Chris@13: 'disabled' => [ Chris@13: false, Chris@13: Configuration::COLOR_MODE_DISABLED, Chris@13: ], Chris@13: ]; Chris@13: } Chris@13: Chris@13: /** @dataProvider getOutputDecoratedProvider */ Chris@13: public function testGetOutputDecorated($expectation, $colorMode) Chris@13: { Chris@13: $config = $this->getConfig(); Chris@13: $config->setColorMode($colorMode); Chris@13: Chris@13: $this->assertSame($expectation, $config->getOutputDecorated()); Chris@13: } Chris@13: Chris@13: public function setColorModeValidProvider() Chris@13: { Chris@13: return [ Chris@13: 'auto' => [Configuration::COLOR_MODE_AUTO], Chris@13: 'forced' => [Configuration::COLOR_MODE_FORCED], Chris@13: 'disabled' => [Configuration::COLOR_MODE_DISABLED], Chris@13: ]; Chris@13: } Chris@13: Chris@13: /** @dataProvider setColorModeValidProvider */ Chris@13: public function testSetColorModeValid($colorMode) Chris@13: { Chris@13: $config = $this->getConfig(); Chris@13: $config->setColorMode($colorMode); Chris@13: Chris@13: $this->assertSame($colorMode, $config->colorMode()); Chris@13: } Chris@13: Chris@13: /** Chris@13: * @expectedException \InvalidArgumentException Chris@13: * @expectedExceptionMessage invalid color mode: some invalid mode Chris@13: */ Chris@13: public function testSetColorModeInvalid() Chris@13: { Chris@13: $config = $this->getConfig(); Chris@13: $config->setColorMode('some invalid mode'); Chris@13: } Chris@13: Chris@13: public function testSetCheckerValid() Chris@13: { Chris@13: $config = $this->getConfig(); Chris@13: $checker = new GitHubChecker(); Chris@13: Chris@13: $config->setChecker($checker); Chris@13: Chris@13: $this->assertSame($checker, $config->getChecker()); Chris@13: } Chris@13: }