Differential D15752 Diff 37961 src/applications/diffusion/protocol/__tests__/DiffusionCommandEngineTestCase.php
Changeset View
Changeset View
Standalone View
Standalone View
src/applications/diffusion/protocol/__tests__/DiffusionCommandEngineTestCase.php
- This file was added.
| <?php | |||||
| final class DiffusionCommandEngineTestCase extends PhabricatorTestCase { | |||||
| public function testCommandEngine() { | |||||
| $type_git = PhabricatorRepositoryType::REPOSITORY_TYPE_GIT; | |||||
| $type_hg = PhabricatorRepositoryType::REPOSITORY_TYPE_MERCURIAL; | |||||
| $type_svn = PhabricatorRepositoryType::REPOSITORY_TYPE_SVN; | |||||
| $root = dirname(phutil_get_library_root('phabricator')); | |||||
| $ssh_wrapper = $root.'/bin/ssh-connect'; | |||||
| $home = $root.'/support/empty/'; | |||||
| // Plain commands. | |||||
| $this->assertCommandEngineFormat( | |||||
| 'git xyz', | |||||
| array( | |||||
| 'LANG' => 'en_US.UTF-8', | |||||
| 'HOME' => $home, | |||||
| ), | |||||
| array( | |||||
| 'vcs' => $type_git, | |||||
| 'argv' => 'xyz', | |||||
| )); | |||||
| $this->assertCommandEngineFormat( | |||||
| 'hg xyz', | |||||
| array( | |||||
| 'LANG' => 'en_US.UTF-8', | |||||
| 'HGPLAIN' => '1', | |||||
| ), | |||||
| array( | |||||
| 'vcs' => $type_hg, | |||||
| 'argv' => 'xyz', | |||||
| )); | |||||
| $this->assertCommandEngineFormat( | |||||
| 'svn --non-interactive xyz', | |||||
| array( | |||||
| 'LANG' => 'en_US.UTF-8', | |||||
| ), | |||||
| array( | |||||
| 'vcs' => $type_svn, | |||||
| 'argv' => 'xyz', | |||||
| )); | |||||
| // Commands with SSH. | |||||
| $this->assertCommandEngineFormat( | |||||
| 'git xyz', | |||||
| array( | |||||
| 'LANG' => 'en_US.UTF-8', | |||||
| 'HOME' => $home, | |||||
| 'GIT_SSH' => $ssh_wrapper, | |||||
| ), | |||||
| array( | |||||
| 'vcs' => $type_git, | |||||
| 'argv' => 'xyz', | |||||
| 'protocol' => 'ssh', | |||||
| )); | |||||
| $this->assertCommandEngineFormat( | |||||
| (string)csprintf('hg --config ui.ssh=%s xyz', $ssh_wrapper), | |||||
| array( | |||||
| 'LANG' => 'en_US.UTF-8', | |||||
| 'HGPLAIN' => '1', | |||||
| ), | |||||
| array( | |||||
| 'vcs' => $type_hg, | |||||
| 'argv' => 'xyz', | |||||
| 'protocol' => 'ssh', | |||||
| )); | |||||
| $this->assertCommandEngineFormat( | |||||
| 'svn --non-interactive xyz', | |||||
| array( | |||||
| 'LANG' => 'en_US.UTF-8', | |||||
| 'SVN_SSH' => $ssh_wrapper, | |||||
| ), | |||||
| array( | |||||
| 'vcs' => $type_svn, | |||||
| 'argv' => 'xyz', | |||||
| 'protocol' => 'ssh', | |||||
| )); | |||||
| // Commands with HTTP. | |||||
| $this->assertCommandEngineFormat( | |||||
| 'git xyz', | |||||
| array( | |||||
| 'LANG' => 'en_US.UTF-8', | |||||
| 'HOME' => $home, | |||||
| ), | |||||
| array( | |||||
| 'vcs' => $type_git, | |||||
| 'argv' => 'xyz', | |||||
| 'protocol' => 'https', | |||||
| )); | |||||
| $this->assertCommandEngineFormat( | |||||
| 'hg xyz', | |||||
| array( | |||||
| 'LANG' => 'en_US.UTF-8', | |||||
| 'HGPLAIN' => '1', | |||||
| ), | |||||
| array( | |||||
| 'vcs' => $type_hg, | |||||
| 'argv' => 'xyz', | |||||
| 'protocol' => 'https', | |||||
| )); | |||||
| $this->assertCommandEngineFormat( | |||||
| 'svn --non-interactive --no-auth-cache --trust-server-cert xyz', | |||||
| array( | |||||
| 'LANG' => 'en_US.UTF-8', | |||||
| ), | |||||
| array( | |||||
| 'vcs' => $type_svn, | |||||
| 'argv' => 'xyz', | |||||
| 'protocol' => 'https', | |||||
| )); | |||||
| } | |||||
| private function assertCommandEngineFormat( | |||||
| $command, | |||||
| array $env, | |||||
| array $inputs) { | |||||
| $repository = id(new PhabricatorRepository()) | |||||
| ->setVersionControlSystem($inputs['vcs']); | |||||
| $future = DiffusionCommandEngine::newCommandEngine($repository) | |||||
| ->setArgv((array)$inputs['argv']) | |||||
| ->setProtocol(idx($inputs, 'protocol')) | |||||
| ->newFuture(); | |||||
| $command_string = $future->getCommand(); | |||||
| $actual_command = $command_string->getUnmaskedString(); | |||||
| $this->assertEqual($command, $actual_command); | |||||
| $actual_environment = $future->getEnv(); | |||||
| $compare_environment = array_select_keys( | |||||
| $actual_environment, | |||||
| array_keys($env)); | |||||
| $this->assertEqual($env, $compare_environment); | |||||
| } | |||||
| } | |||||