1- package com.telefonica.androidsnaptesting
1+ package com.telefonica.androidsnaptesting.screenshots
22
33import android.app.Activity
44import android.graphics.Bitmap
55import android.graphics.BitmapFactory
66import android.os.Build
7- import android.os.Environment
87import androidx.annotation.RequiresApi
98import androidx.compose.ui.graphics.asAndroidBitmap
109import androidx.compose.ui.test.captureToImage
@@ -15,6 +14,8 @@ import androidx.test.runner.screenshot.Screenshot
1514import com.dropbox.differ.ImageComparator
1615import com.dropbox.differ.Mask
1716import com.dropbox.differ.SimpleImageComparator
17+ import com.telefonica.androidsnaptesting.Directories
18+ import com.telefonica.androidsnaptesting.IgnoreScreenshots
1819import org.junit.rules.TestRule
1920import org.junit.runner.Description
2021import org.junit.runners.model.Statement
@@ -31,24 +32,18 @@ public class ScreenshotsRule(
3132 private var isTestIgnored: Boolean = false
3233 private val writeDiffImage = WriteDiffImage ()
3334
34- private val context = InstrumentationRegistry .getInstrumentation().context
35- private val downloadDir = File (
36- Environment .getExternalStoragePublicDirectory(Environment .DIRECTORY_DOWNLOADS ).absolutePath
37- )
38- private val androidSnaptestingDir = File (downloadDir, " android-snaptesting/${context.packageName} " )
39- private val failuresDir = File (androidSnaptestingDir, " failures" )
40- private val recordedDir = File (androidSnaptestingDir, " recorded" )
35+ private val directories = Directories ()
4136
4237 override fun apply (base : Statement , description : Description ): Statement {
4338 className = description.className
4439 testName = description.methodName
4540 isTestIgnored = description.getAnnotation(IgnoreScreenshots ::class .java) != null
4641
47- if (! failuresDir.exists()) {
48- failuresDir.mkdirs()
42+ if (! directories. failuresDir.exists()) {
43+ directories. failuresDir.mkdirs()
4944 }
50- if (! recordedDir.exists()) {
51- recordedDir.mkdirs()
45+ if (! directories. recordedDir.exists()) {
46+ directories. recordedDir.mkdirs()
5247 }
5348 return base
5449 }
@@ -88,7 +83,7 @@ public class ScreenshotsRule(
8883 }
8984
9085 private fun saveScreenshot (fileName : String , bitmap : Bitmap ) {
91- val testFile = File (recordedDir, fileName)
86+ val testFile = File (directories. recordedDir, fileName)
9287 testFile.createNewFile()
9388 testFile.outputStream().use {
9489 bitmap.compress(Bitmap .CompressFormat .PNG , 100 , it)
@@ -97,7 +92,7 @@ public class ScreenshotsRule(
9792
9893 private fun getGoldenBitmap (resourceName : String ): Bitmap {
9994 val goldenBitmap = try {
100- context.assets.open(" android-snaptesting-golden-files /$resourceName " ).use {
95+ directories. context.assets.open(" ${directories.goldenFilesDir} /$resourceName " ).use {
10196 BitmapFactory .decodeStream(it)
10297 }
10398 } catch (e: FileNotFoundException ) {
@@ -116,7 +111,7 @@ public class ScreenshotsRule(
116111 name : String?
117112 ) {
118113 if (bitmap.width != goldenBitmap.width || bitmap.height != goldenBitmap.height) {
119- writeDiffImage(failuresDir, fileName, bitmap, goldenBitmap, null )
114+ writeDiffImage(directories. failuresDir, fileName, bitmap, goldenBitmap, null )
120115 throw AssertionError (
121116 " $name : Test image (w=${bitmap.width} , h=${bitmap.height} ) differs in size" +
122117 " from reference image (w=${goldenBitmap.width} , h=${goldenBitmap.height} ).\n " ,
@@ -134,12 +129,12 @@ public class ScreenshotsRule(
134129 val result = try {
135130 imageComparator.compare(BitmapImage (goldenBitmap), BitmapImage (bitmap), mask)
136131 } catch (e: IllegalArgumentException ) {
137- writeDiffImage(failuresDir, fileName, bitmap, goldenBitmap, mask)
132+ writeDiffImage(directories. failuresDir, fileName, bitmap, goldenBitmap, mask)
138133 throw AssertionError (" Failed to compare images" , e)
139134 }
140135
141136 if (! resultValidator(result)) {
142- writeDiffImage(failuresDir, fileName, bitmap, goldenBitmap, mask)
137+ writeDiffImage(directories. failuresDir, fileName, bitmap, goldenBitmap, mask)
143138 throw AssertionError (
144139 " \" $resourceName \" failed to match reference image. ${result.pixelDifferences} pixels differ " +
145140 " (${(result.pixelDifferences / result.pixelCount.toFloat()) * 100 } %)"
0 commit comments