assertEquals(sprintf('File %d', $i), $content); } } public function testReadFileByByte() { $filePath = sprintf('git://%s/file_0.txt', TESTS_REPO_PATH_1); $file = fopen($filePath, 'r'); $expected = 'File 0'; $expLength = strlen($expected); for ($i = 0; $i < $expLength; $i++) { $this->assertEquals($i, ftell($file)); $buffer = fgetc($file); $this->assertEquals($expected[$i], $buffer); $this->assertEquals($i + 1, ftell($file)); } fclose($file); } public function testSeekInFile() { $filePath = sprintf('git://%s/file_0.txt', TESTS_REPO_PATH_1); $file = fopen($filePath, 'r'); $expected = 'File 0'; fseek($file, -1, SEEK_END); $this->assertEquals('0', fgetc($file)); $this->assertEquals(6, ftell($file)); $this->assertTrue(feof($file)); fseek($file, 0, SEEK_SET); $this->assertEquals('F', fgetc($file)); $this->assertEquals(1, ftell($file)); fseek($file, 3, SEEK_CUR); $this->assertEquals(' ', fgetc($file)); $this->assertEquals(5, ftell($file)); fseek($file, -2, SEEK_CUR); $this->assertEquals('e', fgetc($file)); $this->assertEquals(4, ftell($file)); fclose($file); } public function testReadFileInReverse() { $filePath = sprintf('git://%s/file_0.txt', TESTS_REPO_PATH_1); $file = fopen($filePath, 'r'); $expected = '0 eliF'; $actual = ''; fseek($file, -1, SEEK_END); while (($pos = ftell($file)) > 0) { $actual .= fgetc($file); fseek($file, -2, SEEK_CUR); } $actual .= fgetc($file); fclose($file); $this->assertEquals($expected, $actual); } public function testGetContentsOfFileWithRef() { $c = $this->getRepository(); $file = sprintf('git://%s/test.txt', TESTS_REPO_PATH_1); $commit1 = $c->writeFile('test.txt', 'Test 1'); $this->assertEquals('Test 1', file_get_contents($file)); $this->assertEquals('Test 1', file_get_contents($file.'#HEAD')); $this->assertEquals('Test 1', file_get_contents($file.'#'.$commit1)); $commit2 = $c->writeFile('test.txt', 'Test 2'); $this->assertEquals('Test 2', file_get_contents($file)); $this->assertEquals('Test 2', file_get_contents($file.'#HEAD')); $this->assertEquals('Test 2', file_get_contents($file.'#'.$commit2)); $this->assertEquals('Test 1', file_get_contents($file.'#HEAD^')); $this->assertEquals('Test 1', file_get_contents($file.'#'.$commit1)); $commit3 = $c->writeFile('test.txt', 'Test 3'); $this->assertEquals('Test 3', file_get_contents($file)); $this->assertEquals('Test 3', file_get_contents($file.'#HEAD')); $this->assertEquals('Test 3', file_get_contents($file.'#'.$commit3)); $this->assertEquals('Test 2', file_get_contents($file.'#HEAD^')); $this->assertEquals('Test 2', file_get_contents($file.'#'.$commit2)); $this->assertEquals('Test 1', file_get_contents($file.'#HEAD^^')); $this->assertEquals('Test 1', file_get_contents($file.'#'.$commit1)); } public function testGetContentsOfDirectory() { $c = $this->getRepository(); $dir = sprintf('git://%s', TESTS_REPO_PATH_1); $this->assertEquals(Helper::normalizeNewLines("tree HEAD: file_0.txt file_1.txt file_2.txt file_3.txt file_4.txt"), Helper::normalizeNewLines(file_get_contents($dir))); $c->removeFile('file_0.txt'); $c->renameFile('file_1.txt', 'file_x.txt'); $this->assertEquals(Helper::normalizeNewLines("tree HEAD: file_2.txt file_3.txt file_4.txt file_x.txt"), Helper::normalizeNewLines(file_get_contents($dir))); $this->assertEquals(Helper::normalizeNewLines("tree HEAD^: file_1.txt file_2.txt file_3.txt file_4.txt"), Helper::normalizeNewLines(file_get_contents($dir.'#HEAD^'))); $this->assertEquals(Helper::normalizeNewLines("tree HEAD^^: file_0.txt file_1.txt file_2.txt file_3.txt file_4.txt"), Helper::normalizeNewLines(file_get_contents($dir.'#HEAD^^'))); } }