138f4f4174d9cd53c553f14c19746500cb861b089Ian Lake/* 291f3de362ba7218d74f121e6f78ea31519e829fcIan Lake * Copyright 2018 The Android Open Source Project 338f4f4174d9cd53c553f14c19746500cb861b089Ian Lake * 438f4f4174d9cd53c553f14c19746500cb861b089Ian Lake * Licensed under the Apache License, Version 2.0 (the "License"); 538f4f4174d9cd53c553f14c19746500cb861b089Ian Lake * you may not use this file except in compliance with the License. 638f4f4174d9cd53c553f14c19746500cb861b089Ian Lake * You may obtain a copy of the License at 738f4f4174d9cd53c553f14c19746500cb861b089Ian Lake * 838f4f4174d9cd53c553f14c19746500cb861b089Ian Lake * http://www.apache.org/licenses/LICENSE-2.0 938f4f4174d9cd53c553f14c19746500cb861b089Ian Lake * 1038f4f4174d9cd53c553f14c19746500cb861b089Ian Lake * Unless required by applicable law or agreed to in writing, software 1138f4f4174d9cd53c553f14c19746500cb861b089Ian Lake * distributed under the License is distributed on an "AS IS" BASIS, 1238f4f4174d9cd53c553f14c19746500cb861b089Ian Lake * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 1338f4f4174d9cd53c553f14c19746500cb861b089Ian Lake * See the License for the specific language governing permissions and 1438f4f4174d9cd53c553f14c19746500cb861b089Ian Lake * limitations under the License. 1538f4f4174d9cd53c553f14c19746500cb861b089Ian Lake */ 1638f4f4174d9cd53c553f14c19746500cb861b089Ian Lake 17ac5fe7c617c66850fff75a9fce9979c6e5674b0fAurimas Liutikaspackage androidx.loader.app; 1838f4f4174d9cd53c553f14c19746500cb861b089Ian Lake 1991f3de362ba7218d74f121e6f78ea31519e829fcIan Lakeimport static org.junit.Assert.assertFalse; 2038f4f4174d9cd53c553f14c19746500cb861b089Ian Lakeimport static org.junit.Assert.assertTrue; 2138f4f4174d9cd53c553f14c19746500cb861b089Ian Lakeimport static org.mockito.Mockito.mock; 2238f4f4174d9cd53c553f14c19746500cb861b089Ian Lake 2338f4f4174d9cd53c553f14c19746500cb861b089Ian Lakeimport android.content.Context; 2438f4f4174d9cd53c553f14c19746500cb861b089Ian Lakeimport android.support.test.filters.SmallTest; 256160d5a551afe96c4180acf0454b5b4dbae89b9eAurimas Liutikas 26ac5fe7c617c66850fff75a9fce9979c6e5674b0fAurimas Liutikasimport androidx.loader.app.test.DummyLoaderCallbacks; 27ac5fe7c617c66850fff75a9fce9979c6e5674b0fAurimas Liutikasimport androidx.loader.content.Loader; 2838f4f4174d9cd53c553f14c19746500cb861b089Ian Lake 2938f4f4174d9cd53c553f14c19746500cb861b089Ian Lakeimport org.junit.Test; 3038f4f4174d9cd53c553f14c19746500cb861b089Ian Lakeimport org.junit.runner.RunWith; 3138f4f4174d9cd53c553f14c19746500cb861b089Ian Lakeimport org.junit.runners.JUnit4; 3238f4f4174d9cd53c553f14c19746500cb861b089Ian Lake 3338f4f4174d9cd53c553f14c19746500cb861b089Ian Lake@RunWith(JUnit4.class) 3438f4f4174d9cd53c553f14c19746500cb861b089Ian Lake@SmallTest 3538f4f4174d9cd53c553f14c19746500cb861b089Ian Lakepublic class LoaderObserverTest { 3638f4f4174d9cd53c553f14c19746500cb861b089Ian Lake 3738f4f4174d9cd53c553f14c19746500cb861b089Ian Lake @Test 3838f4f4174d9cd53c553f14c19746500cb861b089Ian Lake public void testOnChanged() { 394c7ed1494f506952eb85c935bc543ea741e7bdb4Ian Lake DummyLoaderCallbacks callback = new DummyLoaderCallbacks(mock(Context.class)); 4038f4f4174d9cd53c553f14c19746500cb861b089Ian Lake @SuppressWarnings("unchecked") 4138f4f4174d9cd53c553f14c19746500cb861b089Ian Lake LoaderManagerImpl.LoaderObserver<Boolean> observer = new LoaderManagerImpl.LoaderObserver<>( 4238f4f4174d9cd53c553f14c19746500cb861b089Ian Lake mock(Loader.class), callback); 4338f4f4174d9cd53c553f14c19746500cb861b089Ian Lake assertFalse("LoaderObserver should not have delivered data before onChanged", 4438f4f4174d9cd53c553f14c19746500cb861b089Ian Lake observer.hasDeliveredData()); 4538f4f4174d9cd53c553f14c19746500cb861b089Ian Lake assertFalse("onLoadFinished should not be called before onChanged", 4638f4f4174d9cd53c553f14c19746500cb861b089Ian Lake callback.mOnLoadFinished); 4738f4f4174d9cd53c553f14c19746500cb861b089Ian Lake 4838f4f4174d9cd53c553f14c19746500cb861b089Ian Lake 4938f4f4174d9cd53c553f14c19746500cb861b089Ian Lake observer.onChanged(true); 5038f4f4174d9cd53c553f14c19746500cb861b089Ian Lake assertTrue("LoaderObserver should have delivered data after onChanged", 5138f4f4174d9cd53c553f14c19746500cb861b089Ian Lake observer.hasDeliveredData()); 5238f4f4174d9cd53c553f14c19746500cb861b089Ian Lake assertTrue("onLoadFinished should be called after onChanged", 5338f4f4174d9cd53c553f14c19746500cb861b089Ian Lake callback.mOnLoadFinished); 5438f4f4174d9cd53c553f14c19746500cb861b089Ian Lake } 5538f4f4174d9cd53c553f14c19746500cb861b089Ian Lake 5638f4f4174d9cd53c553f14c19746500cb861b089Ian Lake @Test 5738f4f4174d9cd53c553f14c19746500cb861b089Ian Lake public void testReset() { 584c7ed1494f506952eb85c935bc543ea741e7bdb4Ian Lake DummyLoaderCallbacks callback = new DummyLoaderCallbacks(mock(Context.class)); 5938f4f4174d9cd53c553f14c19746500cb861b089Ian Lake @SuppressWarnings("unchecked") 6038f4f4174d9cd53c553f14c19746500cb861b089Ian Lake LoaderManagerImpl.LoaderObserver<Boolean> observer = new LoaderManagerImpl.LoaderObserver<>( 6138f4f4174d9cd53c553f14c19746500cb861b089Ian Lake mock(Loader.class), callback); 6238f4f4174d9cd53c553f14c19746500cb861b089Ian Lake assertFalse("onLoaderReset shouldn't be called before onChanged+reset", 6338f4f4174d9cd53c553f14c19746500cb861b089Ian Lake callback.mOnLoaderReset); 6438f4f4174d9cd53c553f14c19746500cb861b089Ian Lake 6538f4f4174d9cd53c553f14c19746500cb861b089Ian Lake observer.reset(); 6638f4f4174d9cd53c553f14c19746500cb861b089Ian Lake assertFalse("onLoaderReset should not be called after only reset", 6738f4f4174d9cd53c553f14c19746500cb861b089Ian Lake callback.mOnLoaderReset); 6838f4f4174d9cd53c553f14c19746500cb861b089Ian Lake } 6938f4f4174d9cd53c553f14c19746500cb861b089Ian Lake 7038f4f4174d9cd53c553f14c19746500cb861b089Ian Lake @Test 7138f4f4174d9cd53c553f14c19746500cb861b089Ian Lake public void testResetWithOnChanged() { 724c7ed1494f506952eb85c935bc543ea741e7bdb4Ian Lake DummyLoaderCallbacks callback = new DummyLoaderCallbacks(mock(Context.class)); 7338f4f4174d9cd53c553f14c19746500cb861b089Ian Lake @SuppressWarnings("unchecked") 7438f4f4174d9cd53c553f14c19746500cb861b089Ian Lake LoaderManagerImpl.LoaderObserver<Boolean> observer = new LoaderManagerImpl.LoaderObserver<>( 7538f4f4174d9cd53c553f14c19746500cb861b089Ian Lake mock(Loader.class), callback); 7638f4f4174d9cd53c553f14c19746500cb861b089Ian Lake assertFalse("onLoaderReset shouldn't be called before onChanged+reset", 7738f4f4174d9cd53c553f14c19746500cb861b089Ian Lake callback.mOnLoaderReset); 7838f4f4174d9cd53c553f14c19746500cb861b089Ian Lake 7938f4f4174d9cd53c553f14c19746500cb861b089Ian Lake observer.onChanged(true); 8038f4f4174d9cd53c553f14c19746500cb861b089Ian Lake observer.reset(); 8138f4f4174d9cd53c553f14c19746500cb861b089Ian Lake assertTrue("onLoaderReset should be called after onChanged+reset", 8238f4f4174d9cd53c553f14c19746500cb861b089Ian Lake callback.mOnLoaderReset); 8338f4f4174d9cd53c553f14c19746500cb861b089Ian Lake } 8438f4f4174d9cd53c553f14c19746500cb861b089Ian Lake} 85