Onboard AI learns any GitHub repo in minutes and lets you chat with it to locate functionality, understand different parts, and generate new code. Use it for free at www.getonboard.dev. Learn more →
Paparazzi Alternatives
Similar projects and alternatives to paparazzi
-
-
-
Appwrite
Appwrite - The open-source backend cloud platform. Add Auth, Databases, Functions, and Storage to your product and build any application at any scale while using your preferred coding languages and tools.
-
-
-
-
screenshotbot-oss
A Screenshot Testing service to tie with your existing Android, iOS and Web screenshot tests
-
ESP32
DroneBridge for ESP32. A transparent short range wifi based telemetry (serial to WiFi) link. Support for MAVLink, MSP, LTM (iNAV) or any other protocol
-
InfluxDB
Collect and Analyze Billions of Data Points in Real Time. Manage all types of time series data in a single, purpose-built database. Run at any scale in any environment in the cloud, on-premises, or at the edge.
-
-
-
spaceflight-autopilot
🚀 A series of scripted spaceflight maneuvers for a rocket simulator
paparazzi reviews and mentions
-
Compose & Paparazzi: Automatically find @Preview composables at runtime
Looks really nice. Sadly, I wasn't able to test it because it doesn't support application module
Paparazzi is an Android library to render your application screens without a physical device or emulator.
- Paparazzi 1.2 is out
-
Improving snapshot tests with Paparazzi
/** * Finds all files in the components module which have Compose previews * and generates Paparazzi screenshot tests for them. * * The generated tests can then be used to record screenshots with * ./gradlew components:recordPaparazziInternalDebug * * To verify that the current implementation matches the recorded screenshots * ./gradlew components:verifyPaparazziInternalDebug */ fun main() { val path = System.getProperty("user.dir") ?: error("Can't get user dir") // Paparazzi does not currently work in the app module: https://github.com/cashapp/paparazzi/issues/107 // For now this is hardcoded to only check files in the components module. // If we pull our compose files out of the app module to a separate module this code has to be updated. File(path).walk().filter { it.path.contains("/components/src/main/java") && it.extension == "kt" }.forEach { if (it.readText().contains("@Preview")) { processFileWithPreviews(it) } } } /** * Reads the given file, finds the names of all the functions annotated with @Preview * and uses them to generate a Paparazzi test file with one test for each preview. */ private fun processFileWithPreviews(file: File) { val lines = file.readLines() val previewNames = mutableListOf() var saveNextFunctionName = false var packageName = "" lines.forEachIndexed { i, line -> if (i == 0) { packageName = line.split(" ").last() } if (line.contains("@Preview")) { saveNextFunctionName = true } if (saveNextFunctionName && line.startsWith("fun ")) { previewNames += line.split(" ")[1].removeSuffix("()") saveNextFunctionName = false } } val pathString = file.path.replace("src/main", "src/test").split("java").first() + "java" val testFilePath = pathString.toPath() generatePaparazziTest(packageName, file.nameWithoutExtension + "PaparazziTest", testFilePath, previewNames) } fun generatePaparazziTest(packageName: String, fileName: String, path: Path, previewNames: List) { val classBuilder = TypeSpec.classBuilder(fileName) .superclass(PaparazziTest::class) .addAnnotation( AnnotationSpec.builder(Suppress::class) // KotlinPoet does not let us remove redundant public modifiers or Unit return types for the functions, // but we don't mind for generated code as long as the tests work .addMember("\"RedundantVisibilityModifier\", \"RedundantUnitReturnType\"") .build() ) previewNames.forEach { classBuilder.addFunction( FunSpec.builder(it.removeSuffix("Preview").usLocaleDecapitalize()) .addStatement("paparazziRule.snapshot { $it() }") .addAnnotation(Test::class) .build() ) } val testFile = FileSpec.builder(packageName, fileName) .addType(classBuilder.build()) .addFileComment("AUTO-GENERATED FILE by generate_paparazzi_tests.kt\nDO NOT MODIFY") .build() val nioPath = path.toNioPath() testFile.writeTo(nioPath) }
- Do you do test-based capture & publish for QA? (Espresso, JUnit,..)
-
Mockito and non-debuggable testBuildTypes
The good thing is, Square got us covered once more, in regards to the flaky emulators, by providing a screenshot-testing library that does not require an emulator: https://cashapp.github.io/paparazzi/
-
A note from our sponsor - Onboard AI
getonboard.dev | 1 Dec 2023
Stats
cashapp/paparazzi is an open source project licensed under Apache License 2.0 which is an OSI approved license.
The primary programming language of paparazzi is Kotlin.