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

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

Issue 2878543003: Hook up Reader Mode InfoBar (Closed)
Patch Set: fix disabled test Created 3 years, 7 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 unified diff | Download patch
OLDNEW
(Empty)
1 // Copyright 2015 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file.
4
5 package org.chromium.chrome.browser.dom_distiller;
6
7 import android.content.Context;
8 import android.support.test.InstrumentationRegistry;
9 import android.support.test.annotation.UiThreadTest;
10 import android.support.test.filters.SmallTest;
11 import android.support.test.rule.UiThreadTestRule;
12
13 import org.junit.Assert;
14 import org.junit.Before;
15 import org.junit.Rule;
16 import org.junit.Test;
17 import org.junit.runner.RunWith;
18
19 import org.chromium.base.test.util.Feature;
20 import org.chromium.base.test.util.RetryOnFailure;
21 import org.chromium.chrome.browser.compositor.bottombar.OverlayPanel.StateChange Reason;
22 import org.chromium.chrome.browser.compositor.bottombar.OverlayPanelContent;
23 import org.chromium.chrome.browser.compositor.bottombar.OverlayPanelManager;
24 import org.chromium.chrome.browser.compositor.bottombar.OverlayPanelManagerWrapp er;
25 import org.chromium.chrome.browser.compositor.bottombar.readermode.ReaderModeBar Control;
26 import org.chromium.chrome.browser.compositor.bottombar.readermode.ReaderModePan el;
27 import org.chromium.chrome.browser.compositor.scene_layer.ReaderModeSceneLayer;
28 import org.chromium.chrome.browser.tab.Tab;
29 import org.chromium.chrome.test.ChromeJUnit4ClassRunner;
30 import org.chromium.chrome.test.util.browser.tabmodel.MockTabModel.MockTabModelD elegate;
31 import org.chromium.chrome.test.util.browser.tabmodel.MockTabModelSelector;
32 import org.chromium.content_public.browser.WebContents;
33 import org.chromium.content_public.browser.WebContentsObserver;
34
35 /**
36 * Tests logic in the ReaderModeManager.
Theresa 2017/05/11 22:31:18 This class was mostly testing overlay panel behavi
mdjones 2017/05/12 19:13:10 Exclusively. It was testing all the interactions t
37 */
38 @RunWith(ChromeJUnit4ClassRunner.class)
39 public class ReaderModeManagerTest {
40 OverlayPanelManagerWrapper mPanelManager;
41 ReaderModeManagerWrapper mReaderManager;
42 MockReaderModePanel mPanel;
43 ReaderModeMockTabModelSelector mTabModelSelector;
44
45 @Rule
46 public UiThreadTestRule mRule = new UiThreadTestRule();
47
48 /**
49 * A mock TabModelSelector for creating tabs.
50 */
51 private static class ReaderModeMockTabModelSelector extends MockTabModelSele ctor {
52 public ReaderModeMockTabModelSelector() {
53 super(2, 0,
54 new MockTabModelDelegate() {
55 @Override
56 public Tab createTab(int id, boolean incognito) {
57 return new Tab(id, incognito, null);
58 }
59 });
60 }
61
62 @Override
63 public int getCurrentTabId() {
64 return 0;
65 }
66 }
67
68 /**
69 * A wrapper for the ReaderModeManager; this is used for recording and trigg ering events
70 * manually.
71 */
72 private static class ReaderModeManagerWrapper extends ReaderModeManager {
73 private int mRecordedCount;
74 private int mVisibleCount;
75 private boolean mShouldTrigger;
76
77 public ReaderModeManagerWrapper(MockTabModelSelector selector) {
78 super(selector, null);
79 mShouldTrigger = true;
80 }
81
82 @Override
83 protected void requestReaderPanelShow(StateChangeReason reason) {
84 // Skip tab checks and request the panel be shown.
85 if (mShouldTrigger) mReaderModePanel.requestPanelShow(reason);
86 }
87
88 @Override
89 public WebContentsObserver createWebContentsObserver(WebContents webCont ents) {
90 // Do not attempt to create or attach a WebContentsObserver.
91 return null;
92 }
93
94 @Override
95 protected boolean isDistillerHeuristicAlwaysTrue() {
96 return true;
97 }
98
99 @Override
100 protected void recordPanelVisibilityForNavigation(boolean visible) {
101 mRecordedCount++;
102 mVisibleCount += visible ? 1 : 0;
103 }
104
105 public void setShouldTrigger(boolean shouldTrigger) {
106 mShouldTrigger = shouldTrigger;
107 }
108
109 public int getRecordedCount() {
110 return mRecordedCount;
111 }
112
113 public int getVisibleCount() {
114 return mVisibleCount;
115 }
116
117 public ReaderModeTabInfo getTabInfo(int id) {
118 return mTabStatusMap.get(id);
119 }
120 }
121
122 /**
123 * Mock ReaderModePanel.
124 */
125 private static class MockReaderModePanel extends ReaderModePanel {
126 public MockReaderModePanel(Context context, OverlayPanelManager manager) {
127 super(context, null, manager, null);
128 }
129
130 @Override
131 public ReaderModeSceneLayer createNewReaderModeSceneLayer() {
132 return null;
133 }
134
135 @Override
136 public void peekPanel(StateChangeReason reason) {
137 setHeightForTesting(1);
138 super.peekPanel(reason);
139 }
140
141 @Override
142 protected ReaderModeBarControl getReaderModeBarControl() {
143 return new MockReaderModeBarControl();
144 }
145
146 /**
147 * This class is overridden to be completely inert; it would otherwise c all many native
148 * methods.
149 */
150 private static class MockReaderModeBarControl extends ReaderModeBarContr ol {
151 public MockReaderModeBarControl() {
152 super(null, null, null, null);
153 }
154
155 @Override
156 public void setBarText(int stringId) {}
157
158 @Override
159 public void inflate() {}
160
161 @Override
162 public void invalidate() {}
163 }
164
165 @Override
166 protected void initializeUiState() {}
167
168 /**
169 * Override creation and destruction of the ContentViewCore as they rely on native methods.
170 */
171 private static class MockOverlayPanelContent extends OverlayPanelContent {
172 public MockOverlayPanelContent() {
173 super(null, null, null);
174 }
175
176 @Override
177 public void removeLastHistoryEntry(String url, long timeInMs) {}
178 }
179 }
180
181 @Before
182 public void setUp() throws Exception {
183 mPanelManager = new OverlayPanelManagerWrapper();
184 mTabModelSelector = new ReaderModeMockTabModelSelector();
185 mReaderManager = new ReaderModeManagerWrapper(mTabModelSelector);
186 mPanel = new MockReaderModePanel(
187 InstrumentationRegistry.getInstrumentation().getTargetContext(), mPanelManager);
188 mReaderManager.setReaderModePanel(mPanel);
189 mPanel.setManagerDelegate(mReaderManager);
190 }
191
192 // Start ReaderModeManager test suite.
193
194 /**
195 * Tests that the panel behaves appropriately with infobar events.
196 */
197 @Test
198 @SmallTest
199 @Feature({"ReaderModeManager"})
200 @UiThreadTest
201 @RetryOnFailure
202 public void testInfoBarEvents() {
203 mPanel.requestPanelShow(StateChangeReason.UNKNOWN);
204
205 mReaderManager.onAddInfoBar(null, null, true);
206 Assert.assertEquals(1, mPanelManager.getRequestPanelShowCount());
207 Assert.assertEquals(1, mPanelManager.getPanelHideCount());
208
209 mReaderManager.onRemoveInfoBar(null, null, true);
210 Assert.assertEquals(2, mPanelManager.getRequestPanelShowCount());
211 Assert.assertEquals(1, mPanelManager.getPanelHideCount());
212 }
213
214 /**
215 * Tests that the panel behaves appropriately with fullscreen events.
216 */
217 @Test
218 @SmallTest
219 @Feature({"ReaderModeManager"})
220 @UiThreadTest
221 @RetryOnFailure
222 public void testFullscreenEvents() {
223 mPanel.requestPanelShow(StateChangeReason.UNKNOWN);
224
225 mReaderManager.onToggleFullscreenMode(null, true);
226 Assert.assertEquals(1, mPanelManager.getRequestPanelShowCount());
227 Assert.assertEquals(1, mPanelManager.getPanelHideCount());
228
229 mReaderManager.onToggleFullscreenMode(null, false);
230 Assert.assertEquals(2, mPanelManager.getRequestPanelShowCount());
231 Assert.assertEquals(1, mPanelManager.getPanelHideCount());
232 }
233
234 /**
235 * Tests that the metric that tracks when the panel is visible is correctly recorded.
236 */
237 @Test
238 @SmallTest
239 @Feature({"ReaderModeManager"})
240 @UiThreadTest
241 @RetryOnFailure
242 public void testPanelOpenRecorded() {
243 Tab tab = new Tab(0, false, null);
244 mReaderManager.onShown(tab);
245
246 Assert.assertEquals(1, mReaderManager.getRecordedCount());
247 Assert.assertEquals(1, mReaderManager.getVisibleCount());
248 Assert.assertTrue(null != mReaderManager.getTabInfo(0));
249
250 // Make sure recording the panel showing only occurs once per navigation .
251 mReaderManager.onShown(tab);
252
253 Assert.assertEquals(1, mReaderManager.getRecordedCount());
254 Assert.assertEquals(1, mReaderManager.getVisibleCount());
255
256 // Destroy shouldn't record either if the panel showed.
257 mReaderManager.onDestroyed(tab);
258
259 Assert.assertEquals(1, mReaderManager.getRecordedCount());
260 Assert.assertEquals(1, mReaderManager.getVisibleCount());
261 Assert.assertTrue(null == mReaderManager.getTabInfo(0));
262 }
263
264 /**
265 * Tests that a tab closing records the panel was not visible.
266 */
267 @Test
268 @SmallTest
269 @Feature({"ReaderModeManager"})
270 @UiThreadTest
271 @RetryOnFailure
272 public void testPanelCloseRecorded() {
273 Tab tab = new Tab(0, false, null);
274 mReaderManager.setShouldTrigger(false);
275 mReaderManager.onShown(tab);
276 mReaderManager.onDestroyed(tab);
277
278 Assert.assertEquals(1, mReaderManager.getRecordedCount());
279 Assert.assertEquals(0, mReaderManager.getVisibleCount());
280 Assert.assertTrue(null == mReaderManager.getTabInfo(0));
281 }
282
283 // TODO(mdjones): Test add/remove infobar while fullscreen is enabled.
284 // TODO(mdjones): Test onclosebuttonpressed disables Reader Mode for a parti cular tab.
285 // TODO(mdjones): Test onorientationchanged closes and re-opens panel.
286 // TODO(mdjones): Test tab events.
287 // TODO(mdjones): Test distillability callback.
288 }
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698