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

Side by Side Diff: chrome/android/javatests/src/org/chromium/chrome/browser/webapps/WebappDirectoryManagerTest.java

Issue 2766373004: Convert the rest of chrome_public_test_apk InstrumentationTestCases to JUnit4 (Closed)
Patch Set: nits and rebase Created 3 years, 8 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 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.webapps; 5 package org.chromium.chrome.browser.webapps;
6 6
7 import android.content.Intent; 7 import android.content.Intent;
8 import android.content.pm.ApplicationInfo; 8 import android.content.pm.ApplicationInfo;
9 import android.net.Uri; 9 import android.net.Uri;
10 import android.os.AsyncTask; 10 import android.os.AsyncTask;
11 import android.os.Build; 11 import android.os.Build;
12 import android.support.test.InstrumentationRegistry;
12 import android.support.test.filters.SmallTest; 13 import android.support.test.filters.SmallTest;
13 import android.test.InstrumentationTestCase; 14
15 import org.junit.After;
16 import org.junit.Assert;
17 import org.junit.Before;
18 import org.junit.Test;
19 import org.junit.runner.RunWith;
14 20
15 import org.chromium.base.FileUtils; 21 import org.chromium.base.FileUtils;
16 import org.chromium.base.metrics.RecordHistogram; 22 import org.chromium.base.metrics.RecordHistogram;
17 import org.chromium.base.test.util.AdvancedMockContext; 23 import org.chromium.base.test.util.AdvancedMockContext;
18 import org.chromium.base.test.util.Feature; 24 import org.chromium.base.test.util.Feature;
25 import org.chromium.chrome.test.ChromeJUnit4ClassRunner;
19 import org.chromium.content.browser.test.util.Criteria; 26 import org.chromium.content.browser.test.util.Criteria;
20 import org.chromium.content.browser.test.util.CriteriaHelper; 27 import org.chromium.content.browser.test.util.CriteriaHelper;
21 28
22 import java.io.File; 29 import java.io.File;
23 import java.util.HashSet; 30 import java.util.HashSet;
24 import java.util.Set; 31 import java.util.Set;
25 import java.util.concurrent.Callable; 32 import java.util.concurrent.Callable;
26 33
27 /** 34 /**
28 * Tests that directories for WebappActivities are managed correctly. 35 * Tests that directories for WebappActivities are managed correctly.
29 */ 36 */
30 public class WebappDirectoryManagerTest extends InstrumentationTestCase { 37 @RunWith(ChromeJUnit4ClassRunner.class)
38 public class WebappDirectoryManagerTest {
31 private static final String TAG = "webapps_WebappDirect"; 39 private static final String TAG = "webapps_WebappDirect";
32 40
33 private static final String WEBAPP_ID_1 = "webapp_1"; 41 private static final String WEBAPP_ID_1 = "webapp_1";
34 private static final String WEBAPP_ID_2 = "webapp_2"; 42 private static final String WEBAPP_ID_2 = "webapp_2";
35 private static final String WEBAPP_ID_3 = "webapp_3"; 43 private static final String WEBAPP_ID_3 = "webapp_3";
36 44
37 private static class TestWebappDirectoryManager extends WebappDirectoryManag er { 45 private static class TestWebappDirectoryManager extends WebappDirectoryManag er {
38 private Set<Intent> mBaseIntents = new HashSet<Intent>(); 46 private Set<Intent> mBaseIntents = new HashSet<Intent>();
39 47
40 @Override 48 @Override
41 protected Set<Intent> getBaseIntentsForAllTasks() { 49 protected Set<Intent> getBaseIntentsForAllTasks() {
42 return mBaseIntents; 50 return mBaseIntents;
43 } 51 }
44 } 52 }
45 53
46 private class WebappMockContext extends AdvancedMockContext { 54 private static class WebappMockContext extends AdvancedMockContext {
47 public WebappMockContext() { 55 public WebappMockContext() {
48 super(getInstrumentation().getTargetContext()); 56 super(InstrumentationRegistry.getInstrumentation().getTargetContext( ));
49 } 57 }
50 58
51 /** Returns a directory for test data inside the cache folder. */ 59 /** Returns a directory for test data inside the cache folder. */
52 public String getBaseDirectory() { 60 public String getBaseDirectory() {
53 File cacheDirectory = getInstrumentation().getTargetContext().getCac heDir(); 61 File cacheDirectory =
62 InstrumentationRegistry.getInstrumentation().getTargetContex t().getCacheDir();
54 return new File(cacheDirectory, "WebappDirectoryManagerTest").getAbs olutePath(); 63 return new File(cacheDirectory, "WebappDirectoryManagerTest").getAbs olutePath();
55 } 64 }
56 65
57 @Override 66 @Override
58 public ApplicationInfo getApplicationInfo() { 67 public ApplicationInfo getApplicationInfo() {
59 ApplicationInfo mockInfo = new ApplicationInfo(); 68 ApplicationInfo mockInfo = new ApplicationInfo();
60 mockInfo.dataDir = getBaseDirectory(); 69 mockInfo.dataDir = getBaseDirectory();
61 return mockInfo; 70 return mockInfo;
62 } 71 }
63 72
64 @Override 73 @Override
65 public File getDir(String name, int mode) { 74 public File getDir(String name, int mode) {
66 File appDirectory = new File(getApplicationInfo().dataDir, "app_" + name); 75 File appDirectory = new File(getApplicationInfo().dataDir, "app_" + name);
67 assertTrue(appDirectory.exists() || appDirectory.mkdirs()); 76 Assert.assertTrue(appDirectory.exists() || appDirectory.mkdirs());
68 return appDirectory; 77 return appDirectory;
69 } 78 }
70 } 79 }
71 80
72 private WebappMockContext mMockContext; 81 private WebappMockContext mMockContext;
73 private TestWebappDirectoryManager mWebappDirectoryManager; 82 private TestWebappDirectoryManager mWebappDirectoryManager;
74 83
75 @Override 84 @Before
76 public void setUp() throws Exception { 85 public void setUp() throws Exception {
77 super.setUp();
78 RecordHistogram.setDisabledForTests(true); 86 RecordHistogram.setDisabledForTests(true);
79 mMockContext = new WebappMockContext(); 87 mMockContext = new WebappMockContext();
80 mWebappDirectoryManager = new TestWebappDirectoryManager(); 88 mWebappDirectoryManager = new TestWebappDirectoryManager();
81 89
82 // Set up the base directories. 90 // Set up the base directories.
83 File baseDirectory = new File(mMockContext.getBaseDirectory()); 91 File baseDirectory = new File(mMockContext.getBaseDirectory());
84 FileUtils.recursivelyDeleteFile(baseDirectory); 92 FileUtils.recursivelyDeleteFile(baseDirectory);
85 assertTrue(baseDirectory.mkdirs()); 93 Assert.assertTrue(baseDirectory.mkdirs());
86 } 94 }
87 95
88 @Override 96 @After
89 public void tearDown() throws Exception { 97 public void tearDown() throws Exception {
90 FileUtils.recursivelyDeleteFile(new File(mMockContext.getBaseDirectory() )); 98 FileUtils.recursivelyDeleteFile(new File(mMockContext.getBaseDirectory() ));
91 RecordHistogram.setDisabledForTests(false); 99 RecordHistogram.setDisabledForTests(false);
92 super.tearDown();
93 } 100 }
94 101
102 @Test
95 @SmallTest 103 @SmallTest
96 @Feature({"Webapps"}) 104 @Feature({"Webapps"})
97 public void testDeletesOwnDirectory() throws Exception { 105 public void testDeletesOwnDirectory() throws Exception {
98 File webappDirectory = new File( 106 File webappDirectory = new File(
99 mWebappDirectoryManager.getBaseWebappDirectory(mMockContext), WE BAPP_ID_1); 107 mWebappDirectoryManager.getBaseWebappDirectory(mMockContext), WE BAPP_ID_1);
100 assertTrue(webappDirectory.mkdirs()); 108 Assert.assertTrue(webappDirectory.mkdirs());
101 assertTrue(webappDirectory.exists()); 109 Assert.assertTrue(webappDirectory.exists());
102 110
103 // Confirm that it deletes the current web app's directory. 111 // Confirm that it deletes the current web app's directory.
104 runCleanup(); 112 runCleanup();
105 assertFalse(webappDirectory.exists()); 113 Assert.assertFalse(webappDirectory.exists());
106 } 114 }
107 115
108 /** 116 /**
109 * On Lollipop and higher, the {@link WebappDirectoryManager} also deletes d irectories for web 117 * On Lollipop and higher, the {@link WebappDirectoryManager} also deletes d irectories for web
110 * apps that no longer correspond to tasks in Recents. 118 * apps that no longer correspond to tasks in Recents.
111 */ 119 */
120 @Test
112 @SmallTest 121 @SmallTest
113 @Feature({"Webapps"}) 122 @Feature({"Webapps"})
114 public void testDeletesDirectoriesForDeadTasks() throws Exception { 123 public void testDeletesDirectoriesForDeadTasks() throws Exception {
115 if (Build.VERSION.SDK_INT < Build.VERSION_CODES.LOLLIPOP) return; 124 if (Build.VERSION.SDK_INT < Build.VERSION_CODES.LOLLIPOP) return;
116 125
117 // Track the three web app directories. 126 // Track the three web app directories.
118 File directory1 = new File( 127 File directory1 = new File(
119 mWebappDirectoryManager.getBaseWebappDirectory(mMockContext), WE BAPP_ID_1); 128 mWebappDirectoryManager.getBaseWebappDirectory(mMockContext), WE BAPP_ID_1);
120 File directory2 = new File( 129 File directory2 = new File(
121 mWebappDirectoryManager.getBaseWebappDirectory(mMockContext), WE BAPP_ID_2); 130 mWebappDirectoryManager.getBaseWebappDirectory(mMockContext), WE BAPP_ID_2);
122 File directory3 = new File( 131 File directory3 = new File(
123 mWebappDirectoryManager.getBaseWebappDirectory(mMockContext), WE BAPP_ID_3); 132 mWebappDirectoryManager.getBaseWebappDirectory(mMockContext), WE BAPP_ID_3);
124 133
125 // Seed the directory with folders for web apps. 134 // Seed the directory with folders for web apps.
126 assertTrue(directory1.mkdirs()); 135 Assert.assertTrue(directory1.mkdirs());
127 assertTrue(directory2.mkdirs()); 136 Assert.assertTrue(directory2.mkdirs());
128 assertTrue(directory3.mkdirs()); 137 Assert.assertTrue(directory3.mkdirs());
129 138
130 // Indicate that another of the web apps is listed in Recents; in real u sage this web app 139 // Indicate that another of the web apps is listed in Recents; in real u sage this web app
131 // would not be in the foreground and would have persisted its state. 140 // would not be in the foreground and would have persisted its state.
132 mWebappDirectoryManager.mBaseIntents.add( 141 mWebappDirectoryManager.mBaseIntents.add(
133 new Intent(Intent.ACTION_VIEW, Uri.parse("webapp://webapp_2"))); 142 new Intent(Intent.ACTION_VIEW, Uri.parse("webapp://webapp_2")));
134 143
135 // Only the directory for the background web app should survive. 144 // Only the directory for the background web app should survive.
136 runCleanup(); 145 runCleanup();
137 assertFalse(directory1.exists()); 146 Assert.assertFalse(directory1.exists());
138 assertTrue(directory2.exists()); 147 Assert.assertTrue(directory2.exists());
139 assertFalse(directory3.exists()); 148 Assert.assertFalse(directory3.exists());
140 } 149 }
141 150
151 @Test
142 @SmallTest 152 @SmallTest
143 @Feature({"Webapps"}) 153 @Feature({"Webapps"})
144 public void testDeletesObsoleteDirectories() throws Exception { 154 public void testDeletesObsoleteDirectories() throws Exception {
145 if (Build.VERSION.SDK_INT < Build.VERSION_CODES.LOLLIPOP) return; 155 if (Build.VERSION.SDK_INT < Build.VERSION_CODES.LOLLIPOP) return;
146 156
147 // Seed the base directory with folders that correspond to pre-L web app s. 157 // Seed the base directory with folders that correspond to pre-L web app s.
148 File baseDirectory = new File(mMockContext.getBaseDirectory()); 158 File baseDirectory = new File(mMockContext.getBaseDirectory());
149 File webappDirectory1 = new File(baseDirectory, "app_WebappActivity1"); 159 File webappDirectory1 = new File(baseDirectory, "app_WebappActivity1");
150 File webappDirectory6 = new File(baseDirectory, "app_WebappActivity6"); 160 File webappDirectory6 = new File(baseDirectory, "app_WebappActivity6");
151 File nonWebappDirectory = new File(baseDirectory, "app_ChromeDocumentAct ivity"); 161 File nonWebappDirectory = new File(baseDirectory, "app_ChromeDocumentAct ivity");
152 assertTrue(webappDirectory1.mkdirs()); 162 Assert.assertTrue(webappDirectory1.mkdirs());
153 assertTrue(webappDirectory6.mkdirs()); 163 Assert.assertTrue(webappDirectory6.mkdirs());
154 assertTrue(nonWebappDirectory.mkdirs()); 164 Assert.assertTrue(nonWebappDirectory.mkdirs());
155 165
156 // Make sure only the web app folders are deleted. 166 // Make sure only the web app folders are deleted.
157 runCleanup(); 167 runCleanup();
158 assertFalse(webappDirectory1.exists()); 168 Assert.assertFalse(webappDirectory1.exists());
159 assertFalse(webappDirectory6.exists()); 169 Assert.assertFalse(webappDirectory6.exists());
160 assertTrue(nonWebappDirectory.exists()); 170 Assert.assertTrue(nonWebappDirectory.exists());
161 } 171 }
162 172
163 private void runCleanup() throws Exception { 173 private void runCleanup() throws Exception {
164 final AsyncTask task = 174 final AsyncTask task =
165 mWebappDirectoryManager.cleanUpDirectories(mMockContext, WEBAPP_ ID_1); 175 mWebappDirectoryManager.cleanUpDirectories(mMockContext, WEBAPP_ ID_1);
166 CriteriaHelper.pollInstrumentationThread( 176 CriteriaHelper.pollInstrumentationThread(
167 Criteria.equals(AsyncTask.Status.FINISHED, new Callable<AsyncTas k.Status>() { 177 Criteria.equals(AsyncTask.Status.FINISHED, new Callable<AsyncTas k.Status>() {
168 @Override 178 @Override
169 public AsyncTask.Status call() { 179 public AsyncTask.Status call() {
170 return task.getStatus(); 180 return task.getStatus();
171 } 181 }
172 })); 182 }));
173 } 183 }
174 } 184 }
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698