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