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 |