2

I'm currently writing some tests for an app. If the app does not have storage permission, a fragment pops up. I know how to grant permission with "grant permission rule" but is there a method to revoke permission?

Lem
  • 31
  • 4

2 Answers2

1

No, that is not possible. Quote from https://developer.android.com/reference/android/support/test/rule/GrantPermissionRule:

Once a permission is granted it will apply for all tests running in the current Instrumentation. There is no way of revoking a permission after it was granted. Attempting to do so will crash the Instrumentation process.

What I can suggest is to wrap permission methods into some service and mock the value checking if the permission is granted

Taras Leskiv
  • 1,835
  • 15
  • 33
-1

Yes, during testing its possible...Feuby gave a somewhat correct answer to the same question in this SO 2017 question

Android revoke permission at start of each test

Repeating his code

public static boolean checkCameraPermission(MainActivity thisActivity) { return ContextCompat.checkSelfPermission(thisActivity, Manifest.permission.CAMERA) == PackageManager.PERMISSION_GRANTED; }

public static void checkAndAskCameraPermission(final MainActivity thisActivity) {

if (!checkCameraPermission(thisActivity)) {
    //No right is granted 
    // Should we show an explanation? 
    if (ActivityCompat.shouldShowRequestPermissionRationale(thisActivity,
            Manifest.permission.CAMERA)) { 

        //Open a dialog explaining why you are asking permission then when when positive button is triggered, call this line 
        ActivityCompat.requestPermissions(thisActivity,
                        new String[]{Manifest.permission.CAMERA},
                        CHECK_FOR_CAMERA_PERMISSION); 

    } else { 
        // No explanation needed, we can request the permission. 
        ActivityCompat.requestPermissions(thisActivity,
                new String[]{Manifest.permission.CAMERA},
                CHECK_FOR_CAMERA_PERMISSION); 
    } 
} 

}

Fred Grott
  • 3,505
  • 1
  • 23
  • 18
  • This is to ask for permission. I want to write a test that takes a permission away so that I can test how my app responds to it. – Lem Aug 31 '18 at 18:02