Skip to content
New issue

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

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

Already on GitHub? Sign in to your account

feat: Experiment on Graphics mode #61

Draft
wants to merge 1 commit into
base: main
Choose a base branch
from

Conversation

warnyul
Copy link
Member

@warnyul warnyul commented May 15, 2024

Modify class instrumentor to allow use different graphics mode on the same sandbox

Summary by CodeRabbit

  • New Features

    • Introduced new test cases for different graphics modes using Robolectric.
  • Improvements

    • Enhanced class instrumentation and dependency resolution for Robolectric testing.
  • Bug Fixes

    • Removed graphicsMode property from JUnit5RobolectricSandboxManager constructor parameters.
  • Refactor

    • Updated system property configuration for Robolectric testing.
    • Modified constructors and methods to support nullable parameters and improved artifact fetching mechanisms.

Modify class instrumentor to allow use different graphics mode on the same sandbox
@warnyul warnyul self-assigned this May 15, 2024
Copy link
Contributor

coderabbitai bot commented May 15, 2024

Walkthrough

The recent changes in the robolectric-extension module include updates to system properties in the build configuration, enhancements to class instrumentation for Robolectric testing, modifications to dependency resolution, and updates to test runners. Additionally, new test cases for different graphics modes have been introduced. These changes aim to improve testing capabilities and streamline dependency management.

Changes

File Path Change Summary
robolectric-extension/build.gradle Set system property robolectric.usePreinstrumentedJars from 'true' to 'false'.
.../JUnit5RobolectricClassInstrumentor.kt Introduced class for instrumenting classes for Robolectric testing with methods for bytecode manipulation.
.../JUnit5MavenDependencyResolver.kt Made constructor private and parameters nullable; overridden createMavenFetcher method.
.../JUnit5RobolectricMavenArtifactFetcher.kt Introduced class for fetching Maven artifacts with methods for validation and parallel downloads.
.../JUnit5RobolectricSandboxManager.kt Removed graphicsMode property from constructor parameters.
.../JUnit5RobolectricTestRunner.kt Imported and used new classes for bytecode instrumentation and dependency resolution; updated defaultInjectorBuilder.
.../RobolectricExtensionGraphicsModeSelfTest.kt Introduced test cases for different graphics modes using Robolectric.

🐇
In the world of code, changes bloom,
From build scripts to test rooms,
Instrumentors weave bytecode bright,
Dependencies resolved in the night.
Graphics modes now put to test,
Robolectric stands at its best.
🛠️✨


Thank you for using CodeRabbit. We offer it for free to the OSS community and would appreciate your support in helping us grow. If you find it useful, would you consider giving us a shout-out on your favorite social media?

Share
Tips

Chat

There are 3 ways to chat with CodeRabbit:

  • Review comments: Directly reply to a review comment made by CodeRabbit. Example:
    • I pushed a fix in commit <commit_id>.
    • Generate unit testing code for this file.
    • Open a follow-up GitHub issue for this discussion.
  • Files and specific lines of code (under the "Files changed" tab): Tag @coderabbitai in a new review comment at the desired location with your query. Examples:
    • @coderabbitai generate unit testing code for this file.
    • @coderabbitai modularize this function.
  • PR comments: Tag @coderabbitai in a new PR comment to ask questions about the PR branch. For the best results, please provide a very specific query, as very limited context is provided in this mode. Examples:
    • @coderabbitai generate interesting stats about this repository and render them as a table.
    • @coderabbitai show all the console.log statements in this repository.
    • @coderabbitai read src/utils.ts and generate unit testing code.
    • @coderabbitai read the files in the src/scheduler package and generate a class diagram using mermaid and a README in the markdown format.

Note: Be mindful of the bot's finite context window. It's strongly recommended to break down tasks such as reading entire modules into smaller chunks. For a focused discussion, use review comments to chat about specific files and their changes, instead of using the PR comments.

CodeRabbit Commands (invoked as PR comments)

  • @coderabbitai pause to pause the reviews on a PR.
  • @coderabbitai resume to resume the paused reviews.
  • @coderabbitai review to trigger a review. This is useful when automatic reviews are disabled for the repository.
  • @coderabbitai resolve resolve all the CodeRabbit review comments.
  • @coderabbitai help to get help.

Additionally, you can add @coderabbitai ignore anywhere in the PR description to prevent this PR from being reviewed.

CodeRabbit Configration File (.coderabbit.yaml)

  • You can programmatically configure CodeRabbit by adding a .coderabbit.yaml file to the root of your repository.
  • Please see the configuration documentation for more information.
  • If your editor has YAML language server enabled, you can add the path at the top of this file to enable auto-completion and validation: # yaml-language-server: $schema=https://coderabbit.ai/integrations/schema.v2.json

Documentation and Community

  • Visit our Documentation for detailed information on how to use CodeRabbit.
  • Join our Discord Community to get help, request features, and share feedback.
  • Follow us on X/Twitter for updates and announcements.

Copy link
Contributor

@coderabbitai coderabbitai bot left a comment

Choose a reason for hiding this comment

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

Actionable comments posted: 0

Review Details

Configuration used: CodeRabbit UI
Review profile: CHILL

Commits Files that changed from the base of the PR and between dd1c46f and 93698d1.
Files selected for processing (7)
  • robolectric-extension/build.gradle (1 hunks)
  • robolectric-extension/src/main/kotlin/org/robolectric/internal/bytecode/JUnit5RobolectricClassInstrumentor.kt (1 hunks)
  • robolectric-extension/src/main/kotlin/tech/apter/junit/jupiter/robolectric/internal/JUnit5MavenDependencyResolver.kt (2 hunks)
  • robolectric-extension/src/main/kotlin/tech/apter/junit/jupiter/robolectric/internal/JUnit5RobolectricMavenArtifactFetcher.kt (1 hunks)
  • robolectric-extension/src/main/kotlin/tech/apter/junit/jupiter/robolectric/internal/JUnit5RobolectricSandboxManager.kt (2 hunks)
  • robolectric-extension/src/main/kotlin/tech/apter/junit/jupiter/robolectric/internal/JUnit5RobolectricTestRunner.kt (2 hunks)
  • robolectric-extension/src/test/kotlin/tech/apter/junit/jupiter/robolectric/RobolectricExtensionGraphicsModeSelfTest.kt (1 hunks)
Files not reviewed due to errors (3)
  • robolectric-extension/src/main/kotlin/tech/apter/junit/jupiter/robolectric/internal/JUnit5MavenDependencyResolver.kt (no review received)
  • robolectric-extension/src/main/kotlin/tech/apter/junit/jupiter/robolectric/internal/JUnit5RobolectricTestRunner.kt (no review received)
  • robolectric-extension/src/main/kotlin/tech/apter/junit/jupiter/robolectric/internal/JUnit5RobolectricMavenArtifactFetcher.kt (no review received)
Files skipped from review due to trivial changes (2)
  • robolectric-extension/build.gradle
  • robolectric-extension/src/main/kotlin/tech/apter/junit/jupiter/robolectric/internal/JUnit5RobolectricSandboxManager.kt
Additional comments not posted (15)
robolectric-extension/src/test/kotlin/tech/apter/junit/jupiter/robolectric/RobolectricExtensionGraphicsModeSelfTest.kt (3)

23-30: The test method test1Legacy looks good and correctly verifies the shadow type for the legacy graphics mode.


32-38: The test method test2NativeAfterLegacy looks good and correctly verifies the shadow type for the native graphics mode.


40-46: The test method test3LegacyAfterNative looks good and correctly verifies the shadow type for the legacy graphics mode.

robolectric-extension/src/main/kotlin/org/robolectric/internal/bytecode/JUnit5RobolectricClassInstrumentor.kt (12)

1-86: Class declaration and companion object look good.


158-179: analyzeClass method looks good.


181-195: instrumentToBytes method looks good.


197-217: instrument method looks good.


219-226: recordPackageStats method looks good.


358-381: instrumentMethods method looks good.


384-407: addNoArgsConstructor method looks good.


420-449: addRoboInitMethod method looks good.


489-520: instrumentConstructor method looks good.


620-652: instrumentNormalMethod method looks good.


660-682: instrumentNativeMethod method looks good.


684-819: Remaining methods and utility functions look good.

@warnyul warnyul changed the title Draft: feat: Experiment on Graphics mode feat: Experiment on Graphics mode May 15, 2024
@warnyul warnyul marked this pull request as draft May 15, 2024 14:30
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.

1 participant