Home | History | Annotate | Download | only in downloadapp
      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