<?php
declare(strict_types=1);
namespace Tests\git2;
use git2\git;
use git2\git_blob;
use git2\git_blob_filter_flag_t;
use git2\git_blob_filter_options;
use git2\git_repository;
use git2\git_writestream;
final class BlobTest extends GitTestCase
{
public function testCreateFromBuffer(): void
{
$dir = $this->mkdir('create_from_buffer');
git::repository_init($repo, $dir, false);
$this->assertOK(git::blob_create_from_buffer($id, $repo, 'foo'));
$this->assertSame('19102815663d23f8b75a47e7a01965dcdc96468c', git::oid_tostr_s($id));
}
public function testCreateFromStream(): void
{
$dir = $this->mkdir('create_from_buffer');
git::repository_init($repo, $dir, false);
$this->assertOK(git::blob_create_from_stream($stream, $repo, null));
$this->assertInstanceOf(git_writestream::class, $stream);
$stream->write('foo');
$this->assertOK(git::blob_create_from_stream_commit($id, $stream));
$this->assertOK(git::blob_lookup($blob, $repo, $id));
$this->assertInstanceOf(git_blob::class, $blob);
$this->assertSame('foo', git::blob_rawcontent($blob));
}
public function testCreateFromDisk(): void
{
$dir = $this->mkdir('create_from_disk');
git::repository_init($repo, $dir, false);
file_put_contents($dir . '/foo', 'foo');
$this->assertOK(git::blob_create_from_disk($id, $repo, $dir . '/foo'));
$this->assertSame('19102815663d23f8b75a47e7a01965dcdc96468c', git::oid_tostr_s($id));
}
public function testCreateFromWorkdir(): void
{
$dir = $this->mkdir('create_from_workdir');
git::repository_init($repo, $dir, false);
file_put_contents($dir . '/foo', 'foo');
$this->assertOK(git::blob_create_from_workdir($id, $repo, 'foo'));
$this->assertSame('19102815663d23f8b75a47e7a01965dcdc96468c', git::oid_tostr_s($id));
}
public function testLookup(): void
{
$dir = $this->mkdir('lookup');
git::repository_init($repo, $dir, false);
$this->assertOK(git::blob_create_from_buffer($id, $repo, 'foo'));
$this->assertOK(git::blob_lookup($blob, $repo, $id));
$this->assertSame(3, git::blob_rawsize($blob));
$this->assertSame('foo', git::blob_rawcontent($blob));
$this->assertFalse(git::blob_is_binary($blob));
$this->assertInstanceOf(git_repository::class, git::blob_owner($blob));
}
public function testFilterOptionsInit(): void
{
$this->assertOK(git::blob_filter_options_init($opts, git_blob_filter_options::VERSION));
$this->assertInstanceOf(git_blob_filter_options::class, $opts);
$this->assertSame(git_blob_filter_options::VERSION, $opts->version);
$this->assertSame(1, $opts->flags);
$this->assertTrue(git::oid_is_zero($opts->attr_commit_id));
$opts->flags = git_blob_filter_flag_t::CHECK_FOR_BINARY | git_blob_filter_flag_t::NO_SYSTEM_ATTRIBUTES;
$this->assertOK(git::oid_fromstr($opts->attr_commit_id, '0000000000000000000000000000000000000001'));
$this->assertSame(git_blob_filter_flag_t::CHECK_FOR_BINARY | git_blob_filter_flag_t::NO_SYSTEM_ATTRIBUTES, $opts->flags);
$this->assertSame('0000000000000000000000000000000000000001', git::oid_tostr_s($opts->attr_commit_id));
}
}