Add a cross-import overlay with AppKit to allow attaching NSImages.#869
Merged
Conversation
Contributor
Author
|
@swift-ci test |
This PR adds on to the Core Graphics cross-import overlay added in #827 to allow attaching instances of `NSImage` to a test. `NSImage` is a more complicated animal because it is not `Sendable`, but we don't want to make a (potentially very expensive) deep copy of its data until absolutely necessary. So we check inside the image to see if its contained representations are known to be safely copyable (i.e. copies made with `NSCopying` do not share any mutable state with their originals.) If it looks safe to make a copy of the image by calling `copy()`, we do so; otherwise, we try to make a deep copy of the image. Due to how Swift implements polymorphism in protocol requirements, and because we don't really know what they're doing, subclasses of `NSImage` just get a call to `copy()` instead of deep introspection. `UIImage` support will be implemented in a separate PR. > [!NOTE] > Attachments remain an experimental feature.
5b3df04 to
122e117
Compare
Contributor
Author
|
@swift-ci test |
briancroom
approved these changes
Jul 2, 2025
Contributor
Author
|
@swift-ci test Linux |
Contributor
Author
|
@swift-ci test |
1 similar comment
Contributor
Author
|
@swift-ci test |
stmontgomery
reviewed
Jul 2, 2025
stmontgomery
left a comment
Contributor
There was a problem hiding this comment.
I know it's already merged but I had just a couple small comments that are relevant now but weren't when the PR was first posted. Hopefully we can do a fix-up PR or incorporate them into some follow-up work.
grynspan
added a commit
that referenced
this pull request
Jul 2, 2025
The PR (#869) that just added the AppKit overlay for `NSImage` was a bit stale. This PR corrects a couple of bugs that snuck in due to its age and the resulting bit rot.
2 tasks
grynspan
added a commit
that referenced
this pull request
Jul 2, 2025
The PR (#869) that just added the AppKit overlay for `NSImage` was a bit stale. This PR corrects a couple of bugs that snuck in due to its age and the resulting bit rot. ### Checklist: - [x] Code and documentation should follow the style of the [Style Guide](https://github.com/apple/swift-testing/blob/main/Documentation/StyleGuide.md). - [x] If public symbols are renamed or modified, DocC references should be updated.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
This PR adds on to the Core Graphics cross-import overlay added in #827 to allow attaching instances of
NSImageto a test.NSImageis a more complicated animal because it is notSendable, but we don't want to make a (potentially very expensive) deep copy of its data until absolutely necessary. So we check inside the image to see if its contained representations are known to be safely copyable (i.e. copies made withNSCopyingdo not share any mutable state with their originals.) If it looks safe to make a copy of the image by callingcopy(), we do so; otherwise, we try to make a deep copy of the image.Due to how Swift implements polymorphism in protocol requirements, and because we don't really know what they're doing, subclasses of
NSImagejust get a call tocopy()instead of deep introspection.UIImagesupport will be implemented in a separate PR.Note
Image attachments remain an experimental feature.
Checklist: