Skip to content

Commit c58c642

Browse files
authored
Move to packages and extract common code to new class (#4)
1 parent 7c4dc7a commit c58c642

File tree

9 files changed

+48
-45
lines changed

9 files changed

+48
-45
lines changed
Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,17 @@
1+
package com.telefonica.androidsnaptesting
2+
3+
import android.os.Environment
4+
import androidx.test.platform.app.InstrumentationRegistry
5+
import java.io.File
6+
7+
internal class Directories {
8+
9+
internal val context = InstrumentationRegistry.getInstrumentation().context
10+
private val downloadDir = File(
11+
Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_DOWNLOADS).absolutePath
12+
)
13+
private val androidSnaptestingDir = File(downloadDir, "android-snaptesting/${context.packageName}")
14+
internal val failuresDir = File(androidSnaptestingDir, "failures")
15+
internal val recordedDir = File(androidSnaptestingDir, "recorded")
16+
internal val goldenFilesDir = "android-snaptesting-golden-files"
17+
}

android-snaptesting/src/main/java/com/telefonica/androidsnaptesting/LogComparator.kt renamed to android-snaptesting/src/main/java/com/telefonica/androidsnaptesting/logs/LogComparator.kt

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
package com.telefonica.androidsnaptesting
1+
package com.telefonica.androidsnaptesting.logs
22

33
import java.lang.StringBuilder
44

android-snaptesting/src/main/java/com/telefonica/androidsnaptesting/LogsRecorder.kt renamed to android-snaptesting/src/main/java/com/telefonica/androidsnaptesting/logs/LogsRecorder.kt

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
package com.telefonica.androidsnaptesting
1+
package com.telefonica.androidsnaptesting.logs
22

33
public interface LogsRecorder<LogType> {
44
public fun clear()

android-snaptesting/src/main/java/com/telefonica/androidsnaptesting/LogsRule.kt renamed to android-snaptesting/src/main/java/com/telefonica/androidsnaptesting/logs/LogsRule.kt

Lines changed: 12 additions & 21 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,8 @@
1-
package com.telefonica.androidsnaptesting
1+
package com.telefonica.androidsnaptesting.logs
22

3-
import android.os.Environment
43
import androidx.test.platform.app.InstrumentationRegistry
4+
import com.telefonica.androidsnaptesting.Directories
5+
import com.telefonica.androidsnaptesting.IgnoreLogs
56
import org.junit.rules.TestWatcher
67
import org.junit.runner.Description
78
import java.io.File
@@ -24,24 +25,17 @@ public open class GenericLogsRule<LogType>(
2425
private val comparator: LogComparator<LogType> = DefaultLogComparator(),
2526
) : TestWatcher() {
2627

27-
private val context = InstrumentationRegistry.getInstrumentation().context
28-
29-
private val downloadDir = File(
30-
Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_DOWNLOADS).absolutePath
31-
)
32-
private val androidSnaptestingDir = File(downloadDir, "android-snaptesting/${context.packageName}")
33-
private val failuresDir = File(androidSnaptestingDir, "failures")
34-
private val recordedDir = File(androidSnaptestingDir, "recorded")
28+
private val directories = Directories()
3529

3630
override fun starting(description: Description?) {
3731
super.starting(description)
3832

3933
recorder.clear()
40-
if (!failuresDir.exists()) {
41-
failuresDir.mkdirs()
34+
if (!directories.failuresDir.exists()) {
35+
directories.failuresDir.mkdirs()
4236
}
43-
if (!recordedDir.exists()) {
44-
recordedDir.mkdirs()
37+
if (!directories.recordedDir.exists()) {
38+
directories.recordedDir.mkdirs()
4539
}
4640
}
4741

@@ -55,23 +49,20 @@ public open class GenericLogsRule<LogType>(
5549

5650
val recordedLogs = recorder.getRecordedLogs()
5751
val log = recordedLogs.joinToString("\n") { stringMapper.fromLog(it) }
58-
val testFile = File(recordedDir, fileName)
52+
val testFile = File(directories.recordedDir, fileName)
5953
testFile.createNewFile()
6054
testFile.writeText(log)
6155

6256
if (InstrumentationRegistry.getArguments().getString("record") != "true" && !isTestIgnored) {
63-
val goldenFile =
64-
InstrumentationRegistry.getInstrumentation().context.assets.open(
65-
"android-snaptesting-golden-files/${testName}.txt"
66-
)
57+
val goldenFile = directories.context.assets.open("${directories.goldenFilesDir}/${testName}.txt")
6758
val goldenStringLogs = String(goldenFile.readBytes()).takeIf { it.isNotEmpty() }?.split("\n") ?: emptyList()
6859
val result = comparator.compare(recordedLogs, goldenStringLogs.map { stringMapper.toLog(it) })
6960
if (result != null) {
70-
val compareFile = File(failuresDir, fileName)
61+
val compareFile = File(directories.failuresDir, fileName)
7162
compareFile.createNewFile()
7263
compareFile.writeText(result)
7364
throw AssertionError("Logs do not match:\n$result")
7465
}
7566
}
7667
}
77-
}
68+
}

android-snaptesting/src/main/java/com/telefonica/androidsnaptesting/StringMapper.kt renamed to android-snaptesting/src/main/java/com/telefonica/androidsnaptesting/logs/StringMapper.kt

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
package com.telefonica.androidsnaptesting
1+
package com.telefonica.androidsnaptesting.logs
22

33
public interface StringMapper<LogType> {
44
public fun fromLog(log: LogType): String

android-snaptesting/src/main/java/com/telefonica/androidsnaptesting/BitmapImage.kt renamed to android-snaptesting/src/main/java/com/telefonica/androidsnaptesting/screenshots/BitmapImage.kt

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
package com.telefonica.androidsnaptesting
1+
package com.telefonica.androidsnaptesting.screenshots
22

33
import android.graphics.Bitmap
44
import com.dropbox.differ.Color

android-snaptesting/src/main/java/com/telefonica/androidsnaptesting/ResultValidator.kt renamed to android-snaptesting/src/main/java/com/telefonica/androidsnaptesting/screenshots/ResultValidator.kt

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
package com.telefonica.androidsnaptesting
1+
package com.telefonica.androidsnaptesting.screenshots
22

33
import com.dropbox.differ.ImageComparator
44
import kotlin.math.roundToInt

android-snaptesting/src/main/java/com/telefonica/androidsnaptesting/ScreenshotsRule.kt renamed to android-snaptesting/src/main/java/com/telefonica/androidsnaptesting/screenshots/ScreenshotsRule.kt

Lines changed: 13 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -1,10 +1,9 @@
1-
package com.telefonica.androidsnaptesting
1+
package com.telefonica.androidsnaptesting.screenshots
22

33
import android.app.Activity
44
import android.graphics.Bitmap
55
import android.graphics.BitmapFactory
66
import android.os.Build
7-
import android.os.Environment
87
import androidx.annotation.RequiresApi
98
import androidx.compose.ui.graphics.asAndroidBitmap
109
import androidx.compose.ui.test.captureToImage
@@ -15,6 +14,8 @@ import androidx.test.runner.screenshot.Screenshot
1514
import com.dropbox.differ.ImageComparator
1615
import com.dropbox.differ.Mask
1716
import com.dropbox.differ.SimpleImageComparator
17+
import com.telefonica.androidsnaptesting.Directories
18+
import com.telefonica.androidsnaptesting.IgnoreScreenshots
1819
import org.junit.rules.TestRule
1920
import org.junit.runner.Description
2021
import 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} %)"

android-snaptesting/src/main/java/com/telefonica/androidsnaptesting/WriteDiffImage.kt renamed to android-snaptesting/src/main/java/com/telefonica/androidsnaptesting/screenshots/WriteDiffImage.kt

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
package com.telefonica.androidsnaptesting
1+
package com.telefonica.androidsnaptesting.screenshots
22

33
import android.graphics.Bitmap
44
import android.graphics.Canvas

0 commit comments

Comments
 (0)