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