Skip to content
Merged
Show file tree
Hide file tree
Changes from 3 commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
@@ -0,0 +1,2 @@
android.useAndroidX=true
app.cash.paparazzi.localeDefault=""
Original file line number Diff line number Diff line change
@@ -0,0 +1,4 @@
<?xml version="1.0" encoding="utf-8"?>
<resources>
<string name="color">Couleur</string>
</resources>
Original file line number Diff line number Diff line change
@@ -0,0 +1,40 @@
package app.cash.paparazzi.plugin.test

import app.cash.paparazzi.Paparazzi
import com.google.testing.junit.testparameterinjector.TestParameter
import com.google.testing.junit.testparameterinjector.TestParameterInjector
import org.junit.After
import org.junit.Rule
import org.junit.Test
import org.junit.runner.RunWith

@RunWith(TestParameterInjector::class)
internal class DefaultLocaleSnapshotTest(
@TestParameter private val defaultLocale: SystemPropLocale
) {

internal enum class SystemPropLocale(val tag: String?) {
Default(null),
EN_GB("en-rGB"),
FR_FR("fr-rFR")
}

init {
System.setProperty("app.cash.paparazzi.localeDefault", defaultLocale.tag.orEmpty())
}

@get:Rule
val paparazzi = Paparazzi()

@After
fun tearDown() {
System.clearProperty("app.cash.paparazzi.localeDefault")
}

@Test
fun `Verify system prop default locale`() {
paparazzi.snapshot(
view = paparazzi.inflate(R.layout.title_color)
)
}
}
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
3 changes: 1 addition & 2 deletions paparazzi/src/main/java/app/cash/paparazzi/DeviceConfig.kt
Original file line number Diff line number Diff line change
Expand Up @@ -23,7 +23,6 @@ import com.android.ide.common.resources.configuration.DensityQualifier
import com.android.ide.common.resources.configuration.FolderConfiguration
import com.android.ide.common.resources.configuration.KeyboardStateQualifier
import com.android.ide.common.resources.configuration.LayoutDirectionQualifier
import com.android.ide.common.resources.configuration.LocaleQualifier
import com.android.ide.common.resources.configuration.NavigationMethodQualifier
import com.android.ide.common.resources.configuration.NetworkCodeQualifier
import com.android.ide.common.resources.configuration.NightModeQualifier
Expand Down Expand Up @@ -112,7 +111,7 @@ public class DeviceConfig(
countryCodeQualifier = CountryCodeQualifier()
layoutDirectionQualifier = LayoutDirectionQualifier(layoutDirection)
networkCodeQualifier = NetworkCodeQualifier()
localeQualifier = if (locale != null) LocaleQualifier.getQualifier(locale) else LocaleQualifier()
localeQualifier = detectLocaleQualifierDefault(locale = locale)
versionQualifier = VersionQualifier()
screenRoundQualifier = ScreenRoundQualifier(screenRound)
}
Expand Down
22 changes: 22 additions & 0 deletions paparazzi/src/main/java/app/cash/paparazzi/SnapshotHandler.kt
Original file line number Diff line number Diff line change
Expand Up @@ -15,8 +15,10 @@
*/
package app.cash.paparazzi

import com.android.ide.common.resources.configuration.LocaleQualifier
import java.awt.image.BufferedImage
import java.io.Closeable
import java.util.Locale

public interface SnapshotHandler : Closeable {
public fun newFrameHandler(snapshot: Snapshot, frameCount: Int, fps: Int): FrameHandler
Expand All @@ -28,3 +30,23 @@ public interface SnapshotHandler : Closeable {

public fun detectMaxPercentDifferenceDefault(): Double =
System.getProperty("app.cash.paparazzi.maxPercentDifferenceDefault")?.toDoubleOrNull() ?: 0.01

/**
* Returns a LocaleQualifier for snapshots.
*
* Uses the provided `locale` if passed in, otherwise falls back to the
* `app.cash.paparazzi.localeDefault` system property, and finally the
* default `LocaleQualifier()` if neither are available.
*
* @param locale Optional Locale to use for snapshot tests.
* @return LocaleQualifier for snapshot tests.
*/
internal fun detectLocaleQualifierDefault(locale: String?): LocaleQualifier {
val propLocale = System.getProperty("app.cash.paparazzi.localeDefault")
?.takeIf { it.isNotEmpty() }
return when {
locale != null -> LocaleQualifier.getQualifier(locale)
propLocale != null -> LocaleQualifier.getQualifier(propLocale)
else -> LocaleQualifier()
}
}