1a41c174e52ec211ef950259b274b120a705af438Yigit Boyar/*
2ac5fe7c617c66850fff75a9fce9979c6e5674b0fAurimas Liutikas * Copyright 2018 The Android Open Source Project
3a41c174e52ec211ef950259b274b120a705af438Yigit Boyar *
4a41c174e52ec211ef950259b274b120a705af438Yigit Boyar * Licensed under the Apache License, Version 2.0 (the "License");
5a41c174e52ec211ef950259b274b120a705af438Yigit Boyar * you may not use this file except in compliance with the License.
6a41c174e52ec211ef950259b274b120a705af438Yigit Boyar * You may obtain a copy of the License at
7a41c174e52ec211ef950259b274b120a705af438Yigit Boyar *
8a41c174e52ec211ef950259b274b120a705af438Yigit Boyar *      http://www.apache.org/licenses/LICENSE-2.0
9a41c174e52ec211ef950259b274b120a705af438Yigit Boyar *
10a41c174e52ec211ef950259b274b120a705af438Yigit Boyar * Unless required by applicable law or agreed to in writing, software
11a41c174e52ec211ef950259b274b120a705af438Yigit Boyar * distributed under the License is distributed on an "AS IS" BASIS,
12a41c174e52ec211ef950259b274b120a705af438Yigit Boyar * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13a41c174e52ec211ef950259b274b120a705af438Yigit Boyar * See the License for the specific language governing permissions and
14a41c174e52ec211ef950259b274b120a705af438Yigit Boyar * limitations under the License.
15a41c174e52ec211ef950259b274b120a705af438Yigit Boyar */
16ac5fe7c617c66850fff75a9fce9979c6e5674b0fAurimas Liutikaspackage androidx.recyclerview.widget;
17a41c174e52ec211ef950259b274b120a705af438Yigit Boyar
18754cb29c50f09a83251dd4bb633ba445b2411adbAurimas Liutikasimport static org.mockito.Mockito.mock;
19754cb29c50f09a83251dd4bb633ba445b2411adbAurimas Liutikasimport static org.mockito.Mockito.verify;
20754cb29c50f09a83251dd4bb633ba445b2411adbAurimas Liutikasimport static org.mockito.Mockito.verifyNoMoreInteractions;
21754cb29c50f09a83251dd4bb633ba445b2411adbAurimas Liutikas
22754cb29c50f09a83251dd4bb633ba445b2411adbAurimas Liutikasimport android.support.test.filters.SmallTest;
23a41c174e52ec211ef950259b274b120a705af438Yigit Boyar
24a41c174e52ec211ef950259b274b120a705af438Yigit Boyarimport org.junit.Before;
25a41c174e52ec211ef950259b274b120a705af438Yigit Boyarimport org.junit.Test;
26a41c174e52ec211ef950259b274b120a705af438Yigit Boyarimport org.junit.runner.RunWith;
27a41c174e52ec211ef950259b274b120a705af438Yigit Boyarimport org.junit.runners.JUnit4;
28a41c174e52ec211ef950259b274b120a705af438Yigit Boyar
29a41c174e52ec211ef950259b274b120a705af438Yigit Boyar@RunWith(JUnit4.class)
30a41c174e52ec211ef950259b274b120a705af438Yigit Boyar@SmallTest
31a41c174e52ec211ef950259b274b120a705af438Yigit Boyarpublic class BatchingListUpdateCallbackTest {
32a41c174e52ec211ef950259b274b120a705af438Yigit Boyar    BatchingListUpdateCallback mBatching;
33a41c174e52ec211ef950259b274b120a705af438Yigit Boyar    ListUpdateCallback mCallback;
34a41c174e52ec211ef950259b274b120a705af438Yigit Boyar
35a41c174e52ec211ef950259b274b120a705af438Yigit Boyar    @Before
36a41c174e52ec211ef950259b274b120a705af438Yigit Boyar    public void setup() {
37a41c174e52ec211ef950259b274b120a705af438Yigit Boyar        mCallback = mock(ListUpdateCallback.class);
38a41c174e52ec211ef950259b274b120a705af438Yigit Boyar        mBatching = new BatchingListUpdateCallback(mCallback);
39a41c174e52ec211ef950259b274b120a705af438Yigit Boyar    }
40a41c174e52ec211ef950259b274b120a705af438Yigit Boyar
41a41c174e52ec211ef950259b274b120a705af438Yigit Boyar    @Test
42a41c174e52ec211ef950259b274b120a705af438Yigit Boyar    public void addSimple() {
43a41c174e52ec211ef950259b274b120a705af438Yigit Boyar        mBatching.onInserted(3, 2);
44a41c174e52ec211ef950259b274b120a705af438Yigit Boyar        mBatching.dispatchLastEvent();
45a41c174e52ec211ef950259b274b120a705af438Yigit Boyar        verify(mCallback).onInserted(3, 2);
46a41c174e52ec211ef950259b274b120a705af438Yigit Boyar        verifyNoMoreInteractions(mCallback);
47a41c174e52ec211ef950259b274b120a705af438Yigit Boyar    }
48a41c174e52ec211ef950259b274b120a705af438Yigit Boyar
49a41c174e52ec211ef950259b274b120a705af438Yigit Boyar    @Test
50a41c174e52ec211ef950259b274b120a705af438Yigit Boyar    public void addToSamePos() {
51a41c174e52ec211ef950259b274b120a705af438Yigit Boyar        mBatching.onInserted(3, 2);
52a41c174e52ec211ef950259b274b120a705af438Yigit Boyar        mBatching.onInserted(3, 1);
53a41c174e52ec211ef950259b274b120a705af438Yigit Boyar        mBatching.dispatchLastEvent();
54a41c174e52ec211ef950259b274b120a705af438Yigit Boyar        verify(mCallback).onInserted(3, 3);
55a41c174e52ec211ef950259b274b120a705af438Yigit Boyar        verifyNoMoreInteractions(mCallback);
56a41c174e52ec211ef950259b274b120a705af438Yigit Boyar    }
57a41c174e52ec211ef950259b274b120a705af438Yigit Boyar
58a41c174e52ec211ef950259b274b120a705af438Yigit Boyar    @Test
59a41c174e52ec211ef950259b274b120a705af438Yigit Boyar    public void addInsidePrevious() {
60a41c174e52ec211ef950259b274b120a705af438Yigit Boyar        mBatching.onInserted(3, 5);
61a41c174e52ec211ef950259b274b120a705af438Yigit Boyar        mBatching.onInserted(5, 1);
62a41c174e52ec211ef950259b274b120a705af438Yigit Boyar        mBatching.dispatchLastEvent();
63a41c174e52ec211ef950259b274b120a705af438Yigit Boyar        verify(mCallback).onInserted(3, 6);
64a41c174e52ec211ef950259b274b120a705af438Yigit Boyar        verifyNoMoreInteractions(mCallback);
65a41c174e52ec211ef950259b274b120a705af438Yigit Boyar    }
66a41c174e52ec211ef950259b274b120a705af438Yigit Boyar
67a41c174e52ec211ef950259b274b120a705af438Yigit Boyar    @Test
68a41c174e52ec211ef950259b274b120a705af438Yigit Boyar    public void addBefore() {
69a41c174e52ec211ef950259b274b120a705af438Yigit Boyar        mBatching.onInserted(3, 5);
70a41c174e52ec211ef950259b274b120a705af438Yigit Boyar        mBatching.onInserted(2, 1);
71a41c174e52ec211ef950259b274b120a705af438Yigit Boyar        mBatching.dispatchLastEvent();
72a41c174e52ec211ef950259b274b120a705af438Yigit Boyar        verify(mCallback).onInserted(3, 5);
73a41c174e52ec211ef950259b274b120a705af438Yigit Boyar        verify(mCallback).onInserted(2, 1);
74a41c174e52ec211ef950259b274b120a705af438Yigit Boyar        verifyNoMoreInteractions(mCallback);
75a41c174e52ec211ef950259b274b120a705af438Yigit Boyar    }
76a41c174e52ec211ef950259b274b120a705af438Yigit Boyar
77a41c174e52ec211ef950259b274b120a705af438Yigit Boyar    @Test
78a41c174e52ec211ef950259b274b120a705af438Yigit Boyar    public void removeSimple() {
79a41c174e52ec211ef950259b274b120a705af438Yigit Boyar        mBatching.onRemoved(3, 2);
80a41c174e52ec211ef950259b274b120a705af438Yigit Boyar        mBatching.dispatchLastEvent();
81a41c174e52ec211ef950259b274b120a705af438Yigit Boyar        verify(mCallback).onRemoved(3, 2);
82a41c174e52ec211ef950259b274b120a705af438Yigit Boyar        verifyNoMoreInteractions(mCallback);
83a41c174e52ec211ef950259b274b120a705af438Yigit Boyar    }
84a41c174e52ec211ef950259b274b120a705af438Yigit Boyar
85a41c174e52ec211ef950259b274b120a705af438Yigit Boyar    @Test
86a41c174e52ec211ef950259b274b120a705af438Yigit Boyar    public void removeSamePosition() {
87a41c174e52ec211ef950259b274b120a705af438Yigit Boyar        mBatching.onRemoved(3, 2);
88a41c174e52ec211ef950259b274b120a705af438Yigit Boyar        mBatching.onRemoved(3, 1);
89a41c174e52ec211ef950259b274b120a705af438Yigit Boyar        mBatching.dispatchLastEvent();
90a41c174e52ec211ef950259b274b120a705af438Yigit Boyar        verify(mCallback).onRemoved(3, 3);
91a41c174e52ec211ef950259b274b120a705af438Yigit Boyar        verifyNoMoreInteractions(mCallback);
92a41c174e52ec211ef950259b274b120a705af438Yigit Boyar    }
93a41c174e52ec211ef950259b274b120a705af438Yigit Boyar
94a41c174e52ec211ef950259b274b120a705af438Yigit Boyar    @Test
95a41c174e52ec211ef950259b274b120a705af438Yigit Boyar    public void removeInside() {
96a41c174e52ec211ef950259b274b120a705af438Yigit Boyar        mBatching.onRemoved(3, 5);
97a41c174e52ec211ef950259b274b120a705af438Yigit Boyar        mBatching.onRemoved(4, 2);
98a41c174e52ec211ef950259b274b120a705af438Yigit Boyar        mBatching.dispatchLastEvent();
99a41c174e52ec211ef950259b274b120a705af438Yigit Boyar        verify(mCallback).onRemoved(3, 5);
100a41c174e52ec211ef950259b274b120a705af438Yigit Boyar        verify(mCallback).onRemoved(4, 2);
101a41c174e52ec211ef950259b274b120a705af438Yigit Boyar        verifyNoMoreInteractions(mCallback);
102a41c174e52ec211ef950259b274b120a705af438Yigit Boyar    }
103a41c174e52ec211ef950259b274b120a705af438Yigit Boyar
104a41c174e52ec211ef950259b274b120a705af438Yigit Boyar    @Test
105a41c174e52ec211ef950259b274b120a705af438Yigit Boyar    public void removeBefore() {
106a41c174e52ec211ef950259b274b120a705af438Yigit Boyar        mBatching.onRemoved(3, 2);
107a41c174e52ec211ef950259b274b120a705af438Yigit Boyar        mBatching.onRemoved(2, 1);
108a41c174e52ec211ef950259b274b120a705af438Yigit Boyar        mBatching.dispatchLastEvent();
109a41c174e52ec211ef950259b274b120a705af438Yigit Boyar        verify(mCallback).onRemoved(2, 3);
110a41c174e52ec211ef950259b274b120a705af438Yigit Boyar        verifyNoMoreInteractions(mCallback);
111a41c174e52ec211ef950259b274b120a705af438Yigit Boyar    }
112a41c174e52ec211ef950259b274b120a705af438Yigit Boyar
113a41c174e52ec211ef950259b274b120a705af438Yigit Boyar    @Test
114a41c174e52ec211ef950259b274b120a705af438Yigit Boyar    public void removeBefore2() {
115a41c174e52ec211ef950259b274b120a705af438Yigit Boyar        mBatching.onRemoved(3, 2);
116a41c174e52ec211ef950259b274b120a705af438Yigit Boyar        mBatching.onRemoved(2, 4);
117a41c174e52ec211ef950259b274b120a705af438Yigit Boyar        mBatching.dispatchLastEvent();
118a41c174e52ec211ef950259b274b120a705af438Yigit Boyar        verify(mCallback).onRemoved(2, 6);
119a41c174e52ec211ef950259b274b120a705af438Yigit Boyar        verifyNoMoreInteractions(mCallback);
120a41c174e52ec211ef950259b274b120a705af438Yigit Boyar    }
121a41c174e52ec211ef950259b274b120a705af438Yigit Boyar
122a41c174e52ec211ef950259b274b120a705af438Yigit Boyar    @Test
123a41c174e52ec211ef950259b274b120a705af438Yigit Boyar    public void removeBefore3() {
124a41c174e52ec211ef950259b274b120a705af438Yigit Boyar        mBatching.onRemoved(3, 2);
125a41c174e52ec211ef950259b274b120a705af438Yigit Boyar        mBatching.onRemoved(1, 1);
126a41c174e52ec211ef950259b274b120a705af438Yigit Boyar        mBatching.dispatchLastEvent();
127a41c174e52ec211ef950259b274b120a705af438Yigit Boyar        verify(mCallback).onRemoved(3, 2);
128a41c174e52ec211ef950259b274b120a705af438Yigit Boyar        verify(mCallback).onRemoved(1, 1);
129a41c174e52ec211ef950259b274b120a705af438Yigit Boyar        verifyNoMoreInteractions(mCallback);
130a41c174e52ec211ef950259b274b120a705af438Yigit Boyar    }
131a41c174e52ec211ef950259b274b120a705af438Yigit Boyar
132a41c174e52ec211ef950259b274b120a705af438Yigit Boyar    @Test
133a41c174e52ec211ef950259b274b120a705af438Yigit Boyar    public void moveSimple() {
134a41c174e52ec211ef950259b274b120a705af438Yigit Boyar        mBatching.onMoved(3, 2);
135a41c174e52ec211ef950259b274b120a705af438Yigit Boyar        mBatching.dispatchLastEvent();
136a41c174e52ec211ef950259b274b120a705af438Yigit Boyar        verify(mCallback).onMoved(3, 2);
137a41c174e52ec211ef950259b274b120a705af438Yigit Boyar        verifyNoMoreInteractions(mCallback);
138a41c174e52ec211ef950259b274b120a705af438Yigit Boyar    }
139a41c174e52ec211ef950259b274b120a705af438Yigit Boyar
140a41c174e52ec211ef950259b274b120a705af438Yigit Boyar    @Test
141a41c174e52ec211ef950259b274b120a705af438Yigit Boyar    public void moveTwice() {
142a41c174e52ec211ef950259b274b120a705af438Yigit Boyar        mBatching.onMoved(3, 2);
143a41c174e52ec211ef950259b274b120a705af438Yigit Boyar        mBatching.onMoved(5, 6);
144a41c174e52ec211ef950259b274b120a705af438Yigit Boyar        mBatching.dispatchLastEvent();
145a41c174e52ec211ef950259b274b120a705af438Yigit Boyar        verify(mCallback).onMoved(3, 2);
146a41c174e52ec211ef950259b274b120a705af438Yigit Boyar        verify(mCallback).onMoved(5, 6);
147a41c174e52ec211ef950259b274b120a705af438Yigit Boyar        verifyNoMoreInteractions(mCallback);
148a41c174e52ec211ef950259b274b120a705af438Yigit Boyar    }
149a41c174e52ec211ef950259b274b120a705af438Yigit Boyar
150a41c174e52ec211ef950259b274b120a705af438Yigit Boyar    @Test
151a41c174e52ec211ef950259b274b120a705af438Yigit Boyar    public void changeSimple() {
152a41c174e52ec211ef950259b274b120a705af438Yigit Boyar        mBatching.onChanged(3, 2, null);
153a41c174e52ec211ef950259b274b120a705af438Yigit Boyar        mBatching.dispatchLastEvent();
154a41c174e52ec211ef950259b274b120a705af438Yigit Boyar        verify(mCallback).onChanged(3, 2, null);
155a41c174e52ec211ef950259b274b120a705af438Yigit Boyar        verifyNoMoreInteractions(mCallback);
156a41c174e52ec211ef950259b274b120a705af438Yigit Boyar    }
157a41c174e52ec211ef950259b274b120a705af438Yigit Boyar
158a41c174e52ec211ef950259b274b120a705af438Yigit Boyar    @Test
159a41c174e52ec211ef950259b274b120a705af438Yigit Boyar    public void changeConsecutive() {
160a41c174e52ec211ef950259b274b120a705af438Yigit Boyar        mBatching.onChanged(3, 2, null);
161a41c174e52ec211ef950259b274b120a705af438Yigit Boyar        mBatching.onChanged(5, 2, null);
162a41c174e52ec211ef950259b274b120a705af438Yigit Boyar        mBatching.dispatchLastEvent();
163a41c174e52ec211ef950259b274b120a705af438Yigit Boyar        verify(mCallback).onChanged(3, 4, null);
164a41c174e52ec211ef950259b274b120a705af438Yigit Boyar        verifyNoMoreInteractions(mCallback);
165a41c174e52ec211ef950259b274b120a705af438Yigit Boyar    }
166a41c174e52ec211ef950259b274b120a705af438Yigit Boyar
167a41c174e52ec211ef950259b274b120a705af438Yigit Boyar    @Test
168a41c174e52ec211ef950259b274b120a705af438Yigit Boyar    public void changeTheSame() {
169a41c174e52ec211ef950259b274b120a705af438Yigit Boyar        mBatching.onChanged(3, 2, null);
170a41c174e52ec211ef950259b274b120a705af438Yigit Boyar        mBatching.onChanged(4, 2, null);
171a41c174e52ec211ef950259b274b120a705af438Yigit Boyar        mBatching.dispatchLastEvent();
172a41c174e52ec211ef950259b274b120a705af438Yigit Boyar        verify(mCallback).onChanged(3, 3, null);
173a41c174e52ec211ef950259b274b120a705af438Yigit Boyar        verifyNoMoreInteractions(mCallback);
174a41c174e52ec211ef950259b274b120a705af438Yigit Boyar    }
175a41c174e52ec211ef950259b274b120a705af438Yigit Boyar
176a41c174e52ec211ef950259b274b120a705af438Yigit Boyar    @Test
177a41c174e52ec211ef950259b274b120a705af438Yigit Boyar    public void changeTheSame2() {
178a41c174e52ec211ef950259b274b120a705af438Yigit Boyar        mBatching.onChanged(3, 2, null);
179a41c174e52ec211ef950259b274b120a705af438Yigit Boyar        mBatching.onChanged(3, 2, null);
180a41c174e52ec211ef950259b274b120a705af438Yigit Boyar        mBatching.dispatchLastEvent();
181a41c174e52ec211ef950259b274b120a705af438Yigit Boyar        verify(mCallback).onChanged(3, 2, null);
182a41c174e52ec211ef950259b274b120a705af438Yigit Boyar        verifyNoMoreInteractions(mCallback);
183a41c174e52ec211ef950259b274b120a705af438Yigit Boyar    }
184a41c174e52ec211ef950259b274b120a705af438Yigit Boyar
185a41c174e52ec211ef950259b274b120a705af438Yigit Boyar    @Test
186a41c174e52ec211ef950259b274b120a705af438Yigit Boyar    public void changeBefore() {
187a41c174e52ec211ef950259b274b120a705af438Yigit Boyar        mBatching.onChanged(3, 2, null);
188a41c174e52ec211ef950259b274b120a705af438Yigit Boyar        mBatching.onChanged(2, 1, null);
189a41c174e52ec211ef950259b274b120a705af438Yigit Boyar        mBatching.dispatchLastEvent();
190a41c174e52ec211ef950259b274b120a705af438Yigit Boyar        verify(mCallback).onChanged(2, 3, null);
191a41c174e52ec211ef950259b274b120a705af438Yigit Boyar        verifyNoMoreInteractions(mCallback);
192a41c174e52ec211ef950259b274b120a705af438Yigit Boyar    }
193a41c174e52ec211ef950259b274b120a705af438Yigit Boyar
194a41c174e52ec211ef950259b274b120a705af438Yigit Boyar    @Test
195a41c174e52ec211ef950259b274b120a705af438Yigit Boyar    public void changeBeforeOverlap() {
196a41c174e52ec211ef950259b274b120a705af438Yigit Boyar        mBatching.onChanged(3, 2, null);
197a41c174e52ec211ef950259b274b120a705af438Yigit Boyar        mBatching.onChanged(2, 2, null);
198a41c174e52ec211ef950259b274b120a705af438Yigit Boyar        mBatching.dispatchLastEvent();
199a41c174e52ec211ef950259b274b120a705af438Yigit Boyar        verify(mCallback).onChanged(2, 3, null);
200a41c174e52ec211ef950259b274b120a705af438Yigit Boyar        verifyNoMoreInteractions(mCallback);
201a41c174e52ec211ef950259b274b120a705af438Yigit Boyar    }
202a41c174e52ec211ef950259b274b120a705af438Yigit Boyar
203a41c174e52ec211ef950259b274b120a705af438Yigit Boyar    @Test
204a41c174e52ec211ef950259b274b120a705af438Yigit Boyar    public void changeSimpleWithPayload() {
205a41c174e52ec211ef950259b274b120a705af438Yigit Boyar        Object payload = new Object();
206a41c174e52ec211ef950259b274b120a705af438Yigit Boyar        mBatching.onChanged(3, 2, payload);
207a41c174e52ec211ef950259b274b120a705af438Yigit Boyar        mBatching.dispatchLastEvent();
208a41c174e52ec211ef950259b274b120a705af438Yigit Boyar        verify(mCallback).onChanged(3, 2, payload);
209a41c174e52ec211ef950259b274b120a705af438Yigit Boyar    }
210a41c174e52ec211ef950259b274b120a705af438Yigit Boyar
211a41c174e52ec211ef950259b274b120a705af438Yigit Boyar    @Test
212a41c174e52ec211ef950259b274b120a705af438Yigit Boyar    public void changeConsecutiveWithPayload() {
213a41c174e52ec211ef950259b274b120a705af438Yigit Boyar        Object payload = new Object();
214a41c174e52ec211ef950259b274b120a705af438Yigit Boyar        mBatching.onChanged(3, 2, payload);
215a41c174e52ec211ef950259b274b120a705af438Yigit Boyar        mBatching.onChanged(5, 2, payload);
216a41c174e52ec211ef950259b274b120a705af438Yigit Boyar        mBatching.dispatchLastEvent();
217a41c174e52ec211ef950259b274b120a705af438Yigit Boyar        verify(mCallback).onChanged(3, 4, payload);
218a41c174e52ec211ef950259b274b120a705af438Yigit Boyar        verifyNoMoreInteractions(mCallback);
219a41c174e52ec211ef950259b274b120a705af438Yigit Boyar    }
220a41c174e52ec211ef950259b274b120a705af438Yigit Boyar
221a41c174e52ec211ef950259b274b120a705af438Yigit Boyar    @Test
222a41c174e52ec211ef950259b274b120a705af438Yigit Boyar    public void changeTheSameWithPayload() {
223a41c174e52ec211ef950259b274b120a705af438Yigit Boyar        Object payload = new Object();
224a41c174e52ec211ef950259b274b120a705af438Yigit Boyar        mBatching.onChanged(3, 2, payload);
225a41c174e52ec211ef950259b274b120a705af438Yigit Boyar        mBatching.onChanged(4, 2, payload);
226a41c174e52ec211ef950259b274b120a705af438Yigit Boyar        mBatching.dispatchLastEvent();
227a41c174e52ec211ef950259b274b120a705af438Yigit Boyar        verify(mCallback).onChanged(3, 3, payload);
228a41c174e52ec211ef950259b274b120a705af438Yigit Boyar        verifyNoMoreInteractions(mCallback);
229a41c174e52ec211ef950259b274b120a705af438Yigit Boyar    }
230a41c174e52ec211ef950259b274b120a705af438Yigit Boyar
231a41c174e52ec211ef950259b274b120a705af438Yigit Boyar    @Test
232a41c174e52ec211ef950259b274b120a705af438Yigit Boyar    public void changeTheSame2WithPayload() {
233a41c174e52ec211ef950259b274b120a705af438Yigit Boyar        Object payload = new Object();
234a41c174e52ec211ef950259b274b120a705af438Yigit Boyar        mBatching.onChanged(3, 2, payload);
235a41c174e52ec211ef950259b274b120a705af438Yigit Boyar        mBatching.onChanged(3, 2, payload);
236a41c174e52ec211ef950259b274b120a705af438Yigit Boyar        mBatching.dispatchLastEvent();
237a41c174e52ec211ef950259b274b120a705af438Yigit Boyar        verify(mCallback).onChanged(3, 2, payload);
238a41c174e52ec211ef950259b274b120a705af438Yigit Boyar        verifyNoMoreInteractions(mCallback);
239a41c174e52ec211ef950259b274b120a705af438Yigit Boyar    }
240a41c174e52ec211ef950259b274b120a705af438Yigit Boyar
241a41c174e52ec211ef950259b274b120a705af438Yigit Boyar    @Test
242a41c174e52ec211ef950259b274b120a705af438Yigit Boyar    public void changeBeforeWithPayload() {
243a41c174e52ec211ef950259b274b120a705af438Yigit Boyar        Object payload = new Object();
244a41c174e52ec211ef950259b274b120a705af438Yigit Boyar        mBatching.onChanged(3, 2, payload);
245a41c174e52ec211ef950259b274b120a705af438Yigit Boyar        mBatching.onChanged(2, 1, payload);
246a41c174e52ec211ef950259b274b120a705af438Yigit Boyar        mBatching.dispatchLastEvent();
247a41c174e52ec211ef950259b274b120a705af438Yigit Boyar        verify(mCallback).onChanged(2, 3, payload);
248a41c174e52ec211ef950259b274b120a705af438Yigit Boyar        verifyNoMoreInteractions(mCallback);
249a41c174e52ec211ef950259b274b120a705af438Yigit Boyar    }
250a41c174e52ec211ef950259b274b120a705af438Yigit Boyar
251a41c174e52ec211ef950259b274b120a705af438Yigit Boyar    @Test
252a41c174e52ec211ef950259b274b120a705af438Yigit Boyar    public void changeBeforeOverlapWithPayload() {
253a41c174e52ec211ef950259b274b120a705af438Yigit Boyar        Object payload = new Object();
254a41c174e52ec211ef950259b274b120a705af438Yigit Boyar        mBatching.onChanged(3, 2, payload);
255a41c174e52ec211ef950259b274b120a705af438Yigit Boyar        mBatching.onChanged(2, 2, payload);
256a41c174e52ec211ef950259b274b120a705af438Yigit Boyar        mBatching.dispatchLastEvent();
257a41c174e52ec211ef950259b274b120a705af438Yigit Boyar        verify(mCallback).onChanged(2, 3, payload);
258a41c174e52ec211ef950259b274b120a705af438Yigit Boyar        verifyNoMoreInteractions(mCallback);
259a41c174e52ec211ef950259b274b120a705af438Yigit Boyar    }
260a41c174e52ec211ef950259b274b120a705af438Yigit Boyar
261a41c174e52ec211ef950259b274b120a705af438Yigit Boyar    @Test
262a41c174e52ec211ef950259b274b120a705af438Yigit Boyar    public void changeWithNewPayload() {
263a41c174e52ec211ef950259b274b120a705af438Yigit Boyar        Object payload1 = new Object();
264a41c174e52ec211ef950259b274b120a705af438Yigit Boyar        Object payload2 = new Object();
265a41c174e52ec211ef950259b274b120a705af438Yigit Boyar        mBatching.onChanged(3, 2, payload1);
266a41c174e52ec211ef950259b274b120a705af438Yigit Boyar        mBatching.onChanged(2, 2, payload2);
267a41c174e52ec211ef950259b274b120a705af438Yigit Boyar        mBatching.dispatchLastEvent();
268a41c174e52ec211ef950259b274b120a705af438Yigit Boyar        verify(mCallback).onChanged(3, 2, payload1);
269a41c174e52ec211ef950259b274b120a705af438Yigit Boyar        verify(mCallback).onChanged(2, 2, payload2);
270a41c174e52ec211ef950259b274b120a705af438Yigit Boyar        verifyNoMoreInteractions(mCallback);
271a41c174e52ec211ef950259b274b120a705af438Yigit Boyar    }
272a41c174e52ec211ef950259b274b120a705af438Yigit Boyar
273a41c174e52ec211ef950259b274b120a705af438Yigit Boyar    @Test
274a41c174e52ec211ef950259b274b120a705af438Yigit Boyar    public void changeWithEmptyPayload() {
275a41c174e52ec211ef950259b274b120a705af438Yigit Boyar        Object payload = new Object();
276a41c174e52ec211ef950259b274b120a705af438Yigit Boyar        mBatching.onChanged(3, 2, payload);
277a41c174e52ec211ef950259b274b120a705af438Yigit Boyar        mBatching.onChanged(2, 2, null);
278a41c174e52ec211ef950259b274b120a705af438Yigit Boyar        mBatching.dispatchLastEvent();
279a41c174e52ec211ef950259b274b120a705af438Yigit Boyar        verify(mCallback).onChanged(3, 2, payload);
280a41c174e52ec211ef950259b274b120a705af438Yigit Boyar        verify(mCallback).onChanged(2, 2, null);
281a41c174e52ec211ef950259b274b120a705af438Yigit Boyar        verifyNoMoreInteractions(mCallback);
282a41c174e52ec211ef950259b274b120a705af438Yigit Boyar    }
283a41c174e52ec211ef950259b274b120a705af438Yigit Boyar
284a41c174e52ec211ef950259b274b120a705af438Yigit Boyar    @Test
285a41c174e52ec211ef950259b274b120a705af438Yigit Boyar    public void changeWithEmptyPayload2() {
286a41c174e52ec211ef950259b274b120a705af438Yigit Boyar        Object payload = new Object();
287a41c174e52ec211ef950259b274b120a705af438Yigit Boyar        mBatching.onChanged(3, 2, null);
288a41c174e52ec211ef950259b274b120a705af438Yigit Boyar        mBatching.onChanged(2, 2, payload);
289a41c174e52ec211ef950259b274b120a705af438Yigit Boyar        mBatching.dispatchLastEvent();
290a41c174e52ec211ef950259b274b120a705af438Yigit Boyar        verify(mCallback).onChanged(3, 2, null);
291a41c174e52ec211ef950259b274b120a705af438Yigit Boyar        verify(mCallback).onChanged(2, 2, payload);
292a41c174e52ec211ef950259b274b120a705af438Yigit Boyar        verifyNoMoreInteractions(mCallback);
293a41c174e52ec211ef950259b274b120a705af438Yigit Boyar    }
294a41c174e52ec211ef950259b274b120a705af438Yigit Boyar}
295