ThreeKingdomsSlingshot/Assets/Tests/PlayMode/UIThemeTests.cs

49 lines
2.4 KiB
C#

using NUnit.Framework;
using UnityEngine;
using UnityEngine.UI;
namespace TKS.Tests
{
/// <summary>UI 테마(PD #1100) — 팩 부품이 실려 있고 신규 제작(B) 스프라이트가 같은 id 를 코드 변경 없이 치환한다.</summary>
public class UIThemeTests
{
[TearDown]
public void TearDown()
{
UITheme.Use(null); // 다음 테스트는 Resources 테마로
}
[Test]
public void Theme_PackParts_AndSamgukReplacesById()
{
var theme = Resources.Load<UITheme>(UITheme.ResourcePath);
Assert.IsNotNull(theme, "Resources/UI/UITheme 없음 — 메뉴 TKS/Import UI Theme");
foreach (var skin in new[] { "card", "button", "popup", "bar_bg", "bar_fill", "tab_focus", "skill_btn", "hp_bg" })
Assert.IsNotNull(theme.Skin(skin), "스킨 " + skin);
foreach (var icon in new[] { "cur_gold", "cur_gem", "cur_stamina", "tab_hero", "chest_gold", "gear_sword", "star_on" })
Assert.IsNotNull(theme.Icon(icon), "아이콘 " + icon);
Assert.IsNotNull(theme.titleFont, "제목 폰트");
// 신규 제작 납품 = 같은 id 의 samguk 칸 → 아이콘·스킨 모두 그 스프라이트로(팩은 보존)
var copy = Object.Instantiate(theme);
var tex = new Texture2D(8, 8);
var sp = Sprite.Create(tex, new Rect(0, 0, 8, 8), new Vector2(0.5f, 0.5f), 100f);
var pack = copy.IconEntryOf("cur_gold").pack; // 납품 반영 뒤에도 팩 원본 칸은 그대로(Icon() = 치환본)
copy.IconEntryOf("cur_gold").samguk = sp;
copy.Skin("card").samguk = sp;
UITheme.Use(copy);
Assert.AreSame(sp, UISkin.Icon("cur_gold"), "아이콘 치환");
Assert.AreSame(pack, copy.IconEntryOf("cur_gold").pack, "팩 원본 보존");
var go = new GameObject("ThemeProbe", typeof(RectTransform));
var img = go.AddComponent<Image>();
Assert.IsTrue(UISkin.Apply(img, "card"));
Assert.AreSame(sp, img.sprite, "스킨 치환");
var ic = UISkin.IconImage(go.transform, "cur_gold", Vector2.zero, Vector2.zero, Vector2.zero, Vector2.one * 10f);
Assert.AreSame(sp, ic.sprite);
Object.DestroyImmediate(go);
Object.DestroyImmediate(copy);
Object.DestroyImmediate(tex);
}
}
}