| Index: chrome/android/javatests/src/org/chromium/chrome/browser/dom_distiller/ReaderModeManagerTest.java
|
| diff --git a/chrome/android/javatests/src/org/chromium/chrome/browser/dom_distiller/ReaderModeManagerTest.java b/chrome/android/javatests/src/org/chromium/chrome/browser/dom_distiller/ReaderModeManagerTest.java
|
| new file mode 100644
|
| index 0000000000000000000000000000000000000000..0a7d394acbc79450c49b55233ef798b29b3a6631
|
| --- /dev/null
|
| +++ b/chrome/android/javatests/src/org/chromium/chrome/browser/dom_distiller/ReaderModeManagerTest.java
|
| @@ -0,0 +1,194 @@
|
| +// Copyright 2015 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.dom_distiller;
|
| +
|
| +import android.content.Context;
|
| +import android.test.InstrumentationTestCase;
|
| +import android.test.suitebuilder.annotation.SmallTest;
|
| +
|
| +import org.chromium.base.test.util.Feature;
|
| +import org.chromium.chrome.browser.compositor.bottombar.OverlayPanel;
|
| +import org.chromium.chrome.browser.compositor.bottombar.OverlayPanel.StateChangeReason;
|
| +import org.chromium.chrome.browser.compositor.bottombar.OverlayPanelContent;
|
| +import org.chromium.chrome.browser.compositor.bottombar.OverlayPanelManager;
|
| +import org.chromium.chrome.browser.compositor.bottombar.readermode.ReaderModeBarControl;
|
| +import org.chromium.chrome.browser.compositor.bottombar.readermode.ReaderModePanel;
|
| +import org.chromium.chrome.browser.compositor.scene_layer.ContextualSearchSceneLayer;
|
| +import org.chromium.chrome.browser.tab.Tab;
|
| +import org.chromium.chrome.test.util.browser.tabmodel.MockTabModel.MockTabModelDelegate;
|
| +import org.chromium.chrome.test.util.browser.tabmodel.MockTabModelSelector;
|
| +import org.chromium.content_public.browser.WebContents;
|
| +import org.chromium.content_public.browser.WebContentsObserver;
|
| +
|
| +/**
|
| + * Tests logic in the ReaderModeManager.
|
| + */
|
| +public class ReaderModeManagerTest extends InstrumentationTestCase {
|
| +
|
| + MockOverlayPanelManager mPanelManager;
|
| + ReaderModeManagerWrapper mReaderManager;
|
| + MockReaderModePanel mPanel;
|
| +
|
| + /**
|
| + * A mock TabModelSelector for creating tabs.
|
| + */
|
| + private static class ReaderModeMockTabModelSelector extends MockTabModelSelector {
|
| + public ReaderModeMockTabModelSelector() {
|
| + super(2, 0,
|
| + new MockTabModelDelegate() {
|
| + @Override
|
| + public Tab createTab(int id, boolean incognito) {
|
| + return new Tab(id, incognito, null);
|
| + }
|
| + });
|
| + }
|
| + }
|
| +
|
| + /**
|
| + * Mock OverlayPanelManager for recording but not actually performing events. This will also
|
| + * detect calls to show/hide panel that do not pass through the ReaderModeManager's methods.
|
| + */
|
| + private static class MockOverlayPanelManager extends OverlayPanelManager {
|
| + private int mRequestPanelShowCount;
|
| + private int mPanelHideCount;
|
| +
|
| + @Override
|
| + public void requestPanelShow(OverlayPanel p, StateChangeReason r) {
|
| + mRequestPanelShowCount++;
|
| + }
|
| +
|
| + @Override
|
| + public void notifyPanelClosed(OverlayPanel p, StateChangeReason r) {
|
| + mPanelHideCount++;
|
| + }
|
| +
|
| + public int getRequestPanelShowCount() {
|
| + return mRequestPanelShowCount;
|
| + }
|
| +
|
| + public int getPanelHideCount() {
|
| + return mPanelHideCount;
|
| + }
|
| + }
|
| +
|
| + /**
|
| + * A wrapper for the ReaderModeManager; this is used for recording and triggering events
|
| + * manually.
|
| + */
|
| + private static class ReaderModeManagerWrapper extends ReaderModeManager {
|
| + public ReaderModeManagerWrapper() {
|
| + super(new ReaderModeMockTabModelSelector(), null);
|
| + }
|
| +
|
| + @Override
|
| + protected void requestReaderPanelShow(StateChangeReason reason) {
|
| + // Skip tab checks and request the panel be shown.
|
| + mReaderModePanel.requestPanelShow(reason);
|
| + }
|
| +
|
| + @Override
|
| + public WebContentsObserver createWebContentsObserver(WebContents webContents) {
|
| + // Do not attempt to create or attach a WebContentsObserver.
|
| + return null;
|
| + }
|
| + }
|
| +
|
| + /**
|
| + * Mock ReaderModePanel.
|
| + */
|
| + private static class MockReaderModePanel extends ReaderModePanel {
|
| + public MockReaderModePanel(Context context, OverlayPanelManager manager) {
|
| + super(context, null, manager, null);
|
| + }
|
| +
|
| + @Override
|
| + public ContextualSearchSceneLayer createNewReaderModeSceneLayer() {
|
| + return null;
|
| + }
|
| +
|
| + @Override
|
| + protected ReaderModeBarControl getReaderModeBarControl() {
|
| + return new MockReaderModeBarControl();
|
| + }
|
| +
|
| + /**
|
| + * This class is overridden to be completely inert; it would otherwise call many native
|
| + * methods.
|
| + */
|
| + private static class MockReaderModeBarControl extends ReaderModeBarControl {
|
| + public MockReaderModeBarControl() {
|
| + super(null, null, null, null);
|
| + }
|
| +
|
| + @Override
|
| + public void setBarText(int stringId) {}
|
| +
|
| + @Override
|
| + public void inflate() {}
|
| +
|
| + @Override
|
| + public void invalidate() {}
|
| + }
|
| +
|
| + /**
|
| + * Override creation and destruction of the ContentViewCore as they rely on native methods.
|
| + */
|
| + private static class MockOverlayPanelContent extends OverlayPanelContent {
|
| + public MockOverlayPanelContent() {
|
| + super(null, null, null);
|
| + }
|
| +
|
| + @Override
|
| + public void removeLastHistoryEntry(String url, long timeInMs) {}
|
| + }
|
| + }
|
| +
|
| + @Override
|
| + protected void setUp() throws Exception {
|
| + super.setUp();
|
| + mPanelManager = new MockOverlayPanelManager();
|
| + mReaderManager = new ReaderModeManagerWrapper();
|
| + mPanel = new MockReaderModePanel(getInstrumentation().getTargetContext(), mPanelManager);
|
| + mReaderManager.setReaderModePanel(mPanel);
|
| + }
|
| +
|
| + // Start ReaderModeManager test suite.
|
| +
|
| + /**
|
| + * Tests that the panel behaves appropriately with infobar events.
|
| + */
|
| + @SmallTest
|
| + @Feature({"ReaderModeManager"})
|
| + public void testInfoBarEvents() {
|
| + mReaderManager.onAddInfoBar(null, null, true);
|
| + assertEquals(0, mPanelManager.getRequestPanelShowCount());
|
| + assertEquals(1, mPanelManager.getPanelHideCount());
|
| +
|
| + mReaderManager.onRemoveInfoBar(null, null, true);
|
| + assertEquals(1, mPanelManager.getRequestPanelShowCount());
|
| + assertEquals(1, mPanelManager.getPanelHideCount());
|
| + }
|
| +
|
| + /**
|
| + * Tests that the panel behaves appropriately with fullscreen events.
|
| + */
|
| + @SmallTest
|
| + @Feature({"ReaderModeManager"})
|
| + public void testFullscreenEvents() {
|
| + mReaderManager.onToggleFullscreenMode(null, true);
|
| + assertEquals(0, mPanelManager.getRequestPanelShowCount());
|
| + assertEquals(1, mPanelManager.getPanelHideCount());
|
| +
|
| + mReaderManager.onToggleFullscreenMode(null, false);
|
| + assertEquals(1, mPanelManager.getRequestPanelShowCount());
|
| + assertEquals(1, mPanelManager.getPanelHideCount());
|
| + }
|
| +
|
| + // TODO(mdjones): Test add/remove infobar while fullscreen is enabled.
|
| + // TODO(mdjones): Test onclosebuttonpressed disables Reader Mode for a particular tab.
|
| + // TODO(mdjones): Test onorientationchanged closes and re-opens panel.
|
| + // TODO(mdjones): Test tab events.
|
| + // TODO(mdjones): Test distillability callback.
|
| +}
|
|
|