Merge "Selenium: replace UserLoginPage with BlankPage where possible"
[lhc/web/wiklou.git] / tests / phpunit / includes / GitInfoTest.php
index ae858f5..0f241cd 100644 (file)
@@ -4,6 +4,39 @@
  */
 class GitInfoTest extends MediaWikiTestCase {
 
+       private static $tempDir;
+
+       public static function setUpBeforeClass() {
+               self::$tempDir = wfTempDir() . '/mw-phpunit-' . wfRandomString( 8 );
+               if ( !mkdir( self::$tempDir ) ) {
+                       self::$tempDir = null;
+                       throw new Exception( 'Unable to create temporary directory' );
+               }
+               mkdir( self::$tempDir . '/gitrepo' );
+               mkdir( self::$tempDir . '/gitrepo/1' );
+               mkdir( self::$tempDir . '/gitrepo/2' );
+               mkdir( self::$tempDir . '/gitrepo/3' );
+               mkdir( self::$tempDir . '/gitrepo/1/.git' );
+               mkdir( self::$tempDir . '/gitrepo/1/.git/refs' );
+               mkdir( self::$tempDir . '/gitrepo/1/.git/refs/heads' );
+               file_put_contents( self::$tempDir . '/gitrepo/1/.git/HEAD',
+                       "ref: refs/heads/master\n" );
+               file_put_contents( self::$tempDir . '/gitrepo/1/.git/refs/heads/master',
+                       "0123456789012345678901234567890123abcdef\n" );
+               file_put_contents( self::$tempDir . '/gitrepo/1/.git/packed-refs',
+                       "abcdef6789012345678901234567890123456789 refs/heads/master\n" );
+               file_put_contents( self::$tempDir . '/gitrepo/2/.git',
+                       "gitdir: ../1/.git\n" );
+               file_put_contents( self::$tempDir . '/gitrepo/3/.git',
+                       'gitdir: ' . self::$tempDir . "/gitrepo/1/.git\n" );
+       }
+
+       public static function tearDownAfterClass() {
+               if ( self::$tempDir ) {
+                       wfRecursiveRemoveDir( self::$tempDir );
+               }
+       }
+
        protected function setUp() {
                parent::setUp();
                $this->setMwGlobals( 'wgGitInfoCacheDirectory', __DIR__ . '/../data/gitinfo' );
@@ -43,4 +76,36 @@ class GitInfoTest extends MediaWikiTestCase {
                $this->assertTrue( $fixture->cacheIsComplete() );
        }
 
+       public function testReadingHead() {
+               $dir = self::$tempDir . '/gitrepo/1';
+               $fixture = new GitInfo( $dir );
+
+               $this->assertEquals( 'refs/heads/master', $fixture->getHead() );
+               $this->assertEquals( '0123456789012345678901234567890123abcdef', $fixture->getHeadSHA1() );
+       }
+
+       public function testIndirection() {
+               $dir = self::$tempDir . '/gitrepo/2';
+               $fixture = new GitInfo( $dir );
+
+               $this->assertEquals( 'refs/heads/master', $fixture->getHead() );
+               $this->assertEquals( '0123456789012345678901234567890123abcdef', $fixture->getHeadSHA1() );
+       }
+
+       public function testIndirection2() {
+               $dir = self::$tempDir . '/gitrepo/3';
+               $fixture = new GitInfo( $dir );
+
+               $this->assertEquals( 'refs/heads/master', $fixture->getHead() );
+               $this->assertEquals( '0123456789012345678901234567890123abcdef', $fixture->getHeadSHA1() );
+       }
+
+       public function testReadingPackedRefs() {
+               $dir = self::$tempDir . '/gitrepo/1';
+               unlink( self::$tempDir . '/gitrepo/1/.git/refs/heads/master' );
+               $fixture = new GitInfo( $dir );
+
+               $this->assertEquals( 'refs/heads/master', $fixture->getHead() );
+               $this->assertEquals( 'abcdef6789012345678901234567890123456789', $fixture->getHeadSHA1() );
+       }
 }