From c08ac2744ea5e396ebaf8bf200502988dd486cbb Mon Sep 17 00:00:00 2001 From: Henrique Faria Date: Sat, 14 Jul 2018 17:01:38 +0200 Subject: [PATCH 1/3] Update robolectric to version 3.8 --- easypermissions/build.gradle | 8 +++++++- .../devrel/easypermissions/EasyPermissionsLowApiTest.java | 2 +- .../pub/devrel/easypermissions/EasyPermissionsTest.java | 2 +- 3 files changed, 9 insertions(+), 3 deletions(-) diff --git a/easypermissions/build.gradle b/easypermissions/build.gradle index 73731e5..a4ecaad 100644 --- a/easypermissions/build.gradle +++ b/easypermissions/build.gradle @@ -16,6 +16,12 @@ android { consumerProguardFiles 'proguard-rules.pro' } } + + testOptions { + unitTests { + includeAndroidResources = true + } + } } dependencies { @@ -24,7 +30,7 @@ dependencies { api "com.android.support:support-fragment:$support_library_version" testImplementation 'junit:junit:4.12' - testImplementation 'org.robolectric:robolectric:3.5.1' + testImplementation 'org.robolectric:robolectric:3.8' } apply from: 'bintray.gradle' diff --git a/easypermissions/src/test/java/pub/devrel/easypermissions/EasyPermissionsLowApiTest.java b/easypermissions/src/test/java/pub/devrel/easypermissions/EasyPermissionsLowApiTest.java index 13a430e..0870bd6 100644 --- a/easypermissions/src/test/java/pub/devrel/easypermissions/EasyPermissionsLowApiTest.java +++ b/easypermissions/src/test/java/pub/devrel/easypermissions/EasyPermissionsLowApiTest.java @@ -14,7 +14,7 @@ * Low-API (SDK = 19) tests for {@link pub.devrel.easypermissions.EasyPermissions}. */ @RunWith(RobolectricTestRunner.class) -@Config(constants = BuildConfig.class, sdk = 19) +@Config(sdk = 19) public class EasyPermissionsLowApiTest { @Test public void testHasPermissions() { diff --git a/easypermissions/src/test/java/pub/devrel/easypermissions/EasyPermissionsTest.java b/easypermissions/src/test/java/pub/devrel/easypermissions/EasyPermissionsTest.java index 8d4c20d..716a422 100644 --- a/easypermissions/src/test/java/pub/devrel/easypermissions/EasyPermissionsTest.java +++ b/easypermissions/src/test/java/pub/devrel/easypermissions/EasyPermissionsTest.java @@ -17,7 +17,7 @@ * Basic Robolectric tests for {@link pub.devrel.easypermissions.EasyPermissions}. */ @RunWith(RobolectricTestRunner.class) -@Config(constants = BuildConfig.class, sdk = 23) +@Config(sdk = 23) public class EasyPermissionsTest { @Test public void testHasPermissions() { From 0f62d0fe2fc7c32ace3a0488c5dacad342376da0 Mon Sep 17 00:00:00 2001 From: Henrique Faria Date: Sat, 14 Jul 2018 19:10:43 +0200 Subject: [PATCH 2/3] Enable codecov and refactor current tests --- .travis.yml | 4 ++- build.gradle | 1 + easypermissions/build.gradle | 10 ++++++ .../EasyPermissionsLowApiTest.java | 9 ++--- .../easypermissions/EasyPermissionsTest.java | 34 ++++++++++++------- 5 files changed, 41 insertions(+), 17 deletions(-) diff --git a/.travis.yml b/.travis.yml index a0ced18..80b64ec 100644 --- a/.travis.yml +++ b/.travis.yml @@ -21,7 +21,9 @@ android: - tools before_script: echo y | ${ANDROID_HOME}tools/bin/sdkmanager --channel=3 "tools" "platform-tools" "platforms;android-27" -script: ./gradlew build +script: ./gradlew build jacocoTestReport after_failure: - cat app/build/reports/tests/testDebugUnitTest/index.html +after_success: + - bash <(curl -s https://codecov.io/bash) diff --git a/build.gradle b/build.gradle index 89e040a..0250ebc 100644 --- a/build.gradle +++ b/build.gradle @@ -7,6 +7,7 @@ buildscript { dependencies { classpath 'com.android.tools.build:gradle:3.0.1' classpath 'com.jfrog.bintray.gradle:gradle-bintray-plugin:1.7.3' + classpath 'com.dicedmelon.gradle:jacoco-android:0.1.3' } } diff --git a/easypermissions/build.gradle b/easypermissions/build.gradle index a4ecaad..464282e 100644 --- a/easypermissions/build.gradle +++ b/easypermissions/build.gradle @@ -1,4 +1,5 @@ apply plugin: 'com.android.library' +apply plugin: 'jacoco-android' android { compileSdkVersion compileSdk @@ -11,6 +12,9 @@ android { } buildTypes { + debug { + testCoverageEnabled true + } release { minifyEnabled false consumerProguardFiles 'proguard-rules.pro' @@ -30,7 +34,13 @@ dependencies { api "com.android.support:support-fragment:$support_library_version" testImplementation 'junit:junit:4.12' + testImplementation 'com.google.truth:truth:0.42' testImplementation 'org.robolectric:robolectric:3.8' } +// Needed in order to process Robolectric tests when running JaCoCo +tasks.withType(Test) { + jacoco.includeNoLocationClasses = true +} + apply from: 'bintray.gradle' diff --git a/easypermissions/src/test/java/pub/devrel/easypermissions/EasyPermissionsLowApiTest.java b/easypermissions/src/test/java/pub/devrel/easypermissions/EasyPermissionsLowApiTest.java index 0870bd6..d834228 100644 --- a/easypermissions/src/test/java/pub/devrel/easypermissions/EasyPermissionsLowApiTest.java +++ b/easypermissions/src/test/java/pub/devrel/easypermissions/EasyPermissionsLowApiTest.java @@ -8,7 +8,7 @@ import org.robolectric.RuntimeEnvironment; import org.robolectric.annotation.Config; -import static junit.framework.Assert.assertTrue; +import static com.google.common.truth.Truth.assertThat; /** * Low-API (SDK = 19) tests for {@link pub.devrel.easypermissions.EasyPermissions}. @@ -16,10 +16,11 @@ @RunWith(RobolectricTestRunner.class) @Config(sdk = 19) public class EasyPermissionsLowApiTest { + @Test - public void testHasPermissions() { + public void shouldHavePermission_whenHasPermissionsBeforeMarshmallow() { // On low-API devices, we should always get 'true' when we call 'hasPermissions' - assertTrue(EasyPermissions.hasPermissions(RuntimeEnvironment.application, - Manifest.permission.ACCESS_COARSE_LOCATION)); + assertThat(EasyPermissions.hasPermissions(RuntimeEnvironment.application, + Manifest.permission.ACCESS_COARSE_LOCATION)).isTrue(); } } diff --git a/easypermissions/src/test/java/pub/devrel/easypermissions/EasyPermissionsTest.java b/easypermissions/src/test/java/pub/devrel/easypermissions/EasyPermissionsTest.java index 716a422..4b7e0b7 100644 --- a/easypermissions/src/test/java/pub/devrel/easypermissions/EasyPermissionsTest.java +++ b/easypermissions/src/test/java/pub/devrel/easypermissions/EasyPermissionsTest.java @@ -3,6 +3,7 @@ import android.Manifest; import android.app.Application; +import org.junit.Before; import org.junit.Test; import org.junit.runner.RunWith; import org.robolectric.RobolectricTestRunner; @@ -10,8 +11,7 @@ import org.robolectric.annotation.Config; import org.robolectric.shadows.ShadowApplication; -import static junit.framework.Assert.assertFalse; -import static junit.framework.Assert.assertTrue; +import static com.google.common.truth.Truth.assertThat; /** * Basic Robolectric tests for {@link pub.devrel.easypermissions.EasyPermissions}. @@ -19,24 +19,34 @@ @RunWith(RobolectricTestRunner.class) @Config(sdk = 23) public class EasyPermissionsTest { - @Test - public void testHasPermissions() { - Application app = RuntimeEnvironment.application; - String[] perms = new String[]{ + private Application app; + private String[] perms; + + @Before + public void setUp() { + app = RuntimeEnvironment.application; + perms = new String[]{ Manifest.permission.READ_SMS, Manifest.permission.ACCESS_FINE_LOCATION }; + } - // Wes should not have permissions before any are granted - assertFalse(EasyPermissions.hasPermissions(app, perms)); + @Test + public void shouldNotHavePermissions_whenNoPermissionsGranted() { + assertThat(EasyPermissions.hasPermissions(app, perms)).isFalse(); + } - // Granting one permission should not make the whole set appear granted + + @Test + public void shouldNotHavePermissions_whenNotAllPermissionsGranted() { ShadowApplication.getInstance().grantPermissions(perms[0]); - assertFalse(EasyPermissions.hasPermissions(app, perms)); + assertThat(EasyPermissions.hasPermissions(app, perms)).isFalse(); + } - // Granting all permissions should make the whole set granted + @Test + public void shouldHavePermissions_whenAllPermissionsGranted() { ShadowApplication.getInstance().grantPermissions(perms); - assertTrue(EasyPermissions.hasPermissions(app, perms)); + assertThat(EasyPermissions.hasPermissions(app, perms)).isTrue(); } } From 3fe3100bce8b0c9d1c9078a46da8f9504973d324 Mon Sep 17 00:00:00 2001 From: Henrique Faria Date: Sat, 14 Jul 2018 19:22:36 +0200 Subject: [PATCH 3/3] Add code coverage badge --- README.md | 8 +++++--- 1 file changed, 5 insertions(+), 3 deletions(-) diff --git a/README.md b/README.md index 1b0ac99..1c58458 100644 --- a/README.md +++ b/README.md @@ -1,4 +1,4 @@ -# EasyPermissions [![Build Status][1]][2] [![Android Weekly][3]][4] +# EasyPermissions [![Build Status][1]][2] [![Code Coverage][3]][4] [![Android Weekly][5]][6] EasyPermissions is a wrapper library to simplify basic system permissions logic when targeting Android M or higher. @@ -199,5 +199,7 @@ Rationale callbacks don't necessarily imply permission changes. To check for tho [1]: https://travis-ci.org/googlesamples/easypermissions.svg?branch=master [2]: https://travis-ci.org/googlesamples/easypermissions -[3]: https://img.shields.io/badge/Android%20Weekly-%23185-2CB3E5.svg?style=flat -[4]: http://androidweekly.net/issues/issue-185 +[3]: https://codecov.io/gh/googlesamples/easypermissions/branch/master/graph/badge.sv +[4]: https://codecov.io/gh/googlesamples/easypermissions +[5]: https://img.shields.io/badge/Android%20Weekly-%23185-2CB3E5.svg?style=flat +[6]: http://androidweekly.net/issues/issue-185