Merge "Skin: Make skins aware of their registered skin name"
[lhc/web/wiklou.git] / tests / phpunit / includes / GitInfoTest.php
index ae858f5..1037b37 100644 (file)
@@ -4,6 +4,30 @@
  */
 class GitInfoTest extends MediaWikiTestCase {
 
+       public static function setUpBeforeClass() {
+               mkdir( __DIR__ . '/../data/gitrepo' );
+               mkdir( __DIR__ . '/../data/gitrepo/1' );
+               mkdir( __DIR__ . '/../data/gitrepo/2' );
+               mkdir( __DIR__ . '/../data/gitrepo/3' );
+               mkdir( __DIR__ . '/../data/gitrepo/1/.git' );
+               mkdir( __DIR__ . '/../data/gitrepo/1/.git/refs' );
+               mkdir( __DIR__ . '/../data/gitrepo/1/.git/refs/heads' );
+               file_put_contents( __DIR__ . '/../data/gitrepo/1/.git/HEAD',
+                       "ref: refs/heads/master\n" );
+               file_put_contents( __DIR__ . '/../data/gitrepo/1/.git/refs/heads/master',
+                       "0123456789012345678901234567890123abcdef\n" );
+               file_put_contents( __DIR__ . '/../data/gitrepo/1/.git/packed-refs',
+                       "abcdef6789012345678901234567890123456789 refs/heads/master\n" );
+               file_put_contents( __DIR__ . '/../data/gitrepo/2/.git',
+                       "gitdir: ../1/.git\n" );
+               file_put_contents( __DIR__ . '/../data/gitrepo/3/.git',
+                       'gitdir: ' . __DIR__ . "/../data/gitrepo/1/.git\n" );
+       }
+
+       public static function tearDownAfterClass() {
+               wfRecursiveRemoveDir( __DIR__ . '/../data/gitrepo' );
+       }
+
        protected function setUp() {
                parent::setUp();
                $this->setMwGlobals( 'wgGitInfoCacheDirectory', __DIR__ . '/../data/gitinfo' );
@@ -43,4 +67,36 @@ class GitInfoTest extends MediaWikiTestCase {
                $this->assertTrue( $fixture->cacheIsComplete() );
        }
 
+       public function testReadingHead() {
+               $dir = __DIR__ . '/../data/gitrepo/1';
+               $fixture = new GitInfo( $dir );
+
+               $this->assertEquals( 'refs/heads/master', $fixture->getHead() );
+               $this->assertEquals( '0123456789012345678901234567890123abcdef', $fixture->getHeadSHA1() );
+       }
+
+       public function testIndirection() {
+               $dir = __DIR__ . '/../data/gitrepo/2';
+               $fixture = new GitInfo( $dir );
+
+               $this->assertEquals( 'refs/heads/master', $fixture->getHead() );
+               $this->assertEquals( '0123456789012345678901234567890123abcdef', $fixture->getHeadSHA1() );
+       }
+
+       public function testIndirection2() {
+               $dir = __DIR__ . '/../data/gitrepo/3';
+               $fixture = new GitInfo( $dir );
+
+               $this->assertEquals( 'refs/heads/master', $fixture->getHead() );
+               $this->assertEquals( '0123456789012345678901234567890123abcdef', $fixture->getHeadSHA1() );
+       }
+
+       public function testReadingPackedRefs() {
+               $dir = __DIR__ . '/../data/gitrepo/1';
+               unlink( __DIR__ . '/../data/gitrepo/1/.git/refs/heads/master' );
+               $fixture = new GitInfo( $dir );
+
+               $this->assertEquals( 'refs/heads/master', $fixture->getHead() );
+               $this->assertEquals( 'abcdef6789012345678901234567890123456789', $fixture->getHeadSHA1() );
+       }
 }