Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(5483)

Unified Diff: chrome/android/javatests/src/org/chromium/chrome/browser/widget/BottomSheetObserverTest.java

Issue 2698613006: [Home] Add lifecycle events and some tests (Closed)
Patch Set: fix previous patch Created 3 years, 10 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
Index: chrome/android/javatests/src/org/chromium/chrome/browser/widget/BottomSheetObserverTest.java
diff --git a/chrome/android/javatests/src/org/chromium/chrome/browser/widget/BottomSheetObserverTest.java b/chrome/android/javatests/src/org/chromium/chrome/browser/widget/BottomSheetObserverTest.java
new file mode 100644
index 0000000000000000000000000000000000000000..5ac72125bde6926dd57b7a85c7b84b633e1bc78c
--- /dev/null
+++ b/chrome/android/javatests/src/org/chromium/chrome/browser/widget/BottomSheetObserverTest.java
@@ -0,0 +1,200 @@
+// Copyright 2017 The Chromium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+package org.chromium.chrome.browser.widget;
+
+import android.support.test.filters.MediumTest;
+
+import org.chromium.base.test.util.CallbackHelper;
+import org.chromium.chrome.browser.util.MathUtils;
+import org.chromium.chrome.test.BottomSheetTestCaseBase;
+
+import java.util.concurrent.TimeoutException;
+
+/** This class tests the functionality of the {@link BottomSheetObserver}. */
+public class BottomSheetObserverTest extends BottomSheetTestCaseBase {
+ /** A handle to the sheet's observer. */
+ private TestBottomSheetObserver mObserver;
+
+ /** An observer used to record events that occur with respect to the bottom sheet. */
+ private static class TestBottomSheetObserver implements BottomSheetObserver {
+ /** A {@link CallbackHelper} that can wait for the bottom sheet to be closed. */
+ private final CallbackHelper mClosedCallbackHelper = new CallbackHelper();
+
+ /** A {@link CallbackHelper} that can wait for the bottom sheet to be opened. */
+ private final CallbackHelper mOpenedCallbackHelper = new CallbackHelper();
+
+ /** A {@link CallbackHelper} that can wait for the onTransitionPeekToHalf event. */
+ private final CallbackHelper mPeekToHalfCallbackHelper = new CallbackHelper();
+
+ /** The last value that the onTransitionPeekToHalf event sent. */
+ private float mLastPeekToHalfValue;
+
+ @Override
+ public void onTransitionPeekToHalf(float fraction) {
+ mLastPeekToHalfValue = fraction;
+ mPeekToHalfCallbackHelper.notifyCalled();
+ }
+
+ @Override
+ public void onSheetOpened() {
+ mOpenedCallbackHelper.notifyCalled();
+ }
+
+ @Override
+ public void onSheetClosed() {
+ mClosedCallbackHelper.notifyCalled();
+ }
+
+ @Override
+ public void onLoadUrl(String url) {}
+
+ public CallbackHelper getClosedCallbackHelper() {
+ return mClosedCallbackHelper;
+ }
+
+ public CallbackHelper getOpenedCallbackHelper() {
+ return mOpenedCallbackHelper;
+ }
+
+ public CallbackHelper getPeekToHalfCallbackHelper() {
+ return mPeekToHalfCallbackHelper;
+ }
+
+ public float getLastPeekToHalfValue() {
+ return mLastPeekToHalfValue;
+ }
+ }
+
+ @Override
+ protected void setUp() throws Exception {
+ super.setUp();
+
+ mObserver = new TestBottomSheetObserver();
+ mBottomSheet.addObserver(mObserver);
+ }
+
+ /**
+ * Test that the onSheetClosed event is triggered if the sheet is closed without animation.
+ */
+ @MediumTest
+ public void testCloseEventCalledNoAnimation() throws InterruptedException, TimeoutException {
+ setSheetState(BottomSheet.SHEET_STATE_FULL, false);
+
+ CallbackHelper closedCallbackHelper = mObserver.getClosedCallbackHelper();
+
+ int initialOpenedCount = mObserver.getOpenedCallbackHelper().getCallCount();
+
+ int closedCallbackCount = closedCallbackHelper.getCallCount();
+ setSheetState(BottomSheet.SHEET_STATE_PEEK, false);
+ closedCallbackHelper.waitForCallback(closedCallbackCount, 1);
+
+ assertEquals(initialOpenedCount, mObserver.getOpenedCallbackHelper().getCallCount());
+ }
+
+ /**
+ * Test that the onSheetClosed event is triggered if the sheet is closed with animation.
+ */
+ @MediumTest
+ public void testCloseEventCalledWithAnimation() throws InterruptedException, TimeoutException {
+ setSheetState(BottomSheet.SHEET_STATE_FULL, false);
+
+ CallbackHelper closedCallbackHelper = mObserver.getClosedCallbackHelper();
+
+ int initialOpenedCount = mObserver.getOpenedCallbackHelper().getCallCount();
+
+ int closedCallbackCount = closedCallbackHelper.getCallCount();
+ setSheetState(BottomSheet.SHEET_STATE_PEEK, true);
+ closedCallbackHelper.waitForCallback(closedCallbackCount, 1);
+
+ assertEquals(initialOpenedCount, mObserver.getOpenedCallbackHelper().getCallCount());
+ }
+
+ /**
+ * Test that the onSheetOpened event is triggered if the sheet is opened without animation.
+ */
+ @MediumTest
+ public void testOpenedEventCalledNoAnimation() throws InterruptedException, TimeoutException {
+ setSheetState(BottomSheet.SHEET_STATE_PEEK, false);
+
+ CallbackHelper openedCallbackHelper = mObserver.getOpenedCallbackHelper();
+
+ int initialClosedCount = mObserver.getClosedCallbackHelper().getCallCount();
+
+ int openedCallbackCount = openedCallbackHelper.getCallCount();
+ setSheetState(BottomSheet.SHEET_STATE_FULL, false);
+ openedCallbackHelper.waitForCallback(openedCallbackCount, 1);
+
+ assertEquals(initialClosedCount, mObserver.getClosedCallbackHelper().getCallCount());
+ }
+
+ /**
+ * Test that the onSheetOpened event is triggered if the sheet is opened with animation.
+ */
+ @MediumTest
+ public void testOpenedEventCalledWithAnimation() throws InterruptedException, TimeoutException {
+ setSheetState(BottomSheet.SHEET_STATE_PEEK, false);
+
+ CallbackHelper openedCallbackHelper = mObserver.getOpenedCallbackHelper();
+
+ int initialClosedCount = mObserver.getClosedCallbackHelper().getCallCount();
+
+ int openedCallbackCount = openedCallbackHelper.getCallCount();
+ setSheetState(BottomSheet.SHEET_STATE_FULL, true);
+ openedCallbackHelper.waitForCallback(openedCallbackCount, 1);
+
+ assertEquals(initialClosedCount, mObserver.getClosedCallbackHelper().getCallCount());
+ }
+
+ /**
+ * Test the onTransitionPeekToHalf event.
+ */
+ @MediumTest
+ public void testPeekToHalfTransition() throws InterruptedException, TimeoutException {
+ CallbackHelper callbackHelper = mObserver.getPeekToHalfCallbackHelper();
+
+ float peekHeight = mBottomSheet.getPeekRatio() * mBottomSheet.getSheetContainerHeight();
+ float halfHeight = mBottomSheet.getHalfRatio() * mBottomSheet.getSheetContainerHeight();
+ float fullHeight = mBottomSheet.getFullRatio() * mBottomSheet.getSheetContainerHeight();
+
+ float midPeekHalf = (peekHeight + halfHeight) / 2f;
+ float midHalfFull = (halfHeight + fullHeight) / 2f;
+
+ // When in the peeking state, the transition value should be 0.
+ int callbackCount = callbackHelper.getCallCount();
+ setSheetOffsetFromBottom(peekHeight);
+ callbackHelper.waitForCallback(callbackCount, 1);
+ assertEquals(0f, mObserver.getLastPeekToHalfValue(), MathUtils.EPSILON);
+
+ // When in between peek and half states, the transition value should be 0.5.
+ callbackCount = callbackHelper.getCallCount();
+ setSheetOffsetFromBottom(midPeekHalf);
+ callbackHelper.waitForCallback(callbackCount, 1);
+ assertEquals(0.5f, mObserver.getLastPeekToHalfValue(), MathUtils.EPSILON);
+
+ // After jumping to the full state (skipping the half state), the event should have
+ // triggered once more with a max value of 1.
+ callbackCount = callbackHelper.getCallCount();
+ setSheetOffsetFromBottom(fullHeight);
+ callbackHelper.waitForCallback(callbackCount, 1);
+ assertEquals(1f, mObserver.getLastPeekToHalfValue(), MathUtils.EPSILON);
+
+ // Moving from full to somewhere between half and full should not trigger the event.
+ callbackCount = callbackHelper.getCallCount();
+ setSheetOffsetFromBottom(midHalfFull);
+ assertEquals(callbackCount, callbackHelper.getCallCount());
+
+ // Reset the sheet to be between peek and half states.
+ callbackCount = callbackHelper.getCallCount();
+ setSheetOffsetFromBottom(midPeekHalf);
+ callbackHelper.waitForCallback(callbackCount, 1);
+ assertEquals(0.5f, mObserver.getLastPeekToHalfValue(), MathUtils.EPSILON);
+
+ // At the half state the event should send 1.
+ callbackCount = callbackHelper.getCallCount();
+ setSheetOffsetFromBottom(halfHeight);
+ callbackHelper.waitForCallback(callbackCount, 1);
+ assertEquals(1f, mObserver.getLastPeekToHalfValue(), MathUtils.EPSILON);
+ }
+}

Powered by Google App Engine
This is Rietveld 408576698