您最多选择25个主题
主题必须以中文或者字母或数字开头,可以包含连字符 (-),并且长度不得超过35个字符
71 行
2.6 KiB
71 行
2.6 KiB
using System;
|
|
using NUnit.Framework;
|
|
using UnityEditor;
|
|
using UnityEngine;
|
|
|
|
namespace Unity.Entities.Tests
|
|
{
|
|
public class ComponentDataWrapperTests
|
|
{
|
|
interface IIntegerContainer
|
|
{
|
|
int Integer { get; set; }
|
|
}
|
|
|
|
struct MockData : IComponentData
|
|
{
|
|
public int Value;
|
|
}
|
|
|
|
class MockWrapper : ComponentDataWrapper<MockData>, IIntegerContainer
|
|
{
|
|
public int Integer { get => Value.Value; set => Value = new MockData { Value = value }; }
|
|
}
|
|
|
|
struct MockSharedData : ISharedComponentData
|
|
{
|
|
public int Value;
|
|
}
|
|
|
|
class MockSharedWrapper : SharedComponentDataWrapper<MockSharedData>, IIntegerContainer
|
|
{
|
|
public int Integer { get => Value.Value; set => Value = new MockSharedData { Value = value }; }
|
|
}
|
|
|
|
GameObject m_GameObject;
|
|
|
|
[TearDown]
|
|
public void TearDown()
|
|
{
|
|
if (m_GameObject != null)
|
|
GameObject.DestroyImmediate(m_GameObject);
|
|
}
|
|
|
|
[TestCase(typeof(MockWrapper))]
|
|
[TestCase(typeof(MockSharedWrapper))]
|
|
public void ComponentDataWrapper_SetValue_SynchronizesWithEntityManager(Type wrapperType)
|
|
{
|
|
m_GameObject = new GameObject(TestContext.CurrentContext.Test.Name, wrapperType);
|
|
var wrapper = m_GameObject.GetComponent<ComponentDataWrapperBase>();
|
|
// manually call OnEnable so that wrapper's component will exist in entity manager
|
|
// represents loading GameObjectEntity when wrappers already exist (e.g., loading a scene, domain reload)
|
|
var gameObjectEntity = wrapper.GetComponent<GameObjectEntity>();
|
|
gameObjectEntity.OnEnable();
|
|
Assert.That(
|
|
wrapper.CanSynchronizeWithEntityManager(out var entityManager, out var entity), Is.True,
|
|
"EntityManager is not in correct state in arrangement for synchronization to occur"
|
|
);
|
|
var integerWrapper = wrapper as IIntegerContainer;
|
|
Assert.That(
|
|
integerWrapper.Integer, Is.EqualTo(0),
|
|
$"{wrapper.GetComponentType()} did not initialize with default value in arrangement"
|
|
);
|
|
|
|
integerWrapper.Integer = 1;
|
|
Assert.That(integerWrapper.Integer, Is.EqualTo(1), $"Setting value on {wrapperType} failed");
|
|
|
|
var so = new SerializedObject(wrapper);
|
|
Assert.That(integerWrapper.Integer, Is.EqualTo(1), $"Value was reset after deserializing {wrapperType}");
|
|
}
|
|
}
|
|
}
|