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