1243ca804f85781c982eeeb6f824c9b2bb37cf013Sergey Vasilinets/*
2243ca804f85781c982eeeb6f824c9b2bb37cf013Sergey Vasilinets * Copyright (C) 2017 The Android Open Source Project
3243ca804f85781c982eeeb6f824c9b2bb37cf013Sergey Vasilinets *
4243ca804f85781c982eeeb6f824c9b2bb37cf013Sergey Vasilinets * Licensed under the Apache License, Version 2.0 (the "License");
5243ca804f85781c982eeeb6f824c9b2bb37cf013Sergey Vasilinets * you may not use this file except in compliance with the License.
6243ca804f85781c982eeeb6f824c9b2bb37cf013Sergey Vasilinets * You may obtain a copy of the License at
7243ca804f85781c982eeeb6f824c9b2bb37cf013Sergey Vasilinets *
8243ca804f85781c982eeeb6f824c9b2bb37cf013Sergey Vasilinets *      http://www.apache.org/licenses/LICENSE-2.0
9243ca804f85781c982eeeb6f824c9b2bb37cf013Sergey Vasilinets *
10243ca804f85781c982eeeb6f824c9b2bb37cf013Sergey Vasilinets * Unless required by applicable law or agreed to in writing, software
11243ca804f85781c982eeeb6f824c9b2bb37cf013Sergey Vasilinets * distributed under the License is distributed on an "AS IS" BASIS,
12243ca804f85781c982eeeb6f824c9b2bb37cf013Sergey Vasilinets * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13243ca804f85781c982eeeb6f824c9b2bb37cf013Sergey Vasilinets * See the License for the specific language governing permissions and
14243ca804f85781c982eeeb6f824c9b2bb37cf013Sergey Vasilinets * limitations under the License.
15243ca804f85781c982eeeb6f824c9b2bb37cf013Sergey Vasilinets */
16243ca804f85781c982eeeb6f824c9b2bb37cf013Sergey Vasilinets
17243ca804f85781c982eeeb6f824c9b2bb37cf013Sergey Vasilinetspackage android.arch.lifecycle;
18243ca804f85781c982eeeb6f824c9b2bb37cf013Sergey Vasilinets
19243ca804f85781c982eeeb6f824c9b2bb37cf013Sergey Vasilinetsimport static android.arch.lifecycle.Lifecycle.Event.ON_CREATE;
20243ca804f85781c982eeeb6f824c9b2bb37cf013Sergey Vasilinetsimport static android.arch.lifecycle.Lifecycle.Event.ON_DESTROY;
21243ca804f85781c982eeeb6f824c9b2bb37cf013Sergey Vasilinetsimport static android.arch.lifecycle.Lifecycle.Event.ON_PAUSE;
22243ca804f85781c982eeeb6f824c9b2bb37cf013Sergey Vasilinetsimport static android.arch.lifecycle.Lifecycle.Event.ON_RESUME;
23243ca804f85781c982eeeb6f824c9b2bb37cf013Sergey Vasilinetsimport static android.arch.lifecycle.Lifecycle.Event.ON_START;
24243ca804f85781c982eeeb6f824c9b2bb37cf013Sergey Vasilinetsimport static android.arch.lifecycle.Lifecycle.Event.ON_STOP;
25243ca804f85781c982eeeb6f824c9b2bb37cf013Sergey Vasilinetsimport static android.arch.lifecycle.Lifecycle.State.CREATED;
26243ca804f85781c982eeeb6f824c9b2bb37cf013Sergey Vasilinetsimport static android.arch.lifecycle.Lifecycle.State.INITIALIZED;
27243ca804f85781c982eeeb6f824c9b2bb37cf013Sergey Vasilinetsimport static android.arch.lifecycle.Lifecycle.State.RESUMED;
28243ca804f85781c982eeeb6f824c9b2bb37cf013Sergey Vasilinetsimport static android.arch.lifecycle.Lifecycle.State.STARTED;
29243ca804f85781c982eeeb6f824c9b2bb37cf013Sergey Vasilinets
30243ca804f85781c982eeeb6f824c9b2bb37cf013Sergey Vasilinetsimport static org.mockito.Mockito.mock;
31243ca804f85781c982eeeb6f824c9b2bb37cf013Sergey Vasilinetsimport static org.mockito.Mockito.reset;
32243ca804f85781c982eeeb6f824c9b2bb37cf013Sergey Vasilinetsimport static org.mockito.Mockito.when;
33243ca804f85781c982eeeb6f824c9b2bb37cf013Sergey Vasilinets
34243ca804f85781c982eeeb6f824c9b2bb37cf013Sergey Vasilinetsimport org.junit.Before;
35243ca804f85781c982eeeb6f824c9b2bb37cf013Sergey Vasilinetsimport org.junit.Test;
36243ca804f85781c982eeeb6f824c9b2bb37cf013Sergey Vasilinetsimport org.junit.runner.RunWith;
37243ca804f85781c982eeeb6f824c9b2bb37cf013Sergey Vasilinetsimport org.junit.runners.JUnit4;
38243ca804f85781c982eeeb6f824c9b2bb37cf013Sergey Vasilinetsimport org.mockito.InOrder;
39243ca804f85781c982eeeb6f824c9b2bb37cf013Sergey Vasilinetsimport org.mockito.Mockito;
40243ca804f85781c982eeeb6f824c9b2bb37cf013Sergey Vasilinets
41243ca804f85781c982eeeb6f824c9b2bb37cf013Sergey Vasilinets@RunWith(JUnit4.class)
42243ca804f85781c982eeeb6f824c9b2bb37cf013Sergey Vasilinetspublic class FullLifecycleObserverTest {
43243ca804f85781c982eeeb6f824c9b2bb37cf013Sergey Vasilinets    private LifecycleOwner mOwner;
44243ca804f85781c982eeeb6f824c9b2bb37cf013Sergey Vasilinets    private Lifecycle mLifecycle;
45243ca804f85781c982eeeb6f824c9b2bb37cf013Sergey Vasilinets
46243ca804f85781c982eeeb6f824c9b2bb37cf013Sergey Vasilinets    @Before
47243ca804f85781c982eeeb6f824c9b2bb37cf013Sergey Vasilinets    public void initMocks() {
48243ca804f85781c982eeeb6f824c9b2bb37cf013Sergey Vasilinets        mOwner = mock(LifecycleOwner.class);
49243ca804f85781c982eeeb6f824c9b2bb37cf013Sergey Vasilinets        mLifecycle = mock(Lifecycle.class);
50243ca804f85781c982eeeb6f824c9b2bb37cf013Sergey Vasilinets        when(mOwner.getLifecycle()).thenReturn(mLifecycle);
51243ca804f85781c982eeeb6f824c9b2bb37cf013Sergey Vasilinets    }
52243ca804f85781c982eeeb6f824c9b2bb37cf013Sergey Vasilinets
53243ca804f85781c982eeeb6f824c9b2bb37cf013Sergey Vasilinets    @Test
54243ca804f85781c982eeeb6f824c9b2bb37cf013Sergey Vasilinets    public void eachEvent() {
55243ca804f85781c982eeeb6f824c9b2bb37cf013Sergey Vasilinets        FullLifecycleObserver obj = mock(FullLifecycleObserver.class);
56243ca804f85781c982eeeb6f824c9b2bb37cf013Sergey Vasilinets        FullLifecycleObserverAdapter observer = new FullLifecycleObserverAdapter(obj);
57243ca804f85781c982eeeb6f824c9b2bb37cf013Sergey Vasilinets        when(mLifecycle.getCurrentState()).thenReturn(CREATED);
58243ca804f85781c982eeeb6f824c9b2bb37cf013Sergey Vasilinets
59243ca804f85781c982eeeb6f824c9b2bb37cf013Sergey Vasilinets        observer.onStateChanged(mOwner, ON_CREATE);
60243ca804f85781c982eeeb6f824c9b2bb37cf013Sergey Vasilinets        InOrder inOrder = Mockito.inOrder(obj);
61243ca804f85781c982eeeb6f824c9b2bb37cf013Sergey Vasilinets        inOrder.verify(obj).onCreate(mOwner);
62243ca804f85781c982eeeb6f824c9b2bb37cf013Sergey Vasilinets        reset(obj);
63243ca804f85781c982eeeb6f824c9b2bb37cf013Sergey Vasilinets
64243ca804f85781c982eeeb6f824c9b2bb37cf013Sergey Vasilinets        when(mLifecycle.getCurrentState()).thenReturn(STARTED);
65243ca804f85781c982eeeb6f824c9b2bb37cf013Sergey Vasilinets        observer.onStateChanged(mOwner, ON_START);
66243ca804f85781c982eeeb6f824c9b2bb37cf013Sergey Vasilinets        inOrder.verify(obj).onStart(mOwner);
67243ca804f85781c982eeeb6f824c9b2bb37cf013Sergey Vasilinets        reset(obj);
68243ca804f85781c982eeeb6f824c9b2bb37cf013Sergey Vasilinets
69243ca804f85781c982eeeb6f824c9b2bb37cf013Sergey Vasilinets        when(mLifecycle.getCurrentState()).thenReturn(RESUMED);
70243ca804f85781c982eeeb6f824c9b2bb37cf013Sergey Vasilinets        observer.onStateChanged(mOwner, ON_RESUME);
71243ca804f85781c982eeeb6f824c9b2bb37cf013Sergey Vasilinets        inOrder.verify(obj).onResume(mOwner);
72243ca804f85781c982eeeb6f824c9b2bb37cf013Sergey Vasilinets        reset(obj);
73243ca804f85781c982eeeb6f824c9b2bb37cf013Sergey Vasilinets
74243ca804f85781c982eeeb6f824c9b2bb37cf013Sergey Vasilinets        when(mLifecycle.getCurrentState()).thenReturn(STARTED);
75243ca804f85781c982eeeb6f824c9b2bb37cf013Sergey Vasilinets        observer.onStateChanged(mOwner, ON_PAUSE);
76243ca804f85781c982eeeb6f824c9b2bb37cf013Sergey Vasilinets        inOrder.verify(obj).onPause(mOwner);
77243ca804f85781c982eeeb6f824c9b2bb37cf013Sergey Vasilinets        reset(obj);
78243ca804f85781c982eeeb6f824c9b2bb37cf013Sergey Vasilinets
79243ca804f85781c982eeeb6f824c9b2bb37cf013Sergey Vasilinets        when(mLifecycle.getCurrentState()).thenReturn(CREATED);
80243ca804f85781c982eeeb6f824c9b2bb37cf013Sergey Vasilinets        observer.onStateChanged(mOwner, ON_STOP);
81243ca804f85781c982eeeb6f824c9b2bb37cf013Sergey Vasilinets        inOrder.verify(obj).onStop(mOwner);
82243ca804f85781c982eeeb6f824c9b2bb37cf013Sergey Vasilinets        reset(obj);
83243ca804f85781c982eeeb6f824c9b2bb37cf013Sergey Vasilinets
84243ca804f85781c982eeeb6f824c9b2bb37cf013Sergey Vasilinets        when(mLifecycle.getCurrentState()).thenReturn(INITIALIZED);
85243ca804f85781c982eeeb6f824c9b2bb37cf013Sergey Vasilinets        observer.onStateChanged(mOwner, ON_DESTROY);
86243ca804f85781c982eeeb6f824c9b2bb37cf013Sergey Vasilinets        inOrder.verify(obj).onDestroy(mOwner);
87243ca804f85781c982eeeb6f824c9b2bb37cf013Sergey Vasilinets        reset(obj);
88243ca804f85781c982eeeb6f824c9b2bb37cf013Sergey Vasilinets    }
89243ca804f85781c982eeeb6f824c9b2bb37cf013Sergey Vasilinets}
90