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">
+