Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(144)

Side by Side Diff: chrome/android/javatests/src/org/chromium/chrome/browser/printing/PrintingControllerTest.java

Issue 2853423003: Revert of Convert ChromeActivityTestCaseBase direct children to JUnit4 (Closed)
Patch Set: Created 3 years, 7 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
OLDNEW
1 // Copyright 2013 The Chromium Authors. All rights reserved. 1 // Copyright 2013 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.printing; 5 package org.chromium.chrome.browser.printing;
6 6
7 import android.annotation.TargetApi; 7 import android.annotation.TargetApi;
8 import android.os.Build; 8 import android.os.Build;
9 import android.os.CancellationSignal; 9 import android.os.CancellationSignal;
10 import android.os.ParcelFileDescriptor; 10 import android.os.ParcelFileDescriptor;
11 import android.print.PageRange; 11 import android.print.PageRange;
12 import android.print.PrintAttributes; 12 import android.print.PrintAttributes;
13 import android.print.PrintDocumentAdapter; 13 import android.print.PrintDocumentAdapter;
14 import android.print.PrintDocumentInfo; 14 import android.print.PrintDocumentInfo;
15 import android.support.test.InstrumentationRegistry;
16 import android.support.test.filters.LargeTest; 15 import android.support.test.filters.LargeTest;
17 16
18 import org.junit.Assert;
19 import org.junit.Before;
20 import org.junit.Rule;
21 import org.junit.Test;
22 import org.junit.runner.RunWith;
23
24 import org.chromium.base.ApiCompatibilityUtils; 17 import org.chromium.base.ApiCompatibilityUtils;
25 import org.chromium.base.test.util.CommandLineFlags; 18 import org.chromium.base.test.util.CommandLineFlags;
26 import org.chromium.base.test.util.DisabledTest; 19 import org.chromium.base.test.util.DisabledTest;
27 import org.chromium.base.test.util.Feature; 20 import org.chromium.base.test.util.Feature;
28 import org.chromium.base.test.util.RetryOnFailure; 21 import org.chromium.base.test.util.RetryOnFailure;
29 import org.chromium.base.test.util.TestFileUtil; 22 import org.chromium.base.test.util.TestFileUtil;
30 import org.chromium.base.test.util.UrlUtils; 23 import org.chromium.base.test.util.UrlUtils;
31 import org.chromium.chrome.browser.ChromeActivity; 24 import org.chromium.chrome.browser.ChromeActivity;
32 import org.chromium.chrome.browser.ChromeSwitches;
33 import org.chromium.chrome.browser.tab.Tab; 25 import org.chromium.chrome.browser.tab.Tab;
34 import org.chromium.chrome.test.ChromeActivityTestRule; 26 import org.chromium.chrome.test.ChromeActivityTestCaseBase;
35 import org.chromium.chrome.test.ChromeJUnit4ClassRunner;
36 import org.chromium.chrome.test.util.browser.TabTitleObserver; 27 import org.chromium.chrome.test.util.browser.TabTitleObserver;
37 import org.chromium.content.common.ContentSwitches; 28 import org.chromium.content.common.ContentSwitches;
38 import org.chromium.printing.PrintDocumentAdapterWrapper; 29 import org.chromium.printing.PrintDocumentAdapterWrapper;
39 import org.chromium.printing.PrintManagerDelegate; 30 import org.chromium.printing.PrintManagerDelegate;
40 import org.chromium.printing.PrintingControllerImpl; 31 import org.chromium.printing.PrintingControllerImpl;
41 32
42 import java.io.File; 33 import java.io.File;
43 import java.io.FileInputStream; 34 import java.io.FileInputStream;
44 import java.io.IOException; 35 import java.io.IOException;
45 import java.util.concurrent.Callable; 36 import java.util.concurrent.Callable;
46 import java.util.concurrent.FutureTask; 37 import java.util.concurrent.FutureTask;
47 import java.util.concurrent.TimeUnit; 38 import java.util.concurrent.TimeUnit;
48 39
49 /** 40 /**
50 * Tests Android printing. 41 * Tests Android printing.
51 * TODO(cimamoglu): Add a test with cancellation. 42 * TODO(cimamoglu): Add a test with cancellation.
52 * TODO(cimamoglu): Add a test with multiple, stacked onLayout/onWrite calls. 43 * TODO(cimamoglu): Add a test with multiple, stacked onLayout/onWrite calls.
53 * TODO(cimamoglu): Add a test which emulates Chromium failing to generate a PDF . 44 * TODO(cimamoglu): Add a test which emulates Chromium failing to generate a PDF .
54 */ 45 */
55 @RunWith(ChromeJUnit4ClassRunner.class)
56 @RetryOnFailure 46 @RetryOnFailure
57 @CommandLineFlags.Add({ChromeSwitches.DISABLE_FIRST_RUN_EXPERIENCE, 47 public class PrintingControllerTest extends ChromeActivityTestCaseBase<ChromeAct ivity> {
58 ChromeActivityTestRule.DISABLE_NETWORK_PREDICTION_FLAG})
59 public class PrintingControllerTest {
60 @Rule
61 public ChromeActivityTestRule<ChromeActivity> mActivityTestRule =
62 new ChromeActivityTestRule<>(ChromeActivity.class);
63 48
64 private static final String TEMP_FILE_NAME = "temp_print"; 49 private static final String TEMP_FILE_NAME = "temp_print";
65 private static final String TEMP_FILE_EXTENSION = ".pdf"; 50 private static final String TEMP_FILE_EXTENSION = ".pdf";
66 private static final String PRINT_JOB_NAME = "foo"; 51 private static final String PRINT_JOB_NAME = "foo";
67 private static final String URL = UrlUtils.encodeHtmlDataUri( 52 private static final String URL = UrlUtils.encodeHtmlDataUri(
68 "<html><head></head><body>foo</body></html>"); 53 "<html><head></head><body>foo</body></html>");
69 private static final String PDF_PREAMBLE = "%PDF-1"; 54 private static final String PDF_PREAMBLE = "%PDF-1";
70 private static final long TEST_TIMEOUT = 20000L; 55 private static final long TEST_TIMEOUT = 20000L;
71 56
72 @Before 57 public PrintingControllerTest() {
73 public void setUp() throws InterruptedException { 58 super(ChromeActivity.class);
59 }
60
61 @Override
62 public void startMainActivity() throws InterruptedException {
74 // Do nothing. 63 // Do nothing.
75 } 64 }
76 65
77 private static class LayoutResultCallbackWrapperMock implements 66 private static class LayoutResultCallbackWrapperMock implements
78 PrintDocumentAdapterWrapper.LayoutResultCallbackWrapper { 67 PrintDocumentAdapterWrapper.LayoutResultCallbackWrapper {
79 @Override 68 @Override
80 public void onLayoutFinished(PrintDocumentInfo info, boolean changed) {} 69 public void onLayoutFinished(PrintDocumentInfo info, boolean changed) {}
81 70
82 @Override 71 @Override
83 public void onLayoutFailed(CharSequence error) {} 72 public void onLayoutFailed(CharSequence error) {}
(...skipping 12 matching lines...) Expand all
96 85
97 @Override 86 @Override
98 public void onWriteCancelled() {} 87 public void onWriteCancelled() {}
99 } 88 }
100 89
101 /** 90 /**
102 * Test a basic printing flow by emulating the corresponding system calls to the printing 91 * Test a basic printing flow by emulating the corresponding system calls to the printing
103 * controller: onStart, onLayout, onWrite, onFinish. Each one is called onc e, and in this 92 * controller: onStart, onLayout, onWrite, onFinish. Each one is called onc e, and in this
104 * order, in the UI thread. 93 * order, in the UI thread.
105 */ 94 */
106 @Test
107 @TargetApi(Build.VERSION_CODES.KITKAT) 95 @TargetApi(Build.VERSION_CODES.KITKAT)
108 @LargeTest 96 @LargeTest
109 @Feature({"Printing"}) 97 @Feature({"Printing"})
110 public void testNormalPrintingFlow() throws Throwable { 98 public void testNormalPrintingFlow() throws Throwable {
111 if (!ApiCompatibilityUtils.isPrintingSupported()) return; 99 if (!ApiCompatibilityUtils.isPrintingSupported()) return;
112 100
113 mActivityTestRule.startMainActivityWithURL(URL); 101 startMainActivityWithURL(URL);
114 final Tab currentTab = mActivityTestRule.getActivity().getActivityTab(); 102 final Tab currentTab = getActivity().getActivityTab();
115 103
116 final PrintingControllerImpl printingController = createControllerOnUiTh read(); 104 final PrintingControllerImpl printingController = createControllerOnUiTh read();
117 105
118 startControllerOnUiThread(printingController, currentTab); 106 startControllerOnUiThread(printingController, currentTab);
119 // {@link PrintDocumentAdapter#onStart} is always called first. 107 // {@link PrintDocumentAdapter#onStart} is always called first.
120 callStartOnUiThread(printingController); 108 callStartOnUiThread(printingController);
121 109
122 // Create a temporary file to save the PDF. 110 // Create a temporary file to save the PDF.
123 final File cacheDir = 111 final File cacheDir = getInstrumentation().getTargetContext().getCacheDi r();
124 InstrumentationRegistry.getInstrumentation().getTargetContext(). getCacheDir();
125 final File tempFile = File.createTempFile(TEMP_FILE_NAME, TEMP_FILE_EXTE NSION, cacheDir); 112 final File tempFile = File.createTempFile(TEMP_FILE_NAME, TEMP_FILE_EXTE NSION, cacheDir);
126 final ParcelFileDescriptor fileDescriptor = ParcelFileDescriptor.open(te mpFile, 113 final ParcelFileDescriptor fileDescriptor = ParcelFileDescriptor.open(te mpFile,
127 (ParcelFileDescriptor.MODE_CREATE | ParcelFileDescriptor.MODE_RE AD_WRITE)); 114 (ParcelFileDescriptor.MODE_CREATE | ParcelFileDescriptor.MODE_RE AD_WRITE));
128 115
129 PrintAttributes attributes = new PrintAttributes.Builder() 116 PrintAttributes attributes = new PrintAttributes.Builder()
130 .setMediaSize(PrintAttributes.MediaSize.ISO_A4) 117 .setMediaSize(PrintAttributes.MediaSize.ISO_A4)
131 .setResolution(new PrintAttributes.Resolution("foo", "bar", 300, 300)) 118 .setResolution(new PrintAttributes.Resolution("foo", "bar", 300, 300))
132 .setMinMargins(PrintAttributes.Margins.NO_MARGINS) 119 .setMinMargins(PrintAttributes.Margins.NO_MARGINS)
133 .build(); 120 .build();
134 121
(...skipping 11 matching lines...) Expand all
146 @Override 133 @Override
147 public void onLayoutFinished(PrintDocumentInfo info, boolean changed) { 134 public void onLayoutFinished(PrintDocumentInfo info, boolean changed) {
148 callWriteOnUiThread(printingController, fileDescriptor, result); 135 callWriteOnUiThread(printingController, fileDescriptor, result);
149 } 136 }
150 }); 137 });
151 138
152 FileInputStream in = null; 139 FileInputStream in = null;
153 try { 140 try {
154 // This blocks until the PDF is generated. 141 // This blocks until the PDF is generated.
155 result.get(TEST_TIMEOUT, TimeUnit.MILLISECONDS); 142 result.get(TEST_TIMEOUT, TimeUnit.MILLISECONDS);
156 Assert.assertTrue(tempFile.length() > 0); 143 assertTrue(tempFile.length() > 0);
157 in = new FileInputStream(tempFile); 144 in = new FileInputStream(tempFile);
158 byte[] b = new byte[PDF_PREAMBLE.length()]; 145 byte[] b = new byte[PDF_PREAMBLE.length()];
159 in.read(b); 146 in.read(b);
160 String preamble = new String(b); 147 String preamble = new String(b);
161 Assert.assertEquals(PDF_PREAMBLE, preamble); 148 assertEquals(PDF_PREAMBLE, preamble);
162 } finally { 149 } finally {
163 callFinishOnUiThread(printingController); 150 callFinishOnUiThread(printingController);
164 if (in != null) in.close(); 151 if (in != null) in.close();
165 // Close the descriptor, if not closed already. 152 // Close the descriptor, if not closed already.
166 fileDescriptor.close(); 153 fileDescriptor.close();
167 TestFileUtil.deleteFile(tempFile.getAbsolutePath()); 154 TestFileUtil.deleteFile(tempFile.getAbsolutePath());
168 } 155 }
169 156
170 } 157 }
171 158
172 /** 159 /**
173 * Test for http://crbug.com/528909 160 * Test for http://crbug.com/528909
174 * 161 *
175 * @SmallTest 162 * @SmallTest
176 * @Feature({"Printing"}) 163 * @Feature({"Printing"})
177 */ 164 */
178 @Test
179 @CommandLineFlags.Add(ContentSwitches.DISABLE_POPUP_BLOCKING) 165 @CommandLineFlags.Add(ContentSwitches.DISABLE_POPUP_BLOCKING)
180 @DisabledTest(message = "crbug.com/532652") 166 @DisabledTest(message = "crbug.com/532652")
181 public void testPrintClosedWindow() throws Throwable { 167 public void testPrintClosedWindow() throws Throwable {
182 if (!ApiCompatibilityUtils.isPrintingSupported()) return; 168 if (!ApiCompatibilityUtils.isPrintingSupported()) return;
183 169
184 String html = "<html><head><title>printwindowclose</title></head><body>< script>" 170 String html = "<html><head><title>printwindowclose</title></head><body>< script>"
185 + "function printClosedWindow() {" 171 + "function printClosedWindow() {"
186 + " w = window.open(); w.close();" 172 + " w = window.open(); w.close();"
187 + " setTimeout(()=>{w.print(); document.title='completed'}, 0); " 173 + " setTimeout(()=>{w.print(); document.title='completed'}, 0); "
188 + "}</script></body></html>"; 174 + "}</script></body></html>";
189 175
190 mActivityTestRule.startMainActivityWithURL("data:text/html;charset=utf-8 ," + html); 176 startMainActivityWithURL("data:text/html;charset=utf-8," + html);
191 177
192 Tab mTab = mActivityTestRule.getActivity().getActivityTab(); 178 Tab mTab = getActivity().getActivityTab();
193 Assert.assertEquals( 179 assertEquals("title does not match initial title", "printwindowclose", m Tab.getTitle());
194 "title does not match initial title", "printwindowclose", mTab.g etTitle());
195 180
196 TabTitleObserver mOnTitleUpdatedHelper = new TabTitleObserver(mTab, "com pleted"); 181 TabTitleObserver mOnTitleUpdatedHelper = new TabTitleObserver(mTab, "com pleted");
197 mActivityTestRule.runJavaScriptCodeInCurrentTab("printClosedWindow();"); 182 runJavaScriptCodeInCurrentTab("printClosedWindow();");
198 mOnTitleUpdatedHelper.waitForTitleUpdate(5); 183 mOnTitleUpdatedHelper.waitForTitleUpdate(5);
199 Assert.assertEquals("JS did not finish running", "completed", mTab.getTi tle()); 184 assertEquals("JS did not finish running", "completed", mTab.getTitle());
200 } 185 }
201 186
202 private PrintingControllerImpl createControllerOnUiThread() { 187 private PrintingControllerImpl createControllerOnUiThread() {
203 try { 188 try {
204 final FutureTask<PrintingControllerImpl> task = 189 final FutureTask<PrintingControllerImpl> task =
205 new FutureTask<PrintingControllerImpl>(new Callable<Printing ControllerImpl>() { 190 new FutureTask<PrintingControllerImpl>(new Callable<Printing ControllerImpl>() {
206 @Override 191 @Override
207 public PrintingControllerImpl call() throws Exception { 192 public PrintingControllerImpl call() throws Exception {
208 return (PrintingControllerImpl) PrintingControllerIm pl.create( 193 return (PrintingControllerImpl) PrintingControllerIm pl.create(
209 new PrintDocumentAdapterWrapper(), 194 new PrintDocumentAdapterWrapper(),
210 PRINT_JOB_NAME); 195 PRINT_JOB_NAME);
211 } 196 }
212 }); 197 });
213 198
214 InstrumentationRegistry.getInstrumentation().runOnMainSync(task); 199 runTestOnUiThread(task);
215 PrintingControllerImpl result = task.get(TEST_TIMEOUT, TimeUnit.MILL ISECONDS); 200 PrintingControllerImpl result = task.get(TEST_TIMEOUT, TimeUnit.MILL ISECONDS);
216 return result; 201 return result;
217 } catch (Throwable e) { 202 } catch (Throwable e) {
218 Assert.fail("Error on creating PrintingControllerImpl on the UI thre ad: " + e); 203 fail("Error on creating PrintingControllerImpl on the UI thread: " + e);
219 } 204 }
220 return null; 205 return null;
221 } 206 }
222 207
223 private void startControllerOnUiThread(final PrintingControllerImpl controll er, 208 private void startControllerOnUiThread(final PrintingControllerImpl controll er,
224 final Tab tab) { 209 final Tab tab) {
225 try { 210 try {
226 final PrintManagerDelegate mockPrintManagerDelegate = new PrintManag erDelegate() { 211 final PrintManagerDelegate mockPrintManagerDelegate = new PrintManag erDelegate() {
227 @Override 212 @Override
228 public void print(String printJobName, PrintDocumentAdapter docu mentAdapter, 213 public void print(String printJobName, PrintDocumentAdapter docu mentAdapter,
229 PrintAttributes attributes) { 214 PrintAttributes attributes) {
230 // Do nothing, as we will emulate the framework call sequenc e within the test. 215 // Do nothing, as we will emulate the framework call sequenc e within the test.
231 } 216 }
232 }; 217 };
233 218
234 InstrumentationRegistry.getInstrumentation().runOnMainSync(new Runna ble() { 219 runTestOnUiThread(new Runnable() {
235 @Override 220 @Override
236 public void run() { 221 public void run() {
237 controller.startPrint(new TabPrinter(tab), mockPrintManagerD elegate); 222 controller.startPrint(new TabPrinter(tab), mockPrintManagerD elegate);
238 } 223 }
239 }); 224 });
240 } catch (Throwable e) { 225 } catch (Throwable e) {
241 Assert.fail("Error on calling startPrint of PrintingControllerImpl " + e); 226 fail("Error on calling startPrint of PrintingControllerImpl " + e);
242 } 227 }
243 } 228 }
244 229
245 private void callStartOnUiThread(final PrintingControllerImpl controller) { 230 private void callStartOnUiThread(final PrintingControllerImpl controller) {
246 try { 231 try {
247 InstrumentationRegistry.getInstrumentation().runOnMainSync(new Runna ble() { 232 runTestOnUiThread(new Runnable() {
248 @Override 233 @Override
249 public void run() { 234 public void run() {
250 controller.onStart(); 235 controller.onStart();
251 } 236 }
252 }); 237 });
253 } catch (Throwable e) { 238 } catch (Throwable e) {
254 Assert.fail("Error on calling onStart of PrintingControllerImpl " + e); 239 fail("Error on calling onStart of PrintingControllerImpl " + e);
255 } 240 }
256 } 241 }
257 242
258 private void callLayoutOnUiThread( 243 private void callLayoutOnUiThread(
259 final PrintingControllerImpl controller, 244 final PrintingControllerImpl controller,
260 final PrintAttributes oldAttributes, 245 final PrintAttributes oldAttributes,
261 final PrintAttributes newAttributes, 246 final PrintAttributes newAttributes,
262 final PrintDocumentAdapterWrapper.LayoutResultCallbackWrapper layout ResultCallback) { 247 final PrintDocumentAdapterWrapper.LayoutResultCallbackWrapper layout ResultCallback) {
263 try { 248 try {
264 InstrumentationRegistry.getInstrumentation().runOnMainSync(new Runna ble() { 249 runTestOnUiThread(new Runnable() {
265 @Override 250 @Override
266 public void run() { 251 public void run() {
267 controller.onLayout( 252 controller.onLayout(
268 oldAttributes, 253 oldAttributes,
269 newAttributes, 254 newAttributes,
270 new CancellationSignal(), 255 new CancellationSignal(),
271 layoutResultCallback, 256 layoutResultCallback,
272 null); 257 null);
273 } 258 }
274 }); 259 });
275 } catch (Throwable e) { 260 } catch (Throwable e) {
276 Assert.fail("Error on calling onLayout of PrintingControllerImpl " + e); 261 fail("Error on calling onLayout of PrintingControllerImpl " + e);
277 } 262 }
278 } 263 }
279 264
280 @TargetApi(Build.VERSION_CODES.KITKAT) 265 @TargetApi(Build.VERSION_CODES.KITKAT)
281 private void callWriteOnUiThread( 266 private void callWriteOnUiThread(
282 final PrintingControllerImpl controller, 267 final PrintingControllerImpl controller,
283 final ParcelFileDescriptor descriptor, 268 final ParcelFileDescriptor descriptor,
284 final FutureTask<Boolean> result) { 269 final FutureTask<Boolean> result) {
285 try { 270 try {
286 controller.onWrite( 271 controller.onWrite(
287 new PageRange[] {PageRange.ALL_PAGES}, 272 new PageRange[] {PageRange.ALL_PAGES},
288 descriptor, 273 descriptor,
289 new CancellationSignal(), 274 new CancellationSignal(),
290 new WriteResultCallbackWrapperMock() { 275 new WriteResultCallbackWrapperMock() {
291 @Override 276 @Override
292 public void onWriteFinished(PageRange[] pages) { 277 public void onWriteFinished(PageRange[] pages) {
293 try { 278 try {
294 descriptor.close(); 279 descriptor.close();
295 // Result is ready, signal to continue. 280 // Result is ready, signal to continue.
296 result.run(); 281 result.run();
297 } catch (IOException ex) { 282 } catch (IOException ex) {
298 Assert.fail("Failed file operation: " + ex.toStr ing()); 283 fail("Failed file operation: " + ex.toString());
299 } 284 }
300 } 285 }
301 } 286 }
302 ); 287 );
303 } catch (Throwable e) { 288 } catch (Throwable e) {
304 Assert.fail("Error on calling onWriteInternal of PrintingControllerI mpl " + e); 289 fail("Error on calling onWriteInternal of PrintingControllerImpl " + e);
305 } 290 }
306 } 291 }
307 292
308 private void callFinishOnUiThread(final PrintingControllerImpl controller) { 293 private void callFinishOnUiThread(final PrintingControllerImpl controller) {
309 try { 294 try {
310 InstrumentationRegistry.getInstrumentation().runOnMainSync(new Runna ble() { 295 runTestOnUiThread(new Runnable() {
311 @Override 296 @Override
312 public void run() { 297 public void run() {
313 controller.onFinish(); 298 controller.onFinish();
314 } 299 }
315 }); 300 });
316 } catch (Throwable e) { 301 } catch (Throwable e) {
317 Assert.fail("Error on calling onFinish of PrintingControllerImpl " + e); 302 fail("Error on calling onFinish of PrintingControllerImpl " + e);
318 } 303 }
319 } 304 }
320 } 305 }
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698