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