diff options
author | Rich King <richking@google.com> | 2024-04-17 05:37:26 -0700 |
---|---|---|
committer | Copybara-Service <copybara-worker@google.com> | 2024-04-17 05:38:08 -0700 |
commit | fef58ca6c1ca56fe2fd49d741fae8fd25c41f9b0 (patch) | |
tree | 7bdb621a92ffc5e40dac735537b1b99c3d0ed14e | |
parent | 27333928cda4b045448195c27c734992f9781b01 (diff) | |
download | robolectric-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.java | 38 | ||||
-rw-r--r-- | shadows/framework/src/main/java/org/robolectric/shadows/EmergencyNumberBuilder.java | 71 |
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)); + } +} |