From 10159576591ddada028915bd8ad17142137f6483 Mon Sep 17 00:00:00 2001 From: matt-whittom Date: Fri, 9 Aug 2013 14:24:58 -0500 Subject: [PATCH] Added tests and code for tests --- .../Downloader/PerforceDownloaderTest.php | 91 +++ .../Repository/Vcs/TestingPerforceDriver.php | 26 + tests/Composer/Test/Util/PerforceTest.php | 537 ++++++++++++++++++ tests/Composer/Test/Util/TestingPerforce.php | 106 ++++ 4 files changed, 760 insertions(+) create mode 100644 tests/Composer/Test/Downloader/PerforceDownloaderTest.php create mode 100644 tests/Composer/Test/Repository/Vcs/TestingPerforceDriver.php create mode 100644 tests/Composer/Test/Util/PerforceTest.php create mode 100644 tests/Composer/Test/Util/TestingPerforce.php diff --git a/tests/Composer/Test/Downloader/PerforceDownloaderTest.php b/tests/Composer/Test/Downloader/PerforceDownloaderTest.php new file mode 100644 index 000000000..66ed81776 --- /dev/null +++ b/tests/Composer/Test/Downloader/PerforceDownloaderTest.php @@ -0,0 +1,91 @@ +testPath = sys_get_temp_dir() . '/composer-test'; + $this->config = new Config(); + $this->config->merge( + array( + 'config' => array( + 'home' => $this->testPath, + ), + ) + ); + $this->io = $this->getMock('Composer\IO\IOInterface'); + } + + + public function testDoDownloadGetRepoConfig() { + $downloader = new PerforceDownloader($this->io, $this->config); + $package = $this->getMock('Composer\Package\PackageInterface' ); + $repoConfig = array('url'=>'TEST_URL','p4user'=>'TEST_USER'); + $repository = $this->getMock('Composer\Repository\VcsRepository', array('getRepoConfig'), array($repoConfig, $this->io, $this->config)); + $package->expects($this->at(0)) + ->method('getSourceReference') + ->will($this->returnValue("SOURCE_REF")); + $package->expects($this->at(1)) + ->method('getPrettyVersion') + ->will($this->returnValue("100")); + $package->expects($this->at(2)) + ->method('getRepository') + ->will($this->returnValue($repository)); + $repository->expects($this->at(0)) + ->method('getRepoConfig'); + $path = $this->testPath; + $downloader->doDownload($package, $path); + } + + public function testDoDownload() { + $downloader = new PerforceDownloader($this->io, $this->config); + $repoConfig = array("depot"=>"TEST_DEPOT", "branch"=>"TEST_BRANCH", "p4user"=>"TEST_USER"); + $port = "TEST_PORT"; + $path = "TEST_PATH"; + $perforce = $this->getMock('Composer\Util\Perforce', array('setStream', 'queryP4User', 'writeP4ClientSpec', 'connectClient', 'syncCodeBase'), array($repoConfig, $port, $path)); + $ref = "SOURCE_REF"; + $label = "LABEL"; + $perforce->expects($this->at(0)) + ->method('setStream') + ->with($this->equalTo($ref)); + $perforce->expects($this->at(1)) + ->method('queryP4User') + ->with($this->io); + $perforce->expects($this->at(2)) + ->method('writeP4ClientSpec'); + $perforce->expects($this->at(3)) + ->method('connectClient'); + $perforce->expects($this->at(4)) + ->method('syncCodeBase') + ->with($this->equalTo($label)); + $downloader->injectPerforce($perforce); + $package = $this->getMock('Composer\Package\PackageInterface' ); + $package->expects($this->at(0)) + ->method('getSourceReference') + ->will($this->returnValue($ref)); + $package->expects($this->at(1)) + ->method('getPrettyVersion') + ->will($this->returnValue($label)); + $path = $this->testPath; + $downloader->doDownload($package, $path); + + } +} diff --git a/tests/Composer/Test/Repository/Vcs/TestingPerforceDriver.php b/tests/Composer/Test/Repository/Vcs/TestingPerforceDriver.php new file mode 100644 index 000000000..574c69377 --- /dev/null +++ b/tests/Composer/Test/Repository/Vcs/TestingPerforceDriver.php @@ -0,0 +1,26 @@ +depot; + } + public function getBranch(){ + return $this->branch; + } + +} \ No newline at end of file diff --git a/tests/Composer/Test/Util/PerforceTest.php b/tests/Composer/Test/Util/PerforceTest.php new file mode 100644 index 000000000..8a653394f --- /dev/null +++ b/tests/Composer/Test/Util/PerforceTest.php @@ -0,0 +1,537 @@ +processExecutor = $this->getMock('Composer\Util\ProcessExecutor'); + $repoConfig = array("depot"=>"depot", "branch"=>"branch", "p4user"=>"user"); + $this->perforce = new TestingPerforce($repoConfig, "port", "path", $this->processExecutor); + } + + public function testGetClientWithoutStream() { + $client = $this->perforce->testGetClient(); + $expected = "composer_perforce_TEST_depot"; + $this->assertEquals($expected, $client); + } + + public function testGetClientFromStream() { + $this->perforce->setDepotType("stream"); + $client = $this->perforce->testGetClient(); + + $expected = "composer_perforce_TEST_depot_branch"; + $this->assertEquals($expected, $client); + } + + public function testGetStreamWithoutStream() { + $stream = $this->perforce->testGetStream(); + $this->assertEquals("//depot", $stream); + } + + public function testGetStreamWithStream() { + $this->perforce->setDepotType("stream"); + $stream = $this->perforce->testGetStream(); + $this->assertEquals("//depot/branch", $stream); + } + + public function testGetStreamWithoutLabel() { + $stream = $this->perforce->testGetStreamWithoutLabel(); + $this->assertEquals("//depot", $stream); + $this->perforce->setDepotType("stream"); + $stream = $this->perforce->testGetStreamWithoutLabel(); + $this->assertEquals("//depot/branch", $stream); + $this->perforce->setStream("//depot/branching@label"); + $stream = $this->perforce->testGetStreamWithoutLabel(); + $this->assertEquals("//depot/branching", $stream); + } + + public function testGetClientSpec() { + $clientSpec = $this->perforce->testGetClientSpec(); + $expected = "path/composer_perforce_TEST_depot.p4.spec"; + $this->assertEquals($expected, $clientSpec); + } + + public function testGenerateP4Command() { + $command = "do something"; + $p4Command = $this->perforce->testGenerateP4Command($command); + $expected = "p4 -u user -c composer_perforce_TEST_depot -p port do something"; + $this->assertEquals($expected, $p4Command); + } + + public function testQueryP4UserWithUserAlreadySet(){ + $io = $this->getMock('Composer\IO\IOInterface'); + + $this->perforce->setP4User("TEST_USER"); + $this->perforce->queryP4user($io); + $this->assertEquals("TEST_USER", $this->perforce->getUser()); + } + + public function testQueryP4UserWithUserSetInP4VariablesWithWindowsOS(){ + $this->perforce->windows_flag = true; + + $io = $this->getMock('Composer\IO\IOInterface'); + $expectedCommand = "p4 set"; + $this->processExecutor->expects($this->at(0)) + ->method('execute') + ->with($this->equalTo($expectedCommand)) + ->will($this->returnCallback(function($command, &$output) {$output = "P4USER=TEST_P4VARIABLE_USER\n"; return true;})); + + $this->perforce->setP4User(null); + $this->perforce->queryP4user($io); + $this->assertEquals("TEST_P4VARIABLE_USER", $this->perforce->getUser()); + } + + public function testQueryP4UserWithUserSetInP4VariablesNotWindowsOS(){ + $this->perforce->windows_flag = false; + + $io = $this->getMock('Composer\IO\IOInterface'); + $expectedCommand = 'echo $P4USER'; + $this->processExecutor->expects($this->at(0)) + ->method('execute') + ->with($this->equalTo($expectedCommand)) + ->will($this->returnCallback(function($command, &$output) {$output = "TEST_P4VARIABLE_USER\n"; return true;})); + + $this->perforce->setP4User(null); + $this->perforce->queryP4user($io); + $this->assertEquals("TEST_P4VARIABLE_USER", $this->perforce->getUser()); + } + + public function testQueryP4UserQueriesForUser(){ + $io = $this->getMock('Composer\IO\IOInterface'); + $expectedQuestion = "Enter P4 User:"; + $io->expects($this->at(0)) + ->method('ask') + ->with($this->equalTo($expectedQuestion)) + ->will($this->returnValue("TEST_QUERY_USER")); + + $this->perforce->setP4User(null); + $this->perforce->queryP4user($io); + $this->assertEquals("TEST_QUERY_USER", $this->perforce->getUser()); + } + + public function testQueryP4UserStoresResponseToQueryForUserWithWindows(){ + $this->perforce->windows_flag = true; + + $io = $this->getMock('Composer\IO\IOInterface'); + $expectedQuestion = "Enter P4 User:"; + $io->expects($this->at(0)) + ->method('ask') + ->with($this->equalTo($expectedQuestion)) + ->will($this->returnValue("TEST_QUERY_USER")); + $expectedCommand = "p4 set P4USER=TEST_QUERY_USER"; + $this->processExecutor->expects($this->at(1)) + ->method('execute') + ->with($this->equalTo($expectedCommand)) + ->will($this->returnValue(0)); + + $this->perforce->setP4User(null); + $this->perforce->queryP4user($io); + } + + public function testQueryP4UserStoresResponseToQueryForUserWithoutWindows(){ + $this->perforce->windows_flag = false; + + $io = $this->getMock('Composer\IO\IOInterface'); + $expectedQuestion = "Enter P4 User:"; + $io->expects($this->at(0)) + ->method('ask') + ->with($this->equalTo($expectedQuestion)) + ->will($this->returnValue("TEST_QUERY_USER")); + $expectedCommand = "export P4USER=TEST_QUERY_USER"; + $this->processExecutor->expects($this->at(1)) + ->method('execute') + ->with($this->equalTo($expectedCommand)) + ->will($this->returnValue(0)); + + $this->perforce->setP4User(null); + $this->perforce->queryP4user($io); + } + + public function testQueryP4PasswordWithPasswordAlreadySet(){ + $io = $this->getMock('Composer\IO\IOInterface'); + + $this->perforce->setP4Password("TEST_PASSWORD"); + $password = $this->perforce->testQueryP4Password($io); + $this->assertEquals("TEST_PASSWORD", $password); + } + + public function testQueryP4PasswordWithPasswordSetInP4VariablesWithWindowsOS(){ + $this->perforce->windows_flag = true; + + $io = $this->getMock('Composer\IO\IOInterface'); + $expectedCommand = "p4 set"; + $this->processExecutor->expects($this->at(0)) + ->method('execute') + ->with($this->equalTo($expectedCommand)) + ->will($this->returnCallback(function($command, &$output) {$output = "P4PASSWD=TEST_P4VARIABLE_PASSWORD\n"; return true;})); + + $this->perforce->setP4Password(null); + $password = $this->perforce->testQueryP4Password($io); + $this->assertEquals("TEST_P4VARIABLE_PASSWORD", $password); + } + + public function testQueryP4PasswordWithPasswordSetInP4VariablesNotWindowsOS(){ + $this->perforce->windows_flag = false; + + $io = $this->getMock('Composer\IO\IOInterface'); + $expectedCommand = 'echo $P4PASSWD'; + $this->processExecutor->expects($this->at(0)) + ->method('execute') + ->with($this->equalTo($expectedCommand)) + ->will($this->returnCallback(function($command, &$output) {$output = "TEST_P4VARIABLE_PASSWORD\n"; return true;})); + + $this->perforce->setP4Password(null); + $password = $this->perforce->testQueryP4Password($io); + $this->assertEquals("TEST_P4VARIABLE_PASSWORD", $password); + } + + public function testQueryP4PasswordQueriesForPassword(){ + $io = $this->getMock('Composer\IO\IOInterface'); + $expectedQuestion = "Enter password for Perforce user user: "; + $io->expects($this->at(0)) + ->method('askAndHideAnswer') + ->with($this->equalTo($expectedQuestion)) + ->will($this->returnValue("TEST_QUERY_PASSWORD")); + + $this->perforce->setP4Password(null); + $password = $this->perforce->testQueryP4Password($io); + $this->assertEquals("TEST_QUERY_PASSWORD", $password); + } + + public function testWriteP4ClientSpecWithoutStream() { + vfsStreamWrapper::register(); + VfsStreamWrapper::setRoot(new vfsStreamDirectory("path")); + $clientSpec = $this->perforce->testGetClientSpec(); + $this->perforce->writeP4ClientSpec(); + $spec = fopen(vfsStream::url($clientSpec), 'r'); + $expectedArray = $this->getExpectedClientSpec(FALSE); + try { + foreach ($expectedArray as $expected) { + $this->assertStringStartsWith($expected, fgets($spec)); + } + $this->assertFalse(fgets($spec)); + } catch (Exception $e) { + fclose($spec); + throw $e; + } + fclose($spec); + } + + public function testWriteP4ClientSpecWithStream() { + vfsStreamWrapper::register(); + VfsStreamWrapper::setRoot(new vfsStreamDirectory("path")); + $this->perforce->setStream("//depot/branching@label"); + $clientSpec = $this->perforce->testGetClientSpec(); + $this->perforce->writeP4ClientSpec(); + $spec = fopen(vfsStream::url($clientSpec), 'r'); + $expectedArray = $this->getExpectedClientSpec(TRUE); + try { + foreach ($expectedArray as $expected) { + $this->assertStringStartsWith($expected, fgets($spec)); + } + $this->assertFalse(fgets($spec)); + } catch (Exception $e) { + fclose($spec); + throw $e; + } + fclose($spec); + } + + public function testIsLoggedIn() { + $expectedCommand = $this->winCompat("p4 -u user -p port login -s"); + $this->processExecutor->expects($this->at(0)) + ->method('execute') + ->with($this->equalTo($expectedCommand), $this->equalTo(null)) + ->will($this->returnValue(0)); + + $this->perforce->testIsLoggedIn(); + } + + public function testConnectClient() { + $expectedCommand = $this->winCompat("p4 -u user -c composer_perforce_TEST_depot -p port client -i < path/composer_perforce_TEST_depot.p4.spec"); + $this->processExecutor->expects($this->at(0)) + ->method('execute') + ->with($this->equalTo($expectedCommand), $this->equalTo(null)) + ->will($this->returnValue(0)); + + $this->perforce->connectClient(); + } + + public function testGetBranchesWithStream() { + $expectedCommand = $this->winCompat("p4 -u user -c composer_perforce_TEST_depot_branchlabel -p port streams //depot/..."); + $this->processExecutor->expects($this->at(0)) + ->method('execute') + ->with($this->equalTo($expectedCommand)) + ->will($this->returnCallback(function($command, &$output) {$output = "Stream //depot/branch mainline none 'branch'\n"; return true;})); + + $this->perforce->setStream("//depot/branch@label"); + $branches = $this->perforce->getBranches(); + $this->assertEquals("//depot/branch", $branches['master']); + } + + public function testGetBranchesWithoutStream() { + $expectedCommand = $this->winCompat("p4 -u user -p port depots"); + $this->processExecutor->expects($this->at(0)) + ->method('execute') + ->with($this->equalTo($expectedCommand)) + ->will($this->returnCallback(function($command, &$output) {$output = "Depot depot 2013/01/28 local /path/to/depots/depot/... 'depot project'\n"; return true;})); + + $result = $this->perforce->checkStream("depot"); + $this->assertFalse($result); + + $branches = $this->perforce->getBranches(); + $this->assertEquals("//depot", $branches['master']); + } + + public function testGetTagsWithoutStream() { + $expectedCommand = $this->winCompat("p4 -u user -c composer_perforce_TEST_depot -p port labels"); + $this->processExecutor->expects($this->at(0)) + ->method('execute') + ->with($this->equalTo($expectedCommand)) + ->will($this->returnCallback(function($command, &$output) {$output = "Label 0.0.1 2013/07/31 'First Label!'\nLabel 0.0.2 2013/08/01 'Second Label!'\n"; return true;})); + + $tags = $this->perforce->getTags(); + $this->assertEquals("//depot@0.0.1", $tags['0.0.1']); + $this->assertEquals("//depot@0.0.2", $tags['0.0.2']); + } + + public function testGetTagsWithStream() { + $expectedCommand = $this->winCompat("p4 -u user -c composer_perforce_TEST_depot_branch -p port labels"); + $this->processExecutor->expects($this->at(0)) + ->method('execute') + ->with($this->equalTo($expectedCommand)) + ->will($this->returnCallback(function($command, &$output) {$output = "Label 0.0.1 2013/07/31 'First Label!'\nLabel 0.0.2 2013/08/01 'Second Label!'\n"; return true;})); + + $this->perforce->setStream("//depot/branch"); + $tags = $this->perforce->getTags(); + $this->assertEquals("//depot/branch@0.0.1", $tags['0.0.1']); + $this->assertEquals("//depot/branch@0.0.2", $tags['0.0.2']); + } + + public function testCheckStreamWithoutStream() { + $this->perforce->commandReturnValue = "Depot depot 2013/01/28 local /path/to/depots/depot/... 'depot project'"; + $result = $this->perforce->checkStream("depot"); + $this->assertFalse($result); + $this->assertFalse($this->perforce->testIsStream()); + } + + public function testCheckStreamWithStream() { + $line1 = "Depot depot 2013/01/28 branch /path/to/depots/depot/... 'depot project'\n"; + $line2 = "Depot depot 2013/01/28 development /path/to/depots/depot/... 'depot project'\n"; + $this->perforce->commandReturnValue = $line1 . $line2; + $result = $this->perforce->checkStream("depot"); + $this->assertFalse($result); + $this->assertFalse($this->perforce->testIsStream()); + } + + public function testGetComposerInformationWithoutLabelWithoutStream() { + $expectedCommand = $this->winCompat("p4 -u user -c composer_perforce_TEST_depot -p port print //depot/composer.json"); + $this->processExecutor->expects($this->at(0)) + ->method('execute') + ->with($this->equalTo($expectedCommand)) + ->will($this->returnCallback(function($command, &$output) {$output = PerforceTest::getComposerJson(); return true;})); + + $result = $this->perforce->getComposerInformation("//depot"); + $expected = array( + "name" => "test/perforce", + "description" => "Basic project for testing", + "minimum-stability" => "dev", + "autoload" => array("psr-0" => array()) + ); + $this->assertEquals($expected, $result); + } + + public function testGetComposerInformationWithLabelWithoutStream() { + $expectedCommand = $this->winCompat("p4 -u user -p port files //depot/composer.json@0.0.1"); + $this->processExecutor->expects($this->at(0)) + ->method('execute') + ->with($this->equalTo($expectedCommand)) + ->will($this->returnCallback(function($command, &$output) {$output = "//depot/composer.json#1 - branch change 10001 (text)"; return true;})); + + $expectedCommand = $this->winCompat("p4 -u user -c composer_perforce_TEST_depot -p port print //depot/composer.json@10001"); + $this->processExecutor->expects($this->at(1)) + ->method('execute') + ->with($this->equalTo($expectedCommand)) + ->will($this->returnCallback(function($command, &$output) {$output = PerforceTest::getComposerJson(); return true;})); + + $result = $this->perforce->getComposerInformation("//depot@0.0.1"); + + $expected = array( + "name" => "test/perforce", + "description" => "Basic project for testing", + "minimum-stability" => "dev", + "autoload" => array("psr-0" => array()) + ); + $this->assertEquals($expected, $result); + } + + public function testGetComposerInformationWithoutLabelWithStream() { + $expectedCommand = $this->winCompat("p4 -u user -c composer_perforce_TEST_depot_branch -p port print //depot/branch/composer.json"); + $this->processExecutor->expects($this->at(0)) + ->method('execute') + ->with($this->equalTo($expectedCommand)) + ->will($this->returnCallback(function($command, &$output) {$output = PerforceTest::getComposerJson(); return true;})); + + $this->perforce->setStream("//depot/branch"); + $result = $this->perforce->getComposerInformation("//depot/branch"); + + $expected = array( + "name" => "test/perforce", + "description" => "Basic project for testing", + "minimum-stability" => "dev", + "autoload" => array("psr-0" => array()) + ); + $this->assertEquals($expected, $result); + } + + public function testGetComposerInformationWithLabelWithStream() { + $expectedCommand = $this->winCompat("p4 -u user -p port files //depot/branch/composer.json@0.0.1"); + $this->processExecutor->expects($this->at(0)) + ->method('execute') + ->with($this->equalTo($expectedCommand)) + ->will($this->returnCallback(function($command, &$output) {$output = "//depot/composer.json#1 - branch change 10001 (text)"; return true;})); + + $expectedCommand = $this->winCompat("p4 -u user -c composer_perforce_TEST_depot_branch -p port print //depot/branch/composer.json@10001"); + $this->processExecutor->expects($this->at(1)) + ->method('execute') + ->with($this->equalTo($expectedCommand)) + ->will($this->returnCallback(function($command, &$output) {$output = PerforceTest::getComposerJson(); return true;})); + + $this->perforce->setStream("//depot/branch"); + $result = $this->perforce->getComposerInformation("//depot/branch@0.0.1"); + + $expected = array( + "name" => "test/perforce", + "description" => "Basic project for testing", + "minimum-stability" => "dev", + "autoload" => array("psr-0" => array()) + ); + $this->assertEquals($expected, $result); + } + + public function testSyncCodeBaseWithoutStream() { + $expectedCommand = $this->winCompat("p4 -u user -c composer_perforce_TEST_depot -p port sync -f @label"); + $this->processExecutor->expects($this->at(1)) + ->method('execute') + ->with($this->equalTo($expectedCommand), $this->equalTo(null)) + ->will($this->returnValue(0)); + + $this->perforce->syncCodeBase("label"); + } + + public function testSyncCodeBaseWithStream() { + $expectedCommand = $this->winCompat("p4 -u user -c composer_perforce_TEST_depot_branch -p port sync -f @label"); + $this->processExecutor->expects($this->at(1)) + ->method('execute') + ->with($this->equalTo($expectedCommand), $this->equalTo(null)) + ->will($this->returnValue(0)); + + $this->perforce->setStream("//depot/branch"); + $this->perforce->syncCodeBase("label"); + } + + public function testCheckServerExists() { + $processExecutor = $this->getMock('Composer\Util\ProcessExecutor'); + + $expectedCommand = $this->winCompat("p4 -p perforce.does.exist:port info -s"); + $processExecutor->expects($this->at(0)) + ->method('execute') + ->with($this->equalTo($expectedCommand), $this->equalTo(null)) + ->will($this->returnValue(0)); + + $result = $this->perforce->checkServerExists("perforce.does.exist:port", $processExecutor); + $this->assertTrue($result); + } + + public function testCheckServerExistsWithFailure() { + $processExecutor = $this->getMock('Composer\Util\ProcessExecutor'); + + $expectedCommand = $this->winCompat("p4 -p perforce.does.not.exist:port info -s"); + $processExecutor->expects($this->at(0)) + ->method('execute') + ->with($this->equalTo($expectedCommand), $this->equalTo(null)) + ->will($this->returnValue("Perforce client error:")); + + $result = $this->perforce->checkServerExists("perforce.does.not.exist:port", $processExecutor); + $this->assertTrue($result); + } + + public static function getComposerJson() { + $composer_json = array( + '{', + '"name": "test/perforce",', + '"description": "Basic project for testing",', + '"minimum-stability": "dev",', + '"autoload": {', + '"psr-0" : {', + '}', + '}', + '}' + ); + + return implode($composer_json); + } + + private function getExpectedClientSpec($withStream) { + $expectedArray = array( + "Client: composer_perforce_TEST_depot", + "\n", + "Update:", + "\n", + "Access:", + "Owner: user", + "\n", + "Description:", + " Created by user from composer.", + "\n", + "Root: path", + "\n", + "Options: noallwrite noclobber nocompress unlocked modtime rmdir", + "\n", + "SubmitOptions: revertunchanged", + "\n", + "LineEnd: local", + "\n" + ); + if ($withStream) { + $expectedArray[] = "Stream:"; + $expectedArray[] = " //depot/branching"; + } + else { + $expectedArray[] = "View: //depot/... //composer_perforce_TEST_depot/depot/..."; + } + + return $expectedArray; + } + + private function winCompat($cmd) { + if (defined('PHP_WINDOWS_VERSION_BUILD')) { + $cmd = str_replace('cd ', 'cd /D ', $cmd); + $cmd = str_replace('composerPath', getcwd() . '/composerPath', $cmd); + + return strtr($cmd, "'", '"'); + } + + return $cmd; + } + +} + diff --git a/tests/Composer/Test/Util/TestingPerforce.php b/tests/Composer/Test/Util/TestingPerforce.php new file mode 100644 index 000000000..dc21e8c33 --- /dev/null +++ b/tests/Composer/Test/Util/TestingPerforce.php @@ -0,0 +1,106 @@ +windows_flag = false; + } + /* + * Override functions + */ + protected function getRandomValue() { + return "TEST"; + } + protected function isWindows(){ + return $this->windows_flag; + } + +// protected function executeCommand($command) { +// $this->previousCommand = $this->lastCommand; +// $this->lastCommand = $command; +// $result = $this->commandReturnValue; +// $this->commandReturnValue = $this->nextCommandReturnValue; +// $this->nextCommandReturnValue = null; +// return $result; +// } + + public function writeP4ClientSpec() { + $spec = fopen(vfsStream::url($this->getP4ClientSpec()), 'w'); + $this->writeClientSpecToFile($spec); + fclose($spec); + } + + /* + * Test Helper functions + */ + public function setDepotType($depotType) { + $this->p4depotType = $depotType; + $this->p4stream = NULL; + } + + /* + * Functions to expose protected methods for testing: + */ + public function setP4User($p4user){ + $this->p4user = $p4user; + } + public function setP4Password($password){ + $this->p4password = $password; + } + + public function testGetClient() { + return $this->getClient(); + } + + public function testGetStream() { + return $this->getStream(); + } + + public function testGetStreamWithoutLabel() { + return $this->getStreamWithoutLabel(); + } + + public function testGetClientSpec() { + return $this->getP4ClientSpec(); + } + + public function testGenerateP4Command($command, $useClient = TRUE) { + return $this->generateP4Command($command, $useClient); + } + + public function testIsLoggedIn() + { + return $this->isLoggedIn(); + } + + public function testIsStream() + { + return $this->isStream(); + } + + public function testGetP4Variable($name) + { + return $this->testGetP4Variable($name); + } + + public function testQueryP4Password($io) + { + return $this->queryP4Password($io); + } +} \ No newline at end of file