diff options
| author | 2015-09-30 14:14:16 -0700 | |
|---|---|---|
| committer | 2015-09-30 15:12:52 -0700 | |
| commit | 272c02041ce9e63f14a1db7bb5a3b9c7944c0198 (patch) | |
| tree | d11df9b79cbd068d89ee84923221503c7a0ba256 | |
| parent | 94b486d32c10d5ffbd8627977ca4759c246ecf4b (diff) | |
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
6 files changed, 107 insertions, 156 deletions
diff --git a/packages/DocumentsUI/src/com/android/documentsui/DirectoryFragment.java b/packages/DocumentsUI/src/com/android/documentsui/DirectoryFragment.java index 2893cd2b8b96..3c6be6e47b11 100644 --- a/packages/DocumentsUI/src/com/android/documentsui/DirectoryFragment.java +++ b/packages/DocumentsUI/src/com/android/documentsui/DirectoryFragment.java @@ -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,15 +1920,29 @@ 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) { checkState(mUpdateListener == null); mUpdateListener = listener; diff --git a/packages/DocumentsUI/tests/src/com/android/documentsui/DirectoryFragmentModelTest.java b/packages/DocumentsUI/tests/src/com/android/documentsui/DirectoryFragmentModelTest.java index 1895a6e66450..98ffb77c4cd6 100644 --- a/packages/DocumentsUI/tests/src/com/android/documentsui/DirectoryFragmentModelTest.java +++ b/packages/DocumentsUI/tests/src/com/android/documentsui/DirectoryFragmentModelTest.java @@ -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) {} + } + } } diff --git a/packages/DocumentsUI/tests/src/com/android/documentsui/MultiSelectManagerTest.java b/packages/DocumentsUI/tests/src/com/android/documentsui/MultiSelectManagerTest.java index 25d4ed4183f0..2447469f9c64 100644 --- a/packages/DocumentsUI/tests/src/com/android/documentsui/MultiSelectManagerTest.java +++ b/packages/DocumentsUI/tests/src/com/android/documentsui/MultiSelectManagerTest.java @@ -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 { diff --git a/packages/DocumentsUI/tests/src/com/android/documentsui/MultiSelectManager_GridModelTest.java b/packages/DocumentsUI/tests/src/com/android/documentsui/MultiSelectManager_GridModelTest.java index 87d7e15a4072..aa50b48e6c16 100644 --- a/packages/DocumentsUI/tests/src/com/android/documentsui/MultiSelectManager_GridModelTest.java +++ b/packages/DocumentsUI/tests/src/com/android/documentsui/MultiSelectManager_GridModelTest.java @@ -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)); diff --git a/packages/DocumentsUI/tests/src/com/android/documentsui/MultiSelectManager_SelectionTest.java b/packages/DocumentsUI/tests/src/com/android/documentsui/MultiSelectManager_SelectionTest.java index 51b542b2ae8c..eddf4ef6fede 100644 --- a/packages/DocumentsUI/tests/src/com/android/documentsui/MultiSelectManager_SelectionTest.java +++ b/packages/DocumentsUI/tests/src/com/android/documentsui/MultiSelectManager_SelectionTest.java @@ -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()); } diff --git a/packages/DocumentsUI/tests/src/com/android/documentsui/UnitTests.java b/packages/DocumentsUI/tests/src/com/android/documentsui/UnitTests.java deleted file mode 100644 index be3f2515057e..000000000000 --- a/packages/DocumentsUI/tests/src/com/android/documentsui/UnitTests.java +++ /dev/null @@ -1,46 +0,0 @@ -/* - * Copyright (C) 2015 The Android Open Source Project - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -package com.android.documentsui; - -import org.junit.runner.RunWith; -import org.junit.runners.Suite; -import org.junit.runners.Suite.SuiteClasses; - -@RunWith(Suite.class) -@SuiteClasses({ - MultiSelectManager_GridModelTest.class, - MultiSelectManager_SelectionTest.class, - MultiSelectManagerTest.class -}) - -/** - * This test suite can be run using the "art" runtime (which can be built - * via the `build-art-host` target.) You'll also need to "mma -j32" the - * DocumentsUI package to ensure all deps are built. - * - * <p>Once the dependencies have been built, the tests can be executed as follows: - * - * <pre> - * CP=$OUT/system/framework/framework.jar:\ - * $OUT/system/framework/core-junit.jar:\ - * $OUT/system/app/DocumentsUI/DocumentsUI.apk:\ - * $OUT/data/app/DocumentsUITests/DocumentsUITests.apk - * - * art -cp $CP org.junit.runner.JUnitCore com.android.documentsui.UnitTests - * </pre> - */ -public class UnitTests {} |