@@ -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}
0 commit comments