test_class.file: library/src/test/java/com/mapbox/android/gestures/RotateGestureDetectorTest.java
test_class.identifier: RotateGestureDetectorTest
test_class.superclass: extends
    AbstractGestureDetectorTest<RotateGestureDetector, RotateGestureDetector.OnRotateGestureListener>
test_case.body: @Test
    public void analyzeMovementTest() throws Exception {
      when(listener.onRotateBegin(gestureDetector)).thenReturn(true);
      when(listener.onRotate(gestureDetector, gestureDetector.deltaSinceLast, gestureDetector.deltaSinceStart))
        .thenReturn(true);
  
      // threshold not met
      doReturn(Constants.DEFAULT_ROTATE_ANGLE_THRESHOLD / 2)
        .when(gestureDetector).getRotationDegreesSinceLast();
      gestureDetector.analyzeMovement();
  
      // threshold met, starting
      doReturn(Constants.DEFAULT_ROTATE_ANGLE_THRESHOLD * 2)
        .when(gestureDetector).getRotationDegreesSinceLast();
      gestureDetector.analyzeMovement();
  
      // new event, executing onRotate()
      gestureDetector.analyzeMovement();
      verify(listener, times(1)).onRotate(gestureDetector,
        gestureDetector.deltaSinceLast, gestureDetector.deltaSinceStart);
  
      // new event, executing onRotate() even though below threshold because already started
      doReturn(Constants.DEFAULT_ROTATE_ANGLE_THRESHOLD / 2)
        .when(gestureDetector).getRotationDegreesSinceLast();
      gestureDetector.analyzeMovement();
      //still 1 invocation because parameters changed, but technically 2
      verify(listener, times(1)).onRotate(gestureDetector,
        gestureDetector.deltaSinceLast, gestureDetector.deltaSinceStart);
  
      // stopping
      gestureDetector.gestureStopped();
  
      // not starting because threshold not met
      gestureDetector.analyzeMovement();
  
      verify(listener, times(1)).onRotateBegin(gestureDetector);
      verify(listener, times(1)).onRotateEnd(
        gestureDetector, gestureDetector.velocityX, gestureDetector.velocityY,
        gestureDetector.calculateAngularVelocityVector(gestureDetector.velocityX, gestureDetector.velocityY));
    }
test_case.class_method_signature: RotateGestureDetectorTest.analyzeMovementTest()
test_case.full_signature: @Test public void analyzeMovementTest()
test_case.identifier: analyzeMovementTest
test_case.invocations: thenReturn when onRotateBegin thenReturn when onRotate getRotationDegreesSinceLast when doReturn analyzeMovement getRotationDegreesSinceLast when doReturn analyzeMovement analyzeMovement onRotate verify times getRotationDegreesSinceLast when doReturn analyzeMovement onRotate verify times gestureStopped analyzeMovement onRotateBegin verify times onRotateEnd verify times calculateAngularVelocityVector
test_case.modifiers: @Test public
test_case.parameters: ()
test_case.return: void
test_case.signature: void analyzeMovementTest()
focal_class.declarator: handledTypes = new HashSet<>()
focal_class.modifier: private static final
focal_class.original_string: private static final Set<Integer> handledTypes = new HashSet<>();
focal_class.type: Set<Integer>
focal_class.var_name: handledTypes
focal_class.declarator: angleThreshold
focal_class.modifier: private
focal_class.original_string: private float angleThreshold;
focal_class.type: float
focal_class.var_name: angleThreshold
focal_class.declarator: deltaSinceStart
focal_class.original_string: float deltaSinceStart;
focal_class.type: float
focal_class.var_name: deltaSinceStart
focal_class.declarator: deltaSinceLast
focal_class.original_string: float deltaSinceLast;
focal_class.type: float
focal_class.var_name: deltaSinceLast
focal_class.file: library/src/main/java/com/mapbox/android/gestures/RotateGestureDetector.java
focal_class.identifier: RotateGestureDetector
focal_class.class_method_signature: RotateGestureDetector.RotateGestureDetector(Context context, AndroidGesturesManager gesturesManager)
focal_class.full_signature: public  RotateGestureDetector(Context context, AndroidGesturesManager gesturesManager)
focal_class.identifier: RotateGestureDetector
focal_class.modifiers: public
focal_class.parameters: (Context context, AndroidGesturesManager gesturesManager)
focal_class.signature:  RotateGestureDetector(Context context, AndroidGesturesManager gesturesManager)
focal_class.class_method_signature: RotateGestureDetector.provideHandledTypes()
focal_class.full_signature: @NonNull @Override protected Set<Integer> provideHandledTypes()
focal_class.identifier: provideHandledTypes
focal_class.modifiers: @NonNull @Override protected
focal_class.parameters: ()
focal_class.return: Set<Integer>
focal_class.signature: Set<Integer> provideHandledTypes()
focal_class.class_method_signature: RotateGestureDetector.analyzeMovement()
focal_class.full_signature: @Override protected boolean analyzeMovement()
focal_class.identifier: analyzeMovement
focal_class.modifiers: @Override protected
focal_class.parameters: ()
focal_class.return: boolean
focal_class.signature: boolean analyzeMovement()
focal_class.class_method_signature: RotateGestureDetector.canExecute(int invokedGestureType)
focal_class.full_signature: @Override protected boolean canExecute(int invokedGestureType)
focal_class.identifier: canExecute
focal_class.modifiers: @Override protected
focal_class.parameters: (int invokedGestureType)
focal_class.return: boolean
focal_class.signature: boolean canExecute(int invokedGestureType)
focal_class.class_method_signature: RotateGestureDetector.gestureStopped()
focal_class.full_signature: @Override protected void gestureStopped()
focal_class.identifier: gestureStopped
focal_class.modifiers: @Override protected
focal_class.parameters: ()
focal_class.return: void
focal_class.signature: void gestureStopped()
focal_class.class_method_signature: RotateGestureDetector.reset()
focal_class.full_signature: @Override protected void reset()
focal_class.identifier: reset
focal_class.modifiers: @Override protected
focal_class.parameters: ()
focal_class.return: void
focal_class.signature: void reset()
focal_class.class_method_signature: RotateGestureDetector.getRotationDegreesSinceLast()
focal_class.full_signature:  float getRotationDegreesSinceLast()
focal_class.identifier: getRotationDegreesSinceLast
focal_class.parameters: ()
focal_class.return: float
focal_class.signature: float getRotationDegreesSinceLast()
focal_class.class_method_signature: RotateGestureDetector.calculateAngularVelocityVector(float velocityX, float velocityY)
focal_class.full_signature:  float calculateAngularVelocityVector(float velocityX, float velocityY)
focal_class.identifier: calculateAngularVelocityVector
focal_class.parameters: (float velocityX, float velocityY)
focal_class.return: float
focal_class.signature: float calculateAngularVelocityVector(float velocityX, float velocityY)
focal_class.class_method_signature: RotateGestureDetector.getDeltaSinceStart()
focal_class.full_signature: public float getDeltaSinceStart()
focal_class.identifier: getDeltaSinceStart
focal_class.modifiers: public
focal_class.parameters: ()
focal_class.return: float
focal_class.signature: float getDeltaSinceStart()
focal_class.class_method_signature: RotateGestureDetector.getDeltaSinceLast()
focal_class.full_signature: public float getDeltaSinceLast()
focal_class.identifier: getDeltaSinceLast
focal_class.modifiers: public
focal_class.parameters: ()
focal_class.return: float
focal_class.signature: float getDeltaSinceLast()
focal_class.class_method_signature: RotateGestureDetector.getAngleThreshold()
focal_class.full_signature: public float getAngleThreshold()
focal_class.identifier: getAngleThreshold
focal_class.modifiers: public
focal_class.parameters: ()
focal_class.return: float
focal_class.signature: float getAngleThreshold()
focal_class.class_method_signature: RotateGestureDetector.setAngleThreshold(float angleThreshold)
focal_class.full_signature: public void setAngleThreshold(float angleThreshold)
focal_class.identifier: setAngleThreshold
focal_class.modifiers: public
focal_class.parameters: (float angleThreshold)
focal_class.return: void
focal_class.signature: void setAngleThreshold(float angleThreshold)
focal_class.superclass: extends ProgressiveGesture<RotateGestureDetector.OnRotateGestureListener>
focal_method.body: @Override
    protected boolean analyzeMovement() {
      super.analyzeMovement();
  
      deltaSinceLast = getRotationDegreesSinceLast();
      deltaSinceStart += deltaSinceLast;
  
      if (isInProgress() && deltaSinceLast != 0) {
        return listener.onRotate(this, deltaSinceLast, deltaSinceStart);
      } else if (canExecute(GESTURE_TYPE_ROTATE)) {
        if (listener.onRotateBegin(this)) {
          gestureStarted();
          return true;
        }
      }
  
      return false;
    }
focal_method.class_method_signature: RotateGestureDetector.analyzeMovement()
focal_method.full_signature: @Override protected boolean analyzeMovement()
focal_method.identifier: analyzeMovement
focal_method.invocations: analyzeMovement getRotationDegreesSinceLast isInProgress onRotate canExecute onRotateBegin gestureStarted
focal_method.modifiers: @Override protected
focal_method.parameters: ()
focal_method.return: boolean
focal_method.signature: boolean analyzeMovement()