annotate vendor/psy/psysh/test/ConfigurationTest.php @ 19:fa3358dc1485 tip

Add ndrum files
author Chris Cannam
date Wed, 28 Aug 2019 13:14:47 +0100
parents 129ea1e6d783
children
rev   line source
Chris@13 1 <?php
Chris@13 2
Chris@13 3 /*
Chris@13 4 * This file is part of Psy Shell.
Chris@13 5 *
Chris@13 6 * (c) 2012-2018 Justin Hileman
Chris@13 7 *
Chris@13 8 * For the full copyright and license information, please view the LICENSE
Chris@13 9 * file that was distributed with this source code.
Chris@13 10 */
Chris@13 11
Chris@13 12 namespace Psy\Test;
Chris@13 13
Chris@13 14 use Psy\CodeCleaner;
Chris@13 15 use Psy\Configuration;
Chris@13 16 use Psy\Output\PassthruPager;
Chris@13 17 use Psy\VersionUpdater\GitHubChecker;
Chris@13 18 use Symfony\Component\Console\Output\ConsoleOutput;
Chris@13 19
Chris@13 20 class ConfigurationTest extends \PHPUnit\Framework\TestCase
Chris@13 21 {
Chris@13 22 private function getConfig($configFile = null)
Chris@13 23 {
Chris@13 24 return new Configuration([
Chris@13 25 'configFile' => $configFile ?: __DIR__ . '/fixtures/empty.php',
Chris@13 26 ]);
Chris@13 27 }
Chris@13 28
Chris@13 29 public function testDefaults()
Chris@13 30 {
Chris@13 31 $config = $this->getConfig();
Chris@13 32
Chris@17 33 $this->assertSame(\function_exists('readline'), $config->hasReadline());
Chris@17 34 $this->assertSame(\function_exists('readline'), $config->useReadline());
Chris@17 35 $this->assertSame(\function_exists('pcntl_signal'), $config->hasPcntl());
Chris@17 36 $this->assertSame(\function_exists('pcntl_signal'), $config->usePcntl());
Chris@13 37 $this->assertFalse($config->requireSemicolons());
Chris@13 38 $this->assertSame(Configuration::COLOR_MODE_AUTO, $config->colorMode());
Chris@13 39 $this->assertNull($config->getStartupMessage());
Chris@13 40 }
Chris@13 41
Chris@13 42 public function testGettersAndSetters()
Chris@13 43 {
Chris@13 44 $config = $this->getConfig();
Chris@13 45
Chris@13 46 $this->assertNull($config->getDataDir());
Chris@13 47 $config->setDataDir('wheee');
Chris@13 48 $this->assertSame('wheee', $config->getDataDir());
Chris@13 49
Chris@13 50 $this->assertNull($config->getConfigDir());
Chris@13 51 $config->setConfigDir('wheee');
Chris@13 52 $this->assertSame('wheee', $config->getConfigDir());
Chris@13 53 }
Chris@13 54
Chris@13 55 /**
Chris@13 56 * @dataProvider directories
Chris@13 57 */
Chris@13 58 public function testFilesAndDirectories($home, $configFile, $historyFile, $manualDbFile)
Chris@13 59 {
Chris@17 60 $oldHome = \getenv('HOME');
Chris@17 61 \putenv("HOME=$home");
Chris@13 62
Chris@13 63 $config = new Configuration();
Chris@17 64 $this->assertSame(\realpath($configFile), \realpath($config->getConfigFile()));
Chris@17 65 $this->assertSame(\realpath($historyFile), \realpath($config->getHistoryFile()));
Chris@17 66 $this->assertSame(\realpath($manualDbFile), \realpath($config->getManualDbFile()));
Chris@13 67
Chris@17 68 \putenv("HOME=$oldHome");
Chris@13 69 }
Chris@13 70
Chris@13 71 public function directories()
Chris@13 72 {
Chris@17 73 $base = \realpath(__DIR__ . '/fixtures');
Chris@13 74
Chris@13 75 return [
Chris@13 76 [
Chris@13 77 $base . '/default',
Chris@13 78 $base . '/default/.config/psysh/config.php',
Chris@13 79 $base . '/default/.config/psysh/psysh_history',
Chris@13 80 $base . '/default/.local/share/psysh/php_manual.sqlite',
Chris@13 81 ],
Chris@13 82 [
Chris@13 83 $base . '/legacy',
Chris@13 84 $base . '/legacy/.psysh/rc.php',
Chris@13 85 $base . '/legacy/.psysh/history',
Chris@13 86 $base . '/legacy/.psysh/php_manual.sqlite',
Chris@13 87 ],
Chris@13 88 [
Chris@13 89 $base . '/mixed',
Chris@13 90 $base . '/mixed/.psysh/config.php',
Chris@13 91 $base . '/mixed/.psysh/psysh_history',
Chris@13 92 null,
Chris@13 93 ],
Chris@13 94 ];
Chris@13 95 }
Chris@13 96
Chris@13 97 public function testLoadConfig()
Chris@13 98 {
Chris@13 99 $config = $this->getConfig();
Chris@13 100 $cleaner = new CodeCleaner();
Chris@13 101 $pager = new PassthruPager(new ConsoleOutput());
Chris@13 102
Chris@13 103 $config->loadConfig([
Chris@13 104 'useReadline' => false,
Chris@13 105 'usePcntl' => false,
Chris@13 106 'codeCleaner' => $cleaner,
Chris@13 107 'pager' => $pager,
Chris@13 108 'requireSemicolons' => true,
Chris@13 109 'errorLoggingLevel' => E_ERROR | E_WARNING,
Chris@13 110 'colorMode' => Configuration::COLOR_MODE_FORCED,
Chris@13 111 'startupMessage' => 'Psysh is awesome!',
Chris@13 112 ]);
Chris@13 113
Chris@13 114 $this->assertFalse($config->useReadline());
Chris@13 115 $this->assertFalse($config->usePcntl());
Chris@13 116 $this->assertSame($cleaner, $config->getCodeCleaner());
Chris@13 117 $this->assertSame($pager, $config->getPager());
Chris@13 118 $this->assertTrue($config->requireSemicolons());
Chris@13 119 $this->assertSame(E_ERROR | E_WARNING, $config->errorLoggingLevel());
Chris@13 120 $this->assertSame(Configuration::COLOR_MODE_FORCED, $config->colorMode());
Chris@13 121 $this->assertSame('Psysh is awesome!', $config->getStartupMessage());
Chris@13 122 }
Chris@13 123
Chris@13 124 public function testLoadConfigFile()
Chris@13 125 {
Chris@13 126 $config = $this->getConfig(__DIR__ . '/fixtures/config.php');
Chris@13 127
Chris@17 128 $runtimeDir = $this->joinPath(\realpath(\sys_get_temp_dir()), 'psysh_test', 'withconfig', 'temp');
Chris@13 129
Chris@17 130 $this->assertStringStartsWith($runtimeDir, \realpath($config->getTempFile('foo', 123)));
Chris@17 131 $this->assertStringStartsWith($runtimeDir, \realpath(\dirname($config->getPipe('pipe', 123))));
Chris@17 132 $this->assertStringStartsWith($runtimeDir, \realpath($config->getRuntimeDir()));
Chris@13 133
Chris@17 134 $this->assertSame(\function_exists('readline'), $config->useReadline());
Chris@13 135 $this->assertFalse($config->usePcntl());
Chris@13 136 $this->assertSame(E_ALL & ~E_NOTICE, $config->errorLoggingLevel());
Chris@13 137 }
Chris@13 138
Chris@13 139 public function testLoadLocalConfigFile()
Chris@13 140 {
Chris@17 141 $oldPwd = \getcwd();
Chris@17 142 \chdir(\realpath(__DIR__ . '/fixtures/project/'));
Chris@13 143
Chris@13 144 $config = new Configuration();
Chris@13 145
Chris@13 146 // When no configuration file is specified local project config is merged
Chris@13 147 $this->assertTrue($config->requireSemicolons());
Chris@13 148 $this->assertFalse($config->useUnicode());
Chris@13 149
Chris@13 150 $config = new Configuration(['configFile' => __DIR__ . '/fixtures/config.php']);
Chris@13 151
Chris@13 152 // Defining a configuration file skips loading local project config
Chris@13 153 $this->assertFalse($config->requireSemicolons());
Chris@13 154 $this->assertTrue($config->useUnicode());
Chris@13 155
Chris@17 156 \chdir($oldPwd);
Chris@13 157 }
Chris@13 158
Chris@13 159 /**
Chris@13 160 * @expectedException \Psy\Exception\DeprecatedException
Chris@13 161 */
Chris@13 162 public function testBaseDirConfigIsDeprecated()
Chris@13 163 {
Chris@13 164 $config = new Configuration(['baseDir' => 'fake']);
Chris@13 165 }
Chris@13 166
Chris@13 167 private function joinPath()
Chris@13 168 {
Chris@17 169 return \implode(DIRECTORY_SEPARATOR, \func_get_args());
Chris@13 170 }
Chris@13 171
Chris@13 172 public function testConfigIncludes()
Chris@13 173 {
Chris@13 174 $config = new Configuration([
Chris@13 175 'defaultIncludes' => ['/file.php'],
Chris@13 176 'configFile' => __DIR__ . '/fixtures/empty.php',
Chris@13 177 ]);
Chris@13 178
Chris@13 179 $includes = $config->getDefaultIncludes();
Chris@13 180 $this->assertCount(1, $includes);
Chris@13 181 $this->assertSame('/file.php', $includes[0]);
Chris@13 182 }
Chris@13 183
Chris@13 184 public function testGetOutput()
Chris@13 185 {
Chris@13 186 $config = $this->getConfig();
Chris@13 187 $output = $config->getOutput();
Chris@13 188
Chris@13 189 $this->assertInstanceOf('Psy\Output\ShellOutput', $output);
Chris@13 190 }
Chris@13 191
Chris@13 192 public function getOutputDecoratedProvider()
Chris@13 193 {
Chris@13 194 return [
Chris@13 195 'auto' => [
Chris@13 196 null,
Chris@13 197 Configuration::COLOR_MODE_AUTO,
Chris@13 198 ],
Chris@13 199 'forced' => [
Chris@13 200 true,
Chris@13 201 Configuration::COLOR_MODE_FORCED,
Chris@13 202 ],
Chris@13 203 'disabled' => [
Chris@13 204 false,
Chris@13 205 Configuration::COLOR_MODE_DISABLED,
Chris@13 206 ],
Chris@13 207 ];
Chris@13 208 }
Chris@13 209
Chris@13 210 /** @dataProvider getOutputDecoratedProvider */
Chris@13 211 public function testGetOutputDecorated($expectation, $colorMode)
Chris@13 212 {
Chris@13 213 $config = $this->getConfig();
Chris@13 214 $config->setColorMode($colorMode);
Chris@13 215
Chris@13 216 $this->assertSame($expectation, $config->getOutputDecorated());
Chris@13 217 }
Chris@13 218
Chris@13 219 public function setColorModeValidProvider()
Chris@13 220 {
Chris@13 221 return [
Chris@13 222 'auto' => [Configuration::COLOR_MODE_AUTO],
Chris@13 223 'forced' => [Configuration::COLOR_MODE_FORCED],
Chris@13 224 'disabled' => [Configuration::COLOR_MODE_DISABLED],
Chris@13 225 ];
Chris@13 226 }
Chris@13 227
Chris@13 228 /** @dataProvider setColorModeValidProvider */
Chris@13 229 public function testSetColorModeValid($colorMode)
Chris@13 230 {
Chris@13 231 $config = $this->getConfig();
Chris@13 232 $config->setColorMode($colorMode);
Chris@13 233
Chris@13 234 $this->assertSame($colorMode, $config->colorMode());
Chris@13 235 }
Chris@13 236
Chris@13 237 /**
Chris@13 238 * @expectedException \InvalidArgumentException
Chris@13 239 * @expectedExceptionMessage invalid color mode: some invalid mode
Chris@13 240 */
Chris@13 241 public function testSetColorModeInvalid()
Chris@13 242 {
Chris@13 243 $config = $this->getConfig();
Chris@13 244 $config->setColorMode('some invalid mode');
Chris@13 245 }
Chris@13 246
Chris@13 247 public function testSetCheckerValid()
Chris@13 248 {
Chris@13 249 $config = $this->getConfig();
Chris@13 250 $checker = new GitHubChecker();
Chris@13 251
Chris@13 252 $config->setChecker($checker);
Chris@13 253
Chris@13 254 $this->assertSame($checker, $config->getChecker());
Chris@13 255 }
Chris@13 256 }