OSDN Git Service

Load regulatory info from /data/misc
[android-x86/packages-apps-Settings.git] / tests / unit / src / com / android / settings / RegulatoryInfoDisplayActivityTest.java
index 70087ae..b1d94d4 100644 (file)
 
 package com.android.settings;
 
-import static android.support.test.espresso.Espresso.onView;
-import static android.support.test.espresso.assertion.ViewAssertions.matches;
-import static android.support.test.espresso.matcher.RootMatchers.isDialog;
-import static android.support.test.espresso.matcher.ViewMatchers.isDisplayed;
-import static android.support.test.espresso.matcher.ViewMatchers.withId;
-import static junit.framework.Assert.fail;
-
 import android.app.Instrumentation;
+import android.app.UiAutomation;
 import android.content.Context;
 import android.content.Intent;
 import android.content.pm.ResolveInfo;
+import android.graphics.Bitmap;
 import android.support.test.InstrumentationRegistry;
 import android.support.test.filters.SmallTest;
 import android.support.test.runner.AndroidJUnit4;
+import android.util.Log;
 
 import org.junit.Before;
 import org.junit.Test;
 import org.junit.runner.RunWith;
 
+import java.io.File;
+import java.io.FileOutputStream;
+import java.io.IOException;
+
+import static android.support.test.espresso.Espresso.onView;
+import static android.support.test.espresso.assertion.ViewAssertions.matches;
+import static android.support.test.espresso.matcher.RootMatchers.isDialog;
+import static android.support.test.espresso.matcher.ViewMatchers.isDisplayed;
+import static android.support.test.espresso.matcher.ViewMatchers.withId;
+import static junit.framework.Assert.fail;
+
 @RunWith(AndroidJUnit4.class)
 @SmallTest
 public class RegulatoryInfoDisplayActivityTest {
+    private static final String TAG = "RegulatoryInfoTest";
 
     private Instrumentation mInstrumentation;
     private Intent mRegulatoryInfoIntent;
+    private UiAutomation mUiAutomation;
 
     @Before
     public void setUp() {
         mInstrumentation = InstrumentationRegistry.getInstrumentation();
+        mUiAutomation = InstrumentationRegistry.getInstrumentation().getUiAutomation();
         mRegulatoryInfoIntent = new Intent("android.settings.SHOW_REGULATORY_INFO")
                 .addCategory(Intent.CATEGORY_DEFAULT)
                 .setPackage(mInstrumentation.getTargetContext().getPackageName());
@@ -88,4 +98,55 @@ public class RegulatoryInfoDisplayActivityTest {
                 .check(matches(isDisplayed()));
     }
 
+    @Test
+    public void launchRegulatoryInfo_withInfoImage_shouldDisplay() throws IOException {
+        // TODO: Remove "setenforce 0" when selinux rules is updated to give read permission for
+        // regulatory info.
+        mUiAutomation.executeShellCommand("setenforce 0");
+
+        final boolean tempFileCreated = ensureRegulatoryInfoImageExists();
+        try {
+            final Context context = mInstrumentation.getTargetContext();
+            final boolean hasRegulatoryInfo = context.getResources()
+                    .getBoolean(R.bool.config_show_regulatory_info);
+
+            if (!hasRegulatoryInfo) {
+                return;
+            }
+            // Launch intent
+            mInstrumentation.startActivitySync(mRegulatoryInfoIntent);
+
+            onView(withId(R.id.regulatoryInfo))
+                    .inRoot(isDialog())
+                    .check(matches(isDisplayed()));
+        } finally {
+            if (tempFileCreated) {
+                final String filename =
+                        RegulatoryInfoDisplayActivity.getRegulatoryInfoImageFileName();
+                new File(filename).delete();
+                Log.d(TAG, "Deleting temp file " + filename);
+            }
+        }
+    }
+
+    /**
+     * Ensures regulatory label image exists on disk.
+     *
+     * @return true if a test image is created.
+     */
+    private boolean ensureRegulatoryInfoImageExists() throws IOException {
+        final String filename = RegulatoryInfoDisplayActivity.getRegulatoryInfoImageFileName();
+        if (new File(filename).exists()) {
+            return false;
+        }
+        Log.d(TAG, "Creating temp file " + filename);
+        final Bitmap bitmap = Bitmap.createBitmap(400 /* width */, 400 /* height */,
+                Bitmap.Config.ARGB_8888);
+        final FileOutputStream out = new FileOutputStream(filename);
+        bitmap.compress(Bitmap.CompressFormat.PNG, 100 /* quality */, out);
+        out.close();
+        return true;
+    }
+
+
 }