Skip to content

Commit

Permalink
Fix the issue where the experimental annotation was exposed in Robora…
Browse files Browse the repository at this point in the history
…zzi options
  • Loading branch information
takahirom committed Nov 22, 2024
1 parent b053133 commit 6c75d3a
Show file tree
Hide file tree
Showing 22 changed files with 156 additions and 28 deletions.
14 changes: 9 additions & 5 deletions build.gradle
Original file line number Diff line number Diff line change
Expand Up @@ -46,11 +46,7 @@ allprojects {
tasks.withType(org.jetbrains.kotlin.gradle.tasks.KotlinCompile).configureEach {
compilerOptions {
jvmTarget.set(jvmTargetVersion)

freeCompilerArgs.addAll(
"-Xopt-in=com.github.takahirom.roborazzi.InternalRoborazziApi",
"-Xopt-in=com.github.takahirom.roborazzi.ExperimentalRoborazziApi",
)
allWarningsAsErrors = true
}
}

Expand Down Expand Up @@ -81,6 +77,14 @@ allprojects {
}
}
}
tasks.withType(org.jetbrains.kotlin.gradle.tasks.KotlinCompile).configureEach {
compilerOptions {
freeCompilerArgs.addAll(
"-Xopt-in=com.github.takahirom.roborazzi.InternalRoborazziApi",
"-Xopt-in=com.github.takahirom.roborazzi.ExperimentalRoborazziApi",
)
}
}
}
}

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -79,6 +79,21 @@ data class RoborazziOptions(
val compareOptions: CompareOptions = CompareOptions(),
val recordOptions: RecordOptions = RecordOptions(),
) {
// Stable parameters
constructor(
captureType: CaptureType = if (canScreenshot()) CaptureType.Screenshot() else defaultCaptureType(),
reportOptions: ReportOptions = ReportOptions(),
compareOptions: CompareOptions = CompareOptions(),
recordOptions: RecordOptions = RecordOptions(),
) : this(
taskType = roborazziSystemPropertyTaskType(),
contextData = emptyMap(),
captureType = captureType,
reportOptions = reportOptions,
compareOptions = compareOptions,
recordOptions = recordOptions,
)

interface CaptureType {
class Screenshot : CaptureType {
override fun shouldTakeScreenshot(): Boolean {
Expand All @@ -91,10 +106,14 @@ data class RoborazziOptions(
companion object
}

@ExperimentalRoborazziApi
data class ReportOptions(
val captureResultReporter: CaptureResultReporter = CaptureResultReporter(),
)
) {
// Stable parameters
constructor() : this(
captureResultReporter = CaptureResultReporter()
)
}

data class CompareOptions(
val outputDirectoryPath: String = roborazziSystemPropertyOutputDirectory(),
Expand All @@ -103,6 +122,15 @@ data class RoborazziOptions(
val aiAssertionOptions: AiAssertionOptions? = null,
val resultValidator: (result: ImageComparator.ComparisonResult) -> Boolean = DefaultResultValidator,
) {
// Stable parameters
constructor(
imageComparator: ImageComparator = DefaultImageComparator,
resultValidator: (result: ImageComparator.ComparisonResult) -> Boolean = DefaultResultValidator,
): this(
outputDirectoryPath = roborazziSystemPropertyOutputDirectory(),
imageComparator = imageComparator,
resultValidator = resultValidator,
)

@ExperimentalRoborazziApi
sealed interface ComparisonStyle {
Expand Down Expand Up @@ -236,7 +264,19 @@ data class RoborazziOptions(
val applyDeviceCrop: Boolean = false,
val pixelBitConfig: PixelBitConfig = PixelBitConfig.Argb8888,
val imageIoFormat: ImageIoFormat = ImageIoFormat(),
)
) {
// Stable parameters
constructor(
resizeScale: Double = roborazziDefaultResizeScale(),
applyDeviceCrop: Boolean = false,
pixelBitConfig: PixelBitConfig = PixelBitConfig.Argb8888,
) : this(
resizeScale = resizeScale,
applyDeviceCrop = applyDeviceCrop,
pixelBitConfig = pixelBitConfig,
imageIoFormat = ImageIoFormat(),
)
}

enum class PixelBitConfig {
Argb8888,
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -58,7 +58,27 @@ class RoborazziRule private constructor(
val roborazziOptions: RoborazziOptions = provideRoborazziContext().options,
val roborazziAccessibilityOptions: RoborazziAccessibilityOptions = provideRoborazziContext().roborazziAccessibilityOptions,
val accessibilityCheckStrategy: AccessibilityCheckStrategy = AccessibilityCheckStrategy.None,
)
) {
// Stable parameters
constructor(
captureType: CaptureType = CaptureType.None,
/**
* output directory path
*/
outputDirectoryPath: String = provideRoborazziContext().outputDirectory,

outputFileProvider: FileProvider = provideRoborazziContext().fileProvider
?: defaultFileProvider,
roborazziOptions: RoborazziOptions = provideRoborazziContext().options,
): this(
captureType = captureType,
outputDirectoryPath = outputDirectoryPath,
outputFileProvider = outputFileProvider,
roborazziOptions = roborazziOptions,
roborazziAccessibilityOptions = provideRoborazziContext().roborazziAccessibilityOptions,
accessibilityCheckStrategy = AccessibilityCheckStrategy.None
)
}

@ExperimentalRoborazziApi
interface AccessibilityCheckStrategy {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -129,7 +129,7 @@ class AnimatedGifEncoder {
*/
fun addFrame(canvas: AwtRoboCanvas, resizeImage: Double): Boolean {
val im = canvas.outputImage(resizeImage)
if (im == null || !started) {
if (!started) {
return false
}
var ok = true
Expand Down Expand Up @@ -219,11 +219,11 @@ class AnimatedGifEncoder {
* @return
*/
fun setQuality(quality: Int) {
var quality = quality
if (quality < 1) {
quality = 1
var localQuality = quality
if (localQuality < 1) {
localQuality = 1
}
sample = quality
sample =localQuality
}

/**
Expand Down Expand Up @@ -281,7 +281,7 @@ class AnimatedGifEncoder {
* @return false if open or initial write failed.
*/
fun start(file: String?): Boolean {
var ok = true
var ok: Boolean
try {
out = BufferedOutputStream(FileOutputStream(file))
ok = start(out)
Expand Down Expand Up @@ -367,7 +367,7 @@ class AnimatedGifEncoder {
* Extracts image pixels into byte array "pixels"
*/
private val imagePixels: Unit
private get() {
get() {
val w = image!!.width
val h = image!!.height
val type = image!!.type
Expand Down Expand Up @@ -835,7 +835,6 @@ internal class NeuQuant(thepic: ByteArray?, len: Int, sample: Int) {
*/
fun unbiasnet() {
var i: Int
var j: Int
i = 0
while (i < netsize) {
network[i]!![0] = network[i]!![0] shr netbiasshift
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -146,7 +146,7 @@ class AwtRoboCanvas(width: Int, height: Int, filled: Boolean, bufferedImageType:
}

fun drawText(textPointX: Float, textPointY: Float, texts: List<String>, paint: Paint) {
bufferedImage.graphics { graphics: Graphics2D ->
bufferedImage.graphics {
val graphics2D = bufferedImage.createGraphics()
graphics2D.color = Color(paint.getColor(), true)

Expand Down Expand Up @@ -522,8 +522,6 @@ class AwtRoboCanvas(width: Int, height: Int, filled: Boolean, bufferedImageType:
val rgbComp = comparedImage.getRGB(x, y)
if (rgbOrig != rgbComp) {
diffImage.setRGB(x, y, -0x10000)
} else {
0x0
}
}
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -25,7 +25,7 @@ internal fun captureDump(
recordOptions: RoborazziOptions.RecordOptions,
onCanvas: (AwtRoboCanvas) -> Unit
) {
val start = System.currentTimeMillis()
// val start = System.currentTimeMillis()
val basicSize = dumpOptions.basicSize
val depthSlide = dumpOptions.depthSlideSize

Expand Down Expand Up @@ -156,7 +156,7 @@ internal fun captureDump(
}
bfs()
onCanvas(canvas)
val end = System.currentTimeMillis()
// val end = System.currentTimeMillis()
// println("roborazzi takes " + (end - start) + "ms")
}

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -5,6 +5,7 @@ import androidx.test.core.app.ActivityScenario
import androidx.test.espresso.Espresso.onView
import androidx.test.espresso.matcher.ViewMatchers
import androidx.test.ext.junit.runners.AndroidJUnit4
import com.github.takahirom.roborazzi.ExperimentalRoborazziApi
import com.github.takahirom.roborazzi.RobolectricDeviceQualifiers
import com.github.takahirom.roborazzi.RoborazziOptions
import com.github.takahirom.roborazzi.captureRoboImage
Expand All @@ -20,6 +21,7 @@ import org.robolectric.annotation.GraphicsMode
sdk = [30],
qualifiers = RobolectricDeviceQualifiers.NexusOne
)
@OptIn(ExperimentalRoborazziApi::class)
class ComparisonStyleTest {
@get:Rule
val composeTestRule = createAndroidComposeRule<MainActivity>()
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -23,6 +23,7 @@ import androidx.compose.ui.test.onRoot
import androidx.compose.ui.unit.dp
import androidx.test.ext.junit.runners.AndroidJUnit4
import com.github.takahirom.roborazzi.AccessibilityCheckAfterTestStrategy
import com.github.takahirom.roborazzi.ExperimentalRoborazziApi
import com.github.takahirom.roborazzi.RobolectricDeviceQualifiers
import com.github.takahirom.roborazzi.RoborazziATFAccessibilityCheckOptions
import com.github.takahirom.roborazzi.RoborazziATFAccessibilityChecker
Expand All @@ -39,6 +40,7 @@ import org.junit.runner.RunWith
import org.robolectric.annotation.Config
import org.robolectric.annotation.GraphicsMode

@OptIn(ExperimentalRoborazziApi::class)
@RunWith(AndroidJUnit4::class)
@GraphicsMode(GraphicsMode.Mode.NATIVE)
@Config(qualifiers = RobolectricDeviceQualifiers.Pixel4, sdk = [35])
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -15,6 +15,7 @@ import androidx.compose.ui.test.onRoot
import androidx.compose.ui.unit.dp
import androidx.test.ext.junit.runners.AndroidJUnit4
import com.github.takahirom.roborazzi.AccessibilityCheckAfterTestStrategy
import com.github.takahirom.roborazzi.ExperimentalRoborazziApi
import com.github.takahirom.roborazzi.RobolectricDeviceQualifiers
import com.github.takahirom.roborazzi.RoborazziATFAccessibilityCheckOptions
import com.github.takahirom.roborazzi.RoborazziATFAccessibilityChecker
Expand Down Expand Up @@ -44,6 +45,7 @@ import java.util.Locale
/**
* Test demonstrating a completely custom ATF Check. Expected to be a niche usecase, but critical when required.
*/
@OptIn(ExperimentalRoborazziApi::class)
@RunWith(AndroidJUnit4::class)
@GraphicsMode(GraphicsMode.Mode.NATIVE)
@Config(qualifiers = RobolectricDeviceQualifiers.Pixel4, sdk = [35])
Expand Down Expand Up @@ -161,7 +163,7 @@ class ComposeA11yWithCustomCheckTest {
metadata: ResultMetadata?
) : AccessibilityHierarchyCheckResult(checkClass, type, element, resultId, metadata) {
override fun getMessage(locale: Locale?): CharSequence =
(checkClass.newInstance()).getMessageForResult(locale, this)
(checkClass.getDeclaredConstructor().newInstance()).getMessageForResult(locale, this)
}

@Test
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -6,6 +6,7 @@ import androidx.test.espresso.matcher.ViewMatchers
import androidx.test.ext.junit.runners.AndroidJUnit4
import com.github.takahirom.roborazzi.AiAssertionOptions
import com.github.takahirom.roborazzi.DEFAULT_ROBORAZZI_OUTPUT_DIR_PATH
import com.github.takahirom.roborazzi.ExperimentalRoborazziApi
import com.github.takahirom.roborazzi.GeminiAiAssertionModel
import com.github.takahirom.roborazzi.ROBORAZZI_DEBUG
import com.github.takahirom.roborazzi.RobolectricDeviceQualifiers
Expand All @@ -22,6 +23,7 @@ import org.robolectric.annotation.Config
import org.robolectric.annotation.GraphicsMode
import java.io.File

@OptIn(ExperimentalRoborazziApi::class)
@RunWith(AndroidJUnit4::class)
@GraphicsMode(GraphicsMode.Mode.NATIVE)
@Config(
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -20,6 +20,7 @@ import androidx.test.ext.junit.runners.AndroidJUnit4
import com.dropbox.differ.ImageComparator
import com.dropbox.differ.SimpleImageComparator
import com.github.takahirom.roborazzi.Dump
import com.github.takahirom.roborazzi.ExperimentalRoborazziApi
import com.github.takahirom.roborazzi.RoboComponent
import com.github.takahirom.roborazzi.RobolectricDeviceQualifiers
import com.github.takahirom.roborazzi.RoborazziOptions
Expand Down Expand Up @@ -92,6 +93,7 @@ class ManualTest {
.captureRoboImage()
}

@OptIn(ExperimentalRoborazziApi::class)
@Test
@Config(qualifiers = RobolectricDeviceQualifiers.MediumTablet)
fun captureScreenWithMetadata() {
Expand All @@ -112,6 +114,7 @@ class ManualTest {
.captureRoboImage()
}

@OptIn(ExperimentalRoborazziApi::class)
@Test
fun captureSmallComponentImage() {
onView(withId(R.id.button_first))
Expand All @@ -130,12 +133,14 @@ class ManualTest {
.captureRoboImage()
}

@OptIn(ExperimentalRoborazziApi::class)
@Test
fun captureViewOnWindowImage() {
composeTestRule.activity.findViewById<View>(R.id.button_first)
.captureRoboImage("${roborazziSystemPropertyOutputDirectory()}/manual_view_on_window.png")
}

@OptIn(ExperimentalRoborazziApi::class)
@Test
fun captureViewNotOnWindowImage() {
TextView(composeTestRule.activity).apply {
Expand All @@ -144,24 +149,27 @@ class ManualTest {
}.captureRoboImage("${roborazziSystemPropertyOutputDirectory()}/manual_view_without_window.png")
}

@OptIn(ExperimentalRoborazziApi::class)
@Test
fun captureComposeLambdaImage() {
captureRoboImage("${roborazziSystemPropertyOutputDirectory()}/manual_compose.png") {
Text("Hello Compose!")
}
}

@OptIn(ExperimentalRoborazziApi::class)
@Test
fun captureBitmapImage() {
createBitmap(100, 100, Bitmap.Config.ARGB_8888)
.apply {
applyCanvas {
drawColor(android.graphics.Color.YELLOW)
drawColor(Color.YELLOW)
}
}
.captureRoboImage("${roborazziSystemPropertyOutputDirectory()}/manual_bitmap.png")
}

@OptIn(ExperimentalRoborazziApi::class)
@Test
fun captureRoboImageSampleWithQuery() {
val filePath =
Expand Down Expand Up @@ -220,6 +228,7 @@ class ManualTest {
}


@OptIn(ExperimentalRoborazziApi::class)
@Test
fun captureRoboGifSample() {
onView(ViewMatchers.isRoot())
Expand Down Expand Up @@ -256,6 +265,7 @@ class ManualTest {
}
}

@OptIn(ExperimentalRoborazziApi::class)
@Test
@Config(
qualifiers = "w150dp-h200dp",
Expand All @@ -275,6 +285,7 @@ class ManualTest {
}
}

@OptIn(ExperimentalRoborazziApi::class)
@Test
fun roboOutputNameTest() {
assert(roboOutputName() == "com.github.takahirom.roborazzi.sample.ManualTest.roboOutputNameTest")
Expand Down
Loading

0 comments on commit 6c75d3a

Please sign in to comment.