diff --git a/.drone.yml b/.drone.yml
index 4409d1fc79..16e27dec66 100644
--- a/.drone.yml
+++ b/.drone.yml
@@ -66,13 +66,14 @@ steps:
ORG_GRADLE_PROJECT_coverage: ''
commands:
- scripts/checkIfRunDrone.sh $GIT_USERNAME $GIT_TOKEN $DRONE_PULL_REQUEST || exit 0
- - emulator-headless -avd android-27 -no-snapshot -gpu swiftshader_indirect -no-window -no-audio &
+ - emulator-headless -avd android-27 -no-snapshot -gpu swiftshader_indirect -no-window -no-audio -skin 500x833 &
- ./gradlew assembleGplay
- ./gradlew assembleGplayDebug
- ./wait_for_emulator.sh
- ./gradlew jacocoTestGplayDebugUnitTestReport || scripts/uploadReport.sh $LOG_USERNAME $LOG_PASSWORD $DRONE_BUILD_NUMBER "Unit" $DRONE_PULL_REQUEST $GIT_USERNAME $GIT_TOKEN
- ./gradlew installGplayDebugAndroidTest
- ./gradlew createGplayDebugCoverageReport || scripts/uploadReport.sh $LOG_USERNAME $LOG_PASSWORD $DRONE_BUILD_NUMBER "IT" $DRONE_PULL_REQUEST $GIT_USERNAME $GIT_TOKEN
+ - ./gradlew executeScreenshotTests || scripts/uploadReport.sh $LOG_USERNAME $LOG_PASSWORD $DRONE_BUILD_NUMBER "Screenshot" $DRONE_PULL_REQUEST $GIT_USERNAME $GIT_TOKEN
- ./gradlew combinedTestReport
- curl -o codecov.sh https://codecov.io/bash
- bash ./codecov.sh -t fc506ba4-33c3-43e4-a760-aada38c24fd5
diff --git a/build.gradle b/build.gradle
index b6f7bc4f74..1c3919b0c8 100644
--- a/build.gradle
+++ b/build.gradle
@@ -28,6 +28,7 @@ buildscript {
classpath "org.jetbrains.kotlin:kotlin-gradle-plugin:$kotlin_version"
classpath "io.gitlab.arturbosch.detekt:detekt-gradle-plugin:1.2.2"
classpath "commons-httpclient:commons-httpclient:3.1@jar" // remove after entire switch to lib v2
+ classpath 'com.karumi:shot:3.1.0'
}
}
@@ -39,8 +40,9 @@ apply plugin: 'kotlin-kapt'
apply plugin: 'checkstyle'
apply plugin: 'pmd'
apply plugin: 'jacoco-android'
-apply plugin: "com.github.spotbugs"
-apply plugin: "io.gitlab.arturbosch.detekt"
+apply plugin: 'com.github.spotbugs'
+apply plugin: 'io.gitlab.arturbosch.detekt'
+apply plugin: 'shot'
configurations {
ktlint
@@ -101,6 +103,11 @@ spotbugs {
toolVersion = '3.1.12'
}
+shot {
+ appId = 'com.nextcloud.client'
+ instrumentationTestTask = 'connectedGenericDebugAndroidTest'
+}
+
android {
lintOptions {
abortOnError false
@@ -126,7 +133,7 @@ android {
targetSdkVersion 29
// arguments to be passed to functional tests
- testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner"
+ testInstrumentationRunner "com.nextcloud.client.ScreenshotTestRunner"
testInstrumentationRunnerArgument "TEST_SERVER_URL", "${NC_TEST_SERVER_BASEURL}"
testInstrumentationRunnerArgument "TEST_SERVER_USERNAME", "${NC_TEST_SERVER_USERNAME}"
testInstrumentationRunnerArgument "TEST_SERVER_PASSWORD", "${NC_TEST_SERVER_PASSWORD}"
@@ -369,6 +376,7 @@ dependencies {
//androidTestImplementation "com.android.support:support-annotations:${supportLibraryVersion}"
androidTestImplementation 'tools.fastlane:screengrab:1.2.0'
implementation "org.jetbrains.kotlin:kotlin-stdlib-jdk7:$kotlin_version"
+ androidTestCompile('com.android.support.test.espresso:espresso-intents:2.2.1')
// jacocoAnt "org.jacoco:org.jacoco.ant:${jacocoVersion}"
// jacocoAgent "org.jacoco:org.jacoco.agent:${jacocoVersion}"
diff --git a/screenshots/com.nextcloud.client.TestIT_test.png b/screenshots/com.nextcloud.client.TestIT_test.png
new file mode 100644
index 0000000000..ea9be47b2e
Binary files /dev/null and b/screenshots/com.nextcloud.client.TestIT_test.png differ
diff --git a/scripts/uploadReport.sh b/scripts/uploadReport.sh
index fb1fdb0355..b5d732be30 100755
--- a/scripts/uploadReport.sh
+++ b/scripts/uploadReport.sh
@@ -13,20 +13,23 @@ ID=$3
USER=$1
PASS=$2
TYPE=$4
+FOLDER=$ID-$TYPE
set -e
if [ $TYPE = "IT" ]; then
cd build/reports/androidTests/connected/flavors/GPLAY
-else
+elif [ $TYPE = "Unit" ]; then
cd build/reports/tests/testGplayDebugUnitTest
+else
+ cd build/reports/short/verification/
fi
-find . -type d -exec curl -u $USER:$PASS -X MKCOL $URL/$ID/$(echo {} | sed s#\./##) \;
-find . -type f -exec curl -u $USER:$PASS -X PUT $URL/$ID/$(echo {} | sed s#\./##) --upload-file {} \;
+find . -type d -exec curl -u $USER:$PASS -X MKCOL $URL/$FOLDER/$(echo {} | sed s#\./##) \;
+find . -type f -exec curl -u $USER:$PASS -X PUT $URL/$FOLDER/$(echo {} | sed s#\./##) --upload-file {} \;
-echo "Uploaded failing tests to https://www.kaminsky.me/nc-dev/android-integrationTests/$ID"
+echo "Uploaded failing tests to https://www.kaminsky.me/nc-dev/android-integrationTests/$FOLDER"
-curl -u $6:$7 -X POST https://api.github.com/repos/nextcloud/android/issues/$5/comments -d "{ \"body\" : \"$TYPE test failed: https://www.kaminsky.me/nc-dev/android-integrationTests/$ID \" }"
+curl -u $6:$7 -X POST https://api.github.com/repos/nextcloud/android/issues/$5/comments -d "{ \"body\" : \"$TYPE test failed: https://www.kaminsky.me/nc-dev/android-integrationTests/$FOLDER \" }"
exit 1
diff --git a/src/androidTest/AndroidManifest.xml b/src/androidTest/AndroidManifest.xml
index 2c4b207ad8..d64cd4665e 100644
--- a/src/androidTest/AndroidManifest.xml
+++ b/src/androidTest/AndroidManifest.xml
@@ -26,7 +26,9 @@
-->
+ xmlns:android="http://schemas.android.com/apk/res/android"
+ package="${applicationId}.test"
+ android:sharedUserId="${applicationId}.uid">
diff --git a/src/androidTest/java/com/nextcloud/client/ScreenshotTestRunner.java b/src/androidTest/java/com/nextcloud/client/ScreenshotTestRunner.java
new file mode 100644
index 0000000000..1b88f899e1
--- /dev/null
+++ b/src/androidTest/java/com/nextcloud/client/ScreenshotTestRunner.java
@@ -0,0 +1,44 @@
+/*
+ *
+ * Nextcloud Android client application
+ *
+ * @author Tobias Kaminsky
+ * Copyright (C) 2019 Tobias Kaminsky
+ * Copyright (C) 2019 Nextcloud GmbH
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Affero General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU Affero General Public License for more details.
+ *
+ * You should have received a copy of the GNU Affero General Public License
+ * along with this program. If not, see .
+ */
+
+package com.nextcloud.client;
+
+import android.os.Bundle;
+
+import com.facebook.testing.screenshot.ScreenshotRunner;
+
+import androidx.test.runner.AndroidJUnitRunner;
+
+public class ScreenshotTestRunner extends AndroidJUnitRunner {
+
+ @Override
+ public void onCreate(Bundle args) {
+ super.onCreate(args);
+ ScreenshotRunner.onCreate(this, args);
+ }
+
+ @Override
+ public void finish(int resultCode, Bundle results) {
+ ScreenshotRunner.onDestroy();
+ super.finish(resultCode, results);
+ }
+}
diff --git a/src/androidTest/java/com/nextcloud/client/TestIT.java b/src/androidTest/java/com/nextcloud/client/TestIT.java
new file mode 100644
index 0000000000..d34ffc0d00
--- /dev/null
+++ b/src/androidTest/java/com/nextcloud/client/TestIT.java
@@ -0,0 +1,68 @@
+/*
+ *
+ * Nextcloud Android client application
+ *
+ * @author Tobias Kaminsky
+ * Copyright (C) 2019 Tobias Kaminsky
+ * Copyright (C) 2019 Nextcloud GmbH
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Affero General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU Affero General Public License for more details.
+ *
+ * You should have received a copy of the GNU Affero General Public License
+ * along with this program. If not, see .
+ */
+
+package com.nextcloud.client;
+
+import android.Manifest;
+import android.app.Activity;
+
+import com.facebook.testing.screenshot.Screenshot;
+import com.nextcloud.client.onboarding.FirstRunActivity;
+import com.owncloud.android.AbstractIT;
+import com.owncloud.android.ui.activity.FileDisplayActivity;
+
+import org.junit.Rule;
+import org.junit.Test;
+
+import androidx.test.core.app.ActivityScenario;
+import androidx.test.espresso.Espresso;
+import androidx.test.espresso.NoActivityResumedException;
+import androidx.test.espresso.intent.rule.IntentsTestRule;
+import androidx.test.rule.GrantPermissionRule;
+
+
+public class TestIT extends AbstractIT {
+ @Rule public IntentsTestRule activityRule =
+ new IntentsTestRule<>(FirstRunActivity.class, true, false);
+
+ @Rule
+ public final GrantPermissionRule permissionRule = GrantPermissionRule.grant(
+ Manifest.permission.WRITE_EXTERNAL_STORAGE);
+
+ @Test
+ public void test() throws InterruptedException {
+ Activity test = activityRule.launchActivity(null);
+
+ Screenshot.snapActivity(test).record();
+ }
+
+ private void openOverflowMenu() throws InterruptedException {
+ try {
+ Espresso.openContextualActionModeOverflowMenu();
+ } catch (NoActivityResumedException e) {
+ ActivityScenario.launch(FileDisplayActivity.class);
+ Thread.sleep(1000);
+ Espresso.openContextualActionModeOverflowMenu();
+ }
+ }
+
+}
diff --git a/src/androidTest/java/com/nextcloud/client/account/UserAccountManagerImplTest.java b/src/androidTest/java/com/nextcloud/client/account/UserAccountManagerImplTest.java
index bc2a32f189..bf599b8ddc 100644
--- a/src/androidTest/java/com/nextcloud/client/account/UserAccountManagerImplTest.java
+++ b/src/androidTest/java/com/nextcloud/client/account/UserAccountManagerImplTest.java
@@ -41,7 +41,7 @@ public class UserAccountManagerImplTest extends AbstractIT {
boolean success = sut.migrateUserId();
assertTrue(success);
-
+
Bundle arguments = androidx.test.platform.app.InstrumentationRegistry.getArguments();
String userId = arguments.getString("TEST_SERVER_USERNAME");
diff --git a/src/androidTest/java/com/owncloud/android/util/TestSorting.java b/src/androidTest/java/com/owncloud/android/util/TestSorting.java
index acee99b892..15abaef20a 100644
--- a/src/androidTest/java/com/owncloud/android/util/TestSorting.java
+++ b/src/androidTest/java/com/owncloud/android/util/TestSorting.java
@@ -469,7 +469,6 @@ public class TestSorting {
}
-
return false;
}
}