* (c) Julien DIDIER * * This source file is subject to the MIT license that is bundled * with this source code in the file LICENSE. */ namespace Gitonomy\Git\Tests; use Gitonomy\Git\Commit; use Gitonomy\Git\Diff\Diff; class CommitTest extends AbstractTest { /** * @dataProvider provideFoobar */ public function testGetDiff($repository) { $commit = $repository->getCommit(self::LONGFILE_COMMIT); $diff = $commit->getDiff(); $this->assertTrue($diff instanceof Diff, 'getDiff() returns a Diff object'); } /** * @dataProvider provideFoobar */ public function testGetHash($repository) { $commit = $repository->getCommit(self::LONGFILE_COMMIT); $this->assertEquals(self::LONGFILE_COMMIT, $commit->getHash()); } /** * @dataProvider provideFoobar * * @expectedException Gitonomy\Git\Exception\ReferenceNotFoundException * @expectedExceptionMessage Reference not found: "that-hash-doest-not-exists" */ public function testInvalideHashThrowException($repository) { $commit = new Commit($repository, 'that-hash-doest-not-exists'); } /** * @dataProvider provideFoobar */ public function testGetShortHash($repository) { $commit = $repository->getCommit(self::LONGFILE_COMMIT); $this->assertEquals('4f17752', $commit->getShortHash(), 'Short hash'); } /** * @dataProvider provideFoobar */ public function testGetParentHashes_WithNoParent($repository) { $commit = $repository->getCommit(self::INITIAL_COMMIT); $this->assertEquals(0, count($commit->getParentHashes()), 'No parent on initial commit'); } /** * @dataProvider provideFoobar */ public function testGetParentHashes_WithOneParent($repository) { $commit = $repository->getCommit(self::LONGFILE_COMMIT); $parents = $commit->getParentHashes(); $this->assertEquals(1, count($parents), 'One parent found'); $this->assertEquals(self::BEFORE_LONGFILE_COMMIT, $parents[0], 'Parent hash is correct'); } /** * @dataProvider provideFoobar */ public function testGetParents_WithOneParent($repository) { $commit = $repository->getCommit(self::LONGFILE_COMMIT); $parents = $commit->getParents(); $this->assertEquals(1, count($parents), 'One parent found'); $this->assertTrue($parents[0] instanceof Commit, 'First parent is a Commit object'); $this->assertEquals(self::BEFORE_LONGFILE_COMMIT, $parents[0]->getHash(), "First parents's hash is correct"); } /** * @dataProvider provideFoobar */ public function testGetTreeHash($repository) { $commit = $repository->getCommit(self::LONGFILE_COMMIT); $this->assertEquals('b06890c7b10904979d2f69613c2ccda30aafe262', $commit->getTreeHash(), 'Tree hash is correct'); } /** * @dataProvider provideFoobar */ public function testGetTree($repository) { $commit = $repository->getCommit(self::LONGFILE_COMMIT); $this->assertInstanceOf('Gitonomy\Git\Tree', $commit->getTree(), 'Tree is a tree'); $this->assertEquals('b06890c7b10904979d2f69613c2ccda30aafe262', $commit->getTree()->getHash(), 'Tree hash is correct'); } /** * @dataProvider provideFoobar */ public function testGetAuthorName($repository) { $commit = $repository->getCommit(self::LONGFILE_COMMIT); $this->assertEquals('alice', $commit->getAuthorName(), 'Author name'); } /** * @dataProvider provideFoobar */ public function testGetAuthorEmail($repository) { $commit = $repository->getCommit(self::LONGFILE_COMMIT); $this->assertEquals('alice@example.org', $commit->getAuthorEmail(), 'Author email'); } /** * @dataProvider provideFoobar */ public function testGetAuthorDate($repository) { $commit = $repository->getCommit(self::LONGFILE_COMMIT); $this->assertEquals('2012-12-31 14:21:03', $commit->getAuthorDate()->format('Y-m-d H:i:s'), 'Author date'); } /** * @dataProvider provideFoobar */ public function testGetCommitterName($repository) { $commit = $repository->getCommit(self::LONGFILE_COMMIT); $this->assertEquals('alice', $commit->getCommitterName(), 'Committer name'); } /** * @dataProvider provideFoobar */ public function testGetCommitterEmail($repository) { $commit = $repository->getCommit(self::LONGFILE_COMMIT); $this->assertEquals('alice@example.org', $commit->getCommitterEmail(), 'Committer email'); } /** * @dataProvider provideFoobar */ public function testGetCommitterDate($repository) { $commit = $repository->getCommit(self::LONGFILE_COMMIT); $this->assertEquals('2012-12-31 14:21:03', $commit->getCommitterDate()->format('Y-m-d H:i:s'), 'Committer date'); } /** * @dataProvider provideFoobar */ public function testGetMessage($repository) { $commit = $repository->getCommit(self::LONGFILE_COMMIT); $this->assertEquals('add a long file'."\n", $commit->getMessage()); } /** * This test ensures that GPG signed commits does not break the reading of a commit * message. * * @dataProvider provideFoobar */ public function testGetSignedMessage($repository) { $commit = $repository->getCommit(self::SIGNED_COMMIT); $this->assertEquals('signed commit'."\n", $commit->getMessage()); } /** * @dataProvider provideFoobar */ public function testGetShortMessage($repository) { // tests with a multi-line message $commit = $repository->getCommit(self::LONGMESSAGE_COMMIT); $this->assertEquals('Fixed perm...', $commit->getShortMessage(10)); $this->assertEquals('Fixed perm!!!', $commit->getShortMessage(10, false, '!!!')); $this->assertEquals('Fixed permissions!!!', $commit->getShortMessage(10, true, '!!!')); // tests with a single-line message $commit = $repository->getCommit(self::INITIAL_COMMIT); $this->assertEquals('Add README', $commit->getShortMessage(20)); $this->assertEquals('A', $commit->getShortMessage(1, false, '')); $this->assertEquals('Add!!!', $commit->getShortMessage(1, true, '!!!')); } /** * @dataProvider provideFoobar */ public function testGetBodyMessage($repository) { $commit = $repository->getCommit(self::LONGMESSAGE_COMMIT); $message = <<assertEquals($message, $commit->getBodyMessage()); $commit = $repository->getCommit(self::INITIAL_COMMIT); $this->assertEquals('', $commit->getBodyMessage()); } /** * @expectedException InvalidArgumentException * @dataProvider provideFoobar */ public function testGetIncludingBranchesException($repository) { $commit = $repository->getCommit(self::INITIAL_COMMIT); $commit->getIncludingBranches(false, false); } /** * @dataProvider provideFoobar */ public function testGetIncludingBranches($repository) { $commit = $repository->getCommit(self::INITIAL_COMMIT); $branches = $commit->getIncludingBranches(true, false); $this->assertCount(count($repository->getReferences()->getLocalBranches()), $branches); $branches = $commit->getIncludingBranches(true, true); $this->assertCount(count($repository->getReferences()->getBranches()), $branches); $branches = $commit->getIncludingBranches(false, true); $this->assertCount(count($repository->getReferences()->getRemoteBranches()), $branches); } /** * @dataProvider provideFoobar */ public function testGetLastModification($repository) { $commit = $repository->getCommit(self::LONGFILE_COMMIT); $lastModification = $commit->getLastModification('image.jpg'); $this->assertTrue($lastModification instanceof Commit, 'Last modification is a Commit object'); $this->assertEquals(self::BEFORE_LONGFILE_COMMIT, $lastModification->getHash(), 'Last modification is current commit'); } /** * @dataProvider provideFoobar */ public function testMergeCommit($repository) { $commit = $repository->getCommit(self::MERGE_COMMIT); $this->assertEquals("Merge branch 'authors'", $commit->getSubjectMessage()); } /** * @dataProvider provideFoobar */ public function testEncoding($repository) { $commit = $repository->getCommit(self::ENCODING_COMMIT); $this->assertEquals('contribute to AUTHORS file', $commit->getSubjectMessage()); } }