| OLD | NEW |
| 1 // Copyright 2016 The Chromium Authors. All rights reserved. | 1 // Copyright 2016 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.fullscreen; | 5 package org.chromium.chrome.browser.fullscreen; |
| 6 | 6 |
| 7 import static org.junit.Assert.assertFalse; | 7 import static org.junit.Assert.assertFalse; |
| 8 import static org.junit.Assert.assertTrue; | 8 import static org.junit.Assert.assertTrue; |
| 9 import static org.mockito.Mockito.times; | 9 import static org.mockito.Mockito.times; |
| 10 import static org.mockito.Mockito.verify; | 10 import static org.mockito.Mockito.verify; |
| 11 | 11 |
| 12 import static org.chromium.chrome.browser.fullscreen.BrowserStateBrowserControls
VisibilityDelegate.MINIMUM_SHOW_DURATION_MS; | 12 import static org.chromium.chrome.browser.fullscreen.BrowserStateBrowserControls
VisibilityDelegate.MINIMUM_SHOW_DURATION_MS; |
| 13 | 13 |
| 14 import org.junit.Before; | 14 import org.junit.Before; |
| 15 import org.junit.Test; | 15 import org.junit.Test; |
| 16 import org.junit.runner.RunWith; | 16 import org.junit.runner.RunWith; |
| 17 import org.mockito.Mock; | 17 import org.mockito.Mock; |
| 18 import org.mockito.MockitoAnnotations; | 18 import org.mockito.MockitoAnnotations; |
| 19 import org.robolectric.annotation.Config; | 19 import org.robolectric.annotation.Config; |
| 20 import org.robolectric.shadows.ShadowLooper; | 20 import org.robolectric.shadows.ShadowLooper; |
| 21 import org.robolectric.shadows.ShadowSystemClock; | 21 import org.robolectric.shadows.ShadowSystemClock; |
| 22 | 22 |
| 23 import org.chromium.base.test.util.Feature; | 23 import org.chromium.base.test.util.Feature; |
| 24 import org.chromium.chrome.browser.tab.Tab; | |
| 25 import org.chromium.testing.local.LocalRobolectricTestRunner; | 24 import org.chromium.testing.local.LocalRobolectricTestRunner; |
| 26 | 25 |
| 27 /** | 26 /** |
| 28 * Unit tests for the BrowserStateBrowserControlsVisibilityDelegate. | 27 * Unit tests for the BrowserStateBrowserControlsVisibilityDelegate. |
| 29 */ | 28 */ |
| 30 @RunWith(LocalRobolectricTestRunner.class) | 29 @RunWith(LocalRobolectricTestRunner.class) |
| 31 @Config(manifest = Config.NONE) | 30 @Config(manifest = Config.NONE) |
| 32 public class BrowserStateBrowserControlsVisibilityDelegateTest { | 31 public class BrowserStateBrowserControlsVisibilityDelegateTest { |
| 33 @Mock private Tab mTab; | 32 @Mock private Runnable mCallback; |
| 34 | 33 |
| 35 private BrowserStateBrowserControlsVisibilityDelegate mDelegate; | 34 private BrowserStateBrowserControlsVisibilityDelegate mDelegate; |
| 36 | 35 |
| 37 @Before | 36 @Before |
| 38 public void beforeTest() { | 37 public void beforeTest() { |
| 39 MockitoAnnotations.initMocks(this); | 38 MockitoAnnotations.initMocks(this); |
| 40 | 39 |
| 41 mDelegate = new BrowserStateBrowserControlsVisibilityDelegate(); | 40 mDelegate = new BrowserStateBrowserControlsVisibilityDelegate(mCallback)
; |
| 42 mDelegate.setTab(mTab); | |
| 43 } | 41 } |
| 44 | 42 |
| 45 private void advanceTime(long amount) { | 43 private void advanceTime(long amount) { |
| 46 ShadowSystemClock.setCurrentTimeMillis(ShadowSystemClock.elapsedRealtime
() + amount); | 44 ShadowSystemClock.setCurrentTimeMillis(ShadowSystemClock.elapsedRealtime
() + amount); |
| 47 } | 45 } |
| 48 | 46 |
| 49 @Test | 47 @Test |
| 50 @Feature("Fullscreen") | 48 @Feature("Fullscreen") |
| 51 public void testTransientShow() { | 49 public void testTransientShow() { |
| 52 assertTrue(mDelegate.isHidingBrowserControlsEnabled()); | 50 assertTrue(mDelegate.isHidingBrowserControlsEnabled()); |
| 53 mDelegate.showControlsTransient(); | 51 mDelegate.showControlsTransient(); |
| 54 assertFalse(mDelegate.isHidingBrowserControlsEnabled()); | 52 assertFalse(mDelegate.isHidingBrowserControlsEnabled()); |
| 55 | 53 |
| 56 ShadowLooper.runUiThreadTasksIncludingDelayedTasks(); | 54 ShadowLooper.runUiThreadTasksIncludingDelayedTasks(); |
| 57 assertTrue(mDelegate.isHidingBrowserControlsEnabled()); | 55 assertTrue(mDelegate.isHidingBrowserControlsEnabled()); |
| 58 | 56 |
| 59 verify(mTab, times(2)).updateFullscreenEnabledState(); | 57 verify(mCallback, times(2)).run(); |
| 60 } | 58 } |
| 61 | 59 |
| 62 @Test | 60 @Test |
| 63 @Feature("Fullscreen") | 61 @Feature("Fullscreen") |
| 64 public void testShowPersistentTokenWithDelayedHide() { | 62 public void testShowPersistentTokenWithDelayedHide() { |
| 65 assertTrue(mDelegate.isHidingBrowserControlsEnabled()); | 63 assertTrue(mDelegate.isHidingBrowserControlsEnabled()); |
| 66 int token = mDelegate.showControlsPersistent(); | 64 int token = mDelegate.showControlsPersistent(); |
| 67 assertFalse(mDelegate.isHidingBrowserControlsEnabled()); | 65 assertFalse(mDelegate.isHidingBrowserControlsEnabled()); |
| 68 // Advance the clock to exceed the minimum show time. | 66 // Advance the clock to exceed the minimum show time. |
| 69 advanceTime(2 * MINIMUM_SHOW_DURATION_MS); | 67 advanceTime(2 * MINIMUM_SHOW_DURATION_MS); |
| 70 assertFalse(mDelegate.isHidingBrowserControlsEnabled()); | 68 assertFalse(mDelegate.isHidingBrowserControlsEnabled()); |
| 71 mDelegate.hideControlsPersistent(token); | 69 mDelegate.hideControlsPersistent(token); |
| 72 assertTrue(mDelegate.isHidingBrowserControlsEnabled()); | 70 assertTrue(mDelegate.isHidingBrowserControlsEnabled()); |
| 73 | 71 |
| 74 verify(mTab, times(2)).updateFullscreenEnabledState(); | 72 verify(mCallback, times(2)).run(); |
| 75 } | 73 } |
| 76 | 74 |
| 77 @Test | 75 @Test |
| 78 @Feature("Fullscreen") | 76 @Feature("Fullscreen") |
| 79 public void testShowPersistentTokenWithImmediateHide() { | 77 public void testShowPersistentTokenWithImmediateHide() { |
| 80 assertTrue(mDelegate.isHidingBrowserControlsEnabled()); | 78 assertTrue(mDelegate.isHidingBrowserControlsEnabled()); |
| 81 int token = mDelegate.showControlsPersistent(); | 79 int token = mDelegate.showControlsPersistent(); |
| 82 assertFalse(mDelegate.isHidingBrowserControlsEnabled()); | 80 assertFalse(mDelegate.isHidingBrowserControlsEnabled()); |
| 83 mDelegate.hideControlsPersistent(token); | 81 mDelegate.hideControlsPersistent(token); |
| 84 | 82 |
| 85 // If the controls are not shown for the mimimum allowed time, then a ta
sk is posted to | 83 // If the controls are not shown for the mimimum allowed time, then a ta
sk is posted to |
| 86 // keep them shown for longer. Ensure the controls can not be hidden un
til this delayed | 84 // keep them shown for longer. Ensure the controls can not be hidden un
til this delayed |
| 87 // task has been run. | 85 // task has been run. |
| 88 assertFalse(mDelegate.isHidingBrowserControlsEnabled()); | 86 assertFalse(mDelegate.isHidingBrowserControlsEnabled()); |
| 89 ShadowLooper.runUiThreadTasksIncludingDelayedTasks(); | 87 ShadowLooper.runUiThreadTasksIncludingDelayedTasks(); |
| 90 assertTrue(mDelegate.isHidingBrowserControlsEnabled()); | 88 assertTrue(mDelegate.isHidingBrowserControlsEnabled()); |
| 91 | 89 |
| 92 verify(mTab, times(2)).updateFullscreenEnabledState(); | 90 verify(mCallback, times(2)).run(); |
| 93 } | 91 } |
| 94 | 92 |
| 95 @Test | 93 @Test |
| 96 @Feature("Fullscreen") | 94 @Feature("Fullscreen") |
| 97 public void testShowPersistentBeyondRequiredMinDurationAndShowTransient() { | 95 public void testShowPersistentBeyondRequiredMinDurationAndShowTransient() { |
| 98 assertTrue(mDelegate.isHidingBrowserControlsEnabled()); | 96 assertTrue(mDelegate.isHidingBrowserControlsEnabled()); |
| 99 int token = mDelegate.showControlsPersistent(); | 97 int token = mDelegate.showControlsPersistent(); |
| 100 assertFalse(mDelegate.isHidingBrowserControlsEnabled()); | 98 assertFalse(mDelegate.isHidingBrowserControlsEnabled()); |
| 101 | 99 |
| 102 // Advance the clock to exceed the minimum show time. | 100 // Advance the clock to exceed the minimum show time. |
| 103 advanceTime(2 * MINIMUM_SHOW_DURATION_MS); | 101 advanceTime(2 * MINIMUM_SHOW_DURATION_MS); |
| 104 assertFalse(mDelegate.isHidingBrowserControlsEnabled()); | 102 assertFalse(mDelegate.isHidingBrowserControlsEnabled()); |
| 105 // At this point, the controls have been shown long enough that the tran
sient request will | 103 // At this point, the controls have been shown long enough that the tran
sient request will |
| 106 // be a no-op. | 104 // be a no-op. |
| 107 mDelegate.showControlsTransient(); | 105 mDelegate.showControlsTransient(); |
| 108 mDelegate.hideControlsPersistent(token); | 106 mDelegate.hideControlsPersistent(token); |
| 109 assertTrue(mDelegate.isHidingBrowserControlsEnabled()); | 107 assertTrue(mDelegate.isHidingBrowserControlsEnabled()); |
| 110 | 108 |
| 111 verify(mTab, times(2)).updateFullscreenEnabledState(); | 109 verify(mCallback, times(2)).run(); |
| 112 } | 110 } |
| 113 | 111 |
| 114 @Test | 112 @Test |
| 115 @Feature("Fullscreen") | 113 @Feature("Fullscreen") |
| 116 public void testShowPersistentBelowRequiredMinDurationAndShowTransient() { | 114 public void testShowPersistentBelowRequiredMinDurationAndShowTransient() { |
| 117 assertTrue(mDelegate.isHidingBrowserControlsEnabled()); | 115 assertTrue(mDelegate.isHidingBrowserControlsEnabled()); |
| 118 int token = mDelegate.showControlsPersistent(); | 116 int token = mDelegate.showControlsPersistent(); |
| 119 assertFalse(mDelegate.isHidingBrowserControlsEnabled()); | 117 assertFalse(mDelegate.isHidingBrowserControlsEnabled()); |
| 120 | 118 |
| 121 // Advance the clock but not beyond the min show duration. | 119 // Advance the clock but not beyond the min show duration. |
| 122 advanceTime((long) (0.5 * MINIMUM_SHOW_DURATION_MS)); | 120 advanceTime((long) (0.5 * MINIMUM_SHOW_DURATION_MS)); |
| 123 assertFalse(mDelegate.isHidingBrowserControlsEnabled()); | 121 assertFalse(mDelegate.isHidingBrowserControlsEnabled()); |
| 124 // At this point, the controls have not been shown long enough, so the t
ransient request | 122 // At this point, the controls have not been shown long enough, so the t
ransient request |
| 125 // will delay the ability to hide. | 123 // will delay the ability to hide. |
| 126 mDelegate.showControlsTransient(); | 124 mDelegate.showControlsTransient(); |
| 127 mDelegate.hideControlsPersistent(token); | 125 mDelegate.hideControlsPersistent(token); |
| 128 assertFalse(mDelegate.isHidingBrowserControlsEnabled()); | 126 assertFalse(mDelegate.isHidingBrowserControlsEnabled()); |
| 129 | 127 |
| 130 // Run the pending tasks on the UI thread, which will include the transi
ent delayed task. | 128 // Run the pending tasks on the UI thread, which will include the transi
ent delayed task. |
| 131 ShadowLooper.runUiThreadTasksIncludingDelayedTasks(); | 129 ShadowLooper.runUiThreadTasksIncludingDelayedTasks(); |
| 132 assertTrue(mDelegate.isHidingBrowserControlsEnabled()); | 130 assertTrue(mDelegate.isHidingBrowserControlsEnabled()); |
| 133 | 131 |
| 134 verify(mTab, times(2)).updateFullscreenEnabledState(); | 132 verify(mCallback, times(2)).run(); |
| 135 } | 133 } |
| 136 | 134 |
| 137 @Test | 135 @Test |
| 138 @Feature("Fullscreen") | 136 @Feature("Fullscreen") |
| 139 public void testShowPersistentMultipleTimes() { | 137 public void testShowPersistentMultipleTimes() { |
| 140 assertTrue(mDelegate.isHidingBrowserControlsEnabled()); | 138 assertTrue(mDelegate.isHidingBrowserControlsEnabled()); |
| 141 int firstToken = mDelegate.showControlsPersistent(); | 139 int firstToken = mDelegate.showControlsPersistent(); |
| 142 assertFalse(mDelegate.isHidingBrowserControlsEnabled()); | 140 assertFalse(mDelegate.isHidingBrowserControlsEnabled()); |
| 143 | 141 |
| 144 int secondToken = mDelegate.showControlsPersistent(); | 142 int secondToken = mDelegate.showControlsPersistent(); |
| 145 assertFalse(mDelegate.isHidingBrowserControlsEnabled()); | 143 assertFalse(mDelegate.isHidingBrowserControlsEnabled()); |
| 146 | 144 |
| 147 int thirdToken = mDelegate.showControlsPersistent(); | 145 int thirdToken = mDelegate.showControlsPersistent(); |
| 148 assertFalse(mDelegate.isHidingBrowserControlsEnabled()); | 146 assertFalse(mDelegate.isHidingBrowserControlsEnabled()); |
| 149 | 147 |
| 150 // Advance the clock to exceed the minimum show time. | 148 // Advance the clock to exceed the minimum show time. |
| 151 advanceTime(2 * MINIMUM_SHOW_DURATION_MS); | 149 advanceTime(2 * MINIMUM_SHOW_DURATION_MS); |
| 152 assertFalse(mDelegate.isHidingBrowserControlsEnabled()); | 150 assertFalse(mDelegate.isHidingBrowserControlsEnabled()); |
| 153 | 151 |
| 154 mDelegate.hideControlsPersistent(secondToken); | 152 mDelegate.hideControlsPersistent(secondToken); |
| 155 assertFalse(mDelegate.isHidingBrowserControlsEnabled()); | 153 assertFalse(mDelegate.isHidingBrowserControlsEnabled()); |
| 156 mDelegate.hideControlsPersistent(firstToken); | 154 mDelegate.hideControlsPersistent(firstToken); |
| 157 assertFalse(mDelegate.isHidingBrowserControlsEnabled()); | 155 assertFalse(mDelegate.isHidingBrowserControlsEnabled()); |
| 158 mDelegate.hideControlsPersistent(thirdToken); | 156 mDelegate.hideControlsPersistent(thirdToken); |
| 159 assertTrue(mDelegate.isHidingBrowserControlsEnabled()); | 157 assertTrue(mDelegate.isHidingBrowserControlsEnabled()); |
| 160 | 158 |
| 161 verify(mTab, times(2)).updateFullscreenEnabledState(); | 159 verify(mCallback, times(2)).run(); |
| 162 } | 160 } |
| 163 } | 161 } |
| OLD | NEW |