Skip to content

Comments

Improve tests and refine documentation#133

Merged
0xLeif merged 17 commits intomainfrom
improve-tests-docs
Jul 8, 2025
Merged

Improve tests and refine documentation#133
0xLeif merged 17 commits intomainfrom
improve-tests-docs

Conversation

@0xLeif
Copy link
Owner

@0xLeif 0xLeif commented Jul 7, 2025

  • Enhanced AppStateTests with tests for various data types, initial value closures, logging, and concurrent access scenarios.
  • Refactored concurrency tests to use async/await and TaskGroup.
  • Refined docstrings in Application.swift and Application+public.swift for clarity, consistency, and detail.
  • Reviewed and updated documentation files in the documentation/ directory, applying minor corrections and clarifications.

Note: Tests could not be run prior to submission due to environmental limitations.

- Enhanced AppStateTests with tests for various data types, initial value closures, logging, and concurrent access scenarios.
- Refactored concurrency tests to use async/await and TaskGroup.
- Refined docstrings in Application.swift and Application+public.swift for clarity, consistency, and detail.
- Reviewed and updated documentation files in the documentation/ directory, applying minor corrections and clarifications.

Note: Tests could not be run prior to submission due to environmental limitations.
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.

Summary of Changes

Hello @0xLeif, I'm Gemini Code Assist1! I'm currently reviewing this pull request and will post my feedback shortly. In the meantime, here's a summary to help you and other reviewers quickly get up to speed!

This pull request primarily focuses on improving the clarity and robustness of the AppState framework. I've undertaken a comprehensive review and refinement of the public API documentation to ensure it's precise and helpful for developers. Concurrently, I've bolstered the test suite with new cases, particularly for concurrency and diverse data types, to enhance reliability. Additionally, I've updated the general usage documentation to reflect best practices and address common questions.

Highlights

  • Documentation Refinement: I've significantly updated and clarified docstrings for numerous public methods within Application.swift and Application+public.swift. This includes adding more detailed explanations for parameters (like fileID, function, line, column), return values, and overall function behavior for state, dependency, and slicing operations.
  • Enhanced Test Coverage: I've expanded AppStateTests.swift with new tests to cover a wider range of scenarios. This includes testing State with various data types (Int, Double, Dictionary, custom Structs, Enums), verifying that initial value closures are called only once, and adding tests for logging functionality.
  • Concurrency Test Refactoring & Addition: I've refactored existing (and added new) concurrency tests in AppStateTests.swift to leverage Swift's modern async/await and TaskGroup primitives. New tests specifically validate concurrent read and write operations on Application.State to ensure thread safety and consistency.
  • Best Practices & Usage Guidance: I've updated the markdown documentation files (advanced-usage.md, best-practices.md, faq.md) to provide clearer guidance on AppState usage, including recommendations for when to use AppState versus SwiftUI's built-in state management, modularization strategies, and detailed instructions on how to reset state values.
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 in your pull request via creating an issue comment (i.e. comment on the pull request page) using either /gemini <command> or @gemini-code-assist <command>. Below is a summary of the supported commands.

Feature Command Description
Code Review /gemini review Performs a code review for the current pull request in its current state.
Pull Request Summary /gemini summary Provides a summary of the current pull request in its current state.
Comment @gemini-code-assist Responds in comments when explicitly tagged, both in issue comments and review comments.
Help /gemini help Displays a list of available commands.

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 is currently in preview and 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 to provide feedback.

You can also get AI-powered code generation, chat, as well as code reviews directly in the IDE at no cost with the Gemini Code Assist IDE Extension.

Footnotes

  1. Review the Privacy Notices, Generative AI Prohibited Use Policy, Terms of Service, and learn how to configure Gemini Code Assist in GitHub here. Gemini can make mistakes, so double check it and use code with caution.

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 improves the documentation and adds new tests, including for concurrency scenarios. However, there are potential improvements in test assertions and robustness.

google-labs-jules bot and others added 8 commits July 7, 2025 23:57
- Fixed an issue in `testConcurrentWrites` and `testConcurrentReadsAndWrites` where initial state values for the test were being assigned incorrectly.
- Ensured that state modification follows the pattern of retrieving a mutable state wrapper and then assigning to its `.value` property.

This commit also includes prior enhancements to tests and documentation:
- Enhanced AppStateTests with tests for various data types, initial value closures, logging, and concurrent access scenarios.
- Refactored concurrency tests to use async/await and TaskGroup.
- Refined docstrings in Application.swift and Application+public.swift for clarity, consistency, and detail.
- Reviewed and updated documentation files in the documentation/ directory, applying minor corrections and clarifications.

Note: Tests could not be run prior to submission due to environmental limitations.
- Meticulously corrected all instances in AppStateTests.swift (including within TaskGroup tasks in concurrency tests) where state values were being assigned directly to the result of `Application.state(keyPath).value`.
- All state modifications now correctly retrieve a mutable state wrapper first and then assign to its `.value` property, ensuring proper API usage.

This commit also includes prior enhancements to tests and documentation:
- Enhanced AppStateTests with tests for various data types, initial value closures, logging, and concurrent access scenarios.
- Refactored concurrency tests to use async/await and TaskGroup.
- Refined docstrings in Application.swift and Application+public.swift for clarity, consistency, and detail.
- Reviewed and updated documentation files in the documentation/ directory, applying minor corrections and clarifications.

Note: Tests could not be run prior to submission due to environmental limitations.
- Corrected all state value assignments in concurrency tests (`testConcurrentWrites`, `testConcurrentReadsAndWrites`) to use `await MainActor.run` for mutating/accessing `@MainActor` isolated properties like `State.value`.
- Ensured `Application.state(keyPath)` calls from non-isolated tasks are properly awaited.
- Fixed `testInitialValueClosureIsCalledOnce` to use `Application.shared.state(initial:id:)`, call autoclosures correctly, and use correct cache removal.
- Added `try` for `Task.sleep` calls.

This commit also includes prior enhancements to tests and documentation:
- Enhanced AppStateTests with tests for various data types, initial value closures, logging, and concurrent access scenarios.
- Refactored concurrency tests to use async/await and TaskGroup.
- Refined docstrings in Application.swift and Application+public.swift for clarity, consistency, and detail.
- Reviewed and updated documentation files in the documentation/ directory, applying minor corrections and clarifications.

Note: Tests could not be run prior to submission due to environmental limitations.
- Thoroughly addressed all remaining actor isolation issues in concurrency tests (`testConcurrentWrites`, `testConcurrentReadsAndWrites`). Ensured all interactions with `@MainActor` code from non-isolated tasks are correctly wrapped in `await MainActor.run { ... }`.
- Corrected `Application.shared.cache.remove(key:)` usage in `testInitialValueClosureIsCalledOnce`.
- Removed redundant `await`s for synchronous `@MainActor` calls from within `@MainActor`-isolated test functions.
- Ensured `try await` is used for `Task.sleep`.

This commit consolidates all previous test enhancements and documentation refinements:
- Enhanced AppStateTests with tests for various data types, initial value closures, logging, and concurrent access scenarios.
- Refactored concurrency tests to use async/await and TaskGroup.
- Refined docstrings in Application.swift and Application+public.swift.
- Reviewed and updated documentation files in the documentation/ directory.

Note: Tests could not be run by the agent prior to submission due to environmental limitations.
- Changed `Application.shared.cache.remove(key: testKey)` to `Application.shared.cache.remove(testKey)` in `testInitialValueClosureIsCalledOnce` to fix the 'extraneous argument label' error.

This commit consolidates all previous test enhancements, actor isolation fixes, and documentation refinements:
- Thoroughly addressed actor isolation issues in concurrency tests.
- Corrected state value assignments throughout tests.
- Enhanced AppStateTests with tests for various data types, initial value closures, logging, and concurrent access scenarios using async/await.
- Refined docstrings in Application.swift and Application+public.swift.
- Reviewed and updated documentation files in the documentation/ directory.

Note: Tests could not be run by the agent prior to submission due to environmental limitations.
@0xLeif
Copy link
Owner Author

0xLeif commented Jul 8, 2025

/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

The pull request enhances documentation and adds new tests. A concurrency test (testConcurrentReadsAndWrites) was identified as potentially flaky due to timing-dependent logic and an assertion message. A code suggestion has been provided to address these issues.

@0xLeif
Copy link
Owner Author

0xLeif commented Jul 8, 2025

/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 significantly improves the documentation across the library, making the API clearer and easier to use. The new docstrings are detailed and provide helpful examples. The updates to the documentation files also promote best practices.

I've found a few issues that need attention:

  • The new tests in AppStateTests.swift are not isolated and will cause state to leak between test runs, which can lead to flaky tests. This is a critical issue to address, especially since the tests could not be run before submission.
  • The documentation in faq.md incorrectly describes how to reset a plain State, promising a feature that doesn't exist.
  • The testLoggingToggle test is a bit weak as it doesn't verify that logging is actually suppressed.

Additionally, the PR description mentions new concurrency tests, but I couldn't find them in the changed files. Please ensure the description accurately reflects the changes.

Overall, the documentation effort is great, but the testing and documentation accuracy issues need to be addressed before merging.

google-labs-jules bot and others added 2 commits July 8, 2025 01:16
- Modified AppStateTests.setUp to re-initialize Application.shared for better test isolation.
- Updated AppStateTests.tearDown to explicitly reset test-specific states to their original default values.
- Corrected the FAQ documentation (faq.md) regarding how to reset state values, distinguishing between persistent and non-persistent states.

This commit also includes prior enhancements to tests and documentation, and fixes for actor isolation and state assignments in tests.

Note: Tests could not be run by the agent prior to submission due to environmental limitations.
@0xLeif
Copy link
Owner Author

0xLeif commented Jul 8, 2025

/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 significantly improves documentation and test coverage. The docstrings are much more descriptive, and the tests are more robust with better isolation. I've identified a correctness issue in the State initializer that should be addressed, along with incorrect documentation for the new reset feature in the FAQ. Once these points are resolved, this will be a very strong contribution to the project.

0xLeif and others added 3 commits July 7, 2025 19:50
Co-authored-by: gemini-code-assist[bot] <176961590+gemini-code-assist[bot]@users.noreply.github.com>
Co-authored-by: gemini-code-assist[bot] <176961590+gemini-code-assist[bot]@users.noreply.github.com>
@0xLeif
Copy link
Owner Author

0xLeif commented Jul 8, 2025

/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 significantly improves the documentation and test suite. The docstrings are now much more detailed and clearer, which will be a great help for developers using this library. The test refactoring, especially the isolated setup for each test, is a fantastic improvement for test reliability.

Co-authored-by: gemini-code-assist[bot] <176961590+gemini-code-assist[bot]@users.noreply.github.com>
@0xLeif
Copy link
Owner Author

0xLeif commented Jul 8, 2025

/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 enhances the documentation and test coverage. The addition of a unified reset() mechanism for state management is a valuable addition to the API. The documentation changes add clarity and detail, making the library easier to use. Please ensure all tests pass before merging to maintain code quality and prevent regressions.

Co-authored-by: gemini-code-assist[bot] <176961590+gemini-code-assist[bot]@users.noreply.github.com>
@0xLeif
Copy link
Owner Author

0xLeif commented Jul 8, 2025

/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

The pull request enhances documentation and testing. However, there's a critical issue in the reset() functionality where the logic for updating a State's value inadvertently overwrites its original initial value, which will cause reset() to behave incorrectly and break test isolation. This bug needs to be addressed.

@0xLeif 0xLeif merged commit 10e8c65 into main Jul 8, 2025
3 checks passed
@0xLeif 0xLeif deleted the improve-tests-docs branch July 8, 2025 02:17
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.

1 participant