diff --git a/src/Tests-internal/ECS/Test_SerializeLinkComponent.cs b/src/Tests-internal/ECS/Test_SerializeLinkComponent.cs new file mode 100644 index 00000000..b7020d7a --- /dev/null +++ b/src/Tests-internal/ECS/Test_SerializeLinkComponent.cs @@ -0,0 +1,61 @@ +using Friflo.Engine.ECS; +using Friflo.Engine.ECS.Serialize; +using NUnit.Framework; +using Tests.ECS.Index; +using Tests.ECS.Serialize; +using static NUnit.Framework.Assert; + + +// ReSharper disable InconsistentNaming +namespace Internal.ECS { + +public static class Test_SerializeLinkComponent +{ + +// referenced entity 1002 is loaded after loading its LinkRelation +// The fields of store.nodes[1002] .isLinked & .isOwner are assigned +private const string Json = +@"[{ + ""id"": 1, + ""components"": { + ""LinkComponent"": {""entity"":1002} + } +},{ + ""id"": 1002 +}]"; + + + [Test] + public static void Test_SerializeEntity_read_present() + { + var store = new EntityStore(); + var serializer = new EntitySerializer(); + var stream = Test_Serializer.StringAsStream(Json); + + var result = serializer.ReadIntoStore(store, stream); // referenced EntityReference.entity 1002 is already deserialized + IsNull(result.error); + + AreEqual(2, store.Count); + + var entity1 = store.GetEntityById(1); + AreEqual(1002, entity1.GetComponent().entity.Id); + + var attackBit = 1 << StructInfo.Index; + AreEqual(attackBit, store.nodes[1].isOwner); + AreEqual(attackBit, store.nodes[1002].isLinked); + + Entity entityRef = store.GetEntityById(1002); + IsFalse(entityRef.IsNull); + + var incomingLinks = entityRef.GetIncomingLinks(); + AreEqual(1, incomingLinks.Count); + AreEqual(1, incomingLinks[0].Entity.Id); + + entityRef.DeleteEntity(); + + IsFalse(entity1.HasComponent()); + } + +} + +} \ No newline at end of file diff --git a/src/Tests/ECS/Serialize/Test_EntitySerializer.cs b/src/Tests/ECS/Serialize/Test_EntitySerializer.cs index 41a7f9e6..22f73790 100644 --- a/src/Tests/ECS/Serialize/Test_EntitySerializer.cs +++ b/src/Tests/ECS/Serialize/Test_EntitySerializer.cs @@ -113,6 +113,7 @@ public static void Test_Serializer_read_into_store() var fileName = TestUtils.GetBasePath() + "assets/read_scene.json"; var file = new FileStream(fileName, FileMode.Open, FileAccess.Read); var result = serializer.ReadIntoStore(store, file); + IsNull(result.error); file.Close(); AssertReadIntoStoreResult(result, store); } @@ -289,6 +290,7 @@ public static void Test_Serializer_read_unknown_JSON_members() var fileName = TestUtils.GetBasePath() + "assets/read_unknown_members.json"; var file = new FileStream(fileName, FileMode.Open, FileAccess.Read); var result = serializer.ReadIntoStore(store, file); + IsNull(result.error); file.Close(); AssertReadIntoStoreResult(result, store); } diff --git a/src/Tests/ECS/Serialize/Test_SerializeEntity.cs b/src/Tests/ECS/Serialize/Test_SerializeEntity.cs index e34c74e3..c681ae77 100644 --- a/src/Tests/ECS/Serialize/Test_SerializeEntity.cs +++ b/src/Tests/ECS/Serialize/Test_SerializeEntity.cs @@ -65,7 +65,8 @@ public static void Test_SerializeEntity_read_present() var serializer = new EntitySerializer(); var stream = Test_Serializer.StringAsStream(JsonEntityRefPresent); - serializer.ReadIntoStore(store, stream); // referenced EntityReference.entity 1002 is already deserialized + var result = serializer.ReadIntoStore(store, stream); // referenced EntityReference.entity 1002 is already deserialized + IsNull(result.error); AreEqual(2, store.Count); @@ -83,7 +84,8 @@ public static void Test_SerializeEntity_read_missing() var serializer = new EntitySerializer(); var stream = Test_Serializer.StringAsStream(JsonEntityRefMissing); - serializer.ReadIntoStore(store, stream); + var result = serializer.ReadIntoStore(store, stream); + IsNull(result.error); AreEqual(1, store.Count); @@ -100,7 +102,8 @@ public static void Test_SerializeEntity_read_not_present() var serializer = new EntitySerializer(); var stream = Test_Serializer.StringAsStream(JsonEntityRefNotPresent); - serializer.ReadIntoStore(store, stream); + var result = serializer.ReadIntoStore(store, stream); + IsNull(result.error); AreEqual(2, store.Count); @@ -117,7 +120,8 @@ public static void Test_SerializeEntity_read_null() var serializer = new EntitySerializer(); var stream = Test_Serializer.StringAsStream(JsonEntityRefNull); - serializer.ReadIntoStore(store, stream); + var result = serializer.ReadIntoStore(store, stream); + IsNull(result.error); AreEqual(1, store.Count);