@@ -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