<?php

declare(strict_types=1);
namespace Tests\git2;
use git2\git;
use git2\git_filter_flag_t;
use git2\git_filter_list;
use git2\git_filter_mode_t;

final class FilterTest extends GitTestCase
{

	public function testFilter(): void
	{
		git::repository_init($repo, $dir = $this->mkdir('filter'), false);
		$this->assertOK(git::filter_list_load($filters, $repo, null, 'foo', git_filter_mode_t::TO_WORKTREE, git_filter_flag_t::DEFAULT));
		$this->assertInstanceOf(git_filter_list::class, $filters);
		$this->assertFalse(git::filter_list_contains($filters, 'foo'));

		git::blob_create_from_buffer($id, $repo, 'foo');
		git::blob_lookup($blob, $repo, $id);
		$this->assertOK(git::filter_list_apply_to_blob($buf, $filters, $blob));
		$this->assertSame('foo', (string) $buf);

		$this->assertOK(git::filter_list_apply_to_buffer($buf2, $filters, 'foo'));
		$this->assertSame('foo', (string) $buf2);

		file_put_contents($dir . '/foo', 'foo');
		$this->assertOK(git::filter_list_apply_to_file($buf3, $filters, $repo, 'foo'));
		$this->assertSame('foo', (string) $buf3);
	}

}