20250712 1.1.1 Beta 4
This commit is contained in:
@@ -2,70 +2,90 @@
|
||||
|
||||
namespace goodboyalex\php_components_pack\tests\extensions;
|
||||
|
||||
use goodboyalex\php_components_pack\extensions\GUIDExtension;
|
||||
use goodboyalex\php_components_pack\exceptions\TypeException;
|
||||
use goodboyalex\php_components_pack\extensions\TypeExtension;
|
||||
use goodboyalex\php_components_pack\tests\data\MenuCssClassModel;
|
||||
use goodboyalex\php_components_pack\tests\data\MenuItemModel;
|
||||
use goodboyalex\php_components_pack\tests\data\MenuItems;
|
||||
use goodboyalex\php_components_pack\tests\data\MenuModel;
|
||||
use goodboyalex\php_components_pack\tests\data\A;
|
||||
use goodboyalex\php_components_pack\tests\data\B;
|
||||
use goodboyalex\php_components_pack\tests\data\C;
|
||||
use goodboyalex\php_components_pack\tests\data\D;
|
||||
use PHPUnit\Framework\TestCase;
|
||||
|
||||
class TypeExtensionTest extends TestCase
|
||||
{
|
||||
public function testFromArray ()
|
||||
{
|
||||
|
||||
}
|
||||
|
||||
public function testToArray ()
|
||||
{
|
||||
// Подготавливаем данные к тестированию
|
||||
$this->PrepareForTest();
|
||||
|
||||
$menu = new MenuModel();
|
||||
$menu->Id = GUIDExtension::Generate();
|
||||
$menu->Name = 'Menu';
|
||||
$menu->Description = 'Description';
|
||||
$menu->AllowSubMenu = true;
|
||||
$menu->Css = new MenuCssClassModel();
|
||||
$menu->Css->MenuClass = "menuClass";
|
||||
$menu->Css->ItemClass = "itemClass";
|
||||
$menu->Css->SubItemClass = "subItemClass";
|
||||
$menu->Css->ItemSubMenuClass = "itemSubMenuClass";
|
||||
// Зададим имя файла
|
||||
$fileName = __DIR__ . "/class.txt";
|
||||
|
||||
$menuItem1 = new MenuItemModel();
|
||||
$menuItem1->Id = GUIDExtension::Generate();
|
||||
$menuItem1->Name = 'MenuItem1';
|
||||
$menuItem1->Description = 'Description';
|
||||
$menuItem1->Order = 1;
|
||||
$menuItem1->ParentId = GUIDExtension::GUIDEmpty;
|
||||
$menuItem1->URL = 'https://www.google.com';
|
||||
$menu->Items->AddItem($menuItem1);
|
||||
$menuItem2 = new MenuItemModel();
|
||||
$menuItem2->Id = GUIDExtension::Generate();
|
||||
$menuItem2->Name = 'MenuItem2';
|
||||
$menuItem2->Description = 'Description';
|
||||
$menuItem2->ParentId = $menuItem1->Id;
|
||||
$menuItem2->Order = 1;
|
||||
$menuItem2->URL = 'https://www.google.ru';
|
||||
$menu->Items->AddItem($menuItem2);
|
||||
// Если файл не найден
|
||||
if (!file_exists($fileName))
|
||||
// - то завершаем работу
|
||||
die("The test data file could not be found or has not yet passed the ToArray test! / Файл с данными для тестирования не найден или не пройдено ещё тестирование ToArray!");
|
||||
|
||||
$closure = fn (object $class) => $class::class == MenuItems::class ? $class->Serialize()
|
||||
: TypeExtension::ToArray($class, TypeExtension::DEFAULT_TO_ARRAY_ON_CLASS());
|
||||
// Считываем данные из файла и преобразуем в массив
|
||||
$array = json_decode(file_get_contents($fileName), true);
|
||||
|
||||
$array = TypeExtension::ToArray($menu, $closure);
|
||||
// Преобразуем в объект
|
||||
try {
|
||||
$class = TypeExtension::FromArray($array, D::CLOSURE_FROM_ARRAY());
|
||||
}
|
||||
catch (TypeException $e) {
|
||||
// - если ошибка, то выводим её и завершаем работу
|
||||
die($e->getMessage());
|
||||
}
|
||||
|
||||
file_put_contents(__DIR__ . "/class.txt", json_encode($array, JSON_PRETTY_PRINT));
|
||||
var_dump($array);
|
||||
die();
|
||||
// Проверяем
|
||||
$this->assertEquals(D::class, $class::class);
|
||||
$this->assertEquals(A::class, $class->a::class);
|
||||
$this->assertEquals(B::class, $class->b::class);
|
||||
$this->assertEquals(9876, $class->b->b);
|
||||
$this->assertEquals(C::class, $class->c::class);
|
||||
$this->assertEquals(54321, $class->c->intC);
|
||||
$this->assertEquals('test_string', $class->stringD);
|
||||
}
|
||||
|
||||
private function PrepareForTest (): void
|
||||
{
|
||||
require_once __DIR__ . '/../../sources/exceptions/TypeException.php';
|
||||
require_once __DIR__ . '/../../sources/extensions/TypeExtension.php';
|
||||
require_once __DIR__ . '/../data/MenuItemModel.php';
|
||||
require_once __DIR__ . '/../data/MenuCssClassModel.php';
|
||||
require_once __DIR__ . '/../data/MenuItems.php';
|
||||
require_once __DIR__ . '/../data/MenuModel.php';
|
||||
require_once __DIR__ . '/../data/A.php';
|
||||
require_once __DIR__ . '/../data/B.php';
|
||||
require_once __DIR__ . '/../data/C.php';
|
||||
require_once __DIR__ . '/../data/D.php';
|
||||
}
|
||||
|
||||
public function testToArray ()
|
||||
{
|
||||
// Подготавливаем данные к тестированию
|
||||
$this->PrepareForTest();
|
||||
|
||||
// Создаём тестовый класс
|
||||
$class = new D ('test_string', 12345, true, new A("test_string_A", 6789, false),
|
||||
new B("test_string_B", 9876, "false"), new C("test_string_C", 54321, true));
|
||||
|
||||
// Преобразуем в массив
|
||||
try {
|
||||
$array = TypeExtension::ToArray($class, D::CLOSURE_TO_ARRAY());
|
||||
}
|
||||
catch (TypeException $e) {
|
||||
// - если ошибка, то выводим её и завершаем работу
|
||||
die($e->getMessage());
|
||||
}
|
||||
|
||||
// Сохраняем массив в файл (для тестирования FromArray)
|
||||
file_put_contents(__DIR__ . "/class.txt", json_encode($array, JSON_PRETTY_PRINT));
|
||||
|
||||
// Проверяем
|
||||
$this->assertEquals(D::class, $array['type_class']);
|
||||
$this->assertEquals(A::class, $array['a']['type_class']);
|
||||
$this->assertEquals(B::class, $array['b']['type_class']);
|
||||
$this->assertEquals(9876, $array['b']['b']);
|
||||
$this->assertEquals(C::class, $array['c']['type_class']);
|
||||
$this->assertEquals('test_string', $array['stringD']);
|
||||
$this->assertEquals(12345, $array['intD']);
|
||||
$this->assertTrue($array['boolD']);
|
||||
}
|
||||
}
|
||||
|
Reference in New Issue
Block a user