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