/**
* Copyright (c) 2014-present, Facebook, Inc.
* All rights reserved.
* This source code is licensed under the BSD-style license found in the
* LICENSE file in the root directory of this source tree. An additional grant
* of patent rights can be found in the PATENTS file in the same directory.
*/
package com.facebook.react.tests;
import android.widget.ScrollView;
import com.facebook.react.uimanager.PixelUtil;
import com.facebook.react.testing.ReactAppInstrumentationTestCase;
import com.facebook.react.testing.SingleTouchGestureGenerator;
/**
* Test case to verify that JSResponder flow work correctly.
*
* In a single test case scenario we have a view with pan gesture recognizer containing a scrollview
* We werify that by vertical drags affects a scrollview while horizontal drags are suppose to
* be recognized by pan responder and setJSResponder should be triggered resulting in scrollview
* events being intercepted.
*/
public class JSResponderTestCase extends ReactAppInstrumentationTestCase {
@Override
protected String getReactApplicationKeyUnderTest() {
return "JSResponderTestApp";
}
public void testResponderLocksScrollView() {
ScrollView scrollView = getViewByTestId("scroll_view");
assertNotNull(scrollView);
assertEquals(0, scrollView.getScrollY());
float inpx40dp = PixelUtil.toPixelFromDIP(40f);
float inpx100dp = PixelUtil.toPixelFromDIP(100f);
SingleTouchGestureGenerator gestureGenerator = createGestureGenerator();
gestureGenerator
.startGesture(30, 30 + inpx100dp)
.dragTo(30 + inpx40dp, 30, 10, 1200)
.endGesture(180, 100);
waitForBridgeAndUIIdle();
assertTrue("Expected to scroll by at least 80 dp", scrollView.getScrollY() >= inpx100dp * .8f);
int previousScroll = scrollView.getScrollY();
gestureGenerator
.startGesture(30, 30 + inpx100dp)
.dragTo(30 + inpx40dp, 30 + inpx100dp, 10, 1200);
waitForBridgeAndUIIdle();
gestureGenerator
.dragTo(30 + inpx40dp, 30, 10, 1200)
.endGesture();
waitForBridgeAndUIIdle();
assertEquals("Expected not to scroll", scrollView.getScrollY(), previousScroll);
}
}