2013-08-09 19:24:58 +00:00
< ? php
2013-10-11 23:12:02 +00:00
2013-08-15 17:16:15 +00:00
/*
* 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 .
2013-08-09 19:24:58 +00:00
*/
namespace Composer\Test\Util ;
2021-12-09 16:09:07 +00:00
use Composer\Json\JsonFile ;
2013-08-15 17:16:15 +00:00
use Composer\Util\Perforce ;
2020-02-07 03:18:45 +00:00
use Composer\Test\TestCase ;
2018-08-25 15:45:08 +00:00
use Composer\Util\ProcessExecutor ;
2013-08-09 19:24:58 +00:00
2013-08-15 17:16:15 +00:00
/**
* @ author Matt Whittom < Matt . Whittom @ veteransunited . com >
*/
2017-11-04 14:52:13 +00:00
class PerforceTest extends TestCase
2013-09-04 14:24:49 +00:00
{
2021-10-27 14:18:46 +00:00
/** @var Perforce */
2013-08-09 19:24:58 +00:00
protected $perforce ;
2021-10-27 14:18:46 +00:00
/** @var \PHPUnit\Framework\MockObject\MockObject&\Composer\Util\ProcessExecutor */
2013-08-09 19:24:58 +00:00
protected $processExecutor ;
2021-10-27 14:18:46 +00:00
/** @var array<string, string> */
2018-01-06 14:05:39 +00:00
protected $repoConfig ;
2021-10-27 14:18:46 +00:00
/** @var \PHPUnit\Framework\MockObject\MockObject&\Composer\IO\IOInterface */
2014-03-14 19:45:31 +00:00
protected $io ;
2013-08-09 19:24:58 +00:00
2017-03-08 14:07:29 +00:00
const TEST_DEPOT = 'depot' ;
const TEST_BRANCH = 'branch' ;
const TEST_P4USER = 'user' ;
2014-03-17 21:06:19 +00:00
const TEST_CLIENT_NAME = 'TEST' ;
2017-03-08 14:07:29 +00:00
const TEST_PORT = 'port' ;
const TEST_PATH = 'path' ;
2014-03-17 21:06:19 +00:00
2021-12-08 16:03:05 +00:00
protected function setUp () : void
2013-09-04 14:24:49 +00:00
{
2018-04-12 08:24:56 +00:00
$this -> processExecutor = $this -> getMockBuilder ( 'Composer\Util\ProcessExecutor' ) -> getMock ();
2014-03-17 21:06:19 +00:00
$this -> repoConfig = $this -> getTestRepoConfig ();
$this -> io = $this -> getMockIOInterface ();
2014-03-25 13:30:44 +00:00
$this -> createNewPerforceWithWindowsFlag ( true );
2014-03-14 19:45:31 +00:00
}
2021-10-27 14:18:46 +00:00
/**
* @ return array < string , string >
*/
2014-03-17 21:06:19 +00:00
public function getTestRepoConfig ()
{
return array (
2017-03-08 14:07:29 +00:00
'depot' => self :: TEST_DEPOT ,
'branch' => self :: TEST_BRANCH ,
'p4user' => self :: TEST_P4USER ,
2015-09-28 09:51:14 +00:00
'unique_perforce_client_name' => self :: TEST_CLIENT_NAME ,
2014-03-17 21:06:19 +00:00
);
}
2021-10-27 14:18:46 +00:00
/**
* @ return \PHPUnit\Framework\MockObject\MockObject & \Composer\IO\IOInterface
*/
2014-03-17 21:06:19 +00:00
public function getMockIOInterface ()
{
2018-04-12 08:24:56 +00:00
return $this -> getMockBuilder ( 'Composer\IO\IOInterface' ) -> getMock ();
2014-03-17 21:06:19 +00:00
}
2021-10-27 14:18:46 +00:00
/**
* @ param bool $flag
*
* @ return void
*/
2014-03-25 13:30:44 +00:00
protected function createNewPerforceWithWindowsFlag ( $flag )
{
$this -> perforce = new Perforce ( $this -> repoConfig , self :: TEST_PORT , self :: TEST_PATH , $this -> processExecutor , $flag , $this -> io );
}
2013-09-04 14:24:49 +00:00
public function testGetClientWithoutStream ()
{
2013-08-15 17:16:15 +00:00
$client = $this -> perforce -> getClient ();
$hostname = gethostname ();
$timestamp = time ();
2013-09-09 19:48:24 +00:00
$expected = 'composer_perforce_TEST_depot' ;
2013-08-09 19:24:58 +00:00
$this -> assertEquals ( $expected , $client );
}
2013-09-04 14:24:49 +00:00
public function testGetClientFromStream ()
{
2013-08-15 17:16:15 +00:00
$this -> setPerforceToStream ();
$client = $this -> perforce -> getClient ();
2013-08-09 19:24:58 +00:00
2013-09-09 19:48:24 +00:00
$expected = 'composer_perforce_TEST_depot_branch' ;
2013-08-09 19:24:58 +00:00
$this -> assertEquals ( $expected , $client );
}
2013-09-04 14:24:49 +00:00
public function testGetStreamWithoutStream ()
{
2013-08-15 17:16:15 +00:00
$stream = $this -> perforce -> getStream ();
2013-08-09 19:24:58 +00:00
$this -> assertEquals ( " //depot " , $stream );
}
2013-09-04 14:24:49 +00:00
public function testGetStreamWithStream ()
{
2013-08-15 17:16:15 +00:00
$this -> setPerforceToStream ();
$stream = $this -> perforce -> getStream ();
2013-09-09 19:48:24 +00:00
$this -> assertEquals ( '//depot/branch' , $stream );
2013-08-09 19:24:58 +00:00
}
2013-09-04 14:24:49 +00:00
public function testGetStreamWithoutLabelWithStreamWithoutLabel ()
{
2013-09-09 19:48:24 +00:00
$stream = $this -> perforce -> getStreamWithoutLabel ( '//depot/branch' );
$this -> assertEquals ( '//depot/branch' , $stream );
2013-08-15 17:16:15 +00:00
}
2013-09-04 14:24:49 +00:00
public function testGetStreamWithoutLabelWithStreamWithLabel ()
{
2013-09-09 19:48:24 +00:00
$stream = $this -> perforce -> getStreamWithoutLabel ( '//depot/branching@label' );
$this -> assertEquals ( '//depot/branching' , $stream );
2013-08-09 19:24:58 +00:00
}
2013-09-04 14:24:49 +00:00
public function testGetClientSpec ()
{
2013-08-15 17:16:15 +00:00
$clientSpec = $this -> perforce -> getP4ClientSpec ();
2013-09-09 19:48:24 +00:00
$expected = 'path/composer_perforce_TEST_depot.p4.spec' ;
2013-08-09 19:24:58 +00:00
$this -> assertEquals ( $expected , $clientSpec );
}
2013-09-04 14:24:49 +00:00
public function testGenerateP4Command ()
{
2013-09-09 19:48:24 +00:00
$command = 'do something' ;
2013-08-15 17:16:15 +00:00
$p4Command = $this -> perforce -> generateP4Command ( $command );
2013-09-09 19:48:24 +00:00
$expected = 'p4 -u user -c composer_perforce_TEST_depot -p port do something' ;
2013-08-09 19:24:58 +00:00
$this -> assertEquals ( $expected , $p4Command );
}
2013-09-04 14:24:49 +00:00
public function testQueryP4UserWithUserAlreadySet ()
{
2014-03-17 21:06:19 +00:00
$this -> perforce -> queryP4user ();
$this -> assertEquals ( self :: TEST_P4USER , $this -> perforce -> getUser ());
2013-08-09 19:24:58 +00:00
}
2013-09-04 14:24:49 +00:00
public function testQueryP4UserWithUserSetInP4VariablesWithWindowsOS ()
{
2014-03-25 13:30:44 +00:00
$this -> createNewPerforceWithWindowsFlag ( true );
2014-03-17 21:06:19 +00:00
$this -> perforce -> setUser ( null );
2013-09-09 19:48:24 +00:00
$expectedCommand = 'p4 set' ;
2014-06-10 14:02:44 +00:00
$callback = function ( $command , & $output ) {
2017-03-08 14:07:29 +00:00
$output = 'P4USER=TEST_P4VARIABLE_USER' . PHP_EOL ;
2014-06-10 14:02:44 +00:00
2017-03-08 14:07:29 +00:00
return true ;
};
2021-12-09 16:09:07 +00:00
$this -> processExecutor -> method ( 'execute' )
2014-03-17 21:06:19 +00:00
-> with ( $this -> equalTo ( $expectedCommand ))
2021-12-09 16:09:07 +00:00
-> willReturnCallback ( $callback );
2014-03-17 21:06:19 +00:00
$this -> perforce -> queryP4user ();
2013-09-09 19:48:24 +00:00
$this -> assertEquals ( 'TEST_P4VARIABLE_USER' , $this -> perforce -> getUser ());
2013-08-09 19:24:58 +00:00
}
2013-09-04 14:24:49 +00:00
public function testQueryP4UserWithUserSetInP4VariablesNotWindowsOS ()
{
2014-03-25 13:30:44 +00:00
$this -> createNewPerforceWithWindowsFlag ( false );
2014-03-17 21:06:19 +00:00
$this -> perforce -> setUser ( null );
2013-08-09 19:24:58 +00:00
$expectedCommand = 'echo $P4USER' ;
2014-06-10 14:02:44 +00:00
$callback = function ( $command , & $output ) {
2017-03-08 14:07:29 +00:00
$output = 'TEST_P4VARIABLE_USER' . PHP_EOL ;
2014-06-10 14:02:44 +00:00
2017-03-08 14:07:29 +00:00
return true ;
};
2021-12-09 16:09:07 +00:00
$this -> processExecutor -> method ( 'execute' )
2014-03-17 21:06:19 +00:00
-> with ( $this -> equalTo ( $expectedCommand ))
2021-12-09 16:09:07 +00:00
-> willReturnCallback ( $callback );
2014-03-17 21:06:19 +00:00
$this -> perforce -> queryP4user ();
2013-09-09 19:48:24 +00:00
$this -> assertEquals ( 'TEST_P4VARIABLE_USER' , $this -> perforce -> getUser ());
2013-08-09 19:24:58 +00:00
}
2013-09-04 14:24:49 +00:00
public function testQueryP4UserQueriesForUser ()
{
2014-03-17 21:06:19 +00:00
$this -> perforce -> setUser ( null );
2013-09-09 19:48:24 +00:00
$expectedQuestion = 'Enter P4 User:' ;
2021-12-09 16:09:07 +00:00
$this -> io -> method ( 'ask' )
2014-03-17 21:06:19 +00:00
-> with ( $this -> equalTo ( $expectedQuestion ))
2021-12-09 16:09:07 +00:00
-> willReturn ( 'TEST_QUERY_USER' );
2014-03-17 21:06:19 +00:00
$this -> perforce -> queryP4user ();
2013-09-09 19:48:24 +00:00
$this -> assertEquals ( 'TEST_QUERY_USER' , $this -> perforce -> getUser ());
2013-08-09 19:24:58 +00:00
}
2013-09-04 14:24:49 +00:00
public function testQueryP4UserStoresResponseToQueryForUserWithWindows ()
{
2014-03-25 13:30:44 +00:00
$this -> createNewPerforceWithWindowsFlag ( true );
2014-03-17 21:06:19 +00:00
$this -> perforce -> setUser ( null );
2013-09-09 19:48:24 +00:00
$expectedQuestion = 'Enter P4 User:' ;
2017-03-08 14:07:29 +00:00
$expectedCommand = 'p4 set P4USER=TEST_QUERY_USER' ;
2021-12-09 16:09:07 +00:00
$this -> io -> expects ( $this -> once ())
2014-03-17 21:06:19 +00:00
-> method ( 'ask' )
-> with ( $this -> equalTo ( $expectedQuestion ))
2021-12-09 16:09:07 +00:00
-> willReturn ( 'TEST_QUERY_USER' );
$this -> processExecutor -> expects ( $this -> exactly ( 2 ))
2014-03-17 21:06:19 +00:00
-> method ( 'execute' )
2021-12-09 16:09:07 +00:00
-> willReturnMap ([
[ 'p4 set' , 0 ],
[ $expectedCommand , 0 ],
]);
2014-03-17 21:06:19 +00:00
$this -> perforce -> queryP4user ();
2013-08-09 19:24:58 +00:00
}
2013-09-04 14:24:49 +00:00
public function testQueryP4UserStoresResponseToQueryForUserWithoutWindows ()
{
2014-03-25 13:30:44 +00:00
$this -> createNewPerforceWithWindowsFlag ( false );
2014-03-17 21:06:19 +00:00
$this -> perforce -> setUser ( null );
2013-09-09 19:48:24 +00:00
$expectedQuestion = 'Enter P4 User:' ;
2017-03-08 14:07:29 +00:00
$expectedCommand = 'export P4USER=TEST_QUERY_USER' ;
2021-12-09 16:09:07 +00:00
$this -> io -> expects ( $this -> once ())
2014-03-17 21:06:19 +00:00
-> method ( 'ask' )
-> with ( $this -> equalTo ( $expectedQuestion ))
2021-12-09 16:09:07 +00:00
-> willReturn ( 'TEST_QUERY_USER' );
$this -> processExecutor -> expects ( $this -> exactly ( 2 ))
2014-03-17 21:06:19 +00:00
-> method ( 'execute' )
2021-12-09 16:09:07 +00:00
-> willReturnMap ([
[ 'echo $P4USER' , 0 ],
$expectedCommand => 0 ,
]);
2014-03-17 21:06:19 +00:00
$this -> perforce -> queryP4user ();
2013-08-09 19:24:58 +00:00
}
2013-09-04 14:24:49 +00:00
public function testQueryP4PasswordWithPasswordAlreadySet ()
{
$repoConfig = array (
2017-03-08 14:07:29 +00:00
'depot' => 'depot' ,
'branch' => 'branch' ,
'p4user' => 'user' ,
2015-09-28 09:51:14 +00:00
'p4password' => 'TEST_PASSWORD' ,
2013-09-04 14:24:49 +00:00
);
2018-01-06 14:05:39 +00:00
$this -> perforce = new Perforce ( $repoConfig , 'port' , 'path' , $this -> processExecutor , false , $this -> getMockIOInterface ());
2014-03-17 21:06:19 +00:00
$password = $this -> perforce -> queryP4Password ();
2013-09-09 19:48:24 +00:00
$this -> assertEquals ( 'TEST_PASSWORD' , $password );
2013-08-09 19:24:58 +00:00
}
2013-09-04 14:24:49 +00:00
public function testQueryP4PasswordWithPasswordSetInP4VariablesWithWindowsOS ()
{
2014-03-25 13:30:44 +00:00
$this -> createNewPerforceWithWindowsFlag ( true );
2013-09-09 19:48:24 +00:00
$expectedCommand = 'p4 set' ;
2014-06-10 14:02:44 +00:00
$callback = function ( $command , & $output ) {
2017-03-08 14:07:29 +00:00
$output = 'P4PASSWD=TEST_P4VARIABLE_PASSWORD' . PHP_EOL ;
2014-06-10 14:02:44 +00:00
2017-03-08 14:07:29 +00:00
return true ;
};
2021-12-09 16:09:07 +00:00
$this -> processExecutor -> method ( 'execute' )
2014-03-17 21:06:19 +00:00
-> with ( $this -> equalTo ( $expectedCommand ))
2021-12-09 16:09:07 +00:00
-> willReturnCallback ( $callback );
2014-03-17 21:06:19 +00:00
$password = $this -> perforce -> queryP4Password ();
2013-09-09 19:48:24 +00:00
$this -> assertEquals ( 'TEST_P4VARIABLE_PASSWORD' , $password );
2013-08-09 19:24:58 +00:00
}
2013-09-04 14:24:49 +00:00
public function testQueryP4PasswordWithPasswordSetInP4VariablesNotWindowsOS ()
{
2014-03-25 13:30:44 +00:00
$this -> createNewPerforceWithWindowsFlag ( false );
2013-08-09 19:24:58 +00:00
$expectedCommand = 'echo $P4PASSWD' ;
2014-06-10 14:02:44 +00:00
$callback = function ( $command , & $output ) {
2017-03-08 14:07:29 +00:00
$output = 'TEST_P4VARIABLE_PASSWORD' . PHP_EOL ;
2014-06-10 14:02:44 +00:00
2017-03-08 14:07:29 +00:00
return true ;
};
2021-12-09 16:09:07 +00:00
$this -> processExecutor -> method ( 'execute' )
2014-03-17 21:06:19 +00:00
-> with ( $this -> equalTo ( $expectedCommand ))
2021-12-09 16:09:07 +00:00
-> willReturnCallback ( $callback );
2014-03-17 21:06:19 +00:00
$password = $this -> perforce -> queryP4Password ();
2013-09-09 19:48:24 +00:00
$this -> assertEquals ( 'TEST_P4VARIABLE_PASSWORD' , $password );
2013-08-09 19:24:58 +00:00
}
2013-09-04 14:24:49 +00:00
public function testQueryP4PasswordQueriesForPassword ()
{
2013-09-09 19:48:24 +00:00
$expectedQuestion = 'Enter password for Perforce user user: ' ;
2021-12-09 16:09:07 +00:00
$this -> io -> expects ( $this -> once ())
2013-10-11 23:21:34 +00:00
-> method ( 'askAndHideAnswer' )
-> with ( $this -> equalTo ( $expectedQuestion ))
2021-12-09 16:09:07 +00:00
-> willReturn ( 'TEST_QUERY_PASSWORD' );
2013-08-09 19:24:58 +00:00
2014-03-17 21:06:19 +00:00
$password = $this -> perforce -> queryP4Password ();
2013-09-09 19:48:24 +00:00
$this -> assertEquals ( 'TEST_QUERY_PASSWORD' , $password );
2013-08-09 19:24:58 +00:00
}
2013-09-04 14:24:49 +00:00
public function testWriteP4ClientSpecWithoutStream ()
{
2013-09-09 19:48:24 +00:00
$stream = fopen ( 'php://memory' , 'w+' );
2013-08-15 17:16:15 +00:00
$this -> perforce -> writeClientSpecToFile ( $stream );
rewind ( $stream );
2013-09-09 19:48:24 +00:00
2013-09-04 14:24:49 +00:00
$expectedArray = $this -> getExpectedClientSpec ( false );
2013-08-09 19:24:58 +00:00
try {
foreach ( $expectedArray as $expected ) {
2013-08-15 17:16:15 +00:00
$this -> assertStringStartsWith ( $expected , fgets ( $stream ));
2013-08-09 19:24:58 +00:00
}
2013-08-15 17:16:15 +00:00
$this -> assertFalse ( fgets ( $stream ));
2018-01-06 14:05:39 +00:00
} catch ( \Exception $e ) {
2013-08-15 17:16:15 +00:00
fclose ( $stream );
2013-08-09 19:24:58 +00:00
throw $e ;
}
2013-08-15 17:16:15 +00:00
fclose ( $stream );
2013-08-09 19:24:58 +00:00
}
2013-09-04 14:24:49 +00:00
public function testWriteP4ClientSpecWithStream ()
{
2013-08-15 17:16:15 +00:00
$this -> setPerforceToStream ();
2013-09-09 19:48:24 +00:00
$stream = fopen ( 'php://memory' , 'w+' );
2013-08-15 17:16:15 +00:00
$this -> perforce -> writeClientSpecToFile ( $stream );
rewind ( $stream );
2013-09-04 14:24:49 +00:00
$expectedArray = $this -> getExpectedClientSpec ( true );
2013-08-09 19:24:58 +00:00
try {
foreach ( $expectedArray as $expected ) {
2013-08-15 17:16:15 +00:00
$this -> assertStringStartsWith ( $expected , fgets ( $stream ));
2013-08-09 19:24:58 +00:00
}
2013-08-15 17:16:15 +00:00
$this -> assertFalse ( fgets ( $stream ));
2018-01-06 14:05:39 +00:00
} catch ( \Exception $e ) {
2013-08-15 17:16:15 +00:00
fclose ( $stream );
2013-08-09 19:24:58 +00:00
throw $e ;
}
2013-08-15 17:16:15 +00:00
fclose ( $stream );
2013-08-09 19:24:58 +00:00
}
2013-09-04 14:24:49 +00:00
public function testIsLoggedIn ()
{
2013-09-09 19:48:24 +00:00
$expectedCommand = 'p4 -u user -p port login -s' ;
2021-12-09 16:09:07 +00:00
$this -> processExecutor -> expects ( $this -> once ())
2013-10-11 23:21:34 +00:00
-> method ( 'execute' )
-> with ( $this -> equalTo ( $expectedCommand ), $this -> equalTo ( null ))
2021-12-09 16:09:07 +00:00
-> willReturn ( 0 );
2013-08-09 19:24:58 +00:00
2013-08-15 17:16:15 +00:00
$this -> perforce -> isLoggedIn ();
2013-08-09 19:24:58 +00:00
}
2013-09-04 14:24:49 +00:00
public function testConnectClient ()
{
2013-09-09 19:48:24 +00:00
$expectedCommand = 'p4 -u user -c composer_perforce_TEST_depot -p port client -i < path/composer_perforce_TEST_depot.p4.spec' ;
2021-12-09 16:09:07 +00:00
$this -> processExecutor -> expects ( $this -> once ())
2013-10-11 23:21:34 +00:00
-> method ( 'execute' )
-> with ( $this -> equalTo ( $expectedCommand ), $this -> equalTo ( null ))
2021-12-09 16:09:07 +00:00
-> willReturn ( 0 );
2013-08-09 19:24:58 +00:00
$this -> perforce -> connectClient ();
}
2013-09-04 14:24:49 +00:00
public function testGetBranchesWithStream ()
{
2013-08-15 17:16:15 +00:00
$this -> setPerforceToStream ();
2021-12-09 16:09:07 +00:00
$expectations = [
[ 'p4 -u user -c composer_perforce_TEST_depot_branch -p port streams ' . ProcessExecutor :: escape ( '//depot/...' ), 'Stream //depot/branch mainline none \'branch\'' . PHP_EOL ],
[ 'p4 -u user -p port changes ' . ProcessExecutor :: escape ( '//depot/branch/...' ), 'Change 1234 on 2014/03/19 by Clark.Stuth@Clark.Stuth_test_client \'test changelist\'' ],
];
$count = 0 ;
$this -> processExecutor -> expects ( $this -> exactly ( 2 ))
2013-10-11 23:21:34 +00:00
-> method ( 'execute' )
-> will (
$this -> returnCallback (
2021-12-09 16:09:07 +00:00
function ( $command , & $output ) use ( $expectations , & $count ) {
$index = $count ++ ;
if ( $command !== $expectations [ $index ][ 0 ]) {
throw new \InvalidArgumentException ( 'Expected ' . $expectations [ $index ][ 0 ] . ' and got ' . $command );
}
$output = $expectations [ $index ][ 1 ];
return 0 ;
2013-10-11 23:21:34 +00:00
}
)
);
2013-08-09 19:24:58 +00:00
$branches = $this -> perforce -> getBranches ();
2014-03-21 18:42:00 +00:00
$this -> assertEquals ( '//depot/branch@1234' , $branches [ 'master' ]);
2013-08-09 19:24:58 +00:00
}
2013-09-04 14:24:49 +00:00
public function testGetBranchesWithoutStream ()
{
2018-08-25 15:45:08 +00:00
$expectedCommand = 'p4 -u user -p port changes ' . ProcessExecutor :: escape ( '//depot/...' );
2014-06-10 14:02:44 +00:00
$expectedCallback = function ( $command , & $output ) {
2017-03-08 14:07:29 +00:00
$output = 'Change 5678 on 2014/03/19 by Clark.Stuth@Clark.Stuth_test_client \'test changelist\'' ;
2014-06-10 14:02:44 +00:00
2017-03-08 14:07:29 +00:00
return true ;
};
2014-03-21 18:42:00 +00:00
$this -> processExecutor -> expects ( $this -> once ())
-> method ( 'execute' )
-> with ( $this -> equalTo ( $expectedCommand ))
2021-12-09 16:09:07 +00:00
-> willReturnCallback ( $expectedCallback );
2013-08-09 19:24:58 +00:00
$branches = $this -> perforce -> getBranches ();
2014-03-21 18:42:00 +00:00
$this -> assertEquals ( '//depot@5678' , $branches [ 'master' ]);
2013-08-09 19:24:58 +00:00
}
2013-09-04 14:24:49 +00:00
public function testGetTagsWithoutStream ()
{
2013-09-09 19:48:24 +00:00
$expectedCommand = 'p4 -u user -c composer_perforce_TEST_depot -p port labels' ;
2021-12-09 16:09:07 +00:00
$this -> processExecutor -> expects ( $this -> once ())
2013-10-11 23:21:34 +00:00
-> method ( 'execute' )
-> with ( $this -> equalTo ( $expectedCommand ))
-> will (
$this -> returnCallback (
function ( $command , & $output ) {
$output = 'Label 0.0.1 2013/07/31 \'First Label!\'' . PHP_EOL . 'Label 0.0.2 2013/08/01 \'Second Label!\'' . PHP_EOL ;
return true ;
}
)
);
2013-08-09 19:24:58 +00:00
$tags = $this -> perforce -> getTags ();
2013-09-09 19:48:24 +00:00
$this -> assertEquals ( '//depot@0.0.1' , $tags [ '0.0.1' ]);
$this -> assertEquals ( '//depot@0.0.2' , $tags [ '0.0.2' ]);
2013-08-09 19:24:58 +00:00
}
2013-09-04 14:24:49 +00:00
public function testGetTagsWithStream ()
{
2013-08-15 17:16:15 +00:00
$this -> setPerforceToStream ();
2013-09-09 19:48:24 +00:00
$expectedCommand = 'p4 -u user -c composer_perforce_TEST_depot_branch -p port labels' ;
2021-12-09 16:09:07 +00:00
$this -> processExecutor -> expects ( $this -> once ())
2013-10-11 23:21:34 +00:00
-> method ( 'execute' )
-> with ( $this -> equalTo ( $expectedCommand ))
-> will (
$this -> returnCallback (
function ( $command , & $output ) {
$output = 'Label 0.0.1 2013/07/31 \'First Label!\'' . PHP_EOL . 'Label 0.0.2 2013/08/01 \'Second Label!\'' . PHP_EOL ;
return true ;
}
)
);
2013-08-09 19:24:58 +00:00
$tags = $this -> perforce -> getTags ();
2013-09-09 19:48:24 +00:00
$this -> assertEquals ( '//depot/branch@0.0.1' , $tags [ '0.0.1' ]);
$this -> assertEquals ( '//depot/branch@0.0.2' , $tags [ '0.0.2' ]);
2013-08-09 19:24:58 +00:00
}
2013-09-04 14:24:49 +00:00
public function testCheckStreamWithoutStream ()
{
2021-10-27 14:18:46 +00:00
$result = $this -> perforce -> checkStream ();
2013-08-09 19:24:58 +00:00
$this -> assertFalse ( $result );
2013-08-15 17:16:15 +00:00
$this -> assertFalse ( $this -> perforce -> isStream ());
2013-08-09 19:24:58 +00:00
}
2013-09-04 14:24:49 +00:00
public function testCheckStreamWithStream ()
{
2013-08-15 17:16:15 +00:00
$this -> processExecutor -> expects ( $this -> any ()) -> method ( 'execute' )
2013-10-11 23:21:34 +00:00
-> will (
$this -> returnCallback (
function ( $command , & $output ) {
$output = 'Depot depot 2013/06/25 stream /p4/1/depots/depot/... \'Created by Me\'' ;
return true ;
}
)
);
2021-10-27 14:18:46 +00:00
$result = $this -> perforce -> checkStream ();
2013-08-15 17:16:15 +00:00
$this -> assertTrue ( $result );
$this -> assertTrue ( $this -> perforce -> isStream ());
2013-08-09 19:24:58 +00:00
}
2013-09-04 14:24:49 +00:00
public function testGetComposerInformationWithoutLabelWithoutStream ()
{
2018-08-25 15:45:08 +00:00
$expectedCommand = 'p4 -u user -c composer_perforce_TEST_depot -p port print ' . ProcessExecutor :: escape ( '//depot/composer.json' );
2021-12-09 16:09:07 +00:00
$this -> processExecutor -> expects ( $this -> once ())
2013-10-11 23:21:34 +00:00
-> method ( 'execute' )
-> with ( $this -> equalTo ( $expectedCommand ))
-> will (
$this -> returnCallback (
function ( $command , & $output ) {
$output = PerforceTest :: getComposerJson ();
return true ;
}
)
);
2013-08-09 19:24:58 +00:00
2013-09-09 19:48:24 +00:00
$result = $this -> perforce -> getComposerInformation ( '//depot' );
2013-08-09 19:24:58 +00:00
$expected = array (
2017-03-08 14:07:29 +00:00
'name' => 'test/perforce' ,
'description' => 'Basic project for testing' ,
2013-09-09 19:48:24 +00:00
'minimum-stability' => 'dev' ,
2017-03-08 14:07:29 +00:00
'autoload' => array ( 'psr-0' => array ()),
2013-08-09 19:24:58 +00:00
);
$this -> assertEquals ( $expected , $result );
}
2013-09-04 14:24:49 +00:00
public function testGetComposerInformationWithLabelWithoutStream ()
{
2021-12-09 16:09:07 +00:00
$expectations = [
[ 'p4 -u user -p port files ' . ProcessExecutor :: escape ( '//depot/composer.json@0.0.1' ), '//depot/composer.json#1 - branch change 10001 (text)' ],
[ 'p4 -u user -c composer_perforce_TEST_depot -p port print ' . ProcessExecutor :: escape ( '//depot/composer.json@10001' ), PerforceTest :: getComposerJson ()],
];
$count = 0 ;
$this -> processExecutor -> expects ( $this -> exactly ( 2 ))
2013-10-11 23:21:34 +00:00
-> method ( 'execute' )
-> will (
$this -> returnCallback (
2021-12-09 16:09:07 +00:00
function ( $command , & $output ) use ( $expectations , & $count ) {
$index = $count ++ ;
if ( $command !== $expectations [ $index ][ 0 ]) {
throw new \InvalidArgumentException ( 'Expected ' . $expectations [ $index ][ 0 ] . ' and got ' . $command );
}
$output = $expectations [ $index ][ 1 ];
return 0 ;
2013-10-11 23:21:34 +00:00
}
)
);
2013-08-09 19:24:58 +00:00
2013-09-09 19:48:24 +00:00
$result = $this -> perforce -> getComposerInformation ( '//depot@0.0.1' );
2013-08-09 19:24:58 +00:00
$expected = array (
2017-03-08 14:07:29 +00:00
'name' => 'test/perforce' ,
'description' => 'Basic project for testing' ,
2013-09-09 19:48:24 +00:00
'minimum-stability' => 'dev' ,
2017-03-08 14:07:29 +00:00
'autoload' => array ( 'psr-0' => array ()),
2013-08-09 19:24:58 +00:00
);
$this -> assertEquals ( $expected , $result );
}
2013-09-04 14:24:49 +00:00
public function testGetComposerInformationWithoutLabelWithStream ()
{
2013-08-15 17:16:15 +00:00
$this -> setPerforceToStream ();
2018-08-25 15:45:08 +00:00
$expectedCommand = 'p4 -u user -c composer_perforce_TEST_depot_branch -p port print ' . ProcessExecutor :: escape ( '//depot/branch/composer.json' );
2021-12-09 16:09:07 +00:00
$this -> processExecutor -> expects ( $this -> once ())
2013-10-11 23:21:34 +00:00
-> method ( 'execute' )
-> with ( $this -> equalTo ( $expectedCommand ))
-> will (
$this -> returnCallback (
function ( $command , & $output ) {
$output = PerforceTest :: getComposerJson ();
return true ;
}
)
);
2013-08-09 19:24:58 +00:00
2013-09-09 19:48:24 +00:00
$result = $this -> perforce -> getComposerInformation ( '//depot/branch' );
2013-08-09 19:24:58 +00:00
$expected = array (
2017-03-08 14:07:29 +00:00
'name' => 'test/perforce' ,
'description' => 'Basic project for testing' ,
2013-09-09 19:48:24 +00:00
'minimum-stability' => 'dev' ,
2017-03-08 14:07:29 +00:00
'autoload' => array ( 'psr-0' => array ()),
2013-08-09 19:24:58 +00:00
);
$this -> assertEquals ( $expected , $result );
}
2013-09-04 14:24:49 +00:00
public function testGetComposerInformationWithLabelWithStream ()
{
2021-12-09 16:09:07 +00:00
$expectations = [
[ 'p4 -u user -p port files ' . ProcessExecutor :: escape ( '//depot/branch/composer.json@0.0.1' ), '//depot/composer.json#1 - branch change 10001 (text)' ],
[ 'p4 -u user -c composer_perforce_TEST_depot_branch -p port print ' . ProcessExecutor :: escape ( '//depot/branch/composer.json@10001' ), PerforceTest :: getComposerJson ()],
];
$count = 0 ;
$this -> processExecutor -> expects ( $this -> exactly ( 2 ))
2013-10-11 23:21:34 +00:00
-> method ( 'execute' )
-> will (
$this -> returnCallback (
2021-12-09 16:09:07 +00:00
function ( $command , & $output ) use ( $expectations , & $count ) {
$index = $count ++ ;
if ( $command !== $expectations [ $index ][ 0 ]) {
throw new \InvalidArgumentException ( 'Expected ' . $expectations [ $index ][ 0 ] . ' and got ' . $command );
}
$output = $expectations [ $index ][ 1 ];
return 0 ;
2013-10-11 23:21:34 +00:00
}
)
);
2013-08-09 19:24:58 +00:00
2021-12-09 16:09:07 +00:00
$this -> setPerforceToStream ();
2013-08-09 19:24:58 +00:00
2013-09-09 19:48:24 +00:00
$result = $this -> perforce -> getComposerInformation ( '//depot/branch@0.0.1' );
2013-08-09 19:24:58 +00:00
$expected = array (
2017-03-08 14:07:29 +00:00
'name' => 'test/perforce' ,
'description' => 'Basic project for testing' ,
2013-09-09 19:48:24 +00:00
'minimum-stability' => 'dev' ,
2017-03-08 14:07:29 +00:00
'autoload' => array ( 'psr-0' => array ()),
2013-08-09 19:24:58 +00:00
);
$this -> assertEquals ( $expected , $result );
}
2013-09-04 14:24:49 +00:00
public function testSyncCodeBaseWithoutStream ()
{
2013-09-09 19:48:24 +00:00
$expectedCommand = 'p4 -u user -c composer_perforce_TEST_depot -p port sync -f @label' ;
2021-12-09 16:09:07 +00:00
$this -> processExecutor -> expects ( $this -> once ())
2013-10-11 23:21:34 +00:00
-> method ( 'execute' )
-> with ( $this -> equalTo ( $expectedCommand ), $this -> equalTo ( null ))
2021-12-09 16:09:07 +00:00
-> willReturn ( 0 );
2013-08-09 19:24:58 +00:00
2013-09-09 19:48:24 +00:00
$this -> perforce -> syncCodeBase ( 'label' );
2013-08-09 19:24:58 +00:00
}
2013-09-04 14:24:49 +00:00
public function testSyncCodeBaseWithStream ()
{
2013-08-15 17:16:15 +00:00
$this -> setPerforceToStream ();
2013-09-09 19:48:24 +00:00
$expectedCommand = 'p4 -u user -c composer_perforce_TEST_depot_branch -p port sync -f @label' ;
2021-12-09 16:09:07 +00:00
$this -> processExecutor -> expects ( $this -> once ())
2013-10-11 23:21:34 +00:00
-> method ( 'execute' )
-> with ( $this -> equalTo ( $expectedCommand ))
2021-12-09 16:09:07 +00:00
-> willReturn ( 0 );
2013-08-09 19:24:58 +00:00
2013-09-09 19:48:24 +00:00
$this -> perforce -> syncCodeBase ( 'label' );
2013-08-09 19:24:58 +00:00
}
2013-09-04 14:24:49 +00:00
public function testCheckServerExists ()
{
2018-04-12 08:24:56 +00:00
$processExecutor = $this -> getMockBuilder ( 'Composer\Util\ProcessExecutor' ) -> getMock ();
2013-08-09 19:24:58 +00:00
2018-08-25 15:45:08 +00:00
$expectedCommand = 'p4 -p ' . ProcessExecutor :: escape ( 'perforce.does.exist:port' ) . ' info -s' ;
2021-12-09 16:09:07 +00:00
$processExecutor -> expects ( $this -> once ())
2013-10-11 23:21:34 +00:00
-> method ( 'execute' )
-> with ( $this -> equalTo ( $expectedCommand ), $this -> equalTo ( null ))
2021-12-09 16:09:07 +00:00
-> willReturn ( 0 );
2013-08-09 19:24:58 +00:00
2013-09-09 19:48:24 +00:00
$result = $this -> perforce -> checkServerExists ( 'perforce.does.exist:port' , $processExecutor );
2013-08-09 19:24:58 +00:00
$this -> assertTrue ( $result );
}
2014-06-10 14:02:44 +00:00
2013-10-14 12:53:57 +00:00
/**
* Test if " p4 " command is missing .
2014-06-10 14:02:44 +00:00
*
2013-10-14 12:53:57 +00:00
* @ covers \Composer\Util\Perforce :: checkServerExists
2014-06-10 14:02:44 +00:00
*
2013-10-14 12:53:57 +00:00
* @ return void
*/
2013-10-14 16:04:09 +00:00
public function testCheckServerClientError ()
2013-10-14 12:53:57 +00:00
{
2018-04-12 08:24:56 +00:00
$processExecutor = $this -> getMockBuilder ( 'Composer\Util\ProcessExecutor' ) -> getMock ();
2013-10-14 12:53:57 +00:00
2018-08-25 15:45:08 +00:00
$expectedCommand = 'p4 -p ' . ProcessExecutor :: escape ( 'perforce.does.exist:port' ) . ' info -s' ;
2021-12-09 16:09:07 +00:00
$processExecutor -> expects ( $this -> once ())
2013-10-14 12:53:57 +00:00
-> method ( 'execute' )
2013-10-14 16:04:09 +00:00
-> with ( $this -> equalTo ( $expectedCommand ), $this -> equalTo ( null ))
2021-12-09 16:09:07 +00:00
-> willReturn ( 127 );
2014-06-10 14:02:44 +00:00
2013-10-14 12:53:57 +00:00
$result = $this -> perforce -> checkServerExists ( 'perforce.does.exist:port' , $processExecutor );
$this -> assertFalse ( $result );
}
2013-08-09 19:24:58 +00:00
2021-10-27 14:18:46 +00:00
/**
* @ return string
*/
2013-09-04 14:24:49 +00:00
public static function getComposerJson ()
{
2021-12-09 16:09:07 +00:00
return JsonFile :: encode ([
'name' => 'test/perforce' ,
'description' => 'Basic project for testing' ,
'minimum-stability' => 'dev' ,
'autoload' => [
'psr-0' => []
]
], JSON_FORCE_OBJECT );
2013-08-09 19:24:58 +00:00
}
2021-10-27 14:18:46 +00:00
/**
* @ param bool $withStream
*
* @ return string []
*/
2013-09-04 14:24:49 +00:00
private function getExpectedClientSpec ( $withStream )
{
2013-08-09 19:24:58 +00:00
$expectedArray = array (
2013-09-09 19:48:24 +00:00
'Client: composer_perforce_TEST_depot' ,
PHP_EOL ,
'Update:' ,
PHP_EOL ,
'Access:' ,
'Owner: user' ,
PHP_EOL ,
'Description:' ,
' Created by user from composer.' ,
PHP_EOL ,
'Root: path' ,
PHP_EOL ,
'Options: noallwrite noclobber nocompress unlocked modtime rmdir' ,
PHP_EOL ,
'SubmitOptions: revertunchanged' ,
PHP_EOL ,
'LineEnd: local' ,
2015-09-28 09:51:14 +00:00
PHP_EOL ,
2013-08-09 19:24:58 +00:00
);
if ( $withStream ) {
2013-09-09 19:48:24 +00:00
$expectedArray [] = 'Stream:' ;
$expectedArray [] = ' //depot/branch' ;
2013-09-04 14:24:49 +00:00
} else {
2013-09-13 20:01:00 +00:00
$expectedArray [] = 'View: //depot/... //composer_perforce_TEST_depot/...' ;
2013-08-09 19:24:58 +00:00
}
return $expectedArray ;
}
2021-10-27 14:18:46 +00:00
/**
* @ return void
*/
2013-09-04 14:24:49 +00:00
private function setPerforceToStream ()
{
2013-09-09 19:48:24 +00:00
$this -> perforce -> setStream ( '//depot/branch' );
2013-08-09 19:24:58 +00:00
}
2014-03-18 19:39:47 +00:00
public function testCleanupClientSpecShouldDeleteClient ()
{
2018-04-12 08:24:56 +00:00
$fs = $this -> getMockBuilder ( 'Composer\Util\Filesystem' ) -> getMock ();
2014-03-18 19:39:47 +00:00
$this -> perforce -> setFilesystem ( $fs );
$testClient = $this -> perforce -> getClient ();
2018-08-25 15:45:08 +00:00
$expectedCommand = 'p4 -u ' . self :: TEST_P4USER . ' -p ' . self :: TEST_PORT . ' client -d ' . ProcessExecutor :: escape ( $testClient );
2014-03-18 19:39:47 +00:00
$this -> processExecutor -> expects ( $this -> once ()) -> method ( 'execute' ) -> with ( $this -> equalTo ( $expectedCommand ));
$fs -> expects ( $this -> once ()) -> method ( 'remove' ) -> with ( $this -> perforce -> getP4ClientSpec ());
$this -> perforce -> cleanupClientSpec ();
}
2013-08-09 19:24:58 +00:00
}