TransformationsTest.java revision b86bef286718da421268bc52cf4fab7cccb3104c
161444da588bb2454012ff23b99662dade74fa169Sergey Vasilinets/* 261444da588bb2454012ff23b99662dade74fa169Sergey Vasilinets * Copyright (C) 2017 The Android Open Source Project 361444da588bb2454012ff23b99662dade74fa169Sergey Vasilinets * 461444da588bb2454012ff23b99662dade74fa169Sergey Vasilinets * Licensed under the Apache License, Version 2.0 (the "License"); 561444da588bb2454012ff23b99662dade74fa169Sergey Vasilinets * you may not use this file except in compliance with the License. 661444da588bb2454012ff23b99662dade74fa169Sergey Vasilinets * You may obtain a copy of the License at 761444da588bb2454012ff23b99662dade74fa169Sergey Vasilinets * 861444da588bb2454012ff23b99662dade74fa169Sergey Vasilinets * http://www.apache.org/licenses/LICENSE-2.0 961444da588bb2454012ff23b99662dade74fa169Sergey Vasilinets * 1061444da588bb2454012ff23b99662dade74fa169Sergey Vasilinets * Unless required by applicable law or agreed to in writing, software 1161444da588bb2454012ff23b99662dade74fa169Sergey Vasilinets * distributed under the License is distributed on an "AS IS" BASIS, 1261444da588bb2454012ff23b99662dade74fa169Sergey Vasilinets * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 1361444da588bb2454012ff23b99662dade74fa169Sergey Vasilinets * See the License for the specific language governing permissions and 1461444da588bb2454012ff23b99662dade74fa169Sergey Vasilinets * limitations under the License. 1561444da588bb2454012ff23b99662dade74fa169Sergey Vasilinets */ 1661444da588bb2454012ff23b99662dade74fa169Sergey Vasilinets 1764db0cc15b78b62a1d44a70fc8b4552e660d952cYigit Boyarpackage android.arch.lifecycle; 1861444da588bb2454012ff23b99662dade74fa169Sergey Vasilinets 1961444da588bb2454012ff23b99662dade74fa169Sergey Vasilinetsimport static org.mockito.Matchers.anyString; 2061444da588bb2454012ff23b99662dade74fa169Sergey Vasilinetsimport static org.mockito.Mockito.mock; 2161444da588bb2454012ff23b99662dade74fa169Sergey Vasilinetsimport static org.mockito.Mockito.never; 2261444da588bb2454012ff23b99662dade74fa169Sergey Vasilinetsimport static org.mockito.Mockito.reset; 2361444da588bb2454012ff23b99662dade74fa169Sergey Vasilinetsimport static org.mockito.Mockito.verify; 2461444da588bb2454012ff23b99662dade74fa169Sergey Vasilinetsimport static org.mockito.Mockito.when; 2561444da588bb2454012ff23b99662dade74fa169Sergey Vasilinets 2664db0cc15b78b62a1d44a70fc8b4552e660d952cYigit Boyarimport android.arch.core.executor.AppToolkitTaskExecutor; 2764db0cc15b78b62a1d44a70fc8b4552e660d952cYigit Boyarimport android.arch.core.util.Function; 28b86bef286718da421268bc52cf4fab7cccb3104cSergey Vasilinetsimport android.arch.lifecycle.util.InstantTaskExecutor; 29b86bef286718da421268bc52cf4fab7cccb3104cSergey Vasilinetsimport android.support.test.filters.SmallTest; 3061444da588bb2454012ff23b99662dade74fa169Sergey Vasilinets 3161444da588bb2454012ff23b99662dade74fa169Sergey Vasilinetsimport org.junit.Before; 3261444da588bb2454012ff23b99662dade74fa169Sergey Vasilinetsimport org.junit.Test; 3361444da588bb2454012ff23b99662dade74fa169Sergey Vasilinetsimport org.junit.runner.RunWith; 3461444da588bb2454012ff23b99662dade74fa169Sergey Vasilinetsimport org.junit.runners.JUnit4; 3561444da588bb2454012ff23b99662dade74fa169Sergey Vasilinets 3661444da588bb2454012ff23b99662dade74fa169Sergey Vasilinets@SuppressWarnings("unchecked") 3761444da588bb2454012ff23b99662dade74fa169Sergey Vasilinets@SmallTest 3861444da588bb2454012ff23b99662dade74fa169Sergey Vasilinets@RunWith(JUnit4.class) 3961444da588bb2454012ff23b99662dade74fa169Sergey Vasilinetspublic class TransformationsTest { 4061444da588bb2454012ff23b99662dade74fa169Sergey Vasilinets 4161444da588bb2454012ff23b99662dade74fa169Sergey Vasilinets private LifecycleOwner mOwner; 4261444da588bb2454012ff23b99662dade74fa169Sergey Vasilinets 4361444da588bb2454012ff23b99662dade74fa169Sergey Vasilinets @Before 4461444da588bb2454012ff23b99662dade74fa169Sergey Vasilinets public void swapExecutorDelegate() { 4561444da588bb2454012ff23b99662dade74fa169Sergey Vasilinets AppToolkitTaskExecutor.getInstance().setDelegate(new InstantTaskExecutor()); 4661444da588bb2454012ff23b99662dade74fa169Sergey Vasilinets } 4761444da588bb2454012ff23b99662dade74fa169Sergey Vasilinets 4861444da588bb2454012ff23b99662dade74fa169Sergey Vasilinets @Before 4961444da588bb2454012ff23b99662dade74fa169Sergey Vasilinets public void setup() { 5061444da588bb2454012ff23b99662dade74fa169Sergey Vasilinets mOwner = mock(LifecycleOwner.class); 5161444da588bb2454012ff23b99662dade74fa169Sergey Vasilinets LifecycleRegistry registry = new LifecycleRegistry(mOwner); 5261444da588bb2454012ff23b99662dade74fa169Sergey Vasilinets when(mOwner.getLifecycle()).thenReturn(registry); 53b86bef286718da421268bc52cf4fab7cccb3104cSergey Vasilinets registry.handleLifecycleEvent(Lifecycle.Event.ON_CREATE); 54b86bef286718da421268bc52cf4fab7cccb3104cSergey Vasilinets registry.handleLifecycleEvent(Lifecycle.Event.ON_START); 5561444da588bb2454012ff23b99662dade74fa169Sergey Vasilinets } 5661444da588bb2454012ff23b99662dade74fa169Sergey Vasilinets 5761444da588bb2454012ff23b99662dade74fa169Sergey Vasilinets @Test 5861444da588bb2454012ff23b99662dade74fa169Sergey Vasilinets public void testMap() { 5961444da588bb2454012ff23b99662dade74fa169Sergey Vasilinets LiveData<String> source = new LiveData<>(); 6061444da588bb2454012ff23b99662dade74fa169Sergey Vasilinets LiveData<Integer> mapped = Transformations.map(source, new Function<String, Integer>() { 6161444da588bb2454012ff23b99662dade74fa169Sergey Vasilinets @Override 6261444da588bb2454012ff23b99662dade74fa169Sergey Vasilinets public Integer apply(String input) { 6361444da588bb2454012ff23b99662dade74fa169Sergey Vasilinets return input.length(); 6461444da588bb2454012ff23b99662dade74fa169Sergey Vasilinets } 6561444da588bb2454012ff23b99662dade74fa169Sergey Vasilinets }); 6661444da588bb2454012ff23b99662dade74fa169Sergey Vasilinets Observer<Integer> observer = mock(Observer.class); 6761444da588bb2454012ff23b99662dade74fa169Sergey Vasilinets mapped.observe(mOwner, observer); 6861444da588bb2454012ff23b99662dade74fa169Sergey Vasilinets source.setValue("four"); 6961444da588bb2454012ff23b99662dade74fa169Sergey Vasilinets verify(observer).onChanged(4); 7061444da588bb2454012ff23b99662dade74fa169Sergey Vasilinets } 7161444da588bb2454012ff23b99662dade74fa169Sergey Vasilinets 7261444da588bb2454012ff23b99662dade74fa169Sergey Vasilinets @Test 7361444da588bb2454012ff23b99662dade74fa169Sergey Vasilinets public void testSwitchMap() { 7461444da588bb2454012ff23b99662dade74fa169Sergey Vasilinets LiveData<Integer> trigger = new LiveData<>(); 7561444da588bb2454012ff23b99662dade74fa169Sergey Vasilinets final LiveData<String> first = new LiveData<>(); 7661444da588bb2454012ff23b99662dade74fa169Sergey Vasilinets final LiveData<String> second = new LiveData<>(); 7761444da588bb2454012ff23b99662dade74fa169Sergey Vasilinets LiveData<String> result = Transformations.switchMap(trigger, 7861444da588bb2454012ff23b99662dade74fa169Sergey Vasilinets new Function<Integer, LiveData<String>>() { 7961444da588bb2454012ff23b99662dade74fa169Sergey Vasilinets @Override 8061444da588bb2454012ff23b99662dade74fa169Sergey Vasilinets public LiveData<String> apply(Integer input) { 8161444da588bb2454012ff23b99662dade74fa169Sergey Vasilinets if (input == 1) { 8261444da588bb2454012ff23b99662dade74fa169Sergey Vasilinets return first; 8361444da588bb2454012ff23b99662dade74fa169Sergey Vasilinets } else { 8461444da588bb2454012ff23b99662dade74fa169Sergey Vasilinets return second; 8561444da588bb2454012ff23b99662dade74fa169Sergey Vasilinets } 8661444da588bb2454012ff23b99662dade74fa169Sergey Vasilinets } 8761444da588bb2454012ff23b99662dade74fa169Sergey Vasilinets }); 8861444da588bb2454012ff23b99662dade74fa169Sergey Vasilinets 8961444da588bb2454012ff23b99662dade74fa169Sergey Vasilinets Observer<String> observer = mock(Observer.class); 9061444da588bb2454012ff23b99662dade74fa169Sergey Vasilinets result.observe(mOwner, observer); 9161444da588bb2454012ff23b99662dade74fa169Sergey Vasilinets verify(observer, never()).onChanged(anyString()); 9261444da588bb2454012ff23b99662dade74fa169Sergey Vasilinets first.setValue("first"); 9361444da588bb2454012ff23b99662dade74fa169Sergey Vasilinets trigger.setValue(1); 9461444da588bb2454012ff23b99662dade74fa169Sergey Vasilinets verify(observer).onChanged("first"); 9561444da588bb2454012ff23b99662dade74fa169Sergey Vasilinets second.setValue("second"); 9661444da588bb2454012ff23b99662dade74fa169Sergey Vasilinets reset(observer); 9761444da588bb2454012ff23b99662dade74fa169Sergey Vasilinets verify(observer, never()).onChanged(anyString()); 9861444da588bb2454012ff23b99662dade74fa169Sergey Vasilinets trigger.setValue(2); 9961444da588bb2454012ff23b99662dade74fa169Sergey Vasilinets verify(observer).onChanged("second"); 10061444da588bb2454012ff23b99662dade74fa169Sergey Vasilinets reset(observer); 10161444da588bb2454012ff23b99662dade74fa169Sergey Vasilinets first.setValue("failure"); 10261444da588bb2454012ff23b99662dade74fa169Sergey Vasilinets verify(observer, never()).onChanged(anyString()); 10361444da588bb2454012ff23b99662dade74fa169Sergey Vasilinets } 10461444da588bb2454012ff23b99662dade74fa169Sergey Vasilinets 10561444da588bb2454012ff23b99662dade74fa169Sergey Vasilinets @Test 10661444da588bb2454012ff23b99662dade74fa169Sergey Vasilinets public void testSwitchMap2() { 10761444da588bb2454012ff23b99662dade74fa169Sergey Vasilinets LiveData<Integer> trigger = new LiveData<>(); 10861444da588bb2454012ff23b99662dade74fa169Sergey Vasilinets final LiveData<String> first = new LiveData<>(); 10961444da588bb2454012ff23b99662dade74fa169Sergey Vasilinets final LiveData<String> second = new LiveData<>(); 11061444da588bb2454012ff23b99662dade74fa169Sergey Vasilinets LiveData<String> result = Transformations.switchMap(trigger, 11161444da588bb2454012ff23b99662dade74fa169Sergey Vasilinets new Function<Integer, LiveData<String>>() { 11261444da588bb2454012ff23b99662dade74fa169Sergey Vasilinets @Override 11361444da588bb2454012ff23b99662dade74fa169Sergey Vasilinets public LiveData<String> apply(Integer input) { 11461444da588bb2454012ff23b99662dade74fa169Sergey Vasilinets if (input == 1) { 11561444da588bb2454012ff23b99662dade74fa169Sergey Vasilinets return first; 11661444da588bb2454012ff23b99662dade74fa169Sergey Vasilinets } else { 11761444da588bb2454012ff23b99662dade74fa169Sergey Vasilinets return second; 11861444da588bb2454012ff23b99662dade74fa169Sergey Vasilinets } 11961444da588bb2454012ff23b99662dade74fa169Sergey Vasilinets } 12061444da588bb2454012ff23b99662dade74fa169Sergey Vasilinets }); 12161444da588bb2454012ff23b99662dade74fa169Sergey Vasilinets 12261444da588bb2454012ff23b99662dade74fa169Sergey Vasilinets Observer<String> observer = mock(Observer.class); 12361444da588bb2454012ff23b99662dade74fa169Sergey Vasilinets result.observe(mOwner, observer); 12461444da588bb2454012ff23b99662dade74fa169Sergey Vasilinets 12561444da588bb2454012ff23b99662dade74fa169Sergey Vasilinets verify(observer, never()).onChanged(anyString()); 12661444da588bb2454012ff23b99662dade74fa169Sergey Vasilinets trigger.setValue(1); 12761444da588bb2454012ff23b99662dade74fa169Sergey Vasilinets verify(observer, never()).onChanged(anyString()); 12861444da588bb2454012ff23b99662dade74fa169Sergey Vasilinets first.setValue("fi"); 12961444da588bb2454012ff23b99662dade74fa169Sergey Vasilinets verify(observer).onChanged("fi"); 13061444da588bb2454012ff23b99662dade74fa169Sergey Vasilinets first.setValue("rst"); 13161444da588bb2454012ff23b99662dade74fa169Sergey Vasilinets verify(observer).onChanged("rst"); 13261444da588bb2454012ff23b99662dade74fa169Sergey Vasilinets 13361444da588bb2454012ff23b99662dade74fa169Sergey Vasilinets second.setValue("second"); 13461444da588bb2454012ff23b99662dade74fa169Sergey Vasilinets reset(observer); 13561444da588bb2454012ff23b99662dade74fa169Sergey Vasilinets verify(observer, never()).onChanged(anyString()); 13661444da588bb2454012ff23b99662dade74fa169Sergey Vasilinets trigger.setValue(2); 13761444da588bb2454012ff23b99662dade74fa169Sergey Vasilinets verify(observer).onChanged("second"); 13861444da588bb2454012ff23b99662dade74fa169Sergey Vasilinets reset(observer); 13961444da588bb2454012ff23b99662dade74fa169Sergey Vasilinets first.setValue("failure"); 14061444da588bb2454012ff23b99662dade74fa169Sergey Vasilinets verify(observer, never()).onChanged(anyString()); 14161444da588bb2454012ff23b99662dade74fa169Sergey Vasilinets } 14261444da588bb2454012ff23b99662dade74fa169Sergey Vasilinets 14361444da588bb2454012ff23b99662dade74fa169Sergey Vasilinets @Test 14461444da588bb2454012ff23b99662dade74fa169Sergey Vasilinets public void testNoRedispatchSwitchMap() { 14561444da588bb2454012ff23b99662dade74fa169Sergey Vasilinets LiveData<Integer> trigger = new LiveData<>(); 14661444da588bb2454012ff23b99662dade74fa169Sergey Vasilinets final LiveData<String> first = new LiveData<>(); 14761444da588bb2454012ff23b99662dade74fa169Sergey Vasilinets LiveData<String> result = Transformations.switchMap(trigger, 14861444da588bb2454012ff23b99662dade74fa169Sergey Vasilinets new Function<Integer, LiveData<String>>() { 14961444da588bb2454012ff23b99662dade74fa169Sergey Vasilinets @Override 15061444da588bb2454012ff23b99662dade74fa169Sergey Vasilinets public LiveData<String> apply(Integer input) { 15161444da588bb2454012ff23b99662dade74fa169Sergey Vasilinets return first; 15261444da588bb2454012ff23b99662dade74fa169Sergey Vasilinets } 15361444da588bb2454012ff23b99662dade74fa169Sergey Vasilinets }); 15461444da588bb2454012ff23b99662dade74fa169Sergey Vasilinets 15561444da588bb2454012ff23b99662dade74fa169Sergey Vasilinets Observer<String> observer = mock(Observer.class); 15661444da588bb2454012ff23b99662dade74fa169Sergey Vasilinets result.observe(mOwner, observer); 15761444da588bb2454012ff23b99662dade74fa169Sergey Vasilinets verify(observer, never()).onChanged(anyString()); 15861444da588bb2454012ff23b99662dade74fa169Sergey Vasilinets first.setValue("first"); 15961444da588bb2454012ff23b99662dade74fa169Sergey Vasilinets trigger.setValue(1); 16061444da588bb2454012ff23b99662dade74fa169Sergey Vasilinets verify(observer).onChanged("first"); 16161444da588bb2454012ff23b99662dade74fa169Sergey Vasilinets reset(observer); 16261444da588bb2454012ff23b99662dade74fa169Sergey Vasilinets trigger.setValue(2); 16361444da588bb2454012ff23b99662dade74fa169Sergey Vasilinets verify(observer, never()).onChanged(anyString()); 16461444da588bb2454012ff23b99662dade74fa169Sergey Vasilinets } 16561444da588bb2454012ff23b99662dade74fa169Sergey Vasilinets} 166