aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorRich King <richking@google.com>2024-04-17 05:37:26 -0700
committerCopybara-Service <copybara-worker@google.com>2024-04-17 05:38:08 -0700
commitfef58ca6c1ca56fe2fd49d741fae8fd25c41f9b0 (patch)
tree7bdb621a92ffc5e40dac735537b1b99c3d0ed14e
parent27333928cda4b045448195c27c734992f9781b01 (diff)
downloadrobolectric-fef58ca6c1ca56fe2fd49d741fae8fd25c41f9b0.tar.gz
Provide builder to create EmergencyNumber instances.
As all the constuctors are annotated with @hide as such cannot be constucted in tests without reflection. PiperOrigin-RevId: 625651303
-rw-r--r--robolectric/src/test/java/org/robolectric/shadows/EmergencyNumberBuilderTest.java38
-rw-r--r--shadows/framework/src/main/java/org/robolectric/shadows/EmergencyNumberBuilder.java71
2 files changed, 109 insertions, 0 deletions
diff --git a/robolectric/src/test/java/org/robolectric/shadows/EmergencyNumberBuilderTest.java b/robolectric/src/test/java/org/robolectric/shadows/EmergencyNumberBuilderTest.java
new file mode 100644
index 000000000..f74e5a11c
--- /dev/null
+++ b/robolectric/src/test/java/org/robolectric/shadows/EmergencyNumberBuilderTest.java
@@ -0,0 +1,38 @@
+package org.robolectric.shadows;
+
+import static android.os.Build.VERSION_CODES.Q;
+import static com.google.common.truth.Truth.assertThat;
+
+import android.telephony.emergency.EmergencyNumber;
+import androidx.test.ext.junit.runners.AndroidJUnit4;
+import org.junit.Test;
+import org.junit.runner.RunWith;
+import org.robolectric.annotation.Config;
+
+/** Tests for {@link EmergencyNumberBuilder}. */
+@Config(minSdk = Q)
+@RunWith(AndroidJUnit4.class)
+public final class EmergencyNumberBuilderTest {
+
+ @Test
+ public void testBuildEmergencyNumber() {
+ EmergencyNumber emergencyNumber =
+ EmergencyNumberBuilder.newBuilder("911", "us", "30")
+ .setEmergencyServiceCategories(EmergencyNumber.EMERGENCY_SERVICE_CATEGORY_POLICE)
+ .addEmergencyUrn("urn")
+ .setEmergencyNumberSources(EmergencyNumber.EMERGENCY_NUMBER_SOURCE_DATABASE)
+ .setEmergencyCallRouting(EmergencyNumber.EMERGENCY_CALL_ROUTING_NORMAL)
+ .build();
+
+ assertThat(emergencyNumber.getNumber()).isEqualTo("911");
+ assertThat(emergencyNumber.getCountryIso()).isEqualTo("us");
+ assertThat(emergencyNumber.getMnc()).isEqualTo("30");
+ assertThat(emergencyNumber.getEmergencyServiceCategories())
+ .containsExactly(EmergencyNumber.EMERGENCY_SERVICE_CATEGORY_POLICE);
+ assertThat(emergencyNumber.getEmergencyUrns()).containsExactly("urn");
+ assertThat(emergencyNumber.getEmergencyNumberSources())
+ .containsExactly(EmergencyNumber.EMERGENCY_NUMBER_SOURCE_DATABASE);
+ assertThat(emergencyNumber.getEmergencyCallRouting())
+ .isEqualTo(EmergencyNumber.EMERGENCY_CALL_ROUTING_NORMAL);
+ }
+}
diff --git a/shadows/framework/src/main/java/org/robolectric/shadows/EmergencyNumberBuilder.java b/shadows/framework/src/main/java/org/robolectric/shadows/EmergencyNumberBuilder.java
new file mode 100644
index 000000000..45ede54c0
--- /dev/null
+++ b/shadows/framework/src/main/java/org/robolectric/shadows/EmergencyNumberBuilder.java
@@ -0,0 +1,71 @@
+package org.robolectric.shadows;
+
+import static android.os.Build.VERSION_CODES.Q;
+
+import android.annotation.RequiresApi;
+import android.telephony.emergency.EmergencyNumber;
+import android.telephony.emergency.EmergencyNumber.EmergencyCallRouting;
+import android.telephony.emergency.EmergencyNumber.EmergencyNumberSources;
+import android.telephony.emergency.EmergencyNumber.EmergencyServiceCategories;
+import java.util.ArrayList;
+import java.util.List;
+import org.robolectric.util.ReflectionHelpers;
+import org.robolectric.util.ReflectionHelpers.ClassParameter;
+
+/** Builder for {@link android.telephony.emergency.EmergencyNumber}. */
+@RequiresApi(Q)
+public class EmergencyNumberBuilder {
+
+ private final String number;
+ private final String countryIso;
+ private final String mnc;
+ private final List<String> emergencyUrns = new ArrayList<String>();
+ private int emergencyServiceCategories = EmergencyNumber.EMERGENCY_SERVICE_CATEGORY_UNSPECIFIED;
+ private int emergencyNumberSources = EmergencyNumber.EMERGENCY_NUMBER_SOURCE_DEFAULT;
+ private int emergencyCallRouting = EmergencyNumber.EMERGENCY_CALL_ROUTING_UNKNOWN;
+
+ private EmergencyNumberBuilder(String number, String countryIso, String mnc) {
+ this.number = number;
+ this.countryIso = countryIso;
+ this.mnc = mnc;
+ }
+
+ public static EmergencyNumberBuilder newBuilder(String number, String countryIso, String mnc) {
+ return new EmergencyNumberBuilder(number, countryIso, mnc);
+ }
+
+ public EmergencyNumberBuilder setEmergencyServiceCategories(
+ @EmergencyServiceCategories int emergencyServiceCategories) {
+ this.emergencyServiceCategories = emergencyServiceCategories;
+ return this;
+ }
+
+ public EmergencyNumberBuilder addEmergencyUrn(String emergencyUrn) {
+ emergencyUrns.add(emergencyUrn);
+ return this;
+ }
+
+ public EmergencyNumberBuilder setEmergencyNumberSources(
+ @EmergencyNumberSources int emergencyNumberSources) {
+ this.emergencyNumberSources = emergencyNumberSources;
+ return this;
+ }
+
+ public EmergencyNumberBuilder setEmergencyCallRouting(
+ @EmergencyCallRouting int emergencyCallRouting) {
+ this.emergencyCallRouting = emergencyCallRouting;
+ return this;
+ }
+
+ public EmergencyNumber build() {
+ return ReflectionHelpers.callConstructor(
+ EmergencyNumber.class,
+ ClassParameter.from(String.class, number),
+ ClassParameter.from(String.class, countryIso),
+ ClassParameter.from(String.class, mnc),
+ ClassParameter.from(int.class, emergencyServiceCategories),
+ ClassParameter.from(List.class, emergencyUrns),
+ ClassParameter.from(int.class, emergencyNumberSources),
+ ClassParameter.from(int.class, emergencyCallRouting));
+ }
+}