Skip to content

Commit b8cbe45

Browse files
committed
Add triggerOnRelease check
and track click count
1 parent 336d39b commit b8cbe45

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
@@ -318,6 +318,7 @@ public IEnumerator GazePinchSmokeTest()
318318
[UnityTest]
319319
public IEnumerator TestStatefulInteractableSelectMode(
320320
[Values(InteractableSelectMode.Single, InteractableSelectMode.Multiple)] InteractableSelectMode selectMode,
321+
[Values(true, false)] bool triggerOnRelease,
321322
[Values(true, false)] bool releaseInSelectOrder)
322323
{
323324
GameObject cube = GameObject.CreatePrimitive(PrimitiveType.Cube);
@@ -328,17 +329,28 @@ public IEnumerator TestStatefulInteractableSelectMode(
328329
bool isSelected = false;
329330
bool selectEntered = false;
330331
bool selectExited = false;
332+
int clickCount = 0;
333+
334+
void ResetState()
335+
{
336+
selectEntered = false;
337+
selectExited = false;
338+
clickCount = 0;
339+
}
331340

332341
// For this test, we won't use poke or grab selection
333342
interactable.DisableInteractorType(typeof(PokeInteractor));
334343
interactable.DisableInteractorType(typeof(GrabInteractor));
335344
interactable.selectMode = selectMode;
345+
interactable.TriggerOnRelease = triggerOnRelease;
336346

337-
interactable.firstSelectEntered.AddListener((SelectEnterEventArgs) => { isSelected = true; });
338-
interactable.lastSelectExited.AddListener((SelectEnterEventArgs) => { isSelected = false; });
347+
interactable.firstSelectEntered.AddListener((_) => isSelected = true);
348+
interactable.lastSelectExited.AddListener((_) => isSelected = false);
339349

340-
interactable.selectEntered.AddListener((SelectEnterEventArgs) => { selectEntered = true; });
341-
interactable.selectExited.AddListener((SelectEnterEventArgs) => { selectExited = true; });
350+
interactable.selectEntered.AddListener((_) => selectEntered = true);
351+
interactable.selectExited.AddListener((_) => selectExited = true);
352+
353+
interactable.OnClicked.AddListener(() => clickCount++);
342354

343355
// Introduce the first hand
344356
var rightHand = new TestHand(Handedness.Right);
@@ -385,9 +397,10 @@ public IEnumerator TestStatefulInteractableSelectMode(
385397
"StatefulInteractable should have had a select enter.");
386398
Assert.IsFalse(selectExited,
387399
"StatefulInteractable should not have had a select exit.");
400+
Assert.AreEqual(triggerOnRelease ? 0 : 1, clickCount);
388401

389402
// Reset to continue testing
390-
selectEntered = false;
403+
ResetState();
391404

392405
// Release the first hand to deselect the cube
393406
yield return rightHand.SetHandshape(HandshapeId.Open);
@@ -404,9 +417,10 @@ public IEnumerator TestStatefulInteractableSelectMode(
404417
"StatefulInteractable should not have had a select enter.");
405418
Assert.IsTrue(selectExited,
406419
"StatefulInteractable should have had a select exit.");
420+
Assert.AreEqual(triggerOnRelease ? 1 : 0, clickCount);
407421

408422
// Reset to continue testing
409-
selectExited = false;
423+
ResetState();
410424

411425
// Introduce the second hand
412426
var leftHand = new TestHand(Handedness.Left);
@@ -448,9 +462,10 @@ public IEnumerator TestStatefulInteractableSelectMode(
448462
"StatefulInteractable should have had a select enter.");
449463
Assert.IsFalse(selectExited,
450464
"StatefulInteractable should not have had a select exit.");
465+
Assert.AreEqual(triggerOnRelease ? 0 : 1, clickCount);
451466

452467
// Reset to continue testing
453-
selectEntered = false;
468+
ResetState();
454469

455470
// Pinch the second hand to select the cube
456471
yield return leftHand.SetHandshape(HandshapeId.Pinch);
@@ -464,9 +479,6 @@ public IEnumerator TestStatefulInteractableSelectMode(
464479
Assert.IsTrue(selectEntered,
465480
"StatefulInteractable should have had a select enter.");
466481

467-
// Reset to continue testing
468-
selectEntered = false;
469-
470482
// Both hands are pinching, so we check the select state based on the mode
471483
switch (selectMode)
472484
{
@@ -475,20 +487,23 @@ public IEnumerator TestStatefulInteractableSelectMode(
475487
"StatefulInteractable should only have 1 selecting interactor.");
476488
Assert.IsTrue(selectExited,
477489
"StatefulInteractable should have had a select exit.");
478-
// Reset to continue testing
479-
selectExited = false;
490+
Assert.AreEqual(1, clickCount);
480491
break;
481492
case InteractableSelectMode.Multiple:
482493
Assert.IsTrue(interactable.interactorsSelecting.Count == 2,
483494
"StatefulInteractable should have 2 selecting interactors.");
484495
Assert.IsFalse(selectExited,
485496
"StatefulInteractable should not have had a select exit.");
497+
Assert.AreEqual(0, clickCount);
486498
break;
487499
default:
488500
Assert.Fail($"Unhandled {nameof(InteractableSelectMode)}={selectMode}");
489501
break;
490502
}
491503

504+
// Reset to continue testing
505+
ResetState();
506+
492507
TestHand firstReleasedHand;
493508
TestHand secondReleasedHand;
494509
if (releaseInSelectOrder)
@@ -524,8 +539,7 @@ public IEnumerator TestStatefulInteractableSelectMode(
524539
"StatefulInteractable should not be selected.");
525540
Assert.IsTrue(selectExited,
526541
"StatefulInteractable should have had a select exit.");
527-
// Reset to continue testing
528-
selectExited = false;
542+
Assert.AreEqual(triggerOnRelease ? 1 : 0, clickCount);
529543
}
530544
// The first hand was no longer selecting in Single mode
531545
// If we're releasing in the same order we selected,
@@ -540,13 +554,12 @@ public IEnumerator TestStatefulInteractableSelectMode(
540554
"StatefulInteractable should only have 1 selecting interactor.");
541555
Assert.IsTrue(isSelected,
542556
"StatefulInteractable should be selected.");
557+
Assert.AreEqual(0, clickCount);
543558

544559
if (selectMode == InteractableSelectMode.Multiple)
545560
{
546561
Assert.IsTrue(selectExited,
547562
"StatefulInteractable should have had a select exit.");
548-
// Reset to continue testing
549-
selectExited = false;
550563
}
551564
else
552565
{
@@ -556,6 +569,9 @@ public IEnumerator TestStatefulInteractableSelectMode(
556569
}
557570
}
558571

572+
// Reset to continue testing
573+
ResetState();
574+
559575
// Release the last hand to deselect the cube
560576
yield return secondReleasedHand.SetHandshape(HandshapeId.Open);
561577
yield return RuntimeTestUtilities.WaitForUpdates();
@@ -579,10 +595,12 @@ public IEnumerator TestStatefulInteractableSelectMode(
579595
{
580596
Assert.IsTrue(selectExited,
581597
"StatefulInteractable should have had a select exit.");
582-
// Reset to continue testing
583-
selectExited = false;
598+
Assert.AreEqual(triggerOnRelease ? 1 : 0, clickCount);
584599
}
585600

601+
// Reset to continue testing
602+
ResetState();
603+
586604
yield return RuntimeTestUtilities.WaitForUpdates();
587605
}
588606

0 commit comments

Comments
 (0)