163d2846409d84487d4856d3b8d18cc4684352e29Steve McKay/*
263d2846409d84487d4856d3b8d18cc4684352e29Steve McKay * Copyright 2017 The Android Open Source Project
363d2846409d84487d4856d3b8d18cc4684352e29Steve McKay *
463d2846409d84487d4856d3b8d18cc4684352e29Steve McKay * Licensed under the Apache License, Version 2.0 (the "License");
563d2846409d84487d4856d3b8d18cc4684352e29Steve McKay * you may not use this file except in compliance with the License.
663d2846409d84487d4856d3b8d18cc4684352e29Steve McKay * You may obtain a copy of the License at
763d2846409d84487d4856d3b8d18cc4684352e29Steve McKay *
863d2846409d84487d4856d3b8d18cc4684352e29Steve McKay *      http://www.apache.org/licenses/LICENSE-2.0
963d2846409d84487d4856d3b8d18cc4684352e29Steve McKay *
1063d2846409d84487d4856d3b8d18cc4684352e29Steve McKay * Unless required by applicable law or agreed to in writing, software
1163d2846409d84487d4856d3b8d18cc4684352e29Steve McKay * distributed under the License is distributed on an "AS IS" BASIS,
1263d2846409d84487d4856d3b8d18cc4684352e29Steve McKay * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
1363d2846409d84487d4856d3b8d18cc4684352e29Steve McKay * See the License for the specific language governing permissions and
1463d2846409d84487d4856d3b8d18cc4684352e29Steve McKay * limitations under the License.
1563d2846409d84487d4856d3b8d18cc4684352e29Steve McKay */
1663d2846409d84487d4856d3b8d18cc4684352e29Steve McKay
17aa187e8beb97f7c01a0ff403dcb1a8567450ec7bAurimas Liutikaspackage androidx.recyclerview.selection.testing;
1863d2846409d84487d4856d3b8d18cc4684352e29Steve McKay
1963d2846409d84487d4856d3b8d18cc4684352e29Steve McKayimport static org.junit.Assert.assertEquals;
2063d2846409d84487d4856d3b8d18cc4684352e29Steve McKayimport static org.junit.Assert.assertFalse;
2163d2846409d84487d4856d3b8d18cc4684352e29Steve McKayimport static org.junit.Assert.assertTrue;
2263d2846409d84487d4856d3b8d18cc4684352e29Steve McKay
2360dadaeed4f5cee272b575dfde6c02e3506a2fa0Aurimas Liutikasimport androidx.recyclerview.selection.SelectionTracker.SelectionObserver;
2460dadaeed4f5cee272b575dfde6c02e3506a2fa0Aurimas Liutikas
2563d2846409d84487d4856d3b8d18cc4684352e29Steve McKayimport java.util.HashSet;
2663d2846409d84487d4856d3b8d18cc4684352e29Steve McKayimport java.util.Set;
2763d2846409d84487d4856d3b8d18cc4684352e29Steve McKay
2863d2846409d84487d4856d3b8d18cc4684352e29Steve McKaypublic class TestSelectionObserver<K> extends SelectionObserver<K> {
2963d2846409d84487d4856d3b8d18cc4684352e29Steve McKay
3063d2846409d84487d4856d3b8d18cc4684352e29Steve McKay    private final Set<K> mSelected = new HashSet<>();
3163d2846409d84487d4856d3b8d18cc4684352e29Steve McKay    private boolean mSelectionChanged = false;
3263d2846409d84487d4856d3b8d18cc4684352e29Steve McKay    private boolean mSelectionReset = false;
3363d2846409d84487d4856d3b8d18cc4684352e29Steve McKay    private boolean mSelectionRestored = false;
3463d2846409d84487d4856d3b8d18cc4684352e29Steve McKay
3563d2846409d84487d4856d3b8d18cc4684352e29Steve McKay    public void reset() {
3663d2846409d84487d4856d3b8d18cc4684352e29Steve McKay        mSelected.clear();
3763d2846409d84487d4856d3b8d18cc4684352e29Steve McKay        mSelectionChanged = false;
3863d2846409d84487d4856d3b8d18cc4684352e29Steve McKay        mSelectionReset = false;
3963d2846409d84487d4856d3b8d18cc4684352e29Steve McKay    }
4063d2846409d84487d4856d3b8d18cc4684352e29Steve McKay
4163d2846409d84487d4856d3b8d18cc4684352e29Steve McKay    @Override
4263d2846409d84487d4856d3b8d18cc4684352e29Steve McKay    public void onItemStateChanged(K key, boolean selected) {
4363d2846409d84487d4856d3b8d18cc4684352e29Steve McKay        if (selected) {
4463d2846409d84487d4856d3b8d18cc4684352e29Steve McKay            assertNotSelected(key);
4563d2846409d84487d4856d3b8d18cc4684352e29Steve McKay            mSelected.add(key);
4663d2846409d84487d4856d3b8d18cc4684352e29Steve McKay        } else {
4763d2846409d84487d4856d3b8d18cc4684352e29Steve McKay            assertSelected(key);
4863d2846409d84487d4856d3b8d18cc4684352e29Steve McKay            mSelected.remove(key);
4963d2846409d84487d4856d3b8d18cc4684352e29Steve McKay        }
5063d2846409d84487d4856d3b8d18cc4684352e29Steve McKay    }
5163d2846409d84487d4856d3b8d18cc4684352e29Steve McKay
5263d2846409d84487d4856d3b8d18cc4684352e29Steve McKay    @Override
537fb763509e07f98d650efc25c91bff8b1cb239acSteve McKay    public void onSelectionRefresh() {
5463d2846409d84487d4856d3b8d18cc4684352e29Steve McKay        mSelectionReset = true;
5563d2846409d84487d4856d3b8d18cc4684352e29Steve McKay        mSelected.clear();
5663d2846409d84487d4856d3b8d18cc4684352e29Steve McKay    }
5763d2846409d84487d4856d3b8d18cc4684352e29Steve McKay
5863d2846409d84487d4856d3b8d18cc4684352e29Steve McKay    @Override
5963d2846409d84487d4856d3b8d18cc4684352e29Steve McKay    public void onSelectionChanged() {
6063d2846409d84487d4856d3b8d18cc4684352e29Steve McKay        mSelectionChanged = true;
6163d2846409d84487d4856d3b8d18cc4684352e29Steve McKay    }
6263d2846409d84487d4856d3b8d18cc4684352e29Steve McKay
6363d2846409d84487d4856d3b8d18cc4684352e29Steve McKay    @Override
6463d2846409d84487d4856d3b8d18cc4684352e29Steve McKay    public void onSelectionRestored() {
6563d2846409d84487d4856d3b8d18cc4684352e29Steve McKay        mSelectionRestored = true;
6663d2846409d84487d4856d3b8d18cc4684352e29Steve McKay    }
6763d2846409d84487d4856d3b8d18cc4684352e29Steve McKay
6863d2846409d84487d4856d3b8d18cc4684352e29Steve McKay    void assertNoSelection() {
6963d2846409d84487d4856d3b8d18cc4684352e29Steve McKay        assertTrue(mSelected.isEmpty());
7063d2846409d84487d4856d3b8d18cc4684352e29Steve McKay    }
7163d2846409d84487d4856d3b8d18cc4684352e29Steve McKay
7263d2846409d84487d4856d3b8d18cc4684352e29Steve McKay    void assertSelectionSize(int expected) {
7363d2846409d84487d4856d3b8d18cc4684352e29Steve McKay        assertEquals(expected, mSelected.size());
7463d2846409d84487d4856d3b8d18cc4684352e29Steve McKay    }
7563d2846409d84487d4856d3b8d18cc4684352e29Steve McKay
7663d2846409d84487d4856d3b8d18cc4684352e29Steve McKay    void assertSelected(K key) {
7763d2846409d84487d4856d3b8d18cc4684352e29Steve McKay        assertTrue(key + " is not selected.", mSelected.contains(key));
7863d2846409d84487d4856d3b8d18cc4684352e29Steve McKay    }
7963d2846409d84487d4856d3b8d18cc4684352e29Steve McKay
8063d2846409d84487d4856d3b8d18cc4684352e29Steve McKay    void assertNotSelected(K key) {
8163d2846409d84487d4856d3b8d18cc4684352e29Steve McKay        assertFalse(key + " is already selected", mSelected.contains(key));
8263d2846409d84487d4856d3b8d18cc4684352e29Steve McKay    }
8363d2846409d84487d4856d3b8d18cc4684352e29Steve McKay
8463d2846409d84487d4856d3b8d18cc4684352e29Steve McKay    public void assertSelectionChanged() {
8563d2846409d84487d4856d3b8d18cc4684352e29Steve McKay        assertTrue(mSelectionChanged);
8663d2846409d84487d4856d3b8d18cc4684352e29Steve McKay    }
8763d2846409d84487d4856d3b8d18cc4684352e29Steve McKay
8863d2846409d84487d4856d3b8d18cc4684352e29Steve McKay    public void assertSelectionUnchanged() {
8963d2846409d84487d4856d3b8d18cc4684352e29Steve McKay        assertFalse(mSelectionChanged);
9063d2846409d84487d4856d3b8d18cc4684352e29Steve McKay    }
9163d2846409d84487d4856d3b8d18cc4684352e29Steve McKay
9263d2846409d84487d4856d3b8d18cc4684352e29Steve McKay    public void assertSelectionReset() {
9363d2846409d84487d4856d3b8d18cc4684352e29Steve McKay        assertTrue(mSelectionReset);
9463d2846409d84487d4856d3b8d18cc4684352e29Steve McKay    }
9563d2846409d84487d4856d3b8d18cc4684352e29Steve McKay
9663d2846409d84487d4856d3b8d18cc4684352e29Steve McKay    public void assertSelectionRestored() {
9763d2846409d84487d4856d3b8d18cc4684352e29Steve McKay        assertTrue(mSelectionRestored);
9863d2846409d84487d4856d3b8d18cc4684352e29Steve McKay    }
9963d2846409d84487d4856d3b8d18cc4684352e29Steve McKay}
100