Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Fixes part of #4302 - Introducing a JUnit annotation & rule for overriding Platform Parameters and Feature Flags #5565

Open
wants to merge 43 commits into
base: develop
Choose a base branch
from

Conversation

Rd4dev
Copy link
Collaborator

@Rd4dev Rd4dev commented Nov 4, 2024

Explanation

Fixes part of #4302

[Not fixed in this PR: Maybe: Introducing additional JUnit functionality to help with testing.]

This PR includes:

Feature Flags Enhancements:

  • Introduced annotations to enable, disable, and reset feature flags.
  • Add support for overriding platform parameters.
  • Annotations work at both the class and method levels (-) reset annotation.
  • Annotations are repeatable.

Refactoring Test Module Constants:

  • Moved test module constants to a dedicated Platform Parameters Constants Module.
  • This module is used exclusively for testing purposes.

Test File Migration:

  • Migrated all test files to production usage.
  • Removed the Test Platform Parameter Module.
  • Refactored all Platform Parameter Providers away from TestModule.

Oppia Test Rule Validation:

  • Implemented a regex-based file content validation to enforce the inclusion of @get:Rule val oppiaTestRule = OppiaTestRule() in test files.
  • Identified (~)298 test files missing the Oppia Test Rule.
  • Declared Oppia Test Rule in every test file (-) scripts and few domain modules
  • [To Complete] Analyze incompatible test rule declaration files. [mostly script files]

Wiki Page Updated

https://github.com/oppia/oppia-android/blob/bcc9d4a9a670673a623240876192b44f5ddc750f/wiki/Platform-Parameters-%26-Feature-Flags.md#how-to-write-tests-related-to-platform-parameters

Todo:

  • Analyze incompatible test rule declaration files. [mostly script files].

Essential Checklist

  • The PR title and explanation each start with "Fix #bugnum: " (If this PR fixes part of an issue, prefix the title with "Fix part of #bugnum: ...".)
  • Any changes to scripts/assets files have their rationale included in the PR explanation.
  • The PR follows the style guide.
  • The PR does not contain any unnecessary code changes from Android Studio (reference).
  • The PR is made from a branch that's not called "develop" and is up-to-date with "develop".
  • The PR is assigned to the appropriate reviewers (reference).

…ameters

Initial commit, this works with individual overrides while having multiple enable / diasable annotations mess with the overriding and cause the default value to be thrown even with a dummy feature flag name and this commit doesn't address platform parameter value overrides and doesnot check for Oppia Test Rule to be present on all tests.
…or both feature flags and parameter value overrides
@Rd4dev
Copy link
Collaborator Author

Rd4dev commented Nov 4, 2024

@BenHenning @adhiamboperes Would it be possible to provide a draft review or approval on the implementation to ensure things are on the right track before I proceed with the rest? I would like to confirm if the mentioned

"Updating all tests to use the production module instead of the test or a custom module, and adding OppiaTestRule/test annotations where needed to ensure overrides are still happening."

is done right. If not then will rework based on the feedback.

@BenHenning
Copy link
Member

Reviewed during CLaM meeting today and feedback was left in real-time.

@BenHenning BenHenning assigned Rd4dev and unassigned BenHenning Nov 5, 2024
@BenHenning
Copy link
Member

@BenHenning @adhiamboperes Would it be possible to provide a draft review or approval on the implementation to ensure things are on the right track before I proceed with the rest? I would like to confirm if the mentioned

"Updating all tests to use the production module instead of the test or a custom module, and adding OppiaTestRule/test annotations where needed to ensure overrides are still happening."

is done right. If not then will rework based on the feedback.

Everything looks right except the overriding mechanism. Rather than having an override built into the production module, we should be overriding the value via OkHttp and the platform parameter syncing. This might be a bit tricky to set up, so it may well be worth getting this working before migrating all uses over to the new system.

This comment was marked as outdated.

This comment was marked as outdated.

@adhiamboperes adhiamboperes removed their assignment Nov 7, 2024

This comment was marked as outdated.

This comment was marked as outdated.

Copy link

oppiabot bot commented Nov 21, 2024

Hi @Rd4dev, I'm going to mark this PR as stale because it hasn't had any updates for 7 days. If no further activity occurs within 7 days, it will be automatically closed so that others can take up the issue.
If you are still working on this PR, please make a follow-up commit within 3 days (and submit it for review, if applicable). Please also let us know if you are stuck so we can help you!

@oppiabot oppiabot bot added the stale Corresponds to items that haven't seen a recent update and may be automatically closed. label Nov 21, 2024
…o annotations_test_rules_platform_parameter
@oppiabot oppiabot bot removed the stale Corresponds to items that haven't seen a recent update and may be automatically closed. label Nov 22, 2024

This comment was marked as outdated.

Copy link

oppiabot bot commented Nov 30, 2024

Hi @Rd4dev, I'm going to mark this PR as stale because it hasn't had any updates for 7 days. If no further activity occurs within 7 days, it will be automatically closed so that others can take up the issue.
If you are still working on this PR, please make a follow-up commit within 3 days (and submit it for review, if applicable). Please also let us know if you are stuck so we can help you!

@oppiabot oppiabot bot added the stale Corresponds to items that haven't seen a recent update and may be automatically closed. label Nov 30, 2024

This comment was marked as outdated.

This comment was marked as outdated.

This comment was marked as outdated.

@Rd4dev Rd4dev removed the stale Corresponds to items that haven't seen a recent update and may be automatically closed. label Dec 6, 2024

This comment was marked as outdated.

Copy link

APK & AAB differences analysis

Note that this is a summarized snapshot. See the CI artifacts for detailed differences.

Dev

Expand to see flavor specifics

Universal APK

APK file size: 19 MiB (old), 19 MiB (new), 29 KiB (Removed)

APK download size (estimated): 17 MiB (old), 17 MiB (new), 19 KiB (Removed)

Method count: 260177 (old), 259603 (new), 574 (Removed)

Features: 2 (old), 2 (new), 0 (No change)

Permissions: 6 (old), 6 (new), 0 (No change)

Resources: 6818 (old), 6816 (new), 2 (Removed)

  • Anim: 43 (old), 43 (new), 0 (No change)
  • Animator: 26 (old), 26 (new), 0 (No change)
  • Array: 15 (old), 15 (new), 0 (No change)
  • Attr: 922 (old), 922 (new), 0 (No change)
  • Bool: 9 (old), 9 (new), 0 (No change)
  • Color: 967 (old), 967 (new), 0 (No change)
  • Dimen: 1048 (old), 1048 (new), 0 (No change)
  • Drawable: 380 (old), 380 (new), 0 (No change)
  • Id: 1275 (old), 1275 (new), 0 (No change)
  • Integer: 37 (old), 37 (new), 0 (No change)
  • Interpolator: 11 (old), 11 (new), 0 (No change)
  • Layout: 380 (old), 380 (new), 0 (No change)
  • Menu: 3 (old), 3 (new), 0 (No change)
  • Mipmap: 1 (old), 1 (new), 0 (No change)
  • Plurals: 10 (old), 10 (new), 0 (No change)
  • Raw: 2 (old), 2 (new), 0 (No change)
  • String: 852 (old), 850 (new), 2 (Removed):
    • string/profile_edit_delete_success_dialog_positive_button (removed)
    • string/profile_edit_delete_successful_message (removed)
  • Style: 831 (old), 831 (new), 0 (No change)
  • Xml: 6 (old), 6 (new), 0 (No change)

Lesson assets: 111 (old), 111 (new), 0 (No change)

AAB differences

Expand to see AAB specifics

Supported configurations:

  • hdpi (same)
  • ldpi (same)
  • mdpi (same)
  • tvdpi (same)
  • xhdpi (same)
  • xxhdpi (same)
  • xxxhdpi (same)

Base APK

APK file size: 18 MiB (old), 18 MiB (new), 29 KiB (Removed)
APK download size (estimated): 17 MiB (old), 17 MiB (new), 19 KiB (Removed)
Method count: 260177 (old), 259603 (new), 574 (Removed)
Resources: 6768 (old), 6766 (new), 2 (Removed)

  • String: 852 (old), 850 (new), 2 (Removed)

Configuration hdpi

APK file size: 50 KiB (old), 50 KiB (new), 0 bytes (No change)
APK download size (estimated): 18 KiB (old), 18 KiB (new), 0 bytes (No change)

Configuration ldpi

APK file size: 49 KiB (old), 49 KiB (new), 0 bytes (No change)
APK download size (estimated): 14 KiB (old), 14 KiB (new), 0 bytes (No change)

Configuration mdpi

APK file size: 45 KiB (old), 45 KiB (new), 0 bytes (No change)
APK download size (estimated): 14 KiB (old), 14 KiB (new), 0 bytes (No change)

Configuration tvdpi

APK file size: 86 KiB (old), 86 KiB (new), 0 bytes (No change)
APK download size (estimated): 29 KiB (old), 29 KiB (new), 0 bytes (No change)

Configuration xhdpi

APK file size: 57 KiB (old), 57 KiB (new), 0 bytes (No change)
APK download size (estimated): 21 KiB (old), 21 KiB (new), 0 bytes (No change)

Configuration xxhdpi

APK file size: 63 KiB (old), 63 KiB (new), 0 bytes (No change)
APK download size (estimated): 29 KiB (old), 29 KiB (new), 0 bytes (No change)

Configuration xxxhdpi

APK file size: 63 KiB (old), 63 KiB (new), 0 bytes (No change)
APK download size (estimated): 28 KiB (old), 28 KiB (new), 0 bytes (No change)

Alpha

Expand to see flavor specifics

Universal APK

APK file size: 11 MiB (old), 11 MiB (new), 21 KiB (Removed)

APK download size (estimated): 10 MiB (old), 10 MiB (new), 16 KiB (Removed)

Method count: 116253 (old), 116054 (new), 199 (Removed)

Features: 2 (old), 2 (new), 0 (No change)

Permissions: 6 (old), 6 (new), 0 (No change)

Resources: 5786 (old), 5784 (new), 2 (Removed)

  • Anim: 33 (old), 33 (new), 0 (No change)
  • Animator: 24 (old), 24 (new), 0 (No change)
  • Array: 14 (old), 14 (new), 0 (No change)
  • Attr: 888 (old), 888 (new), 0 (No change)
  • Bool: 8 (old), 8 (new), 0 (No change)
  • Color: 820 (old), 820 (new), 0 (No change)
  • Dimen: 780 (old), 780 (new), 0 (No change)
  • Drawable: 342 (old), 342 (new), 0 (No change)
  • Id: 1221 (old), 1221 (new), 0 (No change)
  • Integer: 32 (old), 32 (new), 0 (No change)
  • Interpolator: 11 (old), 11 (new), 0 (No change)
  • Layout: 343 (old), 343 (new), 0 (No change)
  • Menu: 1 (old), 1 (new), 0 (No change)
  • Mipmap: 1 (old), 1 (new), 0 (No change)
  • Plurals: 10 (old), 10 (new), 0 (No change)
  • String: 785 (old), 783 (new), 2 (Removed):
    • string/profile_edit_delete_success_dialog_positive_button (removed)
    • string/profile_edit_delete_successful_message (removed)
  • Style: 472 (old), 472 (new), 0 (No change)
  • Xml: 1 (old), 1 (new), 0 (No change)

Lesson assets: 111 (old), 111 (new), 0 (No change)

AAB differences

Expand to see AAB specifics

Supported configurations:

  • hdpi (same)
  • ldpi (same)
  • mdpi (same)
  • tvdpi (same)
  • xhdpi (same)
  • xxhdpi (same)
  • xxxhdpi (same)

Base APK

APK file size: 11 MiB (old), 11 MiB (new), 21 KiB (Removed)
APK download size (estimated): 10 MiB (old), 10 MiB (new), 13 KiB (Removed)
Method count: 116253 (old), 116054 (new), 199 (Removed)
Resources: 5743 (old), 5741 (new), 2 (Removed)

  • String: 785 (old), 783 (new), 2 (Removed)

Configuration hdpi

APK file size: 43 KiB (old), 43 KiB (new), 0 bytes (No change)
APK download size (estimated): 17 KiB (old), 17 KiB (new), 0 bytes (No change)

Configuration ldpi

APK file size: 44 KiB (old), 44 KiB (new), 0 bytes (No change)
APK download size (estimated): 13 KiB (old), 13 KiB (new), 0 bytes (No change)

Configuration mdpi

APK file size: 38 KiB (old), 38 KiB (new), 0 bytes (No change)
APK download size (estimated): 13 KiB (old), 13 KiB (new), 0 bytes (No change)

Configuration tvdpi

APK file size: 73 KiB (old), 73 KiB (new), 0 bytes (No change)
APK download size (estimated): 27 KiB (old), 27 KiB (new), 0 bytes (No change)

Configuration xhdpi

APK file size: 50 KiB (old), 50 KiB (new), 0 bytes (No change)
APK download size (estimated): 20 KiB (old), 20 KiB (new), 0 bytes (No change)

Configuration xxhdpi

APK file size: 55 KiB (old), 55 KiB (new), 0 bytes (No change)
APK download size (estimated): 28 KiB (old), 28 KiB (new), 0 bytes (No change)

Configuration xxxhdpi

APK file size: 55 KiB (old), 55 KiB (new), 0 bytes (No change)
APK download size (estimated): 27 KiB (old), 27 KiB (new), 0 bytes (No change)

Beta

Expand to see flavor specifics

Universal APK

APK file size: 11 MiB (old), 11 MiB (new), 21 KiB (Removed)

APK download size (estimated): 10 MiB (old), 10 MiB (new), 12 KiB (Removed)

Method count: 116259 (old), 116077 (new), 182 (Removed)

Features: 2 (old), 2 (new), 0 (No change)

Permissions: 6 (old), 6 (new), 0 (No change)

Resources: 5786 (old), 5784 (new), 2 (Removed)

  • Anim: 33 (old), 33 (new), 0 (No change)
  • Animator: 24 (old), 24 (new), 0 (No change)
  • Array: 14 (old), 14 (new), 0 (No change)
  • Attr: 888 (old), 888 (new), 0 (No change)
  • Bool: 8 (old), 8 (new), 0 (No change)
  • Color: 820 (old), 820 (new), 0 (No change)
  • Dimen: 780 (old), 780 (new), 0 (No change)
  • Drawable: 342 (old), 342 (new), 0 (No change)
  • Id: 1221 (old), 1221 (new), 0 (No change)
  • Integer: 32 (old), 32 (new), 0 (No change)
  • Interpolator: 11 (old), 11 (new), 0 (No change)
  • Layout: 343 (old), 343 (new), 0 (No change)
  • Menu: 1 (old), 1 (new), 0 (No change)
  • Mipmap: 1 (old), 1 (new), 0 (No change)
  • Plurals: 10 (old), 10 (new), 0 (No change)
  • String: 785 (old), 783 (new), 2 (Removed):
    • string/profile_edit_delete_success_dialog_positive_button (removed)
    • string/profile_edit_delete_successful_message (removed)
  • Style: 472 (old), 472 (new), 0 (No change)
  • Xml: 1 (old), 1 (new), 0 (No change)

Lesson assets: 111 (old), 111 (new), 0 (No change)

AAB differences

Expand to see AAB specifics

Supported configurations:

  • hdpi (same)
  • ldpi (same)
  • mdpi (same)
  • tvdpi (same)
  • xhdpi (same)
  • xxhdpi (same)
  • xxxhdpi (same)

Base APK

APK file size: 11 MiB (old), 11 MiB (new), 21 KiB (Removed)
APK download size (estimated): 10 MiB (old), 10 MiB (new), 16 KiB (Removed)
Method count: 116259 (old), 116077 (new), 182 (Removed)
Resources: 5743 (old), 5741 (new), 2 (Removed)

  • String: 785 (old), 783 (new), 2 (Removed)

Configuration hdpi

APK file size: 43 KiB (old), 43 KiB (new), 0 bytes (No change)
APK download size (estimated): 17 KiB (old), 17 KiB (new), 0 bytes (No change)

Configuration ldpi

APK file size: 44 KiB (old), 44 KiB (new), 0 bytes (No change)
APK download size (estimated): 13 KiB (old), 13 KiB (new), 0 bytes (No change)

Configuration mdpi

APK file size: 38 KiB (old), 38 KiB (new), 0 bytes (No change)
APK download size (estimated): 13 KiB (old), 13 KiB (new), 0 bytes (No change)

Configuration tvdpi

APK file size: 73 KiB (old), 73 KiB (new), 0 bytes (No change)
APK download size (estimated): 27 KiB (old), 27 KiB (new), 0 bytes (No change)

Configuration xhdpi

APK file size: 50 KiB (old), 50 KiB (new), 0 bytes (No change)
APK download size (estimated): 20 KiB (old), 20 KiB (new), 0 bytes (No change)

Configuration xxhdpi

APK file size: 55 KiB (old), 55 KiB (new), 0 bytes (No change)
APK download size (estimated): 28 KiB (old), 28 KiB (new), 0 bytes (No change)

Configuration xxxhdpi

APK file size: 55 KiB (old), 55 KiB (new), 0 bytes (No change)
APK download size (estimated): 27 KiB (old), 27 KiB (new), 0 bytes (No change)

Ga

Expand to see flavor specifics

Universal APK

APK file size: 11 MiB (old), 11 MiB (new), 21 KiB (Removed)

APK download size (estimated): 10 MiB (old), 10 MiB (new), 11 KiB (Removed)

Method count: 116259 (old), 116077 (new), 182 (Removed)

Features: 2 (old), 2 (new), 0 (No change)

Permissions: 6 (old), 6 (new), 0 (No change)

Resources: 5786 (old), 5784 (new), 2 (Removed)

  • Anim: 33 (old), 33 (new), 0 (No change)
  • Animator: 24 (old), 24 (new), 0 (No change)
  • Array: 14 (old), 14 (new), 0 (No change)
  • Attr: 888 (old), 888 (new), 0 (No change)
  • Bool: 8 (old), 8 (new), 0 (No change)
  • Color: 820 (old), 820 (new), 0 (No change)
  • Dimen: 780 (old), 780 (new), 0 (No change)
  • Drawable: 342 (old), 342 (new), 0 (No change)
  • Id: 1221 (old), 1221 (new), 0 (No change)
  • Integer: 32 (old), 32 (new), 0 (No change)
  • Interpolator: 11 (old), 11 (new), 0 (No change)
  • Layout: 343 (old), 343 (new), 0 (No change)
  • Menu: 1 (old), 1 (new), 0 (No change)
  • Mipmap: 1 (old), 1 (new), 0 (No change)
  • Plurals: 10 (old), 10 (new), 0 (No change)
  • String: 785 (old), 783 (new), 2 (Removed):
    • string/profile_edit_delete_success_dialog_positive_button (removed)
    • string/profile_edit_delete_successful_message (removed)
  • Style: 472 (old), 472 (new), 0 (No change)
  • Xml: 1 (old), 1 (new), 0 (No change)

Lesson assets: 111 (old), 111 (new), 0 (No change)

AAB differences

Expand to see AAB specifics

Supported configurations:

  • hdpi (same)
  • ldpi (same)
  • mdpi (same)
  • tvdpi (same)
  • xhdpi (same)
  • xxhdpi (same)
  • xxxhdpi (same)

Base APK

APK file size: 11 MiB (old), 11 MiB (new), 21 KiB (Removed)
APK download size (estimated): 10 MiB (old), 10 MiB (new), 15 KiB (Removed)
Method count: 116259 (old), 116077 (new), 182 (Removed)
Resources: 5743 (old), 5741 (new), 2 (Removed)

  • String: 785 (old), 783 (new), 2 (Removed)

Configuration hdpi

APK file size: 43 KiB (old), 43 KiB (new), 0 bytes (No change)
APK download size (estimated): 17 KiB (old), 17 KiB (new), 0 bytes (No change)

Configuration ldpi

APK file size: 44 KiB (old), 44 KiB (new), 0 bytes (No change)
APK download size (estimated): 13 KiB (old), 13 KiB (new), 0 bytes (No change)

Configuration mdpi

APK file size: 38 KiB (old), 38 KiB (new), 0 bytes (No change)
APK download size (estimated): 13 KiB (old), 13 KiB (new), 0 bytes (No change)

Configuration tvdpi

APK file size: 73 KiB (old), 73 KiB (new), 0 bytes (No change)
APK download size (estimated): 27 KiB (old), 27 KiB (new), 0 bytes (No change)

Configuration xhdpi

APK file size: 50 KiB (old), 50 KiB (new), 0 bytes (No change)
APK download size (estimated): 20 KiB (old), 20 KiB (new), 0 bytes (No change)

Configuration xxhdpi

APK file size: 55 KiB (old), 55 KiB (new), 0 bytes (No change)
APK download size (estimated): 28 KiB (old), 28 KiB (new), 0 bytes (No change)

Configuration xxxhdpi

APK file size: 55 KiB (old), 55 KiB (new), 0 bytes (No change)
APK download size (estimated): 27 KiB (old), 27 KiB (new), 0 bytes (No change)

Copy link

github-actions bot commented Jan 7, 2025

Coverage Report

Results

Number of files assessed: 269
Overall Coverage: 87.54%
Coverage Analysis: PASS

Passing coverage

Files with passing code coverage
File Coverage Lines Hit Status Min Required
AndroidLocaleProfile.ktutility/src/main/java/org/oppia/android/util/locale/AndroidLocaleProfile.kt
100.00% 84 / 84 70%
OppiaLocaleContextExtensions.ktutility/src/main/java/org/oppia/android/util/locale/OppiaLocaleContextExtensions.kt
100.00% 10 / 10 70%
DisplayLocaleImpl.ktutility/src/main/java/org/oppia/android/util/locale/DisplayLocaleImpl.kt
89.74% 35 / 39 70%
OppiaBidiFormatterImpl.ktutility/src/main/java/org/oppia/android/util/locale/OppiaBidiFormatterImpl.kt
100.00% 5 / 5 70%
MachineLocaleImpl.ktutility/src/main/java/org/oppia/android/util/locale/MachineLocaleImpl.kt
86.05% 37 / 43 70%
TestOppiaBidiFormatter.ktutility/src/main/java/org/oppia/android/util/locale/testing/TestOppiaBidiFormatter.kt
82.61% 19 / 23 70%
AndroidLocaleFactory.ktutility/src/main/java/org/oppia/android/util/locale/AndroidLocaleFactory.kt
100.00% 86 / 86 70%
RealExtensions.ktutility/src/main/java/org/oppia/android/util/math/RealExtensions.kt
89.73% 201 / 224 70%
PeekableIterator.ktutility/src/main/java/org/oppia/android/util/math/PeekableIterator.kt
100.00% 13 / 13 70%
FractionParser.ktutility/src/main/java/org/oppia/android/util/math/FractionParser.kt
100.00% 61 / 61 70%
ComparableOperationExtensions.ktutility/src/main/java/org/oppia/android/util/math/ComparableOperationExtensions.kt
95.00% 19 / 20 70%
PolynomialExtensions.ktutility/src/main/java/org/oppia/android/util/math/PolynomialExtensions.kt
99.48% 190 / 191 70%
NumericExpressionEvaluator.ktutility/src/main/java/org/oppia/android/util/math/NumericExpressionEvaluator.kt
86.36% 19 / 22 70%
ExpressionToLatexConverter.ktutility/src/main/java/org/oppia/android/util/math/ExpressionToLatexConverter.kt
86.67% 26 / 30 70%
MathExpressionParser.ktutility/src/main/java/org/oppia/android/util/math/MathExpressionParser.kt
91.09% 511 / 561 70%
ComparatorExtensions.ktutility/src/main/java/org/oppia/android/util/math/ComparatorExtensions.kt
100.00% 20 / 20 70%
RatioExtensions.ktutility/src/main/java/org/oppia/android/util/math/RatioExtensions.kt
100.00% 6 / 6 70%
ExpressionToPolynomialConverter.ktutility/src/main/java/org/oppia/android/util/math/ExpressionToPolynomialConverter.kt
91.67% 55 / 60 70%
MathTokenizer.ktutility/src/main/java/org/oppia/android/util/math/MathTokenizer.kt
94.26% 197 / 209 70%
ExpressionToComparableOperationConverter.ktutility/src/main/java/org/oppia/android/util/math/ExpressionToComparableOperationConverter.kt
96.69% 117 / 121 70%
NetworkConnectionUtilProdImpl.ktutility/src/main/java/org/oppia/android/util/networking/NetworkConnectionUtilProdImpl.kt
93.75% 15 / 16 70%
NetworkConnectionUtilDebugImpl.ktutility/src/main/java/org/oppia/android/util/networking/NetworkConnectionUtilDebugImpl.kt
90.91% 10 / 11 70%
AssetModule.ktutility/src/main/java/org/oppia/android/util/caching/AssetModule.kt
100.00% 3 / 3 70%
AssetTestNoOpModule.ktutility/src/main/java/org/oppia/android/util/caching/testing/AssetTestNoOpModule.kt
100.00% 3 / 3 70%
TestNoOpAssetRepository.ktutility/src/main/java/org/oppia/android/util/caching/testing/TestNoOpAssetRepository.kt
100.00% 12 / 12 70%
InMemoryBlockingCache.ktutility/src/main/java/org/oppia/android/util/data/InMemoryBlockingCache.kt
82.14% 46 / 56 70%
AsyncResult.ktutility/src/main/java/org/oppia/android/util/data/AsyncResult.kt
100.00% 38 / 38 70%
DataProviders.ktutility/src/main/java/org/oppia/android/util/data/DataProviders.kt
99.25% 133 / 134 70%
BundleExtensions.ktutility/src/main/java/org/oppia/android/util/extensions/BundleExtensions.kt
84.62% 11 / 13 70%
MathModel.ktutility/src/main/java/org/oppia/android/util/parser/math/MathModel.kt
100.00% 19 / 19 70%
MathTagHandler.ktutility/src/main/java/org/oppia/android/util/parser/html/MathTagHandler.kt
96.77% 60 / 62 70%
LiTagHandler.ktutility/src/main/java/org/oppia/android/util/parser/html/LiTagHandler.kt
92.47% 86 / 93 70%
ImageTagHandler.ktutility/src/main/java/org/oppia/android/util/parser/html/ImageTagHandler.kt
100.00% 58 / 58 70%
PolicyPageTagHandler.ktutility/src/main/java/org/oppia/android/util/parser/html/PolicyPageTagHandler.kt
96.67% 29 / 30 70%
CustomHtmlContentHandler.ktutility/src/main/java/org/oppia/android/util/parser/html/CustomHtmlContentHandler.kt
76.54% 62 / 81 70%
ConceptCardTagHandler.ktutility/src/main/java/org/oppia/android/util/parser/html/ConceptCardTagHandler.kt
100.00% 15 / 15 70%
ProfileNameValidator.ktutility/src/main/java/org/oppia/android/util/profile/ProfileNameValidator.kt
100.00% 14 / 14 70%
DirectoryManagementUtil.ktutility/src/main/java/org/oppia/android/util/profile/DirectoryManagementUtil.kt
100.00% 4 / 4 70%
CurrentUserProfileIdIntentDecorator.ktutility/src/main/java/org/oppia/android/util/profile/CurrentUserProfileIdIntentDecorator.kt
100.00% 10 / 10 70%
DebugFirestoreEventLoggerImpl.ktutility/src/main/java/org/oppia/android/util/logging/firebase/DebugFirestoreEventLoggerImpl.kt
100.00% 10 / 10 70%
PerformanceMetricsAssessorModule.ktutility/src/main/java/org/oppia/android/util/logging/performancemetrics/PerformanceMetricsAssessorModule.kt
100.00% 3 / 3 70%
PerformanceMetricsAssessorImpl.ktutility/src/main/java/org/oppia/android/util/logging/performancemetrics/PerformanceMetricsAssessorImpl.kt
98.08% 51 / 52 70%
PerformanceMetricsConfigurationsModule.ktutility/src/main/java/org/oppia/android/util/logging/performancemetrics/PerformanceMetricsConfigurationsModule.kt
100.00% 6 / 6 70%
CurrentAppScreenNameIntentDecorator.ktutility/src/main/java/org/oppia/android/util/logging/CurrentAppScreenNameIntentDecorator.kt
100.00% 8 / 8 70%
SyncStatusManagerImpl.ktutility/src/main/java/org/oppia/android/util/logging/SyncStatusManagerImpl.kt
100.00% 39 / 39 70%
EventBundleCreator.ktutility/src/main/java/org/oppia/android/util/logging/EventBundleCreator.kt
74.89% 328 / 438 70%
EventTypeToHumanReadableNameConverter.ktutility/src/main/java/org/oppia/android/util/logging/EventTypeToHumanReadableNameConverter.kt
100.00% 54 / 54 70%
ActivityLanguageLocaleHandler.ktapp/src/main/java/org/oppia/android/app/translation/ActivityLanguageLocaleHandler.kt
100.00% 11 / 11 70%
AppLanguageLocaleHandler.ktapp/src/main/java/org/oppia/android/app/translation/AppLanguageLocaleHandler.kt
100.00% 20 / 20 70%
AppLanguageWatcherMixin.ktapp/src/main/java/org/oppia/android/app/translation/AppLanguageWatcherMixin.kt
72.22% 26 / 36 70%
TestActivityRecreator.ktapp/src/main/java/org/oppia/android/app/translation/testing/TestActivityRecreator.kt
100.00% 5 / 5 70%
AlphaBuildFlavorModule.ktapp/src/main/java/org/oppia/android/app/application/alpha/AlphaBuildFlavorModule.kt
100.00% 3 / 3 70%
GaBuildFlavorModule.ktapp/src/main/java/org/oppia/android/app/application/ga/GaBuildFlavorModule.kt
100.00% 3 / 3 70%
TestingBuildFlavorModule.ktapp/src/main/java/org/oppia/android/app/application/testing/TestingBuildFlavorModule.kt
100.00% 3 / 3 70%
DeveloperBuildFlavorModule.ktapp/src/main/java/org/oppia/android/app/application/dev/DeveloperBuildFlavorModule.kt
100.00% 3 / 3 70%
BetaBuildFlavorModule.ktapp/src/main/java/org/oppia/android/app/application/beta/BetaBuildFlavorModule.kt
100.00% 3 / 3 70%
ActivityRouter.ktapp/src/main/java/org/oppia/android/app/activity/route/ActivityRouter.kt
100.00% 12 / 12 70%
RegexPatternValidationCheck.ktscripts/src/java/org/oppia/android/scripts/regex/RegexPatternValidationCheck.kt
100.00% 104 / 104 70%
NetworkConfigProdModule.ktdata/src/main/java/org/oppia/android/data/backends/gae/NetworkConfigProdModule.kt
100.00% 4 / 4 70%
NetworkLoggingInterceptor.ktdata/src/main/java/org/oppia/android/data/backends/gae/NetworkLoggingInterceptor.kt
100.00% 42 / 42 70%
PlatformParameterService.ktdata/src/main/java/org/oppia/android/data/backends/gae/api/PlatformParameterService.kt
100.00% 2 / 2 70%
RemoteAuthNetworkInterceptor.ktdata/src/main/java/org/oppia/android/data/backends/gae/RemoteAuthNetworkInterceptor.kt
100.00% 11 / 11 70%
NetworkModule.ktdata/src/main/java/org/oppia/android/data/backends/gae/NetworkModule.kt
94.74% 18 / 19 70%
PersistentCacheStore.ktdata/src/main/java/org/oppia/android/data/persistence/PersistentCacheStore.kt
83.70% 113 / 135 70%
FakeOppiaClock.kttesting/src/main/java/org/oppia/android/testing/time/FakeOppiaClock.kt
97.14% 34 / 35 70%
OppiaShadowTrafficStats.kttesting/src/main/java/org/oppia/android/testing/robolectric/OppiaShadowTrafficStats.kt
100.00% 11 / 11 70%
OppiaShadowActivityManager.kttesting/src/main/java/org/oppia/android/testing/robolectric/OppiaShadowActivityManager.kt
100.00% 15 / 15 70%
ShadowBidiFormatter.kttesting/src/main/java/org/oppia/android/testing/robolectric/ShadowBidiFormatter.kt
100.00% 20 / 20 70%
NetworkConnectionTestUtil.kttesting/src/main/java/org/oppia/android/testing/networking/NetworkConnectionTestUtil.kt
100.00% 11 / 11 70%
FakeFirebaseAuthWrapperImpl.kttesting/src/main/java/org/oppia/android/testing/firebase/FakeFirebaseAuthWrapperImpl.kt
76.47% 13 / 17 70%
TestAuthenticationModule.kttesting/src/main/java/org/oppia/android/testing/firebase/TestAuthenticationModule.kt
100.00% 3 / 3 70%
CoroutineExecutorService.kttesting/src/main/java/org/oppia/android/testing/threading/CoroutineExecutorService.kt
98.00% 98 / 100 70%
TestCoroutineDispatcher.kttesting/src/main/java/org/oppia/android/testing/threading/TestCoroutineDispatcher.kt
71.43% 10 / 14 70%
DataProviderTestMonitor.kttesting/src/main/java/org/oppia/android/testing/data/DataProviderTestMonitor.kt
95.08% 58 / 61 70%
TestSyncStatusManager.kttesting/src/main/java/org/oppia/android/testing/logging/TestSyncStatusManager.kt
100.00% 41 / 41 70%
ContentLocaleImpl.ktdomain/src/main/java/org/oppia/android/domain/locale/ContentLocaleImpl.kt
100.00% 3 / 3 70%
LocaleController.ktdomain/src/main/java/org/oppia/android/domain/locale/LocaleController.kt
92.49% 160 / 173 70%
LanguageConfigRetriever.ktdomain/src/main/java/org/oppia/android/domain/locale/LanguageConfigRetriever.kt
100.00% 5 / 5 70%
TranslationController.ktdomain/src/main/java/org/oppia/android/domain/translation/TranslationController.kt
95.95% 142 / 148 70%
AuthenticationModule.ktdomain/src/main/java/org/oppia/android/domain/auth/AuthenticationModule.kt
100.00% 4 / 4 70%
ExplorationStorageTestModule.ktdomain/src/main/java/org/oppia/android/domain/exploration/testing/ExplorationStorageTestModule.kt
100.00% 4 / 4 70%
FakeExplorationRetriever.ktdomain/src/main/java/org/oppia/android/domain/exploration/testing/FakeExplorationRetriever.kt
100.00% 10 / 10 70%
ClipboardController.ktdomain/src/main/java/org/oppia/android/domain/clipboard/ClipboardController.kt
100.00% 30 / 30 70%
SurveyProgressController.ktdomain/src/main/java/org/oppia/android/domain/survey/SurveyProgressController.kt
92.76% 269 / 290 70%
SurveyGatingController.ktdomain/src/main/java/org/oppia/android/domain/survey/SurveyGatingController.kt
96.77% 30 / 31 70%
SurveyController.ktdomain/src/main/java/org/oppia/android/domain/survey/SurveyController.kt
92.68% 38 / 41 70%
DeprecationController.ktdomain/src/main/java/org/oppia/android/domain/onboarding/DeprecationController.kt
88.57% 62 / 70 70%
AppStartupStateController.ktdomain/src/main/java/org/oppia/android/domain/onboarding/AppStartupStateController.kt
92.77% 77 / 83 70%
PerformanceMetricsLogger.ktdomain/src/main/java/org/oppia/android/domain/oppialogger/analytics/PerformanceMetricsLogger.kt
100.00% 99 / 99 70%
FirestoreDataController.ktdomain/src/main/java/org/oppia/android/domain/oppialogger/analytics/FirestoreDataController.kt
73.03% 65 / 89 70%
ApplicationLifecycleObserver.ktdomain/src/main/java/org/oppia/android/domain/oppialogger/analytics/ApplicationLifecycleObserver.kt
83.05% 98 / 118 70%
FeatureFlagsLogger.ktdomain/src/main/java/org/oppia/android/domain/oppialogger/analytics/FeatureFlagsLogger.kt
100.00% 51 / 51 70%
PerformanceMetricsController.ktdomain/src/main/java/org/oppia/android/domain/oppialogger/analytics/PerformanceMetricsController.kt
75.00% 63 / 84 70%
FakeLogScheduler.ktdomain/src/main/java/org/oppia/android/domain/oppialogger/analytics/testing/FakeLogScheduler.kt
100.00% 14 / 14 70%
CpuPerformanceSnapshotter.ktdomain/src/main/java/org/oppia/android/domain/oppialogger/analytics/CpuPerformanceSnapshotter.kt
87.27% 96 / 110 70%
ApplicationLifecycleModule.ktdomain/src/main/java/org/oppia/android/domain/oppialogger/analytics/ApplicationLifecycleModule.kt
100.00% 5 / 5 70%
LogUploadWorker.ktdomain/src/main/java/org/oppia/android/domain/oppialogger/loguploader/LogUploadWorker.kt
93.59% 73 / 78 70%
LogReportWorkManagerInitializer.ktdomain/src/main/java/org/oppia/android/domain/oppialogger/loguploader/LogReportWorkManagerInitializer.kt
100.00% 109 / 109 70%
LocaleProdModule.ktutility/src/main/java/org/oppia/android/util/locale/LocaleProdModule.kt
0.00% 0 / 0 0% *
LocaleTestModule.ktutility/src/main/java/org/oppia/android/util/locale/testing/LocaleTestModule.kt
0.00% 0 / 0 0% *
MathExpressionExtensions.ktutility/src/main/java/org/oppia/android/util/math/MathExpressionExtensions.kt
42.50% 17 / 40 42% *
NetworkConnectionUtilDebugModule.ktutility/src/main/java/org/oppia/android/util/networking/NetworkConnectionUtilDebugModule.kt
0.00% 0 / 0 0% *
NetworkConnectionUtilProdModule.ktutility/src/main/java/org/oppia/android/util/networking/NetworkConnectionUtilProdModule.kt
0.00% 0 / 0 0% *
UrlImageParser.ktutility/src/main/java/org/oppia/android/util/parser/image/UrlImageParser.kt
57.08% 121 / 212 57% *
ConsoleLogger.ktutility/src/main/java/org/oppia/android/util/logging/ConsoleLogger.kt
65.00% 39 / 60 54% *
ActivityIntentFactories.ktapp/src/main/java/org/oppia/android/app/activity/ActivityIntentFactories.kt
0.00% 0 / 0 0% *
FeedbackReportingService.ktdata/src/main/java/org/oppia/android/data/backends/gae/api/FeedbackReportingService.kt
0.00% 0 / 0 0% *
JsonPrefixNetworkInterceptor.ktdata/src/main/java/org/oppia/android/data/backends/gae/JsonPrefixNetworkInterceptor.kt
28.57% 4 / 14 28% *
InitializeDefaultLocaleRule.kttesting/src/main/java/org/oppia/android/testing/junit/InitializeDefaultLocaleRule.kt
38.24% 39 / 102 38% *
MockPlatformParameterService.kttesting/src/main/java/org/oppia/android/testing/network/MockPlatformParameterService.kt
64.71% 11 / 17 64% *
TextInputAction.kttesting/src/main/java/org/oppia/android/testing/espresso/TextInputAction.kt
60.00% 12 / 20 60% *
SyncStatusTestModule.kttesting/src/main/java/org/oppia/android/testing/logging/SyncStatusTestModule.kt
0.00% 0 / 0 0% *
FirebaseAuthWrapperImpl.ktdomain/src/main/java/org/oppia/android/domain/auth/FirebaseAuthWrapperImpl.kt
31.25% 5 / 16 31% *
AuthenticationController.ktdomain/src/main/java/org/oppia/android/domain/auth/AuthenticationController.kt
21.05% 4 / 19 21% *
AnalyticsController.ktdomain/src/main/java/org/oppia/android/domain/oppialogger/analytics/AnalyticsController.kt
70.35% 121 / 172 68% *
CpuPerformanceSnapshotterModule.ktdomain/src/main/java/org/oppia/android/domain/oppialogger/analytics/CpuPerformanceSnapshotterModule.kt
26.67% 4 / 15 26% *

* represents tests with custom overridden pass/fail coverage thresholds

Exempted coverage

Files exempted from coverage
File Exemption Reason
SyncStatusManagerTestBase.ktutility/src/test/java/org/oppia/android/util/logging/SyncStatusManagerTestBase.kt
This file is exempted from having a test file; skipping coverage check.
FeatureFlagConstants.ktutility/src/main/java/org/oppia/android/util/platformparameter/FeatureFlagConstants.kt
This file is exempted from having a test file; skipping coverage check.
PlatformParameterConstants.ktutility/src/main/java/org/oppia/android/util/platformparameter/PlatformParameterConstants.kt
This file is exempted from having a test file; skipping coverage check.
FloatExtensions.ktutility/src/main/java/org/oppia/android/util/math/FloatExtensions.kt
This file is exempted from having a test file; skipping coverage check.
FractionExtensions.ktutility/src/main/java/org/oppia/android/util/math/FractionExtensions.kt
This file is exempted from having a test file; skipping coverage check.
AsyncDataSubscriptionManager.ktutility/src/main/java/org/oppia/android/util/data/AsyncDataSubscriptionManager.kt
This file is exempted from having a test file; skipping coverage check.
LogReportingModule.ktutility/src/main/java/org/oppia/android/util/logging/firebase/LogReportingModule.kt
This file is exempted from having a test file; skipping coverage check.
SpotlightFragment.ktapp/src/main/java/org/oppia/android/app/spotlight/SpotlightFragment.kt
This file is incompatible with code coverage tooling; skipping coverage check.
PoliciesFragment.ktapp/src/main/java/org/oppia/android/app/policies/PoliciesFragment.kt
This file is incompatible with code coverage tooling; skipping coverage check.
PoliciesActivity.ktapp/src/main/java/org/oppia/android/app/policies/PoliciesActivity.kt
This file is incompatible with code coverage tooling; skipping coverage check.
MyDownloadsActivity.ktapp/src/main/java/org/oppia/android/app/mydownloads/MyDownloadsActivity.kt
This file is exempted from having a test file; skipping coverage check.
StoryActivity.ktapp/src/main/java/org/oppia/android/app/story/StoryActivity.kt
This file is incompatible with code coverage tooling; skipping coverage check.
AudioLanguageFragment.ktapp/src/main/java/org/oppia/android/app/options/AudioLanguageFragment.kt
This file is incompatible with code coverage tooling; skipping coverage check.
OptionsFragment.ktapp/src/main/java/org/oppia/android/app/options/OptionsFragment.kt
This file is incompatible with code coverage tooling; skipping coverage check.
AppLanguageResourceHandler.ktapp/src/main/java/org/oppia/android/app/translation/AppLanguageResourceHandler.kt
This file is incompatible with code coverage tooling; skipping coverage check.
MathExpressionInteractionsView.ktapp/src/main/java/org/oppia/android/app/customview/interaction/MathExpressionInteractionsView.kt
This file is incompatible with code coverage tooling; skipping coverage check.
MathExpressionAccessibilityUtil.ktapp/src/main/java/org/oppia/android/app/utility/math/MathExpressionAccessibilityUtil.kt
This file is incompatible with code coverage tooling; skipping coverage check.
DateTimeUtil.ktapp/src/main/java/org/oppia/android/app/utility/datetime/DateTimeUtil.kt
This file is incompatible with code coverage tooling; skipping coverage check.
StateFragment.ktapp/src/main/java/org/oppia/android/app/player/state/StateFragment.kt
This file is incompatible with code coverage tooling; skipping coverage check.
ExplorationActivity.ktapp/src/main/java/org/oppia/android/app/player/exploration/ExplorationActivity.kt
This file is incompatible with code coverage tooling; skipping coverage check.
ActivityRouterModule.ktapp/src/main/java/org/oppia/android/app/activity/route/ActivityRouterModule.kt
This file is incompatible with code coverage tooling; skipping coverage check.
TopicActivity.ktapp/src/main/java/org/oppia/android/app/topic/TopicActivity.kt
This file is incompatible with code coverage tooling; skipping coverage check.
TopicInfoFragment.ktapp/src/main/java/org/oppia/android/app/topic/info/TopicInfoFragment.kt
This file is incompatible with code coverage tooling; skipping coverage check.
RevisionCardActivity.ktapp/src/main/java/org/oppia/android/app/topic/revisioncard/RevisionCardActivity.kt
This file is incompatible with code coverage tooling; skipping coverage check.
TopicPracticeFragment.ktapp/src/main/java/org/oppia/android/app/topic/practice/TopicPracticeFragment.kt
This file is incompatible with code coverage tooling; skipping coverage check.
TopicFragment.ktapp/src/main/java/org/oppia/android/app/topic/TopicFragment.kt
This file is incompatible with code coverage tooling; skipping coverage check.
QuestionPlayerActivity.ktapp/src/main/java/org/oppia/android/app/topic/questionplayer/QuestionPlayerActivity.kt
This file is incompatible with code coverage tooling; skipping coverage check.
TopicRevisionFragment.ktapp/src/main/java/org/oppia/android/app/topic/revision/TopicRevisionFragment.kt
This file is incompatible with code coverage tooling; skipping coverage check.
TopicLessonsFragment.ktapp/src/main/java/org/oppia/android/app/topic/lessons/TopicLessonsFragment.kt
This file is incompatible with code coverage tooling; skipping coverage check.
HomeActivity.ktapp/src/main/java/org/oppia/android/app/home/HomeActivity.kt
This file is incompatible with code coverage tooling; skipping coverage check.
StringToRatioParser.ktapp/src/main/java/org/oppia/android/app/parser/StringToRatioParser.kt
This file is incompatible with code coverage tooling; skipping coverage check.
FractionParsingUiError.ktapp/src/main/java/org/oppia/android/app/parser/FractionParsingUiError.kt
This file is incompatible with code coverage tooling; skipping coverage check.
ProfileEditFragment.ktapp/src/main/java/org/oppia/android/app/settings/profile/ProfileEditFragment.kt
This file is exempted from having a test file; skipping coverage check.
SurveyFragment.ktapp/src/main/java/org/oppia/android/app/survey/SurveyFragment.kt
This file is incompatible with code coverage tooling; skipping coverage check.
SurveyActivity.ktapp/src/main/java/org/oppia/android/app/survey/SurveyActivity.kt
This file is incompatible with code coverage tooling; skipping coverage check.
ClassroomListFragment.ktapp/src/main/java/org/oppia/android/app/classroom/ClassroomListFragment.kt
This file is incompatible with code coverage tooling; skipping coverage check.
OnboardingFragment.ktapp/src/main/java/org/oppia/android/app/onboarding/OnboardingFragment.kt
This file is incompatible with code coverage tooling; skipping coverage check.
IntroFragment.ktapp/src/main/java/org/oppia/android/app/onboarding/IntroFragment.kt
This file is incompatible with code coverage tooling; skipping coverage check.
OnboardingProfileTypeFragment.ktapp/src/main/java/org/oppia/android/app/onboarding/OnboardingProfileTypeFragment.kt
This file is incompatible with code coverage tooling; skipping coverage check.
CreateProfileFragment.ktapp/src/main/java/org/oppia/android/app/onboarding/CreateProfileFragment.kt
This file is incompatible with code coverage tooling; skipping coverage check.
TestActivity.ktapp/src/main/java/org/oppia/android/app/testing/activity/TestActivity.kt
This file is incompatible with code coverage tooling; skipping coverage check.
TopicTestActivityForStory.ktapp/src/main/java/org/oppia/android/app/testing/TopicTestActivityForStory.kt
This file is incompatible with code coverage tooling; skipping coverage check.
ProfileChooserFragment.ktapp/src/main/java/org/oppia/android/app/profile/ProfileChooserFragment.kt
This file is incompatible with code coverage tooling; skipping coverage check.
PinPasswordActivity.ktapp/src/main/java/org/oppia/android/app/profile/PinPasswordActivity.kt
This file is incompatible with code coverage tooling; skipping coverage check.
AddProfileActivity.ktapp/src/main/java/org/oppia/android/app/profile/AddProfileActivity.kt
This file is incompatible with code coverage tooling; skipping coverage check.
SplashActivity.ktapp/src/main/java/org/oppia/android/app/splash/SplashActivity.kt
This file is incompatible with code coverage tooling; skipping coverage check.
ProfileAndDeviceIdFragment.ktapp/src/main/java/org/oppia/android/app/administratorcontrols/learneranalytics/ProfileAndDeviceIdFragment.kt
This file is incompatible with code coverage tooling; skipping coverage check.
AdministratorControlsActivity.ktapp/src/main/java/org/oppia/android/app/administratorcontrols/AdministratorControlsActivity.kt
This file is incompatible with code coverage tooling; skipping coverage check.
AdministratorControlsFragment.ktapp/src/main/java/org/oppia/android/app/administratorcontrols/AdministratorControlsFragment.kt
This file is incompatible with code coverage tooling; skipping coverage check.
DeveloperOptionsTestParsersViewModel.ktapp/src/main/java/org/oppia/android/app/devoptions/devoptionsitemviewmodel/DeveloperOptionsTestParsersViewModel.kt
This file is incompatible with code coverage tooling; skipping coverage check.
MathExpressionParserActivity.ktapp/src/main/java/org/oppia/android/app/devoptions/mathexpressionparser/MathExpressionParserActivity.kt
This file is incompatible with code coverage tooling; skipping coverage check.
MathExpressionParserFragment.ktapp/src/main/java/org/oppia/android/app/devoptions/mathexpressionparser/MathExpressionParserFragment.kt
This file is incompatible with code coverage tooling; skipping coverage check.
ExplorationCheckpointTestHelper.kttesting/src/main/java/org/oppia/android/testing/lightweightcheckpointing/ExplorationCheckpointTestHelper.kt
This file is incompatible with code coverage tooling; skipping coverage check.
PlatformParameterTestConstantsModule.kttesting/src/main/java/org/oppia/android/testing/platformparameter/PlatformParameterTestConstantsModule.kt
This file is exempted from having a test file; skipping coverage check.
PlatformParameterTestConstants.kttesting/src/main/java/org/oppia/android/testing/platformparameter/PlatformParameterTestConstants.kt
This file is exempted from having a test file; skipping coverage check.
StoryProgressTestHelper.kttesting/src/main/java/org/oppia/android/testing/story/StoryProgressTestHelper.kt
This file is incompatible with code coverage tooling; skipping coverage check.
FakeExceptionLogger.kttesting/src/main/java/org/oppia/android/testing/FakeExceptionLogger.kt
This file is incompatible with code coverage tooling; skipping coverage check.
FakePerformanceMetricAssessor.kttesting/src/main/java/org/oppia/android/testing/FakePerformanceMetricAssessor.kt
This file is incompatible with code coverage tooling; skipping coverage check.
OverrideIntParameter.kttesting/src/main/java/org/oppia/android/testing/OverrideIntParameter.kt
This file is exempted from having a test file; skipping coverage check.
FakeFirestoreEventLogger.kttesting/src/main/java/org/oppia/android/testing/FakeFirestoreEventLogger.kt
This file is incompatible with code coverage tooling; skipping coverage check.
TestCoroutineDispatcherEspressoImpl.kttesting/src/main/java/org/oppia/android/testing/threading/TestCoroutineDispatcherEspressoImpl.kt
This file is incompatible with code coverage tooling; skipping coverage check.
TestCoroutineDispatcherRobolectricImpl.kttesting/src/main/java/org/oppia/android/testing/threading/TestCoroutineDispatcherRobolectricImpl.kt
This file is incompatible with code coverage tooling; skipping coverage check.
OppiaTestRule.kttesting/src/main/java/org/oppia/android/testing/OppiaTestRule.kt
This file is exempted from having a test file; skipping coverage check.
FakePerformanceMetricsEventLogger.kttesting/src/main/java/org/oppia/android/testing/FakePerformanceMetricsEventLogger.kt
This file is incompatible with code coverage tooling; skipping coverage check.
OverrideStringParameter.kttesting/src/main/java/org/oppia/android/testing/OverrideStringParameter.kt
This file is exempted from having a test file; skipping coverage check.
ResetFeatureFlagToDefault.kttesting/src/main/java/org/oppia/android/testing/ResetFeatureFlagToDefault.kt
This file is exempted from having a test file; skipping coverage check.
DisableFeatureFlag.kttesting/src/main/java/org/oppia/android/testing/DisableFeatureFlag.kt
This file is exempted from having a test file; skipping coverage check.
ProfileTestHelper.kttesting/src/main/java/org/oppia/android/testing/profile/ProfileTestHelper.kt
This file is incompatible with code coverage tooling; skipping coverage check.
EnableFeatureFlag.kttesting/src/main/java/org/oppia/android/testing/EnableFeatureFlag.kt
This file is exempted from having a test file; skipping coverage check.
FakeAnalyticsEventLogger.kttesting/src/main/java/org/oppia/android/testing/FakeAnalyticsEventLogger.kt
This file is incompatible with code coverage tooling; skipping coverage check.
OverrideBoolParameter.kttesting/src/main/java/org/oppia/android/testing/OverrideBoolParameter.kt
This file is exempted from having a test file; skipping coverage check.
SpotlightStateController.ktdomain/src/main/java/org/oppia/android/domain/spotlight/SpotlightStateController.kt
This file is incompatible with code coverage tooling; skipping coverage check.
PlatformParameterModule.ktdomain/src/main/java/org/oppia/android/domain/platformparameter/PlatformParameterModule.kt
This file is incompatible with code coverage tooling; skipping coverage check.
PlatformParameterSyncUpWorkManagerInitializer.ktdomain/src/main/java/org/oppia/android/domain/platformparameter/syncup/PlatformParameterSyncUpWorkManagerInitializer.kt
This file is incompatible with code coverage tooling; skipping coverage check.
PlatformParameterSyncUpWorker.ktdomain/src/main/java/org/oppia/android/domain/platformparameter/syncup/PlatformParameterSyncUpWorker.kt
This file is incompatible with code coverage tooling; skipping coverage check.
PlatformParameterController.ktdomain/src/main/java/org/oppia/android/domain/platformparameter/PlatformParameterController.kt
This file is incompatible with code coverage tooling; skipping coverage check.
StateRetriever.ktdomain/src/main/java/org/oppia/android/domain/util/StateRetriever.kt
This file is incompatible with code coverage tooling; skipping coverage check.
InteractionObjectExtensions.ktdomain/src/main/java/org/oppia/android/domain/util/InteractionObjectExtensions.kt
This file is incompatible with code coverage tooling; skipping coverage check.
StoryProgressController.ktdomain/src/main/java/org/oppia/android/domain/topic/StoryProgressController.kt
This file is incompatible with code coverage tooling; skipping coverage check.
ExplorationCheckpointController.ktdomain/src/main/java/org/oppia/android/domain/exploration/lightweightcheckpointing/ExplorationCheckpointController.kt
This file is incompatible with code coverage tooling; skipping coverage check.
ExplorationDataController.ktdomain/src/main/java/org/oppia/android/domain/exploration/ExplorationDataController.kt
This file is incompatible with code coverage tooling; skipping coverage check.
ExplorationStorageModule.ktdomain/src/main/java/org/oppia/android/domain/exploration/ExplorationStorageModule.kt
This file is incompatible with code coverage tooling; skipping coverage check.
ExplorationActiveTimeController.ktdomain/src/main/java/org/oppia/android/domain/exploration/ExplorationActiveTimeController.kt
This file is incompatible with code coverage tooling; skipping coverage check.
ExplorationProgressModule.ktdomain/src/main/java/org/oppia/android/domain/exploration/ExplorationProgressModule.kt
This file is incompatible with code coverage tooling; skipping coverage check.
QuestionTrainingController.ktdomain/src/main/java/org/oppia/android/domain/question/QuestionTrainingController.kt
This file is incompatible with code coverage tooling; skipping coverage check.
ClassroomController.ktdomain/src/main/java/org/oppia/android/domain/classroom/ClassroomController.kt
This file is incompatible with code coverage tooling; skipping coverage check.
LoggingIdentifierController.ktdomain/src/main/java/org/oppia/android/domain/oppialogger/LoggingIdentifierController.kt
This file is incompatible with code coverage tooling; skipping coverage check.
OppiaLogger.ktdomain/src/main/java/org/oppia/android/domain/oppialogger/OppiaLogger.kt
This file is incompatible with code coverage tooling; skipping coverage check.
UncaughtExceptionLoggerStartupListener.ktdomain/src/main/java/org/oppia/android/domain/oppialogger/exceptions/UncaughtExceptionLoggerStartupListener.kt
This file is incompatible with code coverage tooling; skipping coverage check.
ExceptionsController.ktdomain/src/main/java/org/oppia/android/domain/oppialogger/exceptions/ExceptionsController.kt
This file is incompatible with code coverage tooling; skipping coverage check.
LearnerAnalyticsLogger.ktdomain/src/main/java/org/oppia/android/domain/oppialogger/analytics/LearnerAnalyticsLogger.kt
This file is incompatible with code coverage tooling; skipping coverage check.
LoggingIdentifierModule.ktdomain/src/main/java/org/oppia/android/domain/oppialogger/LoggingIdentifierModule.kt
This file is incompatible with code coverage tooling; skipping coverage check.
MetricLogSchedulerModule.ktdomain/src/main/java/org/oppia/android/domain/oppialogger/logscheduler/MetricLogSchedulerModule.kt
This file is incompatible with code coverage tooling; skipping coverage check.
MetricLogSchedulingWorker.ktdomain/src/main/java/org/oppia/android/domain/oppialogger/logscheduler/MetricLogSchedulingWorker.kt
This file is incompatible with code coverage tooling; skipping coverage check.
PerformanceMetricsLogScheduler.ktdomain/src/main/java/org/oppia/android/domain/oppialogger/logscheduler/PerformanceMetricsLogScheduler.kt
This file is incompatible with code coverage tooling; skipping coverage check.
ReportSchemaVersion.ktdomain/src/main/java/org/oppia/android/domain/feedbackreporting/ReportSchemaVersion.kt
This file is incompatible with code coverage tooling; skipping coverage check.
ImageClickInputIsInRegionRuleClassifierProvider.ktdomain/src/main/java/org/oppia/android/domain/classify/rules/imageClickInput/ImageClickInputIsInRegionRuleClassifierProvider.kt
This file is incompatible with code coverage tooling; skipping coverage check.
FractionInputHasDenominatorEqualToRuleClassifierProvider.ktdomain/src/main/java/org/oppia/android/domain/classify/rules/fractioninput/FractionInputHasDenominatorEqualToRuleClassifierProvider.kt
This file is incompatible with code coverage tooling; skipping coverage check.
FractionInputHasNumeratorEqualToRuleClassifierProvider.ktdomain/src/main/java/org/oppia/android/domain/classify/rules/fractioninput/FractionInputHasNumeratorEqualToRuleClassifierProvider.kt
This file is incompatible with code coverage tooling; skipping coverage check.
FractionInputHasIntegerPartEqualToRuleClassifierProvider.ktdomain/src/main/java/org/oppia/android/domain/classify/rules/fractioninput/FractionInputHasIntegerPartEqualToRuleClassifierProvider.kt
This file is incompatible with code coverage tooling; skipping coverage check.
FractionInputHasNoFractionalPartRuleClassifierProvider.ktdomain/src/main/java/org/oppia/android/domain/classify/rules/fractioninput/FractionInputHasNoFractionalPartRuleClassifierProvider.kt
This file is incompatible with code coverage tooling; skipping coverage check.
FractionInputIsEquivalentToAndInSimplestFormRuleClassifierProvider.ktdomain/src/main/java/org/oppia/android/domain/classify/rules/fractioninput/FractionInputIsEquivalentToAndInSimplestFormRuleClassifierProvider.kt
This file is incompatible with code coverage tooling; skipping coverage check.
FractionInputIsExactlyEqualToRuleClassifierProvider.ktdomain/src/main/java/org/oppia/android/domain/classify/rules/fractioninput/FractionInputIsExactlyEqualToRuleClassifierProvider.kt
This file is incompatible with code coverage tooling; skipping coverage check.
FractionInputHasFractionalPartExactlyEqualToRuleClassifierProvider.ktdomain/src/main/java/org/oppia/android/domain/classify/rules/fractioninput/FractionInputHasFractionalPartExactlyEqualToRuleClassifierProvider.kt
This file is incompatible with code coverage tooling; skipping coverage check.
FractionInputIsLessThanRuleClassifierProvider.ktdomain/src/main/java/org/oppia/android/domain/classify/rules/fractioninput/FractionInputIsLessThanRuleClassifierProvider.kt
This file is incompatible with code coverage tooling; skipping coverage check.
FractionInputIsGreaterThanRuleClassifierProvider.ktdomain/src/main/java/org/oppia/android/domain/classify/rules/fractioninput/FractionInputIsGreaterThanRuleClassifierProvider.kt
This file is incompatible with code coverage tooling; skipping coverage check.
FractionInputIsEquivalentToRuleClassifierProvider.ktdomain/src/main/java/org/oppia/android/domain/classify/rules/fractioninput/FractionInputIsEquivalentToRuleClassifierProvider.kt
This file is incompatible with code coverage tooling; skipping coverage check.
DragDropSortInputIsEqualToOrderingClassifierProvider.ktdomain/src/main/java/org/oppia/android/domain/classify/rules/dragAndDropSortInput/DragDropSortInputIsEqualToOrderingClassifierProvider.kt
This file is incompatible with code coverage tooling; skipping coverage check.
DragDropSortInputIsEqualToOrderingWithOneItemAtIncorrectPositionClassifierProvider.ktdomain/src/main/java/org/oppia/android/domain/classify/rules/dragAndDropSortInput/DragDropSortInputIsEqualToOrderingWithOneItemAtIncorrectPositionClassifierProvider.kt
This file is incompatible with code coverage tooling; skipping coverage check.
AlgebraicExpressionInputIsEquivalentToRuleClassifierProvider.ktdomain/src/main/java/org/oppia/android/domain/classify/rules/algebraicexpressioninput/AlgebraicExpressionInputIsEquivalentToRuleClassifierProvider.kt
This file is incompatible with code coverage tooling; skipping coverage check.
AlgebraicExpressionInputMatchesExactlyWithRuleClassifierProvider.ktdomain/src/main/java/org/oppia/android/domain/classify/rules/algebraicexpressioninput/AlgebraicExpressionInputMatchesExactlyWithRuleClassifierProvider.kt
This file is incompatible with code coverage tooling; skipping coverage check.
AlgebraicExpressionInputModule.ktdomain/src/main/java/org/oppia/android/domain/classify/rules/algebraicexpressioninput/AlgebraicExpressionInputModule.kt
This file is incompatible with code coverage tooling; skipping coverage check.
AlgebraicExpressionInputMatchesUpToTrivialManipulationsRuleClassifierProvider.ktdomain/src/main/java/org/oppia/android/domain/classify/rules/algebraicexpressioninput/AlgebraicExpressionInputMatchesUpToTrivialManipulationsRuleClassifierProvider.kt
This file is incompatible with code coverage tooling; skipping coverage check.
NumberWithUnitsIsEqualToRuleClassifierProvider.ktdomain/src/main/java/org/oppia/android/domain/classify/rules/numberwithunits/NumberWithUnitsIsEqualToRuleClassifierProvider.kt
This file is incompatible with code coverage tooling; skipping coverage check.
NumberWithUnitsIsEquivalentToRuleClassifierProvider.ktdomain/src/main/java/org/oppia/android/domain/classify/rules/numberwithunits/NumberWithUnitsIsEquivalentToRuleClassifierProvider.kt
This file is incompatible with code coverage tooling; skipping coverage check.
ItemSelectionInputEqualsRuleClassifierProvider.ktdomain/src/main/java/org/oppia/android/domain/classify/rules/itemselectioninput/ItemSelectionInputEqualsRuleClassifierProvider.kt
This file is incompatible with code coverage tooling; skipping coverage check.
ItemSelectionInputDoesNotContainAtLeastOneOfRuleClassifierProvider.ktdomain/src/main/java/org/oppia/android/domain/classify/rules/itemselectioninput/ItemSelectionInputDoesNotContainAtLeastOneOfRuleClassifierProvider.kt
This file is incompatible with code coverage tooling; skipping coverage check.
ItemSelectionInputContainsAtLeastOneOfRuleClassifierProvider.ktdomain/src/main/java/org/oppia/android/domain/classify/rules/itemselectioninput/ItemSelectionInputContainsAtLeastOneOfRuleClassifierProvider.kt
This file is incompatible with code coverage tooling; skipping coverage check.
ItemSelectionInputIsProperSubsetOfRuleClassifierProvider.ktdomain/src/main/java/org/oppia/android/domain/classify/rules/itemselectioninput/ItemSelectionInputIsProperSubsetOfRuleClassifierProvider.kt
This file is incompatible with code coverage tooling; skipping coverage check.
MultipleChoiceInputEqualsRuleClassifierProvider.ktdomain/src/main/java/org/oppia/android/domain/classify/rules/multiplechoiceinput/MultipleChoiceInputEqualsRuleClassifierProvider.kt
This file is incompatible with code coverage tooling; skipping coverage check.
MathEquationInputMatchesUpToTrivialManipulationsRuleClassifierProvider.ktdomain/src/main/java/org/oppia/android/domain/classify/rules/mathequationinput/MathEquationInputMatchesUpToTrivialManipulationsRuleClassifierProvider.kt
This file is incompatible with code coverage tooling; skipping coverage check.
MathEquationInputMatchesExactlyWithRuleClassifierProvider.ktdomain/src/main/java/org/oppia/android/domain/classify/rules/mathequationinput/MathEquationInputMatchesExactlyWithRuleClassifierProvider.kt
This file is incompatible with code coverage tooling; skipping coverage check.
MathEquationInputIsEquivalentToRuleClassifierProvider.ktdomain/src/main/java/org/oppia/android/domain/classify/rules/mathequationinput/MathEquationInputIsEquivalentToRuleClassifierProvider.kt
This file is incompatible with code coverage tooling; skipping coverage check.
MathEquationInputModule.ktdomain/src/main/java/org/oppia/android/domain/classify/rules/mathequationinput/MathEquationInputModule.kt
This file is incompatible with code coverage tooling; skipping coverage check.
TextInputFuzzyEqualsRuleClassifierProvider.ktdomain/src/main/java/org/oppia/android/domain/classify/rules/textinput/TextInputFuzzyEqualsRuleClassifierProvider.kt
This file is incompatible with code coverage tooling; skipping coverage check.
TextInputStartsWithRuleClassifierProvider.ktdomain/src/main/java/org/oppia/android/domain/classify/rules/textinput/TextInputStartsWithRuleClassifierProvider.kt
This file is incompatible with code coverage tooling; skipping coverage check.
TextInputContainsRuleClassifierProvider.ktdomain/src/main/java/org/oppia/android/domain/classify/rules/textinput/TextInputContainsRuleClassifierProvider.kt
This file is incompatible with code coverage tooling; skipping coverage check.
TextInputEqualsRuleClassifierProvider.ktdomain/src/main/java/org/oppia/android/domain/classify/rules/textinput/TextInputEqualsRuleClassifierProvider.kt
This file is incompatible with code coverage tooling; skipping coverage check.
NumericInputIsLessThanOrEqualToRuleClassifierProvider.ktdomain/src/main/java/org/oppia/android/domain/classify/rules/numericinput/NumericInputIsLessThanOrEqualToRuleClassifierProvider.kt
This file is incompatible with code coverage tooling; skipping coverage check.
NumericInputIsWithinToleranceRuleClassifierProvider.ktdomain/src/main/java/org/oppia/android/domain/classify/rules/numericinput/NumericInputIsWithinToleranceRuleClassifierProvider.kt
This file is incompatible with code coverage tooling; skipping coverage check.
NumericInputIsGreaterThanRuleClassifierProvider.ktdomain/src/main/java/org/oppia/android/domain/classify/rules/numericinput/NumericInputIsGreaterThanRuleClassifierProvider.kt
This file is incompatible with code coverage tooling; skipping coverage check.
NumericInputIsLessThanRuleClassifierProvider.ktdomain/src/main/java/org/oppia/android/domain/classify/rules/numericinput/NumericInputIsLessThanRuleClassifierProvider.kt
This file is incompatible with code coverage tooling; skipping coverage check.
NumericInputIsGreaterThanOrEqualToRuleClassifierProvider.ktdomain/src/main/java/org/oppia/android/domain/classify/rules/numericinput/NumericInputIsGreaterThanOrEqualToRuleClassifierProvider.kt
This file is incompatible with code coverage tooling; skipping coverage check.
NumericInputEqualsRuleClassifierProvider.ktdomain/src/main/java/org/oppia/android/domain/classify/rules/numericinput/NumericInputEqualsRuleClassifierProvider.kt
This file is incompatible with code coverage tooling; skipping coverage check.
NumericInputIsInclusivelyBetweenRuleClassifierProvider.ktdomain/src/main/java/org/oppia/android/domain/classify/rules/numericinput/NumericInputIsInclusivelyBetweenRuleClassifierProvider.kt
This file is incompatible with code coverage tooling; skipping coverage check.
NumericExpressionInputModule.ktdomain/src/main/java/org/oppia/android/domain/classify/rules/numericexpressioninput/NumericExpressionInputModule.kt
This file is incompatible with code coverage tooling; skipping coverage check.
NumericExpressionInputIsEquivalentToRuleClassifierProvider.ktdomain/src/main/java/org/oppia/android/domain/classify/rules/numericexpressioninput/NumericExpressionInputIsEquivalentToRuleClassifierProvider.kt
This file is incompatible with code coverage tooling; skipping coverage check.
NumericExpressionInputMatchesExactlyWithRuleClassifierProvider.ktdomain/src/main/java/org/oppia/android/domain/classify/rules/numericexpressioninput/NumericExpressionInputMatchesExactlyWithRuleClassifierProvider.kt
This file is incompatible with code coverage tooling; skipping coverage check.
NumericExpressionInputMatchesUpToTrivialManipulationsRuleClassifierProvider.ktdomain/src/main/java/org/oppia/android/domain/classify/rules/numericexpressioninput/NumericExpressionInputMatchesUpToTrivialManipulationsRuleClassifierProvider.kt
This file is incompatible with code coverage tooling; skipping coverage check.
RatioInputHasSpecificTermEqualToRuleClassifierProvider.ktdomain/src/main/java/org/oppia/android/domain/classify/rules/ratioinput/RatioInputHasSpecificTermEqualToRuleClassifierProvider.kt
This file is incompatible with code coverage tooling; skipping coverage check.
RatioInputEqualsRuleClassifierProvider.ktdomain/src/main/java/org/oppia/android/domain/classify/rules/ratioinput/RatioInputEqualsRuleClassifierProvider.kt
This file is incompatible with code coverage tooling; skipping coverage check.
RatioInputHasNumberOfTermsEqualToClassifierProvider.ktdomain/src/main/java/org/oppia/android/domain/classify/rules/ratioinput/RatioInputHasNumberOfTermsEqualToClassifierProvider.kt
This file is incompatible with code coverage tooling; skipping coverage check.
RatioInputIsEquivalentRuleClassifierProvider.ktdomain/src/main/java/org/oppia/android/domain/classify/rules/ratioinput/RatioInputIsEquivalentRuleClassifierProvider.kt
This file is incompatible with code coverage tooling; skipping coverage check.
AnswerClassificationController.ktdomain/src/main/java/org/oppia/android/domain/classify/AnswerClassificationController.kt
This file is incompatible with code coverage tooling; skipping coverage check.
AudioPlayerController.ktdomain/src/main/java/org/oppia/android/domain/audio/AudioPlayerController.kt
This file is incompatible with code coverage tooling; skipping coverage check.
CellularAudioDialogController.ktdomain/src/main/java/org/oppia/android/domain/audio/CellularAudioDialogController.kt
This file is incompatible with code coverage tooling; skipping coverage check.
HintsAndSolutionProdModule.ktdomain/src/main/java/org/oppia/android/domain/hintsandsolution/HintsAndSolutionProdModule.kt
This file is incompatible with code coverage tooling; skipping coverage check.
HelpIndexExtensions.ktdomain/src/main/java/org/oppia/android/domain/hintsandsolution/HelpIndexExtensions.kt
This file is incompatible with code coverage tooling; skipping coverage check.
HintHandlerProdImpl.ktdomain/src/main/java/org/oppia/android/domain/hintsandsolution/HintHandlerProdImpl.kt
This file is incompatible with code coverage tooling; skipping coverage check.
HintHandlerDebugImpl.ktdomain/src/main/java/org/oppia/android/domain/hintsandsolution/HintHandlerDebugImpl.kt
This file is incompatible with code coverage tooling; skipping coverage check.
HintsAndSolutionDebugModule.ktdomain/src/main/java/org/oppia/android/domain/hintsandsolution/HintsAndSolutionDebugModule.kt
This file is incompatible with code coverage tooling; skipping coverage check.
ShowAllHintsAndSolutionController.ktdomain/src/main/java/org/oppia/android/domain/devoptions/ShowAllHintsAndSolutionController.kt
This file is incompatible with code coverage tooling; skipping coverage check.
ModifyLessonProgressController.ktdomain/src/main/java/org/oppia/android/domain/devoptions/ModifyLessonProgressController.kt
This file is incompatible with code coverage tooling; skipping coverage check.

Refer test_file_exemptions.textproto for the comprehensive list of file exemptions and their required coverage percentages.

To learn more, visit the Oppia Android Code Coverage wiki page

@Rd4dev
Copy link
Collaborator Author

Rd4dev commented Jan 8, 2025

@BenHenning, @adhiamboperes PTAL, and I also wanted to confirm a few requirements:

  1. What should be the scope of OppiaTestRule inclusion?

    Is it required in every module's test file, or are there exceptions?

    The concern is that OppiaTestRule attempts to acquire Build.FINGERPRINT to determine the Test Platform. While this works for other modules that access Android classes, the script module test cases throw a NoClassDefFoundError. Although the issue can be mitigated by redirecting to use Robolectric as the Test Platform, the previous error logs interfere with current assertion throw cases, leading to test failures. I wanted to clarify the scope and requirements for including the rule before investigating other workarounds.

  2. Codeowners Check Failure

    Are there any specific changes I need to address to resolve the CODEOWNERS check failure?

  3. Reset Annotation

    As discussed in a prior CLaM meeting, it was suggested to remove the ResetPlatformParameter annotation since overridePlatformParameter was deemed sufficient. I just have few questions:

    • If ResetPlatformParameter was removed for platform parameters, should it also be removed for feature flags? (I remember it being mentioned to not to) but the same functionality (resetting to a default value) could be achieved by utilizing EnableFeatureFlag or DisableFeatureFlag.
    • If keeping a reset annotation is advisable, would maintaining it for both feature flags and platform parameters be helpful to ensure parity and avoid confusion?
    • Alternatively, would keeping the reset annotation exclusively for feature flags suffice?

@Rd4dev Rd4dev marked this pull request as ready for review January 8, 2025 20:26
@Rd4dev Rd4dev requested review from a team as code owners January 8, 2025 20:26
@oppiabot oppiabot bot assigned adhiamboperes and BenHenning and unassigned Rd4dev Jan 8, 2025
Copy link

oppiabot bot commented Jan 8, 2025

Unassigning @Rd4dev since a re-review was requested. @Rd4dev, please make sure you have addressed all review comments. Thanks!

Copy link

github-actions bot commented Jan 8, 2025

Coverage Report

Results

Number of files assessed: 271
Overall Coverage: 87.54%
Coverage Analysis: PASS

Passing coverage

Files with passing code coverage
File Coverage Lines Hit Status Min Required
AndroidLocaleProfile.ktutility/src/main/java/org/oppia/android/util/locale/AndroidLocaleProfile.kt
100.00% 84 / 84 70%
OppiaLocaleContextExtensions.ktutility/src/main/java/org/oppia/android/util/locale/OppiaLocaleContextExtensions.kt
100.00% 10 / 10 70%
DisplayLocaleImpl.ktutility/src/main/java/org/oppia/android/util/locale/DisplayLocaleImpl.kt
89.74% 35 / 39 70%
OppiaBidiFormatterImpl.ktutility/src/main/java/org/oppia/android/util/locale/OppiaBidiFormatterImpl.kt
100.00% 5 / 5 70%
MachineLocaleImpl.ktutility/src/main/java/org/oppia/android/util/locale/MachineLocaleImpl.kt
86.05% 37 / 43 70%
TestOppiaBidiFormatter.ktutility/src/main/java/org/oppia/android/util/locale/testing/TestOppiaBidiFormatter.kt
82.61% 19 / 23 70%
AndroidLocaleFactory.ktutility/src/main/java/org/oppia/android/util/locale/AndroidLocaleFactory.kt
100.00% 86 / 86 70%
RealExtensions.ktutility/src/main/java/org/oppia/android/util/math/RealExtensions.kt
89.73% 201 / 224 70%
PeekableIterator.ktutility/src/main/java/org/oppia/android/util/math/PeekableIterator.kt
100.00% 13 / 13 70%
FractionParser.ktutility/src/main/java/org/oppia/android/util/math/FractionParser.kt
100.00% 61 / 61 70%
ComparableOperationExtensions.ktutility/src/main/java/org/oppia/android/util/math/ComparableOperationExtensions.kt
95.00% 19 / 20 70%
PolynomialExtensions.ktutility/src/main/java/org/oppia/android/util/math/PolynomialExtensions.kt
99.48% 190 / 191 70%
NumericExpressionEvaluator.ktutility/src/main/java/org/oppia/android/util/math/NumericExpressionEvaluator.kt
86.36% 19 / 22 70%
ExpressionToLatexConverter.ktutility/src/main/java/org/oppia/android/util/math/ExpressionToLatexConverter.kt
86.67% 26 / 30 70%
MathExpressionParser.ktutility/src/main/java/org/oppia/android/util/math/MathExpressionParser.kt
91.09% 511 / 561 70%
ComparatorExtensions.ktutility/src/main/java/org/oppia/android/util/math/ComparatorExtensions.kt
100.00% 20 / 20 70%
RatioExtensions.ktutility/src/main/java/org/oppia/android/util/math/RatioExtensions.kt
100.00% 6 / 6 70%
ExpressionToPolynomialConverter.ktutility/src/main/java/org/oppia/android/util/math/ExpressionToPolynomialConverter.kt
91.67% 55 / 60 70%
MathTokenizer.ktutility/src/main/java/org/oppia/android/util/math/MathTokenizer.kt
94.26% 197 / 209 70%
ExpressionToComparableOperationConverter.ktutility/src/main/java/org/oppia/android/util/math/ExpressionToComparableOperationConverter.kt
96.69% 117 / 121 70%
NetworkConnectionUtilProdImpl.ktutility/src/main/java/org/oppia/android/util/networking/NetworkConnectionUtilProdImpl.kt
93.75% 15 / 16 70%
NetworkConnectionUtilDebugImpl.ktutility/src/main/java/org/oppia/android/util/networking/NetworkConnectionUtilDebugImpl.kt
90.91% 10 / 11 70%
AssetModule.ktutility/src/main/java/org/oppia/android/util/caching/AssetModule.kt
100.00% 3 / 3 70%
AssetTestNoOpModule.ktutility/src/main/java/org/oppia/android/util/caching/testing/AssetTestNoOpModule.kt
100.00% 3 / 3 70%
TestNoOpAssetRepository.ktutility/src/main/java/org/oppia/android/util/caching/testing/TestNoOpAssetRepository.kt
100.00% 12 / 12 70%
InMemoryBlockingCache.ktutility/src/main/java/org/oppia/android/util/data/InMemoryBlockingCache.kt
82.14% 46 / 56 70%
AsyncResult.ktutility/src/main/java/org/oppia/android/util/data/AsyncResult.kt
100.00% 38 / 38 70%
DataProviders.ktutility/src/main/java/org/oppia/android/util/data/DataProviders.kt
99.25% 133 / 134 70%
BundleExtensions.ktutility/src/main/java/org/oppia/android/util/extensions/BundleExtensions.kt
84.62% 11 / 13 70%
MathModel.ktutility/src/main/java/org/oppia/android/util/parser/math/MathModel.kt
100.00% 19 / 19 70%
MathTagHandler.ktutility/src/main/java/org/oppia/android/util/parser/html/MathTagHandler.kt
96.77% 60 / 62 70%
LiTagHandler.ktutility/src/main/java/org/oppia/android/util/parser/html/LiTagHandler.kt
92.47% 86 / 93 70%
ImageTagHandler.ktutility/src/main/java/org/oppia/android/util/parser/html/ImageTagHandler.kt
100.00% 58 / 58 70%
PolicyPageTagHandler.ktutility/src/main/java/org/oppia/android/util/parser/html/PolicyPageTagHandler.kt
96.67% 29 / 30 70%
CustomHtmlContentHandler.ktutility/src/main/java/org/oppia/android/util/parser/html/CustomHtmlContentHandler.kt
76.54% 62 / 81 70%
ConceptCardTagHandler.ktutility/src/main/java/org/oppia/android/util/parser/html/ConceptCardTagHandler.kt
100.00% 15 / 15 70%
ProfileNameValidator.ktutility/src/main/java/org/oppia/android/util/profile/ProfileNameValidator.kt
100.00% 14 / 14 70%
DirectoryManagementUtil.ktutility/src/main/java/org/oppia/android/util/profile/DirectoryManagementUtil.kt
100.00% 4 / 4 70%
CurrentUserProfileIdIntentDecorator.ktutility/src/main/java/org/oppia/android/util/profile/CurrentUserProfileIdIntentDecorator.kt
100.00% 10 / 10 70%
DebugFirestoreEventLoggerImpl.ktutility/src/main/java/org/oppia/android/util/logging/firebase/DebugFirestoreEventLoggerImpl.kt
100.00% 10 / 10 70%
PerformanceMetricsAssessorModule.ktutility/src/main/java/org/oppia/android/util/logging/performancemetrics/PerformanceMetricsAssessorModule.kt
100.00% 3 / 3 70%
PerformanceMetricsAssessorImpl.ktutility/src/main/java/org/oppia/android/util/logging/performancemetrics/PerformanceMetricsAssessorImpl.kt
98.08% 51 / 52 70%
PerformanceMetricsConfigurationsModule.ktutility/src/main/java/org/oppia/android/util/logging/performancemetrics/PerformanceMetricsConfigurationsModule.kt
100.00% 6 / 6 70%
CurrentAppScreenNameIntentDecorator.ktutility/src/main/java/org/oppia/android/util/logging/CurrentAppScreenNameIntentDecorator.kt
100.00% 8 / 8 70%
SyncStatusManagerImpl.ktutility/src/main/java/org/oppia/android/util/logging/SyncStatusManagerImpl.kt
100.00% 39 / 39 70%
EventBundleCreator.ktutility/src/main/java/org/oppia/android/util/logging/EventBundleCreator.kt
74.89% 328 / 438 70%
EventTypeToHumanReadableNameConverter.ktutility/src/main/java/org/oppia/android/util/logging/EventTypeToHumanReadableNameConverter.kt
100.00% 54 / 54 70%
ActivityLanguageLocaleHandler.ktapp/src/main/java/org/oppia/android/app/translation/ActivityLanguageLocaleHandler.kt
100.00% 11 / 11 70%
AppLanguageLocaleHandler.ktapp/src/main/java/org/oppia/android/app/translation/AppLanguageLocaleHandler.kt
100.00% 20 / 20 70%
AppLanguageWatcherMixin.ktapp/src/main/java/org/oppia/android/app/translation/AppLanguageWatcherMixin.kt
72.22% 26 / 36 70%
TestActivityRecreator.ktapp/src/main/java/org/oppia/android/app/translation/testing/TestActivityRecreator.kt
100.00% 5 / 5 70%
AlphaBuildFlavorModule.ktapp/src/main/java/org/oppia/android/app/application/alpha/AlphaBuildFlavorModule.kt
100.00% 3 / 3 70%
GaBuildFlavorModule.ktapp/src/main/java/org/oppia/android/app/application/ga/GaBuildFlavorModule.kt
100.00% 3 / 3 70%
TestingBuildFlavorModule.ktapp/src/main/java/org/oppia/android/app/application/testing/TestingBuildFlavorModule.kt
100.00% 3 / 3 70%
DeveloperBuildFlavorModule.ktapp/src/main/java/org/oppia/android/app/application/dev/DeveloperBuildFlavorModule.kt
100.00% 3 / 3 70%
BetaBuildFlavorModule.ktapp/src/main/java/org/oppia/android/app/application/beta/BetaBuildFlavorModule.kt
100.00% 3 / 3 70%
ActivityRouter.ktapp/src/main/java/org/oppia/android/app/activity/route/ActivityRouter.kt
100.00% 12 / 12 70%
RegexPatternValidationCheck.ktscripts/src/java/org/oppia/android/scripts/regex/RegexPatternValidationCheck.kt
100.00% 104 / 104 70%
NetworkConfigProdModule.ktdata/src/main/java/org/oppia/android/data/backends/gae/NetworkConfigProdModule.kt
100.00% 4 / 4 70%
NetworkLoggingInterceptor.ktdata/src/main/java/org/oppia/android/data/backends/gae/NetworkLoggingInterceptor.kt
100.00% 42 / 42 70%
PlatformParameterService.ktdata/src/main/java/org/oppia/android/data/backends/gae/api/PlatformParameterService.kt
100.00% 2 / 2 70%
RemoteAuthNetworkInterceptor.ktdata/src/main/java/org/oppia/android/data/backends/gae/RemoteAuthNetworkInterceptor.kt
100.00% 11 / 11 70%
NetworkModule.ktdata/src/main/java/org/oppia/android/data/backends/gae/NetworkModule.kt
94.74% 18 / 19 70%
PersistentCacheStore.ktdata/src/main/java/org/oppia/android/data/persistence/PersistentCacheStore.kt
83.70% 113 / 135 70%
FakeOppiaClock.kttesting/src/main/java/org/oppia/android/testing/time/FakeOppiaClock.kt
97.14% 34 / 35 70%
OppiaShadowTrafficStats.kttesting/src/main/java/org/oppia/android/testing/robolectric/OppiaShadowTrafficStats.kt
100.00% 11 / 11 70%
OppiaShadowActivityManager.kttesting/src/main/java/org/oppia/android/testing/robolectric/OppiaShadowActivityManager.kt
100.00% 15 / 15 70%
ShadowBidiFormatter.kttesting/src/main/java/org/oppia/android/testing/robolectric/ShadowBidiFormatter.kt
100.00% 20 / 20 70%
NetworkConnectionTestUtil.kttesting/src/main/java/org/oppia/android/testing/networking/NetworkConnectionTestUtil.kt
100.00% 11 / 11 70%
FakeFirebaseAuthWrapperImpl.kttesting/src/main/java/org/oppia/android/testing/firebase/FakeFirebaseAuthWrapperImpl.kt
76.47% 13 / 17 70%
TestAuthenticationModule.kttesting/src/main/java/org/oppia/android/testing/firebase/TestAuthenticationModule.kt
100.00% 3 / 3 70%
CoroutineExecutorService.kttesting/src/main/java/org/oppia/android/testing/threading/CoroutineExecutorService.kt
98.00% 98 / 100 70%
TestCoroutineDispatcher.kttesting/src/main/java/org/oppia/android/testing/threading/TestCoroutineDispatcher.kt
71.43% 10 / 14 70%
DataProviderTestMonitor.kttesting/src/main/java/org/oppia/android/testing/data/DataProviderTestMonitor.kt
95.08% 58 / 61 70%
TestSyncStatusManager.kttesting/src/main/java/org/oppia/android/testing/logging/TestSyncStatusManager.kt
100.00% 41 / 41 70%
ContentLocaleImpl.ktdomain/src/main/java/org/oppia/android/domain/locale/ContentLocaleImpl.kt
100.00% 3 / 3 70%
LocaleController.ktdomain/src/main/java/org/oppia/android/domain/locale/LocaleController.kt
92.49% 160 / 173 70%
LanguageConfigRetriever.ktdomain/src/main/java/org/oppia/android/domain/locale/LanguageConfigRetriever.kt
100.00% 5 / 5 70%
TranslationController.ktdomain/src/main/java/org/oppia/android/domain/translation/TranslationController.kt
95.95% 142 / 148 70%
AuthenticationModule.ktdomain/src/main/java/org/oppia/android/domain/auth/AuthenticationModule.kt
100.00% 4 / 4 70%
ExplorationStorageTestModule.ktdomain/src/main/java/org/oppia/android/domain/exploration/testing/ExplorationStorageTestModule.kt
100.00% 4 / 4 70%
FakeExplorationRetriever.ktdomain/src/main/java/org/oppia/android/domain/exploration/testing/FakeExplorationRetriever.kt
100.00% 10 / 10 70%
ClipboardController.ktdomain/src/main/java/org/oppia/android/domain/clipboard/ClipboardController.kt
100.00% 30 / 30 70%
SurveyProgressController.ktdomain/src/main/java/org/oppia/android/domain/survey/SurveyProgressController.kt
92.76% 269 / 290 70%
SurveyGatingController.ktdomain/src/main/java/org/oppia/android/domain/survey/SurveyGatingController.kt
96.77% 30 / 31 70%
SurveyController.ktdomain/src/main/java/org/oppia/android/domain/survey/SurveyController.kt
92.68% 38 / 41 70%
DeprecationController.ktdomain/src/main/java/org/oppia/android/domain/onboarding/DeprecationController.kt
88.57% 62 / 70 70%
AppStartupStateController.ktdomain/src/main/java/org/oppia/android/domain/onboarding/AppStartupStateController.kt
92.77% 77 / 83 70%
PerformanceMetricsLogger.ktdomain/src/main/java/org/oppia/android/domain/oppialogger/analytics/PerformanceMetricsLogger.kt
100.00% 99 / 99 70%
FirestoreDataController.ktdomain/src/main/java/org/oppia/android/domain/oppialogger/analytics/FirestoreDataController.kt
73.03% 65 / 89 70%
ApplicationLifecycleObserver.ktdomain/src/main/java/org/oppia/android/domain/oppialogger/analytics/ApplicationLifecycleObserver.kt
83.05% 98 / 118 70%
FeatureFlagsLogger.ktdomain/src/main/java/org/oppia/android/domain/oppialogger/analytics/FeatureFlagsLogger.kt
100.00% 51 / 51 70%
PerformanceMetricsController.ktdomain/src/main/java/org/oppia/android/domain/oppialogger/analytics/PerformanceMetricsController.kt
75.00% 63 / 84 70%
FakeLogScheduler.ktdomain/src/main/java/org/oppia/android/domain/oppialogger/analytics/testing/FakeLogScheduler.kt
100.00% 14 / 14 70%
CpuPerformanceSnapshotter.ktdomain/src/main/java/org/oppia/android/domain/oppialogger/analytics/CpuPerformanceSnapshotter.kt
87.27% 96 / 110 70%
ApplicationLifecycleModule.ktdomain/src/main/java/org/oppia/android/domain/oppialogger/analytics/ApplicationLifecycleModule.kt
100.00% 5 / 5 70%
LogUploadWorker.ktdomain/src/main/java/org/oppia/android/domain/oppialogger/loguploader/LogUploadWorker.kt
93.59% 73 / 78 70%
LogReportWorkManagerInitializer.ktdomain/src/main/java/org/oppia/android/domain/oppialogger/loguploader/LogReportWorkManagerInitializer.kt
100.00% 109 / 109 70%
LocaleProdModule.ktutility/src/main/java/org/oppia/android/util/locale/LocaleProdModule.kt
0.00% 0 / 0 0% *
LocaleTestModule.ktutility/src/main/java/org/oppia/android/util/locale/testing/LocaleTestModule.kt
0.00% 0 / 0 0% *
MathExpressionExtensions.ktutility/src/main/java/org/oppia/android/util/math/MathExpressionExtensions.kt
42.50% 17 / 40 42% *
NetworkConnectionUtilDebugModule.ktutility/src/main/java/org/oppia/android/util/networking/NetworkConnectionUtilDebugModule.kt
0.00% 0 / 0 0% *
NetworkConnectionUtilProdModule.ktutility/src/main/java/org/oppia/android/util/networking/NetworkConnectionUtilProdModule.kt
0.00% 0 / 0 0% *
UrlImageParser.ktutility/src/main/java/org/oppia/android/util/parser/image/UrlImageParser.kt
57.08% 121 / 212 57% *
ConsoleLogger.ktutility/src/main/java/org/oppia/android/util/logging/ConsoleLogger.kt
65.00% 39 / 60 54% *
ActivityIntentFactories.ktapp/src/main/java/org/oppia/android/app/activity/ActivityIntentFactories.kt
0.00% 0 / 0 0% *
FeedbackReportingService.ktdata/src/main/java/org/oppia/android/data/backends/gae/api/FeedbackReportingService.kt
0.00% 0 / 0 0% *
JsonPrefixNetworkInterceptor.ktdata/src/main/java/org/oppia/android/data/backends/gae/JsonPrefixNetworkInterceptor.kt
28.57% 4 / 14 28% *
InitializeDefaultLocaleRule.kttesting/src/main/java/org/oppia/android/testing/junit/InitializeDefaultLocaleRule.kt
38.24% 39 / 102 38% *
MockPlatformParameterService.kttesting/src/main/java/org/oppia/android/testing/network/MockPlatformParameterService.kt
64.71% 11 / 17 64% *
TextInputAction.kttesting/src/main/java/org/oppia/android/testing/espresso/TextInputAction.kt
60.00% 12 / 20 60% *
SyncStatusTestModule.kttesting/src/main/java/org/oppia/android/testing/logging/SyncStatusTestModule.kt
0.00% 0 / 0 0% *
FirebaseAuthWrapperImpl.ktdomain/src/main/java/org/oppia/android/domain/auth/FirebaseAuthWrapperImpl.kt
31.25% 5 / 16 31% *
AuthenticationController.ktdomain/src/main/java/org/oppia/android/domain/auth/AuthenticationController.kt
21.05% 4 / 19 21% *
AnalyticsController.ktdomain/src/main/java/org/oppia/android/domain/oppialogger/analytics/AnalyticsController.kt
70.35% 121 / 172 68% *
CpuPerformanceSnapshotterModule.ktdomain/src/main/java/org/oppia/android/domain/oppialogger/analytics/CpuPerformanceSnapshotterModule.kt
26.67% 4 / 15 26% *

* represents tests with custom overridden pass/fail coverage thresholds

Exempted coverage

Files exempted from coverage
File Exemption Reason
SyncStatusManagerTestBase.ktutility/src/test/java/org/oppia/android/util/logging/SyncStatusManagerTestBase.kt
This file is exempted from having a test file; skipping coverage check.
FeatureFlagConstants.ktutility/src/main/java/org/oppia/android/util/platformparameter/FeatureFlagConstants.kt
This file is exempted from having a test file; skipping coverage check.
PlatformParameterConstants.ktutility/src/main/java/org/oppia/android/util/platformparameter/PlatformParameterConstants.kt
This file is exempted from having a test file; skipping coverage check.
FloatExtensions.ktutility/src/main/java/org/oppia/android/util/math/FloatExtensions.kt
This file is exempted from having a test file; skipping coverage check.
FractionExtensions.ktutility/src/main/java/org/oppia/android/util/math/FractionExtensions.kt
This file is exempted from having a test file; skipping coverage check.
AsyncDataSubscriptionManager.ktutility/src/main/java/org/oppia/android/util/data/AsyncDataSubscriptionManager.kt
This file is exempted from having a test file; skipping coverage check.
LogReportingModule.ktutility/src/main/java/org/oppia/android/util/logging/firebase/LogReportingModule.kt
This file is exempted from having a test file; skipping coverage check.
SpotlightFragment.ktapp/src/main/java/org/oppia/android/app/spotlight/SpotlightFragment.kt
This file is incompatible with code coverage tooling; skipping coverage check.
PoliciesFragment.ktapp/src/main/java/org/oppia/android/app/policies/PoliciesFragment.kt
This file is incompatible with code coverage tooling; skipping coverage check.
PoliciesActivity.ktapp/src/main/java/org/oppia/android/app/policies/PoliciesActivity.kt
This file is incompatible with code coverage tooling; skipping coverage check.
MyDownloadsActivity.ktapp/src/main/java/org/oppia/android/app/mydownloads/MyDownloadsActivity.kt
This file is exempted from having a test file; skipping coverage check.
StoryActivity.ktapp/src/main/java/org/oppia/android/app/story/StoryActivity.kt
This file is incompatible with code coverage tooling; skipping coverage check.
AudioLanguageFragment.ktapp/src/main/java/org/oppia/android/app/options/AudioLanguageFragment.kt
This file is incompatible with code coverage tooling; skipping coverage check.
OptionsFragment.ktapp/src/main/java/org/oppia/android/app/options/OptionsFragment.kt
This file is incompatible with code coverage tooling; skipping coverage check.
AppLanguageResourceHandler.ktapp/src/main/java/org/oppia/android/app/translation/AppLanguageResourceHandler.kt
This file is incompatible with code coverage tooling; skipping coverage check.
MathExpressionInteractionsView.ktapp/src/main/java/org/oppia/android/app/customview/interaction/MathExpressionInteractionsView.kt
This file is incompatible with code coverage tooling; skipping coverage check.
MathExpressionAccessibilityUtil.ktapp/src/main/java/org/oppia/android/app/utility/math/MathExpressionAccessibilityUtil.kt
This file is incompatible with code coverage tooling; skipping coverage check.
DateTimeUtil.ktapp/src/main/java/org/oppia/android/app/utility/datetime/DateTimeUtil.kt
This file is incompatible with code coverage tooling; skipping coverage check.
StateFragment.ktapp/src/main/java/org/oppia/android/app/player/state/StateFragment.kt
This file is incompatible with code coverage tooling; skipping coverage check.
ExplorationActivity.ktapp/src/main/java/org/oppia/android/app/player/exploration/ExplorationActivity.kt
This file is incompatible with code coverage tooling; skipping coverage check.
ActivityRouterModule.ktapp/src/main/java/org/oppia/android/app/activity/route/ActivityRouterModule.kt
This file is incompatible with code coverage tooling; skipping coverage check.
TopicActivity.ktapp/src/main/java/org/oppia/android/app/topic/TopicActivity.kt
This file is incompatible with code coverage tooling; skipping coverage check.
TopicInfoFragment.ktapp/src/main/java/org/oppia/android/app/topic/info/TopicInfoFragment.kt
This file is incompatible with code coverage tooling; skipping coverage check.
RevisionCardActivity.ktapp/src/main/java/org/oppia/android/app/topic/revisioncard/RevisionCardActivity.kt
This file is incompatible with code coverage tooling; skipping coverage check.
TopicPracticeFragment.ktapp/src/main/java/org/oppia/android/app/topic/practice/TopicPracticeFragment.kt
This file is incompatible with code coverage tooling; skipping coverage check.
TopicFragment.ktapp/src/main/java/org/oppia/android/app/topic/TopicFragment.kt
This file is incompatible with code coverage tooling; skipping coverage check.
QuestionPlayerActivity.ktapp/src/main/java/org/oppia/android/app/topic/questionplayer/QuestionPlayerActivity.kt
This file is incompatible with code coverage tooling; skipping coverage check.
TopicRevisionFragment.ktapp/src/main/java/org/oppia/android/app/topic/revision/TopicRevisionFragment.kt
This file is incompatible with code coverage tooling; skipping coverage check.
TopicLessonsFragment.ktapp/src/main/java/org/oppia/android/app/topic/lessons/TopicLessonsFragment.kt
This file is incompatible with code coverage tooling; skipping coverage check.
HomeActivity.ktapp/src/main/java/org/oppia/android/app/home/HomeActivity.kt
This file is incompatible with code coverage tooling; skipping coverage check.
StringToRatioParser.ktapp/src/main/java/org/oppia/android/app/parser/StringToRatioParser.kt
This file is incompatible with code coverage tooling; skipping coverage check.
FractionParsingUiError.ktapp/src/main/java/org/oppia/android/app/parser/FractionParsingUiError.kt
This file is incompatible with code coverage tooling; skipping coverage check.
ProfileEditFragment.ktapp/src/main/java/org/oppia/android/app/settings/profile/ProfileEditFragment.kt
This file is exempted from having a test file; skipping coverage check.
SurveyFragment.ktapp/src/main/java/org/oppia/android/app/survey/SurveyFragment.kt
This file is incompatible with code coverage tooling; skipping coverage check.
SurveyActivity.ktapp/src/main/java/org/oppia/android/app/survey/SurveyActivity.kt
This file is incompatible with code coverage tooling; skipping coverage check.
ClassroomListFragment.ktapp/src/main/java/org/oppia/android/app/classroom/ClassroomListFragment.kt
This file is incompatible with code coverage tooling; skipping coverage check.
OnboardingFragment.ktapp/src/main/java/org/oppia/android/app/onboarding/OnboardingFragment.kt
This file is incompatible with code coverage tooling; skipping coverage check.
IntroFragment.ktapp/src/main/java/org/oppia/android/app/onboarding/IntroFragment.kt
This file is incompatible with code coverage tooling; skipping coverage check.
OnboardingProfileTypeFragment.ktapp/src/main/java/org/oppia/android/app/onboarding/OnboardingProfileTypeFragment.kt
This file is incompatible with code coverage tooling; skipping coverage check.
CreateProfileFragment.ktapp/src/main/java/org/oppia/android/app/onboarding/CreateProfileFragment.kt
This file is incompatible with code coverage tooling; skipping coverage check.
TestActivity.ktapp/src/main/java/org/oppia/android/app/testing/activity/TestActivity.kt
This file is incompatible with code coverage tooling; skipping coverage check.
TopicTestActivityForStory.ktapp/src/main/java/org/oppia/android/app/testing/TopicTestActivityForStory.kt
This file is incompatible with code coverage tooling; skipping coverage check.
ProfileChooserFragment.ktapp/src/main/java/org/oppia/android/app/profile/ProfileChooserFragment.kt
This file is incompatible with code coverage tooling; skipping coverage check.
PinPasswordActivity.ktapp/src/main/java/org/oppia/android/app/profile/PinPasswordActivity.kt
This file is incompatible with code coverage tooling; skipping coverage check.
AddProfileActivity.ktapp/src/main/java/org/oppia/android/app/profile/AddProfileActivity.kt
This file is incompatible with code coverage tooling; skipping coverage check.
SplashActivity.ktapp/src/main/java/org/oppia/android/app/splash/SplashActivity.kt
This file is incompatible with code coverage tooling; skipping coverage check.
ProfileAndDeviceIdFragment.ktapp/src/main/java/org/oppia/android/app/administratorcontrols/learneranalytics/ProfileAndDeviceIdFragment.kt
This file is incompatible with code coverage tooling; skipping coverage check.
AdministratorControlsActivity.ktapp/src/main/java/org/oppia/android/app/administratorcontrols/AdministratorControlsActivity.kt
This file is incompatible with code coverage tooling; skipping coverage check.
AdministratorControlsFragment.ktapp/src/main/java/org/oppia/android/app/administratorcontrols/AdministratorControlsFragment.kt
This file is incompatible with code coverage tooling; skipping coverage check.
DeveloperOptionsTestParsersViewModel.ktapp/src/main/java/org/oppia/android/app/devoptions/devoptionsitemviewmodel/DeveloperOptionsTestParsersViewModel.kt
This file is incompatible with code coverage tooling; skipping coverage check.
MathExpressionParserActivity.ktapp/src/main/java/org/oppia/android/app/devoptions/mathexpressionparser/MathExpressionParserActivity.kt
This file is incompatible with code coverage tooling; skipping coverage check.
MathExpressionParserFragment.ktapp/src/main/java/org/oppia/android/app/devoptions/mathexpressionparser/MathExpressionParserFragment.kt
This file is incompatible with code coverage tooling; skipping coverage check.
ExplorationCheckpointTestHelper.kttesting/src/main/java/org/oppia/android/testing/lightweightcheckpointing/ExplorationCheckpointTestHelper.kt
This file is incompatible with code coverage tooling; skipping coverage check.
PlatformParameterTestConstantsModule.kttesting/src/main/java/org/oppia/android/testing/platformparameter/PlatformParameterTestConstantsModule.kt
This file is exempted from having a test file; skipping coverage check.
PlatformParameterTestConstants.kttesting/src/main/java/org/oppia/android/testing/platformparameter/PlatformParameterTestConstants.kt
This file is exempted from having a test file; skipping coverage check.
StoryProgressTestHelper.kttesting/src/main/java/org/oppia/android/testing/story/StoryProgressTestHelper.kt
This file is incompatible with code coverage tooling; skipping coverage check.
FakeExceptionLogger.kttesting/src/main/java/org/oppia/android/testing/FakeExceptionLogger.kt
This file is incompatible with code coverage tooling; skipping coverage check.
FakePerformanceMetricAssessor.kttesting/src/main/java/org/oppia/android/testing/FakePerformanceMetricAssessor.kt
This file is incompatible with code coverage tooling; skipping coverage check.
OverrideIntParameter.kttesting/src/main/java/org/oppia/android/testing/OverrideIntParameter.kt
This file is exempted from having a test file; skipping coverage check.
FakeFirestoreEventLogger.kttesting/src/main/java/org/oppia/android/testing/FakeFirestoreEventLogger.kt
This file is incompatible with code coverage tooling; skipping coverage check.
TestCoroutineDispatcherEspressoImpl.kttesting/src/main/java/org/oppia/android/testing/threading/TestCoroutineDispatcherEspressoImpl.kt
This file is incompatible with code coverage tooling; skipping coverage check.
TestCoroutineDispatcherRobolectricImpl.kttesting/src/main/java/org/oppia/android/testing/threading/TestCoroutineDispatcherRobolectricImpl.kt
This file is incompatible with code coverage tooling; skipping coverage check.
OppiaTestRule.kttesting/src/main/java/org/oppia/android/testing/OppiaTestRule.kt
This file is exempted from having a test file; skipping coverage check.
FakePerformanceMetricsEventLogger.kttesting/src/main/java/org/oppia/android/testing/FakePerformanceMetricsEventLogger.kt
This file is incompatible with code coverage tooling; skipping coverage check.
OverrideStringParameter.kttesting/src/main/java/org/oppia/android/testing/OverrideStringParameter.kt
This file is exempted from having a test file; skipping coverage check.
ResetFeatureFlagToDefault.kttesting/src/main/java/org/oppia/android/testing/ResetFeatureFlagToDefault.kt
This file is exempted from having a test file; skipping coverage check.
DisableFeatureFlag.kttesting/src/main/java/org/oppia/android/testing/DisableFeatureFlag.kt
This file is exempted from having a test file; skipping coverage check.
ProfileTestHelper.kttesting/src/main/java/org/oppia/android/testing/profile/ProfileTestHelper.kt
This file is incompatible with code coverage tooling; skipping coverage check.
EnableFeatureFlag.kttesting/src/main/java/org/oppia/android/testing/EnableFeatureFlag.kt
This file is exempted from having a test file; skipping coverage check.
FakeAnalyticsEventLogger.kttesting/src/main/java/org/oppia/android/testing/FakeAnalyticsEventLogger.kt
This file is incompatible with code coverage tooling; skipping coverage check.
OverrideBoolParameter.kttesting/src/main/java/org/oppia/android/testing/OverrideBoolParameter.kt
This file is exempted from having a test file; skipping coverage check.
SpotlightStateController.ktdomain/src/main/java/org/oppia/android/domain/spotlight/SpotlightStateController.kt
This file is incompatible with code coverage tooling; skipping coverage check.
PlatformParameterModule.ktdomain/src/main/java/org/oppia/android/domain/platformparameter/PlatformParameterModule.kt
This file is incompatible with code coverage tooling; skipping coverage check.
PlatformParameterSyncUpWorkManagerInitializer.ktdomain/src/main/java/org/oppia/android/domain/platformparameter/syncup/PlatformParameterSyncUpWorkManagerInitializer.kt
This file is incompatible with code coverage tooling; skipping coverage check.
PlatformParameterSyncUpWorker.ktdomain/src/main/java/org/oppia/android/domain/platformparameter/syncup/PlatformParameterSyncUpWorker.kt
This file is incompatible with code coverage tooling; skipping coverage check.
PlatformParameterController.ktdomain/src/main/java/org/oppia/android/domain/platformparameter/PlatformParameterController.kt
This file is incompatible with code coverage tooling; skipping coverage check.
StateRetriever.ktdomain/src/main/java/org/oppia/android/domain/util/StateRetriever.kt
This file is incompatible with code coverage tooling; skipping coverage check.
InteractionObjectExtensions.ktdomain/src/main/java/org/oppia/android/domain/util/InteractionObjectExtensions.kt
This file is incompatible with code coverage tooling; skipping coverage check.
StoryProgressController.ktdomain/src/main/java/org/oppia/android/domain/topic/StoryProgressController.kt
This file is incompatible with code coverage tooling; skipping coverage check.
ExplorationCheckpointController.ktdomain/src/main/java/org/oppia/android/domain/exploration/lightweightcheckpointing/ExplorationCheckpointController.kt
This file is incompatible with code coverage tooling; skipping coverage check.
ExplorationDataController.ktdomain/src/main/java/org/oppia/android/domain/exploration/ExplorationDataController.kt
This file is incompatible with code coverage tooling; skipping coverage check.
ExplorationProgressController.ktdomain/src/main/java/org/oppia/android/domain/exploration/ExplorationProgressController.kt
This file is incompatible with code coverage tooling; skipping coverage check.
ExplorationStorageModule.ktdomain/src/main/java/org/oppia/android/domain/exploration/ExplorationStorageModule.kt
This file is incompatible with code coverage tooling; skipping coverage check.
ExplorationActiveTimeController.ktdomain/src/main/java/org/oppia/android/domain/exploration/ExplorationActiveTimeController.kt
This file is incompatible with code coverage tooling; skipping coverage check.
ExplorationProgressModule.ktdomain/src/main/java/org/oppia/android/domain/exploration/ExplorationProgressModule.kt
This file is incompatible with code coverage tooling; skipping coverage check.
QuestionTrainingController.ktdomain/src/main/java/org/oppia/android/domain/question/QuestionTrainingController.kt
This file is incompatible with code coverage tooling; skipping coverage check.
ClassroomController.ktdomain/src/main/java/org/oppia/android/domain/classroom/ClassroomController.kt
This file is incompatible with code coverage tooling; skipping coverage check.
LoggingIdentifierController.ktdomain/src/main/java/org/oppia/android/domain/oppialogger/LoggingIdentifierController.kt
This file is incompatible with code coverage tooling; skipping coverage check.
OppiaLogger.ktdomain/src/main/java/org/oppia/android/domain/oppialogger/OppiaLogger.kt
This file is incompatible with code coverage tooling; skipping coverage check.
UncaughtExceptionLoggerStartupListener.ktdomain/src/main/java/org/oppia/android/domain/oppialogger/exceptions/UncaughtExceptionLoggerStartupListener.kt
This file is incompatible with code coverage tooling; skipping coverage check.
ExceptionsController.ktdomain/src/main/java/org/oppia/android/domain/oppialogger/exceptions/ExceptionsController.kt
This file is incompatible with code coverage tooling; skipping coverage check.
LearnerAnalyticsLogger.ktdomain/src/main/java/org/oppia/android/domain/oppialogger/analytics/LearnerAnalyticsLogger.kt
This file is incompatible with code coverage tooling; skipping coverage check.
LoggingIdentifierModule.ktdomain/src/main/java/org/oppia/android/domain/oppialogger/LoggingIdentifierModule.kt
This file is incompatible with code coverage tooling; skipping coverage check.
MetricLogSchedulerModule.ktdomain/src/main/java/org/oppia/android/domain/oppialogger/logscheduler/MetricLogSchedulerModule.kt
This file is incompatible with code coverage tooling; skipping coverage check.
MetricLogSchedulingWorker.ktdomain/src/main/java/org/oppia/android/domain/oppialogger/logscheduler/MetricLogSchedulingWorker.kt
This file is incompatible with code coverage tooling; skipping coverage check.
PerformanceMetricsLogScheduler.ktdomain/src/main/java/org/oppia/android/domain/oppialogger/logscheduler/PerformanceMetricsLogScheduler.kt
This file is incompatible with code coverage tooling; skipping coverage check.
ReportSchemaVersion.ktdomain/src/main/java/org/oppia/android/domain/feedbackreporting/ReportSchemaVersion.kt
This file is incompatible with code coverage tooling; skipping coverage check.
ProfileManagementController.ktdomain/src/main/java/org/oppia/android/domain/profile/ProfileManagementController.kt
This file is incompatible with code coverage tooling; skipping coverage check.
ImageClickInputIsInRegionRuleClassifierProvider.ktdomain/src/main/java/org/oppia/android/domain/classify/rules/imageClickInput/ImageClickInputIsInRegionRuleClassifierProvider.kt
This file is incompatible with code coverage tooling; skipping coverage check.
FractionInputHasDenominatorEqualToRuleClassifierProvider.ktdomain/src/main/java/org/oppia/android/domain/classify/rules/fractioninput/FractionInputHasDenominatorEqualToRuleClassifierProvider.kt
This file is incompatible with code coverage tooling; skipping coverage check.
FractionInputHasNumeratorEqualToRuleClassifierProvider.ktdomain/src/main/java/org/oppia/android/domain/classify/rules/fractioninput/FractionInputHasNumeratorEqualToRuleClassifierProvider.kt
This file is incompatible with code coverage tooling; skipping coverage check.
FractionInputHasIntegerPartEqualToRuleClassifierProvider.ktdomain/src/main/java/org/oppia/android/domain/classify/rules/fractioninput/FractionInputHasIntegerPartEqualToRuleClassifierProvider.kt
This file is incompatible with code coverage tooling; skipping coverage check.
FractionInputHasNoFractionalPartRuleClassifierProvider.ktdomain/src/main/java/org/oppia/android/domain/classify/rules/fractioninput/FractionInputHasNoFractionalPartRuleClassifierProvider.kt
This file is incompatible with code coverage tooling; skipping coverage check.
FractionInputIsEquivalentToAndInSimplestFormRuleClassifierProvider.ktdomain/src/main/java/org/oppia/android/domain/classify/rules/fractioninput/FractionInputIsEquivalentToAndInSimplestFormRuleClassifierProvider.kt
This file is incompatible with code coverage tooling; skipping coverage check.
FractionInputIsExactlyEqualToRuleClassifierProvider.ktdomain/src/main/java/org/oppia/android/domain/classify/rules/fractioninput/FractionInputIsExactlyEqualToRuleClassifierProvider.kt
This file is incompatible with code coverage tooling; skipping coverage check.
FractionInputHasFractionalPartExactlyEqualToRuleClassifierProvider.ktdomain/src/main/java/org/oppia/android/domain/classify/rules/fractioninput/FractionInputHasFractionalPartExactlyEqualToRuleClassifierProvider.kt
This file is incompatible with code coverage tooling; skipping coverage check.
FractionInputIsLessThanRuleClassifierProvider.ktdomain/src/main/java/org/oppia/android/domain/classify/rules/fractioninput/FractionInputIsLessThanRuleClassifierProvider.kt
This file is incompatible with code coverage tooling; skipping coverage check.
FractionInputIsGreaterThanRuleClassifierProvider.ktdomain/src/main/java/org/oppia/android/domain/classify/rules/fractioninput/FractionInputIsGreaterThanRuleClassifierProvider.kt
This file is incompatible with code coverage tooling; skipping coverage check.
FractionInputIsEquivalentToRuleClassifierProvider.ktdomain/src/main/java/org/oppia/android/domain/classify/rules/fractioninput/FractionInputIsEquivalentToRuleClassifierProvider.kt
This file is incompatible with code coverage tooling; skipping coverage check.
DragDropSortInputIsEqualToOrderingClassifierProvider.ktdomain/src/main/java/org/oppia/android/domain/classify/rules/dragAndDropSortInput/DragDropSortInputIsEqualToOrderingClassifierProvider.kt
This file is incompatible with code coverage tooling; skipping coverage check.
DragDropSortInputIsEqualToOrderingWithOneItemAtIncorrectPositionClassifierProvider.ktdomain/src/main/java/org/oppia/android/domain/classify/rules/dragAndDropSortInput/DragDropSortInputIsEqualToOrderingWithOneItemAtIncorrectPositionClassifierProvider.kt
This file is incompatible with code coverage tooling; skipping coverage check.
AlgebraicExpressionInputIsEquivalentToRuleClassifierProvider.ktdomain/src/main/java/org/oppia/android/domain/classify/rules/algebraicexpressioninput/AlgebraicExpressionInputIsEquivalentToRuleClassifierProvider.kt
This file is incompatible with code coverage tooling; skipping coverage check.
AlgebraicExpressionInputMatchesExactlyWithRuleClassifierProvider.ktdomain/src/main/java/org/oppia/android/domain/classify/rules/algebraicexpressioninput/AlgebraicExpressionInputMatchesExactlyWithRuleClassifierProvider.kt
This file is incompatible with code coverage tooling; skipping coverage check.
AlgebraicExpressionInputModule.ktdomain/src/main/java/org/oppia/android/domain/classify/rules/algebraicexpressioninput/AlgebraicExpressionInputModule.kt
This file is incompatible with code coverage tooling; skipping coverage check.
AlgebraicExpressionInputMatchesUpToTrivialManipulationsRuleClassifierProvider.ktdomain/src/main/java/org/oppia/android/domain/classify/rules/algebraicexpressioninput/AlgebraicExpressionInputMatchesUpToTrivialManipulationsRuleClassifierProvider.kt
This file is incompatible with code coverage tooling; skipping coverage check.
NumberWithUnitsIsEqualToRuleClassifierProvider.ktdomain/src/main/java/org/oppia/android/domain/classify/rules/numberwithunits/NumberWithUnitsIsEqualToRuleClassifierProvider.kt
This file is incompatible with code coverage tooling; skipping coverage check.
NumberWithUnitsIsEquivalentToRuleClassifierProvider.ktdomain/src/main/java/org/oppia/android/domain/classify/rules/numberwithunits/NumberWithUnitsIsEquivalentToRuleClassifierProvider.kt
This file is incompatible with code coverage tooling; skipping coverage check.
ItemSelectionInputEqualsRuleClassifierProvider.ktdomain/src/main/java/org/oppia/android/domain/classify/rules/itemselectioninput/ItemSelectionInputEqualsRuleClassifierProvider.kt
This file is incompatible with code coverage tooling; skipping coverage check.
ItemSelectionInputDoesNotContainAtLeastOneOfRuleClassifierProvider.ktdomain/src/main/java/org/oppia/android/domain/classify/rules/itemselectioninput/ItemSelectionInputDoesNotContainAtLeastOneOfRuleClassifierProvider.kt
This file is incompatible with code coverage tooling; skipping coverage check.
ItemSelectionInputContainsAtLeastOneOfRuleClassifierProvider.ktdomain/src/main/java/org/oppia/android/domain/classify/rules/itemselectioninput/ItemSelectionInputContainsAtLeastOneOfRuleClassifierProvider.kt
This file is incompatible with code coverage tooling; skipping coverage check.
ItemSelectionInputIsProperSubsetOfRuleClassifierProvider.ktdomain/src/main/java/org/oppia/android/domain/classify/rules/itemselectioninput/ItemSelectionInputIsProperSubsetOfRuleClassifierProvider.kt
This file is incompatible with code coverage tooling; skipping coverage check.
MultipleChoiceInputEqualsRuleClassifierProvider.ktdomain/src/main/java/org/oppia/android/domain/classify/rules/multiplechoiceinput/MultipleChoiceInputEqualsRuleClassifierProvider.kt
This file is incompatible with code coverage tooling; skipping coverage check.
MathEquationInputMatchesUpToTrivialManipulationsRuleClassifierProvider.ktdomain/src/main/java/org/oppia/android/domain/classify/rules/mathequationinput/MathEquationInputMatchesUpToTrivialManipulationsRuleClassifierProvider.kt
This file is incompatible with code coverage tooling; skipping coverage check.
MathEquationInputMatchesExactlyWithRuleClassifierProvider.ktdomain/src/main/java/org/oppia/android/domain/classify/rules/mathequationinput/MathEquationInputMatchesExactlyWithRuleClassifierProvider.kt
This file is incompatible with code coverage tooling; skipping coverage check.
MathEquationInputIsEquivalentToRuleClassifierProvider.ktdomain/src/main/java/org/oppia/android/domain/classify/rules/mathequationinput/MathEquationInputIsEquivalentToRuleClassifierProvider.kt
This file is incompatible with code coverage tooling; skipping coverage check.
MathEquationInputModule.ktdomain/src/main/java/org/oppia/android/domain/classify/rules/mathequationinput/MathEquationInputModule.kt
This file is incompatible with code coverage tooling; skipping coverage check.
TextInputFuzzyEqualsRuleClassifierProvider.ktdomain/src/main/java/org/oppia/android/domain/classify/rules/textinput/TextInputFuzzyEqualsRuleClassifierProvider.kt
This file is incompatible with code coverage tooling; skipping coverage check.
TextInputStartsWithRuleClassifierProvider.ktdomain/src/main/java/org/oppia/android/domain/classify/rules/textinput/TextInputStartsWithRuleClassifierProvider.kt
This file is incompatible with code coverage tooling; skipping coverage check.
TextInputContainsRuleClassifierProvider.ktdomain/src/main/java/org/oppia/android/domain/classify/rules/textinput/TextInputContainsRuleClassifierProvider.kt
This file is incompatible with code coverage tooling; skipping coverage check.
TextInputEqualsRuleClassifierProvider.ktdomain/src/main/java/org/oppia/android/domain/classify/rules/textinput/TextInputEqualsRuleClassifierProvider.kt
This file is incompatible with code coverage tooling; skipping coverage check.
NumericInputIsLessThanOrEqualToRuleClassifierProvider.ktdomain/src/main/java/org/oppia/android/domain/classify/rules/numericinput/NumericInputIsLessThanOrEqualToRuleClassifierProvider.kt
This file is incompatible with code coverage tooling; skipping coverage check.
NumericInputIsWithinToleranceRuleClassifierProvider.ktdomain/src/main/java/org/oppia/android/domain/classify/rules/numericinput/NumericInputIsWithinToleranceRuleClassifierProvider.kt
This file is incompatible with code coverage tooling; skipping coverage check.
NumericInputIsGreaterThanRuleClassifierProvider.ktdomain/src/main/java/org/oppia/android/domain/classify/rules/numericinput/NumericInputIsGreaterThanRuleClassifierProvider.kt
This file is incompatible with code coverage tooling; skipping coverage check.
NumericInputIsLessThanRuleClassifierProvider.ktdomain/src/main/java/org/oppia/android/domain/classify/rules/numericinput/NumericInputIsLessThanRuleClassifierProvider.kt
This file is incompatible with code coverage tooling; skipping coverage check.
NumericInputIsGreaterThanOrEqualToRuleClassifierProvider.ktdomain/src/main/java/org/oppia/android/domain/classify/rules/numericinput/NumericInputIsGreaterThanOrEqualToRuleClassifierProvider.kt
This file is incompatible with code coverage tooling; skipping coverage check.
NumericInputEqualsRuleClassifierProvider.ktdomain/src/main/java/org/oppia/android/domain/classify/rules/numericinput/NumericInputEqualsRuleClassifierProvider.kt
This file is incompatible with code coverage tooling; skipping coverage check.
NumericInputIsInclusivelyBetweenRuleClassifierProvider.ktdomain/src/main/java/org/oppia/android/domain/classify/rules/numericinput/NumericInputIsInclusivelyBetweenRuleClassifierProvider.kt
This file is incompatible with code coverage tooling; skipping coverage check.
NumericExpressionInputModule.ktdomain/src/main/java/org/oppia/android/domain/classify/rules/numericexpressioninput/NumericExpressionInputModule.kt
This file is incompatible with code coverage tooling; skipping coverage check.
NumericExpressionInputIsEquivalentToRuleClassifierProvider.ktdomain/src/main/java/org/oppia/android/domain/classify/rules/numericexpressioninput/NumericExpressionInputIsEquivalentToRuleClassifierProvider.kt
This file is incompatible with code coverage tooling; skipping coverage check.
NumericExpressionInputMatchesExactlyWithRuleClassifierProvider.ktdomain/src/main/java/org/oppia/android/domain/classify/rules/numericexpressioninput/NumericExpressionInputMatchesExactlyWithRuleClassifierProvider.kt
This file is incompatible with code coverage tooling; skipping coverage check.
NumericExpressionInputMatchesUpToTrivialManipulationsRuleClassifierProvider.ktdomain/src/main/java/org/oppia/android/domain/classify/rules/numericexpressioninput/NumericExpressionInputMatchesUpToTrivialManipulationsRuleClassifierProvider.kt
This file is incompatible with code coverage tooling; skipping coverage check.
RatioInputHasSpecificTermEqualToRuleClassifierProvider.ktdomain/src/main/java/org/oppia/android/domain/classify/rules/ratioinput/RatioInputHasSpecificTermEqualToRuleClassifierProvider.kt
This file is incompatible with code coverage tooling; skipping coverage check.
RatioInputEqualsRuleClassifierProvider.ktdomain/src/main/java/org/oppia/android/domain/classify/rules/ratioinput/RatioInputEqualsRuleClassifierProvider.kt
This file is incompatible with code coverage tooling; skipping coverage check.
RatioInputHasNumberOfTermsEqualToClassifierProvider.ktdomain/src/main/java/org/oppia/android/domain/classify/rules/ratioinput/RatioInputHasNumberOfTermsEqualToClassifierProvider.kt
This file is incompatible with code coverage tooling; skipping coverage check.
RatioInputIsEquivalentRuleClassifierProvider.ktdomain/src/main/java/org/oppia/android/domain/classify/rules/ratioinput/RatioInputIsEquivalentRuleClassifierProvider.kt
This file is incompatible with code coverage tooling; skipping coverage check.
AnswerClassificationController.ktdomain/src/main/java/org/oppia/android/domain/classify/AnswerClassificationController.kt
This file is incompatible with code coverage tooling; skipping coverage check.
AudioPlayerController.ktdomain/src/main/java/org/oppia/android/domain/audio/AudioPlayerController.kt
This file is incompatible with code coverage tooling; skipping coverage check.
CellularAudioDialogController.ktdomain/src/main/java/org/oppia/android/domain/audio/CellularAudioDialogController.kt
This file is incompatible with code coverage tooling; skipping coverage check.
HintsAndSolutionProdModule.ktdomain/src/main/java/org/oppia/android/domain/hintsandsolution/HintsAndSolutionProdModule.kt
This file is incompatible with code coverage tooling; skipping coverage check.
HelpIndexExtensions.ktdomain/src/main/java/org/oppia/android/domain/hintsandsolution/HelpIndexExtensions.kt
This file is incompatible with code coverage tooling; skipping coverage check.
HintHandlerProdImpl.ktdomain/src/main/java/org/oppia/android/domain/hintsandsolution/HintHandlerProdImpl.kt
This file is incompatible with code coverage tooling; skipping coverage check.
HintHandlerDebugImpl.ktdomain/src/main/java/org/oppia/android/domain/hintsandsolution/HintHandlerDebugImpl.kt
This file is incompatible with code coverage tooling; skipping coverage check.
HintsAndSolutionDebugModule.ktdomain/src/main/java/org/oppia/android/domain/hintsandsolution/HintsAndSolutionDebugModule.kt
This file is incompatible with code coverage tooling; skipping coverage check.
ShowAllHintsAndSolutionController.ktdomain/src/main/java/org/oppia/android/domain/devoptions/ShowAllHintsAndSolutionController.kt
This file is incompatible with code coverage tooling; skipping coverage check.
ModifyLessonProgressController.ktdomain/src/main/java/org/oppia/android/domain/devoptions/ModifyLessonProgressController.kt
This file is incompatible with code coverage tooling; skipping coverage check.

Refer test_file_exemptions.textproto for the comprehensive list of file exemptions and their required coverage percentages.

To learn more, visit the Oppia Android Code Coverage wiki page

Copy link

github-actions bot commented Jan 9, 2025

APK & AAB differences analysis

Note that this is a summarized snapshot. See the CI artifacts for detailed differences.

Dev

Expand to see flavor specifics

Universal APK

APK file size: 19 MiB (old), 19 MiB (new), 4768 bytes (Added)

APK download size (estimated): 17 MiB (old), 17 MiB (new), 6107 bytes (Added)

Method count: 260202 (old), 260227 (new), 25 (Added)

Features: 2 (old), 2 (new), 0 (No change)

Permissions: 6 (old), 6 (new), 0 (No change)

Resources: 6818 (old), 6818 (new), 0 (No change)

  • Anim: 43 (old), 43 (new), 0 (No change)
  • Animator: 26 (old), 26 (new), 0 (No change)
  • Array: 15 (old), 15 (new), 0 (No change)
  • Attr: 922 (old), 922 (new), 0 (No change)
  • Bool: 9 (old), 9 (new), 0 (No change)
  • Color: 967 (old), 967 (new), 0 (No change)
  • Dimen: 1048 (old), 1048 (new), 0 (No change)
  • Drawable: 380 (old), 380 (new), 0 (No change)
  • Id: 1275 (old), 1275 (new), 0 (No change)
  • Integer: 37 (old), 37 (new), 0 (No change)
  • Interpolator: 11 (old), 11 (new), 0 (No change)
  • Layout: 380 (old), 380 (new), 0 (No change)
  • Menu: 3 (old), 3 (new), 0 (No change)
  • Mipmap: 1 (old), 1 (new), 0 (No change)
  • Plurals: 10 (old), 10 (new), 0 (No change)
  • Raw: 2 (old), 2 (new), 0 (No change)
  • String: 852 (old), 852 (new), 0 (No change)
  • Style: 831 (old), 831 (new), 0 (No change)
  • Xml: 6 (old), 6 (new), 0 (No change)

Lesson assets: 111 (old), 111 (new), 0 (No change)

AAB differences

Expand to see AAB specifics

Supported configurations:

  • hdpi (same)
  • ldpi (same)
  • mdpi (same)
  • tvdpi (same)
  • xhdpi (same)
  • xxhdpi (same)
  • xxxhdpi (same)

Base APK

APK file size: 18 MiB (old), 18 MiB (new), 4768 bytes (Added)
APK download size (estimated): 17 MiB (old), 17 MiB (new), 3272 bytes (Added)
Method count: 260202 (old), 260227 (new), 25 (Added)

Configuration hdpi

APK file size: 50 KiB (old), 50 KiB (new), 0 bytes (No change)
APK download size (estimated): 18 KiB (old), 18 KiB (new), 0 bytes (No change)

Configuration ldpi

APK file size: 49 KiB (old), 49 KiB (new), 0 bytes (No change)
APK download size (estimated): 14 KiB (old), 14 KiB (new), 0 bytes (No change)

Configuration mdpi

APK file size: 45 KiB (old), 45 KiB (new), 0 bytes (No change)
APK download size (estimated): 14 KiB (old), 14 KiB (new), 0 bytes (No change)

Configuration tvdpi

APK file size: 86 KiB (old), 86 KiB (new), 0 bytes (No change)
APK download size (estimated): 29 KiB (old), 29 KiB (new), 0 bytes (No change)

Configuration xhdpi

APK file size: 57 KiB (old), 57 KiB (new), 0 bytes (No change)
APK download size (estimated): 21 KiB (old), 21 KiB (new), 0 bytes (No change)

Configuration xxhdpi

APK file size: 63 KiB (old), 63 KiB (new), 0 bytes (No change)
APK download size (estimated): 29 KiB (old), 29 KiB (new), 0 bytes (No change)

Configuration xxxhdpi

APK file size: 63 KiB (old), 63 KiB (new), 0 bytes (No change)
APK download size (estimated): 28 KiB (old), 28 KiB (new), 0 bytes (No change)

Alpha

Expand to see flavor specifics

Universal APK

APK file size: 11 MiB (old), 11 MiB (new), 0 bytes (No change)

APK download size (estimated): 10 MiB (old), 10 MiB (new), 21 bytes (Removed)

Method count: 116281 (old), 116281 (new), 0 (No change)

Features: 2 (old), 2 (new), 0 (No change)

Permissions: 6 (old), 6 (new), 0 (No change)

Resources: 5786 (old), 5786 (new), 0 (No change)

  • Anim: 33 (old), 33 (new), 0 (No change)
  • Animator: 24 (old), 24 (new), 0 (No change)
  • Array: 14 (old), 14 (new), 0 (No change)
  • Attr: 888 (old), 888 (new), 0 (No change)
  • Bool: 8 (old), 8 (new), 0 (No change)
  • Color: 820 (old), 820 (new), 0 (No change)
  • Dimen: 780 (old), 780 (new), 0 (No change)
  • Drawable: 342 (old), 342 (new), 0 (No change)
  • Id: 1221 (old), 1221 (new), 0 (No change)
  • Integer: 32 (old), 32 (new), 0 (No change)
  • Interpolator: 11 (old), 11 (new), 0 (No change)
  • Layout: 343 (old), 343 (new), 0 (No change)
  • Menu: 1 (old), 1 (new), 0 (No change)
  • Mipmap: 1 (old), 1 (new), 0 (No change)
  • Plurals: 10 (old), 10 (new), 0 (No change)
  • String: 785 (old), 785 (new), 0 (No change)
  • Style: 472 (old), 472 (new), 0 (No change)
  • Xml: 1 (old), 1 (new), 0 (No change)

Lesson assets: 111 (old), 111 (new), 0 (No change)

AAB differences

Expand to see AAB specifics

Supported configurations:

  • hdpi (same)
  • ldpi (same)
  • mdpi (same)
  • tvdpi (same)
  • xhdpi (same)
  • xxhdpi (same)
  • xxxhdpi (same)

Base APK

APK file size: 11 MiB (old), 11 MiB (new), 0 bytes (No change)
APK download size (estimated): 10 MiB (old), 10 MiB (new), 22 bytes (Added)

Configuration hdpi

APK file size: 43 KiB (old), 43 KiB (new), 0 bytes (No change)
APK download size (estimated): 17 KiB (old), 17 KiB (new), 0 bytes (No change)

Configuration ldpi

APK file size: 44 KiB (old), 44 KiB (new), 0 bytes (No change)
APK download size (estimated): 13 KiB (old), 13 KiB (new), 0 bytes (No change)

Configuration mdpi

APK file size: 38 KiB (old), 38 KiB (new), 0 bytes (No change)
APK download size (estimated): 13 KiB (old), 13 KiB (new), 0 bytes (No change)

Configuration tvdpi

APK file size: 73 KiB (old), 73 KiB (new), 0 bytes (No change)
APK download size (estimated): 27 KiB (old), 27 KiB (new), 0 bytes (No change)

Configuration xhdpi

APK file size: 50 KiB (old), 50 KiB (new), 0 bytes (No change)
APK download size (estimated): 20 KiB (old), 20 KiB (new), 0 bytes (No change)

Configuration xxhdpi

APK file size: 55 KiB (old), 55 KiB (new), 0 bytes (No change)
APK download size (estimated): 28 KiB (old), 28 KiB (new), 0 bytes (No change)

Configuration xxxhdpi

APK file size: 55 KiB (old), 55 KiB (new), 0 bytes (No change)
APK download size (estimated): 27 KiB (old), 27 KiB (new), 0 bytes (No change)

Beta

Expand to see flavor specifics

Universal APK

APK file size: 11 MiB (old), 11 MiB (new), 1212 bytes (Added)

APK download size (estimated): 10 MiB (old), 10 MiB (new), 1986 bytes (Added)

Method count: 116287 (old), 116310 (new), 23 (Added)

Features: 2 (old), 2 (new), 0 (No change)

Permissions: 6 (old), 6 (new), 0 (No change)

Resources: 5786 (old), 5786 (new), 0 (No change)

  • Anim: 33 (old), 33 (new), 0 (No change)
  • Animator: 24 (old), 24 (new), 0 (No change)
  • Array: 14 (old), 14 (new), 0 (No change)
  • Attr: 888 (old), 888 (new), 0 (No change)
  • Bool: 8 (old), 8 (new), 0 (No change)
  • Color: 820 (old), 820 (new), 0 (No change)
  • Dimen: 780 (old), 780 (new), 0 (No change)
  • Drawable: 342 (old), 342 (new), 0 (No change)
  • Id: 1221 (old), 1221 (new), 0 (No change)
  • Integer: 32 (old), 32 (new), 0 (No change)
  • Interpolator: 11 (old), 11 (new), 0 (No change)
  • Layout: 343 (old), 343 (new), 0 (No change)
  • Menu: 1 (old), 1 (new), 0 (No change)
  • Mipmap: 1 (old), 1 (new), 0 (No change)
  • Plurals: 10 (old), 10 (new), 0 (No change)
  • String: 785 (old), 785 (new), 0 (No change)
  • Style: 472 (old), 472 (new), 0 (No change)
  • Xml: 1 (old), 1 (new), 0 (No change)

Lesson assets: 111 (old), 111 (new), 0 (No change)

AAB differences

Expand to see AAB specifics

Supported configurations:

  • hdpi (same)
  • ldpi (same)
  • mdpi (same)
  • tvdpi (same)
  • xhdpi (same)
  • xxhdpi (same)
  • xxxhdpi (same)

Base APK

APK file size: 11 MiB (old), 11 MiB (new), 1212 bytes (Added)
APK download size (estimated): 10 MiB (old), 10 MiB (new), 611 bytes (Added)
Method count: 116287 (old), 116310 (new), 23 (Added)

Configuration hdpi

APK file size: 43 KiB (old), 43 KiB (new), 0 bytes (No change)
APK download size (estimated): 17 KiB (old), 17 KiB (new), 0 bytes (No change)

Configuration ldpi

APK file size: 44 KiB (old), 44 KiB (new), 0 bytes (No change)
APK download size (estimated): 13 KiB (old), 13 KiB (new), 0 bytes (No change)

Configuration mdpi

APK file size: 38 KiB (old), 38 KiB (new), 0 bytes (No change)
APK download size (estimated): 13 KiB (old), 13 KiB (new), 0 bytes (No change)

Configuration tvdpi

APK file size: 73 KiB (old), 73 KiB (new), 0 bytes (No change)
APK download size (estimated): 27 KiB (old), 27 KiB (new), 0 bytes (No change)

Configuration xhdpi

APK file size: 50 KiB (old), 50 KiB (new), 0 bytes (No change)
APK download size (estimated): 20 KiB (old), 20 KiB (new), 0 bytes (No change)

Configuration xxhdpi

APK file size: 55 KiB (old), 55 KiB (new), 0 bytes (No change)
APK download size (estimated): 28 KiB (old), 28 KiB (new), 0 bytes (No change)

Configuration xxxhdpi

APK file size: 55 KiB (old), 55 KiB (new), 0 bytes (No change)
APK download size (estimated): 27 KiB (old), 27 KiB (new), 0 bytes (No change)

Ga

Expand to see flavor specifics

Universal APK

APK file size: 11 MiB (old), 11 MiB (new), 1208 bytes (Added)

APK download size (estimated): 10 MiB (old), 10 MiB (new), 3964 bytes (Added)

Method count: 116287 (old), 116310 (new), 23 (Added)

Features: 2 (old), 2 (new), 0 (No change)

Permissions: 6 (old), 6 (new), 0 (No change)

Resources: 5786 (old), 5786 (new), 0 (No change)

  • Anim: 33 (old), 33 (new), 0 (No change)
  • Animator: 24 (old), 24 (new), 0 (No change)
  • Array: 14 (old), 14 (new), 0 (No change)
  • Attr: 888 (old), 888 (new), 0 (No change)
  • Bool: 8 (old), 8 (new), 0 (No change)
  • Color: 820 (old), 820 (new), 0 (No change)
  • Dimen: 780 (old), 780 (new), 0 (No change)
  • Drawable: 342 (old), 342 (new), 0 (No change)
  • Id: 1221 (old), 1221 (new), 0 (No change)
  • Integer: 32 (old), 32 (new), 0 (No change)
  • Interpolator: 11 (old), 11 (new), 0 (No change)
  • Layout: 343 (old), 343 (new), 0 (No change)
  • Menu: 1 (old), 1 (new), 0 (No change)
  • Mipmap: 1 (old), 1 (new), 0 (No change)
  • Plurals: 10 (old), 10 (new), 0 (No change)
  • String: 785 (old), 785 (new), 0 (No change)
  • Style: 472 (old), 472 (new), 0 (No change)
  • Xml: 1 (old), 1 (new), 0 (No change)

Lesson assets: 111 (old), 111 (new), 0 (No change)

AAB differences

Expand to see AAB specifics

Supported configurations:

  • hdpi (same)
  • ldpi (same)
  • mdpi (same)
  • tvdpi (same)
  • xhdpi (same)
  • xxhdpi (same)
  • xxxhdpi (same)

Base APK

APK file size: 11 MiB (old), 11 MiB (new), 1208 bytes (Added)
APK download size (estimated): 10 MiB (old), 10 MiB (new), 1759 bytes (Added)
Method count: 116287 (old), 116310 (new), 23 (Added)

Configuration hdpi

APK file size: 43 KiB (old), 43 KiB (new), 0 bytes (No change)
APK download size (estimated): 17 KiB (old), 17 KiB (new), 0 bytes (No change)

Configuration ldpi

APK file size: 44 KiB (old), 44 KiB (new), 0 bytes (No change)
APK download size (estimated): 13 KiB (old), 13 KiB (new), 0 bytes (No change)

Configuration mdpi

APK file size: 38 KiB (old), 38 KiB (new), 0 bytes (No change)
APK download size (estimated): 13 KiB (old), 13 KiB (new), 0 bytes (No change)

Configuration tvdpi

APK file size: 73 KiB (old), 73 KiB (new), 0 bytes (No change)
APK download size (estimated): 27 KiB (old), 27 KiB (new), 0 bytes (No change)

Configuration xhdpi

APK file size: 50 KiB (old), 50 KiB (new), 0 bytes (No change)
APK download size (estimated): 20 KiB (old), 20 KiB (new), 0 bytes (No change)

Configuration xxhdpi

APK file size: 55 KiB (old), 55 KiB (new), 0 bytes (No change)
APK download size (estimated): 28 KiB (old), 28 KiB (new), 0 bytes (No change)

Configuration xxxhdpi

APK file size: 55 KiB (old), 55 KiB (new), 0 bytes (No change)
APK download size (estimated): 27 KiB (old), 27 KiB (new), 0 bytes (No change)

/**
* Extracts all feature flag annotations of the specified type from a collection of annotations.
*
* @param annotations a collection of annotations to be checked for feature flag annotations.
Copy link
Collaborator Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Todo: To remove ending periods from all KDocs.

Suggested change
* @param annotations a collection of annotations to be checked for feature flag annotations.
* @param annotations a collection of annotations to be checked for feature flag annotations

@adhiamboperes
Copy link
Collaborator

Thanks @Rd4dev! Reviewing this today.

@Rd4dev
Copy link
Collaborator Author

Rd4dev commented Jan 21, 2025

Thanks @Rd4dev! Reviewing this today.

Thanks @adhiamboperes, appreciate the update!

Copy link
Member

@BenHenning BenHenning left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Thanks @Rd4dev! This is really exciting to see progress on.

I only looked at the top-level override classes for now, and still need to dig deeper into the PR. However, I do have one thought that I wanted to run by you.

I've had an idea for some time to leverage code generation for the feature flags to minimize the amount of Dagger binding boilerplate that needs to be done each time a new flag is added. Originally, I thought that this would require a custom annotation processor. However, now that Gradle is gone, we actually could do this with protobuf. Consider:

  • A new textproto file that lists every feature flag and platform parameter with server string names and default values. I suspect this would be a twofold definition: explicit parameters in a proto file, and server names and default values in textproto (so that we have strong typing for the separate flags).
  • Automatic compilation to binary proto (like we do with the language configuration under config/).
  • Some file loading logic similar to that which is needed for the languages configuration.
  • Updating Dagger bindings that just generate the entire set of bound flags/parameters by loading the textproto file.*

* Note that this is a little trickier than it sounds because we can't technically do file I/O within Dagger providers without incurring some performance issues. However, something that we could do is automatically bind implementation classes based on the proto structure (which is available at compile time since the individual flags would be defined within a proto file), and then have the implementations support asynchronously loading their state (either from the local file cache or from their local file configuration). It's possible we don't even need this second bit since I think the platform parameter system is technically supposed to be designed to fully load its asynchronous state during the app startup so that all flag values are fixed for the lifetime of the app process.

While a long explanation, I suspect that the delta might be relatively small and also be a pretty substantial improvement to how flags and parameters are interacted with in both tests and production code. There's probably more that could be done with real code generation, but that starts getting a bit scary in scope here.

Is this something you'd want to take on as part of this PR? If not, no worries. I just wanted to ask since you've already spent a lot of time thinking about the mechanisms. :)

*/
@Target(AnnotationTarget.CLASS, AnnotationTarget.FUNCTION)
@Repeatable
annotation class EnableFeatureFlag(val name: FeatureFlag)
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

For both this and the disable variant, it would be good to explain here how cascading cases or repeated cases are handled. For instance, consider the following setup:

@EnableFeatureFlag(FEATURE_1)
@DisableFeatureFlag(FEATURE_1)
class MyConfusingTest {

  @Test
  fun test_case1() {}

  @Test
  @EnableFeatureFlag(FEATURE_1)
  fun test_case2() {}

  @Test
  @DisableFeatureFlag(FEATURE_1)
  fun test_case3() {}

  @Test
  @EnableFeatureFlag(FEATURE_1)
  @DisableFeatureFlag(FEATURE_1)
  fun test_case4() {}

  @Test
  @DisableFeatureFlag(FEATURE_1)
  @EnableFeatureFlag(FEATURE_1)
  fun test_case5() {}
}

What is the expected state of FEATURE_1 in each test case? Is it an error or does latest win?

Personally, I would expect that:

  • More than one declaration for a single feature at the class or method level results in an error (i.e. MyConfusingTest, test_case4, and test_case5 above should all fail).
  • It's allowed to have at most 2 overrides for a single feature for a given test: one at the class level, and one at the method level, where the method annotation always takes precedence. This allows us to enable/disable a feature for the whole class, then selectively enable/disable it on a per-test basis as needed.

*/
@Target(AnnotationTarget.CLASS, AnnotationTarget.FUNCTION)
@Repeatable
annotation class OverrideStringParameter(val name: PlatformParameter, val value: String)
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

For this & the other override classes: see my comment in EnableFeatureFlag as I think the same consideration is needed here on how cascading and overriding scenarios are handled.

*/
@Target(AnnotationTarget.FUNCTION)
@Repeatable
annotation class ResetFeatureFlagToDefault(val name: FeatureFlag)
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Similar to my comment in EnableFeatureFlag, cascading/duplication needs to be considered here. I'd expect any cases where an enable/disable happens and reset at the same level to be an error (i.e. a test method can only reset, not enable/disable and then reset).

For strictness, I'd also expect that reset throws an error if there's no explicit override of the feature at the class level (i.e. there's no reason to reset). While resetting a non-overridden flag is a no-op, allowing it to be checked in could result in false assumptions and a fundamental misunderstanding of what the test and surrounding test suite is actually doing.

@BenHenning BenHenning assigned Rd4dev and unassigned BenHenning Jan 21, 2025
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

Successfully merging this pull request may close these issues.

3 participants