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

Unified Diff: chrome/android/javatests/src/org/chromium/chrome/browser/dom_distiller/ReaderModeManagerTest.java

Issue 1469973002: Initial tests for ReaderModeManager (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: make inner class static Created 5 years, 1 month 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
« no previous file with comments | « chrome/android/java/src/org/chromium/chrome/browser/dom_distiller/ReaderModeManager.java ('k') | no next file » | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
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.
+}
« no previous file with comments | « chrome/android/java/src/org/chromium/chrome/browser/dom_distiller/ReaderModeManager.java ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698