1+ using System ;
2+ using NUnit . Framework ;
3+ using SmartAddresser . Editor . Core . Models . LayoutRules . LabelRules ;
4+ using UnityEditor . AddressableAssets . Settings ;
5+ using UnityEngine ;
6+
7+ namespace SmartAddresser . Tests . Editor . Core . Models . LayoutRules . LabelRules
8+ {
9+ internal sealed class AddressableAssetGroupNameBasedLabelProviderTest
10+ {
11+ private AddressableAssetGroupNameBasedLabelProvider _provider ;
12+ private ILabelProvider _labelProvider ;
13+
14+ [ SetUp ]
15+ public void Setup ( )
16+ {
17+ _provider = new AddressableAssetGroupNameBasedLabelProvider ( ) ;
18+ _labelProvider = _provider ;
19+ }
20+
21+ [ Test ]
22+ public void Provide_WithoutRegex_ReturnsGroupName ( )
23+ {
24+ _provider . ReplaceWithRegex = false ;
25+ _labelProvider . Setup ( ) ;
26+
27+ var group = ScriptableObject . CreateInstance < AddressableAssetGroup > ( ) ;
28+ group . Name = "TestGroup" ;
29+
30+ var result = _labelProvider . Provide ( "dummy/path" , typeof ( object ) , false , "dummy/address" , group ) ;
31+
32+ Assert . That ( result , Is . EqualTo ( "TestGroup" ) ) ;
33+
34+ UnityEngine . Object . DestroyImmediate ( group ) ;
35+ }
36+
37+ [ Test ]
38+ public void Provide_WithRegex_ReturnsModifiedGroupName ( )
39+ {
40+ _provider . ReplaceWithRegex = true ;
41+ _provider . Pattern = @"Group_(.+)" ;
42+ _provider . Replacement = "$1_Label" ;
43+ _labelProvider . Setup ( ) ;
44+
45+ var group = ScriptableObject . CreateInstance < AddressableAssetGroup > ( ) ;
46+ group . Name = "Group_Characters" ;
47+
48+ var result = _labelProvider . Provide ( "dummy/path" , typeof ( object ) , false , "dummy/address" , group ) ;
49+
50+ Assert . That ( result , Is . EqualTo ( "Characters_Label" ) ) ;
51+
52+ UnityEngine . Object . DestroyImmediate ( group ) ;
53+ }
54+
55+ [ Test ]
56+ public void Provide_WithNullGroup_ReturnsNull ( )
57+ {
58+ _labelProvider . Setup ( ) ;
59+
60+ var result = _labelProvider . Provide ( "dummy/path" , typeof ( object ) , false , "dummy/address" , null ) ;
61+
62+ Assert . That ( result , Is . Null ) ;
63+ }
64+
65+ [ Test ]
66+ public void Provide_WithEmptyGroupName_ReturnsNull ( )
67+ {
68+ _labelProvider . Setup ( ) ;
69+
70+ var group = ScriptableObject . CreateInstance < AddressableAssetGroup > ( ) ;
71+ group . Name = "" ;
72+
73+ var result = _labelProvider . Provide ( "dummy/path" , typeof ( object ) , false , "dummy/address" , group ) ;
74+
75+ Assert . That ( result , Is . Null ) ;
76+
77+ UnityEngine . Object . DestroyImmediate ( group ) ;
78+ }
79+
80+ [ Test ]
81+ public void Provide_WithInvalidRegex_ReturnsNull ( )
82+ {
83+ _provider . ReplaceWithRegex = true ;
84+ _provider . Pattern = "[{" ;
85+ _provider . Replacement = "replacement" ;
86+ _labelProvider . Setup ( ) ;
87+
88+ var group = ScriptableObject . CreateInstance < AddressableAssetGroup > ( ) ;
89+ group . Name = "TestGroup" ;
90+
91+ var result = _labelProvider . Provide ( "dummy/path" , typeof ( object ) , false , "dummy/address" , group ) ;
92+
93+ Assert . That ( result , Is . Null ) ;
94+
95+ UnityEngine . Object . DestroyImmediate ( group ) ;
96+ }
97+
98+ [ Test ]
99+ public void GetDescription_WithoutRegex_ReturnsBasicDescription ( )
100+ {
101+ _provider . ReplaceWithRegex = false ;
102+
103+ var description = _labelProvider . GetDescription ( ) ;
104+
105+ Assert . That ( description , Is . EqualTo ( "Source: Addressable Asset Group Name" ) ) ;
106+ }
107+
108+ [ Test ]
109+ public void GetDescription_WithRegex_ReturnsDetailedDescription ( )
110+ {
111+ _provider . ReplaceWithRegex = true ;
112+ _provider . Pattern = @"_v\d+$" ;
113+ _provider . Replacement = "" ;
114+
115+ var description = _labelProvider . GetDescription ( ) ;
116+
117+ Assert . That ( description , Is . EqualTo ( "Source: Addressable Asset Group Name, Regex: Replace \" _v\\ d+$\" with \" \" " ) ) ;
118+ }
119+
120+ [ Test ]
121+ public void Provide_IgnoresAssetPathAndType ( )
122+ {
123+ // AddressableAssetGroupNameBasedLabelProviderはアセットパスやタイプを使用しない
124+ _labelProvider . Setup ( ) ;
125+
126+ var group = ScriptableObject . CreateInstance < AddressableAssetGroup > ( ) ;
127+ group . Name = "TestGroup" ;
128+
129+ var result1 = _labelProvider . Provide ( "path1" , typeof ( Texture2D ) , false , "addr1" , group ) ;
130+ var result2 = _labelProvider . Provide ( "path2" , typeof ( GameObject ) , true , "addr2" , group ) ;
131+
132+ Assert . That ( result1 , Is . EqualTo ( "TestGroup" ) ) ;
133+ Assert . That ( result2 , Is . EqualTo ( "TestGroup" ) ) ;
134+
135+ UnityEngine . Object . DestroyImmediate ( group ) ;
136+ }
137+
138+ [ Test ]
139+ public void Provide_WithComplexRegexPattern_WorksCorrectly ( )
140+ {
141+ _provider . ReplaceWithRegex = true ;
142+ _provider . Pattern = @"^(Dev|Test|Prod)_(.+)_Group$" ;
143+ _provider . Replacement = "$2_$1" ;
144+ _labelProvider . Setup ( ) ;
145+
146+ var group1 = ScriptableObject . CreateInstance < AddressableAssetGroup > ( ) ;
147+ var group2 = ScriptableObject . CreateInstance < AddressableAssetGroup > ( ) ;
148+ var group3 = ScriptableObject . CreateInstance < AddressableAssetGroup > ( ) ;
149+ group1 . Name = "Dev_Characters_Group" ;
150+ group2 . Name = "Test_Weapons_Group" ;
151+ group3 . Name = "MainAssets" ;
152+
153+ var result1 = _labelProvider . Provide ( "dummy" , typeof ( object ) , false , "dummy" , group1 ) ;
154+ var result2 = _labelProvider . Provide ( "dummy" , typeof ( object ) , false , "dummy" , group2 ) ;
155+ var result3 = _labelProvider . Provide ( "dummy" , typeof ( object ) , false , "dummy" , group3 ) ;
156+
157+ Assert . That ( result1 , Is . EqualTo ( "Characters_Dev" ) ) ;
158+ Assert . That ( result2 , Is . EqualTo ( "Weapons_Test" ) ) ;
159+ Assert . That ( result3 , Is . EqualTo ( "MainAssets" ) ) ; // パターンにマッチしない
160+
161+ UnityEngine . Object . DestroyImmediate ( group1 ) ;
162+ UnityEngine . Object . DestroyImmediate ( group2 ) ;
163+ UnityEngine . Object . DestroyImmediate ( group3 ) ;
164+ }
165+ }
166+ }
0 commit comments