Skip to content

Conversation

@paulb777
Copy link
Member

@paulb777 paulb777 commented Nov 27, 2025

From Gemini: This pull request effectively addresses flaky tests by refactoring the asynchronous testing logic. The previous approach of directly managing XCTestExpectation in the mock object was prone to race conditions. The new implementation using NSNotificationCenter is a much cleaner and more robust solution that decouples the mock from the test's expectation management. The changes also include correcting the expected number of file removals in testCorruptCache and cleaning up unused code in other tests, which improves the overall quality of the test suite.

@gemini-code-assist
Copy link
Contributor

Using Gemini Code Assist

The full guide for Gemini Code Assist can be found on our documentation page, here are some quick tips.

Invoking Gemini

You can request assistance from Gemini at any point by creating a comment using either /gemini <command> or @gemini-code-assist <command>. Below is a summary of the supported commands on the current page.

Feature Command Description

Customization

To customize Gemini Code Assist for GitHub experience, repository maintainers can create a configuration file and/or provide a custom code review style guide (such as PEP-8 for Python) by creating and adding files to a .gemini/ folder in the base of the repository. Detailed instructions can be found here.

Limitations & Feedback

Gemini Code Assist may make mistakes. Please leave feedback on any instances where its feedback is incorrect or counter productive. You can react with 👍 and 👎 on @gemini-code-assist comments. If you're interested in giving your feedback about your experience with Gemini Code Assist for Github and other Google products, sign up here.

@google-oss-bot
Copy link

1 Warning
⚠️ Did you forget to add a changelog entry? (Add #no-changelog to the PR description to silence this warning.)

Generated by 🚫 Danger

@paulb777
Copy link
Member Author

/gemini review

Copy link
Contributor

@gemini-code-assist gemini-code-assist bot left a comment

Choose a reason for hiding this comment

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

Code Review

This pull request effectively addresses flaky tests by refactoring the asynchronous testing logic. The previous approach of directly managing XCTestExpectation in the mock object was prone to race conditions. The new implementation using NSNotificationCenter is a much cleaner and more robust solution that decouples the mock from the test's expectation management. The changes also include correcting the expected number of file removals in testCorruptCache and cleaning up unused code in other tests, which improves the overall quality of the test suite.

@paulb777
Copy link
Member Author

/gemini review

Copy link
Contributor

@gemini-code-assist gemini-code-assist bot left a comment

Choose a reason for hiding this comment

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

Code Review

This pull request effectively addresses flaky tests by refactoring the asynchronous testing logic. The move from direct XCTestExpectation management within the mock object to a more decoupled NSNotificationCenter-based approach is a significant improvement for test robustness and maintainability. Adding synchronization to FIRCLSMockFileManager is a crucial fix for thread-safety issues that were likely a primary source of flakiness. The other adjustments, such as correcting expected values and improving test cleanup, further enhance the quality of the test suite. I have one minor suggestion to make the test cleanup even more robust.


- (void)tearDown {
[_userDefaults removeAllObjects];
[[NSUserDefaults standardUserDefaults] removeObjectForKey:_testKey1];
Copy link
Contributor

Choose a reason for hiding this comment

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

low

Adding cleanup for NSUserDefaults in tearDown is a great practice for improving test isolation. However, this change appears to be incomplete. Other tests, such as testMigrateFromNSUserDefaults, also set _testKey2 and _testKey3 on NSUserDefaults. To ensure comprehensive cleanup and prevent any state from leaking between tests (especially in cases where a test might fail before completing), it would be best to remove all keys that are set during testing.

  [[NSUserDefaults standardUserDefaults] removeObjectForKey:_testKey1];
  [[NSUserDefaults standardUserDefaults] removeObjectForKey:_testKey2];
  [[NSUserDefaults standardUserDefaults] removeObjectForKey:_testKey3];

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants