diff --git a/app/build.gradle b/app/build.gradle index 927ab3c..f71ac82 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -2,6 +2,9 @@ apply plugin: 'com.android.application' apply plugin: 'kotlin-android' apply plugin: 'kotlin-android-extensions' apply plugin: 'kotlin-kapt' + +apply plugin: 'shot' + apply from: rootProject.file('dependencies.gradle') apply from: rootProject.file('versions.gradle') apply from: rootProject.file('jacoco.gradle') @@ -15,13 +18,16 @@ android { targetSdkVersion versions.targetSdk versionCode versions.code versionName versions.name - testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner" + + testInstrumentationRunner "com.dvinc.notepad.ScreenshotTestRunner" + vectorDrawables.useSupportLibrary = true } buildTypes { debug { minifyEnabled false - applicationIdSuffix '.debug' + // This line may produce Shot error when he tries download screenshots + //applicationIdSuffix '.debug' versionNameSuffix '-DEBUG' proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro' } @@ -53,4 +59,11 @@ dependencies { kapt(librariesAnnotaionProcessors) implementation(appDependencies) + + // Fix for: Generated not found *javax.annotation.processing.Generated* + compileOnly 'javax.annotation:jsr250-api:1.0' +} + +shot { + appId = 'com.dvinc.notepad' } diff --git a/app/screenshots/com.dvinc.notepad.MainScreenTest_testEmptyNoteFragment.png b/app/screenshots/com.dvinc.notepad.MainScreenTest_testEmptyNoteFragment.png new file mode 100644 index 0000000..b8362bc Binary files /dev/null and b/app/screenshots/com.dvinc.notepad.MainScreenTest_testEmptyNoteFragment.png differ diff --git a/app/screenshots/com.dvinc.notepad.MainScreenTest_testEmptyNotepadList.png b/app/screenshots/com.dvinc.notepad.MainScreenTest_testEmptyNotepadList.png new file mode 100644 index 0000000..e759719 Binary files /dev/null and b/app/screenshots/com.dvinc.notepad.MainScreenTest_testEmptyNotepadList.png differ diff --git a/app/src/androidTest/AndroidManifest.xml b/app/src/androidTest/AndroidManifest.xml new file mode 100644 index 0000000..acae4ce --- /dev/null +++ b/app/src/androidTest/AndroidManifest.xml @@ -0,0 +1,8 @@ + + + + + + diff --git a/app/src/androidTest/java/com/dvinc/notepad/ExampleInstrumentedTest.kt b/app/src/androidTest/java/com/dvinc/notepad/ExampleInstrumentedTest.kt deleted file mode 100644 index 291cb15..0000000 --- a/app/src/androidTest/java/com/dvinc/notepad/ExampleInstrumentedTest.kt +++ /dev/null @@ -1,22 +0,0 @@ -package com.dvinc.notepad - -import androidx.test.InstrumentationRegistry -import androidx.test.runner.AndroidJUnit4 -import org.junit.Assert.assertEquals -import org.junit.Test -import org.junit.runner.RunWith - -/** - * Instrumented test, which will execute on an Android device. - * - * See [testing documentation](http://d.android.com/tools/testing). - */ -@RunWith(AndroidJUnit4::class) -class ExampleInstrumentedTest { - @Test - fun useAppContext() { - // Context of the app under test. - val appContext = InstrumentationRegistry.getTargetContext() - assertEquals("com.dvinc.notepad", appContext.packageName) - } -} diff --git a/app/src/androidTest/java/com/dvinc/notepad/MainScreenTest.kt b/app/src/androidTest/java/com/dvinc/notepad/MainScreenTest.kt new file mode 100644 index 0000000..083fc19 --- /dev/null +++ b/app/src/androidTest/java/com/dvinc/notepad/MainScreenTest.kt @@ -0,0 +1,62 @@ +/* + * Copyright (c) 2020 by Denis Verentsov (decsent@yandex.ru) + * All rights reserved. + */ + +package com.dvinc.notepad + +import android.content.Context +import android.util.DisplayMetrics +import android.view.ContextThemeWrapper +import android.view.LayoutInflater +import android.view.View +import android.view.WindowManager +import androidx.test.platform.app.InstrumentationRegistry.getInstrumentation +import androidx.test.rule.ActivityTestRule +import com.dvinc.notepad.presentation.ui.main.MainActivity +import com.facebook.testing.screenshot.Screenshot +import com.facebook.testing.screenshot.ViewHelpers +import org.junit.Rule +import org.junit.Test + +class MainScreenTest { + + @get:Rule + var activityTestRule = ActivityTestRule(MainActivity::class.java, false, false) + + private val context = getInstrumentation().targetContext + + private val contextWrapper = ContextThemeWrapper(context, R.style.AppTheme) + + private val inflater = LayoutInflater.from(contextWrapper) + + @Test + fun testEmptyNotepadList() { + val activity = activityTestRule.launchActivity(null) + + Screenshot + .snapActivity(activity) + .record() + } + + @Test + fun testEmptyNoteFragment() { + val noteFragment = inflater.inflate(R.layout.fragment_note, null, false) + + compareScreenshot(noteFragment) + } + + private fun compareScreenshot(view: View) { + val windowManager = context.getSystemService(Context.WINDOW_SERVICE) as WindowManager + val metrics = DisplayMetrics() + windowManager.defaultDisplay.getMetrics(metrics) + ViewHelpers.setupView(view) + .setExactHeightPx(metrics.heightPixels) + .setExactWidthPx(metrics.widthPixels) + .layout() + + Screenshot + .snap(view) + .record() + } +} diff --git a/app/src/androidTest/java/com/dvinc/notepad/ScreenshotTestRunner.kt b/app/src/androidTest/java/com/dvinc/notepad/ScreenshotTestRunner.kt new file mode 100644 index 0000000..8eaa5d3 --- /dev/null +++ b/app/src/androidTest/java/com/dvinc/notepad/ScreenshotTestRunner.kt @@ -0,0 +1,18 @@ +package com.dvinc.notepad + +import android.os.Bundle +import androidx.test.runner.AndroidJUnitRunner +import com.facebook.testing.screenshot.ScreenshotRunner + +class ScreenshotTestRunner : AndroidJUnitRunner() { + + override fun onCreate(arguments: Bundle) { + ScreenshotRunner.onCreate(this, arguments) + super.onCreate(arguments) + } + + override fun finish(resultCode: Int, results: Bundle) { + ScreenshotRunner.onDestroy() + super.finish(resultCode, results) + } +} diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml index 8df7282..089cfe7 100644 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -1,7 +1,9 @@ + package="com.dvinc.notepad" + android:sharedUserId="com.dvinc.notepad.uid"> +