Tanoda
TestAddRemove.cs
Go to the documentation of this file.
1/******************************************************************************
2 * Copyright (C) Ultraleap, Inc. 2011-2020. *
3 * *
4 * Use subject to the terms of the Apache License 2.0 available at *
5 * http://www.apache.org/licenses/LICENSE-2.0, or another agreement *
6 * between Ultraleap and you, your company or other organization. *
7 ******************************************************************************/
8
9#if LEAP_TESTS
10using UnityEngine.TestTools;
11using NUnit.Framework;
12using System.Collections;
13
15
16 public class TestAddRemove : GraphicRendererTestBase {
17
23 [UnityTest]
24 public IEnumerator PreAddedInValidState() {
25 InitTest("OneDynamicGroup");
26 yield return null;
27
28 Assert.That(oneGraphic.OnAwake().wasAttached);
29 Assert.That(oneGraphic.OnAwake().attachedGroup, Is.EqualTo(firstGroup));
30
31 Assert.That(oneGraphic.OnEnable().wasAttached);
32 Assert.That(oneGraphic.OnEnable().attachedGroup, Is.EqualTo(firstGroup));
33
34 Assert.That(oneGraphic.OnStart().wasAttached);
35 Assert.That(oneGraphic.OnStart().attachedGroup, Is.EqualTo(firstGroup));
36 }
37
42 [UnityTest]
43 public IEnumerator CanRemoveAndAdd() {
44 InitTest("OneDynamicGroup");
45 yield return null;
46
47 Assert.That(firstGroup.graphics, Contains.Item(oneGraphic));
48 Assert.That(oneGraphic.attachedGroup, Is.EqualTo(firstGroup));
49
50 bool didRemove = firstGroup.TryRemoveGraphic(oneGraphic);
51 Assert.That(didRemove);
52
53 //Wait for delayed detach
54 yield return null;
55
56 Assert.That(firstGroup.graphics, Does.Not.Contains(oneGraphic));
57 Assert.That(oneGraphic.attachedGroup, Is.Null);
58 Assert.That(oneGraphic.isAttachedToGroup, Is.False);
59
60 bool didAdd = firstGroup.TryAddGraphic(oneGraphic);
61 Assert.That(didAdd);
62
63 yield return null;
64
65 Assert.That(oneGraphic.isAttachedToGroup, Is.True);
66 Assert.That(oneGraphic.attachedGroup, Is.EqualTo(firstGroup));
67 }
68
73 [UnityTest]
74 public IEnumerator CanRemoveAndAddSameFrame() {
75 InitTest("OneDynamicGroup");
76 yield return null;
77
78 bool didRemove = firstGroup.TryRemoveGraphic(oneGraphic);
79 bool didAdd = firstGroup.TryAddGraphic(oneGraphic);
80
81 Assert.That(didRemove);
82 Assert.That(didAdd);
83 Assert.That(oneGraphic.isAttachedToGroup);
84
85 yield return null;
86
87 Assert.That(oneGraphic.isAttachedToGroup, Is.True);
88 Assert.That(oneGraphic.attachedGroup, Is.EqualTo(firstGroup));
89 }
90
95 [UnityTest]
96 public IEnumerator DontAddTwice() {
97 InitTest("OneDynamicGroup");
98 yield return null;
99
100 bool didAddTwice = firstGroup.TryAddGraphic(oneGraphic);
101 Assert.IsFalse(didAddTwice);
102 }
103
108 [UnityTest]
109 public IEnumerator SwitchGroupsSameFrame() {
110 InitTest("TwoDynamicGroups");
111 yield return null;
112
113 Assert.That(oneGraphic.attachedGroup, Is.EqualTo(firstGroup));
114
115 bool didRemove = firstGroup.TryRemoveGraphic(oneGraphic);
116 bool didAdd = secondGroup.TryAddGraphic(oneGraphic);
117
118 Assert.That(didRemove);
119 Assert.That(didAdd);
120
121 yield return null;
122
123 Assert.That(oneGraphic.attachedGroup, Is.EqualTo(secondGroup));
124 }
125
130 [UnityTest]
131 public IEnumerator AddToTwoGroupsSameFrame() {
132 InitTest("TwoEmptyDynamicGroups");
133 yield return null;
134
135 CreateGraphic("DisabledMeshGraphic");
136
137 bool didAddToFirst = firstGroup.TryAddGraphic(oneGraphic);
138 bool didAddToSecond = secondGroup.TryAddGraphic(oneGraphic);
139
140 Assert.IsTrue(didAddToFirst);
141 Assert.IsFalse(didAddToSecond);
142
143 yield return null;
144
145 Assert.That(oneGraphic.isAttachedToGroup);
146 Assert.That(oneGraphic.attachedGroup, Is.EqualTo(firstGroup));
147
148 Assert.That(firstGroup.graphics, Contains.Item(oneGraphic));
149 Assert.That(secondGroup.graphics, Is.Empty);
150 }
151
156 [UnityTest]
157 public IEnumerator CantAddToASecondGroup() {
158 InitTest("TwoDynamicGroups");
159 yield return null;
160
161 bool didAdd = secondGroup.TryAddGraphic(oneGraphic);
162
163 Assert.IsFalse(didAdd);
164 Assert.That(oneGraphic.isAttachedToGroup);
165 Assert.That(oneGraphic.attachedGroup, Is.EqualTo(firstGroup));
166 Assert.IsFalse(oneGraphic.willbeAttached);
167 Assert.That(secondGroup.graphics, Is.Empty);
168 }
169
175 [UnityTest]
176 public IEnumerator CantCancelTheRemoveIfWillAttach() {
177 InitTest("TwoDynamicGroups");
178 yield return null;
179
180 bool didRemove = firstGroup.TryRemoveGraphic(oneGraphic);
181 bool didAddToSecond = secondGroup.TryAddGraphic(oneGraphic);
182 bool didAddToFirst = firstGroup.TryAddGraphic(oneGraphic);
183
184 Assert.That(oneGraphic.isAttachedToGroup);
185 Assert.That(oneGraphic.willbeAttached);
186 Assert.That(oneGraphic.willbeDetached);
187
188 Assert.That(didRemove);
189 Assert.That(didAddToSecond);
190 Assert.IsFalse(didAddToFirst);
191
192 yield return null;
193
194 Assert.That(oneGraphic.isAttachedToGroup);
195 Assert.That(oneGraphic.attachedGroup, Is.EqualTo(secondGroup));
196 Assert.IsFalse(oneGraphic.willbeDetached);
197 Assert.IsFalse(oneGraphic.willbeAttached);
198 Assert.That(firstGroup.graphics, Is.Empty);
199 Assert.That(secondGroup.graphics, Contains.Item(oneGraphic));
200 }
201
207 [UnityTest]
208 public IEnumerator CanCancelTheAddWithARemove() {
209 InitTest("OneEmptyDynamicGroup");
210 yield return null;
211
212 CreateGraphic("DisabledMeshGraphic");
213
214 bool didAdd = firstGroup.TryAddGraphic(oneGraphic);
215 bool didRemove = firstGroup.TryRemoveGraphic(oneGraphic);
216
217 Assert.That(didAdd);
218 Assert.That(didRemove);
219 Assert.IsFalse(oneGraphic.willbeAttached);
220 Assert.IsFalse(oneGraphic.willbeDetached);
221 Assert.IsFalse(oneGraphic.isAttachedToGroup);
222
223 yield return null;
224
225 Assert.IsFalse(oneGraphic.isAttachedToGroup);
226 Assert.That(firstGroup.graphics, Is.Empty);
227 }
228
234 [UnityTest]
235 public IEnumerator CanSwitchToAGroupWithADifferentFeatureSet([Values(true, false)] bool reverseGroup) {
236 InitTest("TwoDynamicGroupsWithDifferentFeatures");
237 yield return null;
238
239 LeapGraphicGroup first, second;
240 if (reverseGroup) {
241 first = secondGroup;
242 second = firstGroup;
243 } else {
244 first = firstGroup;
245 second = secondGroup;
246 }
247
248 CreateGraphic("DisabledMeshGraphic");
249
250 bool didAddToFirst = first.TryAddGraphic(oneGraphic);
251 Assert.That(didAddToFirst);
252
253 yield return null;
254
255 bool didDetatchFromFirst = oneGraphic.TryDetach();
256 Assert.That(didDetatchFromFirst);
257
258 yield return null;
259
260 bool didAddToSecond = second.TryAddGraphic(oneGraphic);
261 Assert.That(didAddToSecond);
262
263 yield return null;
264
265 bool didDetatchFromSecond = oneGraphic.TryDetach();
266 Assert.That(didDetatchFromSecond);
267
268 yield return null;
269 }
270
275 [UnityTest]
276 public IEnumerator CanAddAndRemoveManyOnSameFrame([Values(true, false)] bool addMany) {
277 InitTest("OneEmptyDynamicGroupWith4Features");
278 yield return null;
279
280 var first = CreateGraphic("DisabledMeshGraphic");
281 var second = CreateGraphic("DisabledMeshGraphic");
282 var third = CreateGraphic("DisabledMeshGraphic");
283
284 if (addMany) {
285 firstGroup.TryAddGraphic(first);
286 } else {
287 firstGroup.TryAddGraphic(second);
288 firstGroup.TryAddGraphic(third);
289 }
290
291 yield return null;
292
293 if (addMany) {
294 firstGroup.TryAddGraphic(second);
295 firstGroup.TryAddGraphic(third);
296 first.TryDetach();
297 } else {
298 firstGroup.TryAddGraphic(first);
299 second.TryDetach();
300 third.TryDetach();
301 }
302
303 yield return null;
304
305 foreach (var feature in firstGroup.features) {
306 var featureData = feature.GetField("featureData") as IList;
307 Assert.That(featureData.Count, Is.EqualTo(firstGroup.graphics.Count));
308 for (int i = 0; i < featureData.Count; i++) {
309 LeapFeatureData data = featureData[i] as LeapFeatureData;
310 Assert.That(data.graphic, Is.EqualTo(firstGroup.graphics[i]));
311 }
312 }
313 }
314 }
315}
316#endif