<?php

namespace goodboyalex\php_components_pack\tests\classes;

use Exception;
use goodboyalex\php_components_pack\classes\Tuple;
use PHPUnit\Framework\TestCase;

class TupleTest extends TestCase
{
    public function testTuple ()
    {
        $this->PrepareForTest();

        $tuple = new Tuple(1, 'string', ['array1', 'array2', 'array3']);

        // Проверка на то, что возвращает значение кортежа при запросе значения по индексу
        $this->assertEquals(1, $tuple->Get(0));
        $this->assertEquals('string', $tuple->Get(1));
        $this->assertEquals(['array1', 'array2', 'array3'], $tuple->Get(2));

        // Проверка на то, что возвращает переменные
        [$firstElement, $secondElement, $thirdElement] = $tuple;
        $this->assertEquals(1, $firstElement);
        $this->assertEquals('string', $secondElement);
        $this->assertEquals(['array1', 'array2', 'array3'], $thirdElement);

        // Проверка на то, что выбрасывает исключение при попытке задать данные в кортеж после его создания
        $this->expectException(Exception::class);
        $tuple[] = 'New data';
    }

    private function PrepareForTest (): void
    {
        require_once __DIR__ . '/../../sources/classes/Tuple.php';
    }
}