<?php

declare(strict_types=1);
namespace Tests\git2;
use git2\git;
use git2\git_error_code;
use git2\git_libgit2_opt_t;
use PHPUnit\Framework\TestCase;

final class LibGitTest extends TestCase
{

	public function testInit(): void
	{
		$this->assertSame(1, git::libgit2_init());
		$this->assertSame(2, git::libgit2_init());
	}

	public function testVersion(): void
	{
		$this->assertSame(git_error_code::OK, git::libgit2_version($major, $minor, $rev));
		$this->assertSame(1, $major);
		$this->assertSame(3, $minor);
		$this->assertSame(0, $rev);
	}

	public function testShutdown(): void
	{
		$this->assertSame(1, git::libgit2_shutdown());
		$this->assertSame(0, git::libgit2_shutdown());
	}

	public function testOptions(): void
	{
		$this->assertSame(git_error_code::OK, git::libgit2_opts(git_libgit2_opt_t::GET_MWINDOW_SIZE, $num));
		$this->assertGreaterThan(0, $num);

		$this->assertSame(git_error_code::OK, git::libgit2_opts(git_libgit2_opt_t::GET_MWINDOW_MAPPED_LIMIT, $num));
		$this->assertGreaterThanOrEqual(0, $num);

		$this->assertSame(git_error_code::OK, git::libgit2_opts(git_libgit2_opt_t::GET_MWINDOW_FILE_LIMIT, $num));
		$this->assertGreaterThanOrEqual(0, $num);

		$this->assertSame(git_error_code::OK, git::libgit2_opts(git_libgit2_opt_t::GET_PACK_MAX_OBJECTS, $num));
		$this->assertTrue($num === -1 || $num > 0);
	}

	public function testFeatures(): void
	{
		$this->assertGreaterThanOrEqual(0, git::libgit2_features());
	}

}