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