using NUnit.Framework; using UnityEngine; using UnityEngine.UI; namespace TKS.Tests { /// UI 테마(PD #1100) — 팩 부품이 실려 있고 신규 제작(B) 스프라이트가 같은 id 를 코드 변경 없이 치환한다. public class UIThemeTests { [TearDown] public void TearDown() { UITheme.Use(null); // 다음 테스트는 Resources 테마로 } [Test] public void Theme_PackParts_AndSamgukReplacesById() { var theme = Resources.Load(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(); 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); } } }