1<?php 2require_once 'VersionControl/Git.php'; 3 4require_once dirname(__FILE__) . '/checkFixtures.php'; 5 6class DummyGitCommand extends VersionControl_Git_Util_Command 7{ 8 public function getCommandString($arguments = array(), $options = array()) 9 { 10 return $this->createCommandString($arguments, $options); 11 } 12 13 public function getProperty($name) 14 { 15 return $this->$name; 16 } 17} 18 19class VersionControl_Git_Util_CommandTest extends PHPUnit_Framework_TestCase 20{ 21 public function testConstruct() 22 { 23 $git = new VersionControl_Git(dirname(__FILE__) . '/fixtures/001_VersionControl_Git'); 24 $instance = new DummyGitCommand($git); 25 26 $this->assertTrue($instance instanceof VersionControl_Git_Util_Command); 27 } 28 29 public function testSetSubCommand() 30 { 31 $git = new VersionControl_Git(dirname(__FILE__) . '/fixtures/001_VersionControl_Git'); 32 $instance = new DummyGitCommand($git); 33 34 $this->assertEquals($instance->getProperty('subCommand'), ''); 35 36 $instance->setSubCommand('subcommand'); 37 38 $this->assertEquals($instance->getProperty('subCommand'), 'subcommand'); 39 } 40 41 public function testSetOptions() 42 { 43 $git = new VersionControl_Git(dirname(__FILE__) . '/fixtures/001_VersionControl_Git'); 44 $instance = new DummyGitCommand($git); 45 46 $this->assertEquals($instance->getProperty('options'), array()); 47 48 $options1 = array('option1' => time() * 1, 'option2' => time() * 2); 49 $instance->setOptions($options1); 50 $this->assertEquals($instance->getProperty('options'), $options1); 51 52 $options2 = array('option3' => time() * 3, 'option4' => time() * 4); 53 $instance->setOptions($options2); 54 $this->assertEquals($instance->getProperty('options'), $options2); 55 } 56 57 public function testSetArguments() 58 { 59 $git = new VersionControl_Git(dirname(__FILE__) . '/fixtures/001_VersionControl_Git'); 60 $instance = new DummyGitCommand($git); 61 62 $this->assertEquals($instance->getProperty('arguments'), array()); 63 64 $arguments1 = array(time() * 1, time() * 2); 65 $instance->setArguments($arguments1); 66 $this->assertEquals($instance->getProperty('arguments'), $arguments1); 67 68 $arguments2 = array(time() * 3, time() * 4); 69 $instance->setArguments($arguments2); 70 $this->assertEquals($instance->getProperty('arguments'), $arguments2); 71 } 72 73 public function testSetOption() 74 { 75 $git = new VersionControl_Git(dirname(__FILE__) . '/fixtures/001_VersionControl_Git'); 76 $instance = new DummyGitCommand($git); 77 78 $options1 = array('option1' => time() * 1, 'option2' => time() * 2); 79 $instance->setOptions($options1); 80 $this->assertEquals($instance->getProperty('options'), $options1); 81 82 $newOption = time() * 3; 83 $instance->setOption('option1', $newOption); 84 $this->assertEquals($instance->getProperty('options'), array('option1' => $newOption, 'option2' => $options1['option2'])); 85 } 86 87 public function testAddArgument() 88 { 89 $git = new VersionControl_Git(dirname(__FILE__) . '/fixtures/001_VersionControl_Git'); 90 $instance = new DummyGitCommand($git); 91 92 $arguments = array(1, 2, 3); 93 $instance->setArguments($arguments); 94 $this->assertEquals($instance->getProperty('arguments'), $arguments); 95 96 $instance->addArgument(4); 97 $this->assertEquals($instance->getProperty('arguments'), array(1, 2, 3, 4)); 98 } 99 100 public function testAddDoubleDash() 101 { 102 $git = new VersionControl_Git(dirname(__FILE__) . '/fixtures/001_VersionControl_Git'); 103 $instance = new DummyGitCommand($git); 104 105 $this->assertEquals($instance->getProperty('doubleDash'), false); 106 $instance->addDoubleDash(true); 107 $this->assertEquals($instance->getProperty('doubleDash'), true); 108 $instance->addDoubleDash(false); 109 $this->assertEquals($instance->getProperty('doubleDash'), false); 110 } 111 112 public function testCreateCommandStringException() 113 { 114 $this->setExpectedException('VersionControl_Git_Exception'); 115 116 $git = new VersionControl_Git(dirname(__FILE__) . '/fixtures/001_VersionControl_Git'); 117 $instance = new DummyGitCommand($git); 118 119 $instance->getCommandString(); 120 } 121 122 public function testCreateCommandString() 123 { 124 $git = new VersionControl_Git(dirname(__FILE__) . '/fixtures/001_VersionControl_Git'); 125 $i1 = new DummyGitCommand($git); 126 127 $i1->setSubCommand('subcommand'); 128 129 $pathToGit = @System::which('git'); 130 131 $this->assertEquals($i1->getCommandString(), $pathToGit.' subcommand'); 132 $this->assertEquals($i1->getCommandString(array('a1', 'a2')), $pathToGit.' subcommand \'a1\' \'a2\''); 133 $this->assertEquals($i1->getCommandString(array(), array('o1' => 'v1', 'o2' => true, 'o3' => false, 'o' => true)), $pathToGit.' subcommand --o1=\'v1\' --o2 -o'); 134 $this->assertEquals($i1->getCommandString(array('a1', 'a2'), array('o1' => 'v1', 'o2' => true, 'o3' => false, 'o' => true)), $pathToGit.' subcommand --o1=\'v1\' --o2 -o \'a1\' \'a2\''); 135 136 $i2 = clone $i1; 137 $i2->setArguments(array('A1', 'A2')); 138 139 $this->assertEquals($i2->getCommandString(), $pathToGit.' subcommand \'A1\' \'A2\''); 140 $this->assertEquals($i2->getCommandString(array('a1', 'a2')), $pathToGit.' subcommand \'A1\' \'A2\' \'a1\' \'a2\''); 141 $this->assertEquals($i2->getCommandString(array(), array('o1' => 'v1', 'o2' => true, 'o3' => false, 'o' => true)), $pathToGit.' subcommand --o1=\'v1\' --o2 -o \'A1\' \'A2\''); 142 $this->assertEquals($i2->getCommandString(array('a1', 'a2'), array('o1' => 'v1', 'o2' => true, 'o3' => false, 'o' => true)), $pathToGit.' subcommand --o1=\'v1\' --o2 -o \'A1\' \'A2\' \'a1\' \'a2\''); 143 144 $i3 = clone $i1; 145 $i3->setOptions(array('O1' => 'V1', 'o2' => 'V2')); 146 147 $this->assertEquals($i3->getCommandString(), $pathToGit.' subcommand --O1=\'V1\' --o2=\'V2\''); 148 $this->assertEquals($i3->getCommandString(array('a1', 'a2')), $pathToGit.' subcommand --O1=\'V1\' --o2=\'V2\' \'a1\' \'a2\''); 149 $this->assertEquals($i3->getCommandString(array(), array('o1' => 'v1', 'o2' => true, 'o3' => false, 'o' => true)), $pathToGit.' subcommand --O1=\'V1\' --o2 --o1=\'v1\' -o'); 150 $this->assertEquals($i3->getCommandString(array('a1', 'a2'), array('o1' => 'v1', 'o2' => true, 'o3' => false, 'o' => true)), $pathToGit.' subcommand --O1=\'V1\' --o2 --o1=\'v1\' -o \'a1\' \'a2\''); 151 152 $i4 = clone $i1; 153 $i4->addDoubleDash(true); 154 155 $this->assertEquals($i4->getCommandString(), $pathToGit.' subcommand --'); 156 $this->assertEquals($i4->getCommandString(array('a1', 'a2')), $pathToGit.' subcommand \'a1\' \'a2\' --'); 157 $this->assertEquals($i4->getCommandString(array(), array('o1' => 'v1', 'o2' => true, 'o3' => false, 'o' => true)), $pathToGit.' subcommand --o1=\'v1\' --o2 -o --'); 158 $this->assertEquals($i4->getCommandString(array('a1', 'a2'), array('o1' => 'v1', 'o2' => true, 'o3' => false, 'o' => true)), $pathToGit.' subcommand --o1=\'v1\' --o2 -o \'a1\' \'a2\' --'); 159 } 160 161 public function testExecuteException() 162 { 163 $this->setExpectedException('VersionControl_Git_Exception'); 164 165 $git = new VersionControl_Git(dirname(__FILE__) . '/fixtures/001_VersionControl_Git'); 166 $i1 = new DummyGitCommand($git); 167 168 $i1->setSubCommand('subcommand') 169 ->execute(); 170 } 171 172 public function testExecute() 173 { 174 $git = new VersionControl_Git(dirname(__FILE__) . '/fixtures/001_VersionControl_Git'); 175 $i1 = new DummyGitCommand($git); 176 177 $result = $i1->setSubCommand('log') 178 ->setOption('pretty', 'oneline') 179 ->setOption('grep', 'initial') 180 ->execute(); 181 182 $this->assertEquals(trim($result), 'b8adc7214881bb71b9741b5d8228ebf346197d47 initial commit'); 183 } 184 185 public function testExecuteWithShortFormatOption() 186 { 187 $git = new VersionControl_Git(dirname(__FILE__) . '/fixtures/001_VersionControl_Git'); 188 $i1 = new DummyGitCommand($git); 189 190 $result = $i1->setSubCommand('log') 191 ->setOption('n', '1') 192 ->setOption('pretty', 'oneline') 193 ->setOption('grep', 'initial') 194 ->execute(); 195 196 $this->assertEquals($i1->getCommandString(), @System::which('git').' log -n\'1\' --pretty=\'oneline\' --grep=\'initial\''); 197 $this->assertEquals(trim($result), 'b8adc7214881bb71b9741b5d8228ebf346197d47 initial commit'); 198 } 199} 200