1 /* 2 * Copyright (C) 2016 The Android Open Source Project 3 * 4 * Licensed under the Apache License, Version 2.0 (the "License"); 5 * you may not use this file except in compliance with the License. 6 * You may obtain a copy of the License at 7 * 8 * http://www.apache.org/licenses/LICENSE-2.0 9 * 10 * Unless required by applicable law or agreed to in writing, software 11 * distributed under the License is distributed on an "AS IS" BASIS, 12 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13 * See the License for the specific language governing permissions and 14 * limitations under the License. 15 */ 16 17 package com.android.functional.downloadapp; 18 19 import android.content.Context; 20 import android.os.Environment; 21 import android.os.SystemClock; 22 import android.support.test.uiautomator.By; 23 import android.support.test.uiautomator.Direction; 24 import android.support.test.uiautomator.UiDevice; 25 import android.support.test.uiautomator.UiObject2; 26 import android.support.test.uiautomator.Until; 27 import android.test.InstrumentationTestCase; 28 import android.test.suitebuilder.annotation.MediumTest; 29 import android.test.suitebuilder.annotation.SmallTest; 30 import android.test.suitebuilder.annotation.Suppress; 31 import android.util.Log; 32 33 import com.android.functional.downloadapp.DownloadAppTestHelper.UIViewType; 34 35 import junit.framework.Assert; 36 37 import java.util.Random; 38 39 public class DownloadAppTests extends InstrumentationTestCase { 40 private DownloadAppTestHelper mDLAppHelper = null; 41 private UiDevice mDevice = null; 42 private Context mContext = null; 43 44 @Override 45 protected void setUp() throws Exception { 46 super.setUp(); 47 mDevice = UiDevice.getInstance(getInstrumentation()); 48 mContext = getInstrumentation().getContext(); 49 mDLAppHelper = DownloadAppTestHelper.getInstance(mDevice, mContext); 50 } 51 52 @Override 53 protected void tearDown() throws Exception { 54 super.tearDown(); 55 } 56 57 @SmallTest 58 public void testAddCompletedDownload() throws Exception { 59 Random random = new Random(); 60 Long dlId = mDLAppHelper.addToDownloadContentDB( 61 String.format("%s.pdf", DownloadAppTestHelper.randomWord(random.nextInt(8) + 2)), 62 String.format("%s Desc", DownloadAppTestHelper.randomWord(random.nextInt(9) + 4)), 63 Boolean.FALSE, 64 DownloadAppTestHelper.FILE_TYPES[random.nextInt( 65 DownloadAppTestHelper.FILE_TYPES.length)], 66 Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_DOWNLOADS) 67 .getAbsolutePath(), 68 random.nextInt(2 * mDLAppHelper.TIMEOUT), Boolean.FALSE); 69 assertTrue("Download item <> 1", 70 1 == mDLAppHelper.getDownloadItemCountById(new long[] { 71 dlId 72 })); 73 } 74 75 @MediumTest 76 public void testScroll() { 77 mDLAppHelper.populateContentInDLApp(20); 78 mDLAppHelper.launchApp(DownloadAppTestHelper.PACKAGE_NAME, DownloadAppTestHelper.APP_NAME); 79 UiObject2 container = mDevice.wait(Until.findObject( 80 By.res("com.android.documentsui:id/container_directory")), mDLAppHelper.TIMEOUT); 81 container.scroll(Direction.UP, 1.0f); 82 mDevice.waitForIdle(); 83 container.scroll(Direction.DOWN, 1.0f); 84 } 85 86 @MediumTest 87 public void testSortByName() throws Exception { 88 Log.d(mDLAppHelper.TEST_TAG, String.format("Before sortbyname tests, total count is %d", 89 mDLAppHelper.getTotalNumberDownloads())); 90 mDLAppHelper.populateContentInDLApp(5); 91 mDLAppHelper.launchApp(DownloadAppTestHelper.PACKAGE_NAME, DownloadAppTestHelper.APP_NAME); 92 mDLAppHelper.sortByParam("name"); 93 assertTrue("DL items can't be sorted by name", mDLAppHelper.verifySortedByName()); 94 } 95 96 @Suppress 97 @MediumTest 98 public void testSortBySize() { 99 mDLAppHelper.populateContentInDLApp(5); 100 mDLAppHelper.launchApp(DownloadAppTestHelper.PACKAGE_NAME, DownloadAppTestHelper.APP_NAME); 101 mDLAppHelper.sortByParam("size"); 102 assertTrue("DL items can't be sorted by size", mDLAppHelper.verifySortedBySize()); 103 } 104 105 @MediumTest 106 public void testSortByTime() { 107 mDLAppHelper.populateContentInDLApp(5); 108 mDLAppHelper.launchApp(DownloadAppTestHelper.PACKAGE_NAME, DownloadAppTestHelper.APP_NAME); 109 mDLAppHelper.sortByParam("date modified"); 110 assertTrue("DL items can't be sorted by time", mDLAppHelper.verifySortedByTime()); 111 } 112 113 @MediumTest 114 public void testToggleViewTypeForDownloadItems() { 115 mDLAppHelper.populateContentInDLApp(10); 116 mDLAppHelper.launchApp(DownloadAppTestHelper.PACKAGE_NAME, DownloadAppTestHelper.APP_NAME); 117 mDevice.wait(Until.findObject(By.res( 118 String.format("%s:id/%s", DownloadAppTestHelper.PACKAGE_NAME, UIViewType.LIST))), 119 2 * mDLAppHelper.TIMEOUT).click(); 120 mDLAppHelper.verifyDownloadViewType(UIViewType.GRID); 121 mDevice.wait(Until.findObject(By.res( 122 String.format("%s:id/%s", DownloadAppTestHelper.PACKAGE_NAME, UIViewType.GRID))), 123 2 * mDLAppHelper.TIMEOUT).click(); 124 mDLAppHelper.verifyDownloadViewType(UIViewType.LIST); 125 } 126 127 @MediumTest 128 public void testCABMenuShow() { 129 mDLAppHelper.populateContentInDLApp(10); 130 mDLAppHelper.launchApp(DownloadAppTestHelper.PACKAGE_NAME, DownloadAppTestHelper.APP_NAME); 131 mDevice.wait(Until.findObject(By.res("com.android.documentsui:id/dir_list")), 132 mDLAppHelper.TIMEOUT).getChildren().get(1).click(1 * 2 * mDLAppHelper.TIMEOUT); 133 UiObject2 cabMenuObj = null; 134 int counter = 5; 135 while ((cabMenuObj = mDevice.wait(Until.findObject(By.res(String.format("%s:id/menu_share", 136 DownloadAppTestHelper.PACKAGE_NAME))), mDLAppHelper.TIMEOUT)) == null 137 && counter-- > 0); 138 Assert.assertNotNull(cabMenuObj); 139 counter = 5; 140 while ((cabMenuObj = mDevice.wait(Until.findObject(By.res(String.format("%s:id/menu_delete", 141 DownloadAppTestHelper.PACKAGE_NAME))), mDLAppHelper.TIMEOUT)) == null 142 && counter-- > 0); 143 Assert.assertNotNull(cabMenuObj); 144 counter = 5; 145 while ((cabMenuObj = mDevice.wait(Until.findObject( 146 By.desc("More options")), mDLAppHelper.TIMEOUT)) == null && counter-- > 0) 147 ; 148 Assert.assertNotNull(cabMenuObj); 149 while ((cabMenuObj = mDevice.wait(Until.findObject( 150 By.desc("Done")), mDLAppHelper.TIMEOUT)) == null && counter-- > 0) 151 ; 152 Assert.assertNotNull(cabMenuObj); 153 cabMenuObj.click(); 154 SystemClock.sleep(2 * mDLAppHelper.TIMEOUT); 155 } 156 157 @MediumTest 158 public void testCABMenuDelete() { 159 mDLAppHelper.populateContentInDLApp(10); 160 mDLAppHelper.launchApp(DownloadAppTestHelper.PACKAGE_NAME, DownloadAppTestHelper.APP_NAME); 161 UiObject2 deleteObj = mDevice.wait(Until.findObject( 162 By.res("com.android.documentsui:id/dir_list")), mDLAppHelper.TIMEOUT) 163 .getChildren().get(1); 164 String deleteObjText = deleteObj.getText(); 165 deleteObj.click(1 * 2 * mDLAppHelper.TIMEOUT); 166 int counter = 5; 167 UiObject2 cabMenuObj = null; 168 while ((cabMenuObj = mDevice.wait(Until.findObject(By.res(String.format("%s:id/menu_delete", 169 DownloadAppTestHelper.PACKAGE_NAME))), 2 * mDLAppHelper.TIMEOUT)) == null 170 && counter-- > 0); 171 cabMenuObj.click(); 172 UiObject2 deleteBtn = mDevice.wait(Until.findObject( 173 By.textContains("Delete")), mDLAppHelper.TIMEOUT); 174 if(deleteBtn != null) { 175 mDevice.wait(Until.findObject(By.text("OK")), 2 * mDLAppHelper.TIMEOUT).click(); 176 } 177 Assert.assertFalse("", mDLAppHelper.getDownloadItemNames().contains(deleteObjText)); 178 } 179 } 180