Эх сурвалжийг харах

Merge pull request #5927 from nextcloud/dependabot/gradle/com.karumi-shot-4.1.1

Bump shot from 3.1.0 to 4.1.1
Tobias Kaminsky 5 жил өмнө
parent
commit
b996cced68
76 өөрчлөгдсөн 355 нэмэгдсэн , 75 устгасан
  1. 162 13
      .drone.yml
  2. 1 1
      CONTRIBUTING.md
  3. 2 7
      build.gradle
  4. BIN
      screenshots/com.nextcloud.client.ActivitiesActivityIT_openDrawer.png
  5. BIN
      screenshots/com.nextcloud.client.ConflictsResolveActivityIT_test.png
  6. BIN
      screenshots/com.nextcloud.client.FileDisplayActivityIT_drawer.png
  7. BIN
      screenshots/com.nextcloud.client.FileDisplayActivityIT_open.png
  8. BIN
      screenshots/com.nextcloud.client.FileDisplayActivityIT_overflowMenu.png
  9. BIN
      screenshots/com.nextcloud.client.FileDisplayActivityIT_showAccounts.png
  10. BIN
      screenshots/com.nextcloud.client.FileDisplayActivityIT_showShares.png
  11. BIN
      screenshots/com.nextcloud.client.NotificationsActivityIT_openDrawer.png
  12. BIN
      screenshots/com.nextcloud.client.SettingsActivityIT_open.png
  13. BIN
      screenshots/com.nextcloud.client.SyncedFoldersActivityIT_openDrawer.png
  14. BIN
      screenshots/com.nextcloud.client.UploadListActivityActivityIT_openDrawer.png
  15. BIN
      screenshots/com.nextcloud.client.etm.EtmActivityTest_accounts.png
  16. BIN
      screenshots/com.nextcloud.client.etm.EtmActivityTest_overview.png
  17. BIN
      screenshots/com.nextcloud.client.etm.EtmActivityTest_preferences.png
  18. BIN
      screenshots/com.owncloud.android.ui.activity.ConflictsResolveActivityIT_keepBoth.png
  19. BIN
      screenshots/com.owncloud.android.ui.activity.ConflictsResolveActivityIT_keepExisting.png
  20. BIN
      screenshots/com.owncloud.android.ui.activity.ConflictsResolveActivityIT_keepNew.png
  21. BIN
      screenshots/com.owncloud.android.ui.activity.ConflictsResolveActivityIT_screenshotImages.png
  22. BIN
      screenshots/com.owncloud.android.ui.activity.ConflictsResolveActivityIT_screenshotTextFiles.png
  23. BIN
      screenshots/com.owncloud.android.ui.activity.ConflictsResolveActivityIT_test.png
  24. BIN
      screenshots/com.owncloud.android.ui.activity.ConflictsResolveActivityIT_test2.png
  25. BIN
      screenshots/com.owncloud.android.ui.activity.ManageAccountsActivityIT_open.png
  26. BIN
      screenshots/com.owncloud.android.ui.activity.ManageAccountsActivityIT_userInfoDetail.png
  27. BIN
      screenshots/com.owncloud.android.ui.dialog.SyncFileNotEnoughSpaceDialogFragmentTest_showNotEnoughSpaceDialogForFile.png
  28. BIN
      screenshots/com.owncloud.android.ui.dialog.SyncFileNotEnoughSpaceDialogFragmentTest_showNotEnoughSpaceDialogForFolder.png
  29. BIN
      screenshots/com.owncloud.android.ui.fragment.OCFileListFragmentIT_createAndShowShareToCircle.png
  30. BIN
      screenshots/com.owncloud.android.ui.fragment.OCFileListFragmentIT_createAndShowShareToGroup.png
  31. BIN
      screenshots/com.owncloud.android.ui.fragment.OCFileListFragmentIT_createAndShowShareToUser.png
  32. BIN
      screenshots/com.owncloud.android.ui.fragment.OCFileListFragmentIT_createAndShowShareViaLink.png
  33. BIN
      screenshots/com.owncloud.android.ui.preview.PreviewTextFileFragmentTest_displayJavaSnippetFile.png
  34. BIN
      screenshots/gplay/debug/com.nextcloud.client.ActivitiesActivityIT_openDrawer.png
  35. BIN
      screenshots/gplay/debug/com.nextcloud.client.FileDisplayActivityIT_drawer.png
  36. BIN
      screenshots/gplay/debug/com.nextcloud.client.FileDisplayActivityIT_open.png
  37. BIN
      screenshots/gplay/debug/com.nextcloud.client.FileDisplayActivityIT_shareToCircle.png
  38. BIN
      screenshots/gplay/debug/com.nextcloud.client.FileDisplayActivityIT_showAccounts.png
  39. BIN
      screenshots/gplay/debug/com.nextcloud.client.FileDisplayActivityIT_showShares.png
  40. 0 0
      screenshots/gplay/debug/com.nextcloud.client.FirstRunActivityIT_open.png
  41. BIN
      screenshots/gplay/debug/com.nextcloud.client.NotificationsActivityIT_openDrawer.png
  42. BIN
      screenshots/gplay/debug/com.nextcloud.client.SettingsActivityIT_open.png
  43. BIN
      screenshots/gplay/debug/com.nextcloud.client.SyncedFoldersActivityIT_openDrawer.png
  44. BIN
      screenshots/gplay/debug/com.nextcloud.client.UploadListActivityActivityIT_openDrawer.png
  45. BIN
      screenshots/gplay/debug/com.nextcloud.client.etm.EtmActivityTest_accounts.png
  46. BIN
      screenshots/gplay/debug/com.nextcloud.client.etm.EtmActivityTest_overview.png
  47. BIN
      screenshots/gplay/debug/com.nextcloud.client.etm.EtmActivityTest_preferences.png
  48. BIN
      screenshots/gplay/debug/com.owncloud.android.ui.activity.ManageAccountsActivityIT_open.png
  49. BIN
      screenshots/gplay/debug/com.owncloud.android.ui.activity.ManageAccountsActivityIT_userInfoDetail.png
  50. BIN
      screenshots/gplay/debug/com.owncloud.android.ui.fragment.OCFileListFragmentIT_createAndShowShareToCircle.png
  51. BIN
      screenshots/gplay/debug/com.owncloud.android.ui.fragment.OCFileListFragmentIT_createAndShowShareToGroup.png
  52. BIN
      screenshots/gplay/debug/com.owncloud.android.ui.fragment.OCFileListFragmentIT_createAndShowShareToUser.png
  53. BIN
      screenshots/gplay/debug/com.owncloud.android.ui.fragment.OCFileListFragmentIT_createAndShowShareViaLink.png
  54. BIN
      screenshots/gplay/debug/com.owncloud.android.ui.preview.PreviewTextFileFragmentTest_displayJavaSnippetFile.png
  55. 0 0
      screenshots/gplay/debug/com.owncloud.android.ui.preview.PreviewTextFileFragmentTest_displaySimpleTextFile.png
  56. BIN
      screenshots/gplay/debug/richworkspaces_dark.png
  57. BIN
      screenshots/gplay/debug/richworkspaces_light.png
  58. BIN
      screenshots/richworkspaces_dark.png
  59. BIN
      screenshots/richworkspaces_light.png
  60. 56 27
      scripts/updateScreenshots.sh
  61. 1 1
      scripts/wait_for_server.sh
  62. 27 2
      src/androidTest/java/com/nextcloud/client/ActivitiesActivityIT.java
  63. 11 13
      src/androidTest/java/com/nextcloud/client/FileDisplayActivityIT.java
  64. 2 0
      src/androidTest/java/com/nextcloud/client/FirstRunActivityIT.java
  65. 3 1
      src/androidTest/java/com/nextcloud/client/NotificationsActivityIT.java
  66. 2 0
      src/androidTest/java/com/nextcloud/client/SettingsActivityIT.java
  67. 3 1
      src/androidTest/java/com/nextcloud/client/SyncedFoldersActivityIT.java
  68. 3 1
      src/androidTest/java/com/nextcloud/client/UploadListActivityActivityIT.java
  69. 15 0
      src/androidTest/java/com/nextcloud/client/etm/EtmActivityTest.kt
  70. 2 3
      src/androidTest/java/com/owncloud/android/AbstractIT.java
  71. 1 2
      src/androidTest/java/com/owncloud/android/ui/activity/FolderPickerActivityIT.java
  72. 4 0
      src/androidTest/java/com/owncloud/android/ui/activity/ManageAccountsActivityIT.java
  73. 17 1
      src/androidTest/java/com/owncloud/android/ui/fragment/OCFileListFragmentIT.kt
  74. 5 2
      src/androidTest/java/com/owncloud/android/ui/preview/PreviewTextFileFragmentTest.java
  75. 1 0
      src/main/java/com/owncloud/android/MainApp.java
  76. 37 0
      src/main/java/com/owncloud/android/utils/ScreenshotTest.java

+ 162 - 13
.drone.yml

@@ -1,7 +1,7 @@
 ---
 kind: pipeline
 type: docker
-name: gplay-stable
+name: tests-stable
 
 steps:
   - name: gplay
@@ -21,15 +21,14 @@ steps:
       - 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 -skin 500x833 &
       - sed -i s'#<bool name="is_beta">false</bool>#<bool name="is_beta">true</bool>#'g src/main/res/values/setup.xml
-      - sed -i s"#server#server-stable#" gradle.properties
+      - sed -i s"#server#server#" gradle.properties
       - ./gradlew assembleGplay
       - ./gradlew assembleGplayDebug
       - scripts/wait_for_emulator.sh
       - ./gradlew jacocoTestGplayDebugUnitTestReport || scripts/uploadReport.sh $LOG_USERNAME $LOG_PASSWORD $DRONE_BUILD_NUMBER "stable-Unit" $DRONE_PULL_REQUEST $GIT_USERNAME $GIT_TOKEN
       - ./gradlew installGplayDebugAndroidTest
-      - scripts/wait_for_server.sh "server-stable"
-      - ./gradlew createGplayDebugCoverageReport || scripts/uploadReport.sh $LOG_USERNAME $LOG_PASSWORD $DRONE_BUILD_NUMBER "stable-IT" $DRONE_PULL_REQUEST $GIT_USERNAME $GIT_TOKEN
-      - ./gradlew executeScreenshotTests || scripts/uploadReport.sh $LOG_USERNAME $LOG_PASSWORD $DRONE_BUILD_NUMBER "stable-Screenshot" $DRONE_PULL_REQUEST $GIT_USERNAME $GIT_TOKEN
+      - scripts/wait_for_server.sh "server"
+      - ./gradlew createGplayDebugCoverageReport -Pandroid.testInstrumentationRunnerArguments.notAnnotation=com.owncloud.android.utils.ScreenshotTest || scripts/uploadReport.sh $LOG_USERNAME $LOG_PASSWORD $DRONE_BUILD_NUMBER "stable-IT" $DRONE_PULL_REQUEST $GIT_USERNAME $GIT_TOKEN
       - ./gradlew combinedTestReport
   - name: notify
     image: drillster/drone-email
@@ -54,10 +53,11 @@ steps:
         - master
 
 services:
-  - name: server-stable
+  - name: server
     image: nextcloudci/server:server-17 # also change in updateScreenshots.sh
     commands:
       - BRANCH='stable18' /usr/local/bin/initnc.sh
+      - echo 127.0.0.1 server >> /etc/hosts
       - su www-data -c "OC_PASS=user1 php /var/www/html/occ user:add --password-from-env --display-name='User One' user1"
       - su www-data -c "OC_PASS=user2 php /var/www/html/occ user:add --password-from-env --display-name='User Two' user2"
       - su www-data -c "OC_PASS=user3 php /var/www/html/occ user:add --password-from-env --display-name='User Three' user3"
@@ -81,7 +81,7 @@ trigger:
 ---
 kind: pipeline
 type: docker
-name: gplay-master
+name: tests-master
 
 steps:
   - name: gplay
@@ -101,15 +101,13 @@ steps:
       - 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 -skin 500x833 &
       - sed -i s'#<bool name="is_beta">false</bool>#<bool name="is_beta">true</bool>#'g src/main/res/values/setup.xml
-      - sed -i s"#server#server-master#" gradle.properties
       - ./gradlew assembleGplay
       - ./gradlew assembleGplayDebug
       - scripts/wait_for_emulator.sh
       - ./gradlew jacocoTestGplayDebugUnitTestReport || scripts/uploadReport.sh $LOG_USERNAME $LOG_PASSWORD $DRONE_BUILD_NUMBER "master-Unit" $DRONE_PULL_REQUEST $GIT_USERNAME $GIT_TOKEN
       - ./gradlew installGplayDebugAndroidTest
-      - scripts/wait_for_server.sh "server-master"
-      - ./gradlew createGplayDebugCoverageReport || scripts/uploadReport.sh $LOG_USERNAME $LOG_PASSWORD $DRONE_BUILD_NUMBER "master-IT" $DRONE_PULL_REQUEST $GIT_USERNAME $GIT_TOKEN
-      - ./gradlew executeScreenshotTests || scripts/uploadReport.sh $LOG_USERNAME $LOG_PASSWORD $DRONE_BUILD_NUMBER "master-Screenshot" $DRONE_PULL_REQUEST $GIT_USERNAME $GIT_TOKEN
+      - scripts/wait_for_server.sh "server"
+      - ./gradlew createGplayDebugCoverageReport -Pandroid.testInstrumentationRunnerArguments.notAnnotation=com.owncloud.android.utils.ScreenshotTest || scripts/uploadReport.sh $LOG_USERNAME $LOG_PASSWORD $DRONE_BUILD_NUMBER "master-IT" $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
@@ -136,11 +134,162 @@ steps:
         - master
 
 services:
-  - name: server-master
+  - name: server
+    image: nextcloudci/server:server-17 # also change in updateScreenshots.sh
+    commands:
+      - /usr/local/bin/initnc.sh
+      - echo 127.0.0.1 server >> /etc/hosts
+      - su www-data -c "OC_PASS=user1 php /var/www/html/occ user:add --password-from-env --display-name='User One' user1"
+      - su www-data -c "OC_PASS=user2 php /var/www/html/occ user:add --password-from-env --display-name='User Two' user2"
+      - su www-data -c "OC_PASS=user3 php /var/www/html/occ user:add --password-from-env --display-name='User Three' user3"
+      - su www-data -c "php /var/www/html/occ user:setting user2 files quota 1G"
+      - su www-data -c "php /var/www/html/occ group:add users"
+      - su www-data -c "php /var/www/html/occ group:adduser users user1"
+      - su www-data -c "php /var/www/html/occ group:adduser users user2"
+      - su www-data -c "git clone -b master https://github.com/nextcloud/activity.git /var/www/html/apps/activity/"
+      - su www-data -c "php /var/www/html/occ app:enable activity"
+      - su www-data -c "git clone -b master https://github.com/nextcloud/text.git /var/www/html/apps/text/"
+      - su www-data -c "php /var/www/html/occ app:enable text"
+      - su www-data -c "git clone -b master https://github.com/nextcloud/end_to_end_encryption/  /var/www/html/apps/end_to_end_encryption/"
+      - su www-data -c "php /var/www/html/occ app:enable end_to_end_encryption"
+      - /usr/local/bin/run.sh
+
+trigger:
+  branch:
+    - master
+  event:
+    - push
+    - pull_request
+---
+kind: pipeline
+type: docker
+name: screenshots-stable
+
+steps:
+  - name: gplay
+    image: nextcloudci/android:android-49
+    privileged: true
+    environment:
+      LOG_USERNAME:
+        from_secret: LOG_USERNAME
+      LOG_PASSWORD:
+        from_secret: LOG_PASSWORD
+      GIT_USERNAME:
+        from_secret: GIT_USERNAME
+      GIT_TOKEN:
+        from_secret: GIT_TOKEN
+      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 -skin 500x833 &
+      - sed -i s'#<bool name="is_beta">false</bool>#<bool name="is_beta">true</bool>#'g src/main/res/values/setup.xml
+      - ./gradlew assembleGplayDebug
+      - scripts/wait_for_emulator.sh
+      - ./gradlew installGplayDebugAndroidTest
+      - scripts/wait_for_server.sh "server"
+      - ./gradlew gplayDebugExecuteScreenshotTests -Pandroid.testInstrumentationRunnerArguments.annotation=com.owncloud.android.utils.ScreenshotTest || scripts/uploadReport.sh $LOG_USERNAME $LOG_PASSWORD $DRONE_BUILD_NUMBER "stable-Screenshot" $DRONE_PULL_REQUEST $GIT_USERNAME $GIT_TOKEN
+  - name: notify
+    image: drillster/drone-email
+    settings:
+      port: 587
+      from: nextcloud-drone@kaminsky.me
+      recipients_only: true
+      username:
+        from_secret: EMAIL_USERNAME
+      password:
+        from_secret: EMAIL_PASSWORD
+      recipients:
+        from_secret: EMAIL_RECIPIENTS
+      host:
+        from_secret: EMAIL_HOST
+    when:
+      event:
+        - push
+      status:
+        - failure
+      branch:
+        - master
+
+services:
+  - name: server
+    image: nextcloudci/server:server-17 # also change in updateScreenshots.sh
+    commands:
+      - BRANCH='stable18' /usr/local/bin/initnc.sh
+      - su www-data -c "OC_PASS=user1 php /var/www/html/occ user:add --password-from-env --display-name='User One' user1"
+      - su www-data -c "OC_PASS=user2 php /var/www/html/occ user:add --password-from-env --display-name='User Two' user2"
+      - su www-data -c "OC_PASS=user3 php /var/www/html/occ user:add --password-from-env --display-name='User Three' user3"
+      - su www-data -c "php /var/www/html/occ user:setting user2 files quota 1G"
+      - su www-data -c "php /var/www/html/occ group:add users"
+      - su www-data -c "php /var/www/html/occ group:adduser users user1"
+      - su www-data -c "php /var/www/html/occ group:adduser users user2"
+      - su www-data -c "git clone -b stable18 https://github.com/nextcloud/activity.git /var/www/html/apps/activity/"
+      - su www-data -c "php /var/www/html/occ app:enable activity"
+      - su www-data -c "git clone -b stable18 https://github.com/nextcloud/text.git /var/www/html/apps/text/"
+      - su www-data -c "php /var/www/html/occ app:enable text"
+      - su www-data -c "php /var/www/html/occ app:enable end_to_end_encryption"
+      - /usr/local/bin/run.sh
+
+trigger:
+  branch:
+    - master
+  event:
+    - push
+    - pull_request
+---
+kind: pipeline
+type: docker
+name: screenshots-master
+
+steps:
+  - name: gplay
+    image: nextcloudci/android:android-49
+    privileged: true
+    environment:
+      LOG_USERNAME:
+        from_secret: LOG_USERNAME
+      LOG_PASSWORD:
+        from_secret: LOG_PASSWORD
+      GIT_USERNAME:
+        from_secret: GIT_USERNAME
+      GIT_TOKEN:
+        from_secret: GIT_TOKEN
+      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 -skin 500x833 &
+      - sed -i s'#<bool name="is_beta">false</bool>#<bool name="is_beta">true</bool>#'g src/main/res/values/setup.xml
+      - ./gradlew assembleGplayDebug
+      - scripts/wait_for_emulator.sh
+      - ./gradlew installGplayDebugAndroidTest
+      - scripts/wait_for_server.sh "server"
+      - ./gradlew gplayDebugExecuteScreenshotTests -Pandroid.testInstrumentationRunnerArguments.annotation=com.owncloud.android.utils.ScreenshotTest || scripts/uploadReport.sh $LOG_USERNAME $LOG_PASSWORD $DRONE_BUILD_NUMBER "master-Screenshot" $DRONE_PULL_REQUEST $GIT_USERNAME $GIT_TOKEN
+  - name: notify
+    image: drillster/drone-email
+    settings:
+      port: 587
+      from: nextcloud-drone@kaminsky.me
+      recipients_only: true
+      username:
+        from_secret: EMAIL_USERNAME
+      password:
+        from_secret: EMAIL_PASSWORD
+      recipients:
+        from_secret: EMAIL_RECIPIENTS
+      host:
+        from_secret: EMAIL_HOST
+    when:
+      event:
+        - push
+      status:
+        - failure
+      branch:
+        - master
+
+services:
+  - name: server
     image: nextcloudci/server:server-17 # also change in updateScreenshots.sh
     commands:
       - /usr/local/bin/initnc.sh
-      - su www-data -c "php /var/www/html/occ status"
       - su www-data -c "OC_PASS=user1 php /var/www/html/occ user:add --password-from-env --display-name='User One' user1"
       - su www-data -c "OC_PASS=user2 php /var/www/html/occ user:add --password-from-env --display-name='User Two' user2"
       - su www-data -c "OC_PASS=user3 php /var/www/html/occ user:add --password-from-env --display-name='User Three' user3"

+ 1 - 1
CONTRIBUTING.md

@@ -272,7 +272,7 @@ Source code of app:
 
 #### UI tests
 We use [shot](https://github.com/Karumi/Shot) for taking screenshots and compare them 
-- check screenshots: ```./gradlew executeScreenshotTests ```
+- check screenshots: ```./gradlew gplayDebugExecuteScreenshotTests ```
 - update/generate new screenshots: ```scripts/updateScreenshots.sh ``` 
     - in this script are samples how to only execute a given class/test
     - this will fire up docker & emulator to ensure that screenshots look the same

+ 2 - 7
build.gradle

@@ -28,7 +28,7 @@ buildscript {
         classpath "org.jetbrains.kotlin:kotlin-gradle-plugin:$kotlin_version"
         classpath "io.gitlab.arturbosch.detekt:detekt-gradle-plugin:1.9.1"
         classpath "commons-httpclient:commons-httpclient:3.1@jar" // remove after entire switch to lib v2
-        classpath 'com.karumi:shot:3.1.0'
+        classpath 'com.karumi:shot:4.1.1'
     }
 }
 
@@ -91,7 +91,7 @@ def versionBuild = 0 // 0-50=Alpha / 51-98=RC / 90-99=stable
 for (TaskExecutionRequest tr : getGradle().getStartParameter().getTaskRequests()) {
     for (String arg : tr.args) {
         // any gplay, but only exact "build", as e.g. buildGeneric shall not apply gplay.grade
-        if (arg.contains("Gplay") || arg.contains("lint") || arg.contains("executeScreenshot") || arg == "build") {
+        if (arg.contains("Gplay") || arg.contains("lint") || arg.contains("ExecuteScreenshot") || arg == "build") {
             apply from: 'gplay.gradle'
             System.console().println("Applying gplay.gradle")
             break
@@ -103,11 +103,6 @@ spotbugs {
     toolVersion = '3.1.12'
 }
 
-shot {
-    appId = 'com.nextcloud.client'
-    instrumentationTestTask = 'connectedGplayDebugAndroidTest'
-}
-
 android {
     lintOptions {
         abortOnError false

BIN
screenshots/com.nextcloud.client.ActivitiesActivityIT_openDrawer.png


BIN
screenshots/com.nextcloud.client.ConflictsResolveActivityIT_test.png


BIN
screenshots/com.nextcloud.client.FileDisplayActivityIT_drawer.png


BIN
screenshots/com.nextcloud.client.FileDisplayActivityIT_open.png


BIN
screenshots/com.nextcloud.client.FileDisplayActivityIT_overflowMenu.png


BIN
screenshots/com.nextcloud.client.FileDisplayActivityIT_showAccounts.png


BIN
screenshots/com.nextcloud.client.FileDisplayActivityIT_showShares.png


BIN
screenshots/com.nextcloud.client.NotificationsActivityIT_openDrawer.png


BIN
screenshots/com.nextcloud.client.SettingsActivityIT_open.png


BIN
screenshots/com.nextcloud.client.SyncedFoldersActivityIT_openDrawer.png


BIN
screenshots/com.nextcloud.client.UploadListActivityActivityIT_openDrawer.png


BIN
screenshots/com.nextcloud.client.etm.EtmActivityTest_accounts.png


BIN
screenshots/com.nextcloud.client.etm.EtmActivityTest_overview.png


BIN
screenshots/com.nextcloud.client.etm.EtmActivityTest_preferences.png


BIN
screenshots/com.owncloud.android.ui.activity.ConflictsResolveActivityIT_keepBoth.png


BIN
screenshots/com.owncloud.android.ui.activity.ConflictsResolveActivityIT_keepExisting.png


BIN
screenshots/com.owncloud.android.ui.activity.ConflictsResolveActivityIT_keepNew.png


BIN
screenshots/com.owncloud.android.ui.activity.ConflictsResolveActivityIT_screenshotImages.png


BIN
screenshots/com.owncloud.android.ui.activity.ConflictsResolveActivityIT_screenshotTextFiles.png


BIN
screenshots/com.owncloud.android.ui.activity.ConflictsResolveActivityIT_test.png


BIN
screenshots/com.owncloud.android.ui.activity.ConflictsResolveActivityIT_test2.png


BIN
screenshots/com.owncloud.android.ui.activity.ManageAccountsActivityIT_open.png


BIN
screenshots/com.owncloud.android.ui.activity.ManageAccountsActivityIT_userInfoDetail.png


BIN
screenshots/com.owncloud.android.ui.dialog.SyncFileNotEnoughSpaceDialogFragmentTest_showNotEnoughSpaceDialogForFile.png


BIN
screenshots/com.owncloud.android.ui.dialog.SyncFileNotEnoughSpaceDialogFragmentTest_showNotEnoughSpaceDialogForFolder.png


BIN
screenshots/com.owncloud.android.ui.fragment.OCFileListFragmentIT_createAndShowShareToCircle.png


BIN
screenshots/com.owncloud.android.ui.fragment.OCFileListFragmentIT_createAndShowShareToGroup.png


BIN
screenshots/com.owncloud.android.ui.fragment.OCFileListFragmentIT_createAndShowShareToUser.png


BIN
screenshots/com.owncloud.android.ui.fragment.OCFileListFragmentIT_createAndShowShareViaLink.png


BIN
screenshots/com.owncloud.android.ui.preview.PreviewTextFileFragmentTest_displayJavaSnippetFile.png


BIN
screenshots/gplay/debug/com.nextcloud.client.ActivitiesActivityIT_openDrawer.png


BIN
screenshots/gplay/debug/com.nextcloud.client.FileDisplayActivityIT_drawer.png


BIN
screenshots/gplay/debug/com.nextcloud.client.FileDisplayActivityIT_open.png


BIN
screenshots/gplay/debug/com.nextcloud.client.FileDisplayActivityIT_shareToCircle.png


BIN
screenshots/gplay/debug/com.nextcloud.client.FileDisplayActivityIT_showAccounts.png


BIN
screenshots/gplay/debug/com.nextcloud.client.FileDisplayActivityIT_showShares.png


+ 0 - 0
screenshots/com.nextcloud.client.FirstRunActivityIT_open.png → screenshots/gplay/debug/com.nextcloud.client.FirstRunActivityIT_open.png


BIN
screenshots/gplay/debug/com.nextcloud.client.NotificationsActivityIT_openDrawer.png


BIN
screenshots/gplay/debug/com.nextcloud.client.SettingsActivityIT_open.png


BIN
screenshots/gplay/debug/com.nextcloud.client.SyncedFoldersActivityIT_openDrawer.png


BIN
screenshots/gplay/debug/com.nextcloud.client.UploadListActivityActivityIT_openDrawer.png


BIN
screenshots/gplay/debug/com.nextcloud.client.etm.EtmActivityTest_accounts.png


BIN
screenshots/gplay/debug/com.nextcloud.client.etm.EtmActivityTest_overview.png


BIN
screenshots/gplay/debug/com.nextcloud.client.etm.EtmActivityTest_preferences.png


BIN
screenshots/gplay/debug/com.owncloud.android.ui.activity.ManageAccountsActivityIT_open.png


BIN
screenshots/gplay/debug/com.owncloud.android.ui.activity.ManageAccountsActivityIT_userInfoDetail.png


BIN
screenshots/gplay/debug/com.owncloud.android.ui.fragment.OCFileListFragmentIT_createAndShowShareToCircle.png


BIN
screenshots/gplay/debug/com.owncloud.android.ui.fragment.OCFileListFragmentIT_createAndShowShareToGroup.png


BIN
screenshots/gplay/debug/com.owncloud.android.ui.fragment.OCFileListFragmentIT_createAndShowShareToUser.png


BIN
screenshots/gplay/debug/com.owncloud.android.ui.fragment.OCFileListFragmentIT_createAndShowShareViaLink.png


BIN
screenshots/gplay/debug/com.owncloud.android.ui.preview.PreviewTextFileFragmentTest_displayJavaSnippetFile.png


+ 0 - 0
screenshots/com.owncloud.android.ui.preview.PreviewTextFileFragmentTest_displaySimpleTextFile.png → screenshots/gplay/debug/com.owncloud.android.ui.preview.PreviewTextFileFragmentTest_displaySimpleTextFile.png


BIN
screenshots/gplay/debug/richworkspaces_dark.png


BIN
screenshots/gplay/debug/richworkspaces_light.png


BIN
screenshots/richworkspaces_dark.png


BIN
screenshots/richworkspaces_light.png


+ 56 - 27
scripts/updateScreenshots.sh

@@ -1,22 +1,22 @@
 #!/usr/bin/env bash
 
-if ( [[ $(grep NC_TEST_SERVER_BASEURL ~/.gradle/gradle.properties   | grep -v "#" -c) -gt 0 ]] ); then
+if [[ $(grep NC_TEST_SERVER_BASEURL ~/.gradle/gradle.properties   | grep -v "#" -c) -gt 0 ]]; then
     echo "This will not use server in docker. Please comment in .gradle/gradle.properties. Aborting!"
     exit 1
 fi
 
 ## emulator
-if ( [[ ! $(emulator -list-avds | grep uiComparison -c) -eq 0 ]] ); then
+if [[ ! $(emulator -list-avds | grep uiComparison -c) -eq 0 ]]; then
     avdmanager delete avd -n uiComparison
     (sleep 5; echo "no") | avdmanager create avd -n uiComparison -c 100M -k "system-images;android-27;google_apis;x86" --abi "google_apis/x86"
 fi
 
-if [ $1 == "debug" ]; then
-  emulator -avd uiComparison -no-snapshot -gpu swiftshader_indirect -no-audio -skin 500x833 1>/dev/null &
+if [ "$1" == "debug" ]; then
+  emulator -writable-system -avd uiComparison -no-snapshot -gpu swiftshader_indirect -no-audio -skin 500x833 1>/dev/null &
 else
-  emulator -avd uiComparison -no-snapshot -gpu swiftshader_indirect -no-window -no-audio -skin 500x833 1>/dev/null &
+  emulator -writable-system -avd uiComparison -no-snapshot -gpu swiftshader_indirect -no-window -no-audio -skin 500x833 1>/dev/null &
 fi
-PID=$(echo $!)
+PID=$!
 
 ## server
 docker run --name=uiComparison nextcloudci/server --entrypoint '/usr/local/bin/initnc.sh' 1>/dev/null &
@@ -29,14 +29,10 @@ if [[ $IP = "" ]]; then
 fi
 
 ## wait for server to finish
-scripts/wait_for_server.sh $IP
-
-## run on server
-cp gradle.properties gradle.properties_
-sed -i s"/server/$IP/" gradle.properties
-scripts/wait_for_emulator.sh
+scripts/wait_for_server.sh "$IP"
 
 # setup test server
+docker exec uiComparison /bin/sh -c "echo $IP server >> /etc/hosts"
 docker exec uiComparison /bin/sh -c "su www-data -c \"OC_PASS=user1 php /var/www/html/occ user:add --password-from-env --display-name='User One' user1\""
 docker exec uiComparison /bin/sh -c "su www-data -c \"OC_PASS=user2 php /var/www/html/occ user:add --password-from-env --display-name='User Two' user2\""
 docker exec uiComparison /bin/sh -c "su www-data -c \"OC_PASS=user3 php /var/www/html/occ user:add --password-from-env --display-name='User Three' user3\""
@@ -44,40 +40,73 @@ docker exec uiComparison /bin/sh -c "su www-data -c \"php /var/www/html/occ user
 docker exec uiComparison /bin/sh -c "su www-data -c \"php /var/www/html/occ group:add users\""
 docker exec uiComparison /bin/sh -c "su www-data -c \"php /var/www/html/occ group:adduser users user1\""
 docker exec uiComparison /bin/sh -c "su www-data -c \"php /var/www/html/occ group:adduser users user2\""
+docker exec uiComparison /bin/sh -c "su www-data -c \"git clone -b master https://github.com/nextcloud/activity.git /var/www/html/apps/activity/\""
+docker exec uiComparison /bin/sh -c "su www-data -c \"php /var/www/html/occ app:enable activity\""
 docker exec uiComparison /bin/sh -c "su www-data -c \"git clone -b master https://github.com/nextcloud/text.git /var/www/html/apps/text/\""
 docker exec uiComparison /bin/sh -c "su www-data -c \"php /var/www/html/occ app:enable text\""
-docker exec uiComparison /bin/sh -c "su www-data -c \"git clone -b master https://github.com/nextcloud/circles.git /var/www/html/apps/circles/\""
-docker exec uiComparison /bin/sh -c "apt-get update; apt-get -y install composer"
-docker exec uiComparison /bin/sh -c "su www-data -c \"cd /var/www/html/apps/circles; composer install\""
-docker exec uiComparison /bin/sh -c "su www-data -c \"php /var/www/html/occ app:enable -f circles\""
-docker exec uiComparison /bin/sh -c "su www-data -c \"php /var/www/html/occ config:app:set circles --value 1 allow_non_ssl_links\""
-docker exec uiComparison /bin/sh -c "su www-data -c \"php /var/www/html/occ config:app:set circles --value 1 local_is_non_ssl\""
-docker exec uiComparison /bin/sh -c "su www-data -c \"php /var/www/html/occ config:system:set allow_local_remote_servers --value true --type bool\""
-docker exec uiComparison /bin/sh -c "su www-data -c \"php /var/www/html/occ circles:manage:create test public publicCircle\""
+docker exec uiComparison /bin/sh -c "su www-data -c \"git clone -b master https://github.com/nextcloud/end_to_end_encryption/  /var/www/html/apps/end_to_end_encryption/\""
+docker exec uiComparison /bin/sh -c "su www-data -c \"php /var/www/html/occ app:enable end_to_end_encryption\""
+#docker exec uiComparison /bin/sh -c "su www-data -c \"git clone -b master https://github.com/nextcloud/circles.git /var/www/html/apps/circles/\""
+#docker exec uiComparison /bin/sh -c "apt-get update; apt-get -y install composer"
+#docker exec uiComparison /bin/sh -c "su www-data -c \"cd /var/www/html/apps/circles; composer install\""
+#docker exec uiComparison /bin/sh -c "su www-data -c \"php /var/www/html/occ app:enable -f circles\""
+#docker exec uiComparison /bin/sh -c "su www-data -c \"php /var/www/html/occ config:app:set circles --value 1 allow_non_ssl_links\""
+#docker exec uiComparison /bin/sh -c "su www-data -c \"php /var/www/html/occ config:app:set circles --value 1 local_is_non_ssl\""
+#docker exec uiComparison /bin/sh -c "su www-data -c \"php /var/www/html/occ config:system:set allow_local_remote_servers --value true --type bool\""
+#docker exec uiComparison /bin/sh -c "su www-data -c \"php /var/www/html/occ circles:manage:create test public publicCircle\""
 docker exec uiComparison /bin/sh -c "/usr/local/bin/run.sh"
 
+## wait for server to finish
+scripts/wait_for_server.sh "$IP"
+
+scripts/wait_for_emulator.sh
+
+# change server to ip on emulator
+adb root
+sleep 2
+adb remount
+sleep 2
+adb shell "mount -o remount,rw /system"
+sleep 2
+adb shell "echo $IP server >> /system/etc/hosts"
+
+sed -i s'#<bool name="is_beta">false</bool>#<bool name="is_beta">true</bool>#'g src/main/res/values/setup.xml
+
 ## update/create all screenshots
-./gradlew executeScreenshotTests -Precord
+#./gradlew gplayDebugExecuteScreenshotTests -Precord \
+#-Pandroid.testInstrumentationRunnerArguments.annotation=com.owncloud.android.utils.ScreenshotTest
 
 ## update screenshots in a class
-#./gradlew executeScreenshotTests \
+#./gradlew gplayDebugExecuteScreenshotTests \
 #-Precord \
 #-Pandroid.testInstrumentationRunnerArguments.class=\
 #com.owncloud.android.ui.dialog.SyncFileNotEnoughSpaceDialogFragmentTest
 
 ## update single screenshot within a class
-#./gradlew executeScreenshotTests \
+#./gradlew gplayDebugExecuteScreenshotTests \
 #-Precord \
 #-Pandroid.testInstrumentationRunnerArguments.class=\
-#com.owncloud.android.ui.dialog.SyncFileNotEnoughSpaceDialogFragmentTest#showNotEnoughSpaceDialogForFile
+#com.nextcloud.client.FileDisplayActivityIT#showShares
+
+resultCode=-1
+retryCount=0
+until [ $resultCode -eq 0 ] || [ $retryCount -gt 2 ]
+do
+  # test all screenshots
+  ./gradlew gplayDebugExecuteScreenshotTests \
+  -Pandroid.testInstrumentationRunnerArguments.annotation=com.owncloud.android.utils.ScreenshotTest
+
+resultCode=$?
+((retryCount++))
+done
 
-mv gradle.properties_ gradle.properties
+sed -i s'#<bool name="is_beta">true</bool>#<bool name="is_beta">false</bool>#'g src/main/res/values/setup.xml
 
-if [ $1 == "debug" ]; then
+if [ "$1" == "debug" ]; then
   exit
 fi
 
 # tidy up
-kill $PID
+kill "$PID"
 docker stop uiComparison
 docker rm uiComparison

+ 1 - 1
scripts/wait_for_server.sh

@@ -10,7 +10,7 @@ until [[ $status = "false" ]]; do
 
     if [[ "$status" =~ "false" || "$status" = "" ]]; then
         let "counter += 1"
-         if [[ $counter -gt 30 ]]; then
+         if [[ $counter -gt 50 ]]; then
             echo "Failed to wait for server"
             exit 1
         fi

+ 27 - 2
src/androidTest/java/com/nextcloud/client/ActivitiesActivityIT.java

@@ -23,16 +23,24 @@
 package com.nextcloud.client;
 
 import android.Manifest;
+import android.view.View;
 
+import com.facebook.testing.screenshot.Screenshot;
 import com.owncloud.android.AbstractIT;
+import com.owncloud.android.R;
 import com.owncloud.android.ui.activities.ActivitiesActivity;
+import com.owncloud.android.utils.ScreenshotTest;
 
 import org.junit.Rule;
 import org.junit.Test;
 
+import androidx.test.espresso.contrib.DrawerActions;
 import androidx.test.espresso.intent.rule.IntentsTestRule;
 import androidx.test.rule.GrantPermissionRule;
 
+import static androidx.test.espresso.Espresso.onView;
+import static androidx.test.espresso.matcher.ViewMatchers.withId;
+
 
 public class ActivitiesActivityIT extends AbstractIT {
     @Rule public IntentsTestRule<ActivitiesActivity> activityRule = new IntentsTestRule<>(ActivitiesActivity.class,
@@ -44,7 +52,24 @@ public class ActivitiesActivityIT extends AbstractIT {
         Manifest.permission.WRITE_EXTERNAL_STORAGE);
 
     @Test
-    public void openDrawer() throws InterruptedException {
-        super.openDrawer(activityRule);
+    @ScreenshotTest
+    public void openDrawer() {
+        ActivitiesActivity sut = activityRule.launchActivity(null);
+
+        shortSleep();
+
+        onView(withId(R.id.drawer_layout)).perform(DrawerActions.open());
+
+        sut.runOnUiThread(new Runnable() {
+            @Override
+            public void run() {
+                sut.emptyContentContainer.setVisibility(View.VISIBLE);
+                sut.recyclerView.setVisibility(View.INVISIBLE);
+            }
+        });
+
+        waitForIdleSync();
+
+        Screenshot.snapActivity(sut).record();
     }
 }

+ 11 - 13
src/androidTest/java/com/nextcloud/client/FileDisplayActivityIT.java

@@ -38,6 +38,7 @@ import com.owncloud.android.lib.resources.shares.ShareType;
 import com.owncloud.android.operations.CreateFolderOperation;
 import com.owncloud.android.ui.activity.FileDisplayActivity;
 import com.owncloud.android.ui.events.SearchEvent;
+import com.owncloud.android.utils.ScreenshotTest;
 
 import org.greenrobot.eventbus.EventBus;
 import org.junit.Assert;
@@ -50,13 +51,11 @@ import androidx.test.espresso.intent.rule.IntentsTestRule;
 import androidx.test.rule.GrantPermissionRule;
 
 import static androidx.test.espresso.Espresso.onView;
-import static androidx.test.espresso.action.ViewActions.click;
 import static androidx.test.espresso.matcher.ViewMatchers.withId;
 import static androidx.test.platform.app.InstrumentationRegistry.getInstrumentation;
 import static junit.framework.TestCase.assertEquals;
 import static junit.framework.TestCase.assertTrue;
 
-
 public class FileDisplayActivityIT extends AbstractIT {
     @Rule public IntentsTestRule<FileDisplayActivity> activityRule = new IntentsTestRule<>(FileDisplayActivity.class,
                                                                                            true,
@@ -67,6 +66,7 @@ public class FileDisplayActivityIT extends AbstractIT {
         Manifest.permission.WRITE_EXTERNAL_STORAGE);
 
     @Test
+    @ScreenshotTest
     public void open() {
         Activity sut = activityRule.launchActivity(null);
 
@@ -76,15 +76,21 @@ public class FileDisplayActivityIT extends AbstractIT {
     }
 
     @Test
+    @ScreenshotTest
     public void drawer() {
-        Activity sut = activityRule.launchActivity(null);
+        FileDisplayActivity sut = activityRule.launchActivity(null);
 
         onView(withId(R.id.drawer_layout)).perform(DrawerActions.open());
 
+        waitForIdleSync();
+        shortSleep();
+        sut.getListOfFilesFragment().setFabEnabled(false);
+
         Screenshot.snapActivity(sut).record();
     }
 
     @Test
+    @ScreenshotTest
     public void showShares() {
         assertTrue(new ExistenceCheckRemoteOperation("/shareToAdmin/", true).execute(client).isSuccess());
         assertTrue(new CreateFolderRemoteOperation("/shareToAdmin/", true).execute(client).isSuccess());
@@ -142,16 +148,8 @@ public class FileDisplayActivityIT extends AbstractIT {
 
         EventBus.getDefault().post(new SearchEvent("", SearchRemoteOperation.SearchType.SHARED_FILTER));
 
-        getInstrumentation().waitForIdleSync();
-
-        Screenshot.snapActivity(sut).record();
-    }
-
-    @Test
-    public void showAccounts() {
-        Activity sut = activityRule.launchActivity(null);
-
-        onView(withId(R.id.switch_account_button)).perform(click());
+        shortSleep();
+        shortSleep();
 
         Screenshot.snapActivity(sut).record();
     }

+ 2 - 0
src/androidTest/java/com/nextcloud/client/FirstRunActivityIT.java

@@ -28,6 +28,7 @@ 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.utils.ScreenshotTest;
 
 import org.junit.Rule;
 import org.junit.Test;
@@ -46,6 +47,7 @@ public class FirstRunActivityIT extends AbstractIT {
         Manifest.permission.WRITE_EXTERNAL_STORAGE);
 
     @Test
+    @ScreenshotTest
     public void open() {
         Activity sut = activityRule.launchActivity(null);
 

+ 3 - 1
src/androidTest/java/com/nextcloud/client/NotificationsActivityIT.java

@@ -26,6 +26,7 @@ import android.Manifest;
 
 import com.owncloud.android.AbstractIT;
 import com.owncloud.android.ui.activity.NotificationsActivity;
+import com.owncloud.android.utils.ScreenshotTest;
 
 import org.junit.Rule;
 import org.junit.Test;
@@ -44,7 +45,8 @@ public class NotificationsActivityIT extends AbstractIT {
         Manifest.permission.WRITE_EXTERNAL_STORAGE);
 
     @Test
-    public void openDrawer() throws InterruptedException {
+    @ScreenshotTest
+    public void openDrawer() {
         super.openDrawer(activityRule);
     }
 }

+ 2 - 0
src/androidTest/java/com/nextcloud/client/SettingsActivityIT.java

@@ -28,6 +28,7 @@ import android.app.Activity;
 import com.facebook.testing.screenshot.Screenshot;
 import com.owncloud.android.AbstractIT;
 import com.owncloud.android.ui.activity.SettingsActivity;
+import com.owncloud.android.utils.ScreenshotTest;
 
 import org.junit.Rule;
 import org.junit.Test;
@@ -46,6 +47,7 @@ public class SettingsActivityIT extends AbstractIT {
         Manifest.permission.WRITE_EXTERNAL_STORAGE);
 
     @Test
+    @ScreenshotTest
     public void open() {
         Activity test = activityRule.launchActivity(null);
 

+ 3 - 1
src/androidTest/java/com/nextcloud/client/SyncedFoldersActivityIT.java

@@ -26,6 +26,7 @@ import android.Manifest;
 
 import com.owncloud.android.AbstractIT;
 import com.owncloud.android.ui.activity.SyncedFoldersActivity;
+import com.owncloud.android.utils.ScreenshotTest;
 
 import org.junit.Rule;
 import org.junit.Test;
@@ -44,7 +45,8 @@ public class SyncedFoldersActivityIT extends AbstractIT {
         Manifest.permission.WRITE_EXTERNAL_STORAGE);
 
     @Test
-    public void openDrawer() throws InterruptedException {
+    @ScreenshotTest
+    public void openDrawer() {
         super.openDrawer(activityRule);
     }
 }

+ 3 - 1
src/androidTest/java/com/nextcloud/client/UploadListActivityActivityIT.java

@@ -26,6 +26,7 @@ import android.Manifest;
 
 import com.owncloud.android.AbstractIT;
 import com.owncloud.android.ui.activity.UploadListActivity;
+import com.owncloud.android.utils.ScreenshotTest;
 
 import org.junit.Rule;
 import org.junit.Test;
@@ -44,7 +45,8 @@ public class UploadListActivityActivityIT extends AbstractIT {
         Manifest.permission.WRITE_EXTERNAL_STORAGE);
 
     @Test
-    public void openDrawer() throws InterruptedException {
+    @ScreenshotTest
+    public void openDrawer() {
         super.openDrawer(activityRule);
     }
 }

+ 15 - 0
src/androidTest/java/com/nextcloud/client/etm/EtmActivityTest.kt

@@ -27,6 +27,10 @@ import androidx.test.espresso.intent.rule.IntentsTestRule
 import androidx.test.internal.runner.junit4.statement.UiThreadStatement
 import com.facebook.testing.screenshot.Screenshot
 import com.owncloud.android.AbstractIT
+import com.owncloud.android.lib.resources.status.OwnCloudVersion
+import com.owncloud.android.utils.ScreenshotTest
+import org.junit.Assume
+import org.junit.Before
 import org.junit.Rule
 import org.junit.Test
 
@@ -34,7 +38,16 @@ class EtmActivityTest : AbstractIT() {
     @get:Rule
     var activityRule = IntentsTestRule(EtmActivity::class.java, true, false)
 
+    @Before
+    fun before() {
+        // tests only on NC 18
+        Assume.assumeTrue(storageManager
+            .getCapability(account.name)
+            .version.compareTo(OwnCloudVersion.nextcloud_18) == 0)
+    }
+
     @Test
+    @ScreenshotTest
     fun overview() {
         val sut: Activity = activityRule.launchActivity(null)
 
@@ -44,6 +57,7 @@ class EtmActivityTest : AbstractIT() {
     }
 
     @Test
+    @ScreenshotTest
     fun preferences() {
         val sut: EtmActivity = activityRule.launchActivity(null)
 
@@ -53,6 +67,7 @@ class EtmActivityTest : AbstractIT() {
     }
 
     @Test
+    @ScreenshotTest
     fun accounts() {
         val sut: EtmActivity = activityRule.launchActivity(null)
 

+ 2 - 3
src/androidTest/java/com/owncloud/android/AbstractIT.java

@@ -68,7 +68,6 @@ import static org.junit.Assert.assertTrue;
  * Common base for all integration tests
  */
 
-//@RunWith(AndroidJUnit4.class)
 public abstract class AbstractIT {
     @Rule public RetryTestRule retryTestRule = new RetryTestRule();
 
@@ -116,7 +115,7 @@ public abstract class AbstractIT {
 
             waitForServer(client, baseUrl);
 
-//            deleteAllFiles(); // makes sure that no file/folder is in root
+            deleteAllFiles(); // makes sure that no file/folder is in root
         } catch (OperationCanceledException e) {
             e.printStackTrace();
         } catch (AuthenticatorException e) {
@@ -221,7 +220,7 @@ public abstract class AbstractIT {
         InstrumentationRegistry.getInstrumentation().waitForIdleSync();
     }
 
-    protected void openDrawer(IntentsTestRule activityRule) throws InterruptedException {
+    protected void openDrawer(IntentsTestRule activityRule) {
         Activity sut = activityRule.launchActivity(null);
 
         shortSleep();

+ 1 - 2
src/androidTest/java/com/owncloud/android/ui/activity/FolderPickerActivityIT.java

@@ -29,11 +29,10 @@ import org.junit.Test;
 import org.junit.runner.RunWith;
 
 import androidx.test.ext.junit.runners.AndroidJUnit4;
-import androidx.test.filters.LargeTest;
 import androidx.test.rule.ActivityTestRule;
 
 @RunWith(AndroidJUnit4.class)
-@LargeTest
+//@LargeTest
 public class FolderPickerActivityIT {
     @Rule
     public ActivityTestRule<FolderPickerActivity> activityRule =

+ 4 - 0
src/androidTest/java/com/owncloud/android/ui/activity/ManageAccountsActivityIT.java

@@ -27,6 +27,7 @@ import android.app.Activity;
 import com.facebook.testing.screenshot.Screenshot;
 import com.nextcloud.client.account.User;
 import com.owncloud.android.AbstractIT;
+import com.owncloud.android.utils.ScreenshotTest;
 
 import org.junit.Rule;
 import org.junit.Test;
@@ -40,6 +41,7 @@ public class ManageAccountsActivityIT extends AbstractIT {
                                                                                         false);
 
     @Test
+    @ScreenshotTest
     public void open() {
         Activity sut = activityRule.launchActivity(null);
 
@@ -49,12 +51,14 @@ public class ManageAccountsActivityIT extends AbstractIT {
     }
 
     @Test
+    @ScreenshotTest
     public void userInfoDetail() {
         ManageAccountsActivity sut = activityRule.launchActivity(null);
 
         User user = sut.accountManager.getUser();
         sut.onAccountClicked(user);
 
+        shortSleep();
         shortSleep();
 
         Screenshot.snapActivity(getCurrentActivity()).record();

+ 17 - 1
src/androidTest/java/com/owncloud/android/ui/fragment/OCFileListFragmentIT.kt

@@ -49,6 +49,7 @@ import com.owncloud.android.operations.RefreshFolderOperation
 import com.owncloud.android.operations.UploadFileOperation
 import com.owncloud.android.ui.activity.FileDisplayActivity
 import com.owncloud.android.utils.FileStorageUtils
+import com.owncloud.android.utils.ScreenshotTest
 import junit.framework.TestCase
 import org.junit.Assert.assertTrue
 import org.junit.Rule
@@ -88,6 +89,7 @@ class OCFileListFragmentIT : AbstractIT() {
     }
 
     @Test
+    @ScreenshotTest
     fun showRichWorkspace() {
         assertTrue(CreateFolderOperation("/test/", account, targetContext).execute(client, storageManager).isSuccess)
 
@@ -121,8 +123,10 @@ class OCFileListFragmentIT : AbstractIT() {
             targetContext).execute(client).isSuccess)
 
         val sut = ActivityScenario.launch(FileDisplayActivity::class.java)
+        shortSleep()
         sut.onActivity { activity -> activity.onBrowsedDownTo(storageManager.getFileByPath("/test/")) }
 
+        shortSleep()
         shortSleep()
 
         sut.onActivity { activity ->
@@ -131,14 +135,21 @@ class OCFileListFragmentIT : AbstractIT() {
 
         val preferences: AppPreferences = AppPreferencesImpl.fromContext(targetContext)
         preferences.darkThemeMode = DarkMode.DARK
-        MainApp.setAppTheme(DarkMode.DARK)
 
+        sut.onActivity { activity ->
+            MainApp.setAppTheme(DarkMode.DARK)
+        }
+
+        shortSleep()
         sut.onActivity { activity -> activity.onBackPressed() }
 
+        shortSleep()
+
         sut.recreate()
 
         sut.onActivity { activity -> activity.onBrowsedDownTo(storageManager.getFileByPath("/test/")) }
 
+        shortSleep()
         shortSleep()
 
         sut.onActivity { activity ->
@@ -149,12 +160,14 @@ class OCFileListFragmentIT : AbstractIT() {
         preferences.darkThemeMode = DarkMode.LIGHT
         MainApp.setAppTheme(DarkMode.LIGHT)
 
+        shortSleep()
         sut.onActivity { activity -> activity.onBackPressed() }
 
         sut.recreate()
     }
 
     @Test
+    @ScreenshotTest
     fun createAndShowShareToUser() {
         val path = "/shareToAdmin/"
         TestCase.assertTrue(CreateFolderOperation(path, account, targetContext)
@@ -179,6 +192,7 @@ class OCFileListFragmentIT : AbstractIT() {
     }
 
     @Test
+    @ScreenshotTest
     fun createAndShowShareToGroup() {
         val path = "/shareToGroup/"
         TestCase.assertTrue(CreateFolderOperation(path, account, targetContext)
@@ -203,6 +217,7 @@ class OCFileListFragmentIT : AbstractIT() {
     }
 
 //    @Test
+//    @ScreenshotTest
 //    fun createAndShowShareToCircle() {
 //        val path = "/shareToCircle/"
 //        TestCase.assertTrue(CreateFolderOperation(path, account, targetContext)
@@ -234,6 +249,7 @@ class OCFileListFragmentIT : AbstractIT() {
 //    }
 
     @Test
+    @ScreenshotTest
     fun createAndShowShareViaLink() {
         val path = "/shareViaLink/"
         TestCase.assertTrue(CreateFolderOperation(path, account, targetContext)

+ 5 - 2
src/androidTest/java/com/owncloud/android/ui/preview/PreviewTextFileFragmentTest.java

@@ -30,6 +30,7 @@ import com.owncloud.android.datamodel.OCFile;
 import com.owncloud.android.ui.activity.FileDisplayActivity;
 import com.owncloud.android.utils.FileStorageUtils;
 import com.owncloud.android.utils.MimeTypeUtil;
+import com.owncloud.android.utils.ScreenshotTest;
 
 import org.junit.Rule;
 import org.junit.Test;
@@ -50,7 +51,8 @@ public class PreviewTextFileFragmentTest extends AbstractIT {
         Manifest.permission.WRITE_EXTERNAL_STORAGE);
 
     @Test
-    public void displaySimpleTextFile() throws InterruptedException {
+    @ScreenshotTest
+    public void displaySimpleTextFile() {
         FileDisplayActivity sut = activityRule.launchActivity(null);
 
         shortSleep();
@@ -67,7 +69,8 @@ public class PreviewTextFileFragmentTest extends AbstractIT {
     }
 
     @Test
-    public void displayJavaSnippetFile() throws IOException, InterruptedException {
+    @ScreenshotTest
+    public void displayJavaSnippetFile() throws IOException {
         FileDisplayActivity sut = activityRule.launchActivity(null);
 
         shortSleep();

+ 1 - 0
src/main/java/com/owncloud/android/MainApp.java

@@ -612,6 +612,7 @@ public class MainApp extends MultiDexApplication implements HasAndroidInjector {
         mOnlyOnDevice = state;
     }
 
+
     public static boolean isOnlyOnDevice() {
         return mOnlyOnDevice;
     }

+ 37 - 0
src/main/java/com/owncloud/android/utils/ScreenshotTest.java

@@ -0,0 +1,37 @@
+/*
+ *
+ * Nextcloud Android client application
+ *
+ * @author Tobias Kaminsky
+ * Copyright (C) 2020 Tobias Kaminsky
+ * Copyright (C) 2020 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 <https://www.gnu.org/licenses/>.
+ */
+
+package com.owncloud.android.utils;
+
+import java.lang.annotation.ElementType;
+import java.lang.annotation.Retention;
+import java.lang.annotation.RetentionPolicy;
+import java.lang.annotation.Target;
+
+/**
+ * Annotate any screenshot test with this so it is run only when updating/testing screenshots
+ */
+
+@Retention(RetentionPolicy.RUNTIME)
+@Target(ElementType.METHOD)
+public @interface ScreenshotTest {
+}