A game about forced loneliness, made by TACStudios
1using NUnit.Framework;
2using UnityEngine;
3using UnityEngine.EventSystems;
4
5public class EventTriggerRemoveDuringExecution
6{
7 [Test]
8 [Description("ArgumentOutOfRange Exception is thrown when removing handler in callback in EventTrigger (case 1401557)")]
9 public void EventTrigger_DoesNotThrowExceptionWhenRemovingEventDuringExecution()
10 {
11 var go = new GameObject();
12 var eventTrigger = go.AddComponent<EventTrigger>();
13 var eventSystem = go.AddComponent<EventSystem>();
14
15 var entry1 = new EventTrigger.Entry { eventID = EventTriggerType.PointerDown };
16 var entry2 = new EventTrigger.Entry { eventID = EventTriggerType.PointerDown };
17
18 bool executed1 = false;
19 bool executed2 = false;
20 entry1.callback.AddListener(e =>
21 {
22 executed1 = true;
23 eventTrigger.triggers.Remove(entry2);
24 });
25 entry2.callback.AddListener(e => executed2 = true);
26
27 eventTrigger.triggers.Add(entry1);
28 eventTrigger.triggers.Add(entry2);
29
30 Assert.DoesNotThrow(() => eventTrigger.OnPointerDown(new PointerEventData(eventSystem)));
31 Assert.True(executed1, "Expected Event 1 to be called but it was not.");
32 Assert.False(executed2, "Expected Event 2 to not be called as it was removed by event 1.");
33 Assert.That(eventTrigger.triggers, Does.Not.Contains(entry2));
34 Assert.That(eventTrigger.triggers, Does.Contain(entry1));
35
36 Object.DestroyImmediate(go);
37 }
38}