VanguardReMaster/client/Assets/Vanguard/Tests/Editor/CardOverlayTests.cs

102 lines
3.7 KiB
C#

using System.Collections.Generic;
using System.Linq;
using NUnit.Framework;
using UnityEngine;
using UnityEngine.EventSystems;
using UnityEngine.UI;
using Vanguard.Board3D;
using Vanguard.Shared.Protocol;
using Vanguard.UI;
using Vanguard.UI.Overlays;
namespace Vanguard.Tests
{
public sealed class CardOverlayTests
{
[Test]
public void Zone_Content_Shows_Last_Added_First_And_Hides_Opponent_Hand()
{
var first = Card("BT01/001EN", 1);
var last = Card("BT01/002EN", 2);
var player = new PlayerView
{
Index = 0,
Hand = new List<CardView> { first, last },
HandCount = 2,
Drop = new List<CardView> { first, last },
FaceUpDamage = new List<CardView> { first },
FaceDownDamage = 2,
Soul = new List<CardView> { first, last },
};
var drop = CardZoneContent.Build(player, viewer: 0, BoardZone.Drop);
Assert.AreSame(last, drop.Entries[0].Card);
var ownHand = CardZoneContent.Build(player, viewer: 0, BoardZone.Hand);
Assert.AreSame(last, ownHand.Entries[0].Card);
var opponentHand = CardZoneContent.Build(player, viewer: 1, BoardZone.Hand);
Assert.AreEqual(2, opponentHand.Entries.Count);
Assert.IsTrue(opponentHand.Entries.All(entry => entry.Hidden));
var damage = CardZoneContent.Build(player, viewer: 0, BoardZone.Damage);
Assert.AreEqual(3, damage.Entries.Count);
Assert.IsTrue(damage.Entries.Skip(1).All(entry => entry.Hidden));
}
[Test]
public void CardList_Opens_Detail_And_Returns_To_List()
{
var canvas = UiKit.CreateCanvas("Overlay Test Canvas");
var overlays = new OverlayNavigationService(canvas.transform, _ => null);
try
{
var request = new CardListRequest("Тест", 0, BoardZone.Drop);
request.Entries.Add(new CardListEntry(Card("BT01/001EN", 1)));
request.Entries.Add(new CardListEntry(null, true, "Закрытая карта"));
overlays.OpenList(request);
Assert.IsTrue(overlays.IsOpen);
Assert.IsTrue(Exists("CardListView"));
var tile = Resources.FindObjectsOfTypeAll<Button>()
.FirstOrDefault(button => button.name.StartsWith("Card_"));
Assert.IsNotNull(tile);
tile.onClick.Invoke();
Assert.IsTrue(Exists("CardDetailOverlay"));
var back = Resources.FindObjectsOfTypeAll<Button>()
.FirstOrDefault(button => button.name == "Back");
Assert.IsNotNull(back);
back.onClick.Invoke();
Assert.IsTrue(Exists("CardListView"));
Assert.IsFalse(Exists("CardDetailOverlay"));
}
finally
{
overlays.Dispose();
Object.DestroyImmediate(canvas.gameObject);
var eventSystem = Object.FindAnyObjectByType<EventSystem>();
if (eventSystem != null)
Object.DestroyImmediate(eventSystem.gameObject);
}
}
private static CardView Card(string id, int instanceId) => new CardView
{
PrintingId = id,
InstanceId = instanceId,
FaceUp = true,
Power = 8000,
BasePower = 8000,
Critical = 1,
BaseCritical = 1,
};
private static bool Exists(string name) =>
Resources.FindObjectsOfTypeAll<GameObject>()
.Any(go => go.name == name && go.activeInHierarchy);
}
}