new tests
Signed-off-by: tobiasKaminsky <tobias@kaminsky.me>
@ -69,7 +69,7 @@ steps:
|
|||||||
- emulator-headless -avd android-27 -no-snapshot -gpu swiftshader_indirect -no-window -no-audio -skin 500x833 &
|
- emulator-headless -avd android-27 -no-snapshot -gpu swiftshader_indirect -no-window -no-audio -skin 500x833 &
|
||||||
- ./gradlew assembleGplay
|
- ./gradlew assembleGplay
|
||||||
- ./gradlew assembleGplayDebug
|
- ./gradlew assembleGplayDebug
|
||||||
- ./wait_for_emulator.sh
|
- scripts/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 jacocoTestGplayDebugUnitTestReport || scripts/uploadReport.sh $LOG_USERNAME $LOG_PASSWORD $DRONE_BUILD_NUMBER "Unit" $DRONE_PULL_REQUEST $GIT_USERNAME $GIT_TOKEN
|
||||||
- ./gradlew installGplayDebugAndroidTest
|
- ./gradlew installGplayDebugAndroidTest
|
||||||
- ./gradlew createGplayDebugCoverageReport || scripts/uploadReport.sh $LOG_USERNAME $LOG_PASSWORD $DRONE_BUILD_NUMBER "IT" $DRONE_PULL_REQUEST $GIT_USERNAME $GIT_TOKEN
|
- ./gradlew createGplayDebugCoverageReport || scripts/uploadReport.sh $LOG_USERNAME $LOG_PASSWORD $DRONE_BUILD_NUMBER "IT" $DRONE_PULL_REQUEST $GIT_USERNAME $GIT_TOKEN
|
||||||
|
After Width: | Height: | Size: 38 KiB |
BIN
screenshots/com.nextcloud.client.FileDisplayActivityIT_open.png
Normal file
After Width: | Height: | Size: 12 KiB |
After Width: | Height: | Size: 14 KiB |
After Width: | Height: | Size: 25 KiB |
Before Width: | Height: | Size: 24 KiB After Width: | Height: | Size: 24 KiB |
BIN
screenshots/com.nextcloud.client.SettingsActivityIT_open.png
Normal file
After Width: | Height: | Size: 33 KiB |
32
scripts/updateScreenshots.sh
Executable file
@ -0,0 +1,32 @@
|
|||||||
|
#!/usr/bin/env bash
|
||||||
|
|
||||||
|
## emulator
|
||||||
|
if ( [[ $(emulator -list-avds | grep uiComparison -c) -eq 0 ]] ); then
|
||||||
|
(sleep 5; echo "no") | avdmanager create avd -n uiComparison -c 100M -k "system-images;android-27;google_apis;x86" --abi "google_apis/x86"
|
||||||
|
fi
|
||||||
|
|
||||||
|
emulator -avd uiComparison -no-snapshot -gpu swiftshader_indirect -no-window -no-audio -skin 500x833 1>/dev/null &
|
||||||
|
PID=$(echo $!)
|
||||||
|
|
||||||
|
## server
|
||||||
|
docker run --name=uiComparison nextcloudci/server:server-3 1>/dev/null &
|
||||||
|
sleep 5
|
||||||
|
IP=$(docker inspect -f '{{range .NetworkSettings.Networks}}{{.IPAddress}}{{end}}' uiComparison)
|
||||||
|
|
||||||
|
if [[ $IP = "" ]]; then
|
||||||
|
echo "no server"
|
||||||
|
exit 1
|
||||||
|
fi
|
||||||
|
|
||||||
|
## 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}
|
||||||
|
./gradlew executeScreenshotTests -Precord
|
||||||
|
mv gradle.properties_ gradle.properties
|
||||||
|
|
||||||
|
# tidy up
|
||||||
|
kill $PID
|
||||||
|
docker stop uiComparison
|
||||||
|
docker rm uiComparison
|
18
scripts/wait_for_server.sh
Executable file
@ -0,0 +1,18 @@
|
|||||||
|
#!/usr/bin/env bash
|
||||||
|
|
||||||
|
counter=0
|
||||||
|
status=""
|
||||||
|
|
||||||
|
until [[ $status = "false" ]]; do
|
||||||
|
status=$(curl 2>/dev/null "http://$1/status.php" | jq .maintenance)
|
||||||
|
|
||||||
|
if [[ "$status" =~ "false" || "$status" = "" ]]; then
|
||||||
|
let "counter += 1"
|
||||||
|
if [[ $counter -gt 2 ]]; then
|
||||||
|
echo "Failed to wait for server"
|
||||||
|
exit 1
|
||||||
|
fi
|
||||||
|
fi
|
||||||
|
|
||||||
|
sleep 10
|
||||||
|
done
|
@ -0,0 +1,81 @@
|
|||||||
|
/*
|
||||||
|
*
|
||||||
|
* 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 <https://www.gnu.org/licenses/>.
|
||||||
|
*/
|
||||||
|
|
||||||
|
package com.nextcloud.client;
|
||||||
|
|
||||||
|
import android.Manifest;
|
||||||
|
import android.app.Activity;
|
||||||
|
|
||||||
|
import com.facebook.testing.screenshot.Screenshot;
|
||||||
|
import com.owncloud.android.AbstractIT;
|
||||||
|
import com.owncloud.android.R;
|
||||||
|
import com.owncloud.android.ui.activity.FileDisplayActivity;
|
||||||
|
|
||||||
|
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.action.ViewActions.click;
|
||||||
|
import static androidx.test.espresso.matcher.ViewMatchers.withId;
|
||||||
|
|
||||||
|
|
||||||
|
public class FileDisplayActivityIT extends AbstractIT {
|
||||||
|
@Rule public IntentsTestRule<FileDisplayActivity> activityRule = new IntentsTestRule<>(FileDisplayActivity.class,
|
||||||
|
true,
|
||||||
|
false);
|
||||||
|
|
||||||
|
@Rule
|
||||||
|
public final GrantPermissionRule permissionRule = GrantPermissionRule.grant(
|
||||||
|
Manifest.permission.WRITE_EXTERNAL_STORAGE);
|
||||||
|
|
||||||
|
@Test
|
||||||
|
public void open() throws InterruptedException {
|
||||||
|
Activity sut = activityRule.launchActivity(null);
|
||||||
|
|
||||||
|
Thread.sleep(3000);
|
||||||
|
|
||||||
|
Screenshot.snapActivity(sut).record();
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
public void drawer() {
|
||||||
|
Activity sut = activityRule.launchActivity(null);
|
||||||
|
|
||||||
|
onView(withId(R.id.drawer_layout)).perform(DrawerActions.open());
|
||||||
|
|
||||||
|
Screenshot.snapActivity(sut).record();
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
public void showAccounts() {
|
||||||
|
Activity sut = activityRule.launchActivity(null);
|
||||||
|
|
||||||
|
onView(withId(R.id.drawer_layout)).perform(DrawerActions.open());
|
||||||
|
onView(withId(R.id.drawer_active_user)).perform(click());
|
||||||
|
|
||||||
|
Screenshot.snapActivity(sut).record();
|
||||||
|
}
|
||||||
|
}
|
@ -28,41 +28,28 @@ import android.app.Activity;
|
|||||||
import com.facebook.testing.screenshot.Screenshot;
|
import com.facebook.testing.screenshot.Screenshot;
|
||||||
import com.nextcloud.client.onboarding.FirstRunActivity;
|
import com.nextcloud.client.onboarding.FirstRunActivity;
|
||||||
import com.owncloud.android.AbstractIT;
|
import com.owncloud.android.AbstractIT;
|
||||||
import com.owncloud.android.ui.activity.FileDisplayActivity;
|
|
||||||
|
|
||||||
import org.junit.Rule;
|
import org.junit.Rule;
|
||||||
import org.junit.Test;
|
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.espresso.intent.rule.IntentsTestRule;
|
||||||
import androidx.test.rule.GrantPermissionRule;
|
import androidx.test.rule.GrantPermissionRule;
|
||||||
|
|
||||||
|
|
||||||
public class TestIT extends AbstractIT {
|
public class FirstRunActivityIT extends AbstractIT {
|
||||||
@Rule public IntentsTestRule<FirstRunActivity> activityRule =
|
@Rule public IntentsTestRule<FirstRunActivity> activityRule = new IntentsTestRule<>(FirstRunActivity.class,
|
||||||
new IntentsTestRule<>(FirstRunActivity.class, true, false);
|
true,
|
||||||
|
false);
|
||||||
|
|
||||||
@Rule
|
@Rule
|
||||||
public final GrantPermissionRule permissionRule = GrantPermissionRule.grant(
|
public final GrantPermissionRule permissionRule = GrantPermissionRule.grant(
|
||||||
Manifest.permission.WRITE_EXTERNAL_STORAGE);
|
Manifest.permission.WRITE_EXTERNAL_STORAGE);
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
public void test() throws InterruptedException {
|
public void open() {
|
||||||
Activity test = activityRule.launchActivity(null);
|
Activity sut = activityRule.launchActivity(null);
|
||||||
|
|
||||||
Screenshot.snapActivity(test).record();
|
Screenshot.snapActivity(sut).record();
|
||||||
}
|
|
||||||
|
|
||||||
private void openOverflowMenu() throws InterruptedException {
|
|
||||||
try {
|
|
||||||
Espresso.openContextualActionModeOverflowMenu();
|
|
||||||
} catch (NoActivityResumedException e) {
|
|
||||||
ActivityScenario.launch(FileDisplayActivity.class);
|
|
||||||
Thread.sleep(1000);
|
|
||||||
Espresso.openContextualActionModeOverflowMenu();
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
@ -0,0 +1,54 @@
|
|||||||
|
/*
|
||||||
|
*
|
||||||
|
* 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 <https://www.gnu.org/licenses/>.
|
||||||
|
*/
|
||||||
|
|
||||||
|
package com.nextcloud.client;
|
||||||
|
|
||||||
|
import android.Manifest;
|
||||||
|
import android.app.Activity;
|
||||||
|
|
||||||
|
import com.facebook.testing.screenshot.Screenshot;
|
||||||
|
import com.owncloud.android.AbstractIT;
|
||||||
|
import com.owncloud.android.ui.activity.SettingsActivity;
|
||||||
|
|
||||||
|
import org.junit.Rule;
|
||||||
|
import org.junit.Test;
|
||||||
|
|
||||||
|
import androidx.test.espresso.intent.rule.IntentsTestRule;
|
||||||
|
import androidx.test.rule.GrantPermissionRule;
|
||||||
|
|
||||||
|
|
||||||
|
public class SettingsActivityIT extends AbstractIT {
|
||||||
|
@Rule public IntentsTestRule<SettingsActivity> activityRule = new IntentsTestRule<>(SettingsActivity.class,
|
||||||
|
true,
|
||||||
|
false);
|
||||||
|
|
||||||
|
@Rule
|
||||||
|
public final GrantPermissionRule permissionRule = GrantPermissionRule.grant(
|
||||||
|
Manifest.permission.WRITE_EXTERNAL_STORAGE);
|
||||||
|
|
||||||
|
@Test
|
||||||
|
public void open() {
|
||||||
|
Activity test = activityRule.launchActivity(null);
|
||||||
|
|
||||||
|
Screenshot.snapActivity(test).record();
|
||||||
|
}
|
||||||
|
}
|