Home | History | Annotate | Download | only in documentsui
      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.documentsui;
     18 
     19 import android.net.Uri;
     20 import android.support.test.filters.LargeTest;
     21 
     22 import com.android.documentsui.files.FilesActivity;
     23 import com.android.documentsui.sorting.SortDimension;
     24 import com.android.documentsui.sorting.SortModel;
     25 
     26 @LargeTest
     27 public class SortDocumentUiTest extends ActivityTest<FilesActivity> {
     28 
     29     private static final String DIR_1 = "folder_1";
     30     private static final String DIR_2 = "dir_2";
     31 
     32     private static final String FILE_1 = "file_1";
     33     private static final String FILE_2 = "doc_2";
     34     private static final String FILE_3 = "image_3";
     35 
     36     private static final String MIME_1 = "text/plain"; // Plain text
     37     private static final String MIME_2 = "text/html"; // HTML document
     38     private static final String MIME_3 = "image/jpeg"; // JPG image
     39 
     40     private static final String[] FILES = { FILE_1, FILE_3, FILE_2 };
     41     private static final String[] MIMES = { MIME_1, MIME_3, MIME_2 };
     42     private static final String[] DIRS = { DIR_1, DIR_2 };
     43 
     44     private static final String[] DIRS_IN_NAME_ASC = { DIR_2, DIR_1 };
     45     private static final String[] DIRS_IN_NAME_DESC = reverse(DIRS_IN_NAME_ASC);
     46     private static final String[] FILES_IN_NAME_ASC = { FILE_2, FILE_1, FILE_3 };
     47     private static final String[] FILES_IN_NAME_DESC = reverse(FILES_IN_NAME_ASC);
     48 
     49     private static final String[] FILES_IN_SIZE_ASC = { FILE_2, FILE_1, FILE_3 };
     50     private static final String[] FILES_IN_SIZE_DESC = reverse(FILES_IN_SIZE_ASC);
     51 
     52     private static final String[] DIRS_IN_MODIFIED_DESC = reverse(DIRS);
     53     private static final String[] FILES_IN_MODIFIED_DESC = reverse(FILES);
     54 
     55     private static final String[] FILES_IN_TYPE_ASC = { FILE_2, FILE_3, FILE_1 };
     56     private static final String[] FILES_IN_TYPE_DESC = reverse(FILES_IN_TYPE_ASC);
     57 
     58     public SortDocumentUiTest() {
     59         super(FilesActivity.class);
     60     }
     61 
     62     @Override
     63     public void setUp() throws Exception {
     64         super.setUp();
     65         bots.roots.closeDrawer();
     66     }
     67 
     68     private void initFiles() throws Exception {
     69         initFiles(0);
     70     }
     71 
     72     /**
     73      * Initiate test files. It allows waiting between creations of files, so that we can assure
     74      * the modified date of each document is different.
     75      * @param sleep time to sleep in ms
     76      */
     77     private void initFiles(long sleep) throws Exception {
     78         for (int i = 0; i < FILES.length; ++i) {
     79             Uri uri = mDocsHelper.createDocument(rootDir0, MIMES[i], FILES[i]);
     80             mDocsHelper.writeDocument(uri, FILES[i].getBytes());
     81 
     82             Thread.sleep(sleep);
     83         }
     84 
     85         for (String dir : DIRS) {
     86             mDocsHelper.createFolder(rootDir0, dir);
     87 
     88             Thread.sleep(sleep);
     89         }
     90     }
     91 
     92     public void testDefaultSortByNameAscending() throws Exception {
     93         initFiles();
     94         bots.directory.assertOrder(DIRS_IN_NAME_ASC, FILES_IN_NAME_ASC);
     95     }
     96 
     97     public void testSortByName_Descending_listMode() throws Exception {
     98         initFiles();
     99 
    100         bots.main.switchToListMode();
    101 
    102         bots.sortHeader.sortBy(
    103                 SortModel.SORT_DIMENSION_ID_TITLE, SortDimension.SORT_DIRECTION_DESCENDING);
    104         bots.directory.assertOrder(DIRS_IN_NAME_DESC, FILES_IN_NAME_DESC);
    105     }
    106 
    107     public void testSortBySize_Ascending_listMode() throws Exception {
    108         initFiles();
    109 
    110         bots.main.switchToListMode();
    111 
    112         bots.sortHeader.sortBy(
    113                 SortModel.SORT_DIMENSION_ID_SIZE, SortDimension.SORT_DIRECTION_ASCENDING);
    114         bots.directory.assertOrder(DIRS_IN_NAME_ASC, FILES_IN_SIZE_ASC);
    115     }
    116 
    117     public void testSortBySize_Descending_listMode() throws Exception {
    118         initFiles();
    119 
    120         bots.main.switchToListMode();
    121 
    122         bots.sortHeader.sortBy(
    123                 SortModel.SORT_DIMENSION_ID_SIZE, SortDimension.SORT_DIRECTION_DESCENDING);
    124         bots.directory.assertOrder(DIRS_IN_NAME_ASC, FILES_IN_SIZE_DESC);
    125     }
    126 
    127     public void testSortByModified_Ascending_listMode() throws Exception {
    128         initFiles(1000);
    129 
    130         bots.main.switchToListMode();
    131 
    132         bots.sortHeader.sortBy(
    133                 SortModel.SORT_DIMENSION_ID_DATE, SortDimension.SORT_DIRECTION_ASCENDING);
    134         bots.directory.assertOrder(DIRS, FILES);
    135     }
    136 
    137     public void testSortByModified_Descending_listMode() throws Exception {
    138         initFiles(1000);
    139 
    140         bots.main.switchToListMode();
    141 
    142         bots.sortHeader.sortBy(
    143                 SortModel.SORT_DIMENSION_ID_DATE, SortDimension.SORT_DIRECTION_DESCENDING);
    144         bots.directory.assertOrder(DIRS_IN_MODIFIED_DESC, FILES_IN_MODIFIED_DESC);
    145     }
    146 
    147     public void testSortByType_Ascending_listMode() throws Exception {
    148         initFiles();
    149 
    150         bots.main.switchToListMode();
    151 
    152         bots.sortHeader.sortBy(
    153                 SortModel.SORT_DIMENSION_ID_FILE_TYPE, SortDimension.SORT_DIRECTION_ASCENDING);
    154         bots.directory.assertOrder(DIRS_IN_NAME_ASC, FILES_IN_TYPE_ASC);
    155     }
    156 
    157     public void testSortByType_Descending_listMode() throws Exception {
    158         initFiles();
    159 
    160         bots.main.switchToListMode();
    161 
    162         bots.sortHeader.sortBy(
    163                 SortModel.SORT_DIMENSION_ID_FILE_TYPE, SortDimension.SORT_DIRECTION_DESCENDING);
    164         bots.directory.assertOrder(DIRS_IN_NAME_ASC, FILES_IN_TYPE_DESC);
    165     }
    166 
    167     public void testSortByName_Descending_gridMode() throws Exception {
    168         initFiles();
    169 
    170         bots.main.switchToGridMode();
    171 
    172         bots.sortHeader.sortBy(
    173                 SortModel.SORT_DIMENSION_ID_TITLE, SortDimension.SORT_DIRECTION_DESCENDING);
    174         bots.directory.assertOrder(DIRS_IN_NAME_DESC, FILES_IN_NAME_DESC);
    175     }
    176 
    177     public void testSortBySize_Ascending_gridMode() throws Exception {
    178         initFiles();
    179 
    180         bots.main.switchToGridMode();
    181 
    182         bots.sortHeader.sortBy(
    183                 SortModel.SORT_DIMENSION_ID_SIZE, SortDimension.SORT_DIRECTION_ASCENDING);
    184         bots.directory.assertOrder(DIRS_IN_NAME_ASC, FILES_IN_SIZE_ASC);
    185     }
    186 
    187     public void testSortBySize_Descending_gridMode() throws Exception {
    188         initFiles();
    189 
    190         bots.main.switchToGridMode();
    191 
    192         bots.sortHeader.sortBy(
    193                 SortModel.SORT_DIMENSION_ID_SIZE, SortDimension.SORT_DIRECTION_DESCENDING);
    194         bots.directory.assertOrder(DIRS_IN_NAME_ASC, FILES_IN_SIZE_DESC);
    195     }
    196 
    197     public void testSortByModified_Ascending_gridMode() throws Exception {
    198         initFiles(1000);
    199 
    200         bots.main.switchToGridMode();
    201 
    202         bots.sortHeader.sortBy(
    203                 SortModel.SORT_DIMENSION_ID_DATE, SortDimension.SORT_DIRECTION_ASCENDING);
    204         bots.directory.assertOrder(DIRS, FILES);
    205     }
    206 
    207     public void testSortByModified_Descending_gridMode() throws Exception {
    208         initFiles(1000);
    209 
    210         bots.main.switchToGridMode();
    211 
    212         bots.sortHeader.sortBy(
    213                 SortModel.SORT_DIMENSION_ID_DATE, SortDimension.SORT_DIRECTION_DESCENDING);
    214         bots.directory.assertOrder(DIRS_IN_MODIFIED_DESC, FILES_IN_MODIFIED_DESC);
    215     }
    216 
    217     public void testSortByType_Ascending_gridMode() throws Exception {
    218         initFiles();
    219 
    220         bots.main.switchToGridMode();
    221 
    222         bots.sortHeader.sortBy(
    223                 SortModel.SORT_DIMENSION_ID_FILE_TYPE, SortDimension.SORT_DIRECTION_ASCENDING);
    224         bots.directory.assertOrder(DIRS_IN_NAME_ASC, FILES_IN_TYPE_ASC);
    225     }
    226 
    227     public void testSortByType_Descending_gridMode() throws Exception {
    228         initFiles();
    229 
    230         bots.main.switchToGridMode();
    231 
    232         bots.sortHeader.sortBy(
    233                 SortModel.SORT_DIMENSION_ID_FILE_TYPE, SortDimension.SORT_DIRECTION_DESCENDING);
    234         bots.directory.assertOrder(DIRS_IN_NAME_ASC, FILES_IN_TYPE_DESC);
    235     }
    236 
    237     private static String[] reverse(String[] array) {
    238         String[] ret = new String[array.length];
    239 
    240         for (int i = 0; i < array.length; ++i) {
    241             ret[ret.length - i - 1] = array[i];
    242         }
    243 
    244         return ret;
    245     }
    246 }
    247