Skip to content

Commit cb5226c

Browse files
committed
test: 各種Provider及びAssetFilterのユニットテストを追加
- AddressBasedProvider関連のテスト - AddressableAssetGroupNameBasedProvider関連のテスト - LabelProvider及びVersionProviderのテスト - AssetFilter実装のテスト - READMEの微修正
1 parent 8a01f80 commit cb5226c

20 files changed

+1618
-4
lines changed

Assets/SmartAddresser/Tests/Editor/Core/Models/LayoutRules/LabelRules.meta

Lines changed: 8 additions & 0 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.
Lines changed: 129 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,129 @@
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 AddressBasedLabelProviderTest
10+
{
11+
private AddressBasedLabelProvider _provider;
12+
private ILabelProvider _labelProvider;
13+
14+
[SetUp]
15+
public void Setup()
16+
{
17+
_provider = new AddressBasedLabelProvider();
18+
_labelProvider = _provider;
19+
}
20+
21+
[Test]
22+
public void Provide_WithoutRegex_ReturnsAddress()
23+
{
24+
_provider.ReplaceWithRegex = false;
25+
_labelProvider.Setup();
26+
27+
var result = _labelProvider.Provide("dummy/path", typeof(object), false, "character/player", null);
28+
29+
Assert.That(result, Is.EqualTo("character/player"));
30+
}
31+
32+
[Test]
33+
public void Provide_WithRegex_ReturnsModifiedAddress()
34+
{
35+
_provider.ReplaceWithRegex = true;
36+
_provider.Pattern = @"character/(.+)";
37+
_provider.Replacement = "$1_label";
38+
_labelProvider.Setup();
39+
40+
var result = _labelProvider.Provide("dummy/path", typeof(object), false, "character/player", null);
41+
42+
Assert.That(result, Is.EqualTo("player_label"));
43+
}
44+
45+
[Test]
46+
public void Provide_WithNullAddress_ReturnsNull()
47+
{
48+
_labelProvider.Setup();
49+
50+
var result = _labelProvider.Provide("dummy/path", typeof(object), false, null, null);
51+
52+
Assert.That(result, Is.Null);
53+
}
54+
55+
[Test]
56+
public void Provide_WithEmptyAddress_ReturnsNull()
57+
{
58+
_labelProvider.Setup();
59+
60+
var result = _labelProvider.Provide("dummy/path", typeof(object), false, "", null);
61+
62+
Assert.That(result, Is.Null);
63+
}
64+
65+
[Test]
66+
public void Provide_WithInvalidRegex_ReturnsNull()
67+
{
68+
_provider.ReplaceWithRegex = true;
69+
_provider.Pattern = "[";
70+
_provider.Replacement = "replacement";
71+
_labelProvider.Setup();
72+
73+
var result = _labelProvider.Provide("dummy/path", typeof(object), false, "character/player", null);
74+
75+
Assert.That(result, Is.Null);
76+
}
77+
78+
[Test]
79+
public void GetDescription_WithoutRegex_ReturnsBasicDescription()
80+
{
81+
_provider.ReplaceWithRegex = false;
82+
83+
var description = _labelProvider.GetDescription();
84+
85+
Assert.That(description, Is.EqualTo("Source: Address"));
86+
}
87+
88+
[Test]
89+
public void GetDescription_WithRegex_ReturnsDetailedDescription()
90+
{
91+
_provider.ReplaceWithRegex = true;
92+
_provider.Pattern = @"^prefix/";
93+
_provider.Replacement = "";
94+
95+
var description = _labelProvider.GetDescription();
96+
97+
Assert.That(description, Is.EqualTo("Source: Address, Regex: Replace \"^prefix/\" with \"\""));
98+
}
99+
100+
[Test]
101+
public void Provide_WithAddressableAssetGroup_IgnoresGroup()
102+
{
103+
// AddressBasedLabelProviderはAddressableAssetGroupを使用しない
104+
_labelProvider.Setup();
105+
var group = ScriptableObject.CreateInstance<AddressableAssetGroup>();
106+
107+
var result = _labelProvider.Provide("dummy/path", typeof(object), false, "test/address", group);
108+
109+
Assert.That(result, Is.EqualTo("test/address"));
110+
111+
UnityEngine.Object.DestroyImmediate(group);
112+
}
113+
114+
[Test]
115+
public void Provide_WithComplexRegexPattern_WorksCorrectly()
116+
{
117+
_provider.ReplaceWithRegex = true;
118+
_provider.Pattern = @"assets/([^/]+)/([^/]+)";
119+
_provider.Replacement = "$2_$1";
120+
_labelProvider.Setup();
121+
122+
var result1 = _labelProvider.Provide("dummy", typeof(object), false, "assets/textures/player", null);
123+
var result2 = _labelProvider.Provide("dummy", typeof(object), false, "assets/models/enemy", null);
124+
125+
Assert.That(result1, Is.EqualTo("player_textures"));
126+
Assert.That(result2, Is.EqualTo("enemy_models"));
127+
}
128+
}
129+
}

Assets/SmartAddresser/Tests/Editor/Core/Models/LayoutRules/LabelRules/AddressBasedLabelProviderTest.cs.meta

Lines changed: 11 additions & 0 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.
Lines changed: 166 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,166 @@
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+
}

Assets/SmartAddresser/Tests/Editor/Core/Models/LayoutRules/LabelRules/AddressableAssetGroupNameBasedLabelProviderTest.cs.meta

Lines changed: 11 additions & 0 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

Assets/SmartAddresser/Tests/Editor/Core/Models/LayoutRules/VersionRules.meta

Lines changed: 8 additions & 0 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

0 commit comments

Comments
 (0)