Skip to content

Commit

Permalink
Espresso test with screenshot compare
Browse files Browse the repository at this point in the history
  • Loading branch information
hannesa2 committed Oct 13, 2024
1 parent a3721d3 commit 1b83683
Show file tree
Hide file tree
Showing 5 changed files with 104 additions and 0 deletions.
3 changes: 3 additions & 0 deletions .gitmodules
Original file line number Diff line number Diff line change
@@ -0,0 +1,3 @@
[submodule "android/git-diff-image"]
path = android/git-diff-image
url = git@github.com:ewanmellor/git-diff-image.git
1 change: 1 addition & 0 deletions android/git-diff-image
Submodule git-diff-image added at f12098
8 changes: 8 additions & 0 deletions android/mainSample/build.gradle
Original file line number Diff line number Diff line change
Expand Up @@ -17,6 +17,9 @@ android {
versionName getTag()
buildConfigField "String", 'GIT_REPOSITORY', "\"" + getGitOriginRemote() + "\""
buildConfigField "String", 'VERSION', "\"" + getTag() + "\""

testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner"
testInstrumentationRunnerArguments useTestStorageService: 'true'
}

buildTypes {
Expand Down Expand Up @@ -64,6 +67,11 @@ dependencies {

implementation "org.jetbrains.kotlin:kotlin-stdlib:2.0.0"
implementation "androidx.core:core-ktx:1.8.0"

testImplementation 'junit:junit:4.13.2'
androidTestImplementation 'com.github.AppDevNext:Moka:1.6'
androidTestImplementation "androidx.test.ext:junit-ktx:1.1.5"
androidTestUtil "androidx.test.services:test-services:1.4.2"
}

static def getTag() {
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,39 @@
package com.example.virosample

import android.view.Gravity
import androidx.test.core.graphics.writeToTestStorage
import androidx.test.espresso.Espresso
import androidx.test.espresso.assertion.ViewAssertions.matches
import androidx.test.espresso.contrib.DrawerActions
import androidx.test.espresso.contrib.DrawerMatchers.isClosed
import androidx.test.espresso.matcher.ViewMatchers
import androidx.test.espresso.matcher.ViewMatchers.withId
import androidx.test.espresso.screenshot.captureToBitmap
import androidx.test.ext.junit.rules.activityScenarioRule
import androidx.test.ext.junit.runners.AndroidJUnit4
import org.junit.Rule
import org.junit.Test
import org.junit.rules.TestName
import org.junit.runner.RunWith


@RunWith(AndroidJUnit4::class)
class ExtendedMainTest {

@get:Rule
var nameRule = TestName()

@get:Rule
val activityScenarioRule = activityScenarioRule<MLMainActivity>()

@Test
fun mainSmokeTest() {
Espresso.onView(withId(R.id.drawer_layout))
.check(matches(isClosed(Gravity.LEFT))) // Left Drawer should be closed.
.perform(DrawerActions.open())
Espresso.onView(ViewMatchers.isRoot())
.captureToBitmap()
.writeToTestStorage("${javaClass.simpleName}_${nameRule.methodName}-End")
}

}
53 changes: 53 additions & 0 deletions android/screenShotCompare.sh
Original file line number Diff line number Diff line change
@@ -0,0 +1,53 @@
#!/bin/bash

diffFiles=./screenshotDiffs
mkdir $diffFiles
set -x
./git-diff-image/install.sh
GIT_DIFF_IMAGE_OUTPUT_DIR=$diffFiles git diff-image

source scripts/lib.sh

PR=$(echo "$GITHUB_REF_NAME" | sed "s/\// /" | awk '{print $1}')
echo pr=$PR
brew install jq

echo "delete all old comments, starting with Screenshot differs:$emulatorApi"
oldComments=$(curl_gh -X GET https://api.github.com/repos/"$GITHUB_REPOSITORY"/issues/"$PR"/comments | jq '.[] | (.id |tostring) + "|" + (.user.login | test("github-actions") | tostring) + "|" + (.body | test("Screenshot differs:'$emulatorApi'.*") | tostring)' | grep "true|true" | tr -d "\"" | cut -f1 -d"|")
echo "comments=$comments"
echo "$oldComments" | while read comment; do
echo "delete comment=$comment"
curl_gh -X DELETE https://api.github.com/repos/"$GITHUB_REPOSITORY"/issues/comments/"$comment"
done

pushd $diffFiles
body=""
COUNTER=0
ls -la

# ignore an error, when no files where found https://unix.stackexchange.com/a/723909/201876
setopt no_nomatch
for f in *.png; do
if [[ ${f} == "*.png" ]]
then
echo "nothing found"
else
(( COUNTER++ ))

newName="$1-${f}"
mv "${f}" "$newName"
echo "==> Uploaded screenshot $newName"
curl -i -F "file=@$newName" https://www.mxtracks.info/github
echo "==> Add screenshot comment $PR"
body="$body ${f}![screenshot](https://www.mxtracks.info/github/uploads/$newName) <br/><br/>"
fi
done

if [ ! "$body" == "" ]; then
curl_gh -X POST https://api.github.com/repos/"$GITHUB_REPOSITORY"/issues/$PR/comments -d "{ \"body\" : \"Screenshot differs:$emulatorApi $COUNTER <br/><br/> $body \" }"
fi

popd 1>/dev/null

# set error when diffs are there
[ "$(ls -A $diffFiles)" ] && exit 1 || exit 0

0 comments on commit 1b83683

Please sign in to comment.