| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102 | 
							- <?php
 
- namespace Elgg;
 
- /**
 
-  * Tests the commit message validation shell script used by the git hook and travis
 
-  */
 
- class CommitMessageGitHookTest extends \PHPUnit_Framework_TestCase {
 
- 	protected $scriptsDir;
 
- 	protected $filesDir;
 
- 	protected $validateScript;
 
- 	public function setUp() {
 
- 		if (strtoupper(substr(PHP_OS, 0, 3)) === 'WIN') {
 
- 			$this->markTestSkipped('Can only test in *nix envs.');
 
- 		}
 
- 		$this->scriptsDir = dirname(dirname(dirname(dirname(__DIR__)))) . '/.scripts/';
 
- 		$this->filesDir = dirname(__DIR__) . '/test_files/commit_messages/';
 
- 		$this->validateScript = "php {$this->scriptsDir}validate_commit_msg.php";
 
- 		parent::setUp();
 
- 	}
 
- 	
 
- 	/**
 
- 	 * Test failures for missing input
 
- 	 */
 
- 	public function testRejectsEmptyStringInput() {
 
- 		// have to pass an empty arg because it looks for stdin
 
- 		$cmd = "$this->validateScript ''";
 
- 		$result = $this->runCmd($cmd, $output);
 
- 		$this->assertFalse($result, $output);
 
- 	}
 
- 	
 
- 	public function testRejectsEmptyFileInput() {
 
- 		$cmd = "$this->validateScript /dev/null";
 
- 		$result = $this->runCmd($cmd, $output);
 
- 		$this->assertFalse($result, $output);
 
- 	}
 
- 	
 
- 	public function testRejectsEmptyPipeInput() {
 
- 		$cmd = "echo '' | $this->validateScript";
 
- 		$result = $this->runCmd($cmd, $output);
 
- 		$this->assertFalse($result, $output);
 
- 	}
 
- 	public function testRejectsInvalidFileInput() {
 
- 		$cmd = "$this->validateScript {$this->filesDir}invalid_format.txt";
 
- 		$result = $this->runCmd($cmd, $output);
 
- 		$this->assertFalse($result, $output);
 
- 	}
 
- 	public function testAcceptsValidFileInput() {
 
- 		$cmd = "$this->validateScript {$this->filesDir}valid.txt";
 
- 		$result = $this->runCmd($cmd, $output);
 
- 		$this->assertTrue($result, $output);
 
- 	}
 
- 	
 
- 	public function testAcceptsValidPipeInput() {
 
- 		$msg = escapeshellarg(file_get_contents("{$this->filesDir}valid.txt"));
 
- 		$cmd = "echo $msg | $this->validateScript";
 
- 		$result = $this->runCmd($cmd, $output);
 
- 		$this->assertTrue($result, $output);
 
- 	}
 
- 	public function testAcceptsValidStringInput() {
 
- 		$msg = escapeshellarg(file_get_contents("{$this->filesDir}valid.txt"));
 
- 		$cmd = "$this->validateScript $msg";
 
- 		$result = $this->runCmd($cmd, $output);
 
- 		$this->assertTrue($result, $output);
 
- 	}
 
- 	/**
 
- 	 * Executes a command and returns true if the cmd
 
- 	 * exited with 0.
 
- 	 *
 
- 	 * @param string $cmd    Shell command to execute
 
- 	 * @param string $output Output from stdout and stderr will be written to this variable
 
- 	 * @param array  $env    Array of environment variables to be passed to sub-process
 
- 	 * @return bool Result depending on process exit code.
 
- 	 */
 
- 	protected function runCmd($cmd, &$output, array $env = array()) {
 
- 		$descriptorspec = array(
 
- 			0 => array("pipe", "r"),// stdin
 
- 			1 => array("pipe", "w"),// stdout
 
- 			2 => array("pipe", "w"),// stderr
 
- 		);
 
- 		$defaultEnv = array(
 
- 			'PATH' => getenv('PATH'),// we need to copy PATH variable to run php without specifying absolute path
 
- 		);
 
- 		$env = array_merge($defaultEnv, $env);
 
- 		$process = proc_open($cmd, $descriptorspec, $pipes, null, $env);
 
- 		$this->assertTrue(is_resource($process));
 
- 		// unfortunately we separate errors from output, but it should be good enough for current usage
 
- 		$output = stream_get_contents($pipes[1]) . stream_get_contents($pipes[2]);
 
- 		$exit = proc_close($process);
 
- 		return $exit > 0 ? false : true;
 
- 	}
 
- }
 
 
  |