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

133 lines
5.0 KiB
C#

using System.Linq;
using NUnit.Framework;
using UnityEngine;
using UnityEngine.EventSystems;
using UnityEngine.UI;
using Vanguard.Api;
using Vanguard.Api.Contracts;
using Vanguard.App;
using Vanguard.Auth;
using Vanguard.Meta;
using Vanguard.State;
using Vanguard.UI;
namespace Vanguard.Tests
{
public sealed class ClientSmokeTests
{
[Test]
public void Client_Views_Build()
{
var config = new AppConfig();
config.Load();
var tokens = new TokenStore();
var api = new ApiClient(config, tokens);
var player = new PlayerState();
var auth = new AuthService(api, tokens, player);
var meta = new MetaService(api, player);
var canvas = UiKit.CreateCanvas("Test Canvas");
var login = new LoginView(canvas.transform, config, auth, () => { });
login.Show("smoke");
var lobby = new MetaView(
canvas.transform, auth, player, () => { },
() => { }, () => { }, () => { }, () => { }, () => { });
var onboarding = new OnboardingView(
canvas.transform, auth, meta, () => { }, () => { });
var decks = new DeckBuilderView(
canvas.transform, meta, auth, () => { }, _ => { }, _ => { });
var queue = new QueueView(
canvas.transform, meta, auth, () => { }, _ => { });
var store = new StoreView(
canvas.transform, meta, auth, player, () => { });
var history = new HistoryView(
canvas.transform, meta, auth, () => { });
var battle = new BattleView(
canvas.transform, meta, () => { });
Assert.IsNotNull(GameObject.Find("LoginScreen"));
Assert.IsTrue(Exists("MetaScreen"));
Assert.IsTrue(Exists("OnboardingScreen"));
Assert.IsTrue(Exists("DeckBuilderScreen"));
Assert.IsTrue(Exists("StoreScreen"));
Assert.IsTrue(Exists("HistoryScreen"));
Assert.IsTrue(Exists("ReplayScreen"));
Assert.IsTrue(Exists("QueueScreen"));
Assert.IsTrue(Exists("BattleScreen"));
Assert.IsNotNull(
Resources.Load<Texture2D>("CardArt/td01_005"),
"TD01 card art is not imported");
var artGo = new GameObject("ArtProbe", typeof(RectTransform), typeof(Image));
var artImage = artGo.GetComponent<Image>();
CardImageService.Apply(artImage, "td01_005", null);
Assert.IsNotNull(artImage.sprite, "CardImageService did not load real card art");
Object.DestroyImmediate(artGo);
// После смены сцены старые views не должны реагировать на PlayerState.
lobby.Dispose();
store.Dispose();
player.Apply(new MeResponse
{
UserName = "after-dispose",
Gold = 10,
Dust = 2,
Tokens = 1,
});
Cleanup();
}
[Test]
public void Localization_Translates_Static_And_Dynamic_Strings()
{
Loc.SetLanguage(UiLanguage.Ru);
Assert.AreEqual("Коллекция", Loc.Translate("Коллекция"));
Loc.SetLanguage(UiLanguage.En);
Assert.AreEqual("Collection", Loc.Translate("Коллекция"));
Assert.AreEqual("Grade: all", Loc.Translate("Ранг: все"));
Assert.AreEqual("Cards in collection: 12", Loc.Translate("Карт в коллекции: 12"));
Assert.AreEqual("Victory!", Loc.Translate("Победа!"));
Assert.AreEqual("Sentinel: yes · Boost: no", Loc.Translate("Sentinel: да · Boost: нет"));
Loc.SetLanguage(UiLanguage.Ru);
var go = new GameObject("LocalizedLabel", typeof(RectTransform), typeof(Text));
var label = go.GetComponent<Text>();
var localized = go.AddComponent<LocalizedText>();
localized.Initialize("Коллекция");
Assert.AreEqual("Коллекция", label.text);
Loc.SetLanguage(UiLanguage.En);
Assert.AreEqual("Collection", label.text);
label.text = "Магазин";
localized.ApplyNow();
Assert.AreEqual("Store", label.text);
Loc.SetLanguage(UiLanguage.Ru);
Assert.AreEqual("Магазин", label.text);
Object.DestroyImmediate(go);
}
private static bool Exists(string name) =>
Resources.FindObjectsOfTypeAll<GameObject>().Any(go => go.name == name);
private static void Cleanup()
{
var canvas = GameObject.Find("Test Canvas");
if (canvas != null)
Object.DestroyImmediate(canvas);
var eventSystem = Object.FindAnyObjectByType<EventSystem>();
if (eventSystem != null)
Object.DestroyImmediate(eventSystem.gameObject);
}
}
}