Skip to content

Commit fc1c8bb

Browse files
committed
Add triggerOnRelease check
and track click count
1 parent 3fb8395 commit fc1c8bb

File tree

1 file changed

+36
-18
lines changed

1 file changed

+36
-18
lines changed

org.mixedrealitytoolkit.input/Tests/Runtime/BasicInputTests.cs

Lines changed: 36 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -313,6 +313,7 @@ public IEnumerator GazePinchSmokeTest()
313313
[UnityTest]
314314
public IEnumerator TestStatefulInteractableSelectMode(
315315
[Values(InteractableSelectMode.Single, InteractableSelectMode.Multiple)] InteractableSelectMode selectMode,
316+
[Values(true, false)] bool triggerOnRelease,
316317
[Values(true, false)] bool releaseInSelectOrder)
317318
{
318319
GameObject cube = GameObject.CreatePrimitive(PrimitiveType.Cube);
@@ -323,17 +324,28 @@ public IEnumerator TestStatefulInteractableSelectMode(
323324
bool isSelected = false;
324325
bool selectEntered = false;
325326
bool selectExited = false;
327+
int clickCount = 0;
328+
329+
void ResetState()
330+
{
331+
selectEntered = false;
332+
selectExited = false;
333+
clickCount = 0;
334+
}
326335

327336
// For this test, we won't use poke or grab selection
328337
interactable.DisableInteractorType(typeof(PokeInteractor));
329338
interactable.DisableInteractorType(typeof(GrabInteractor));
330339
interactable.selectMode = selectMode;
340+
interactable.TriggerOnRelease = triggerOnRelease;
331341

332-
interactable.firstSelectEntered.AddListener((SelectEnterEventArgs) => { isSelected = true; });
333-
interactable.lastSelectExited.AddListener((SelectEnterEventArgs) => { isSelected = false; });
342+
interactable.firstSelectEntered.AddListener((_) => isSelected = true);
343+
interactable.lastSelectExited.AddListener((_) => isSelected = false);
334344

335-
interactable.selectEntered.AddListener((SelectEnterEventArgs) => { selectEntered = true; });
336-
interactable.selectExited.AddListener((SelectEnterEventArgs) => { selectExited = true; });
345+
interactable.selectEntered.AddListener((_) => selectEntered = true);
346+
interactable.selectExited.AddListener((_) => selectExited = true);
347+
348+
interactable.OnClicked.AddListener(() => clickCount++);
337349

338350
// Introduce the first hand
339351
var rightHand = new TestHand(Handedness.Right);
@@ -380,9 +392,10 @@ public IEnumerator TestStatefulInteractableSelectMode(
380392
"StatefulInteractable should have had a select enter.");
381393
Assert.IsFalse(selectExited,
382394
"StatefulInteractable should not have had a select exit.");
395+
Assert.AreEqual(triggerOnRelease ? 0 : 1, clickCount);
383396

384397
// Reset to continue testing
385-
selectEntered = false;
398+
ResetState();
386399

387400
// Release the first hand to deselect the cube
388401
yield return rightHand.SetHandshape(HandshapeId.Open);
@@ -399,9 +412,10 @@ public IEnumerator TestStatefulInteractableSelectMode(
399412
"StatefulInteractable should not have had a select enter.");
400413
Assert.IsTrue(selectExited,
401414
"StatefulInteractable should have had a select exit.");
415+
Assert.AreEqual(triggerOnRelease ? 1 : 0, clickCount);
402416

403417
// Reset to continue testing
404-
selectExited = false;
418+
ResetState();
405419

406420
// Introduce the second hand
407421
var leftHand = new TestHand(Handedness.Left);
@@ -443,9 +457,10 @@ public IEnumerator TestStatefulInteractableSelectMode(
443457
"StatefulInteractable should have had a select enter.");
444458
Assert.IsFalse(selectExited,
445459
"StatefulInteractable should not have had a select exit.");
460+
Assert.AreEqual(triggerOnRelease ? 0 : 1, clickCount);
446461

447462
// Reset to continue testing
448-
selectEntered = false;
463+
ResetState();
449464

450465
// Pinch the second hand to select the cube
451466
yield return leftHand.SetHandshape(HandshapeId.Pinch);
@@ -459,9 +474,6 @@ public IEnumerator TestStatefulInteractableSelectMode(
459474
Assert.IsTrue(selectEntered,
460475
"StatefulInteractable should have had a select enter.");
461476

462-
// Reset to continue testing
463-
selectEntered = false;
464-
465477
// Both hands are pinching, so we check the select state based on the mode
466478
switch (selectMode)
467479
{
@@ -470,20 +482,23 @@ public IEnumerator TestStatefulInteractableSelectMode(
470482
"StatefulInteractable should only have 1 selecting interactor.");
471483
Assert.IsTrue(selectExited,
472484
"StatefulInteractable should have had a select exit.");
473-
// Reset to continue testing
474-
selectExited = false;
485+
Assert.AreEqual(1, clickCount);
475486
break;
476487
case InteractableSelectMode.Multiple:
477488
Assert.IsTrue(interactable.interactorsSelecting.Count == 2,
478489
"StatefulInteractable should have 2 selecting interactors.");
479490
Assert.IsFalse(selectExited,
480491
"StatefulInteractable should not have had a select exit.");
492+
Assert.AreEqual(0, clickCount);
481493
break;
482494
default:
483495
Assert.Fail($"Unhandled {nameof(InteractableSelectMode)}={selectMode}");
484496
break;
485497
}
486498

499+
// Reset to continue testing
500+
ResetState();
501+
487502
TestHand firstReleasedHand;
488503
TestHand secondReleasedHand;
489504
if (releaseInSelectOrder)
@@ -519,8 +534,7 @@ public IEnumerator TestStatefulInteractableSelectMode(
519534
"StatefulInteractable should not be selected.");
520535
Assert.IsTrue(selectExited,
521536
"StatefulInteractable should have had a select exit.");
522-
// Reset to continue testing
523-
selectExited = false;
537+
Assert.AreEqual(triggerOnRelease ? 1 : 0, clickCount);
524538
}
525539
// The first hand was no longer selecting in Single mode
526540
// If we're releasing in the same order we selected,
@@ -535,13 +549,12 @@ public IEnumerator TestStatefulInteractableSelectMode(
535549
"StatefulInteractable should only have 1 selecting interactor.");
536550
Assert.IsTrue(isSelected,
537551
"StatefulInteractable should be selected.");
552+
Assert.AreEqual(0, clickCount);
538553

539554
if (selectMode == InteractableSelectMode.Multiple)
540555
{
541556
Assert.IsTrue(selectExited,
542557
"StatefulInteractable should have had a select exit.");
543-
// Reset to continue testing
544-
selectExited = false;
545558
}
546559
else
547560
{
@@ -551,6 +564,9 @@ public IEnumerator TestStatefulInteractableSelectMode(
551564
}
552565
}
553566

567+
// Reset to continue testing
568+
ResetState();
569+
554570
// Release the last hand to deselect the cube
555571
yield return secondReleasedHand.SetHandshape(HandshapeId.Open);
556572
yield return RuntimeTestUtilities.WaitForUpdates();
@@ -574,10 +590,12 @@ public IEnumerator TestStatefulInteractableSelectMode(
574590
{
575591
Assert.IsTrue(selectExited,
576592
"StatefulInteractable should have had a select exit.");
577-
// Reset to continue testing
578-
selectExited = false;
593+
Assert.AreEqual(triggerOnRelease ? 1 : 0, clickCount);
579594
}
580595

596+
// Reset to continue testing
597+
ResetState();
598+
581599
yield return RuntimeTestUtilities.WaitForUpdates();
582600
}
583601

0 commit comments

Comments
 (0)