Snap for 4683893 from d3edbc17fb33b5ee93c5ba370397612f069352c4 to pi-release

Change-Id: Id9644b923e6e7e4530377f23b47afb623f100ec3
diff --git a/tests/AndroidManifest.xml b/tests/AndroidManifest.xml
index 0405820..4c00887 100644
--- a/tests/AndroidManifest.xml
+++ b/tests/AndroidManifest.xml
@@ -18,8 +18,15 @@
         package="com.android.providers.blockednumber.tests"
         android:sharedUserId="android.uid.shared">
 
-    <application>
-        <uses-library android:name="android.test.runner" />
+    <application android:name="com.android.providers.blockednumber.TestApplication">
+      <uses-library android:name="android.test.runner" />
+      <activity android:label="BlockedNumberProviderTest"
+                android:name="BlockedNumberProviderTest">
+        <intent-filter>
+          <action android:name="android.intent.action.MAIN" />
+          <category android:name="android.intent.category.LAUNCHER"/>
+        </intent-filter>
+      </activity>
     </application>
 
     <instrumentation
diff --git a/tests/AndroidTest.xml b/tests/AndroidTest.xml
new file mode 100644
index 0000000..5b507b2
--- /dev/null
+++ b/tests/AndroidTest.xml
@@ -0,0 +1,27 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!-- Copyright (C) 2018 The Android Open Source Project
+
+     Licensed under the Apache License, Version 2.0 (the "License");
+     you may not use this file except in compliance with the License.
+     You may obtain a copy of the License at
+
+          http://www.apache.org/licenses/LICENSE-2.0
+
+     Unless required by applicable law or agreed to in writing, software
+     distributed under the License is distributed on an "AS IS" BASIS,
+     WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+     See the License for the specific language governing permissions and
+     limitations under the License.
+-->
+<configuration description="Runs BlockedNumberProvider Test Cases.">
+    <target_preparer class="com.android.tradefed.targetprep.TestAppInstallSetup">
+        <option name="test-file-name" value="BlockedNumberProviderTest.apk" />
+    </target_preparer>
+
+    <option name="test-suite-tag" value="apct" />
+    <option name="test-tag" value="BlockedNumberProviderTest" />
+    <test class="com.android.tradefed.testtype.AndroidJUnitTest" >
+        <option name="package" value="com.android.providers.blockednumber.tests" />
+        <option name="runner" value="android.support.test.runner.AndroidJUnitRunner" />
+    </test>
+</configuration>
diff --git a/tests/src/com/android/providers/blockednumber/BlockedNumberContractTest.java b/tests/src/com/android/providers/blockednumber/BlockedNumberContractTest.java
new file mode 100644
index 0000000..89cca78
--- /dev/null
+++ b/tests/src/com/android/providers/blockednumber/BlockedNumberContractTest.java
@@ -0,0 +1,125 @@
+/*
+ * Copyright (C) 2018 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License
+ */
+
+package com.android.providers.blockednumber;
+
+import static android.provider.BlockedNumberContract.SystemContract
+        .ENHANCED_SETTING_KEY_BLOCK_PAYPHONE;
+
+import static org.mockito.ArgumentMatchers.any;
+import static org.mockito.Mockito.when;
+import static org.mockito.MockitoAnnotations.initMocks;
+
+import android.content.ContentProvider;
+import android.content.ContentResolver;
+import android.content.Context;
+import android.net.Uri;
+import android.os.Bundle;
+import android.provider.BlockedNumberContract;
+import android.test.AndroidTestCase;
+import android.test.mock.MockContentResolver;
+import android.test.suitebuilder.annotation.SmallTest;
+
+import junit.framework.TestCase;
+
+import org.junit.Before;
+import org.junit.Test;
+import org.junit.runner.RunWith;
+import org.junit.runners.JUnit4;
+import org.mockito.ArgumentMatchers;
+import org.mockito.Mock;
+import org.mockito.Mockito;
+
+/**
+ * Tests for {@link android.provider.BlockedNumberContract}.
+ */
+@RunWith(JUnit4.class)
+public class BlockedNumberContractTest extends AndroidTestCase {
+    private static final String TEST_NUMBER = "650-555-1212";
+
+    @Mock
+    private Context mMockContext;
+
+    @Mock
+    private ContentProvider mMockProvider;
+
+    private MockContentResolver mMockContentResolver = new MockContentResolver();
+
+    @Before
+    @Override
+    public void setUp() throws Exception {
+        super.setUp();
+        initMocks(this);
+        mMockContentResolver.addProvider(BlockedNumberContract.AUTHORITY_URI.toString(),
+                mMockProvider);
+        when(mMockContext.getContentResolver()).thenReturn(mMockContentResolver);
+        when(mMockProvider.call(any(), any(), any()))
+                .thenThrow(new NullPointerException());
+    }
+
+    /**
+     * Ensures a content provider crash results in a "false" response from
+     * {@link BlockedNumberContract#isBlocked(Context, String)}.
+     */
+    @SmallTest
+    @Test
+    public void testIsBlockedException() {
+        assertFalse(BlockedNumberContract.isBlocked(mMockContext, TEST_NUMBER));
+    }
+
+    /**
+     * Ensures a content provider crash results in a "false" response from
+     * {@link BlockedNumberContract#canCurrentUserBlockNumbers(Context)}.
+     */
+    @SmallTest
+    @Test
+    public void testCanUserBlockNumbersException() {
+        assertFalse(BlockedNumberContract.canCurrentUserBlockNumbers(mMockContext));
+    }
+
+    /**
+     * Ensures a content provider crash results in a "false" response from
+     * {@link BlockedNumberContract.SystemContract#shouldSystemBlockNumber(Context, String, Bundle)}
+     */
+    @SmallTest
+    @Test
+    public void testShouldSystemBlockNumberException() {
+        assertFalse(BlockedNumberContract.SystemContract.shouldSystemBlockNumber(mMockContext,
+                TEST_NUMBER, null));
+    }
+
+    /**
+     * Ensures a content provider crash results in a "false" response from
+     * {@link BlockedNumberContract.SystemContract#shouldShowEmergencyCallNotification(Context)}.
+     */
+    @SmallTest
+    @Test
+    public void testShouldShowEmergencyCallNotificationException() {
+        assertFalse(BlockedNumberContract.SystemContract.shouldShowEmergencyCallNotification(
+                mMockContext));
+    }
+
+    /**
+     * Ensures a content provider crash results in a "false" response from
+     * {@link BlockedNumberContract.SystemContract#getEnhancedBlockSetting(Context, String)}.
+     */
+    @SmallTest
+    @Test
+    public void testGetEnhancedBlockSettingException() {
+        assertFalse(BlockedNumberContract.SystemContract.getEnhancedBlockSetting(
+                mMockContext, ENHANCED_SETTING_KEY_BLOCK_PAYPHONE));
+    }
+}