49 lines
2.4 KiB
C#
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);
|
|
}
|
|
}
|
|
}
|