Fetching the latest programs, projects, and workspace data.

Fast unit testing runtime for Android
Showing 5 of 5 projects. Click any project card for scope, mentors, and proposal studio.
Mentors: Student: DevashishBasu
This project aims to address a critical gap in Robolectric's testing framework related to Activity context handling. Currently, Robolectric utilizes the Application Context for Activities, diverging from real Android environments. This incongruity can lead to unreliable test results. The proposal seeks to align Robolectric's Activity context handling with real Android behavior to enhance testing accuracy and reliability. The plan includes investigation, planning, implementation, testing, documentation, and optional enhancements phases. The deliverables include updating Robolectric, conducting thorough testing, and providing documentation.
Mentors: Student: shashankkumar7
With Google Play's adoption of the AAB format as the standard publishing format, optimizing app delivery has become more efficient, allowing apps to only download the code and resources needed for a user's specific device configuration. Dynamic feature modules further enhance this by enabling on-demand feature downloads. However, this advanced modularization introduces complexities in local testing environments, particularly with tools like Robolectric that are critical for unit testing Android applications. This project aims to extend Robolectric's testing capabilities to fully support dynamic feature modules and the AAB publishing format, addressing the current limitations in activity launching, resource loading, and environment setup for testing apps that utilize dynamic feature delivery and on-demand feature modules.
Mentors: Student: Wenyi Shi
Robolectric is a unit testing framework for Android, which supports running Android tests in JVM instead of physical device or emulator. Robolectric works by both calling into real Android java classes and optionally delegating to functions of shadow(s). When defining a shadow, Robolectric allows the use of looseSignatures to “when an exact method signature match isn't found, Robolectric will look for a method with the same name but with all argument types replaced with java.lang.Object.”. looseSignatures has been working well in Robolectric framework for years, however it has its own downsides, such as error-prone, cumbersome. In this proposal, I plan to 1) Deprecate the usage of looseSignatures, add WithType 2) Adapt Robolectric Annotation Processor (RAP) module to utilize @WithType annotation
Mentors: Student: Sagar Khurana
Robolectric uses error-prone to check the common code quality problems. Currently, there are many warnings/recommendations left to fix, this topic will focus on fixing those problems to improve the Robolectric’s code quality. And there are many tests that are written in Java which I will be converted into Kotlin to make them more concise and to support Google’s Kotlin-first advocacy.
Mentors: Student: Umesh Singh
Switching to Conscrypt, simulating the security APIs becomes much more high-fidelity and it achieves the goal of Robolectric to make it similar to an Android environment. Currently, Robolectric uses BouncyCastle as the Java Cryptography Extension (JCE) security provider. Starting in Android P, Android switched to using Google Conscrypt as the security provider. To be more consistent with Android, Robolectric should update the default security provider to Conscrypt. As it is using the BouncyCastle, this means that whenever the JCA APIs are used in a Robolecetric test, BouncyCastle will be used by default. Officially, In Android the default JCE provider is Conscrypt. This is a Java wrapper over BoringSSL. The goal is to have Robolectric switch from BouncyCastle by default to Conscrypt. The Conscrypt module uses BoringSSL, a native library that is a Google fork of OpenSSL and which is used in many Google products like Google Chrome for cryptography and TLS. Conscrypt uses Java code and a native library to provide the Android TLS implementation as well as a large portion of Android cryptographic functionality such as key generators, ciphers, and message digests. Conscrypt is relatively selective and focuses on the most important and widely-used algorithms. Conscrypt also supports the curves in Elliptic Curves crypto operations and it is much faster than BouncyCastle as it is optimized native code. But BoringSSL doesn't have official releases and makes no guarantees around API or ABI stability.