Skip to content

Commit b57d534

Browse files
Added partial tests for Serializable attribute assets;
1 parent f5eb141 commit b57d534

File tree

2 files changed

+109
-0
lines changed

2 files changed

+109
-0
lines changed

Engine/StapleCoreTests/Assets/AssetSerializationTests.cs

Lines changed: 104 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -45,6 +45,23 @@ internal class SimpleAsset : IStapleAsset
4545
public int notSerialized2 = 0;
4646
}
4747

48+
internal class SerializableAsset : IStapleAsset
49+
{
50+
[Serializable]
51+
public class InnerClass
52+
{
53+
[Serializable]
54+
public class InnerInnerClass
55+
{
56+
public int value = 3;
57+
}
58+
59+
public InnerInnerClass container;
60+
}
61+
62+
public InnerClass container;
63+
}
64+
4865
[Test]
4966
public void TestSerialize()
5067
{
@@ -136,5 +153,92 @@ public void TestDeserialize()
136153
Assert.That(newAsset.pathAsset.Guid, Is.EqualTo("valid path"));
137154
Assert.That(newAsset.enumValue, Is.EqualTo(asset.enumValue));
138155
}
156+
157+
[Test]
158+
public void TestSerializeSerializable()
159+
{
160+
TypeCacheRegistration.RegisterAll();
161+
162+
var asset = new SerializableAsset
163+
{
164+
container = new()
165+
{
166+
container = null,
167+
}
168+
};
169+
170+
var result = AssetSerialization.Serialize(asset);
171+
172+
Assert.That(result, Is.Not.EqualTo(null));
173+
174+
Assert.That(result.typeName, Is.EqualTo(typeof(SerializableAsset).FullName));
175+
176+
Assert.That(result.parameters, Has.Count.EqualTo(1));
177+
178+
Assert.Multiple(() =>
179+
{
180+
Assert.That(result.parameters.ContainsKey(nameof(SerializableAsset.container)), Is.True);
181+
Assert.That(result.parameters[nameof(SerializableAsset.container)].value, Is.TypeOf(typeof(SerializableStapleAssetContainer)));
182+
183+
if(result.parameters.TryGetValue(nameof(SerializableAsset.container), out var parameter))
184+
{
185+
Assert.That(parameter.typeName, Is.EqualTo(typeof(SerializableAsset.InnerClass).FullName));
186+
Assert.That(parameter.value, Is.TypeOf<SerializableStapleAssetContainer>());
187+
188+
if(parameter.value is SerializableStapleAssetContainer container)
189+
{
190+
Assert.That(container.typeName, Is.EqualTo(typeof(SerializableAsset.InnerClass).FullName));
191+
Assert.That(container.parameters, Has.Count.EqualTo(0));
192+
}
193+
}
194+
});
195+
196+
asset.container.container = new();
197+
198+
result = AssetSerialization.Serialize(asset);
199+
200+
Assert.Multiple(() =>
201+
{
202+
Assert.That(result.parameters.ContainsKey(nameof(SerializableAsset.container)), Is.True);
203+
Assert.That(result.parameters[nameof(SerializableAsset.container)].value, Is.TypeOf(typeof(SerializableStapleAssetContainer)));
204+
205+
if (result.parameters.TryGetValue(nameof(SerializableAsset.container), out var parameter))
206+
{
207+
Assert.That(parameter.typeName, Is.EqualTo(typeof(SerializableAsset.InnerClass).FullName));
208+
Assert.That(parameter.value, Is.TypeOf<SerializableStapleAssetContainer>());
209+
210+
if (parameter.value is SerializableStapleAssetContainer container)
211+
{
212+
Assert.That(container.typeName, Is.EqualTo(typeof(SerializableAsset.InnerClass).FullName));
213+
Assert.That(container.parameters, Has.Count.EqualTo(1));
214+
215+
Assert.That(container.parameters.ContainsKey(nameof(SerializableAsset.InnerClass.container)), Is.True);
216+
217+
Assert.That(container.parameters[nameof(SerializableAsset.InnerClass.container)].value, Is.TypeOf<SerializableStapleAssetContainer>());
218+
219+
if (container.parameters[nameof(SerializableAsset.InnerClass.container)].value is SerializableStapleAssetContainer innerContainer)
220+
{
221+
Assert.That(innerContainer.typeName, Is.EqualTo(typeof(SerializableAsset.InnerClass.InnerInnerClass).FullName));
222+
223+
Assert.That(innerContainer.parameters.Count, Is.EqualTo(1));
224+
225+
Assert.That(innerContainer.parameters.ContainsKey(nameof(SerializableAsset.InnerClass.InnerInnerClass.value)));
226+
227+
if(innerContainer.parameters.TryGetValue(nameof(SerializableAsset.InnerClass.InnerInnerClass), out var innerParameter))
228+
{
229+
Assert.That(innerParameter.typeName, Is.EqualTo(typeof(int).FullName));
230+
231+
Assert.That(innerParameter.value, Is.TypeOf<int>());
232+
233+
if(innerParameter.value is int intValue)
234+
{
235+
Assert.That(intValue, Is.EqualTo(asset.container.container.value));
236+
}
237+
}
238+
}
239+
}
240+
}
241+
});
242+
}
139243
}
140244
}

Engine/StapleCoreTests/StapleCoreTests.csproj

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -22,5 +22,10 @@
2222
<ItemGroup>
2323
<ProjectReference Include="..\TypeRegistration\TypeRegistration.csproj" OutputItemType="Analyzer" ReferenceOutputAssembly="false" />
2424
</ItemGroup>
25+
<ItemGroup>
26+
<Reference Include="Newtonsoft.Json">
27+
<HintPath>..\..\Dependencies\JsonNet\Newtonsoft.Json.dll</HintPath>
28+
</Reference>
29+
</ItemGroup>
2530

2631
</Project>

0 commit comments

Comments
 (0)