<?php
declare( strict_types=1 );

namespace WPDesk\Init\Tests\Binding;

use WPDesk\Init\Binding\Loader\ArrayDefinitions;
use WPDesk\Init\Tests\TestCase;

class ArrayBindingLoaderTest extends TestCase {

	public function test_loading_empty_bindings(): void {
		$a = new ArrayDefinitions([]);
		$this->assertEquals(0, iterator_count($a->load()));
	}

	public function test_loading_structured_bindings(): void {
		$a = new ArrayDefinitions([
			'hook' => [
				'bind1',
				'bind2',
			],
			'hook2' => [
				'bind3',
			]
		]);
		$this->assertEquals(
			[
				'hook' => [
					'bind1',
					'bind2',
				],
				'hook2' => [
					'bind3',
				]
			],
			iterator_to_array($a->load())
		);
	}

	public function test_loading_unstructured_bindings(): void {
		$a = new ArrayDefinitions([
			'bind1',
			'bind2',
			'hook' => 'bind3',
		]);
		$this->assertEquals(
			[
				'' => ['bind1', 'bind2'],
				'hook' => ['bind3'],
			],
			iterator_to_array($a->load())
		);

		$a = new ArrayDefinitions([
			'bind1',
			'not_a_hook' => 'bind2',
			'hook' => ['bind3'],
		]);
		$this->assertEquals(
			[
				'' => ['bind1'],
				'not_a_hook' => ['bind2'],
				'hook' => ['bind3'],
			],
			iterator_to_array($a->load())
		);
	}
}