You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
83 lines
2.4 KiB
83 lines
2.4 KiB
using NUnit.Framework; |
|
using UnityEditor.Events; |
|
using UnityEngine; |
|
using UnityEngine.Events; |
|
|
|
public class UnityEventInvoke |
|
{ |
|
class SimpleCounter : MonoBehaviour |
|
{ |
|
public int m_Count = 0; |
|
|
|
public void Add() |
|
{ |
|
++m_Count; |
|
} |
|
|
|
public void NoOp(int i) |
|
{ |
|
} |
|
} |
|
|
|
GameObject m_CounterObject; |
|
SimpleCounter Counter { get; set; } |
|
|
|
[SetUp] |
|
public void TestSetup() |
|
{ |
|
m_CounterObject = new GameObject("Counter"); |
|
Counter = m_CounterObject.AddComponent<SimpleCounter>(); |
|
} |
|
|
|
[TearDown] |
|
public void TearDown() |
|
{ |
|
GameObject.DestroyImmediate(m_CounterObject); |
|
} |
|
|
|
[Test] |
|
[Description("Using a CachedInvokableCall in a UnityEvent should not go re-trigger all the calls stored in the UnityEvent. Case-950588")] |
|
public void UnityEvent_InvokeCallsListenerOnce() |
|
{ |
|
var _event = new UnityEvent(); |
|
UnityEventTools.AddPersistentListener(_event, new UnityAction(Counter.Add)); |
|
_event.SetPersistentListenerState(0, UnityEventCallState.EditorAndRuntime); |
|
|
|
_event.Invoke(); |
|
|
|
Assert.AreEqual(1, Counter.m_Count); |
|
|
|
for (int i = 1; i < 5; ++i) |
|
{ |
|
UnityEventTools.AddIntPersistentListener(_event, new UnityAction<int>(Counter.NoOp), i); |
|
_event.SetPersistentListenerState(i, UnityEventCallState.EditorAndRuntime); |
|
} |
|
|
|
_event.Invoke(); |
|
|
|
Assert.AreEqual(2, Counter.m_Count); |
|
} |
|
|
|
[Test] |
|
[Description("Using a CachedInvokableCall in a UnityEvent should not go re-trigger all the calls stored in the UnityEvent. Case-950588")] |
|
public void UnityEvent_EditMode_InvokeDoesNotCallRuntimeListener() |
|
{ |
|
var _event = new UnityEvent(); |
|
UnityEventTools.AddPersistentListener(_event, new UnityAction(Counter.Add)); |
|
Assert.AreEqual(UnityEventCallState.RuntimeOnly, _event.GetPersistentListenerState(0)); |
|
Assert.False(Application.isPlaying); |
|
|
|
_event.Invoke(); |
|
|
|
Assert.AreEqual(0, Counter.m_Count, "Expected Event to not be called when not in play mode and event is marked as Runtime only"); |
|
|
|
for (int i = 1; i < 5; ++i) |
|
{ |
|
UnityEventTools.AddIntPersistentListener(_event, new UnityAction<int>(Counter.NoOp), i); |
|
} |
|
|
|
_event.Invoke(); |
|
|
|
Assert.AreEqual(0, Counter.m_Count, "Expected Event to not be called when not in play mode and event is marked as Runtime only"); |
|
} |
|
}
|
|
|