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