Danro-Jump/Assets/Tests/EditMode/Editor/ModalStackControllerTests.cs
Danil Iarosh c1b72854f4 Implement prize QR and service UI polish
Подробные изменения:

- Добавлена система призовых уровней и выдачи призов с QR-контуром Telegram, шаблоном сообщения и генерацией QR без внешних библиотек.

- Доработаны сервисные настройки: действия кнопок, модальные окна, ввод с джойстика/клавиатуры, статистика, настройки призов и маршрутизация QR.

- Переработаны gameplay HUD и overlay-панели на UI Toolkit со спрайтовыми плашками, DEV BUILD-статистикой, экраном продолжения и экраном результата приза.

- Исправлены сценарии смерти, GameOver, продолжения игры, начисления очков за высоту и перехода в главное меню.

- Перенесены UI-шаблоны из Resources в Assets/UI, подключена Addressables-загрузка шаблонов настроек и standalone-стили для MainMenuModals.

- Добавлены EditMode/PlayMode тесты для призов, QR, arcade input, UI-модалок, scene flow, HUD и gameplay-сессии.

- Обновлены сцены, настройки Addressables, service settings database, документация и дорожная карта.

Проверки:

- Targeted EditMode QR/UI/settings: 23/23 passed

- Targeted UI templates/EditMode: 17/17 passed

- MainMenuUxmlTests: 3/3 passed

- Full EditMode: 129/129 passed

- PlayMode: 6/6 passed

- Runtime Addressables template load check: loaded=5

- Unity Console после финального refresh: 0 errors
2026-06-12 16:43:28 +03:00

60 lines
2.2 KiB
C#

using DanroJump.UI.Modals;
using NUnit.Framework;
using UnityEngine.UIElements;
namespace DanroJump.Tests.EditMode
{
public sealed class ModalStackControllerTests
{
[Test]
public void Open_StretchesTemplateHostLayerAndModalRoot()
{
var host = new TemplateContainer();
var layer = new VisualElement { name = "ModalLayer" };
var backdrop = new VisualElement { name = "ModalBackdrop" };
var modalRoot = new VisualElement { name = "ModalRoot" };
host.Add(layer);
layer.Add(backdrop);
layer.Add(modalRoot);
var stack = new ModalStackController(layer, backdrop);
var modal = new TestModalWindow(modalRoot);
stack.Open(modal);
Assert.That(host.style.position.value, Is.EqualTo(Position.Absolute));
Assert.That(host.pickingMode, Is.EqualTo(PickingMode.Ignore));
Assert.That(layer.style.display.value, Is.EqualTo(DisplayStyle.Flex));
Assert.That(layer.style.position.value, Is.EqualTo(Position.Absolute));
Assert.That(modalRoot.style.position.value, Is.EqualTo(Position.Absolute));
Assert.That(modalRoot.style.left.value.value, Is.EqualTo(0f));
Assert.That(modalRoot.style.right.value.value, Is.EqualTo(0f));
Assert.That(modalRoot.style.top.value.value, Is.EqualTo(0f));
Assert.That(modalRoot.style.bottom.value.value, Is.EqualTo(0f));
}
[Test]
public void Close_ClearsModalButtonFocusHighlight()
{
var modalRoot = new VisualElement { name = "ModalRoot" };
var button = new Button { name = "FocusedButton" };
button.AddToClassList("modal-button");
button.AddToClassList("modal-button--focused");
modalRoot.Add(button);
var modal = new TestModalWindow(modalRoot);
modal.Close();
Assert.That(button.ClassListContains("modal-button--focused"), Is.False);
}
private sealed class TestModalWindow : ModalWindowBase
{
public TestModalWindow(VisualElement root)
: base(root)
{
}
}
}
}