Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 272c0204 authored by Ben Kwa's avatar Ben Kwa
Browse files

Consolidate unit tests.

- Move all unit tests to be run under the android framework.
- Add a unit test for ag/776629
- Make DirectoryFragment.Model tests properly simulate finalization conditions.

Change-Id: Ie33d097154d464149fd8c0c24bf66ada677db4ad
parent 94b486d3
Loading
Loading
Loading
Loading
+22 −8
Original line number Diff line number Diff line
@@ -820,9 +820,9 @@ public class DirectoryFragment extends Fragment {
                                    mModel.undoDeletion();
                                } else {
                                    mModel.finalizeDeletion(
                                            new Runnable() {
                                            new Model.DeletionListener() {
                                                @Override
                                                public void run() {
                                                public void onError() {
                                                    Shared.makeSnackbar(
                                                            activity,
                                                            R.string.toast_failed_delete,
@@ -1865,9 +1865,9 @@ public class DirectoryFragment extends Fragment {
         * @param view The view which will be used to interact with the user (e.g. surfacing
         * snackbars) for errors, info, etc.
         */
        void finalizeDeletion(Runnable errorCallback) {
        void finalizeDeletion(DeletionListener listener) {
            final ContentResolver resolver = mContext.getContentResolver();
            DeleteFilesTask task = new DeleteFilesTask(resolver, errorCallback);
            DeleteFilesTask task = new DeleteFilesTask(resolver, listener);
            task.execute();
        }

@@ -1877,16 +1877,16 @@ public class DirectoryFragment extends Fragment {
         */
        private class DeleteFilesTask extends AsyncTask<Void, Void, List<DocumentInfo>> {
            private ContentResolver mResolver;
            private Runnable mErrorCallback;
            private DeletionListener mListener;

            /**
             * @param resolver A ContentResolver for performing the actual file deletions.
             * @param errorCallback A Runnable that is executed in the event that one or more errors
             *     occured while copying files.  Execution will occur on the UI thread.
             */
            public DeleteFilesTask(ContentResolver resolver, Runnable errorCallback) {
            public DeleteFilesTask(ContentResolver resolver, DeletionListener listener) {
                mResolver = resolver;
                mErrorCallback = errorCallback;
                mListener = listener;
            }

            @Override
@@ -1920,13 +1920,27 @@ public class DirectoryFragment extends Fragment {

                if (hadTrouble) {
                    // TODO show which files failed? b/23720103
                    mErrorCallback.run();
                    mListener.onError();
                    if (DEBUG) Log.d(TAG, "Deletion task completed.  Some deletions failed.");
                } else {
                    if (DEBUG) Log.d(TAG, "Deletion task completed successfully.");
                }
                mMarkedForDeletion.clear();

                mListener.onCompletion();
            }
        }

        static class DeletionListener {
            /**
             * Called when deletion has completed (regardless of whether an error occurred).
             */
            void onCompletion() {}

            /**
             * Called at the end of a deletion operation that produced one or more errors.
             */
            void onError() {}
        }

        void addUpdateListener(UpdateListener listener) {
+28 −9
Original line number Diff line number Diff line
@@ -34,6 +34,9 @@ import com.android.documentsui.MultiSelectManager.Selection;
import com.android.documentsui.model.DocumentInfo;

import java.util.List;
import java.util.concurrent.CountDownLatch;
import java.util.concurrent.TimeUnit;



public class DirectoryFragmentModelTest extends AndroidTestCase {
@@ -77,14 +80,6 @@ public class DirectoryFragmentModelTest extends AndroidTestCase {
        delete(2, 4);

        assertEquals(ITEM_COUNT - 2, model.getItemCount());

        // Finalize the deletion.  Provide a callback that just ignores errors.
        model.finalizeDeletion(
              new Runnable() {
                  @Override
                  public void run() {}
              });
        assertEquals(ITEM_COUNT - 2, model.getItemCount());
    }

    // Tests that the item count is correct after a deletion is undone.
@@ -95,7 +90,6 @@ public class DirectoryFragmentModelTest extends AndroidTestCase {
        // Undo the deletion
        model.undoDeletion();
        assertEquals(ITEM_COUNT, model.getItemCount());

    }

    // Tests that the right things are marked for deletion.
@@ -125,6 +119,15 @@ public class DirectoryFragmentModelTest extends AndroidTestCase {
        assertEquals("0", docs.get(0).documentId);
        assertEquals("1", docs.get(1).documentId);
        assertEquals("4", docs.get(2).documentId);

        TestDeletionListener testListener = new TestDeletionListener();
        model.finalizeDeletion(testListener);
        testListener.waitForDone();

        docs = getDocumentInfo(0, 1, 2);
        assertEquals("0", docs.get(0).documentId);
        assertEquals("1", docs.get(1).documentId);
        assertEquals("2", docs.get(2).documentId);
    }

    // Tests that Model.getItem returns the right items after a deletion is undone.
@@ -176,4 +179,20 @@ public class DirectoryFragmentModelTest extends AndroidTestCase {
            return null;
        }
    }

    private static class TestDeletionListener extends Model.DeletionListener {
        final CountDownLatch mSignal = new CountDownLatch(1);

        @Override
        public void onCompletion() {
            mSignal.countDown();
        }

        public void waitForDone() {
            try {
                boolean timeout = mSignal.await(10, TimeUnit.SECONDS);
                assertTrue("Timed out waiting for deletion completion", timeout);
            } catch (InterruptedException e) {}
        }
    }
}
+34 −43
Original line number Diff line number Diff line
@@ -20,6 +20,7 @@ import static org.junit.Assert.assertEquals;
import static org.junit.Assert.assertTrue;

import android.support.v7.widget.RecyclerView;
import android.test.AndroidTestCase;
import android.util.SparseBooleanArray;
import android.view.MotionEvent;
import android.view.View;
@@ -27,8 +28,6 @@ import android.view.ViewGroup;

import com.android.documentsui.MultiSelectManager.Selection;

import org.junit.Before;
import org.junit.Test;
import org.mockito.Mockito;

import java.util.ArrayList;
@@ -36,7 +35,7 @@ import java.util.HashSet;
import java.util.List;
import java.util.Set;

public class MultiSelectManagerTest {
public class MultiSelectManagerTest extends AndroidTestCase {

    private static final List<String> items;
    static {
@@ -54,7 +53,6 @@ public class MultiSelectManagerTest {
    private TestCallback mCallback;
    private EventHelper mEventHelper;

    @Before
    public void setUp() throws Exception {
        mAdapter = new TestAdapter(items);
        mCallback = new TestCallback();
@@ -63,65 +61,61 @@ public class MultiSelectManagerTest {
        mManager.addCallback(mCallback);
    }

    @Test
    public void mouseClick_StartsSelectionMode() {
    public void testMouseClick_StartsSelectionMode() {
        click(7);
        assertSelection(7);
    }

    @Test
    public void mouseClick_ShiftClickExtendsSelection() {
    public void testMouseClick_NotifiesSelectionChanged() {
        click(7);
        mCallback.assertSelectionChanged();
    }

    public void testMouseClick_ShiftClickExtendsSelection() {
        longPress(7);
        shiftClick(11);
        assertRangeSelection(7, 11);
    }

    @Test
    public void mouseClick_NoPosition_ClearsSelection() {
    public void testMouseClick_NoPosition_ClearsSelection() {
        longPress(7);
        click(11);
        click(RecyclerView.NO_POSITION);
        assertSelection();
    }

    @Test
    public void setSelectionFocusBegin() {
    public void testSetSelectionFocusBegin() {
        mManager.setItemSelected(7, true);
        mManager.setSelectionFocusBegin(7);
        shiftClick(11);
        assertRangeSelection(7, 11);
    }

    @Test
    public void longPress_StartsSelectionMode() {
    public void testLongPress_StartsSelectionMode() {
        longPress(7);
        assertSelection(7);
    }

    @Test
    public void longPress_SecondPressExtendsSelection() {
    public void testLongPress_SecondPressExtendsSelection() {
        longPress(7);
        longPress(99);
        assertSelection(7, 99);
    }

    @Test
    public void singleTapUp_UnselectsSelectedItem() {
    public void testSingleTapUp_UnselectsSelectedItem() {
        longPress(7);
        tap(7);
        assertSelection();
    }

    @Test
    public void singleTapUp_NoPosition_ClearsSelection() {
    public void testSingleTapUp_NoPosition_ClearsSelection() {
        longPress(7);
        tap(11);
        tap(RecyclerView.NO_POSITION);
        assertSelection();
    }

    @Test
    public void singleTapUp_ExtendsSelection() {
    public void testSingleTapUp_ExtendsSelection() {
        longPress(99);
        tap(7);
        tap(13);
@@ -129,30 +123,26 @@ public class MultiSelectManagerTest {
        assertSelection(7, 99, 13, 129899);
    }

    @Test
    public void singleTapUp_ShiftCreatesRangeSelection() {
    public void testSingleTapUp_ShiftCreatesRangeSelection() {
        longPress(7);
        shiftTap(17);
        assertRangeSelection(7, 17);
    }

    @Test
    public void singleTapUp_ShiftCreatesRangeSeletion_Backwards() {
    public void testSingleTapUp_ShiftCreatesRangeSeletion_Backwards() {
        longPress(17);
        shiftTap(7);
        assertRangeSelection(7, 17);
    }

    @Test
    public void singleTapUp_SecondShiftClickExtendsSelection() {
    public void testSingleTapUp_SecondShiftClickExtendsSelection() {
        longPress(7);
        shiftTap(11);
        shiftTap(17);
        assertRangeSelection(7, 17);
    }

    @Test
    public void singleTapUp_MultipleContiguousRangesSelected() {
    public void testSingleTapUp_MultipleContiguousRangesSelected() {
        longPress(7);
        shiftTap(11);
        tap(20);
@@ -162,16 +152,14 @@ public class MultiSelectManagerTest {
        assertSelectionSize(11);
    }

    @Test
    public void singleTapUp_ShiftReducesSelectionRange_FromPreviousShiftClick() {
    public void testSingleTapUp_ShiftReducesSelectionRange_FromPreviousShiftClick() {
        longPress(7);
        shiftTap(17);
        shiftTap(10);
        assertRangeSelection(7, 10);
    }

    @Test
    public void singleTapUp_ShiftReducesSelectionRange_FromPreviousShiftClick_Backwards() {
    public void testSingleTapUp_ShiftReducesSelectionRange_FromPreviousShiftClick_Backwards() {
        mManager.onLongPress(TestInputEvent.tap(17));
        shiftTap(7);
        shiftTap(14);
@@ -179,16 +167,14 @@ public class MultiSelectManagerTest {
    }


    @Test
    public void singleTapUp_ShiftReversesSelectionDirection() {
    public void testSingleTapUp_ShiftReversesSelectionDirection() {
        longPress(7);
        shiftTap(17);
        shiftTap(0);
        assertRangeSelection(0, 7);
    }

    @Test
    public void singleSelectMode() {
    public void testSingleSelectMode() {
        mManager = new MultiSelectManager(mAdapter, mEventHelper, MultiSelectManager.MODE_SINGLE);
        mManager.addCallback(mCallback);
        longPress(20);
@@ -196,8 +182,7 @@ public class MultiSelectManagerTest {
        assertSelection(13);
    }

    @Test
    public void singleSelectMode_ShiftTap() {
    public void testSingleSelectMode_ShiftTap() {
        mManager = new MultiSelectManager(mAdapter, mEventHelper, MultiSelectManager.MODE_SINGLE);
        mManager.addCallback(mCallback);
        longPress(13);
@@ -205,8 +190,7 @@ public class MultiSelectManagerTest {
        assertSelection(20);
    }

    @Test
    public void provisionaSelection() {
    public void testProvisionalSelection() {
        Selection s = mManager.getSelection();
        assertSelection();

@@ -298,6 +282,7 @@ public class MultiSelectManagerTest {
        Set<Integer> ignored = new HashSet<>();
        private int mLastChangedPosition;
        private boolean mLastChangedSelected;
        private boolean mSelectionChanged = false;

        @Override
        public void onItemStateChanged(int position, boolean selected) {
@@ -311,7 +296,13 @@ public class MultiSelectManagerTest {
        }

        @Override
        public void onSelectionChanged() {}
        public void onSelectionChanged() {
            mSelectionChanged = true;
        }

        void assertSelectionChanged() {
            assertTrue(mSelectionChanged);
        }
    }

    private static final class TestHolder extends RecyclerView.ViewHolder {
+3 −14
Original line number Diff line number Diff line
@@ -22,14 +22,12 @@ import static org.junit.Assert.assertTrue;
import android.graphics.Point;
import android.graphics.Rect;
import android.support.v7.widget.RecyclerView.OnScrollListener;
import android.test.AndroidTestCase;
import android.util.SparseBooleanArray;

import com.android.documentsui.MultiSelectManager.GridModel;

import org.junit.After;
import org.junit.Test;

public class MultiSelectManager_GridModelTest {
public class MultiSelectManager_GridModelTest extends AndroidTestCase {

    private static final int VIEW_PADDING_PX = 5;
    private static final int CHILD_VIEW_EDGE_PX = 100;
@@ -53,14 +51,13 @@ public class MultiSelectManager_GridModelTest {
                });
    }

    @After
    @Override
    public void tearDown() {
        model = null;
        helper = null;
        lastSelection = null;
    }

    @Test
    public void testSelectionLeftOfItems() {
        setUp(20, 5);
        model.startSelection(new Point(0, 10));
@@ -69,7 +66,6 @@ public class MultiSelectManager_GridModelTest {
        assertEquals(GridModel.NOT_SET, model.getPositionNearestOrigin());
    }

    @Test
    public void testSelectionRightOfItems() {
        setUp(20, 4);
        model.startSelection(new Point(viewWidth - 1, 10));
@@ -78,7 +74,6 @@ public class MultiSelectManager_GridModelTest {
        assertEquals(GridModel.NOT_SET, model.getPositionNearestOrigin());
    }

    @Test
    public void testSelectionAboveItems() {
        setUp(20, 4);
        model.startSelection(new Point(10, 0));
@@ -87,7 +82,6 @@ public class MultiSelectManager_GridModelTest {
        assertEquals(GridModel.NOT_SET, model.getPositionNearestOrigin());
    }

    @Test
    public void testSelectionBelowItems() {
        setUp(5, 4);
        model.startSelection(new Point(10, VIEWPORT_HEIGHT - 1));
@@ -96,7 +90,6 @@ public class MultiSelectManager_GridModelTest {
        assertEquals(GridModel.NOT_SET, model.getPositionNearestOrigin());
    }

    @Test
    public void testVerticalSelectionBetweenItems() {
        setUp(20, 4);
        model.startSelection(new Point(106, 0));
@@ -105,7 +98,6 @@ public class MultiSelectManager_GridModelTest {
        assertEquals(GridModel.NOT_SET, model.getPositionNearestOrigin());
    }

    @Test
    public void testHorizontalSelectionBetweenItems() {
        setUp(20, 4);
        model.startSelection(new Point(0, 105));
@@ -114,7 +106,6 @@ public class MultiSelectManager_GridModelTest {
        assertEquals(GridModel.NOT_SET, model.getPositionNearestOrigin());
    }

    @Test
    public void testGrowingAndShrinkingSelection() {
        setUp(20, 4);
        model.startSelection(new Point(0, 0));
@@ -145,7 +136,6 @@ public class MultiSelectManager_GridModelTest {
        assertEquals(GridModel.NOT_SET, model.getPositionNearestOrigin());
    }

    @Test
    public void testSelectionMovingAroundOrigin() {
        setUp(16, 4);
        model.startSelection(new Point(210, 210));
@@ -160,7 +150,6 @@ public class MultiSelectManager_GridModelTest {
        assertEquals(10, model.getPositionNearestOrigin());
    }

    @Test
    public void testScrollingBandSelect() {
        setUp(40, 4);
        model.startSelection(new Point(0, 0));
+20 −36
Original line number Diff line number Diff line
@@ -18,16 +18,16 @@ package com.android.documentsui;

import static org.junit.Assert.*;

import android.test.AndroidTestCase;

import com.android.documentsui.MultiSelectManager.Selection;

import org.junit.Before;
import org.junit.Test;

public class MultiSelectManager_SelectionTest {
public class MultiSelectManager_SelectionTest extends AndroidTestCase{

    private Selection selection;

    @Before
    @Override
    public void setUp() throws Exception {
        selection = new Selection();
        selection.add(3);
@@ -35,8 +35,7 @@ public class MultiSelectManager_SelectionTest {
        selection.add(9);
    }

    @Test
    public void add() {
    public void testAdd() {
        // We added in setUp.
        assertEquals(3, selection.size());
        assertContains(3);
@@ -44,29 +43,25 @@ public class MultiSelectManager_SelectionTest {
        assertContains(9);
    }

    @Test
    public void remove() {
    public void testRemove() {
        selection.remove(3);
        selection.remove(5);
        assertEquals(1, selection.size());
        assertContains(9);
    }

    @Test
    public void clear() {
    public void testClear() {
        selection.clear();
        assertEquals(0, selection.size());
    }

    @Test
    public void isEmpty() {
    public void testIsEmpty() {
        assertTrue(new Selection().isEmpty());
        selection.clear();
        assertTrue(selection.isEmpty());
    }

    @Test
    public void sizeAndGet() {
    public void testSizeAndGet() {
        Selection other = new Selection();
        for (int i = 0; i < selection.size(); i++) {
            other.add(selection.get(i));
@@ -74,13 +69,11 @@ public class MultiSelectManager_SelectionTest {
        assertEquals(selection.size(), other.size());
    }

    @Test
    public void equalsSelf() {
    public void testEqualsSelf() {
        assertEquals(selection, selection);
    }

    @Test
    public void equalsOther() {
    public void testEqualsOther() {
        Selection other = new Selection();
        other.add(3);
        other.add(5);
@@ -89,23 +82,20 @@ public class MultiSelectManager_SelectionTest {
        assertEquals(selection.hashCode(), other.hashCode());
    }

    @Test
    public void equalsCopy() {
    public void testEqualsCopy() {
        Selection other = new Selection();
        other.copyFrom(selection);
        assertEquals(selection, other);
        assertEquals(selection.hashCode(), other.hashCode());
    }

    @Test
    public void notEquals() {
    public void testNotEquals() {
        Selection other = new Selection();
        other.add(789);
        assertFalse(selection.equals(other));
    }

    @Test
    public void expandBefore() {
    public void testExpandBefore() {
        selection.expand(2, 10);
        assertEquals(3, selection.size());
        assertContains(13);
@@ -113,8 +103,7 @@ public class MultiSelectManager_SelectionTest {
        assertContains(19);
    }

    @Test
    public void expandAfter() {
    public void testExpandAfter() {
        selection.expand(10, 10);
        assertEquals(3, selection.size());
        assertContains(3);
@@ -122,8 +111,7 @@ public class MultiSelectManager_SelectionTest {
        assertContains(9);
    }

    @Test
    public void expandSplit() {
    public void testExpandSplit() {
        selection.expand(5, 10);
        assertEquals(3, selection.size());
        assertContains(3);
@@ -131,8 +119,7 @@ public class MultiSelectManager_SelectionTest {
        assertContains(19);
    }

    @Test
    public void expandEncompased() {
    public void testExpandEncompased() {
        selection.expand(2, 10);
        assertEquals(3, selection.size());
        assertContains(13);
@@ -140,8 +127,7 @@ public class MultiSelectManager_SelectionTest {
        assertContains(19);
    }

    @Test
    public void collapseBefore() {
    public void testCollapseBefore() {
        selection.collapse(0, 2);
        assertEquals(3, selection.size());
        assertContains(1);
@@ -149,8 +135,7 @@ public class MultiSelectManager_SelectionTest {
        assertContains(7);
    }

    @Test
    public void collapseAfter() {
    public void testCollapseAfter() {
        selection.collapse(10, 10);
        assertEquals(3, selection.size());
        assertContains(3);
@@ -158,8 +143,7 @@ public class MultiSelectManager_SelectionTest {
        assertContains(9);
    }

    @Test
    public void collapseAcross() {
    public void testCollapseAcross() {
        selection.collapse(0, 10);
        assertEquals(0, selection.size());
    }
Loading