| OLD | NEW |
| 1 // Copyright 2015 The Chromium Authors. All rights reserved. | 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 | 2 // Use of this source code is governed by a BSD-style license that can be |
| 3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
| 4 | 4 |
| 5 package org.chromium.chrome.browser.dom_distiller; | 5 package org.chromium.chrome.browser.dom_distiller; |
| 6 | 6 |
| 7 import android.content.Context; | 7 import android.content.Context; |
| 8 import android.support.test.InstrumentationRegistry; |
| 9 import android.support.test.annotation.UiThreadTest; |
| 8 import android.support.test.filters.SmallTest; | 10 import android.support.test.filters.SmallTest; |
| 9 import android.test.InstrumentationTestCase; | 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; |
| 10 | 18 |
| 11 import org.chromium.base.test.util.Feature; | 19 import org.chromium.base.test.util.Feature; |
| 12 import org.chromium.base.test.util.RetryOnFailure; | 20 import org.chromium.base.test.util.RetryOnFailure; |
| 13 import org.chromium.chrome.browser.compositor.bottombar.OverlayPanel.StateChange
Reason; | 21 import org.chromium.chrome.browser.compositor.bottombar.OverlayPanel.StateChange
Reason; |
| 14 import org.chromium.chrome.browser.compositor.bottombar.OverlayPanelContent; | 22 import org.chromium.chrome.browser.compositor.bottombar.OverlayPanelContent; |
| 15 import org.chromium.chrome.browser.compositor.bottombar.OverlayPanelManager; | 23 import org.chromium.chrome.browser.compositor.bottombar.OverlayPanelManager; |
| 16 import org.chromium.chrome.browser.compositor.bottombar.OverlayPanelManagerWrapp
er; | 24 import org.chromium.chrome.browser.compositor.bottombar.OverlayPanelManagerWrapp
er; |
| 17 import org.chromium.chrome.browser.compositor.bottombar.readermode.ReaderModeBar
Control; | 25 import org.chromium.chrome.browser.compositor.bottombar.readermode.ReaderModeBar
Control; |
| 18 import org.chromium.chrome.browser.compositor.bottombar.readermode.ReaderModePan
el; | 26 import org.chromium.chrome.browser.compositor.bottombar.readermode.ReaderModePan
el; |
| 19 import org.chromium.chrome.browser.compositor.scene_layer.ReaderModeSceneLayer; | 27 import org.chromium.chrome.browser.compositor.scene_layer.ReaderModeSceneLayer; |
| 20 import org.chromium.chrome.browser.tab.Tab; | 28 import org.chromium.chrome.browser.tab.Tab; |
| 29 import org.chromium.chrome.test.ChromeJUnit4ClassRunner; |
| 21 import org.chromium.chrome.test.util.browser.tabmodel.MockTabModel.MockTabModelD
elegate; | 30 import org.chromium.chrome.test.util.browser.tabmodel.MockTabModel.MockTabModelD
elegate; |
| 22 import org.chromium.chrome.test.util.browser.tabmodel.MockTabModelSelector; | 31 import org.chromium.chrome.test.util.browser.tabmodel.MockTabModelSelector; |
| 23 import org.chromium.content_public.browser.WebContents; | 32 import org.chromium.content_public.browser.WebContents; |
| 24 import org.chromium.content_public.browser.WebContentsObserver; | 33 import org.chromium.content_public.browser.WebContentsObserver; |
| 25 | 34 |
| 26 /** | 35 /** |
| 27 * Tests logic in the ReaderModeManager. | 36 * Tests logic in the ReaderModeManager. |
| 28 */ | 37 */ |
| 29 public class ReaderModeManagerTest extends InstrumentationTestCase { | 38 @RunWith(ChromeJUnit4ClassRunner.class) |
| 30 | 39 public class ReaderModeManagerTest { |
| 31 OverlayPanelManagerWrapper mPanelManager; | 40 OverlayPanelManagerWrapper mPanelManager; |
| 32 ReaderModeManagerWrapper mReaderManager; | 41 ReaderModeManagerWrapper mReaderManager; |
| 33 MockReaderModePanel mPanel; | 42 MockReaderModePanel mPanel; |
| 34 ReaderModeMockTabModelSelector mTabModelSelector; | 43 ReaderModeMockTabModelSelector mTabModelSelector; |
| 35 | 44 |
| 45 @Rule |
| 46 public UiThreadTestRule mRule = new UiThreadTestRule(); |
| 47 |
| 36 /** | 48 /** |
| 37 * A mock TabModelSelector for creating tabs. | 49 * A mock TabModelSelector for creating tabs. |
| 38 */ | 50 */ |
| 39 private static class ReaderModeMockTabModelSelector extends MockTabModelSele
ctor { | 51 private static class ReaderModeMockTabModelSelector extends MockTabModelSele
ctor { |
| 40 public ReaderModeMockTabModelSelector() { | 52 public ReaderModeMockTabModelSelector() { |
| 41 super(2, 0, | 53 super(2, 0, |
| 42 new MockTabModelDelegate() { | 54 new MockTabModelDelegate() { |
| 43 @Override | 55 @Override |
| 44 public Tab createTab(int id, boolean incognito) { | 56 public Tab createTab(int id, boolean incognito) { |
| 45 return new Tab(id, incognito, null); | 57 return new Tab(id, incognito, null); |
| (...skipping 113 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 159 private static class MockOverlayPanelContent extends OverlayPanelContent
{ | 171 private static class MockOverlayPanelContent extends OverlayPanelContent
{ |
| 160 public MockOverlayPanelContent() { | 172 public MockOverlayPanelContent() { |
| 161 super(null, null, null); | 173 super(null, null, null); |
| 162 } | 174 } |
| 163 | 175 |
| 164 @Override | 176 @Override |
| 165 public void removeLastHistoryEntry(String url, long timeInMs) {} | 177 public void removeLastHistoryEntry(String url, long timeInMs) {} |
| 166 } | 178 } |
| 167 } | 179 } |
| 168 | 180 |
| 169 @Override | 181 @Before |
| 170 protected void setUp() throws Exception { | 182 public void setUp() throws Exception { |
| 171 super.setUp(); | |
| 172 mPanelManager = new OverlayPanelManagerWrapper(); | 183 mPanelManager = new OverlayPanelManagerWrapper(); |
| 173 mTabModelSelector = new ReaderModeMockTabModelSelector(); | 184 mTabModelSelector = new ReaderModeMockTabModelSelector(); |
| 174 mReaderManager = new ReaderModeManagerWrapper(mTabModelSelector); | 185 mReaderManager = new ReaderModeManagerWrapper(mTabModelSelector); |
| 175 mPanel = new MockReaderModePanel(getInstrumentation().getTargetContext()
, mPanelManager); | 186 mPanel = new MockReaderModePanel( |
| 187 InstrumentationRegistry.getInstrumentation().getTargetContext(),
mPanelManager); |
| 176 mReaderManager.setReaderModePanel(mPanel); | 188 mReaderManager.setReaderModePanel(mPanel); |
| 177 mPanel.setManagerDelegate(mReaderManager); | 189 mPanel.setManagerDelegate(mReaderManager); |
| 178 } | 190 } |
| 179 | 191 |
| 180 // Start ReaderModeManager test suite. | 192 // Start ReaderModeManager test suite. |
| 181 | 193 |
| 182 /** | 194 /** |
| 183 * Tests that the panel behaves appropriately with infobar events. | 195 * Tests that the panel behaves appropriately with infobar events. |
| 184 */ | 196 */ |
| 197 @Test |
| 185 @SmallTest | 198 @SmallTest |
| 186 @Feature({"ReaderModeManager"}) | 199 @Feature({"ReaderModeManager"}) |
| 200 @UiThreadTest |
| 187 @RetryOnFailure | 201 @RetryOnFailure |
| 188 public void testInfoBarEvents() { | 202 public void testInfoBarEvents() { |
| 189 mPanel.requestPanelShow(StateChangeReason.UNKNOWN); | 203 mPanel.requestPanelShow(StateChangeReason.UNKNOWN); |
| 190 | 204 |
| 191 mReaderManager.onAddInfoBar(null, null, true); | 205 mReaderManager.onAddInfoBar(null, null, true); |
| 192 assertEquals(1, mPanelManager.getRequestPanelShowCount()); | 206 Assert.assertEquals(1, mPanelManager.getRequestPanelShowCount()); |
| 193 assertEquals(1, mPanelManager.getPanelHideCount()); | 207 Assert.assertEquals(1, mPanelManager.getPanelHideCount()); |
| 194 | 208 |
| 195 mReaderManager.onRemoveInfoBar(null, null, true); | 209 mReaderManager.onRemoveInfoBar(null, null, true); |
| 196 assertEquals(2, mPanelManager.getRequestPanelShowCount()); | 210 Assert.assertEquals(2, mPanelManager.getRequestPanelShowCount()); |
| 197 assertEquals(1, mPanelManager.getPanelHideCount()); | 211 Assert.assertEquals(1, mPanelManager.getPanelHideCount()); |
| 198 } | 212 } |
| 199 | 213 |
| 200 /** | 214 /** |
| 201 * Tests that the panel behaves appropriately with fullscreen events. | 215 * Tests that the panel behaves appropriately with fullscreen events. |
| 202 */ | 216 */ |
| 217 @Test |
| 203 @SmallTest | 218 @SmallTest |
| 204 @Feature({"ReaderModeManager"}) | 219 @Feature({"ReaderModeManager"}) |
| 220 @UiThreadTest |
| 205 @RetryOnFailure | 221 @RetryOnFailure |
| 206 public void testFullscreenEvents() { | 222 public void testFullscreenEvents() { |
| 207 mPanel.requestPanelShow(StateChangeReason.UNKNOWN); | 223 mPanel.requestPanelShow(StateChangeReason.UNKNOWN); |
| 208 | 224 |
| 209 mReaderManager.onToggleFullscreenMode(null, true); | 225 mReaderManager.onToggleFullscreenMode(null, true); |
| 210 assertEquals(1, mPanelManager.getRequestPanelShowCount()); | 226 Assert.assertEquals(1, mPanelManager.getRequestPanelShowCount()); |
| 211 assertEquals(1, mPanelManager.getPanelHideCount()); | 227 Assert.assertEquals(1, mPanelManager.getPanelHideCount()); |
| 212 | 228 |
| 213 mReaderManager.onToggleFullscreenMode(null, false); | 229 mReaderManager.onToggleFullscreenMode(null, false); |
| 214 assertEquals(2, mPanelManager.getRequestPanelShowCount()); | 230 Assert.assertEquals(2, mPanelManager.getRequestPanelShowCount()); |
| 215 assertEquals(1, mPanelManager.getPanelHideCount()); | 231 Assert.assertEquals(1, mPanelManager.getPanelHideCount()); |
| 216 } | 232 } |
| 217 | 233 |
| 218 /** | 234 /** |
| 219 * Tests that the metric that tracks when the panel is visible is correctly
recorded. | 235 * Tests that the metric that tracks when the panel is visible is correctly
recorded. |
| 220 */ | 236 */ |
| 237 @Test |
| 221 @SmallTest | 238 @SmallTest |
| 222 @Feature({"ReaderModeManager"}) | 239 @Feature({"ReaderModeManager"}) |
| 240 @UiThreadTest |
| 223 @RetryOnFailure | 241 @RetryOnFailure |
| 224 public void testPanelOpenRecorded() { | 242 public void testPanelOpenRecorded() { |
| 225 Tab tab = new Tab(0, false, null); | 243 Tab tab = new Tab(0, false, null); |
| 226 mReaderManager.onShown(tab); | 244 mReaderManager.onShown(tab); |
| 227 | 245 |
| 228 assertEquals(1, mReaderManager.getRecordedCount()); | 246 Assert.assertEquals(1, mReaderManager.getRecordedCount()); |
| 229 assertEquals(1, mReaderManager.getVisibleCount()); | 247 Assert.assertEquals(1, mReaderManager.getVisibleCount()); |
| 230 assertTrue(null != mReaderManager.getTabInfo(0)); | 248 Assert.assertTrue(null != mReaderManager.getTabInfo(0)); |
| 231 | 249 |
| 232 // Make sure recording the panel showing only occurs once per navigation
. | 250 // Make sure recording the panel showing only occurs once per navigation
. |
| 233 mReaderManager.onShown(tab); | 251 mReaderManager.onShown(tab); |
| 234 | 252 |
| 235 assertEquals(1, mReaderManager.getRecordedCount()); | 253 Assert.assertEquals(1, mReaderManager.getRecordedCount()); |
| 236 assertEquals(1, mReaderManager.getVisibleCount()); | 254 Assert.assertEquals(1, mReaderManager.getVisibleCount()); |
| 237 | 255 |
| 238 // Destroy shouldn't record either if the panel showed. | 256 // Destroy shouldn't record either if the panel showed. |
| 239 mReaderManager.onDestroyed(tab); | 257 mReaderManager.onDestroyed(tab); |
| 240 | 258 |
| 241 assertEquals(1, mReaderManager.getRecordedCount()); | 259 Assert.assertEquals(1, mReaderManager.getRecordedCount()); |
| 242 assertEquals(1, mReaderManager.getVisibleCount()); | 260 Assert.assertEquals(1, mReaderManager.getVisibleCount()); |
| 243 assertTrue(null == mReaderManager.getTabInfo(0)); | 261 Assert.assertTrue(null == mReaderManager.getTabInfo(0)); |
| 244 } | 262 } |
| 245 | 263 |
| 246 /** | 264 /** |
| 247 * Tests that a tab closing records the panel was not visible. | 265 * Tests that a tab closing records the panel was not visible. |
| 248 */ | 266 */ |
| 267 @Test |
| 249 @SmallTest | 268 @SmallTest |
| 250 @Feature({"ReaderModeManager"}) | 269 @Feature({"ReaderModeManager"}) |
| 270 @UiThreadTest |
| 251 @RetryOnFailure | 271 @RetryOnFailure |
| 252 public void testPanelCloseRecorded() { | 272 public void testPanelCloseRecorded() { |
| 253 Tab tab = new Tab(0, false, null); | 273 Tab tab = new Tab(0, false, null); |
| 254 mReaderManager.setShouldTrigger(false); | 274 mReaderManager.setShouldTrigger(false); |
| 255 mReaderManager.onShown(tab); | 275 mReaderManager.onShown(tab); |
| 256 mReaderManager.onDestroyed(tab); | 276 mReaderManager.onDestroyed(tab); |
| 257 | 277 |
| 258 assertEquals(1, mReaderManager.getRecordedCount()); | 278 Assert.assertEquals(1, mReaderManager.getRecordedCount()); |
| 259 assertEquals(0, mReaderManager.getVisibleCount()); | 279 Assert.assertEquals(0, mReaderManager.getVisibleCount()); |
| 260 assertTrue(null == mReaderManager.getTabInfo(0)); | 280 Assert.assertTrue(null == mReaderManager.getTabInfo(0)); |
| 261 } | 281 } |
| 262 | 282 |
| 263 // TODO(mdjones): Test add/remove infobar while fullscreen is enabled. | 283 // TODO(mdjones): Test add/remove infobar while fullscreen is enabled. |
| 264 // TODO(mdjones): Test onclosebuttonpressed disables Reader Mode for a parti
cular tab. | 284 // TODO(mdjones): Test onclosebuttonpressed disables Reader Mode for a parti
cular tab. |
| 265 // TODO(mdjones): Test onorientationchanged closes and re-opens panel. | 285 // TODO(mdjones): Test onorientationchanged closes and re-opens panel. |
| 266 // TODO(mdjones): Test tab events. | 286 // TODO(mdjones): Test tab events. |
| 267 // TODO(mdjones): Test distillability callback. | 287 // TODO(mdjones): Test distillability callback. |
| 268 } | 288 } |
| OLD | NEW |