Skip to content

Fix part of #209: Introduce a tokenizer and parser for NumberWithUnits#6137

Open
theMr17 wants to merge 84 commits into
oppia:developfrom
theMr17:feat/number-with-units-parser
Open

Fix part of #209: Introduce a tokenizer and parser for NumberWithUnits#6137
theMr17 wants to merge 84 commits into
oppia:developfrom
theMr17:feat/number-with-units-parser

Conversation

@theMr17

@theMr17 theMr17 commented Mar 10, 2026

Copy link
Copy Markdown
Member

Explanation

Fixes part of #209

This PR introduces a NumberWithUnitsTokenizer that converts raw string input into a Sequence<Token>. It supports numeric literals, operators/symbols (-, /, ^, *, parentheses), currency symbols/prefixes/suffixes, SI prefixes, and a broad set of physical units. The tokenizer is implemented with the existing PeekableIterator. This keeps behavior aligned with LL(1) parsing constraints and avoids unnecessary processing when parsing fails early.

Further the Sequence<Token> is passed to the NumberWithUnitsParser, which is responsible for enforcing the grammar rules as mentioned here. Error handling of the parser is explicit and non-exception based via NumberWithUnitsParsingResult.Success/Failure, with parser failures mapped to domain-specific NumberWithUnitsParsingError values (e.g. missing exponent/denominator/unit, unbalanced parentheses, invalid tokens, trailing tokens)

A tokenizer Truth subject: NumberWithUnitsTokenSubject is added that provides typed assertion helpers for every relevant token shape (numeric tokens, symbols, units, invalid tokens). This reduces repetitive casting and improves readability in tokenizer tests. And a NumberWithUnitsSubject with helpers for asserting numeric representation (real vs fraction) and unit structure (count, names, name-based unit lookup, exponent assertions). Both custom subject files include TODOs to add dedicated tests for the subjects themselves (#6151). These helpers are straightforward wrappers around type checks and proto field assertions; follow-up dedicated subject tests are tracked separately to keep PR scope manageable.

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).

Summary by CodeRabbit

  • New Features

    • Added support for parsing and tokenizing numbers with attached units, including prefixes, suffixes, fractions, currency symbols, and unit exponents.
    • Introduced new test helpers for checking parsed values and token types in unit-related math expressions.
  • Bug Fixes

    • Improved validation for malformed expressions, invalid symbols, missing units, unbalanced parentheses, and trailing content.
    • Expanded allowed test-file exemptions so the new math-related tests pass validation.

@theMr17 theMr17 self-assigned this Mar 10, 2026
@theMr17 theMr17 removed the stale Corresponds to items that haven't seen a recent update and may be automatically closed. label Jun 26, 2026

@BenHenning BenHenning left a comment

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

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

Thanks @theMr17! Really sorry about the delay. I was hoping to get this wrapped up before starting traveling, but I didn't and traveling + a conference/work collaboration + GSoC catch-up has used up all of my time until now. I should be able to review subsequent changes quickly now, so hopefully we can get this wrapped up soon.

The PR looks fantastic. I just had a few comments, and there's one open discussion about precedence that needs to be addressed. I also will see if code rabbit can do a review pass since it would be nice to get an LLM to validate the grammar implementation more concretely, though I have no clue if it will do a good job.

fun testParser_compoundUnit_withExponent_returnsTrailingTokensError() {
// "Nm^2" is ambiguous (N*m^2 vs (N*m)^2), so the parser should fail.
// Decomposition produces [N, m], then "^2" remains unconsumed.
val error = parseNumberWithUnitsExpectingFailure("5 Nm^2")

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

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

This case might lead to user confusion. How does mathjs handle it?

Copy link
Copy Markdown
Member Author

Choose a reason for hiding this comment

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

The test is now updated, based on the other comment related to this.

Copy link
Copy Markdown
Member Author

Choose a reason for hiding this comment

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

However, mathjs does not support units without spaces between them.
image

// "N m" (space-separated) should produce the same result as "Nm" (compound).
val spacedResult = parseNumberWithUnitsExpectingSuccess("50 N m")
val compoundResult = parseNumberWithUnitsExpectingSuccess("50 Nm")
assertThat(compoundResult).apply {

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

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

You could also use proto lite subject's is equal to for these types of tests, I think, for confidence that the results are entirely and deeply equal.

Copy link
Copy Markdown
Member Author

Choose a reason for hiding this comment

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

Done

fun testParser_compoundUnit_negativeNumber_parsesCorrectly() {
val result = parseNumberWithUnitsExpectingSuccess("-5 Nm")
assertThat(result).apply {
hasRealValueThat().isEqualTo(-5.0)

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

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

Everywhere here & in the tokenizer tests: should we consistently be using isWithin-esque assertions for real numbers to avoid skew?

Copy link
Copy Markdown
Member Author

Choose a reason for hiding this comment

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

Updated these checks to allow a tolerance of up to 1e-5.

}

@Test
fun testParser_compoundUnit_wattSecond_spacedEquivalent_matchesCompound() {

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

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

Ditto here & for other equivalence checks.

Copy link
Copy Markdown
Member Author

Choose a reason for hiding this comment

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

Done


@Test
fun testParser_dollarPrefix_negativeFraction_parsesCorrectly() {
val result = parseNumberWithUnitsExpectingSuccess("$-1/4")

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

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

Does the other direction parse, too (negative before currency)?

Copy link
Copy Markdown
Member Author

Choose a reason for hiding this comment

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

No it doesn't parse the other way. Do we need to support that?

}

@Test
fun testParser_paiseCapitalized_parsesCorrectly() {

@BenHenning BenHenning Jul 2, 2026

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

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

Here & elsewhere: you have lots of groups of tests doing the same thing with just the value deviating (or can be made to just be the unit in most cases). Not a hard requirement, but it could be nice to leverage parameterized tests for these cases. It would pretty substantially reduce the length of the test file without compromising readability. However, I consider it optional since a test purist argument might be to never use parameterized tests, anyway, and it's extra work for minimal benefit (test maintenance and auditing, though I suspect we'll rarely do this since hopefully the parser rarely needs to be updated).

Edit: if you decide to act on this feedback, please do so in a separate commit after all the other changes are addressed so that I can review it separately since it will otherwise hide other test changes.

Copy link
Copy Markdown
Member Author

Choose a reason for hiding this comment

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

Thanks for the suggestion! I agree it's worth it for the file size reduction. I've updated the file to use OppiaParameterizedTestRunner for the repetitive test groups (abbreviations, spelled-out forms, case variants, and SI prefixes).

This compressed 118 individual tests into 4 parameterized methods, saving almost 1400 lines of code. The total test execution count remains exactly the same.

For you reference: dc26ae2

}

@Test
fun testParser_divisionWithNoNumeratorUnit_returnsUnitExpectedError() {

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

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

Test name doesn't match error tpye in outcome.

@theMr17 theMr17 Jul 11, 2026

Copy link
Copy Markdown
Member Author

Choose a reason for hiding this comment

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

Updated this and an another test which had a naming inconsistency.

* an unrecognized unit, attempts to decompose the token into multiple known units.
*/
private fun parseUnitsFromNextToken(): NumberWithUnitsParsingResult<List<NumberUnitExpression>> {
val singleResult = parseUnitWithExponent()

@BenHenning BenHenning Jul 2, 2026

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

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

How does mathjs handle this? I would imagine we should resolve to something predictable and be consistent about that since this doesn't seem like an actual error situation. However, I think I lean toward Nm^2 being N*m^2 since that seems a bit closer to cases like m/Ns^2 where the ^2 attaches just to the second but both the Newton and the second are divided and thus get negative exponents (though I see the case here that this may be the same problem, anyway, so this may be circular reasoning).

I asked Gemini and it agrees with my preference but for a better and different reason: we should follow PEMDAS rules for operator precedence here with multiplications and left-hand associativity (or right-hand in the case expontentiation).

Edit: Here's my Gemini conversation. It suggests the grammar is correct but the parser may not have implemented it correctly, hence the discrepancy. See: https://share.gemini.google/zGXS1nGTUzy1.

@BenHenning

Copy link
Copy Markdown
Member

@coderabbitai review

@coderabbitai

coderabbitai Bot commented Jul 2, 2026

Copy link
Copy Markdown
✅ Action performed

Review finished.

Note: CodeRabbit is an incremental review system and does not re-review already reviewed commits. This command is applicable only when automatic reviews are paused.

@coderabbitai

coderabbitai Bot commented Jul 2, 2026

Copy link
Copy Markdown

Review Change Stack

Important

Review skipped

Auto reviews are disabled on this repository. Please check the settings in the CodeRabbit UI or the .coderabbit.yaml file in this repository. To trigger a single review, invoke the @coderabbitai review command.

⚙️ Run configuration

Configuration used: Path: .coderabbit.yaml

Review profile: ASSERTIVE

Plan: Pro Plus

Run ID: 2876f595-3725-4166-943a-ac1ab74c944c

You can disable this status message by setting the reviews.review_status to false in the CodeRabbit configuration file.

Use the checkbox below for a quick retry:

  • 🔍 Trigger review
📝 Walkthrough

Walkthrough

This PR adds a "number with units" feature: new protobuf messages defining expressions with numeric values and units, a tokenizer converting raw strings into typed tokens, a parser converting tokens into structured proto expressions with detailed error types, Truth test subjects for assertions, and associated Bazel targets, test exemptions, and extensive tokenizer tests.

Changes

Number-with-units support

Layer / File(s) Summary
Proto schema
model/src/main/proto/interaction_object.proto
Adds NumberWithUnitsExpression, PrefixValueExpression, ValueSuffixExpression, PrefixValueSuffixExpression, and NumberUnitExpression with nested SiPrefix/Unit enums.
Tokenizer
utility/src/main/java/org/oppia/android/util/math/NumberWithUnitsTokenizer.kt, utility/src/main/java/org/oppia/android/util/math/BUILD.bazel, utility/src/test/java/org/oppia/android/util/math/BUILD.bazel, utility/src/test/java/org/oppia/android/util/math/NumberWithUnitsTokenizerTest.kt
Implements a tokenize function producing typed Token subclasses for numbers, units, operators, and invalid input, wired via new Bazel targets and validated by an extensive parameterized test suite.
Parsing errors
utility/src/main/java/org/oppia/android/util/math/NumberWithUnitsParsingError.kt, scripts/assets/test_file_exemptions.textproto
Defines a sealed NumberWithUnitsParsingError hierarchy covering token, unit, syntax, SI-prefix, and currency-prefix failure modes, exempted from mandatory test coverage.
Parser
utility/src/main/java/org/oppia/android/util/math/NumberWithUnitsParser.kt
Implements grammar-based parsing of prefix/suffix unit formats, numeric values including fractions, compound units with division/exponents, SI prefix and unit-alias resolution, and exposes parseNumberWithUnits with NumberWithUnitsParsingResult.
Test subjects and configuration
testing/src/main/java/org/oppia/android/testing/math/NumberWithUnitsSubject.kt, testing/src/main/java/org/oppia/android/testing/math/NumberWithUnitsTokenSubject.kt, testing/src/main/java/org/oppia/android/testing/math/BUILD.bazel, scripts/assets/file_content_validation_checks.textproto, scripts/assets/test_file_exemptions.textproto
Adds Truth assertion helpers for NumberWithUnitsExpression/NumberUnitExpression and tokenizer Token types, new Bazel targets, and config exemptions.

Estimated code review effort: 4 (Complex) | ~75 minutes

Sequence Diagram(s)

sequenceDiagram
participant Caller
participant NumberWithUnitsParser
participant NumberWithUnitsTokenizer
participant NumberWithUnitsParsingError

Caller->>NumberWithUnitsParser: parseNumberWithUnits(rawExpression)
NumberWithUnitsParser->>NumberWithUnitsTokenizer: tokenize(normalized input)
NumberWithUnitsTokenizer-->>NumberWithUnitsParser: Sequence of Token
NumberWithUnitsParser->>NumberWithUnitsParser: parse number and compound unit
alt parse fails
    NumberWithUnitsParser->>NumberWithUnitsParsingError: build structured error
    NumberWithUnitsParser-->>Caller: Failure(error)
else parse succeeds
    NumberWithUnitsParser-->>Caller: Success(NumberWithUnitsExpression)
end
Loading

Related issues: None referenced in the provided diff.

Related PRs: None referenced in the provided diff.

Suggested labels: feature, math, tests

Suggested reviewers: None specified.

🐰 A number hops in, a unit close behind,
Tokens split apart, then neatly realigned,
Prefixes and suffixes, currencies too,
Parsed into protos, fresh and new,
This rabbit counts units in every kind!

🚥 Pre-merge checks | ✅ 5
✅ Passed checks (5 passed)
Check name Status Explanation
Description Check ✅ Passed Check skipped - CodeRabbit’s high-level summary is enabled.
Title check ✅ Passed The title clearly and accurately summarizes the main change: adding a NumberWithUnits tokenizer and parser.
Docstring Coverage ✅ Passed No functions found in the changed files to evaluate docstring coverage. Skipping docstring coverage check.
Linked Issues check ✅ Passed Check skipped because no linked issues were found for this pull request.
Out of Scope Changes check ✅ Passed Check skipped because no linked issues were found for this pull request.
✨ Finishing Touches
🧪 Generate unit tests (beta)
  • Create PR with unit tests

Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out.

❤️ Share

Comment @coderabbitai help to get the list of available commands.

@BenHenning BenHenning assigned theMr17 and unassigned BenHenning Jul 2, 2026

@coderabbitai coderabbitai Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

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

Actionable comments posted: 8

🤖 Prompt for all review comments with AI agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

Inline comments:
In
`@testing/src/main/java/org/oppia/android/testing/math/NumberWithUnitsSubject.kt`:
- Around line 73-87: Update hasPrefixThat() in NumberWithUnitsSubject so it is
parameterized like hasSuffixWithIndexThat(index) and can assert against any
prefix unit instead of always returning units.first(). Keep the existing unit
selection logic for actual.expressionFormatCase, then use the provided index to
pick the prefix unit and validate bounds appropriately with a clear failure
message. Ensure the new API stays symmetric with the suffix helper and still
returns a NumberUnitSubject for the selected unit.

In
`@testing/src/main/java/org/oppia/android/testing/math/NumberWithUnitsTokenSubject.kt`:
- Around line 17-20: The primary constructor on NumberWithUnitsTokenSubject is
public, which is inconsistent with Truth subject conventions. Make the
constructor private so only the subject factory/assertThat path can create
instances, matching the pattern already used by NumberWithUnitsSubject and
keeping construction centralized within NumberWithUnitsTokenSubject.

In `@utility/src/main/java/org/oppia/android/util/math/NumberWithUnitsParser.kt`:
- Around line 99-181: The bare minus handling in parseNumber() is returning the
currency-specific NumberExpectedAfterCurrencyPrefixError even when the parser is
being used from parseSuffixFormattedValue() with no currency prefix. Update
parseNumber() to accept a call-context flag (for example, whether it follows a
currency prefix) and use it to choose the correct error when a minus sign is not
followed by a number; then update parsePrefixFormattedValue() to pass the
currency-prefix context while parseSuffixFormattedValue() continues to use the
non-currency path.
- Around line 268-321: `parseUnitsFromNextToken()` is incorrectly falling back
to compound-unit decomposition after `parseUnitWithExponent()` has already
consumed input and failed, which can hide `MissingExponentError`. In
`NumberWithUnitsParser`, snapshot `tokens.getRetrievalCount()` before calling
`parseUnitWithExponent()`, and only call `tryDecomposeCompoundUnit()` when the
parse failed without advancing tokens; otherwise return the original failure so
`kg^`-style inputs are not reinterpreted as a fresh unit.

In
`@utility/src/main/java/org/oppia/android/util/math/NumberWithUnitsTokenizer.kt`:
- Around line 70-78: The KDoc for NumberWithUnitsTokenizer.tokenizeNumber
currently claims whitespace is allowed between digits, but the implementation
only supports whitespace around the decimal point and not inside an integer
digit run. Update the documentation on tokenizeNumber and any related Kdoc near
parseInteger to accurately describe the supported number formats, and remove
wording that implies inputs like "1 2 cm" are accepted.
- Around line 5-13: Update the KDoc on NumberWithUnitsTokenizer and tokenizeUnit
to describe the current behavior: this class only lexes raw unit text by
consuming contiguous VALID_UNIT_CHARACTERS and does not interpret
singular/plural forms, abbreviations, or naming conventions. Remove the outdated
semantic wording from the class-level docs and any related function docs, and
make sure the comments clearly point to NumberWithUnitsParser as the place where
unit normalization and interpretation now happen.
- Around line 264-280: Remove the unused private helper expectNextCharsForUnit
from NumberWithUnitsTokenizer, since it is not referenced anywhere and was
superseded by the Token.Unit raw-capture flow. Delete the helper and any
now-unneeded related logic or comments, and keep the tokenizer behavior centered
on the existing peek/consume parsing helpers and Token.Unit handling.

In
`@utility/src/test/java/org/oppia/android/util/math/NumberWithUnitsTokenizerTest.kt`:
- Around line 1912-1921: Strengthen the
`testTokenize_unknownSymbols_parsesCorrectly` coverage in
`NumberWithUnitsTokenizerTest` because the `"10 °C"` iteration can currently
pass without verifying the trailing `C` token. Update the assertions around
`NumberWithUnitsTokenizer.tokenize(input)` to check the full token count and
explicitly validate the third token for the `"10 °C"` case, while keeping the
existing `tokens[0]` and `tokens[1]` checks. Use the existing
`NumberWithUnitsTokenizer` and `Token` assertions in this test to confirm the
tokenizer handles valid unit-starting characters after an invalid symbol.
🪄 Autofix (Beta)

Fix all unresolved CodeRabbit comments on this PR:

  • Push a commit to this branch (recommended)
  • Create a new PR with the fixes

ℹ️ Review info
⚙️ Run configuration

Configuration used: Path: .coderabbit.yaml

Review profile: ASSERTIVE

Plan: Pro Plus

Run ID: 0da1c79a-27d1-4c60-ba2f-e5559066c667

📥 Commits

Reviewing files that changed from the base of the PR and between 1a4b6c5 and f5b44e8.

📒 Files selected for processing (13)
  • model/src/main/proto/interaction_object.proto
  • scripts/assets/file_content_validation_checks.textproto
  • scripts/assets/test_file_exemptions.textproto
  • testing/src/main/java/org/oppia/android/testing/math/BUILD.bazel
  • testing/src/main/java/org/oppia/android/testing/math/NumberWithUnitsSubject.kt
  • testing/src/main/java/org/oppia/android/testing/math/NumberWithUnitsTokenSubject.kt
  • utility/src/main/java/org/oppia/android/util/math/BUILD.bazel
  • utility/src/main/java/org/oppia/android/util/math/NumberWithUnitsParser.kt
  • utility/src/main/java/org/oppia/android/util/math/NumberWithUnitsParsingError.kt
  • utility/src/main/java/org/oppia/android/util/math/NumberWithUnitsTokenizer.kt
  • utility/src/test/java/org/oppia/android/util/math/BUILD.bazel
  • utility/src/test/java/org/oppia/android/util/math/NumberWithUnitsParserTest.kt
  • utility/src/test/java/org/oppia/android/util/math/NumberWithUnitsTokenizerTest.kt

Comment on lines +264 to +280
/**
* Verifies that the next characters in the iterator exactly match the expected string.
*
* This method is used to validate unit names by checking that the remaining characters
* in the iterator match the expected unit suffix. It consumes the characters if they match.
*
* @param chars the expected string to match
* @return true if all characters match exactly, false otherwise
*/
private fun PeekableIterator<Char>.expectNextCharsForUnit(
chars: String
): Boolean {
for (c in chars) {
expectNextValue { c } ?: return false
}
return true
}

@coderabbitai coderabbitai Bot Jul 2, 2026

Copy link
Copy Markdown

Choose a reason for hiding this comment

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

📐 Maintainability & Code Quality | 🔵 Trivial | ⚡ Quick win

Unused private helper expectNextCharsForUnit.

This function is not referenced anywhere in the file. It appears to be a leftover from the earlier per-unit character-matching design, superseded by the generic Token.Unit raw-capture approach adopted after review discussion. Recommend removing it.

🧹 Suggested removal
-    /**
-     * Verifies that the next characters in the iterator exactly match the expected string.
-     *
-     * This method is used to validate unit names by checking that the remaining characters
-     * in the iterator match the expected unit suffix. It consumes the characters if they match.
-     *
-     * `@param` chars the expected string to match
-     * `@return` true if all characters match exactly, false otherwise
-     */
-    private fun PeekableIterator<Char>.expectNextCharsForUnit(
-      chars: String
-    ): Boolean {
-      for (c in chars) {
-        expectNextValue { c } ?: return false
-      }
-      return true
-    }
-
📝 Committable suggestion

‼️ IMPORTANT
Carefully review the code before committing. Ensure that it accurately replaces the highlighted code, contains no missing lines, and has no issues with indentation. Thoroughly test & benchmark the code to ensure it meets the requirements.

Suggested change
/**
* Verifies that the next characters in the iterator exactly match the expected string.
*
* This method is used to validate unit names by checking that the remaining characters
* in the iterator match the expected unit suffix. It consumes the characters if they match.
*
* @param chars the expected string to match
* @return true if all characters match exactly, false otherwise
*/
private fun PeekableIterator<Char>.expectNextCharsForUnit(
chars: String
): Boolean {
for (c in chars) {
expectNextValue { c } ?: return false
}
return true
}
🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

In
`@utility/src/main/java/org/oppia/android/util/math/NumberWithUnitsTokenizer.kt`
around lines 264 - 280, Remove the unused private helper expectNextCharsForUnit
from NumberWithUnitsTokenizer, since it is not referenced anywhere and was
superseded by the Token.Unit raw-capture flow. Delete the helper and any
now-unneeded related logic or comments, and keep the tokenizer behavior centered
on the existing peek/consume parsing helpers and Token.Unit handling.

Copy link
Copy Markdown
Member Author

Choose a reason for hiding this comment

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

The unused function is now removed.

Copy link
Copy Markdown

Choose a reason for hiding this comment

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

@theMr17, thanks for addressing this—removing the obsolete helper keeps the tokenizer focused on the current raw unit-token flow.


If you found this review helpful, would you consider giving us a shout-out on X?

Thank you for using CodeRabbit!

Comment on lines +1912 to +1921
@Test
@Iteration("10 °C", "input=10 °C")
@Iteration("10 °", "input=10 °")
@Iteration("10 Ω", "input=10 Ω")
fun testTokenize_unknownSymbols_parsesCorrectly() {
val tokens = NumberWithUnitsTokenizer.tokenize(input).toList()

assertThat(tokens[0]).isPositiveIntegerWithValueThat().isEqualTo(10)
assertThat(tokens[1]).isInvalidToken()
}

@coderabbitai coderabbitai Bot Jul 2, 2026

Copy link
Copy Markdown

Choose a reason for hiding this comment

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

🎯 Functional Correctness | 🔵 Trivial | ⚡ Quick win

Missing full-token assertions for the "10 °C" case.

For "10 °C", after the invalid ° character, C is a valid unit-starting letter, so the tokenizer will actually emit a third token (Token.Unit("C")). Unlike every other test in this file, this test never asserts tokens.hasSize(...) or inspects tokens[2], so a regression in how trailing valid characters are handled after an invalid symbol would go undetected.

✅ Suggested strengthened assertions
   fun testTokenize_unknownSymbols_parsesCorrectly() {
     val tokens = NumberWithUnitsTokenizer.tokenize(input).toList()

     assertThat(tokens[0]).isPositiveIntegerWithValueThat().isEqualTo(10)
     assertThat(tokens[1]).isInvalidToken()
+    // Note: "10 °C" produces a trailing Unit("C") token since 'C' is a valid unit-starting
+    // letter; other iterations (e.g. "10 °") end after the invalid token.
   }
🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

In
`@utility/src/test/java/org/oppia/android/util/math/NumberWithUnitsTokenizerTest.kt`
around lines 1912 - 1921, Strengthen the
`testTokenize_unknownSymbols_parsesCorrectly` coverage in
`NumberWithUnitsTokenizerTest` because the `"10 °C"` iteration can currently
pass without verifying the trailing `C` token. Update the assertions around
`NumberWithUnitsTokenizer.tokenize(input)` to check the full token count and
explicitly validate the third token for the `"10 °C"` case, while keeping the
existing `tokens[0]` and `tokens[1]` checks. Use the existing
`NumberWithUnitsTokenizer` and `Token` assertions in this test to confirm the
tokenizer handles valid unit-starting characters after an invalid symbol.

Copy link
Copy Markdown
Member Author

Choose a reason for hiding this comment

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

This seems to be unnecessary.

Copy link
Copy Markdown

Choose a reason for hiding this comment

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

@theMr17, agreed—this is unnecessary for the behavior under test. I’m withdrawing the suggestion.

@oppiabot

oppiabot Bot commented Jul 9, 2026

Copy link
Copy Markdown

Hi @theMr17, 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! If you're unsure how to reassign this PR to a reviewer, please make sure to review the wiki page that details the Guidance on submitting PRs.

@oppiabot oppiabot Bot added stale Corresponds to items that haven't seen a recent update and may be automatically closed. and removed stale Corresponds to items that haven't seen a recent update and may be automatically closed. labels Jul 9, 2026
@github-actions

Copy link
Copy Markdown
Contributor

Coverage Report

Results

Number of files assessed: 305
Overall Coverage: 90.90%
Coverage Analysis: PASS

Passing coverage

Files with passing code coverage
File Coverage Lines Hit Status Min Required
EventBundleCreator.ktutility/src/main/java/org/oppia/android/util/logging/EventBundleCreator.kt
76.29% 341 / 447 70%
NumberWithUnitsTokenizer.ktutility/src/main/java/org/oppia/android/util/math/NumberWithUnitsTokenizer.kt
95.37% 103 / 108 70%
NumberWithUnitsParser.ktutility/src/main/java/org/oppia/android/util/math/NumberWithUnitsParser.kt
99.12% 336 / 339 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%
PerformanceMetricsLogger.ktdomain/src/main/java/org/oppia/android/domain/oppialogger/analytics/PerformanceMetricsLogger.kt
100.00% 99 / 99 70%
FeatureFlagsLogger.ktdomain/src/main/java/org/oppia/android/domain/oppialogger/analytics/FeatureFlagsLogger.kt
100.00% 22 / 22 70%
StateDeck.ktdomain/src/main/java/org/oppia/android/domain/state/StateDeck.kt
97.84% 136 / 139 70%
StateGraph.ktdomain/src/main/java/org/oppia/android/domain/state/StateGraph.kt
96.47% 82 / 85 70%
TranslationController.ktdomain/src/main/java/org/oppia/android/domain/translation/TranslationController.kt
94.15% 161 / 171 70%
SurveyGatingController.ktdomain/src/main/java/org/oppia/android/domain/survey/SurveyGatingController.kt
96.97% 32 / 33 70%
VersionInversionChecker.ktscripts/src/java/org/oppia/android/scripts/release/VersionInversionChecker.kt
100.00% 39 / 39 70%
UploadBinaryToPlayConsole.ktscripts/src/java/org/oppia/android/scripts/release/UploadBinaryToPlayConsole.kt
99.00% 99 / 100 70%
UploadChangelogToPlayConsole.ktscripts/src/java/org/oppia/android/scripts/release/UploadChangelogToPlayConsole.kt
80.90% 72 / 89 70%
ChangelogExistenceChecker.ktscripts/src/java/org/oppia/android/scripts/release/ChangelogExistenceChecker.kt
100.00% 17 / 17 70%
GooglePlayConsoleClient.ktscripts/src/java/org/oppia/android/scripts/release/GooglePlayConsoleClient.kt
96.55% 84 / 87 70%
PlayConsoleService.ktscripts/src/java/org/oppia/android/scripts/release/remote/PlayConsoleService.kt
100.00% 2 / 2 70%
UpdateRolloutFraction.ktscripts/src/java/org/oppia/android/scripts/release/UpdateRolloutFraction.kt
86.36% 57 / 66 70%
PendingReleaseChecker.ktscripts/src/java/org/oppia/android/scripts/release/PendingReleaseChecker.kt
100.00% 13 / 13 70%
FakePlayConsoleClient.ktscripts/src/java/org/oppia/android/scripts/release/FakePlayConsoleClient.kt
100.00% 50 / 50 70%
SignReleaseBinary.ktscripts/src/java/org/oppia/android/scripts/release/SignReleaseBinary.kt
93.33% 42 / 45 70%
AppFlavor.ktscripts/src/java/org/oppia/android/scripts/release/AppFlavor.kt
100.00% 5 / 5 70%
TrackResponse.ktscripts/src/java/org/oppia/android/scripts/release/model/TrackResponse.kt
100.00% 9 / 9 70%
InsertEditRequest.ktscripts/src/java/org/oppia/android/scripts/release/model/InsertEditRequest.kt
100.00% 9 / 9 70%
TrackUpdateRequest.ktscripts/src/java/org/oppia/android/scripts/release/model/TrackUpdateRequest.kt
100.00% 15 / 15 70%
BundleResponse.ktscripts/src/java/org/oppia/android/scripts/release/model/BundleResponse.kt
100.00% 2 / 2 70%
EditResponse.ktscripts/src/java/org/oppia/android/scripts/release/model/EditResponse.kt
100.00% 2 / 2 70%
CloudKmsSigner.ktscripts/src/java/org/oppia/android/scripts/release/CloudKmsSigner.kt
98.33% 59 / 60 70%
FakeCloudSigner.ktscripts/src/java/org/oppia/android/scripts/release/FakeCloudSigner.kt
100.00% 19 / 19 70%
BazelClient.ktscripts/src/java/org/oppia/android/scripts/common/BazelClient.kt
98.25% 112 / 114 70%
FakeCommandExecutor.ktscripts/src/java/org/oppia/android/scripts/common/testing/FakeCommandExecutor.kt
100.00% 38 / 38 70%
GitClient.ktscripts/src/java/org/oppia/android/scripts/common/GitClient.kt
95.35% 41 / 43 70%
CommandExecutorImpl.ktscripts/src/java/org/oppia/android/scripts/common/CommandExecutorImpl.kt
97.50% 39 / 40 70%
ComputeChangedFiles.ktscripts/src/java/org/oppia/android/scripts/ci/ComputeChangedFiles.kt
96.53% 167 / 173 70%
ComputeAffectedTests.ktscripts/src/java/org/oppia/android/scripts/ci/ComputeAffectedTests.kt
95.88% 163 / 170 70%
RetrieveLicenseTexts.ktscripts/src/java/org/oppia/android/scripts/maven/RetrieveLicenseTexts.kt
98.40% 184 / 187 70%
TestGitRepository.ktscripts/src/java/org/oppia/android/scripts/testing/TestGitRepository.kt
95.24% 80 / 84 70%
TransformAndroidManifest.ktscripts/src/java/org/oppia/android/scripts/build/TransformAndroidManifest.kt
99.18% 121 / 122 70%
RegexPatternValidationCheck.ktscripts/src/java/org/oppia/android/scripts/regex/RegexPatternValidationCheck.kt
100.00% 104 / 104 70%
FakeOppiaClock.kttesting/src/main/java/org/oppia/android/testing/time/FakeOppiaClock.kt
97.14% 34 / 35 70%
ActivityRouter.ktapp/src/main/java/org/oppia/android/app/activity/route/ActivityRouter.kt
100.00% 12 / 12 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
71.05% 27 / 38 70%
ActivityLanguageLocaleHandler.ktapp/src/main/java/org/oppia/android/app/translation/ActivityLanguageLocaleHandler.kt
100.00% 11 / 11 70%
UrlImageParser.ktutility/src/main/java/org/oppia/android/util/parser/image/UrlImageParser.kt
57.28% 122 / 213 57% *
AnalyticsController.ktdomain/src/main/java/org/oppia/android/domain/oppialogger/analytics/AnalyticsController.kt
72.51% 124 / 171 68% *
InitializeDefaultLocaleRule.kttesting/src/main/java/org/oppia/android/testing/junit/InitializeDefaultLocaleRule.kt
100.00% 85 / 85 100% *
ActivityIntentFactories.ktapp/src/main/java/org/oppia/android/app/activity/ActivityIntentFactories.kt
0.00% 0 / 0 0% *

* represents tests with custom overridden pass/fail coverage thresholds

Exempted coverage

Files exempted from coverage
File Exemption Reason
FeatureFlagConstants.ktutility/src/main/java/org/oppia/android/util/platformparameter/FeatureFlagConstants.kt
This file is exempted from having a test file; skipping coverage check.
NumberWithUnitsParsingError.ktutility/src/main/java/org/oppia/android/util/math/NumberWithUnitsParsingError.kt
This file is exempted from having a test file; skipping coverage check.
GlideImageLoader.ktutility/src/main/java/org/oppia/android/util/parser/image/GlideImageLoader.kt
This file is exempted from having a test file; skipping coverage check.
HtmlParser.ktutility/src/main/java/org/oppia/android/util/parser/html/HtmlParser.kt
This file is incompatible with code coverage tooling; skipping coverage check.
ListItemLeadingMarginSpan.ktutility/src/main/java/org/oppia/android/util/parser/html/ListItemLeadingMarginSpan.kt
This file is incompatible with code coverage tooling; skipping coverage check.
ExplorationProgress.ktdomain/src/main/java/org/oppia/android/domain/exploration/ExplorationProgress.kt
This file is exempted from having a test file; 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.
ExplorationRetrieverImpl.ktdomain/src/main/java/org/oppia/android/domain/exploration/ExplorationRetrieverImpl.kt
This file is exempted from having a test file; 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.
ExplorationProgressController.ktdomain/src/main/java/org/oppia/android/domain/exploration/ExplorationProgressController.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.
LearnerAnalyticsLogger.ktdomain/src/main/java/org/oppia/android/domain/oppialogger/analytics/LearnerAnalyticsLogger.kt
This file is incompatible with code coverage tooling; skipping coverage check.
ApplicationLifecycleObserver.ktdomain/src/main/java/org/oppia/android/domain/oppialogger/analytics/ApplicationLifecycleObserver.kt
This file is incompatible with code coverage tooling; skipping coverage check.
FeatureFlagsMapBindingModule.ktdomain/src/main/java/org/oppia/android/domain/platformparameter/FeatureFlagsMapBindingModule.kt
This file is exempted from having a test file; 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.
FeatureFlagBindingModule.ktdomain/src/main/java/org/oppia/android/domain/platformparameter/FeatureFlagBindingModule.kt
This file is exempted from having a test file; 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.
ClassroomController.ktdomain/src/main/java/org/oppia/android/domain/classroom/ClassroomController.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.
CellularAudioDialogController.ktdomain/src/main/java/org/oppia/android/domain/audio/CellularAudioDialogController.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.
ForceDownloadRemoteParametersController.ktdomain/src/main/java/org/oppia/android/domain/devoptions/ForceDownloadRemoteParametersController.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.
SpotlightStateController.ktdomain/src/main/java/org/oppia/android/domain/spotlight/SpotlightStateController.kt
This file is incompatible with code coverage tooling; skipping coverage check.
TopicListController.ktdomain/src/main/java/org/oppia/android/domain/topic/TopicListController.kt
This file is incompatible with code coverage tooling; skipping coverage check.
StudyGuideRetriever.ktdomain/src/main/java/org/oppia/android/domain/topic/StudyGuideRetriever.kt
This file is exempted from having a test file; skipping coverage check.
TopicController.ktdomain/src/main/java/org/oppia/android/domain/topic/TopicController.kt
This file is incompatible with code coverage tooling; skipping coverage check.
ConceptCardRetriever.ktdomain/src/main/java/org/oppia/android/domain/topic/ConceptCardRetriever.kt
This file is exempted from having a test file; skipping coverage check.
RevisionCardRetriever.ktdomain/src/main/java/org/oppia/android/domain/topic/RevisionCardRetriever.kt
This file is exempted from having a test file; 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.
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.
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.
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.
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.
QuestionAssessmentProgressController.ktdomain/src/main/java/org/oppia/android/domain/question/QuestionAssessmentProgressController.kt
This file is incompatible with code coverage tooling; skipping coverage check.
QuestionRetriever.ktdomain/src/main/java/org/oppia/android/domain/question/QuestionRetriever.kt
This file is exempted from having a test file; 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.
ReportSchemaVersion.ktdomain/src/main/java/org/oppia/android/domain/feedbackreporting/ReportSchemaVersion.kt
This file is incompatible with code coverage tooling; skipping coverage check.
CloudSigner.ktscripts/src/java/org/oppia/android/scripts/release/CloudSigner.kt
This file is exempted from having a test file; skipping coverage check.
PlayConsoleClient.ktscripts/src/java/org/oppia/android/scripts/release/PlayConsoleClient.kt
This file is exempted from having a test file; skipping coverage check.
CommandExecutor.ktscripts/src/java/org/oppia/android/scripts/common/CommandExecutor.kt
This file is exempted from having a test file; skipping coverage check.
TestApplicationComponent.ktinstrumentation/src/java/org/oppia/android/instrumentation/application/TestApplicationComponent.kt
This file is exempted from having a test file; skipping coverage check.
TestPlatformParameterModule.kttesting/src/main/java/org/oppia/android/testing/platformparameter/TestPlatformParameterModule.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.
StudyGuideTestHelper.kttesting/src/main/java/org/oppia/android/testing/topic/StudyGuideTestHelper.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.
NumberWithUnitsSubject.kttesting/src/main/java/org/oppia/android/testing/math/NumberWithUnitsSubject.kt
This file is exempted from having a test file; skipping coverage check.
NumberWithUnitsTokenSubject.kttesting/src/main/java/org/oppia/android/testing/math/NumberWithUnitsTokenSubject.kt
This file is exempted from having a test file; 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.
AudioLanguageFragmentPresenter.ktapp/src/main/java/org/oppia/android/app/onboarding/AudioLanguageFragmentPresenter.kt
This file is exempted from having a test file; 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.
CreateProfileFragment.ktapp/src/main/java/org/oppia/android/app/onboarding/CreateProfileFragment.kt
This file is incompatible with code coverage tooling; skipping coverage check.
OnboardingActivity.ktapp/src/main/java/org/oppia/android/app/onboarding/OnboardingActivity.kt
This file is incompatible with code coverage tooling; skipping coverage check.
AdminIntroFragment.ktapp/src/main/java/org/oppia/android/app/onboarding/AdminIntroFragment.kt
This file is incompatible with code coverage tooling; skipping coverage check.
IntroActivity.ktapp/src/main/java/org/oppia/android/app/onboarding/IntroActivity.kt
This file is incompatible with code coverage tooling; skipping coverage check.
CreateProfileFragmentPresenter.ktapp/src/main/java/org/oppia/android/app/onboarding/CreateProfileFragmentPresenter.kt
This file is exempted from having a test file; skipping coverage check.
IntroFragmentPresenter.ktapp/src/main/java/org/oppia/android/app/onboarding/IntroFragmentPresenter.kt
This file is exempted from having a test file; skipping coverage check.
AdminIntroActivity.ktapp/src/main/java/org/oppia/android/app/onboarding/AdminIntroActivity.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.
OnboardingProfileTypeActivity.ktapp/src/main/java/org/oppia/android/app/onboarding/OnboardingProfileTypeActivity.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.
OnboardingFragmentPresenter.ktapp/src/main/java/org/oppia/android/app/onboarding/OnboardingFragmentPresenter.kt
This file is exempted from having a test file; skipping coverage check.
AdminIntroFragmentPresenter.ktapp/src/main/java/org/oppia/android/app/onboarding/AdminIntroFragmentPresenter.kt
This file is exempted from having a test file; skipping coverage check.
CreateProfileActivity.ktapp/src/main/java/org/oppia/android/app/onboarding/CreateProfileActivity.kt
This file is incompatible with code coverage tooling; skipping coverage check.
WalkthroughTopicListFragment.ktapp/src/main/java/org/oppia/android/app/walkthrough/topiclist/WalkthroughTopicListFragment.kt
This file is incompatible with code coverage tooling; skipping coverage check.
WalkthroughFinalFragment.ktapp/src/main/java/org/oppia/android/app/walkthrough/end/WalkthroughFinalFragment.kt
This file is incompatible with code coverage tooling; skipping coverage check.
WalkthroughWelcomeFragmentPresenter.ktapp/src/main/java/org/oppia/android/app/walkthrough/welcome/WalkthroughWelcomeFragmentPresenter.kt
This file is exempted from having a test file; skipping coverage check.
WalkthroughWelcomeFragment.ktapp/src/main/java/org/oppia/android/app/walkthrough/welcome/WalkthroughWelcomeFragment.kt
This file is incompatible with code coverage tooling; skipping coverage check.
WalkthroughActivity.ktapp/src/main/java/org/oppia/android/app/walkthrough/WalkthroughActivity.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.
SplashActivityPresenter.ktapp/src/main/java/org/oppia/android/app/splash/SplashActivityPresenter.kt
This file is exempted from having a test file; 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.
PoliciesFragmentPresenter.ktapp/src/main/java/org/oppia/android/app/policies/PoliciesFragmentPresenter.kt
This file is exempted from having a test file; 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.
DateTimeUtil.ktapp/src/main/java/org/oppia/android/app/utility/datetime/DateTimeUtil.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.
RatioExtensions.ktapp/src/main/java/org/oppia/android/app/utility/RatioExtensions.kt
This file is incompatible with code coverage tooling; skipping coverage check.
LessonThumbnailImageView.ktapp/src/main/java/org/oppia/android/app/customview/LessonThumbnailImageView.kt
This file is incompatible with code coverage tooling; skipping coverage check.
LessonProgressIndicatorView.ktapp/src/main/java/org/oppia/android/app/customview/LessonProgressIndicatorView.kt
This file is exempted from having a test file; 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.
HomeFragmentPresenter.ktapp/src/main/java/org/oppia/android/app/home/HomeFragmentPresenter.kt
This file is exempted from having a test file; skipping coverage check.
TopicSummaryViewModel.ktapp/src/main/java/org/oppia/android/app/home/topiclist/TopicSummaryViewModel.kt
This file is incompatible with code coverage tooling; skipping coverage check.
RecentlyPlayedFragment.ktapp/src/main/java/org/oppia/android/app/home/recentlyplayed/RecentlyPlayedFragment.kt
This file is incompatible with code coverage tooling; skipping coverage check.
RecentlyPlayedActivity.ktapp/src/main/java/org/oppia/android/app/home/recentlyplayed/RecentlyPlayedActivity.kt
This file is incompatible with code coverage tooling; skipping coverage check.
WelcomeViewModel.ktapp/src/main/java/org/oppia/android/app/home/WelcomeViewModel.kt
This file is incompatible with code coverage tooling; skipping coverage check.
PromotedStoryListViewModel.ktapp/src/main/java/org/oppia/android/app/home/promotedlist/PromotedStoryListViewModel.kt
This file is incompatible with code coverage tooling; skipping coverage check.
PromotedStoryViewModel.ktapp/src/main/java/org/oppia/android/app/home/promotedlist/PromotedStoryViewModel.kt
This file is incompatible with code coverage tooling; skipping coverage check.
HomeViewModel.ktapp/src/main/java/org/oppia/android/app/home/HomeViewModel.kt
This file is exempted from having a test file; 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.
ProfileProgressViewModel.ktapp/src/main/java/org/oppia/android/app/profileprogress/ProfileProgressViewModel.kt
This file is exempted from having a test file; skipping coverage check.
ProfilePictureActivity.ktapp/src/main/java/org/oppia/android/app/profileprogress/ProfilePictureActivity.kt
This file is incompatible with code coverage tooling; skipping coverage check.
ProfilePictureActivityPresenter.ktapp/src/main/java/org/oppia/android/app/profileprogress/ProfilePictureActivityPresenter.kt
This file is exempted from having a test file; skipping coverage check.
ProfileProgressActivity.ktapp/src/main/java/org/oppia/android/app/profileprogress/ProfileProgressActivity.kt
This file is incompatible with code coverage tooling; skipping coverage check.
ProfileProgressActivityPresenter.ktapp/src/main/java/org/oppia/android/app/profileprogress/ProfileProgressActivityPresenter.kt
This file is exempted from having a test file; skipping coverage check.
ProfileProgressFragment.ktapp/src/main/java/org/oppia/android/app/profileprogress/ProfileProgressFragment.kt
This file is incompatible with code coverage tooling; skipping coverage check.
HelpFragment.ktapp/src/main/java/org/oppia/android/app/help/HelpFragment.kt
This file is incompatible with code coverage tooling; skipping coverage check.
HelpActivity.ktapp/src/main/java/org/oppia/android/app/help/HelpActivity.kt
This file is incompatible with code coverage tooling; skipping coverage check.
FAQSingleActivity.ktapp/src/main/java/org/oppia/android/app/help/faq/faqsingle/FAQSingleActivity.kt
This file is incompatible with code coverage tooling; skipping coverage check.
FAQListFragment.ktapp/src/main/java/org/oppia/android/app/help/faq/FAQListFragment.kt
This file is incompatible with code coverage tooling; skipping coverage check.
FAQListActivity.ktapp/src/main/java/org/oppia/android/app/help/faq/FAQListActivity.kt
This file is exempted from having a test file; skipping coverage check.
LicenseTextViewerActivity.ktapp/src/main/java/org/oppia/android/app/help/thirdparty/LicenseTextViewerActivity.kt
This file is incompatible with code coverage tooling; skipping coverage check.
LicenseListActivity.ktapp/src/main/java/org/oppia/android/app/help/thirdparty/LicenseListActivity.kt
This file is incompatible with code coverage tooling; skipping coverage check.
ThirdPartyDependencyListActivity.ktapp/src/main/java/org/oppia/android/app/help/thirdparty/ThirdPartyDependencyListActivity.kt
This file is incompatible with code coverage tooling; skipping coverage check.
ThirdPartyDependencyListFragment.ktapp/src/main/java/org/oppia/android/app/help/thirdparty/ThirdPartyDependencyListFragment.kt
This file is incompatible with code coverage tooling; skipping coverage check.
LicenseTextViewerFragment.ktapp/src/main/java/org/oppia/android/app/help/thirdparty/LicenseTextViewerFragment.kt
This file is incompatible with code coverage tooling; skipping coverage check.
LicenseListFragment.ktapp/src/main/java/org/oppia/android/app/help/thirdparty/LicenseListFragment.kt
This file is incompatible with code coverage tooling; skipping coverage check.
ProfileListFragment.ktapp/src/main/java/org/oppia/android/app/settings/profile/ProfileListFragment.kt
This file is incompatible with code coverage tooling; skipping coverage check.
ProfileEditViewModel.ktapp/src/main/java/org/oppia/android/app/settings/profile/ProfileEditViewModel.kt
This file is exempted from having a test file; skipping coverage check.
ProfileEditActivity.ktapp/src/main/java/org/oppia/android/app/settings/profile/ProfileEditActivity.kt
This file is incompatible with code coverage tooling; skipping coverage check.
ProfileResetPinActivity.ktapp/src/main/java/org/oppia/android/app/settings/profile/ProfileResetPinActivity.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.
ProfileRenameFragmentPresenter.ktapp/src/main/java/org/oppia/android/app/settings/profile/ProfileRenameFragmentPresenter.kt
This file is exempted from having a test file; skipping coverage check.
ProfileResetPinFragmentPresenter.ktapp/src/main/java/org/oppia/android/app/settings/profile/ProfileResetPinFragmentPresenter.kt
This file is exempted from having a test file; skipping coverage check.
ProfileListActivity.ktapp/src/main/java/org/oppia/android/app/settings/profile/ProfileListActivity.kt
This file is incompatible with code coverage tooling; skipping coverage check.
ProfileResetPinFragment.ktapp/src/main/java/org/oppia/android/app/settings/profile/ProfileResetPinFragment.kt
This file is incompatible with code coverage tooling; skipping coverage check.
ProfileRenameFragment.ktapp/src/main/java/org/oppia/android/app/settings/profile/ProfileRenameFragment.kt
This file is incompatible with code coverage tooling; skipping coverage check.
ProfileEditFragmentPresenter.ktapp/src/main/java/org/oppia/android/app/settings/profile/ProfileEditFragmentPresenter.kt
This file is exempted from having a test file; skipping coverage check.
ProfileRenameActivity.ktapp/src/main/java/org/oppia/android/app/settings/profile/ProfileRenameActivity.kt
This file is incompatible with code coverage tooling; skipping coverage check.
ForcedAppDeprecationNoticeDialogFragment.ktapp/src/main/java/org/oppia/android/app/notice/ForcedAppDeprecationNoticeDialogFragment.kt
This file is incompatible with code coverage tooling; skipping coverage check.
BetaNoticeDialogFragment.ktapp/src/main/java/org/oppia/android/app/notice/BetaNoticeDialogFragment.kt
This file is incompatible with code coverage tooling; skipping coverage check.
GeneralAvailabilityUpgradeNoticeDialogFragment.ktapp/src/main/java/org/oppia/android/app/notice/GeneralAvailabilityUpgradeNoticeDialogFragment.kt
This file is incompatible with code coverage tooling; skipping coverage check.
OptionalAppDeprecationNoticeDialogFragment.ktapp/src/main/java/org/oppia/android/app/notice/OptionalAppDeprecationNoticeDialogFragment.kt
This file is incompatible with code coverage tooling; skipping coverage check.
OsDeprecationNoticeDialogFragment.ktapp/src/main/java/org/oppia/android/app/notice/OsDeprecationNoticeDialogFragment.kt
This file is incompatible with code coverage tooling; skipping coverage check.
CompletedStoryListActivity.ktapp/src/main/java/org/oppia/android/app/completedstorylist/CompletedStoryListActivity.kt
This file is incompatible with code coverage tooling; skipping coverage check.
NavigationDrawerFragmentPresenter.ktapp/src/main/java/org/oppia/android/app/drawer/NavigationDrawerFragmentPresenter.kt
This file is exempted from having a test file; skipping coverage check.
OngoingTopicListActivity.ktapp/src/main/java/org/oppia/android/app/ongoingtopiclist/OngoingTopicListActivity.kt
This file is incompatible with code coverage tooling; skipping coverage check.
ClassroomListViewModel.ktapp/src/main/java/org/oppia/android/app/classroom/ClassroomListViewModel.kt
This file is exempted from having a test file; skipping coverage check.
ClassroomListActivity.ktapp/src/main/java/org/oppia/android/app/classroom/ClassroomListActivity.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.
ClassroomListFragmentPresenter.ktapp/src/main/java/org/oppia/android/app/classroom/ClassroomListFragmentPresenter.kt
This file is exempted from having a test file; skipping coverage check.
AudioLanguageActivity.ktapp/src/main/java/org/oppia/android/app/options/AudioLanguageActivity.kt
This file is incompatible with code coverage tooling; skipping coverage check.
AppLanguageActivity.ktapp/src/main/java/org/oppia/android/app/options/AppLanguageActivity.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.
AudioLanguageFragment.ktapp/src/main/java/org/oppia/android/app/options/AudioLanguageFragment.kt
This file is incompatible with code coverage tooling; skipping coverage check.
AudioLanguageSelectionViewModel.ktapp/src/main/java/org/oppia/android/app/options/AudioLanguageSelectionViewModel.kt
This file is exempted from having a test file; skipping coverage check.
AppLanguageFragmentPresenter.ktapp/src/main/java/org/oppia/android/app/options/AppLanguageFragmentPresenter.kt
This file is exempted from having a test file; skipping coverage check.
OptionsFragmentPresenter.ktapp/src/main/java/org/oppia/android/app/options/OptionsFragmentPresenter.kt
This file is exempted from having a test file; skipping coverage check.
OptionControlsViewModel.ktapp/src/main/java/org/oppia/android/app/options/OptionControlsViewModel.kt
This file is exempted from having a test file; skipping coverage check.
AppLanguageFragment.ktapp/src/main/java/org/oppia/android/app/options/AppLanguageFragment.kt
This file is incompatible with code coverage tooling; skipping coverage check.
ReadingTextSizeActivity.ktapp/src/main/java/org/oppia/android/app/options/ReadingTextSizeActivity.kt
This file is incompatible with code coverage tooling; skipping coverage check.
OptionsActivity.ktapp/src/main/java/org/oppia/android/app/options/OptionsActivity.kt
This file is incompatible with code coverage tooling; skipping coverage check.
AppLanguageFragmentPresenterV1.ktapp/src/main/java/org/oppia/android/app/options/AppLanguageFragmentPresenterV1.kt
This file is exempted from having a test file; skipping coverage check.
ReadingTextSizeFragment.ktapp/src/main/java/org/oppia/android/app/options/ReadingTextSizeFragment.kt
This file is incompatible with code coverage tooling; skipping coverage check.
ProfileLoginFragment.ktapp/src/main/java/org/oppia/android/app/profile/ProfileLoginFragment.kt
This file is incompatible with code coverage tooling; skipping coverage check.
ProfileChooserActivity.ktapp/src/main/java/org/oppia/android/app/profile/ProfileChooserActivity.kt
This file is exempted from having a test file; skipping coverage check.
AdminAuthActivityPresenter.ktapp/src/main/java/org/oppia/android/app/profile/AdminAuthActivityPresenter.kt
This file is exempted from having a test file; skipping coverage check.
ProfileChooserFragmentPresenter.ktapp/src/main/java/org/oppia/android/app/profile/ProfileChooserFragmentPresenter.kt
This file is exempted from having a test file; 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.
PinPasswordActivityPresenter.ktapp/src/main/java/org/oppia/android/app/profile/PinPasswordActivityPresenter.kt
This file is exempted from having a test file; skipping coverage check.
AdminPinActivityPresenter.ktapp/src/main/java/org/oppia/android/app/profile/AdminPinActivityPresenter.kt
This file is exempted from having a test file; 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.
ProfileChooserFragment.ktapp/src/main/java/org/oppia/android/app/profile/ProfileChooserFragment.kt
This file is incompatible with code coverage tooling; skipping coverage check.
ResetPinDialogFragmentPresenter.ktapp/src/main/java/org/oppia/android/app/profile/ResetPinDialogFragmentPresenter.kt
This file is exempted from having a test file; skipping coverage check.
AdminPinActivity.ktapp/src/main/java/org/oppia/android/app/profile/AdminPinActivity.kt
This file is incompatible with code coverage tooling; skipping coverage check.
ProfileLoginFragmentPresenter.ktapp/src/main/java/org/oppia/android/app/profile/ProfileLoginFragmentPresenter.kt
This file is exempted from having a test file; skipping coverage check.
ProfileChooserFragmentPresenterV1.ktapp/src/main/java/org/oppia/android/app/profile/ProfileChooserFragmentPresenterV1.kt
This file is exempted from having a test file; skipping coverage check.
ProfileLoginActivity.ktapp/src/main/java/org/oppia/android/app/profile/ProfileLoginActivity.kt
This file is incompatible with code coverage tooling; skipping coverage check.
AdminAuthActivity.ktapp/src/main/java/org/oppia/android/app/profile/AdminAuthActivity.kt
This file is incompatible with code coverage tooling; skipping coverage check.
PinPasswordViewModel.ktapp/src/main/java/org/oppia/android/app/profile/PinPasswordViewModel.kt
This file is exempted from having a test file; skipping coverage check.
ProfileAndDeviceIdActivity.ktapp/src/main/java/org/oppia/android/app/administratorcontrols/learneranalytics/ProfileAndDeviceIdActivity.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.
AdministratorControlsFragment.ktapp/src/main/java/org/oppia/android/app/administratorcontrols/AdministratorControlsFragment.kt
This file is incompatible with code coverage tooling; skipping coverage check.
AdministratorControlsDownloadPermissionsViewModel.ktapp/src/main/java/org/oppia/android/app/administratorcontrols/administratorcontrolsitemviewmodel/AdministratorControlsDownloadPermissionsViewModel.kt
This file is exempted from having a test file; skipping coverage check.
AppVersionActivity.ktapp/src/main/java/org/oppia/android/app/administratorcontrols/appversion/AppVersionActivity.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.
BindableAdapter.ktapp/src/main/java/org/oppia/android/app/recyclerview/BindableAdapter.kt
This file is incompatible with code coverage tooling; skipping coverage check.
FragmentComponentImpl.ktapp/src/main/java/org/oppia/android/app/fragment/FragmentComponentImpl.kt
This file is exempted from having a test file; skipping coverage check.
PlatformParametersActivity.ktapp/src/main/java/org/oppia/android/app/devoptions/platformparameters/PlatformParametersActivity.kt
This file is incompatible with code coverage tooling; skipping coverage check.
PlatformParametersFragment.ktapp/src/main/java/org/oppia/android/app/devoptions/platformparameters/PlatformParametersFragment.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.
MathExpressionParserActivity.ktapp/src/main/java/org/oppia/android/app/devoptions/mathexpressionparser/MathExpressionParserActivity.kt
This file is incompatible with code coverage tooling; skipping coverage check.
FeatureFlagsActivity.ktapp/src/main/java/org/oppia/android/app/devoptions/featureflags/FeatureFlagsActivity.kt
This file is incompatible with code coverage tooling; skipping coverage check.
FeatureFlagsFragment.ktapp/src/main/java/org/oppia/android/app/devoptions/featureflags/FeatureFlagsFragment.kt
This file is incompatible with code coverage tooling; skipping coverage check.
MarkTopicsCompletedActivity.ktapp/src/main/java/org/oppia/android/app/devoptions/marktopicscompleted/MarkTopicsCompletedActivity.kt
This file is incompatible with code coverage tooling; skipping coverage check.
MarkTopicsCompletedFragment.ktapp/src/main/java/org/oppia/android/app/devoptions/marktopicscompleted/MarkTopicsCompletedFragment.kt
This file is incompatible with code coverage tooling; skipping coverage check.
ForceNetworkTypeActivity.ktapp/src/main/java/org/oppia/android/app/devoptions/forcenetworktype/ForceNetworkTypeActivity.kt
This file is incompatible with code coverage tooling; skipping coverage check.
ForceNetworkTypeFragment.ktapp/src/main/java/org/oppia/android/app/devoptions/forcenetworktype/ForceNetworkTypeFragment.kt
This file is incompatible with code coverage tooling; skipping coverage check.
DeveloperOptionsFragment.ktapp/src/main/java/org/oppia/android/app/devoptions/DeveloperOptionsFragment.kt
This file is incompatible with code coverage tooling; skipping coverage check.
MarkStoriesCompletedFragment.ktapp/src/main/java/org/oppia/android/app/devoptions/markstoriescompleted/MarkStoriesCompletedFragment.kt
This file is incompatible with code coverage tooling; skipping coverage check.
MarkStoriesCompletedActivity.ktapp/src/main/java/org/oppia/android/app/devoptions/markstoriescompleted/MarkStoriesCompletedActivity.kt
This file is incompatible with code coverage tooling; skipping coverage check.
DeveloperOptionsActivity.ktapp/src/main/java/org/oppia/android/app/devoptions/DeveloperOptionsActivity.kt
This file is incompatible with code coverage tooling; skipping coverage check.
MarkChaptersCompletedActivity.ktapp/src/main/java/org/oppia/android/app/devoptions/markchapterscompleted/MarkChaptersCompletedActivity.kt
This file is incompatible with code coverage tooling; skipping coverage check.
MarkChaptersCompletedFragment.ktapp/src/main/java/org/oppia/android/app/devoptions/markchapterscompleted/MarkChaptersCompletedFragment.kt
This file is incompatible with code coverage tooling; skipping coverage check.
ViewEventLogsFragment.ktapp/src/main/java/org/oppia/android/app/devoptions/vieweventlogs/ViewEventLogsFragment.kt
This file is incompatible with code coverage tooling; skipping coverage check.
ViewEventLogsActivity.ktapp/src/main/java/org/oppia/android/app/devoptions/vieweventlogs/ViewEventLogsActivity.kt
This file is incompatible with code coverage tooling; 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.
StudyGuideFragmentPresenter.ktapp/src/main/java/org/oppia/android/app/topic/studyguide/StudyGuideFragmentPresenter.kt
This file is exempted from having a test file; skipping coverage check.
StudyGuideViewModel.ktapp/src/main/java/org/oppia/android/app/topic/studyguide/StudyGuideViewModel.kt
This file is exempted from having a test file; skipping coverage check.
StudyGuideItemViewModel.ktapp/src/main/java/org/oppia/android/app/topic/studyguide/StudyGuideItemViewModel.kt
This file is exempted from having a test file; skipping coverage check.
StudyGuideActivityPresenter.ktapp/src/main/java/org/oppia/android/app/topic/studyguide/StudyGuideActivityPresenter.kt
This file is exempted from having a test file; skipping coverage check.
StudyGuideActivity.ktapp/src/main/java/org/oppia/android/app/topic/studyguide/StudyGuideActivity.kt
This file is incompatible with code coverage tooling; skipping coverage check.
StudyGuideSectionContentViewModel.ktapp/src/main/java/org/oppia/android/app/topic/studyguide/StudyGuideSectionContentViewModel.kt
This file is exempted from having a test file; skipping coverage check.
StudyGuideFragment.ktapp/src/main/java/org/oppia/android/app/topic/studyguide/StudyGuideFragment.kt
This file is incompatible with code coverage tooling; skipping coverage check.
StudyGuideSectionHeadingViewModel.ktapp/src/main/java/org/oppia/android/app/topic/studyguide/StudyGuideSectionHeadingViewModel.kt
This file is exempted from having a test file; skipping coverage check.
ConceptCardFragment.ktapp/src/main/java/org/oppia/android/app/topic/conceptcard/ConceptCardFragment.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.
RouteToStudyGuideListener.ktapp/src/main/java/org/oppia/android/app/topic/RouteToStudyGuideListener.kt
This file is exempted from having a test file; skipping coverage check.
RevisionCardFragment.ktapp/src/main/java/org/oppia/android/app/topic/revisioncard/RevisionCardFragment.kt
This file is incompatible with code coverage tooling; skipping coverage check.
RevisionCardFragmentPresenter.ktapp/src/main/java/org/oppia/android/app/topic/revisioncard/RevisionCardFragmentPresenter.kt
This file is exempted from having a test file; skipping coverage check.
RevisionCardActivityPresenter.ktapp/src/main/java/org/oppia/android/app/topic/revisioncard/RevisionCardActivityPresenter.kt
This file is exempted from having a test file; 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.
TopicLessonsFragment.ktapp/src/main/java/org/oppia/android/app/topic/lessons/TopicLessonsFragment.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.
TopicPracticeFragment.ktapp/src/main/java/org/oppia/android/app/topic/practice/TopicPracticeFragment.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.
TopicRevisionFragmentPresenter.ktapp/src/main/java/org/oppia/android/app/topic/revision/TopicRevisionFragmentPresenter.kt
This file is exempted from having a test file; 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.
QuestionPlayerActivityPresenter.ktapp/src/main/java/org/oppia/android/app/topic/questionplayer/QuestionPlayerActivityPresenter.kt
This file is exempted from having a test file; 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.
MyDownloadsFragment.ktapp/src/main/java/org/oppia/android/app/mydownloads/MyDownloadsFragment.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.
ResumeLessonFragment.ktapp/src/main/java/org/oppia/android/app/resumelesson/ResumeLessonFragment.kt
This file is incompatible with code coverage tooling; skipping coverage check.
ResumeLessonActivity.ktapp/src/main/java/org/oppia/android/app/resumelesson/ResumeLessonActivity.kt
This file is incompatible with code coverage tooling; skipping coverage check.
ResumeLessonActivityPresenter.ktapp/src/main/java/org/oppia/android/app/resumelesson/ResumeLessonActivityPresenter.kt
This file is exempted from having a test file; skipping coverage check.
TopicRevisionTestActivity.ktapp/src/main/java/org/oppia/android/app/testing/TopicRevisionTestActivity.kt
This file is exempted from having a test file; skipping coverage check.
TestFontScaleConfigurationUtilActivity.ktapp/src/main/java/org/oppia/android/app/testing/TestFontScaleConfigurationUtilActivity.kt
This file is incompatible with code coverage tooling; skipping coverage check.
FractionInputInteractionViewTestActivity.ktapp/src/main/java/org/oppia/android/app/testing/FractionInputInteractionViewTestActivity.kt
This file is incompatible with code coverage tooling; skipping coverage check.
TextInputInteractionViewTestActivity.ktapp/src/main/java/org/oppia/android/app/testing/TextInputInteractionViewTestActivity.kt
This file is incompatible with code coverage tooling; skipping coverage check.
DragDropTestActivity.ktapp/src/main/java/org/oppia/android/app/testing/DragDropTestActivity.kt
This file is incompatible with code coverage tooling; skipping coverage check.
InputInteractionViewTestActivity.ktapp/src/main/java/org/oppia/android/app/testing/InputInteractionViewTestActivity.kt
This file is incompatible with code coverage tooling; skipping coverage check.
TopicTestActivity.ktapp/src/main/java/org/oppia/android/app/testing/TopicTestActivity.kt
This file is exempted from having a test file; 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.
RatioInputInteractionViewTestActivity.ktapp/src/main/java/org/oppia/android/app/testing/RatioInputInteractionViewTestActivity.kt
This file is incompatible with code coverage tooling; skipping coverage check.
InjectableEnglishOnlyAppCompatActivity.ktapp/src/main/java/org/oppia/android/app/activity/InjectableEnglishOnlyAppCompatActivity.kt
This file is exempted from having a test file; skipping coverage check.
InjectableAutoLocalizedAppCompatActivity.ktapp/src/main/java/org/oppia/android/app/activity/InjectableAutoLocalizedAppCompatActivity.kt
This file is exempted from having a test file; skipping coverage check.
ActivityComponentImpl.ktapp/src/main/java/org/oppia/android/app/activity/ActivityComponentImpl.kt
This file is exempted from having a test file; 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.
InjectableSystemLocalizedAppCompatActivity.ktapp/src/main/java/org/oppia/android/app/activity/InjectableSystemLocalizedAppCompatActivity.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.
StoryF...[Comment body truncated]

@github-actions

Copy link
Copy Markdown
Contributor

Coverage Report

Results

Number of files assessed: 286
Overall Coverage: 94.60%
Coverage Analysis: PASS

Passing coverage

Files with passing code coverage
File Coverage Lines Hit Status Min Required
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%
PerformanceMetricsLogger.ktdomain/src/main/java/org/oppia/android/domain/oppialogger/analytics/PerformanceMetricsLogger.kt
100.00% 99 / 99 70%
FeatureFlagsLogger.ktdomain/src/main/java/org/oppia/android/domain/oppialogger/analytics/FeatureFlagsLogger.kt
100.00% 22 / 22 70%
StateDeck.ktdomain/src/main/java/org/oppia/android/domain/state/StateDeck.kt
97.84% 136 / 139 70%
StateGraph.ktdomain/src/main/java/org/oppia/android/domain/state/StateGraph.kt
96.47% 82 / 85 70%
TranslationController.ktdomain/src/main/java/org/oppia/android/domain/translation/TranslationController.kt
94.15% 161 / 171 70%
SurveyGatingController.ktdomain/src/main/java/org/oppia/android/domain/survey/SurveyGatingController.kt
96.97% 32 / 33 70%
VersionInversionChecker.ktscripts/src/java/org/oppia/android/scripts/release/VersionInversionChecker.kt
100.00% 39 / 39 70%
UploadBinaryToPlayConsole.ktscripts/src/java/org/oppia/android/scripts/release/UploadBinaryToPlayConsole.kt
99.00% 99 / 100 70%
UploadChangelogToPlayConsole.ktscripts/src/java/org/oppia/android/scripts/release/UploadChangelogToPlayConsole.kt
80.90% 72 / 89 70%
ChangelogExistenceChecker.ktscripts/src/java/org/oppia/android/scripts/release/ChangelogExistenceChecker.kt
100.00% 17 / 17 70%
GooglePlayConsoleClient.ktscripts/src/java/org/oppia/android/scripts/release/GooglePlayConsoleClient.kt
96.55% 84 / 87 70%
PlayConsoleService.ktscripts/src/java/org/oppia/android/scripts/release/remote/PlayConsoleService.kt
100.00% 2 / 2 70%
UpdateRolloutFraction.ktscripts/src/java/org/oppia/android/scripts/release/UpdateRolloutFraction.kt
86.36% 57 / 66 70%
PendingReleaseChecker.ktscripts/src/java/org/oppia/android/scripts/release/PendingReleaseChecker.kt
100.00% 13 / 13 70%
FakePlayConsoleClient.ktscripts/src/java/org/oppia/android/scripts/release/FakePlayConsoleClient.kt
100.00% 50 / 50 70%
SignReleaseBinary.ktscripts/src/java/org/oppia/android/scripts/release/SignReleaseBinary.kt
93.33% 42 / 45 70%
AppFlavor.ktscripts/src/java/org/oppia/android/scripts/release/AppFlavor.kt
100.00% 5 / 5 70%
TrackResponse.ktscripts/src/java/org/oppia/android/scripts/release/model/TrackResponse.kt
100.00% 9 / 9 70%
InsertEditRequest.ktscripts/src/java/org/oppia/android/scripts/release/model/InsertEditRequest.kt
100.00% 9 / 9 70%
TrackUpdateRequest.ktscripts/src/java/org/oppia/android/scripts/release/model/TrackUpdateRequest.kt
100.00% 15 / 15 70%
BundleResponse.ktscripts/src/java/org/oppia/android/scripts/release/model/BundleResponse.kt
100.00% 2 / 2 70%
EditResponse.ktscripts/src/java/org/oppia/android/scripts/release/model/EditResponse.kt
100.00% 2 / 2 70%
CloudKmsSigner.ktscripts/src/java/org/oppia/android/scripts/release/CloudKmsSigner.kt
96.25% 77 / 80 70%
FakeCloudSigner.ktscripts/src/java/org/oppia/android/scripts/release/FakeCloudSigner.kt
100.00% 19 / 19 70%
BazelClient.ktscripts/src/java/org/oppia/android/scripts/common/BazelClient.kt
98.25% 112 / 114 70%
FakeCommandExecutor.ktscripts/src/java/org/oppia/android/scripts/common/testing/FakeCommandExecutor.kt
100.00% 38 / 38 70%
GitClient.ktscripts/src/java/org/oppia/android/scripts/common/GitClient.kt
95.35% 41 / 43 70%
CommandExecutorImpl.ktscripts/src/java/org/oppia/android/scripts/common/CommandExecutorImpl.kt
97.50% 39 / 40 70%
ComputeChangedFiles.ktscripts/src/java/org/oppia/android/scripts/ci/ComputeChangedFiles.kt
96.53% 167 / 173 70%
ComputeAffectedTests.ktscripts/src/java/org/oppia/android/scripts/ci/ComputeAffectedTests.kt
95.88% 163 / 170 70%
RetrieveLicenseTexts.ktscripts/src/java/org/oppia/android/scripts/maven/RetrieveLicenseTexts.kt
98.40% 184 / 187 70%
TestGitRepository.ktscripts/src/java/org/oppia/android/scripts/testing/TestGitRepository.kt
95.24% 80 / 84 70%
TransformAndroidManifest.ktscripts/src/java/org/oppia/android/scripts/build/TransformAndroidManifest.kt
99.18% 121 / 122 70%
RegexPatternValidationCheck.ktscripts/src/java/org/oppia/android/scripts/regex/RegexPatternValidationCheck.kt
100.00% 104 / 104 70%
ActivityRouter.ktapp/src/main/java/org/oppia/android/app/activity/route/ActivityRouter.kt
100.00% 12 / 12 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
71.05% 27 / 38 70%
ActivityLanguageLocaleHandler.ktapp/src/main/java/org/oppia/android/app/translation/ActivityLanguageLocaleHandler.kt
100.00% 11 / 11 70%
AnalyticsController.ktdomain/src/main/java/org/oppia/android/domain/oppialogger/analytics/AnalyticsController.kt
72.51% 124 / 171 68% *
ActivityIntentFactories.ktapp/src/main/java/org/oppia/android/app/activity/ActivityIntentFactories.kt
0.00% 0 / 0 0% *

* represents tests with custom overridden pass/fail coverage thresholds

Exempted coverage

Files exempted from coverage
File Exemption Reason
ExplorationProgress.ktdomain/src/main/java/org/oppia/android/domain/exploration/ExplorationProgress.kt
This file is exempted from having a test file; 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.
ExplorationRetrieverImpl.ktdomain/src/main/java/org/oppia/android/domain/exploration/ExplorationRetrieverImpl.kt
This file is exempted from having a test file; 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.
ExplorationProgressController.ktdomain/src/main/java/org/oppia/android/domain/exploration/ExplorationProgressController.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.
LearnerAnalyticsLogger.ktdomain/src/main/java/org/oppia/android/domain/oppialogger/analytics/LearnerAnalyticsLogger.kt
This file is incompatible with code coverage tooling; skipping coverage check.
ApplicationLifecycleObserver.ktdomain/src/main/java/org/oppia/android/domain/oppialogger/analytics/ApplicationLifecycleObserver.kt
This file is incompatible with code coverage tooling; skipping coverage check.
FeatureFlagsMapBindingModule.ktdomain/src/main/java/org/oppia/android/domain/platformparameter/FeatureFlagsMapBindingModule.kt
This file is exempted from having a test file; 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.
FeatureFlagBindingModule.ktdomain/src/main/java/org/oppia/android/domain/platformparameter/FeatureFlagBindingModule.kt
This file is exempted from having a test file; 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.
ClassroomController.ktdomain/src/main/java/org/oppia/android/domain/classroom/ClassroomController.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.
CellularAudioDialogController.ktdomain/src/main/java/org/oppia/android/domain/audio/CellularAudioDialogController.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.
ForceDownloadRemoteParametersController.ktdomain/src/main/java/org/oppia/android/domain/devoptions/ForceDownloadRemoteParametersController.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.
SpotlightStateController.ktdomain/src/main/java/org/oppia/android/domain/spotlight/SpotlightStateController.kt
This file is incompatible with code coverage tooling; skipping coverage check.
TopicListController.ktdomain/src/main/java/org/oppia/android/domain/topic/TopicListController.kt
This file is incompatible with code coverage tooling; skipping coverage check.
StudyGuideRetriever.ktdomain/src/main/java/org/oppia/android/domain/topic/StudyGuideRetriever.kt
This file is exempted from having a test file; skipping coverage check.
TopicController.ktdomain/src/main/java/org/oppia/android/domain/topic/TopicController.kt
This file is incompatible with code coverage tooling; skipping coverage check.
ConceptCardRetriever.ktdomain/src/main/java/org/oppia/android/domain/topic/ConceptCardRetriever.kt
This file is exempted from having a test file; skipping coverage check.
RevisionCardRetriever.ktdomain/src/main/java/org/oppia/android/domain/topic/RevisionCardRetriever.kt
This file is exempted from having a test file; 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.
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.
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.
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.
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.
QuestionAssessmentProgressController.ktdomain/src/main/java/org/oppia/android/domain/question/QuestionAssessmentProgressController.kt
This file is incompatible with code coverage tooling; skipping coverage check.
QuestionRetriever.ktdomain/src/main/java/org/oppia/android/domain/question/QuestionRetriever.kt
This file is exempted from having a test file; 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.
ReportSchemaVersion.ktdomain/src/main/java/org/oppia/android/domain/feedbackreporting/ReportSchemaVersion.kt
This file is incompatible with code coverage tooling; skipping coverage check.
CloudSigner.ktscripts/src/java/org/oppia/android/scripts/release/CloudSigner.kt
This file is exempted from having a test file; skipping coverage check.
PlayConsoleClient.ktscripts/src/java/org/oppia/android/scripts/release/PlayConsoleClient.kt
This file is exempted from having a test file; skipping coverage check.
CommandExecutor.ktscripts/src/java/org/oppia/android/scripts/common/CommandExecutor.kt
This file is exempted from having a test file; skipping coverage check.
AudioLanguageFragmentPresenter.ktapp/src/main/java/org/oppia/android/app/onboarding/AudioLanguageFragmentPresenter.kt
This file is exempted from having a test file; 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.
CreateProfileFragment.ktapp/src/main/java/org/oppia/android/app/onboarding/CreateProfileFragment.kt
This file is incompatible with code coverage tooling; skipping coverage check.
OnboardingActivity.ktapp/src/main/java/org/oppia/android/app/onboarding/OnboardingActivity.kt
This file is incompatible with code coverage tooling; skipping coverage check.
AdminIntroFragment.ktapp/src/main/java/org/oppia/android/app/onboarding/AdminIntroFragment.kt
This file is incompatible with code coverage tooling; skipping coverage check.
IntroActivity.ktapp/src/main/java/org/oppia/android/app/onboarding/IntroActivity.kt
This file is incompatible with code coverage tooling; skipping coverage check.
CreateProfileFragmentPresenter.ktapp/src/main/java/org/oppia/android/app/onboarding/CreateProfileFragmentPresenter.kt
This file is exempted from having a test file; skipping coverage check.
IntroFragmentPresenter.ktapp/src/main/java/org/oppia/android/app/onboarding/IntroFragmentPresenter.kt
This file is exempted from having a test file; skipping coverage check.
AdminIntroActivity.ktapp/src/main/java/org/oppia/android/app/onboarding/AdminIntroActivity.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.
OnboardingProfileTypeActivity.ktapp/src/main/java/org/oppia/android/app/onboarding/OnboardingProfileTypeActivity.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.
OnboardingFragmentPresenter.ktapp/src/main/java/org/oppia/android/app/onboarding/OnboardingFragmentPresenter.kt
This file is exempted from having a test file; skipping coverage check.
AdminIntroFragmentPresenter.ktapp/src/main/java/org/oppia/android/app/onboarding/AdminIntroFragmentPresenter.kt
This file is exempted from having a test file; skipping coverage check.
CreateProfileActivity.ktapp/src/main/java/org/oppia/android/app/onboarding/CreateProfileActivity.kt
This file is incompatible with code coverage tooling; skipping coverage check.
WalkthroughTopicListFragment.ktapp/src/main/java/org/oppia/android/app/walkthrough/topiclist/WalkthroughTopicListFragment.kt
This file is incompatible with code coverage tooling; skipping coverage check.
WalkthroughFinalFragment.ktapp/src/main/java/org/oppia/android/app/walkthrough/end/WalkthroughFinalFragment.kt
This file is incompatible with code coverage tooling; skipping coverage check.
WalkthroughWelcomeFragmentPresenter.ktapp/src/main/java/org/oppia/android/app/walkthrough/welcome/WalkthroughWelcomeFragmentPresenter.kt
This file is exempted from having a test file; skipping coverage check.
WalkthroughWelcomeFragment.ktapp/src/main/java/org/oppia/android/app/walkthrough/welcome/WalkthroughWelcomeFragment.kt
This file is incompatible with code coverage tooling; skipping coverage check.
WalkthroughActivity.ktapp/src/main/java/org/oppia/android/app/walkthrough/WalkthroughActivity.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.
SplashActivityPresenter.ktapp/src/main/java/org/oppia/android/app/splash/SplashActivityPresenter.kt
This file is exempted from having a test file; 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.
PoliciesFragmentPresenter.ktapp/src/main/java/org/oppia/android/app/policies/PoliciesFragmentPresenter.kt
This file is exempted from having a test file; 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.
DateTimeUtil.ktapp/src/main/java/org/oppia/android/app/utility/datetime/DateTimeUtil.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.
RatioExtensions.ktapp/src/main/java/org/oppia/android/app/utility/RatioExtensions.kt
This file is incompatible with code coverage tooling; skipping coverage check.
LessonThumbnailImageView.ktapp/src/main/java/org/oppia/android/app/customview/LessonThumbnailImageView.kt
This file is incompatible with code coverage tooling; skipping coverage check.
LessonProgressIndicatorView.ktapp/src/main/java/org/oppia/android/app/customview/LessonProgressIndicatorView.kt
This file is exempted from having a test file; 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.
HomeFragmentPresenter.ktapp/src/main/java/org/oppia/android/app/home/HomeFragmentPresenter.kt
This file is exempted from having a test file; skipping coverage check.
TopicSummaryViewModel.ktapp/src/main/java/org/oppia/android/app/home/topiclist/TopicSummaryViewModel.kt
This file is incompatible with code coverage tooling; skipping coverage check.
RecentlyPlayedFragment.ktapp/src/main/java/org/oppia/android/app/home/recentlyplayed/RecentlyPlayedFragment.kt
This file is incompatible with code coverage tooling; skipping coverage check.
RecentlyPlayedActivity.ktapp/src/main/java/org/oppia/android/app/home/recentlyplayed/RecentlyPlayedActivity.kt
This file is incompatible with code coverage tooling; skipping coverage check.
WelcomeViewModel.ktapp/src/main/java/org/oppia/android/app/home/WelcomeViewModel.kt
This file is incompatible with code coverage tooling; skipping coverage check.
PromotedStoryListViewModel.ktapp/src/main/java/org/oppia/android/app/home/promotedlist/PromotedStoryListViewModel.kt
This file is incompatible with code coverage tooling; skipping coverage check.
PromotedStoryViewModel.ktapp/src/main/java/org/oppia/android/app/home/promotedlist/PromotedStoryViewModel.kt
This file is incompatible with code coverage tooling; skipping coverage check.
HomeViewModel.ktapp/src/main/java/org/oppia/android/app/home/HomeViewModel.kt
This file is exempted from having a test file; 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.
ProfileProgressViewModel.ktapp/src/main/java/org/oppia/android/app/profileprogress/ProfileProgressViewModel.kt
This file is exempted from having a test file; skipping coverage check.
ProfilePictureActivity.ktapp/src/main/java/org/oppia/android/app/profileprogress/ProfilePictureActivity.kt
This file is incompatible with code coverage tooling; skipping coverage check.
ProfilePictureActivityPresenter.ktapp/src/main/java/org/oppia/android/app/profileprogress/ProfilePictureActivityPresenter.kt
This file is exempted from having a test file; skipping coverage check.
ProfileProgressActivity.ktapp/src/main/java/org/oppia/android/app/profileprogress/ProfileProgressActivity.kt
This file is incompatible with code coverage tooling; skipping coverage check.
ProfileProgressActivityPresenter.ktapp/src/main/java/org/oppia/android/app/profileprogress/ProfileProgressActivityPresenter.kt
This file is exempted from having a test file; skipping coverage check.
ProfileProgressFragment.ktapp/src/main/java/org/oppia/android/app/profileprogress/ProfileProgressFragment.kt
This file is incompatible with code coverage tooling; skipping coverage check.
HelpFragment.ktapp/src/main/java/org/oppia/android/app/help/HelpFragment.kt
This file is incompatible with code coverage tooling; skipping coverage check.
HelpActivity.ktapp/src/main/java/org/oppia/android/app/help/HelpActivity.kt
This file is incompatible with code coverage tooling; skipping coverage check.
FAQSingleActivity.ktapp/src/main/java/org/oppia/android/app/help/faq/faqsingle/FAQSingleActivity.kt
This file is incompatible with code coverage tooling; skipping coverage check.
FAQListFragment.ktapp/src/main/java/org/oppia/android/app/help/faq/FAQListFragment.kt
This file is incompatible with code coverage tooling; skipping coverage check.
FAQListActivity.ktapp/src/main/java/org/oppia/android/app/help/faq/FAQListActivity.kt
This file is exempted from having a test file; skipping coverage check.
LicenseTextViewerActivity.ktapp/src/main/java/org/oppia/android/app/help/thirdparty/LicenseTextViewerActivity.kt
This file is incompatible with code coverage tooling; skipping coverage check.
LicenseListActivity.ktapp/src/main/java/org/oppia/android/app/help/thirdparty/LicenseListActivity.kt
This file is incompatible with code coverage tooling; skipping coverage check.
ThirdPartyDependencyListActivity.ktapp/src/main/java/org/oppia/android/app/help/thirdparty/ThirdPartyDependencyListActivity.kt
This file is incompatible with code coverage tooling; skipping coverage check.
ThirdPartyDependencyListFragment.ktapp/src/main/java/org/oppia/android/app/help/thirdparty/ThirdPartyDependencyListFragment.kt
This file is incompatible with code coverage tooling; skipping coverage check.
LicenseTextViewerFragment.ktapp/src/main/java/org/oppia/android/app/help/thirdparty/LicenseTextViewerFragment.kt
This file is incompatible with code coverage tooling; skipping coverage check.
LicenseListFragment.ktapp/src/main/java/org/oppia/android/app/help/thirdparty/LicenseListFragment.kt
This file is incompatible with code coverage tooling; skipping coverage check.
ProfileListFragment.ktapp/src/main/java/org/oppia/android/app/settings/profile/ProfileListFragment.kt
This file is incompatible with code coverage tooling; skipping coverage check.
ProfileEditViewModel.ktapp/src/main/java/org/oppia/android/app/settings/profile/ProfileEditViewModel.kt
This file is exempted from having a test file; skipping coverage check.
ProfileEditActivity.ktapp/src/main/java/org/oppia/android/app/settings/profile/ProfileEditActivity.kt
This file is incompatible with code coverage tooling; skipping coverage check.
ProfileResetPinActivity.ktapp/src/main/java/org/oppia/android/app/settings/profile/ProfileResetPinActivity.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.
ProfileRenameFragmentPresenter.ktapp/src/main/java/org/oppia/android/app/settings/profile/ProfileRenameFragmentPresenter.kt
This file is exempted from having a test file; skipping coverage check.
ProfileResetPinFragmentPresenter.ktapp/src/main/java/org/oppia/android/app/settings/profile/ProfileResetPinFragmentPresenter.kt
This file is exempted from having a test file; skipping coverage check.
ProfileListActivity.ktapp/src/main/java/org/oppia/android/app/settings/profile/ProfileListActivity.kt
This file is incompatible with code coverage tooling; skipping coverage check.
ProfileResetPinFragment.ktapp/src/main/java/org/oppia/android/app/settings/profile/ProfileResetPinFragment.kt
This file is incompatible with code coverage tooling; skipping coverage check.
ProfileRenameFragment.ktapp/src/main/java/org/oppia/android/app/settings/profile/ProfileRenameFragment.kt
This file is incompatible with code coverage tooling; skipping coverage check.
ProfileEditFragmentPresenter.ktapp/src/main/java/org/oppia/android/app/settings/profile/ProfileEditFragmentPresenter.kt
This file is exempted from having a test file; skipping coverage check.
ProfileRenameActivity.ktapp/src/main/java/org/oppia/android/app/settings/profile/ProfileRenameActivity.kt
This file is incompatible with code coverage tooling; skipping coverage check.
ForcedAppDeprecationNoticeDialogFragment.ktapp/src/main/java/org/oppia/android/app/notice/ForcedAppDeprecationNoticeDialogFragment.kt
This file is incompatible with code coverage tooling; skipping coverage check.
BetaNoticeDialogFragment.ktapp/src/main/java/org/oppia/android/app/notice/BetaNoticeDialogFragment.kt
This file is incompatible with code coverage tooling; skipping coverage check.
GeneralAvailabilityUpgradeNoticeDialogFragment.ktapp/src/main/java/org/oppia/android/app/notice/GeneralAvailabilityUpgradeNoticeDialogFragment.kt
This file is incompatible with code coverage tooling; skipping coverage check.
OptionalAppDeprecationNoticeDialogFragment.ktapp/src/main/java/org/oppia/android/app/notice/OptionalAppDeprecationNoticeDialogFragment.kt
This file is incompatible with code coverage tooling; skipping coverage check.
OsDeprecationNoticeDialogFragment.ktapp/src/main/java/org/oppia/android/app/notice/OsDeprecationNoticeDialogFragment.kt
This file is incompatible with code coverage tooling; skipping coverage check.
CompletedStoryListActivity.ktapp/src/main/java/org/oppia/android/app/completedstorylist/CompletedStoryListActivity.kt
This file is incompatible with code coverage tooling; skipping coverage check.
NavigationDrawerFragmentPresenter.ktapp/src/main/java/org/oppia/android/app/drawer/NavigationDrawerFragmentPresenter.kt
This file is exempted from having a test file; skipping coverage check.
OngoingTopicListActivity.ktapp/src/main/java/org/oppia/android/app/ongoingtopiclist/OngoingTopicListActivity.kt
This file is incompatible with code coverage tooling; skipping coverage check.
ClassroomListViewModel.ktapp/src/main/java/org/oppia/android/app/classroom/ClassroomListViewModel.kt
This file is exempted from having a test file; skipping coverage check.
ClassroomListActivity.ktapp/src/main/java/org/oppia/android/app/classroom/ClassroomListActivity.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.
ClassroomListFragmentPresenter.ktapp/src/main/java/org/oppia/android/app/classroom/ClassroomListFragmentPresenter.kt
This file is exempted from having a test file; skipping coverage check.
AudioLanguageActivity.ktapp/src/main/java/org/oppia/android/app/options/AudioLanguageActivity.kt
This file is incompatible with code coverage tooling; skipping coverage check.
AppLanguageActivity.ktapp/src/main/java/org/oppia/android/app/options/AppLanguageActivity.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.
AudioLanguageFragment.ktapp/src/main/java/org/oppia/android/app/options/AudioLanguageFragment.kt
This file is incompatible with code coverage tooling; skipping coverage check.
AudioLanguageSelectionViewModel.ktapp/src/main/java/org/oppia/android/app/options/AudioLanguageSelectionViewModel.kt
This file is exempted from having a test file; skipping coverage check.
AppLanguageFragmentPresenter.ktapp/src/main/java/org/oppia/android/app/options/AppLanguageFragmentPresenter.kt
This file is exempted from having a test file; skipping coverage check.
OptionsFragmentPresenter.ktapp/src/main/java/org/oppia/android/app/options/OptionsFragmentPresenter.kt
This file is exempted from having a test file; skipping coverage check.
OptionControlsViewModel.ktapp/src/main/java/org/oppia/android/app/options/OptionControlsViewModel.kt
This file is exempted from having a test file; skipping coverage check.
AppLanguageFragment.ktapp/src/main/java/org/oppia/android/app/options/AppLanguageFragment.kt
This file is incompatible with code coverage tooling; skipping coverage check.
ReadingTextSizeActivity.ktapp/src/main/java/org/oppia/android/app/options/ReadingTextSizeActivity.kt
This file is incompatible with code coverage tooling; skipping coverage check.
OptionsActivity.ktapp/src/main/java/org/oppia/android/app/options/OptionsActivity.kt
This file is incompatible with code coverage tooling; skipping coverage check.
AppLanguageFragmentPresenterV1.ktapp/src/main/java/org/oppia/android/app/options/AppLanguageFragmentPresenterV1.kt
This file is exempted from having a test file; skipping coverage check.
ReadingTextSizeFragment.ktapp/src/main/java/org/oppia/android/app/options/ReadingTextSizeFragment.kt
This file is incompatible with code coverage tooling; skipping coverage check.
ProfileLoginFragment.ktapp/src/main/java/org/oppia/android/app/profile/ProfileLoginFragment.kt
This file is incompatible with code coverage tooling; skipping coverage check.
ProfileChooserActivity.ktapp/src/main/java/org/oppia/android/app/profile/ProfileChooserActivity.kt
This file is exempted from having a test file; skipping coverage check.
AdminAuthActivityPresenter.ktapp/src/main/java/org/oppia/android/app/profile/AdminAuthActivityPresenter.kt
This file is exempted from having a test file; skipping coverage check.
ProfileChooserFragmentPresenter.ktapp/src/main/java/org/oppia/android/app/profile/ProfileChooserFragmentPresenter.kt
This file is exempted from having a test file; 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.
PinPasswordActivityPresenter.ktapp/src/main/java/org/oppia/android/app/profile/PinPasswordActivityPresenter.kt
This file is exempted from having a test file; skipping coverage check.
AdminPinActivityPresenter.ktapp/src/main/java/org/oppia/android/app/profile/AdminPinActivityPresenter.kt
This file is exempted from having a test file; 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.
ProfileChooserFragment.ktapp/src/main/java/org/oppia/android/app/profile/ProfileChooserFragment.kt
This file is incompatible with code coverage tooling; skipping coverage check.
ResetPinDialogFragmentPresenter.ktapp/src/main/java/org/oppia/android/app/profile/ResetPinDialogFragmentPresenter.kt
This file is exempted from having a test file; skipping coverage check.
AdminPinActivity.ktapp/src/main/java/org/oppia/android/app/profile/AdminPinActivity.kt
This file is incompatible with code coverage tooling; skipping coverage check.
ProfileLoginFragmentPresenter.ktapp/src/main/java/org/oppia/android/app/profile/ProfileLoginFragmentPresenter.kt
This file is exempted from having a test file; skipping coverage check.
ProfileChooserFragmentPresenterV1.ktapp/src/main/java/org/oppia/android/app/profile/ProfileChooserFragmentPresenterV1.kt
This file is exempted from having a test file; skipping coverage check.
ProfileLoginActivity.ktapp/src/main/java/org/oppia/android/app/profile/ProfileLoginActivity.kt
This file is incompatible with code coverage tooling; skipping coverage check.
AdminAuthActivity.ktapp/src/main/java/org/oppia/android/app/profile/AdminAuthActivity.kt
This file is incompatible with code coverage tooling; skipping coverage check.
PinPasswordViewModel.ktapp/src/main/java/org/oppia/android/app/profile/PinPasswordViewModel.kt
This file is exempted from having a test file; skipping coverage check.
ProfileAndDeviceIdActivity.ktapp/src/main/java/org/oppia/android/app/administratorcontrols/learneranalytics/ProfileAndDeviceIdActivity.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.
AdministratorControlsFragment.ktapp/src/main/java/org/oppia/android/app/administratorcontrols/AdministratorControlsFragment.kt
This file is incompatible with code coverage tooling; skipping coverage check.
AdministratorControlsDownloadPermissionsViewModel.ktapp/src/main/java/org/oppia/android/app/administratorcontrols/administratorcontrolsitemviewmodel/AdministratorControlsDownloadPermissionsViewModel.kt
This file is exempted from having a test file; skipping coverage check.
AppVersionActivity.ktapp/src/main/java/org/oppia/android/app/administratorcontrols/appversion/AppVersionActivity.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.
BindableAdapter.ktapp/src/main/java/org/oppia/android/app/recyclerview/BindableAdapter.kt
This file is incompatible with code coverage tooling; skipping coverage check.
FragmentComponentImpl.ktapp/src/main/java/org/oppia/android/app/fragment/FragmentComponentImpl.kt
This file is exempted from having a test file; skipping coverage check.
PlatformParametersActivity.ktapp/src/main/java/org/oppia/android/app/devoptions/platformparameters/PlatformParametersActivity.kt
This file is incompatible with code coverage tooling; skipping coverage check.
PlatformParametersFragment.ktapp/src/main/java/org/oppia/android/app/devoptions/platformparameters/PlatformParametersFragment.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.
MathExpressionParserActivity.ktapp/src/main/java/org/oppia/android/app/devoptions/mathexpressionparser/MathExpressionParserActivity.kt
This file is incompatible with code coverage tooling; skipping coverage check.
FeatureFlagsActivity.ktapp/src/main/java/org/oppia/android/app/devoptions/featureflags/FeatureFlagsActivity.kt
This file is incompatible with code coverage tooling; skipping coverage check.
FeatureFlagsFragment.ktapp/src/main/java/org/oppia/android/app/devoptions/featureflags/FeatureFlagsFragment.kt
This file is incompatible with code coverage tooling; skipping coverage check.
MarkTopicsCompletedActivity.ktapp/src/main/java/org/oppia/android/app/devoptions/marktopicscompleted/MarkTopicsCompletedActivity.kt
This file is incompatible with code coverage tooling; skipping coverage check.
MarkTopicsCompletedFragment.ktapp/src/main/java/org/oppia/android/app/devoptions/marktopicscompleted/MarkTopicsCompletedFragment.kt
This file is incompatible with code coverage tooling; skipping coverage check.
ForceNetworkTypeActivity.ktapp/src/main/java/org/oppia/android/app/devoptions/forcenetworktype/ForceNetworkTypeActivity.kt
This file is incompatible with code coverage tooling; skipping coverage check.
ForceNetworkTypeFragment.ktapp/src/main/java/org/oppia/android/app/devoptions/forcenetworktype/ForceNetworkTypeFragment.kt
This file is incompatible with code coverage tooling; skipping coverage check.
DeveloperOptionsFragment.ktapp/src/main/java/org/oppia/android/app/devoptions/DeveloperOptionsFragment.kt
This file is incompatible with code coverage tooling; skipping coverage check.
MarkStoriesCompletedFragment.ktapp/src/main/java/org/oppia/android/app/devoptions/markstoriescompleted/MarkStoriesCompletedFragment.kt
This file is incompatible with code coverage tooling; skipping coverage check.
MarkStoriesCompletedActivity.ktapp/src/main/java/org/oppia/android/app/devoptions/markstoriescompleted/MarkStoriesCompletedActivity.kt
This file is incompatible with code coverage tooling; skipping coverage check.
DeveloperOptionsActivity.ktapp/src/main/java/org/oppia/android/app/devoptions/DeveloperOptionsActivity.kt
This file is incompatible with code coverage tooling; skipping coverage check.
MarkChaptersCompletedActivity.ktapp/src/main/java/org/oppia/android/app/devoptions/markchapterscompleted/MarkChaptersCompletedActivity.kt
This file is incompatible with code coverage tooling; skipping coverage check.
MarkChaptersCompletedFragment.ktapp/src/main/java/org/oppia/android/app/devoptions/markchapterscompleted/MarkChaptersCompletedFragment.kt
This file is incompatible with code coverage tooling; skipping coverage check.
ViewEventLogsFragment.ktapp/src/main/java/org/oppia/android/app/devoptions/vieweventlogs/ViewEventLogsFragment.kt
This file is incompatible with code coverage tooling; skipping coverage check.
ViewEventLogsActivity.ktapp/src/main/java/org/oppia/android/app/devoptions/vieweventlogs/ViewEventLogsActivity.kt
This file is incompatible with code coverage tooling; 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.
StudyGuideFragmentPresenter.ktapp/src/main/java/org/oppia/android/app/topic/studyguide/StudyGuideFragmentPresenter.kt
This file is exempted from having a test file; skipping coverage check.
StudyGuideViewModel.ktapp/src/main/java/org/oppia/android/app/topic/studyguide/StudyGuideViewModel.kt
This file is exempted from having a test file; skipping coverage check.
StudyGuideItemViewModel.ktapp/src/main/java/org/oppia/android/app/topic/studyguide/StudyGuideItemViewModel.kt
This file is exempted from having a test file; skipping coverage check.
StudyGuideActivityPresenter.ktapp/src/main/java/org/oppia/android/app/topic/studyguide/StudyGuideActivityPresenter.kt
This file is exempted from having a test file; skipping coverage check.
StudyGuideActivity.ktapp/src/main/java/org/oppia/android/app/topic/studyguide/StudyGuideActivity.kt
This file is incompatible with code coverage tooling; skipping coverage check.
StudyGuideSectionContentViewModel.ktapp/src/main/java/org/oppia/android/app/topic/studyguide/StudyGuideSectionContentViewModel.kt
This file is exempted from having a test file; skipping coverage check.
StudyGuideFragment.ktapp/src/main/java/org/oppia/android/app/topic/studyguide/StudyGuideFragment.kt
This file is incompatible with code coverage tooling; skipping coverage check.
StudyGuideSectionHeadingViewModel.ktapp/src/main/java/org/oppia/android/app/topic/studyguide/StudyGuideSectionHeadingViewModel.kt
This file is exempted from having a test file; skipping coverage check.
ConceptCardFragment.ktapp/src/main/java/org/oppia/android/app/topic/conceptcard/ConceptCardFragment.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.
RouteToStudyGuideListener.ktapp/src/main/java/org/oppia/android/app/topic/RouteToStudyGuideListener.kt
This file is exempted from having a test file; skipping coverage check.
RevisionCardFragment.ktapp/src/main/java/org/oppia/android/app/topic/revisioncard/RevisionCardFragment.kt
This file is incompatible with code coverage tooling; skipping coverage check.
RevisionCardFragmentPresenter.ktapp/src/main/java/org/oppia/android/app/topic/revisioncard/RevisionCardFragmentPresenter.kt
This file is exempted from having a test file; skipping coverage check.
RevisionCardActivityPresenter.ktapp/src/main/java/org/oppia/android/app/topic/revisioncard/RevisionCardActivityPresenter.kt
This file is exempted from having a test file; 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.
TopicLessonsFragment.ktapp/src/main/java/org/oppia/android/app/topic/lessons/TopicLessonsFragment.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.
TopicPracticeFragment.ktapp/src/main/java/org/oppia/android/app/topic/practice/TopicPracticeFragment.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.
TopicRevisionFragmentPresenter.ktapp/src/main/java/org/oppia/android/app/topic/revision/TopicRevisionFragmentPresenter.kt
This file is exempted from having a test file; 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.
QuestionPlayerActivityPresenter.ktapp/src/main/java/org/oppia/android/app/topic/questionplayer/QuestionPlayerActivityPresenter.kt
This file is exempted from having a test file; 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.
MyDownloadsFragment.ktapp/src/main/java/org/oppia/android/app/mydownloads/MyDownloadsFragment.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.
ResumeLessonFragment.ktapp/src/main/java/org/oppia/android/app/resumelesson/ResumeLessonFragment.kt
This file is incompatible with code coverage tooling; skipping coverage check.
ResumeLessonActivity.ktapp/src/main/java/org/oppia/android/app/resumelesson/ResumeLessonActivity.kt
This file is incompatible with code coverage tooling; skipping coverage check.
ResumeLessonActivityPresenter.ktapp/src/main/java/org/oppia/android/app/resumelesson/ResumeLessonActivityPresenter.kt
This file is exempted from having a test file; skipping coverage check.
TopicRevisionTestActivity.ktapp/src/main/java/org/oppia/android/app/testing/TopicRevisionTestActivity.kt
This file is exempted from having a test file; skipping coverage check.
TestFontScaleConfigurationUtilActivity.ktapp/src/main/java/org/oppia/android/app/testing/TestFontScaleConfigurationUtilActivity.kt
This file is incompatible with code coverage tooling; skipping coverage check.
FractionInputInteractionViewTestActivity.ktapp/src/main/java/org/oppia/android/app/testing/FractionInputInteractionViewTestActivity.kt
This file is incompatible with code coverage tooling; skipping coverage check.
TextInputInteractionViewTestActivity.ktapp/src/main/java/org/oppia/android/app/testing/TextInputInteractionViewTestActivity.kt
This file is incompatible with code coverage tooling; skipping coverage check.
DragDropTestActivity.ktapp/src/main/java/org/oppia/android/app/testing/DragDropTestActivity.kt
This file is incompatible with code coverage tooling; skipping coverage check.
InputInteractionViewTestActivity.ktapp/src/main/java/org/oppia/android/app/testing/InputInteractionViewTestActivity.kt
This file is incompatible with code coverage tooling; skipping coverage check.
TopicTestActivity.ktapp/src/main/java/org/oppia/android/app/testing/TopicTestActivity.kt
This file is exempted from having a test file; 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.
RatioInputInteractionViewTestActivity.ktapp/src/main/java/org/oppia/android/app/testing/RatioInputInteractionViewTestActivity.kt
This file is incompatible with code coverage tooling; skipping coverage check.
InjectableEnglishOnlyAppCompatActivity.ktapp/src/main/java/org/oppia/android/app/activity/InjectableEnglishOnlyAppCompatActivity.kt
This file is exempted from having a test file; skipping coverage check.
InjectableAutoLocalizedAppCompatActivity.ktapp/src/main/java/org/oppia/android/app/activity/InjectableAutoLocalizedAppCompatActivity.kt
This file is exempted from having a test file; skipping coverage check.
ActivityComponentImpl.ktapp/src/main/java/org/oppia/android/app/activity/ActivityComponentImpl.kt
This file is exempted from having a test file; 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.
InjectableSystemLocalizedAppCompatActivity.ktapp/src/main/java/org/oppia/android/app/activity/InjectableSystemLocalizedAppCompatActivity.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.
StoryFragment.ktapp/src/main/java/org/oppia/android/app/story/StoryFragment.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.
ExplorationManagerFragmentPresenter.ktapp/src/main/java/org/oppia/android/app/player/exploration/ExplorationManagerFragmentPresenter.kt
This file is exempted from having a test file; skipping coverage check.
ExplorationFragmentPresenter.ktapp/src/main/java/org/oppia/android/app/player/exploration/ExplorationFragmentPresenter.kt
This file is exempted from having a test file; skipping coverage check.
BottomSheetOptionsMenu.ktapp/src/main/java/org/oppia/android/app/player/exploration/BottomSheetOptionsMenu.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.
StateFragmentPresenter.ktapp/src/main/java/org/oppia/android/app/player/state/StateFragmentPresenter.kt
This file is exempted from having a test file; skipping coverage check.
StatePlayerRecyclerViewAssembler.ktapp/src/main/java/org/oppia/android/app/player/state/StatePlayerRecyclerViewAssembler.kt
This file is exempted from having a test file; skipping coverage check.
StateItemViewModel.ktapp/src/main/java/org/oppia/android/app/player/state/itemviewmodel/StateItemViewModel.kt
This file is exempted from having a test file; skipping coverage check.
LessonProgressViewModel.ktapp/src/main/java/org/oppia/android/app/player/state/itemviewmodel/LessonProgressViewModel.kt
This file is exempted from having a test file; skipping coverage check.
StateViewModel.ktapp/src/main/java/org/oppia/android/app/player/state/StateViewModel.kt
This file is exempted from having a test file; skipping coverage check.
ImageRegionSelectionInteractionView.ktapp/src/main/java/org/oppia/android/app/player/state/ImageRegionSelectionInteractionView.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.
AudioFragment.ktapp/src/main/java/org/oppia/android/app/player/audio/AudioFragment.kt
This file is incompatible with code coverage tooling; skipping coverage check.
AudioFragmentPresenter.ktapp/src/main/java/org/oppia/android/app/player/audio/AudioFragmentPresenter.kt
This file is exempted from having a test file; 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.
SurveyFragment.ktapp/src/main/java/org/oppia/android/app/survey/SurveyFragment.kt
This file is incompatible with code coverage tooling; skipping coverage check.
SurveyWelcomeDialogFragmentPresenter.ktapp/src/main/java/org/oppia/android/app/survey/SurveyWelcomeDialogFragmentPresenter.kt
This file is exempted from having a test file; skipping coverage check.
StringToRatioParser.ktapp/src/main/java/org/oppia/android/app/p...[Comment body truncated]

@theMr17

theMr17 commented Jul 17, 2026

Copy link
Copy Markdown
Member Author

Thanks for the review @BenHenning! I have addressed all the comments in your review as well as Rabbit's review. PTAL!

@theMr17 theMr17 assigned BenHenning and unassigned theMr17 Jul 17, 2026
@oppiabot

oppiabot Bot commented Jul 24, 2026

Copy link
Copy Markdown

Hi @theMr17, 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! If you're unsure how to reassign this PR to a reviewer, please make sure to review the wiki page that details the Guidance on submitting PRs.

@oppiabot oppiabot Bot added the stale Corresponds to items that haven't seen a recent update and may be automatically closed. label Jul 24, 2026
@theMr17 theMr17 removed the stale Corresponds to items that haven't seen a recent update and may be automatically closed. label Jul 24, 2026
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