OLD | NEW |
1 // Copyright 2012 The Chromium Authors. All rights reserved. | 1 // Copyright 2012 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.content.browser; | 5 package org.chromium.content.browser; |
6 | 6 |
7 import android.content.Context; | 7 import android.content.Context; |
8 import android.graphics.Bitmap; | 8 import android.graphics.Bitmap; |
9 import android.graphics.Canvas; | 9 import android.graphics.Canvas; |
10 import android.graphics.Rect; | 10 import android.graphics.Rect; |
11 import android.os.SystemClock; | 11 import android.os.SystemClock; |
| 12 import android.support.test.InstrumentationRegistry; |
12 import android.support.test.filters.SmallTest; | 13 import android.support.test.filters.SmallTest; |
13 import android.view.MotionEvent; | 14 import android.view.MotionEvent; |
14 import android.view.View; | 15 import android.view.View; |
15 | 16 |
| 17 import org.junit.Assert; |
| 18 import org.junit.Before; |
| 19 import org.junit.Rule; |
| 20 import org.junit.Test; |
| 21 import org.junit.runner.RunWith; |
| 22 |
16 import org.chromium.base.ThreadUtils; | 23 import org.chromium.base.ThreadUtils; |
17 import org.chromium.base.test.util.Feature; | 24 import org.chromium.base.test.util.Feature; |
18 import org.chromium.content.browser.input.ImeAdapter; | 25 import org.chromium.content.browser.input.ImeAdapter; |
| 26 import org.chromium.content.browser.test.ContentJUnit4ClassRunner; |
19 import org.chromium.content.browser.test.util.TestInputMethodManagerWrapper; | 27 import org.chromium.content.browser.test.util.TestInputMethodManagerWrapper; |
20 import org.chromium.content_shell_apk.ContentShellTestBase; | 28 import org.chromium.content_shell_apk.ContentShellActivityTestRule; |
21 | 29 |
22 /** | 30 /** |
23 * Tests for PopupZoomer. | 31 * Tests for PopupZoomer. |
24 */ | 32 */ |
25 public class PopupZoomerTest extends ContentShellTestBase { | 33 @RunWith(ContentJUnit4ClassRunner.class) |
| 34 public class PopupZoomerTest { |
| 35 @Rule |
| 36 public ContentShellActivityTestRule mActivityTestRule = new ContentShellActi
vityTestRule(); |
| 37 |
26 private CustomCanvasPopupZoomer mPopupZoomer; | 38 private CustomCanvasPopupZoomer mPopupZoomer; |
27 private ContentViewCore mContentViewCore; | 39 private ContentViewCore mContentViewCore; |
28 | 40 |
29 private static class CustomCanvasPopupZoomer extends PopupZoomer { | 41 private static class CustomCanvasPopupZoomer extends PopupZoomer { |
30 Canvas mCanvas; | 42 Canvas mCanvas; |
31 long mPendingDraws = 0; | 43 long mPendingDraws = 0; |
32 | 44 |
33 CustomCanvasPopupZoomer(Context context, Canvas c) { | 45 CustomCanvasPopupZoomer(Context context, Canvas c) { |
34 super(context); | 46 super(context); |
35 mCanvas = c; | 47 mCanvas = c; |
(...skipping 32 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
68 } | 80 } |
69 | 81 |
70 private void sendSingleTapTouchEventOnView(View view, float x, float y) { | 82 private void sendSingleTapTouchEventOnView(View view, float x, float y) { |
71 final long downEvent = SystemClock.uptimeMillis(); | 83 final long downEvent = SystemClock.uptimeMillis(); |
72 view.onTouchEvent( | 84 view.onTouchEvent( |
73 MotionEvent.obtain(downEvent, downEvent, MotionEvent.ACTION_DOWN
, x, y, 0)); | 85 MotionEvent.obtain(downEvent, downEvent, MotionEvent.ACTION_DOWN
, x, y, 0)); |
74 view.onTouchEvent( | 86 view.onTouchEvent( |
75 MotionEvent.obtain(downEvent, downEvent + 10, MotionEvent.ACTION
_UP, x, y, 0)); | 87 MotionEvent.obtain(downEvent, downEvent + 10, MotionEvent.ACTION
_UP, x, y, 0)); |
76 } | 88 } |
77 | 89 |
78 @Override | 90 @Before |
79 public void setUp() throws Exception { | 91 public void setUp() throws Throwable { |
80 super.setUp(); | 92 mActivityTestRule.launchActivity(null); |
81 | |
82 final Context context = getActivity(); | |
83 | |
84 ThreadUtils.runOnUiThreadBlocking(new Runnable() { | 93 ThreadUtils.runOnUiThreadBlocking(new Runnable() { |
85 @Override | 94 @Override |
86 public void run() { | 95 public void run() { |
| 96 Context context = mActivityTestRule.getActivity(); |
87 mContentViewCore = new ContentViewCore(context, ""); | 97 mContentViewCore = new ContentViewCore(context, ""); |
88 mContentViewCore.setSelectionPopupControllerForTesting(new Selec
tionPopupController( | 98 mContentViewCore.setSelectionPopupControllerForTesting(new Selec
tionPopupController( |
89 context, null, null, null, mContentViewCore.getRenderCoo
rdinates())); | 99 context, null, null, null, mContentViewCore.getRenderCoo
rdinates())); |
90 mContentViewCore.setImeAdapterForTest( | 100 mContentViewCore.setImeAdapterForTest( |
91 new ImeAdapter(getContentViewCore().getWebContents(), | 101 new ImeAdapter(mActivityTestRule.getContentViewCore().ge
tWebContents(), |
92 getContentViewCore().getContainerView(), | 102 mActivityTestRule.getContentViewCore().getContai
nerView(), |
93 new TestInputMethodManagerWrapper(mContentViewCo
re))); | 103 new TestInputMethodManagerWrapper(mContentViewCo
re))); |
94 mPopupZoomer = createPopupZoomerForTest(getInstrumentation().get
TargetContext()); | 104 mPopupZoomer = createPopupZoomerForTest(InstrumentationRegistry.
getTargetContext()); |
95 mContentViewCore.setPopupZoomerForTest(mPopupZoomer); | 105 mContentViewCore.setPopupZoomerForTest(mPopupZoomer); |
96 } | 106 } |
97 }); | 107 }); |
98 } | 108 } |
99 | 109 |
| 110 @Test |
100 @SmallTest | 111 @SmallTest |
101 @Feature({"Navigation"}) | 112 @Feature({"Navigation"}) |
102 public void testDefaultCreateState() throws Exception { | 113 public void testDefaultCreateState() throws Exception { |
103 assertEquals(View.INVISIBLE, mPopupZoomer.getVisibility()); | 114 Assert.assertEquals(View.INVISIBLE, mPopupZoomer.getVisibility()); |
104 assertFalse(mPopupZoomer.isShowing()); | 115 Assert.assertFalse(mPopupZoomer.isShowing()); |
105 } | 116 } |
106 | 117 |
| 118 @Test |
107 @SmallTest | 119 @SmallTest |
108 @Feature({"Navigation"}) | 120 @Feature({"Navigation"}) |
109 public void testShowWithoutBitmap() throws Exception { | 121 public void testShowWithoutBitmap() throws Exception { |
110 mPopupZoomer.show(new Rect(0, 0, 5, 5)); | 122 mPopupZoomer.show(new Rect(0, 0, 5, 5)); |
111 | 123 |
112 // The view should be invisible. | 124 // The view should be invisible. |
113 assertEquals(View.INVISIBLE, mPopupZoomer.getVisibility()); | 125 Assert.assertEquals(View.INVISIBLE, mPopupZoomer.getVisibility()); |
114 assertFalse(mPopupZoomer.isShowing()); | 126 Assert.assertFalse(mPopupZoomer.isShowing()); |
115 } | 127 } |
116 | 128 |
| 129 @Test |
117 @SmallTest | 130 @SmallTest |
118 @Feature({"Navigation"}) | 131 @Feature({"Navigation"}) |
119 public void testShowWithBitmap() throws Exception { | 132 public void testShowWithBitmap() throws Exception { |
120 mPopupZoomer.setBitmap(Bitmap.createBitmap(10, 10, Bitmap.Config.ALPHA_8
)); | 133 mPopupZoomer.setBitmap(Bitmap.createBitmap(10, 10, Bitmap.Config.ALPHA_8
)); |
121 mPopupZoomer.show(new Rect(0, 0, 5, 5)); | 134 mPopupZoomer.show(new Rect(0, 0, 5, 5)); |
122 | 135 |
123 // The view should become visible. | 136 // The view should become visible. |
124 assertEquals(View.VISIBLE, mPopupZoomer.getVisibility()); | 137 Assert.assertEquals(View.VISIBLE, mPopupZoomer.getVisibility()); |
125 assertTrue(mPopupZoomer.isShowing()); | 138 Assert.assertTrue(mPopupZoomer.isShowing()); |
126 } | 139 } |
127 | 140 |
| 141 @Test |
128 @SmallTest | 142 @SmallTest |
129 @Feature({"Navigation"}) | 143 @Feature({"Navigation"}) |
130 public void testHide() throws Exception { | 144 public void testHide() throws Exception { |
131 mPopupZoomer.setBitmap(Bitmap.createBitmap(10, 10, Bitmap.Config.ALPHA_8
)); | 145 mPopupZoomer.setBitmap(Bitmap.createBitmap(10, 10, Bitmap.Config.ALPHA_8
)); |
132 mPopupZoomer.show(new Rect(0, 0, 5, 5)); | 146 mPopupZoomer.show(new Rect(0, 0, 5, 5)); |
133 | 147 |
134 // The view should become visible. | 148 // The view should become visible. |
135 assertEquals(View.VISIBLE, mPopupZoomer.getVisibility()); | 149 Assert.assertEquals(View.VISIBLE, mPopupZoomer.getVisibility()); |
136 assertTrue(mPopupZoomer.isShowing()); | 150 Assert.assertTrue(mPopupZoomer.isShowing()); |
137 | 151 |
138 // Call hide without animation. | 152 // Call hide without animation. |
139 mPopupZoomer.hide(false); | 153 mPopupZoomer.hide(false); |
140 | 154 |
141 // The view should be invisible. | 155 // The view should be invisible. |
142 assertEquals(View.INVISIBLE, mPopupZoomer.getVisibility()); | 156 Assert.assertEquals(View.INVISIBLE, mPopupZoomer.getVisibility()); |
143 assertFalse(mPopupZoomer.isShowing()); | 157 Assert.assertFalse(mPopupZoomer.isShowing()); |
144 } | 158 } |
145 | 159 |
| 160 @Test |
146 @SmallTest | 161 @SmallTest |
147 @Feature({"Navigation"}) | 162 @Feature({"Navigation"}) |
148 public void testOnTouchEventOutsidePopup() throws Exception { | 163 public void testOnTouchEventOutsidePopup() throws Exception { |
149 mPopupZoomer.setBitmap(Bitmap.createBitmap(10, 10, Bitmap.Config.ALPHA_8
)); | 164 mPopupZoomer.setBitmap(Bitmap.createBitmap(10, 10, Bitmap.Config.ALPHA_8
)); |
150 mPopupZoomer.show(new Rect(0, 0, 5, 5)); | 165 mPopupZoomer.show(new Rect(0, 0, 5, 5)); |
151 | 166 |
152 // Wait for the show animation to finish. | 167 // Wait for the show animation to finish. |
153 mPopupZoomer.finishPendingDraws(); | 168 mPopupZoomer.finishPendingDraws(); |
154 | 169 |
155 // The view should be visible. | 170 // The view should be visible. |
156 assertEquals(View.VISIBLE, mPopupZoomer.getVisibility()); | 171 Assert.assertEquals(View.VISIBLE, mPopupZoomer.getVisibility()); |
157 assertTrue(mPopupZoomer.isShowing()); | 172 Assert.assertTrue(mPopupZoomer.isShowing()); |
158 | 173 |
159 // Send tap event at a point outside the popup. | 174 // Send tap event at a point outside the popup. |
160 // i.e. coordinates greater than 10 + PopupZoomer.ZOOM_BOUNDS_MARGIN | 175 // i.e. coordinates greater than 10 + PopupZoomer.ZOOM_BOUNDS_MARGIN |
161 sendSingleTapTouchEventOnView(mPopupZoomer, 50, 50); | 176 sendSingleTapTouchEventOnView(mPopupZoomer, 50, 50); |
162 | 177 |
163 // Wait for the hide animation to finish. | 178 // Wait for the hide animation to finish. |
164 mPopupZoomer.finishPendingDraws(); | 179 mPopupZoomer.finishPendingDraws(); |
165 | 180 |
166 // The view should be invisible. | 181 // The view should be invisible. |
167 assertEquals(View.INVISIBLE, mPopupZoomer.getVisibility()); | 182 Assert.assertEquals(View.INVISIBLE, mPopupZoomer.getVisibility()); |
168 assertFalse(mPopupZoomer.isShowing()); | 183 Assert.assertFalse(mPopupZoomer.isShowing()); |
169 } | 184 } |
170 | 185 |
| 186 @Test |
171 @SmallTest | 187 @SmallTest |
172 @Feature({"Navigation"}) | 188 @Feature({"Navigation"}) |
173 public void testOnTouchEventInsidePopupNoOnTapListener() throws Exception { | 189 public void testOnTouchEventInsidePopupNoOnTapListener() throws Exception { |
174 mPopupZoomer.setBitmap(Bitmap.createBitmap(10, 10, Bitmap.Config.ALPHA_8
)); | 190 mPopupZoomer.setBitmap(Bitmap.createBitmap(10, 10, Bitmap.Config.ALPHA_8
)); |
175 mPopupZoomer.show(new Rect(0, 0, 5, 5)); | 191 mPopupZoomer.show(new Rect(0, 0, 5, 5)); |
176 | 192 |
177 // Wait for the animation to finish. | 193 // Wait for the animation to finish. |
178 mPopupZoomer.finishPendingDraws(); | 194 mPopupZoomer.finishPendingDraws(); |
179 | 195 |
180 // The view should be visible. | 196 // The view should be visible. |
181 assertEquals(View.VISIBLE, mPopupZoomer.getVisibility()); | 197 Assert.assertEquals(View.VISIBLE, mPopupZoomer.getVisibility()); |
182 assertTrue(mPopupZoomer.isShowing()); | 198 Assert.assertTrue(mPopupZoomer.isShowing()); |
183 | 199 |
184 // Send tap event at a point inside the popup. | 200 // Send tap event at a point inside the popup. |
185 // i.e. coordinates between PopupZoomer.ZOOM_BOUNDS_MARGIN and | 201 // i.e. coordinates between PopupZoomer.ZOOM_BOUNDS_MARGIN and |
186 // PopupZoomer.ZOOM_BOUNDS_MARGIN + 10 | 202 // PopupZoomer.ZOOM_BOUNDS_MARGIN + 10 |
187 sendSingleTapTouchEventOnView(mPopupZoomer, 30, 30); | 203 sendSingleTapTouchEventOnView(mPopupZoomer, 30, 30); |
188 | 204 |
189 // Wait for the animation to finish (if there is any). | 205 // Wait for the animation to finish (if there is any). |
190 mPopupZoomer.finishPendingDraws(); | 206 mPopupZoomer.finishPendingDraws(); |
191 | 207 |
192 // The view should still be visible as no OnTapListener is set. | 208 // The view should still be visible as no OnTapListener is set. |
193 assertEquals(View.VISIBLE, mPopupZoomer.getVisibility()); | 209 Assert.assertEquals(View.VISIBLE, mPopupZoomer.getVisibility()); |
194 assertTrue(mPopupZoomer.isShowing()); | 210 Assert.assertTrue(mPopupZoomer.isShowing()); |
195 } | 211 } |
196 | 212 |
| 213 @Test |
197 @SmallTest | 214 @SmallTest |
198 @Feature({"Navigation"}) | 215 @Feature({"Navigation"}) |
199 public void testHidePopupOnLosingFocus() throws Exception { | 216 public void testHidePopupOnLosingFocus() throws Exception { |
200 mPopupZoomer.setBitmap( | 217 mPopupZoomer.setBitmap( |
201 Bitmap.createBitmap(10, 10, Bitmap.Config.ALPHA_8)); | 218 Bitmap.createBitmap(10, 10, Bitmap.Config.ALPHA_8)); |
202 mPopupZoomer.show(new Rect(0, 0, 5, 5)); | 219 mPopupZoomer.show(new Rect(0, 0, 5, 5)); |
203 | 220 |
204 // Wait for the animation to finish. | 221 // Wait for the animation to finish. |
205 mPopupZoomer.finishPendingDraws(); | 222 mPopupZoomer.finishPendingDraws(); |
206 | 223 |
207 // The view should be visible. | 224 // The view should be visible. |
208 assertEquals(View.VISIBLE, mPopupZoomer.getVisibility()); | 225 Assert.assertEquals(View.VISIBLE, mPopupZoomer.getVisibility()); |
209 assertTrue(mPopupZoomer.isShowing()); | 226 Assert.assertTrue(mPopupZoomer.isShowing()); |
210 | 227 |
211 // Simulate losing the focus. | 228 // Simulate losing the focus. |
212 mContentViewCore.onFocusChanged(false, true); | 229 mContentViewCore.onFocusChanged(false, true); |
213 | 230 |
214 // Wait for the hide animation to finish. | 231 // Wait for the hide animation to finish. |
215 mPopupZoomer.finishPendingDraws(); | 232 mPopupZoomer.finishPendingDraws(); |
216 | 233 |
217 // Now that another view has been focused, the view should be invisible. | 234 // Now that another view has been focused, the view should be invisible. |
218 assertEquals(View.INVISIBLE, mPopupZoomer.getVisibility()); | 235 Assert.assertEquals(View.INVISIBLE, mPopupZoomer.getVisibility()); |
219 assertFalse(mPopupZoomer.isShowing()); | 236 Assert.assertFalse(mPopupZoomer.isShowing()); |
220 } | 237 } |
221 } | 238 } |
OLD | NEW |