Merge pull request #4873 from curry684/platform-tests

Windows platform tests unified
main
Jordi Boggiano 9 years ago
commit 57e33fcad7

@ -12,6 +12,7 @@
namespace Composer\Command; namespace Composer\Command;
use Composer\Util\Platform;
use Composer\Util\Silencer; use Composer\Util\Silencer;
use Symfony\Component\Console\Input\InputInterface; use Symfony\Component\Console\Input\InputInterface;
use Symfony\Component\Console\Input\InputArgument; use Symfony\Component\Console\Input\InputArgument;
@ -184,7 +185,7 @@ EOT
if ($input->getOption('editor')) { if ($input->getOption('editor')) {
$editor = escapeshellcmd(getenv('EDITOR')); $editor = escapeshellcmd(getenv('EDITOR'));
if (!$editor) { if (!$editor) {
if (defined('PHP_WINDOWS_VERSION_BUILD')) { if (Platform::isWindows()) {
$editor = 'notepad'; $editor = 'notepad';
} else { } else {
foreach (array('vim', 'vi', 'nano', 'pico', 'ed') as $candidate) { foreach (array('vim', 'vi', 'nano', 'pico', 'ed') as $candidate) {
@ -197,7 +198,7 @@ EOT
} }
$file = $input->getOption('auth') ? $this->authConfigFile->getPath() : $this->configFile->getPath(); $file = $input->getOption('auth') ? $this->authConfigFile->getPath() : $this->configFile->getPath();
system($editor . ' ' . $file . (defined('PHP_WINDOWS_VERSION_BUILD') ? '' : ' > `tty`')); system($editor . ' ' . $file . (Platform::isWindows() ? '' : ' > `tty`'));
return 0; return 0;
} }

@ -16,6 +16,7 @@ use Composer\Factory;
use Composer\Package\CompletePackageInterface; use Composer\Package\CompletePackageInterface;
use Composer\Repository\RepositoryInterface; use Composer\Repository\RepositoryInterface;
use Composer\Repository\ArrayRepository; use Composer\Repository\ArrayRepository;
use Composer\Util\Platform;
use Composer\Util\ProcessExecutor; use Composer\Util\ProcessExecutor;
use Symfony\Component\Console\Input\InputArgument; use Symfony\Component\Console\Input\InputArgument;
use Symfony\Component\Console\Input\InputOption; use Symfony\Component\Console\Input\InputOption;
@ -117,7 +118,7 @@ EOT
{ {
$url = ProcessExecutor::escape($url); $url = ProcessExecutor::escape($url);
if (defined('PHP_WINDOWS_VERSION_MAJOR')) { if (Platform::isWindows()) {
return passthru('start "web" explorer "' . $url . '"'); return passthru('start "web" explorer "' . $url . '"');
} }

@ -20,6 +20,7 @@ use Composer\Semver\VersionParser;
use Composer\Plugin\CommandEvent; use Composer\Plugin\CommandEvent;
use Composer\Plugin\PluginEvents; use Composer\Plugin\PluginEvents;
use Composer\Package\PackageInterface; use Composer\Package\PackageInterface;
use Composer\Util\Platform;
use Symfony\Component\Console\Formatter\OutputFormatterStyle; use Symfony\Component\Console\Formatter\OutputFormatterStyle;
use Symfony\Component\Console\Input\InputInterface; use Symfony\Component\Console\Input\InputInterface;
use Symfony\Component\Console\Input\InputArgument; use Symfony\Component\Console\Input\InputArgument;
@ -232,7 +233,7 @@ EOT
// outside of a real terminal, use space without a limit // outside of a real terminal, use space without a limit
$width = PHP_INT_MAX; $width = PHP_INT_MAX;
} }
if (defined('PHP_WINDOWS_VERSION_BUILD')) { if (Platform::isWindows()) {
$width--; $width--;
} }

@ -12,6 +12,7 @@
namespace Composer\Console; namespace Composer\Console;
use Composer\Util\Platform;
use Composer\Util\Silencer; use Composer\Util\Silencer;
use Symfony\Component\Console\Application as BaseApplication; use Symfony\Component\Console\Application as BaseApplication;
use Symfony\Component\Console\Input\InputInterface; use Symfony\Component\Console\Input\InputInterface;
@ -219,7 +220,7 @@ class Application extends BaseApplication
} }
Silencer::restore(); Silencer::restore();
if (defined('PHP_WINDOWS_VERSION_BUILD') && false !== strpos($exception->getMessage(), 'The system cannot find the path specified')) { if (Platform::isWindows() && false !== strpos($exception->getMessage(), 'The system cannot find the path specified')) {
$io->writeError('<error>The following exception may be caused by a stale entry in your cmd.exe AutoRun</error>', true, IOInterface::QUIET); $io->writeError('<error>The following exception may be caused by a stale entry in your cmd.exe AutoRun</error>', true, IOInterface::QUIET);
$io->writeError('<error>Check https://getcomposer.org/doc/articles/troubleshooting.md#-the-system-cannot-find-the-path-specified-windows- for details</error>', true, IOInterface::QUIET); $io->writeError('<error>Check https://getcomposer.org/doc/articles/troubleshooting.md#-the-system-cannot-find-the-path-specified-windows- for details</error>', true, IOInterface::QUIET);
} }

@ -14,6 +14,7 @@ namespace Composer\Downloader;
use Composer\Package\PackageInterface; use Composer\Package\PackageInterface;
use Composer\Util\Git as GitUtil; use Composer\Util\Git as GitUtil;
use Composer\Util\Platform;
use Composer\Util\ProcessExecutor; use Composer\Util\ProcessExecutor;
use Composer\IO\IOInterface; use Composer\IO\IOInterface;
use Composer\Util\Filesystem; use Composer\Util\Filesystem;
@ -43,7 +44,7 @@ class GitDownloader extends VcsDownloader
$path = $this->normalizePath($path); $path = $this->normalizePath($path);
$ref = $package->getSourceReference(); $ref = $package->getSourceReference();
$flag = defined('PHP_WINDOWS_VERSION_MAJOR') ? '/D ' : ''; $flag = Platform::isWindows() ? '/D ' : '';
$command = 'git clone --no-checkout %s %s && cd '.$flag.'%2$s && git remote add composer %1$s && git fetch composer'; $command = 'git clone --no-checkout %s %s && cd '.$flag.'%2$s && git remote add composer %1$s && git fetch composer';
$this->io->writeError(" Cloning ".$ref); $this->io->writeError(" Cloning ".$ref);
@ -353,7 +354,7 @@ class GitDownloader extends VcsDownloader
protected function normalizePath($path) protected function normalizePath($path)
{ {
if (defined('PHP_WINDOWS_VERSION_MAJOR') && strlen($path) > 0) { if (Platform::isWindows() && strlen($path) > 0) {
$basePath = $path; $basePath = $path;
$removed = array(); $removed = array();

@ -16,6 +16,7 @@ use Composer\Config;
use Composer\Cache; use Composer\Cache;
use Composer\EventDispatcher\EventDispatcher; use Composer\EventDispatcher\EventDispatcher;
use Composer\Package\PackageInterface; use Composer\Package\PackageInterface;
use Composer\Util\Platform;
use Composer\Util\ProcessExecutor; use Composer\Util\ProcessExecutor;
use Composer\Util\RemoteFilesystem; use Composer\Util\RemoteFilesystem;
use Composer\IO\IOInterface; use Composer\IO\IOInterface;
@ -40,7 +41,7 @@ class GzipDownloader extends ArchiveDownloader
$targetFilepath = $path . DIRECTORY_SEPARATOR . basename(substr($file, 0, -3)); $targetFilepath = $path . DIRECTORY_SEPARATOR . basename(substr($file, 0, -3));
// Try to use gunzip on *nix // Try to use gunzip on *nix
if (!defined('PHP_WINDOWS_VERSION_BUILD')) { if (!Platform::isWindows()) {
$command = 'gzip -cd ' . ProcessExecutor::escape($file) . ' > ' . ProcessExecutor::escape($targetFilepath); $command = 'gzip -cd ' . ProcessExecutor::escape($file) . ' > ' . ProcessExecutor::escape($targetFilepath);
if (0 === $this->process->execute($command, $ignoredOutput)) { if (0 === $this->process->execute($command, $ignoredOutput)) {

@ -15,6 +15,7 @@ namespace Composer\Downloader;
use Composer\Config; use Composer\Config;
use Composer\Cache; use Composer\Cache;
use Composer\EventDispatcher\EventDispatcher; use Composer\EventDispatcher\EventDispatcher;
use Composer\Util\Platform;
use Composer\Util\ProcessExecutor; use Composer\Util\ProcessExecutor;
use Composer\Util\RemoteFilesystem; use Composer\Util\RemoteFilesystem;
use Composer\IO\IOInterface; use Composer\IO\IOInterface;
@ -42,7 +43,7 @@ class RarDownloader extends ArchiveDownloader
$processError = null; $processError = null;
// Try to use unrar on *nix // Try to use unrar on *nix
if (!defined('PHP_WINDOWS_VERSION_BUILD')) { if (!Platform::isWindows()) {
$command = 'unrar x ' . ProcessExecutor::escape($file) . ' ' . ProcessExecutor::escape($path) . ' && chmod -R u+w ' . ProcessExecutor::escape($path); $command = 'unrar x ' . ProcessExecutor::escape($file) . ' ' . ProcessExecutor::escape($path) . ' && chmod -R u+w ' . ProcessExecutor::escape($path);
if (0 === $this->process->execute($command, $ignoredOutput)) { if (0 === $this->process->execute($command, $ignoredOutput)) {
@ -65,7 +66,7 @@ class RarDownloader extends ArchiveDownloader
$error = "Could not decompress the archive, enable the PHP rar extension or install unrar.\n" $error = "Could not decompress the archive, enable the PHP rar extension or install unrar.\n"
. $iniMessage . "\n" . $processError; . $iniMessage . "\n" . $processError;
if (!defined('PHP_WINDOWS_VERSION_BUILD')) { if (!Platform::isWindows()) {
$error = "Could not decompress the archive, enable the PHP rar extension.\n" . $iniMessage; $error = "Could not decompress the archive, enable the PHP rar extension.\n" . $iniMessage;
} }

@ -15,6 +15,7 @@ namespace Composer\Downloader;
use Composer\Config; use Composer\Config;
use Composer\Cache; use Composer\Cache;
use Composer\EventDispatcher\EventDispatcher; use Composer\EventDispatcher\EventDispatcher;
use Composer\Util\Platform;
use Composer\Util\ProcessExecutor; use Composer\Util\ProcessExecutor;
use Composer\Util\RemoteFilesystem; use Composer\Util\RemoteFilesystem;
use Composer\IO\IOInterface; use Composer\IO\IOInterface;
@ -38,7 +39,7 @@ class ZipDownloader extends ArchiveDownloader
$processError = null; $processError = null;
// try to use unzip on *nix // try to use unzip on *nix
if (!defined('PHP_WINDOWS_VERSION_BUILD')) { if (!Platform::isWindows()) {
$command = 'unzip '.ProcessExecutor::escape($file).' -d '.ProcessExecutor::escape($path) . ' && chmod -R u+w ' . ProcessExecutor::escape($path); $command = 'unzip '.ProcessExecutor::escape($file).' -d '.ProcessExecutor::escape($path) . ' && chmod -R u+w ' . ProcessExecutor::escape($path);
try { try {
if (0 === $this->process->execute($command, $ignoredOutput)) { if (0 === $this->process->execute($command, $ignoredOutput)) {
@ -64,7 +65,7 @@ class ZipDownloader extends ArchiveDownloader
$error = "Could not decompress the archive, enable the PHP zip extension or install unzip.\n" $error = "Could not decompress the archive, enable the PHP zip extension or install unzip.\n"
. $iniMessage . "\n" . $processError; . $iniMessage . "\n" . $processError;
if (!defined('PHP_WINDOWS_VERSION_BUILD')) { if (!Platform::isWindows()) {
$error = "Could not decompress the archive, enable the PHP zip extension.\n" . $iniMessage; $error = "Could not decompress the archive, enable the PHP zip extension.\n" . $iniMessage;
} }

@ -20,6 +20,7 @@ use Composer\Package\Version\VersionGuesser;
use Composer\Repository\RepositoryManager; use Composer\Repository\RepositoryManager;
use Composer\Repository\WritableRepositoryInterface; use Composer\Repository\WritableRepositoryInterface;
use Composer\Util\Filesystem; use Composer\Util\Filesystem;
use Composer\Util\Platform;
use Composer\Util\ProcessExecutor; use Composer\Util\ProcessExecutor;
use Composer\Util\RemoteFilesystem; use Composer\Util\RemoteFilesystem;
use Composer\Util\Silencer; use Composer\Util\Silencer;
@ -51,7 +52,7 @@ class Factory
return $home; return $home;
} }
if (defined('PHP_WINDOWS_VERSION_MAJOR')) { if (Platform::isWindows()) {
if (!getenv('APPDATA')) { if (!getenv('APPDATA')) {
throw new \RuntimeException('The APPDATA or COMPOSER_HOME environment variable must be set for composer to run correctly'); throw new \RuntimeException('The APPDATA or COMPOSER_HOME environment variable must be set for composer to run correctly');
} }
@ -90,7 +91,7 @@ class Factory
return $homeEnv . '/cache'; return $homeEnv . '/cache';
} }
if (defined('PHP_WINDOWS_VERSION_MAJOR')) { if (Platform::isWindows()) {
if ($cacheDir = getenv('LOCALAPPDATA')) { if ($cacheDir = getenv('LOCALAPPDATA')) {
$cacheDir .= '/Composer'; $cacheDir .= '/Composer';
} else { } else {
@ -125,7 +126,7 @@ class Factory
return $homeEnv; return $homeEnv;
} }
if (defined('PHP_WINDOWS_VERSION_MAJOR')) { if (Platform::isWindows()) {
return strtr($home, '\\', '/'); return strtr($home, '\\', '/');
} }

@ -17,6 +17,7 @@ use Composer\IO\IOInterface;
use Composer\Repository\InstalledRepositoryInterface; use Composer\Repository\InstalledRepositoryInterface;
use Composer\Package\PackageInterface; use Composer\Package\PackageInterface;
use Composer\Util\Filesystem; use Composer\Util\Filesystem;
use Composer\Util\Platform;
use Composer\Util\ProcessExecutor; use Composer\Util\ProcessExecutor;
use Composer\Util\Silencer; use Composer\Util\Silencer;
@ -241,7 +242,7 @@ class LibraryInstaller implements InstallerInterface
} }
if ($this->binCompat === "auto") { if ($this->binCompat === "auto") {
if (defined('PHP_WINDOWS_VERSION_BUILD')) { if (Platform::isWindows()) {
$this->installFullBinaries($binPath, $link, $bin, $package); $this->installFullBinaries($binPath, $link, $bin, $package);
} else { } else {
$this->installSymlinkBinaries($binPath, $link); $this->installSymlinkBinaries($binPath, $link);

@ -17,6 +17,7 @@ use Composer\Composer;
use Composer\Downloader\PearPackageExtractor; use Composer\Downloader\PearPackageExtractor;
use Composer\Repository\InstalledRepositoryInterface; use Composer\Repository\InstalledRepositoryInterface;
use Composer\Package\PackageInterface; use Composer\Package\PackageInterface;
use Composer\Util\Platform;
use Composer\Util\ProcessExecutor; use Composer\Util\ProcessExecutor;
/** /**
@ -53,7 +54,7 @@ class PearInstaller extends LibraryInstaller
parent::installCode($package); parent::installCode($package);
parent::initializeBinDir(); parent::initializeBinDir();
$isWindows = defined('PHP_WINDOWS_VERSION_BUILD'); $isWindows = Platform::isWindows();
$php_bin = $this->binDir . ($isWindows ? '/composer-php.bat' : '/composer-php'); $php_bin = $this->binDir . ($isWindows ? '/composer-php.bat' : '/composer-php');
if (!$isWindows) { if (!$isWindows) {

@ -110,7 +110,7 @@ class Filesystem
return $this->removeDirectoryPhp($directory); return $this->removeDirectoryPhp($directory);
} }
if (defined('PHP_WINDOWS_VERSION_BUILD')) { if (Platform::isWindows()) {
$cmd = sprintf('rmdir /S /Q %s', ProcessExecutor::escape(realpath($directory))); $cmd = sprintf('rmdir /S /Q %s', ProcessExecutor::escape(realpath($directory)));
} else { } else {
$cmd = sprintf('rm -rf %s', ProcessExecutor::escape($directory)); $cmd = sprintf('rm -rf %s', ProcessExecutor::escape($directory));
@ -181,10 +181,10 @@ class Filesystem
{ {
if (!@$this->unlinkImplementation($path)) { if (!@$this->unlinkImplementation($path)) {
// retry after a bit on windows since it tends to be touchy with mass removals // retry after a bit on windows since it tends to be touchy with mass removals
if (!defined('PHP_WINDOWS_VERSION_BUILD') || (usleep(350000) && !@$this->unlinkImplementation($path))) { if (!Platform::isWindows() || (usleep(350000) && !@$this->unlinkImplementation($path))) {
$error = error_get_last(); $error = error_get_last();
$message = 'Could not delete '.$path.': ' . @$error['message']; $message = 'Could not delete '.$path.': ' . @$error['message'];
if (defined('PHP_WINDOWS_VERSION_BUILD')) { if (Platform::isWindows()) {
$message .= "\nThis can be due to an antivirus or the Windows Search Indexer locking the file while they are analyzed"; $message .= "\nThis can be due to an antivirus or the Windows Search Indexer locking the file while they are analyzed";
} }
@ -206,10 +206,10 @@ class Filesystem
{ {
if (!@rmdir($path)) { if (!@rmdir($path)) {
// retry after a bit on windows since it tends to be touchy with mass removals // retry after a bit on windows since it tends to be touchy with mass removals
if (!defined('PHP_WINDOWS_VERSION_BUILD') || (usleep(350000) && !@rmdir($path))) { if (!Platform::isWindows() || (usleep(350000) && !@rmdir($path))) {
$error = error_get_last(); $error = error_get_last();
$message = 'Could not delete '.$path.': ' . @$error['message']; $message = 'Could not delete '.$path.': ' . @$error['message'];
if (defined('PHP_WINDOWS_VERSION_BUILD')) { if (Platform::isWindows()) {
$message .= "\nThis can be due to an antivirus or the Windows Search Indexer locking the file while they are analyzed"; $message .= "\nThis can be due to an antivirus or the Windows Search Indexer locking the file while they are analyzed";
} }
@ -264,7 +264,7 @@ class Filesystem
return $this->copyThenRemove($source, $target); return $this->copyThenRemove($source, $target);
} }
if (defined('PHP_WINDOWS_VERSION_BUILD')) { if (Platform::isWindows()) {
// Try to copy & delete - this is a workaround for random "Access denied" errors. // Try to copy & delete - this is a workaround for random "Access denied" errors.
$command = sprintf('xcopy %s %s /E /I /Q /Y', ProcessExecutor::escape($source), ProcessExecutor::escape($target)); $command = sprintf('xcopy %s %s /E /I /Q /Y', ProcessExecutor::escape($source), ProcessExecutor::escape($target));
$result = $this->processExecutor->execute($command, $output); $result = $this->processExecutor->execute($command, $output);
@ -460,7 +460,7 @@ class Filesystem
public static function getPlatformPath($path) public static function getPlatformPath($path)
{ {
if (defined('PHP_WINDOWS_VERSION_BUILD')) { if (Platform::isWindows()) {
$path = preg_replace('{^(?:file:///([a-z])/)}i', 'file://$1:/', $path); $path = preg_replace('{^(?:file:///([a-z])/)}i', 'file://$1:/', $path);
} }
@ -498,7 +498,7 @@ class Filesystem
*/ */
private function unlinkImplementation($path) private function unlinkImplementation($path)
{ {
if (defined('PHP_WINDOWS_VERSION_BUILD') && is_dir($path) && is_link($path)) { if (Platform::isWindows() && is_dir($path) && is_link($path)) {
return rmdir($path); return rmdir($path);
} }

@ -51,10 +51,7 @@ class Perforce
public static function create($repoConfig, $port, $path, ProcessExecutor $process, IOInterface $io) public static function create($repoConfig, $port, $path, ProcessExecutor $process, IOInterface $io)
{ {
$isWindows = defined('PHP_WINDOWS_VERSION_BUILD'); return new Perforce($repoConfig, $port, $path, $process, Platform::isWindows(), $io);
$perforce = new Perforce($repoConfig, $port, $path, $process, $isWindows, $io);
return $perforce;
} }
public static function checkServerExists($url, ProcessExecutor $processExecutor) public static function checkServerExists($url, ProcessExecutor $processExecutor)

@ -0,0 +1,28 @@
<?php
/**
* This file is part of Composer.
*
* (c) Nils Adermann <naderman@naderman.de>
* Jordi Boggiano <j.boggiano@seld.be>
*
* For the full copyright and license information, please view the LICENSE
* file that was distributed with this source code.
*/
namespace Composer\Util;
/**
* Platform helper for uniform platform-specific tests.
*
* @author Niels Keurentjes <niels.keurentjes@omines.com>
*/
class Platform
{
/**
* @return bool Whether the host machine is running a Windows OS
*/
public static function isWindows()
{
return defined('PHP_WINDOWS_VERSION_BUILD');
}
}

@ -50,7 +50,7 @@ class ProcessExecutor
// make sure that null translate to the proper directory in case the dir is a symlink // make sure that null translate to the proper directory in case the dir is a symlink
// and we call a git command, because msysgit does not handle symlinks properly // and we call a git command, because msysgit does not handle symlinks properly
if (null === $cwd && defined('PHP_WINDOWS_VERSION_BUILD') && false !== strpos($command, 'git') && getcwd()) { if (null === $cwd && Platform::isWindows() && false !== strpos($command, 'git') && getcwd()) {
$cwd = realpath(getcwd()); $cwd = realpath(getcwd());
} }

@ -175,7 +175,7 @@ final class TlsHelper
return self::$useOpensslParse = true; return self::$useOpensslParse = true;
} }
if ('\\' === DIRECTORY_SEPARATOR) { if (Platform::isWindows()) {
// Windows is probably insecure in this case. // Windows is probably insecure in this case.
return self::$useOpensslParse = false; return self::$useOpensslParse = false;
} }

@ -16,6 +16,7 @@ use Composer\Downloader\GitDownloader;
use Composer\Config; use Composer\Config;
use Composer\TestCase; use Composer\TestCase;
use Composer\Util\Filesystem; use Composer\Util\Filesystem;
use Composer\Util\Platform;
class GitDownloaderTest extends TestCase class GitDownloaderTest extends TestCase
{ {
@ -353,7 +354,7 @@ class GitDownloaderTest extends TestCase
private function winCompat($cmd) private function winCompat($cmd)
{ {
if (defined('PHP_WINDOWS_VERSION_BUILD')) { if (Platform::isWindows()) {
$cmd = str_replace('cd ', 'cd /D ', $cmd); $cmd = str_replace('cd ', 'cd /D ', $cmd);
$cmd = str_replace('composerPath', getcwd().'/composerPath', $cmd); $cmd = str_replace('composerPath', getcwd().'/composerPath', $cmd);

@ -15,6 +15,7 @@ namespace Composer\Test\Downloader;
use Composer\Downloader\HgDownloader; use Composer\Downloader\HgDownloader;
use Composer\TestCase; use Composer\TestCase;
use Composer\Util\Filesystem; use Composer\Util\Filesystem;
use Composer\Util\Platform;
class HgDownloaderTest extends TestCase class HgDownloaderTest extends TestCase
{ {
@ -156,10 +157,6 @@ class HgDownloaderTest extends TestCase
private function getCmd($cmd) private function getCmd($cmd)
{ {
if (defined('PHP_WINDOWS_VERSION_BUILD')) { return Platform::isWindows() ? strtr($cmd, "'", '"') : $cmd;
return strtr($cmd, "'", '"');
}
return $cmd;
} }
} }

@ -15,6 +15,7 @@ namespace Composer\Test\Downloader;
use Composer\Downloader\XzDownloader; use Composer\Downloader\XzDownloader;
use Composer\TestCase; use Composer\TestCase;
use Composer\Util\Filesystem; use Composer\Util\Filesystem;
use Composer\Util\Platform;
use Composer\Util\RemoteFilesystem; use Composer\Util\RemoteFilesystem;
class XzDownloaderTest extends TestCase class XzDownloaderTest extends TestCase
@ -31,7 +32,7 @@ class XzDownloaderTest extends TestCase
public function setUp() public function setUp()
{ {
if (defined('PHP_WINDOWS_VERSION_BUILD')) { if (Platform::isWindows()) {
$this->markTestSkipped('Skip test on Windows'); $this->markTestSkipped('Skip test on Windows');
} }
$this->testDir = $this->getUniqueTmpDirectory(); $this->testDir = $this->getUniqueTmpDirectory();

@ -16,6 +16,7 @@ use Composer\Repository\Vcs\SvnDriver;
use Composer\Config; use Composer\Config;
use Composer\TestCase; use Composer\TestCase;
use Composer\Util\Filesystem; use Composer\Util\Filesystem;
use Composer\Util\Platform;
class SvnDriverTest extends TestCase class SvnDriverTest extends TestCase
{ {
@ -71,7 +72,7 @@ class SvnDriverTest extends TestCase
private function getCmd($cmd) private function getCmd($cmd)
{ {
if (defined('PHP_WINDOWS_VERSION_BUILD')) { if (Platform::isWindows()) {
return strtr($cmd, "'", '"'); return strtr($cmd, "'", '"');
} }

@ -0,0 +1,29 @@
<?php
/**
* This file is part of Composer.
*
* (c) Nils Adermann <naderman@naderman.de>
* Jordi Boggiano <j.boggiano@seld.be>
*
* For the full copyright and license information, please view the LICENSE
* file that was distributed with this source code.
*/
namespace Composer\Test\Util;
use Composer\Util\Platform;
/**
* PlatformTest
*
* @author Niels Keurentjes <niels.keurentjes@omines.com>
*/
class PlatformTest extends \PHPUnit_Framework_TestCase
{
public function testWindows()
{
// Compare 2 common tests for Windows to the built-in Windows test
$this->assertEquals(('\\' === DIRECTORY_SEPARATOR), Platform::isWindows());
$this->assertEquals(defined('PHP_WINDOWS_VERSION_MAJOR'), Platform::isWindows());
}
}

@ -14,6 +14,7 @@ namespace Composer\Test\Util;
use Composer\Config; use Composer\Config;
use Composer\IO\NullIO; use Composer\IO\NullIO;
use Composer\Util\Platform;
use Composer\Util\Svn; use Composer\Util\Svn;
class SvnTest extends \PHPUnit_Framework_TestCase class SvnTest extends \PHPUnit_Framework_TestCase
@ -131,10 +132,6 @@ class SvnTest extends \PHPUnit_Framework_TestCase
private function getCmd($cmd) private function getCmd($cmd)
{ {
if (defined('PHP_WINDOWS_VERSION_BUILD')) { return Platform::isWindows() ? strtr($cmd, "'", '"') : $cmd;
return strtr($cmd, "'", '"');
}
return $cmd;
} }
} }

Loading…
Cancel
Save