OLD | NEW |
---|---|
(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 } | |
OLD | NEW |