1package com.xtremelabs.robolectric.shadows;
2
3import static org.hamcrest.CoreMatchers.equalTo;
4import static org.junit.Assert.*;
5
6import com.xtremelabs.robolectric.WithTestDefaultsRunner;
7import org.junit.Test;
8import org.junit.runner.RunWith;
9
10import android.os.Bundle;
11import android.os.Handler;
12import android.os.Message;
13
14@RunWith(WithTestDefaultsRunner.class)
15public class MessageTest {
16
17    @Test
18    public void testGetDataShouldLazilyCreateBundle() throws Exception {
19        assertNotNull(new Message().getData());
20        assertTrue(new Message().getData().isEmpty());
21    }
22
23    @Test
24    public void testGetData() throws Exception {
25        Message m = new Message();
26        Bundle b = new Bundle();
27        m.setData(b);
28        assertThat(m.getData(), equalTo(b));
29    }
30
31    @Test
32    public void testPeekData() throws Exception {
33        assertNull(new Message().peekData());
34
35        Message m = new Message();
36        Bundle b = new Bundle();
37        m.setData(b);
38        assertThat(m.peekData(), equalTo(b));
39    }
40
41    @Test
42    public void testGetTarget() throws Exception {
43        Message m = new Message();
44        Handler h = new Handler();
45        m.setTarget(h);
46        assertThat(m.getTarget(), equalTo(h));
47    }
48
49    @Test
50    public void testCopyFrom() throws Exception {
51        Bundle b = new Bundle();
52        Message m = new Message();
53        m.arg1 = 10;
54        m.arg2 = 42;
55        m.obj = "obj";
56        m.what = 24;
57        m.setData(b);
58        m.setTarget(new Handler());
59        Message m2 = new Message();
60        m2.copyFrom(m);
61
62        assertThat(m2.arg1, equalTo(m.arg1));
63        assertThat(m2.arg2, equalTo(m.arg2));
64        assertThat(m2.obj, equalTo(m.obj));
65        assertThat(m2.what, equalTo(m.what));
66        assertThat(m2.getData(), equalTo(m.getData()));
67        assertNull(m2.getTarget());
68    }
69
70    @Test
71    public void testObtain() throws Exception {
72        Message m = Message.obtain();
73        assertNotNull(m);
74    }
75
76    @Test
77    public void testObtainWithHandler() throws Exception {
78        Handler h = new Handler();
79        Message m = Message.obtain(h);
80        assertThat(m.getTarget(), equalTo(h));
81    }
82
83    @Test
84    public void testObtainWithHandlerAndWhat() throws Exception {
85        Handler h = new Handler();
86        int what = 10;
87        Message m = Message.obtain(h, what);
88
89        assertThat(m.getTarget(), equalTo(h));
90        assertThat(m.what, equalTo(what));
91        assertThat(m.getTarget(), equalTo(h));
92    }
93
94    @Test
95    public void testObtainWithHandlerWhatAndObject() throws Exception {
96        Handler h = new Handler();
97        int what = 10;
98        Object obj = "test";
99        Message m = Message.obtain(h, what, obj);
100
101        assertThat(m.getTarget(), equalTo(h));
102        assertThat(m.what, equalTo(what));
103        assertThat(m.getTarget(), equalTo(h));
104        assertThat(m.obj, equalTo(obj));
105    }
106
107    @Test
108    public void testObtainWithHandlerWhatAndTwoArgs() throws Exception {
109        Handler h = new Handler();
110        int what = 2;
111        int arg1 = 3;
112        int arg2 = 5;
113        Message m = Message.obtain(h, what, arg1, arg2);
114
115        assertThat(m.getTarget(), equalTo(h));
116        assertThat(m.what, equalTo(what));
117        assertThat(m.arg1, equalTo(arg1));
118        assertThat(m.arg2, equalTo(arg2));
119    }
120
121    @Test
122    public void testObtainWithHandlerWhatTwoArgsAndObj() throws Exception {
123        Handler h = new Handler();
124        int what = 2;
125        int arg1 = 3;
126        int arg2 = 5;
127        Object obj = "test";
128        Message m = Message.obtain(h, what, arg1, arg2, obj);
129
130        assertThat(m.getTarget(), equalTo(h));
131        assertThat(m.what, equalTo(what));
132        assertThat(m.arg1, equalTo(arg1));
133        assertThat(m.arg2, equalTo(arg2));
134        assertThat(m.obj, equalTo(obj));
135    }
136
137    @Test
138    public void testObtainWithMessage() throws Exception {
139        Bundle b = new Bundle();
140        Message m = new Message();
141        m.arg1 = 10;
142        m.arg2 = 42;
143        m.obj = "obj";
144        m.what = 24;
145        m.setData(b);
146        m.setTarget(new Handler());
147        Message m2 = Message.obtain(m);
148
149        assertThat(m2.arg1, equalTo(m.arg1));
150        assertThat(m2.arg2, equalTo(m.arg2));
151        assertThat(m2.obj, equalTo(m.obj));
152        assertThat(m2.what, equalTo(m.what));
153        assertThat(m2.getData(), equalTo(m.getData()));
154        assertThat(m2.getTarget(), equalTo(m.getTarget()));
155    }
156
157    @Test
158    public void testSendToTarget() throws Exception {
159        ShadowLooper.pauseMainLooper();
160        Handler h = new Handler();
161        Message.obtain(h, 123).sendToTarget();
162        assertTrue(h.hasMessages(123));
163    }
164}
165