From a39c73f0efb9f2990bff9d9a1f0d3f662c168659 Mon Sep 17 00:00:00 2001 From: Pyry Jahkola Date: Fri, 29 Aug 2025 22:34:01 +0300 Subject: [PATCH] Add failing test using store.publisher in makeUIView --- .../StorePerceptionTests.swift | 23 +++++++++++++++++++ 1 file changed, 23 insertions(+) diff --git a/Tests/ComposableArchitectureTests/StorePerceptionTests.swift b/Tests/ComposableArchitectureTests/StorePerceptionTests.swift index b99bb3df0320..3029841f3b03 100644 --- a/Tests/ComposableArchitectureTests/StorePerceptionTests.swift +++ b/Tests/ComposableArchitectureTests/StorePerceptionTests.swift @@ -68,6 +68,27 @@ final class StorePerceptionTests: BaseTCATestCase { render(FeatureView()) } + @MainActor + func testPerceptionCheck_ViewRepresentable_publisher() { + #if canImport(UIKit) + struct ViewRepresentable: UIViewRepresentable { + let store = Store(initialState: Feature.State()) { + Feature() + } + func makeUIView(context: Context) -> UILabel { + let label = UILabel() + let cancellable = store.publisher.sink { [weak label] state in + label?.text = "\(state.count)" + } + objc_setAssociatedObject(label, cancellableKey, cancellable, .OBJC_ASSOCIATION_RETAIN_NONATOMIC) + return label + } + func updateUIView(_ view: UILabel, context: Context) {} + } + render(ViewRepresentable()) + #endif + } + @MainActor private func render(_ view: some View) { let image = ImageRenderer(content: view).cgImage @@ -75,6 +96,8 @@ final class StorePerceptionTests: BaseTCATestCase { } } +@MainActor private let cancellableKey = malloc(1)! + @Reducer private struct Feature { @ObservableState