1 /* 2 * Copyright (C) 2021 The Android Open Source Project 3 * 4 * Licensed under the Apache License, Version 2.0 (the "License"); 5 * you may not use this file except in compliance with the License. 6 * You may obtain a copy of the License at 7 * 8 * http://www.apache.org/licenses/LICENSE-2.0 9 * 10 * Unless required by applicable law or agreed to in writing, software 11 * distributed under the License is distributed on an "AS IS" BASIS, 12 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13 * See the License for the specific language governing permissions and 14 * limitations under the License. 15 */ 16 17 package com.android.eventlib.events.broadcastreceivers; 18 19 import static com.google.common.truth.Truth.assertThat; 20 21 import android.content.BroadcastReceiver; 22 import android.content.Context; 23 import android.content.Intent; 24 25 import com.android.bedstead.nene.TestApis; 26 import com.android.eventlib.EventLogs; 27 28 import org.junit.Before; 29 import org.junit.Test; 30 import org.junit.runner.RunWith; 31 import org.junit.runners.JUnit4; 32 33 @RunWith(JUnit4.class) 34 public final class BroadcastReceivedEventTest { 35 36 private static final TestApis sTestApis = new TestApis(); 37 private static final Context sContext = sTestApis.context().instrumentedContext(); 38 private static final String STRING_VALUE = "Value"; 39 private static final String DIFFERENT_STRING_VALUE = "Value2"; 40 private static final Intent INTENT = new Intent(); 41 42 private static final String DEFAULT_BROADCAST_RECEIVER_CLASS_NAME = 43 TestBroadcastReceiver.class.getName(); 44 private static final String CUSTOM_BROADCAST_RECEIVER_CLASS_NAME = "customBroadcastReceiver"; 45 private static final String DIFFERENT_CUSTOM_ACTIVITY_CLASS_NAME = "customBroadcastReceiver2"; 46 private static final TestBroadcastReceiver BROADCAST_RECEIVER = new TestBroadcastReceiver(); 47 48 private static class TestBroadcastReceiver extends BroadcastReceiver { 49 @Override onReceive(Context context, Intent intent)50 public void onReceive(Context context, Intent intent) { 51 } 52 } 53 54 @Before setUp()55 public void setUp() { 56 EventLogs.resetLogs(); 57 } 58 59 @Test whereIntent_works()60 public void whereIntent_works() { 61 Intent intent = new Intent(); 62 intent.setAction(STRING_VALUE); 63 BroadcastReceivedEvent.logger(BROADCAST_RECEIVER, sContext, intent).log(); 64 65 EventLogs<BroadcastReceivedEvent> eventLogs = 66 BroadcastReceivedEvent.queryPackage(sContext.getPackageName()) 67 .whereIntent().action().isEqualTo(STRING_VALUE); 68 69 assertThat(eventLogs.poll().intent()).isEqualTo(intent); 70 } 71 72 @Test whereIntent_skipsNonMatching()73 public void whereIntent_skipsNonMatching() { 74 Intent intent = new Intent(); 75 intent.setAction(STRING_VALUE); 76 Intent differentIntent = new Intent(); 77 differentIntent.setAction(DIFFERENT_STRING_VALUE); 78 BroadcastReceivedEvent.logger(BROADCAST_RECEIVER, sContext, differentIntent).log(); 79 BroadcastReceivedEvent.logger(BROADCAST_RECEIVER, sContext, intent).log(); 80 81 EventLogs<BroadcastReceivedEvent> eventLogs = 82 BroadcastReceivedEvent.queryPackage(sContext.getPackageName()) 83 .whereIntent().action().isEqualTo(STRING_VALUE); 84 85 assertThat(eventLogs.poll().intent()).isEqualTo(intent); 86 } 87 88 @Test whereBroadcastReceiver_customValueOnLogger_works()89 public void whereBroadcastReceiver_customValueOnLogger_works() { 90 BroadcastReceivedEvent.logger(BROADCAST_RECEIVER, sContext, INTENT) 91 .setBroadcastReceiver(CUSTOM_BROADCAST_RECEIVER_CLASS_NAME) 92 .log(); 93 94 EventLogs<BroadcastReceivedEvent> eventLogs = 95 BroadcastReceivedEvent.queryPackage(sContext.getPackageName()) 96 .whereBroadcastReceiver().receiverClass().className().isEqualTo( 97 CUSTOM_BROADCAST_RECEIVER_CLASS_NAME); 98 99 assertThat(eventLogs.poll().broadcastReceiver().className()).isEqualTo( 100 CUSTOM_BROADCAST_RECEIVER_CLASS_NAME); 101 } 102 103 @Test whereBroadcastReceiver_customValueOnLogger_skipsNonMatching()104 public void whereBroadcastReceiver_customValueOnLogger_skipsNonMatching() { 105 BroadcastReceivedEvent.logger(BROADCAST_RECEIVER, sContext, INTENT) 106 .setBroadcastReceiver(DIFFERENT_CUSTOM_ACTIVITY_CLASS_NAME) 107 .log(); 108 BroadcastReceivedEvent.logger(BROADCAST_RECEIVER, sContext, INTENT) 109 .setBroadcastReceiver(CUSTOM_BROADCAST_RECEIVER_CLASS_NAME) 110 .log(); 111 112 EventLogs<BroadcastReceivedEvent> eventLogs = 113 BroadcastReceivedEvent.queryPackage(sContext.getPackageName()) 114 .whereBroadcastReceiver().receiverClass().className().isEqualTo( 115 CUSTOM_BROADCAST_RECEIVER_CLASS_NAME); 116 117 assertThat(eventLogs.poll().broadcastReceiver().className()).isEqualTo( 118 CUSTOM_BROADCAST_RECEIVER_CLASS_NAME); 119 } 120 121 @Test whereBroadcastReceiver_defaultValue_works()122 public void whereBroadcastReceiver_defaultValue_works() { 123 BroadcastReceivedEvent.logger(BROADCAST_RECEIVER, sContext, INTENT).log(); 124 125 EventLogs<BroadcastReceivedEvent> eventLogs = 126 BroadcastReceivedEvent.queryPackage(sContext.getPackageName()) 127 .whereBroadcastReceiver().receiverClass().className() 128 .isEqualTo(DEFAULT_BROADCAST_RECEIVER_CLASS_NAME); 129 130 assertThat(eventLogs.poll().broadcastReceiver().className()) 131 .isEqualTo(DEFAULT_BROADCAST_RECEIVER_CLASS_NAME); 132 } 133 134 @Test whereBroadcastReceiver_defaultValue_skipsNonMatching()135 public void whereBroadcastReceiver_defaultValue_skipsNonMatching() { 136 BroadcastReceivedEvent.logger(BROADCAST_RECEIVER, sContext, INTENT) 137 .setBroadcastReceiver(CUSTOM_BROADCAST_RECEIVER_CLASS_NAME) 138 .log(); 139 BroadcastReceivedEvent.logger(BROADCAST_RECEIVER, sContext, INTENT) 140 .log(); 141 142 EventLogs<BroadcastReceivedEvent> eventLogs = 143 BroadcastReceivedEvent.queryPackage(sContext.getPackageName()) 144 .whereBroadcastReceiver().receiverClass().className() 145 .isEqualTo(DEFAULT_BROADCAST_RECEIVER_CLASS_NAME); 146 147 assertThat(eventLogs.poll().broadcastReceiver().className()) 148 .isEqualTo(DEFAULT_BROADCAST_RECEIVER_CLASS_NAME); 149 } 150 151 } 152