12d1e4a3bb8bd58d2f0c92cbedeafe4ab8b71448eSteve McKay/*
22d1e4a3bb8bd58d2f0c92cbedeafe4ab8b71448eSteve McKay * Copyright (C) 2015 The Android Open Source Project
32d1e4a3bb8bd58d2f0c92cbedeafe4ab8b71448eSteve McKay *
42d1e4a3bb8bd58d2f0c92cbedeafe4ab8b71448eSteve McKay * Licensed under the Apache License, Version 2.0 (the "License");
52d1e4a3bb8bd58d2f0c92cbedeafe4ab8b71448eSteve McKay * you may not use this file except in compliance with the License.
62d1e4a3bb8bd58d2f0c92cbedeafe4ab8b71448eSteve McKay * You may obtain a copy of the License at
72d1e4a3bb8bd58d2f0c92cbedeafe4ab8b71448eSteve McKay *
82d1e4a3bb8bd58d2f0c92cbedeafe4ab8b71448eSteve McKay *      http://www.apache.org/licenses/LICENSE-2.0
92d1e4a3bb8bd58d2f0c92cbedeafe4ab8b71448eSteve McKay *
102d1e4a3bb8bd58d2f0c92cbedeafe4ab8b71448eSteve McKay * Unless required by applicable law or agreed to in writing, software
112d1e4a3bb8bd58d2f0c92cbedeafe4ab8b71448eSteve McKay * distributed under the License is distributed on an "AS IS" BASIS,
122d1e4a3bb8bd58d2f0c92cbedeafe4ab8b71448eSteve McKay * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
132d1e4a3bb8bd58d2f0c92cbedeafe4ab8b71448eSteve McKay * See the License for the specific language governing permissions and
142d1e4a3bb8bd58d2f0c92cbedeafe4ab8b71448eSteve McKay * limitations under the License.
152d1e4a3bb8bd58d2f0c92cbedeafe4ab8b71448eSteve McKay */
162d1e4a3bb8bd58d2f0c92cbedeafe4ab8b71448eSteve McKay
174f78ba643270b9d84da1952d8e408220b25ec6fdSteve McKaypackage com.android.documentsui.selection;
182d1e4a3bb8bd58d2f0c92cbedeafe4ab8b71448eSteve McKay
1984bd0f13bd02ea26acc937b00c050884dc7546efGarfield Tanimport static junit.framework.Assert.fail;
202d1e4a3bb8bd58d2f0c92cbedeafe4ab8b71448eSteve McKay
2184bd0f13bd02ea26acc937b00c050884dc7546efGarfield Tanimport android.support.test.filters.SmallTest;
2284bd0f13bd02ea26acc937b00c050884dc7546efGarfield Tanimport android.support.test.runner.AndroidJUnit4;
2384bd0f13bd02ea26acc937b00c050884dc7546efGarfield Tan
244f78ba643270b9d84da1952d8e408220b25ec6fdSteve McKayimport com.android.documentsui.dirlist.TestData;
254f78ba643270b9d84da1952d8e408220b25ec6fdSteve McKayimport com.android.documentsui.dirlist.TestDocumentsAdapter;
264f78ba643270b9d84da1952d8e408220b25ec6fdSteve McKayimport com.android.documentsui.selection.SelectionManager;
275b0a2c187a9e446b683687817d22cbe443585223Steve McKayimport com.android.documentsui.testing.SelectionManagers;
282d1e4a3bb8bd58d2f0c92cbedeafe4ab8b71448eSteve McKay
2984bd0f13bd02ea26acc937b00c050884dc7546efGarfield Tanimport org.junit.Before;
3084bd0f13bd02ea26acc937b00c050884dc7546efGarfield Tanimport org.junit.Test;
3184bd0f13bd02ea26acc937b00c050884dc7546efGarfield Tanimport org.junit.runner.RunWith;
3284bd0f13bd02ea26acc937b00c050884dc7546efGarfield Tan
332d1e4a3bb8bd58d2f0c92cbedeafe4ab8b71448eSteve McKayimport java.util.List;
342d1e4a3bb8bd58d2f0c92cbedeafe4ab8b71448eSteve McKay
3584bd0f13bd02ea26acc937b00c050884dc7546efGarfield Tan@RunWith(AndroidJUnit4.class)
362d1e4a3bb8bd58d2f0c92cbedeafe4ab8b71448eSteve McKay@SmallTest
374f78ba643270b9d84da1952d8e408220b25ec6fdSteve McKaypublic class SelectionManager_SingleSelectTest {
382d1e4a3bb8bd58d2f0c92cbedeafe4ab8b71448eSteve McKay
392d1e4a3bb8bd58d2f0c92cbedeafe4ab8b71448eSteve McKay    private static final List<String> ITEMS = TestData.create(100);
402d1e4a3bb8bd58d2f0c92cbedeafe4ab8b71448eSteve McKay
414f78ba643270b9d84da1952d8e408220b25ec6fdSteve McKay    private SelectionManager mManager;
422d1e4a3bb8bd58d2f0c92cbedeafe4ab8b71448eSteve McKay    private TestSelectionListener mCallback;
432d1e4a3bb8bd58d2f0c92cbedeafe4ab8b71448eSteve McKay    private TestDocumentsAdapter mAdapter;
442d1e4a3bb8bd58d2f0c92cbedeafe4ab8b71448eSteve McKay    private SelectionProbe mSelection;
452d1e4a3bb8bd58d2f0c92cbedeafe4ab8b71448eSteve McKay
4684bd0f13bd02ea26acc937b00c050884dc7546efGarfield Tan    @Before
472d1e4a3bb8bd58d2f0c92cbedeafe4ab8b71448eSteve McKay    public void setUp() throws Exception {
482d1e4a3bb8bd58d2f0c92cbedeafe4ab8b71448eSteve McKay        mCallback = new TestSelectionListener();
495b0a2c187a9e446b683687817d22cbe443585223Steve McKay        mManager = SelectionManagers.createTestInstance(ITEMS, SelectionManager.MODE_SINGLE);
502d1e4a3bb8bd58d2f0c92cbedeafe4ab8b71448eSteve McKay        mManager.addCallback(mCallback);
512d1e4a3bb8bd58d2f0c92cbedeafe4ab8b71448eSteve McKay
522d1e4a3bb8bd58d2f0c92cbedeafe4ab8b71448eSteve McKay        mSelection = new SelectionProbe(mManager);
532d1e4a3bb8bd58d2f0c92cbedeafe4ab8b71448eSteve McKay    }
542d1e4a3bb8bd58d2f0c92cbedeafe4ab8b71448eSteve McKay
5584bd0f13bd02ea26acc937b00c050884dc7546efGarfield Tan    @Test
562d1e4a3bb8bd58d2f0c92cbedeafe4ab8b71448eSteve McKay    public void testSimpleSelect() {
572d1e4a3bb8bd58d2f0c92cbedeafe4ab8b71448eSteve McKay        mManager.toggleSelection(ITEMS.get(3));
582d1e4a3bb8bd58d2f0c92cbedeafe4ab8b71448eSteve McKay        mManager.toggleSelection(ITEMS.get(4));
592d1e4a3bb8bd58d2f0c92cbedeafe4ab8b71448eSteve McKay        mCallback.assertSelectionChanged();
602d1e4a3bb8bd58d2f0c92cbedeafe4ab8b71448eSteve McKay        mSelection.assertSelection(4);
612d1e4a3bb8bd58d2f0c92cbedeafe4ab8b71448eSteve McKay    }
622d1e4a3bb8bd58d2f0c92cbedeafe4ab8b71448eSteve McKay
6384bd0f13bd02ea26acc937b00c050884dc7546efGarfield Tan    @Test
642d1e4a3bb8bd58d2f0c92cbedeafe4ab8b71448eSteve McKay    public void testRangeSelectionNotEstablished() {
652d1e4a3bb8bd58d2f0c92cbedeafe4ab8b71448eSteve McKay        mManager.toggleSelection(ITEMS.get(3));
662d1e4a3bb8bd58d2f0c92cbedeafe4ab8b71448eSteve McKay        mCallback.reset();
672d1e4a3bb8bd58d2f0c92cbedeafe4ab8b71448eSteve McKay
682d1e4a3bb8bd58d2f0c92cbedeafe4ab8b71448eSteve McKay        try {
692d1e4a3bb8bd58d2f0c92cbedeafe4ab8b71448eSteve McKay            mManager.snapRangeSelection(10);
702d1e4a3bb8bd58d2f0c92cbedeafe4ab8b71448eSteve McKay            fail("Should have thrown.");
712d1e4a3bb8bd58d2f0c92cbedeafe4ab8b71448eSteve McKay        } catch (Exception expected) {}
722d1e4a3bb8bd58d2f0c92cbedeafe4ab8b71448eSteve McKay
732d1e4a3bb8bd58d2f0c92cbedeafe4ab8b71448eSteve McKay        mCallback.assertSelectionUnchanged();
742d1e4a3bb8bd58d2f0c92cbedeafe4ab8b71448eSteve McKay        mSelection.assertSelection(3);
752d1e4a3bb8bd58d2f0c92cbedeafe4ab8b71448eSteve McKay    }
762d1e4a3bb8bd58d2f0c92cbedeafe4ab8b71448eSteve McKay}
77