• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 package org.robolectric.shadows;
2 
3 import static com.google.common.truth.Truth.assertThat;
4 import static org.robolectric.shadows.ShadowEventLog.NULL_PLACE_HOLDER;
5 
6 import android.os.Build.VERSION_CODES;
7 import android.util.EventLog;
8 import androidx.test.ext.junit.runners.AndroidJUnit4;
9 import java.util.ArrayList;
10 import org.junit.Test;
11 import org.junit.runner.RunWith;
12 import org.robolectric.annotation.Config;
13 
14 /** Test ShadowEventLog */
15 @RunWith(AndroidJUnit4.class)
16 public class ShadowEventLogTest {
17 
18   private static final String TEST_STRING1 = "hello";
19   private static final String TEST_STRING2 = "world";
20   private static final int TEST_INT = 123;
21   private static final long TEST_LONG = 456L;
22   private static final float TEST_FLOAT = 0.789f;
23 
24   private static final int TEST_TAG = 1;
25   private static final int TEST_PROCESS_ID = 2;
26   private static final int TEST_THREAD_ID = 3;
27   private static final long TEST_TIME_NANOS = 3L;
28 
29   @Test
testAddEvent_testStringLog()30   public void testAddEvent_testStringLog() throws Exception {
31     EventLog.Event event =
32         new ShadowEventLog.EventBuilder(TEST_TAG, TEST_STRING1)
33             .setProcessId(TEST_PROCESS_ID)
34             .setThreadId(TEST_THREAD_ID)
35             .setTimeNanos(TEST_TIME_NANOS)
36             .build();
37     ShadowEventLog.addEvent(event);
38 
39     ArrayList<EventLog.Event> events = new ArrayList<>();
40     EventLog.readEvents(new int[] {TEST_TAG}, events);
41     assertThat(events).hasSize(1);
42     assertThat(events.get(0).getTag()).isEqualTo(TEST_TAG);
43     assertThat(events.get(0).getProcessId()).isEqualTo(TEST_PROCESS_ID);
44     assertThat(events.get(0).getThreadId()).isEqualTo(TEST_THREAD_ID);
45     assertThat(events.get(0).getTimeNanos()).isEqualTo(TEST_TIME_NANOS);
46     assertThat((String) events.get(0).getData()).isEqualTo(TEST_STRING1);
47   }
48 
49   @Test
testAddEvent_testIntLog()50   public void testAddEvent_testIntLog() throws Exception {
51     EventLog.Event event =
52         new ShadowEventLog.EventBuilder(TEST_TAG, TEST_INT)
53             .setProcessId(TEST_PROCESS_ID)
54             .setThreadId(TEST_THREAD_ID)
55             .setTimeNanos(TEST_TIME_NANOS)
56             .build();
57     ShadowEventLog.addEvent(event);
58 
59     ArrayList<EventLog.Event> events = new ArrayList<>();
60     EventLog.readEvents(new int[] {TEST_TAG}, events);
61     assertThat(events).hasSize(1);
62     assertThat(events.get(0).getTag()).isEqualTo(TEST_TAG);
63     assertThat(events.get(0).getProcessId()).isEqualTo(TEST_PROCESS_ID);
64     assertThat(events.get(0).getThreadId()).isEqualTo(TEST_THREAD_ID);
65     assertThat(events.get(0).getTimeNanos()).isEqualTo(TEST_TIME_NANOS);
66     assertThat((int) events.get(0).getData()).isEqualTo(TEST_INT);
67   }
68 
69   @Test
testAddEvent_testLongLog()70   public void testAddEvent_testLongLog() throws Exception {
71     EventLog.Event event =
72         new ShadowEventLog.EventBuilder(TEST_TAG, TEST_LONG)
73             .setProcessId(TEST_PROCESS_ID)
74             .setThreadId(TEST_THREAD_ID)
75             .setTimeNanos(TEST_TIME_NANOS)
76             .build();
77     ShadowEventLog.addEvent(event);
78 
79     ArrayList<EventLog.Event> events = new ArrayList<>();
80     EventLog.readEvents(new int[] {TEST_TAG}, events);
81     assertThat(events).hasSize(1);
82     assertThat(events.get(0).getTag()).isEqualTo(TEST_TAG);
83     assertThat(events.get(0).getProcessId()).isEqualTo(TEST_PROCESS_ID);
84     assertThat(events.get(0).getThreadId()).isEqualTo(TEST_THREAD_ID);
85     assertThat(events.get(0).getTimeNanos()).isEqualTo(TEST_TIME_NANOS);
86     assertThat((long) events.get(0).getData()).isEqualTo(TEST_LONG);
87   }
88 
89   @Test
testAddEvent_testFloatLog()90   public void testAddEvent_testFloatLog() throws Exception {
91     EventLog.Event event =
92         new ShadowEventLog.EventBuilder(TEST_TAG, TEST_FLOAT)
93             .setProcessId(TEST_PROCESS_ID)
94             .setThreadId(TEST_THREAD_ID)
95             .setTimeNanos(TEST_TIME_NANOS)
96             .build();
97     ShadowEventLog.addEvent(event);
98 
99     ArrayList<EventLog.Event> events = new ArrayList<>();
100     EventLog.readEvents(new int[] {TEST_TAG}, events);
101     assertThat(events).hasSize(1);
102     assertThat(events.get(0).getTag()).isEqualTo(TEST_TAG);
103     assertThat(events.get(0).getProcessId()).isEqualTo(TEST_PROCESS_ID);
104     assertThat(events.get(0).getThreadId()).isEqualTo(TEST_THREAD_ID);
105     assertThat(events.get(0).getTimeNanos()).isEqualTo(TEST_TIME_NANOS);
106     assertThat((float) events.get(0).getData()).isEqualTo(TEST_FLOAT);
107   }
108 
109   @Test
testAddEvent_testListLog()110   public void testAddEvent_testListLog() throws Exception {
111     EventLog.Event event =
112         new ShadowEventLog.EventBuilder(TEST_TAG, new String[] {TEST_STRING1, TEST_STRING2})
113             .setProcessId(TEST_PROCESS_ID)
114             .setThreadId(TEST_THREAD_ID)
115             .setTimeNanos(TEST_TIME_NANOS)
116             .build();
117     ShadowEventLog.addEvent(event);
118 
119     ArrayList<EventLog.Event> events = new ArrayList<>();
120     EventLog.readEvents(new int[] {TEST_TAG}, events);
121     assertThat(events).hasSize(1);
122     assertThat(events.get(0).getTag()).isEqualTo(TEST_TAG);
123     assertThat(events.get(0).getProcessId()).isEqualTo(TEST_PROCESS_ID);
124     assertThat(events.get(0).getThreadId()).isEqualTo(TEST_THREAD_ID);
125     assertThat(((String[]) events.get(0).getData())[0]).isEqualTo(TEST_STRING1);
126     assertThat(((String[]) events.get(0).getData())[1]).isEqualTo(TEST_STRING2);
127   }
128 
129   @Test
testWriteEvent_string()130   public void testWriteEvent_string() throws Exception {
131     int bytes = EventLog.writeEvent(TEST_TAG, TEST_STRING1);
132     assertThat(bytes).isEqualTo(Integer.BYTES + TEST_STRING1.length());
133 
134     ArrayList<EventLog.Event> events = new ArrayList<>();
135     EventLog.readEvents(new int[] {TEST_TAG}, events);
136     assertThat(events).hasSize(1);
137     assertThat(events.get(0).getTag()).isEqualTo(TEST_TAG);
138     assertThat((String) events.get(0).getData()).isEqualTo(TEST_STRING1);
139   }
140 
141   @Test
testWriteEvent_nullString()142   public void testWriteEvent_nullString() throws Exception {
143     int bytes = EventLog.writeEvent(TEST_TAG, (String) null);
144     assertThat(bytes).isEqualTo(Integer.BYTES + NULL_PLACE_HOLDER.length());
145 
146     ArrayList<EventLog.Event> events = new ArrayList<>();
147     EventLog.readEvents(new int[] {TEST_TAG}, events);
148     assertThat(events).hasSize(1);
149     assertThat(events.get(0).getTag()).isEqualTo(TEST_TAG);
150     assertThat((String) events.get(0).getData()).isEqualTo(NULL_PLACE_HOLDER);
151   }
152 
153   @Test
testWriteEvent_int()154   public void testWriteEvent_int() throws Exception {
155     int bytes = EventLog.writeEvent(TEST_TAG, TEST_INT);
156     assertThat(bytes).isEqualTo(Integer.BYTES + Integer.BYTES);
157 
158     ArrayList<EventLog.Event> events = new ArrayList<>();
159     EventLog.readEvents(new int[] {TEST_TAG}, events);
160 
161     assertThat(events).hasSize(1);
162     assertThat(events.get(0).getTag()).isEqualTo(TEST_TAG);
163     assertThat((int) events.get(0).getData()).isEqualTo(TEST_INT);
164   }
165 
166   @Test
testWriteEvent_list()167   public void testWriteEvent_list() throws Exception {
168     int bytes = EventLog.writeEvent(TEST_TAG, TEST_STRING1, TEST_STRING2);
169     assertThat(bytes).isEqualTo(Integer.BYTES + 2 * Integer.BYTES);
170 
171     ArrayList<EventLog.Event> events = new ArrayList<>();
172     EventLog.readEvents(new int[] {TEST_TAG}, events);
173     assertThat(events).hasSize(1);
174     assertThat(events.get(0).getTag()).isEqualTo(TEST_TAG);
175     assertThat((Object[]) events.get(0).getData())
176         .asList()
177         .containsExactly(TEST_STRING1, TEST_STRING2)
178         .inOrder();
179   }
180 
181   @Test
testWriteEvent_nullList()182   public void testWriteEvent_nullList() throws Exception {
183     int bytes = EventLog.writeEvent(TEST_TAG, (Object[]) null);
184     assertThat(bytes).isEqualTo(Integer.BYTES + NULL_PLACE_HOLDER.length());
185 
186     ArrayList<EventLog.Event> events = new ArrayList<>();
187     EventLog.readEvents(new int[] {TEST_TAG}, events);
188     assertThat(events).hasSize(1);
189     assertThat(events.get(0).getTag()).isEqualTo(TEST_TAG);
190     assertThat((String) events.get(0).getData()).isEqualTo(NULL_PLACE_HOLDER);
191   }
192 
193   @Test
194   @Config(minSdk = VERSION_CODES.M)
testWriteEvent_float()195   public void testWriteEvent_float() throws Exception {
196     int bytes = EventLog.writeEvent(TEST_TAG, TEST_FLOAT);
197     assertThat(bytes).isEqualTo(Integer.BYTES + Float.BYTES);
198 
199     ArrayList<EventLog.Event> events = new ArrayList<>();
200     EventLog.readEvents(new int[] {TEST_TAG}, events);
201     assertThat(events).hasSize(1);
202     assertThat(events.get(0).getTag()).isEqualTo(TEST_TAG);
203     assertThat((float) events.get(0).getData()).isEqualTo(TEST_FLOAT);
204   }
205 
206   @Test
testWriteEvent_long()207   public void testWriteEvent_long() throws Exception {
208     int bytes = EventLog.writeEvent(TEST_TAG, TEST_LONG);
209     assertThat(bytes).isEqualTo(Integer.BYTES + Long.BYTES);
210 
211     ArrayList<EventLog.Event> events = new ArrayList<>();
212     EventLog.readEvents(new int[] {TEST_TAG}, events);
213     assertThat(events).hasSize(1);
214     assertThat(events.get(0).getTag()).isEqualTo(TEST_TAG);
215     assertThat((long) events.get(0).getData()).isEqualTo(TEST_LONG);
216   }
217 }
218