<?php
declare(strict_types=1);
namespace Tests\git2;
use git2\git;
use git2\git_status_opt_t;
use git2\git_status_options;
use git2\git_status_show_t;
use git2\git_status_t;
final class StatusTest extends GitTestCase
{
public function testStatus(): void
{
git::repository_init($repo, $dir = $this->mkdir('status'), false);
$this->assertOK(git::status_list_new($list, $repo, null));
$this->assertSame(0, git::status_list_entrycount($list));
touch($dir . '/foo');
$this->assertOK(git::status_list_new($list, $repo, null));
$this->assertSame(1, git::status_list_entrycount($list));
$entry = git::status_byindex($list, 0);
$this->assertNotNull($entry);
$this->assertSame(git_status_t::WT_NEW, $entry->status);
$this->assertOK(git::status_file($status, $repo, 'foo'));
$this->assertSame(git_status_t::WT_NEW, $status);
$calls = [];
$this->assertOK(git::status_foreach($repo, function(string $path, int $status_flags) use(&$calls): void {
$calls[] = [$path, $status_flags];
}));
$this->assertSame([['foo', git_status_t::WT_NEW]], $calls);
$this->assertOK(git::status_options_init($opts, git_status_options::VERSION));
$this->assertInstanceOf(git_status_options::class, $opts);
$opts->show = git_status_show_t::INDEX_AND_WORKDIR;
$opts->flags = git_status_opt_t::DISABLE_PATHSPEC_MATCH | git_status_opt_t::INCLUDE_UNTRACKED;
$calls = [];
$this->assertOK(git::status_foreach_ext($repo, $opts, function(string $path, int $status_flags) use(&$calls): void {
$calls[] = [$path, $status_flags];
}));
$this->assertSame([['foo', git_status_t::WT_NEW]], $calls);
$this->assertOK(git::status_should_ignore($ignored, $repo, 'foo'));
$this->assertFalse($ignored);
}
}