1a1470623b0f7c52c9e3985012bf9daeb692d7bccVladislav Kaznacheev/*
2a1470623b0f7c52c9e3985012bf9daeb692d7bccVladislav Kaznacheev * Copyright (C) 2015 The Android Open Source Project
3a1470623b0f7c52c9e3985012bf9daeb692d7bccVladislav Kaznacheev *
4a1470623b0f7c52c9e3985012bf9daeb692d7bccVladislav Kaznacheev * Licensed under the Apache License, Version 2.0 (the "License");
5a1470623b0f7c52c9e3985012bf9daeb692d7bccVladislav Kaznacheev * you may not use this file except in compliance with the License.
6a1470623b0f7c52c9e3985012bf9daeb692d7bccVladislav Kaznacheev * You may obtain a copy of the License at
7a1470623b0f7c52c9e3985012bf9daeb692d7bccVladislav Kaznacheev *
8a1470623b0f7c52c9e3985012bf9daeb692d7bccVladislav Kaznacheev *      http://www.apache.org/licenses/LICENSE-2.0
9a1470623b0f7c52c9e3985012bf9daeb692d7bccVladislav Kaznacheev *
10a1470623b0f7c52c9e3985012bf9daeb692d7bccVladislav Kaznacheev * Unless required by applicable law or agreed to in writing, software
11a1470623b0f7c52c9e3985012bf9daeb692d7bccVladislav Kaznacheev * distributed under the License is distributed on an "AS IS" BASIS,
12a1470623b0f7c52c9e3985012bf9daeb692d7bccVladislav Kaznacheev * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13a1470623b0f7c52c9e3985012bf9daeb692d7bccVladislav Kaznacheev * See the License for the specific language governing permissions and
14a1470623b0f7c52c9e3985012bf9daeb692d7bccVladislav Kaznacheev * limitations under the License.
15a1470623b0f7c52c9e3985012bf9daeb692d7bccVladislav Kaznacheev */
16a1470623b0f7c52c9e3985012bf9daeb692d7bccVladislav Kaznacheev
17a1470623b0f7c52c9e3985012bf9daeb692d7bccVladislav Kaznacheevpackage android.support.v7.util;
18a1470623b0f7c52c9e3985012bf9daeb692d7bccVladislav Kaznacheev
19a1470623b0f7c52c9e3985012bf9daeb692d7bccVladislav Kaznacheevimport android.support.test.runner.AndroidJUnit4;
20f1b288ec2104488f4a92e911b0ab80c8f0f3e9d1Yigit Boyarimport android.test.suitebuilder.annotation.SmallTest;
21a1470623b0f7c52c9e3985012bf9daeb692d7bccVladislav Kaznacheev
22a1470623b0f7c52c9e3985012bf9daeb692d7bccVladislav Kaznacheevimport org.junit.Before;
23a1470623b0f7c52c9e3985012bf9daeb692d7bccVladislav Kaznacheevimport org.junit.Test;
24a1470623b0f7c52c9e3985012bf9daeb692d7bccVladislav Kaznacheevimport org.junit.runner.RunWith;
25a1470623b0f7c52c9e3985012bf9daeb692d7bccVladislav Kaznacheev
26a1470623b0f7c52c9e3985012bf9daeb692d7bccVladislav Kaznacheevimport static org.hamcrest.CoreMatchers.is;
27a1470623b0f7c52c9e3985012bf9daeb692d7bccVladislav Kaznacheevimport static org.hamcrest.CoreMatchers.nullValue;
28a1470623b0f7c52c9e3985012bf9daeb692d7bccVladislav Kaznacheevimport static org.hamcrest.CoreMatchers.sameInstance;
29a1470623b0f7c52c9e3985012bf9daeb692d7bccVladislav Kaznacheevimport static org.hamcrest.MatcherAssert.assertThat;
30a1470623b0f7c52c9e3985012bf9daeb692d7bccVladislav Kaznacheev
31a1470623b0f7c52c9e3985012bf9daeb692d7bccVladislav Kaznacheev@RunWith(AndroidJUnit4.class)
32f1b288ec2104488f4a92e911b0ab80c8f0f3e9d1Yigit Boyar@SmallTest
33a1470623b0f7c52c9e3985012bf9daeb692d7bccVladislav Kaznacheevpublic class MessageQueueTest {
34a1470623b0f7c52c9e3985012bf9daeb692d7bccVladislav Kaznacheev    MessageThreadUtil.MessageQueue mQueue;
35a1470623b0f7c52c9e3985012bf9daeb692d7bccVladislav Kaznacheev
36a1470623b0f7c52c9e3985012bf9daeb692d7bccVladislav Kaznacheev    @Before
37a1470623b0f7c52c9e3985012bf9daeb692d7bccVladislav Kaznacheev    public void setUp() throws Exception {
38a1470623b0f7c52c9e3985012bf9daeb692d7bccVladislav Kaznacheev        mQueue = new MessageThreadUtil.MessageQueue();
39a1470623b0f7c52c9e3985012bf9daeb692d7bccVladislav Kaznacheev    }
40a1470623b0f7c52c9e3985012bf9daeb692d7bccVladislav Kaznacheev
41a1470623b0f7c52c9e3985012bf9daeb692d7bccVladislav Kaznacheev    @Test
420a017072206f93474ccd2706e7983c2ff778b904Yigit Boyar    public void allArguments() {
43a1470623b0f7c52c9e3985012bf9daeb692d7bccVladislav Kaznacheev        String data = "data";
44a1470623b0f7c52c9e3985012bf9daeb692d7bccVladislav Kaznacheev        mQueue.sendMessage(MessageThreadUtil.SyncQueueItem.obtainMessage(
45a1470623b0f7c52c9e3985012bf9daeb692d7bccVladislav Kaznacheev                0, 1, 2, 3, 4, 5, data));
46a1470623b0f7c52c9e3985012bf9daeb692d7bccVladislav Kaznacheev
47a1470623b0f7c52c9e3985012bf9daeb692d7bccVladislav Kaznacheev        MessageThreadUtil.SyncQueueItem msg = mQueue.next();
48a1470623b0f7c52c9e3985012bf9daeb692d7bccVladislav Kaznacheev        assertThat(msg.what, is(0));
49a1470623b0f7c52c9e3985012bf9daeb692d7bccVladislav Kaznacheev        assertThat(msg.arg1, is(1));
50a1470623b0f7c52c9e3985012bf9daeb692d7bccVladislav Kaznacheev        assertThat(msg.arg2, is(2));
51a1470623b0f7c52c9e3985012bf9daeb692d7bccVladislav Kaznacheev        assertThat(msg.arg3, is(3));
52a1470623b0f7c52c9e3985012bf9daeb692d7bccVladislav Kaznacheev        assertThat(msg.arg4, is(4));
53a1470623b0f7c52c9e3985012bf9daeb692d7bccVladislav Kaznacheev        assertThat(msg.arg5, is(5));
54a1470623b0f7c52c9e3985012bf9daeb692d7bccVladislav Kaznacheev        assertThat((String)msg.data, sameInstance(data));
55a1470623b0f7c52c9e3985012bf9daeb692d7bccVladislav Kaznacheev    }
56a1470623b0f7c52c9e3985012bf9daeb692d7bccVladislav Kaznacheev
57a1470623b0f7c52c9e3985012bf9daeb692d7bccVladislav Kaznacheev    @Test
580a017072206f93474ccd2706e7983c2ff778b904Yigit Boyar    public void sendInOrder() {
59a1470623b0f7c52c9e3985012bf9daeb692d7bccVladislav Kaznacheev        mQueue.sendMessage(obtainMessage(1, 2));
60a1470623b0f7c52c9e3985012bf9daeb692d7bccVladislav Kaznacheev        mQueue.sendMessage(obtainMessage(3, 4));
61a1470623b0f7c52c9e3985012bf9daeb692d7bccVladislav Kaznacheev        mQueue.sendMessage(obtainMessage(5, 6));
62a1470623b0f7c52c9e3985012bf9daeb692d7bccVladislav Kaznacheev
63a1470623b0f7c52c9e3985012bf9daeb692d7bccVladislav Kaznacheev        MessageThreadUtil.SyncQueueItem msg = mQueue.next();
64a1470623b0f7c52c9e3985012bf9daeb692d7bccVladislav Kaznacheev        assertThat(msg.what, is(1));
65a1470623b0f7c52c9e3985012bf9daeb692d7bccVladislav Kaznacheev        assertThat(msg.arg1, is(2));
66a1470623b0f7c52c9e3985012bf9daeb692d7bccVladislav Kaznacheev
67a1470623b0f7c52c9e3985012bf9daeb692d7bccVladislav Kaznacheev        msg = mQueue.next();
68a1470623b0f7c52c9e3985012bf9daeb692d7bccVladislav Kaznacheev        assertThat(msg.what, is(3));
69a1470623b0f7c52c9e3985012bf9daeb692d7bccVladislav Kaznacheev        assertThat(msg.arg1, is(4));
70a1470623b0f7c52c9e3985012bf9daeb692d7bccVladislav Kaznacheev
71a1470623b0f7c52c9e3985012bf9daeb692d7bccVladislav Kaznacheev        msg = mQueue.next();
72a1470623b0f7c52c9e3985012bf9daeb692d7bccVladislav Kaznacheev        assertThat(msg.what, is(5));
73a1470623b0f7c52c9e3985012bf9daeb692d7bccVladislav Kaznacheev        assertThat(msg.arg1, is(6));
74a1470623b0f7c52c9e3985012bf9daeb692d7bccVladislav Kaznacheev
75a1470623b0f7c52c9e3985012bf9daeb692d7bccVladislav Kaznacheev        msg = mQueue.next();
76a1470623b0f7c52c9e3985012bf9daeb692d7bccVladislav Kaznacheev        assertThat(msg, nullValue());
77a1470623b0f7c52c9e3985012bf9daeb692d7bccVladislav Kaznacheev    }
78a1470623b0f7c52c9e3985012bf9daeb692d7bccVladislav Kaznacheev
79a1470623b0f7c52c9e3985012bf9daeb692d7bccVladislav Kaznacheev    @Test
800a017072206f93474ccd2706e7983c2ff778b904Yigit Boyar    public void sendAtFront() {
81a1470623b0f7c52c9e3985012bf9daeb692d7bccVladislav Kaznacheev        mQueue.sendMessage(obtainMessage(1, 2));
82a1470623b0f7c52c9e3985012bf9daeb692d7bccVladislav Kaznacheev        mQueue.sendMessageAtFrontOfQueue(obtainMessage(3, 4));
83a1470623b0f7c52c9e3985012bf9daeb692d7bccVladislav Kaznacheev        mQueue.sendMessage(obtainMessage(5, 6));
84a1470623b0f7c52c9e3985012bf9daeb692d7bccVladislav Kaznacheev
85a1470623b0f7c52c9e3985012bf9daeb692d7bccVladislav Kaznacheev        MessageThreadUtil.SyncQueueItem msg = mQueue.next();
86a1470623b0f7c52c9e3985012bf9daeb692d7bccVladislav Kaznacheev        assertThat(msg.what, is(3));
87a1470623b0f7c52c9e3985012bf9daeb692d7bccVladislav Kaznacheev        assertThat(msg.arg1, is(4));
88a1470623b0f7c52c9e3985012bf9daeb692d7bccVladislav Kaznacheev
89a1470623b0f7c52c9e3985012bf9daeb692d7bccVladislav Kaznacheev        msg = mQueue.next();
90a1470623b0f7c52c9e3985012bf9daeb692d7bccVladislav Kaznacheev        assertThat(msg.what, is(1));
91a1470623b0f7c52c9e3985012bf9daeb692d7bccVladislav Kaznacheev        assertThat(msg.arg1, is(2));
92a1470623b0f7c52c9e3985012bf9daeb692d7bccVladislav Kaznacheev
93a1470623b0f7c52c9e3985012bf9daeb692d7bccVladislav Kaznacheev        msg = mQueue.next();
94a1470623b0f7c52c9e3985012bf9daeb692d7bccVladislav Kaznacheev        assertThat(msg.what, is(5));
95a1470623b0f7c52c9e3985012bf9daeb692d7bccVladislav Kaznacheev        assertThat(msg.arg1, is(6));
96a1470623b0f7c52c9e3985012bf9daeb692d7bccVladislav Kaznacheev
97a1470623b0f7c52c9e3985012bf9daeb692d7bccVladislav Kaznacheev        msg = mQueue.next();
98a1470623b0f7c52c9e3985012bf9daeb692d7bccVladislav Kaznacheev        assertThat(msg, nullValue());
99a1470623b0f7c52c9e3985012bf9daeb692d7bccVladislav Kaznacheev    }
100a1470623b0f7c52c9e3985012bf9daeb692d7bccVladislav Kaznacheev
101a1470623b0f7c52c9e3985012bf9daeb692d7bccVladislav Kaznacheev    @Test
1020a017072206f93474ccd2706e7983c2ff778b904Yigit Boyar    public void remove() {
103a1470623b0f7c52c9e3985012bf9daeb692d7bccVladislav Kaznacheev        mQueue.sendMessage(obtainMessage(1, 0));
104a1470623b0f7c52c9e3985012bf9daeb692d7bccVladislav Kaznacheev        mQueue.sendMessage(obtainMessage(2, 0));
105a1470623b0f7c52c9e3985012bf9daeb692d7bccVladislav Kaznacheev        mQueue.sendMessage(obtainMessage(1, 0));
106a1470623b0f7c52c9e3985012bf9daeb692d7bccVladislav Kaznacheev        mQueue.sendMessage(obtainMessage(2, 1));
107a1470623b0f7c52c9e3985012bf9daeb692d7bccVladislav Kaznacheev        mQueue.sendMessage(obtainMessage(3, 0));
108a1470623b0f7c52c9e3985012bf9daeb692d7bccVladislav Kaznacheev        mQueue.sendMessage(obtainMessage(1, 0));
109a1470623b0f7c52c9e3985012bf9daeb692d7bccVladislav Kaznacheev
110a1470623b0f7c52c9e3985012bf9daeb692d7bccVladislav Kaznacheev        mQueue.removeMessages(1);
111a1470623b0f7c52c9e3985012bf9daeb692d7bccVladislav Kaznacheev
112a1470623b0f7c52c9e3985012bf9daeb692d7bccVladislav Kaznacheev        MessageThreadUtil.SyncQueueItem msg = mQueue.next();
113a1470623b0f7c52c9e3985012bf9daeb692d7bccVladislav Kaznacheev        assertThat(msg.what, is(2));
114a1470623b0f7c52c9e3985012bf9daeb692d7bccVladislav Kaznacheev        assertThat(msg.arg1, is(0));
115a1470623b0f7c52c9e3985012bf9daeb692d7bccVladislav Kaznacheev
116a1470623b0f7c52c9e3985012bf9daeb692d7bccVladislav Kaznacheev        msg = mQueue.next();
117a1470623b0f7c52c9e3985012bf9daeb692d7bccVladislav Kaznacheev        assertThat(msg.what, is(2));
118a1470623b0f7c52c9e3985012bf9daeb692d7bccVladislav Kaznacheev        assertThat(msg.arg1, is(1));
119a1470623b0f7c52c9e3985012bf9daeb692d7bccVladislav Kaznacheev
120a1470623b0f7c52c9e3985012bf9daeb692d7bccVladislav Kaznacheev        msg = mQueue.next();
121a1470623b0f7c52c9e3985012bf9daeb692d7bccVladislav Kaznacheev        assertThat(msg.what, is(3));
122a1470623b0f7c52c9e3985012bf9daeb692d7bccVladislav Kaznacheev        assertThat(msg.arg1, is(0));
123a1470623b0f7c52c9e3985012bf9daeb692d7bccVladislav Kaznacheev
124a1470623b0f7c52c9e3985012bf9daeb692d7bccVladislav Kaznacheev        msg = mQueue.next();
125a1470623b0f7c52c9e3985012bf9daeb692d7bccVladislav Kaznacheev        assertThat(msg, nullValue());
126a1470623b0f7c52c9e3985012bf9daeb692d7bccVladislav Kaznacheev    }
127a1470623b0f7c52c9e3985012bf9daeb692d7bccVladislav Kaznacheev
128a1470623b0f7c52c9e3985012bf9daeb692d7bccVladislav Kaznacheev    private MessageThreadUtil.SyncQueueItem obtainMessage(int what, int arg) {
129a1470623b0f7c52c9e3985012bf9daeb692d7bccVladislav Kaznacheev        return MessageThreadUtil.SyncQueueItem.obtainMessage(what, arg, null);
130a1470623b0f7c52c9e3985012bf9daeb692d7bccVladislav Kaznacheev    }
131a1470623b0f7c52c9e3985012bf9daeb692d7bccVladislav Kaznacheev}
132