From bd12dc318f177d67ce25c0e60eeaafe9f544bc0a Mon Sep 17 00:00:00 2001 From: Tyler Thompson Date: Sat, 11 Jun 2022 22:38:43 -0600 Subject: [PATCH 1/3] [fix-204] - Fixes #204 - TT --- .../Views/WorkflowItemWrapper.swift | 1 + .../Views/WorkflowLauncher.swift | 28 ++++----- .../Views/WorkflowView.swift | 24 ++++---- .../xcshareddata/swiftpm/Package.resolved | 6 +- .../SwiftCurrent_NavigationLinkTests.swift | 59 ++++++++++++++++++- .../SwiftCurrent_SwiftUITests.swift | 10 ++-- .../ViewInspector/ViewHostingExtensions.swift | 4 +- 7 files changed, 93 insertions(+), 39 deletions(-) diff --git a/Sources/SwiftCurrent_SwiftUI/Views/WorkflowItemWrapper.swift b/Sources/SwiftCurrent_SwiftUI/Views/WorkflowItemWrapper.swift index 81fa46a47..2f3b49c73 100644 --- a/Sources/SwiftCurrent_SwiftUI/Views/WorkflowItemWrapper.swift +++ b/Sources/SwiftCurrent_SwiftUI/Views/WorkflowItemWrapper.swift @@ -48,6 +48,7 @@ public struct WorkflowItemWrapper: View { public typealias WorkflowInput = Content.FlowRepresentableType.WorkflowInput - @State private var content: Content + @WorkflowBuilder private var content: Content @State private var onFinish = [(AnyWorkflow.PassedArgs) -> Void]() @State private var onAbandon = [() -> Void]() @State private var shouldEmbedInNavView = false @@ -49,32 +49,28 @@ public struct WorkflowLauncher: View { .onReceive(inspection.notice) { inspection.visit(self, $0) } } - init(isLaunched: Binding, startingArgs: AnyWorkflow.PassedArgs, content: () -> Content) { - self.init(isLaunched: isLaunched, startingArgs: startingArgs, content: content()) + init(isLaunched: Binding, startingArgs: AnyWorkflow.PassedArgs, @WorkflowBuilder content: () -> Content) { + _isLaunched = isLaunched + let wf = AnyWorkflow.empty + content().modify(workflow: wf) + let model = WorkflowViewModel(isLaunched: isLaunched, launchArgs: startingArgs) + _model = StateObject(wrappedValue: model) + _launcher = StateObject(wrappedValue: Launcher(workflow: wf, + responder: model, + launchArgs: startingArgs)) + self.content = content() } private init(current: Self, shouldEmbedInNavView: Bool, onFinish: [(AnyWorkflow.PassedArgs) -> Void], onAbandon: [() -> Void]) { _model = current._model _launcher = current._launcher - _content = current._content + content = current.content _isLaunched = current._isLaunched _shouldEmbedInNavView = State(initialValue: shouldEmbedInNavView) _onFinish = State(initialValue: onFinish) _onAbandon = State(initialValue: onAbandon) } - private init(isLaunched: Binding, startingArgs: AnyWorkflow.PassedArgs, content: Content) { - _isLaunched = isLaunched - let wf = AnyWorkflow.empty - content.modify(workflow: wf) - let model = WorkflowViewModel(isLaunched: isLaunched, launchArgs: startingArgs) - _model = StateObject(wrappedValue: model) - _launcher = StateObject(wrappedValue: Launcher(workflow: wf, - responder: model, - launchArgs: startingArgs)) - _content = State(wrappedValue: content) - } - private func resetWorkflow() { launcher.workflow.launch(withOrchestrationResponder: model, passedArgs: launcher.launchArgs) } diff --git a/Sources/SwiftCurrent_SwiftUI/Views/WorkflowView.swift b/Sources/SwiftCurrent_SwiftUI/Views/WorkflowView.swift index 538e2168e..337a2d4b6 100644 --- a/Sources/SwiftCurrent_SwiftUI/Views/WorkflowView.swift +++ b/Sources/SwiftCurrent_SwiftUI/Views/WorkflowView.swift @@ -78,7 +78,7 @@ public struct WorkflowView: View { */ public init(isLaunched: Binding = .constant(true), @WorkflowBuilder content: () -> WI) where Content == WorkflowLauncher, WI.FlowRepresentableType.WorkflowInput == Never { - self.init(isLaunched: isLaunched, startingArgs: .none, content: content()) + self.init(isLaunched: isLaunched, startingArgs: .none, content: content) } /** @@ -90,7 +90,7 @@ public struct WorkflowView: View { public init(isLaunched: Binding = .constant(true), launchingWith args: WI.FlowRepresentableType.WorkflowInput, @WorkflowBuilder content: () -> WI) where Content == WorkflowLauncher { - self.init(isLaunched: isLaunched, startingArgs: .args(args), content: content()) + self.init(isLaunched: isLaunched, startingArgs: .args(args), content: content) } /** @@ -102,7 +102,7 @@ public struct WorkflowView: View { public init(isLaunched: Binding = .constant(true), launchingWith args: AnyWorkflow.PassedArgs, @WorkflowBuilder content: () -> WI) where Content == WorkflowLauncher, WI.FlowRepresentableType.WorkflowInput == AnyWorkflow.PassedArgs { - self.init(isLaunched: isLaunched, startingArgs: args, content: content()) + self.init(isLaunched: isLaunched, startingArgs: args, content: content) } /** @@ -114,7 +114,7 @@ public struct WorkflowView: View { public init(isLaunched: Binding = .constant(true), launchingWith args: AnyWorkflow.PassedArgs, @WorkflowBuilder content: () -> WI) where Content == WorkflowLauncher { - self.init(isLaunched: isLaunched, startingArgs: args, content: content()) + self.init(isLaunched: isLaunched, startingArgs: args, content: content) } /** @@ -126,7 +126,7 @@ public struct WorkflowView: View { public init(isLaunched: Binding = .constant(true), launchingWith args: A, @WorkflowBuilder content: () -> WI) where Content == WorkflowLauncher, WI.FlowRepresentableType.WorkflowInput == AnyWorkflow.PassedArgs { - self.init(isLaunched: isLaunched, startingArgs: .args(args), content: content()) + self.init(isLaunched: isLaunched, startingArgs: .args(args), content: content) } /** @@ -138,7 +138,7 @@ public struct WorkflowView: View { public init(isLaunched: Binding = .constant(true), launchingWith args: A, @WorkflowBuilder content: () -> WI) where Content == WorkflowLauncher, WI.FlowRepresentableType.WorkflowInput == Never { - self.init(isLaunched: isLaunched, startingArgs: .args(args), content: content()) + self.init(isLaunched: isLaunched, startingArgs: .args(args), content: content) } /** @@ -148,7 +148,7 @@ public struct WorkflowView: View { */ public init(isLaunched: Binding = .constant(true), @WorkflowBuilder content: () -> WI) where Content == WorkflowLauncher, WI.FlowRepresentableType.WorkflowInput == AnyWorkflow.PassedArgs { - self.init(isLaunched: isLaunched, startingArgs: .none, content: content()) + self.init(isLaunched: isLaunched, startingArgs: .none, content: content) } /** @@ -157,7 +157,9 @@ public struct WorkflowView: View { - Parameter startingArgs: arguments passed to the first loaded `FlowRepresentable` in the underlying `Workflow`. - Parameter workflow: workflow to be launched; must contain `FlowRepresentable`s of type `View` */ - public init(isLaunched: Binding = .constant(true), launchingWith startingArgs: AnyWorkflow.PassedArgs = .none, workflow: AnyWorkflow) where Content == WorkflowLauncher { + public init(isLaunched: Binding = .constant(true), + launchingWith startingArgs: AnyWorkflow.PassedArgs = .none, + workflow: AnyWorkflow) where Content == WorkflowLauncher> { workflow.forEach { assert($0.value.metadata is ExtendedFlowRepresentableMetadata, "It is possible the workflow was constructed incorrectly. This represents an internal error, please file a bug at https://github.com/wwt/SwiftCurrent/issues") // swiftlint:disable:this line_length } @@ -171,7 +173,7 @@ public struct WorkflowView: View { - Parameter startingArgs: arguments passed to the first loaded `FlowRepresentable` in the underlying `Workflow`. - Parameter workflow: workflow to be launched; must contain `FlowRepresentable`s of type `View` */ - public init(isLaunched: Binding = .constant(true), launchingWith startingArgs: A, workflow: AnyWorkflow) where Content == WorkflowLauncher { + public init(isLaunched: Binding = .constant(true), launchingWith startingArgs: A, workflow: AnyWorkflow) where Content == WorkflowLauncher> { workflow.forEach { assert($0.value.metadata is ExtendedFlowRepresentableMetadata, "It is possible the workflow was constructed incorrectly. This represents an internal error, please file a bug at https://github.com/wwt/SwiftCurrent/issues") // swiftlint:disable:this line_length } @@ -181,8 +183,8 @@ public struct WorkflowView: View { private init(isLaunched: Binding, startingArgs: AnyWorkflow.PassedArgs, - content: WI) where Content == WorkflowLauncher { - _content = State(wrappedValue: WorkflowLauncher(isLaunched: isLaunched, startingArgs: startingArgs) { content }) + @WorkflowBuilder content: () -> WI) where Content == WorkflowLauncher { + _content = State(wrappedValue: WorkflowLauncher(isLaunched: isLaunched, startingArgs: startingArgs, content: content)) } private init(_ other: WorkflowView, diff --git a/SwiftCurrent.xcworkspace/xcshareddata/swiftpm/Package.resolved b/SwiftCurrent.xcworkspace/xcshareddata/swiftpm/Package.resolved index a840cf126..f3404b902 100644 --- a/SwiftCurrent.xcworkspace/xcshareddata/swiftpm/Package.resolved +++ b/SwiftCurrent.xcworkspace/xcshareddata/swiftpm/Package.resolved @@ -57,7 +57,7 @@ }, { "package": "swift-algorithms", - "repositoryURL": "https://github.com/apple/swift-algorithms", + "repositoryURL": "https://github.com/apple/swift-algorithms.git", "state": { "branch": null, "revision": "b14b7f4c528c942f121c8b860b9410b2bf57825e", @@ -87,8 +87,8 @@ "repositoryURL": "https://github.com/apple/swift-syntax.git", "state": { "branch": null, - "revision": "75e60475d9d8fd5bbc16a12e0eaa2cb01b0c322e", - "version": "0.50500.0" + "revision": "0b6c22b97f8e9320bca62e82cdbee601cf37ad3f", + "version": "0.50600.1" } }, { diff --git a/Tests/SwiftCurrent_SwiftUITests/SwiftCurrent_NavigationLinkTests.swift b/Tests/SwiftCurrent_SwiftUITests/SwiftCurrent_NavigationLinkTests.swift index bbfaeaa4d..699f7021c 100644 --- a/Tests/SwiftCurrent_SwiftUITests/SwiftCurrent_NavigationLinkTests.swift +++ b/Tests/SwiftCurrent_SwiftUITests/SwiftCurrent_NavigationLinkTests.swift @@ -33,6 +33,7 @@ final class SwiftCurrent_NavigationLinkTests: XCTestCase, View { .onFinish { _ in expectOnFinish.fulfill() } + .embedInNavigationView() } .hostAndInspect(with: \.inspection) .extractWorkflowLauncher() @@ -71,6 +72,7 @@ final class SwiftCurrent_NavigationLinkTests: XCTestCase, View { .onFinish { _ in expectOnFinish.fulfill() } + .embedInNavigationView() } .hostAndInspect(with: \.inspection) .extractWorkflowLauncher() @@ -109,6 +111,7 @@ final class SwiftCurrent_NavigationLinkTests: XCTestCase, View { .onFinish { _ in expectOnFinish.fulfill() } + .embedInNavigationView() } .hostAndInspect(with: \.inspection) .extractWorkflowLauncher() @@ -152,6 +155,7 @@ final class SwiftCurrent_NavigationLinkTests: XCTestCase, View { .onFinish { _ in expectOnFinish.fulfill() } + .embedInNavigationView() } .hostAndInspect(with: \.inspection) .extractWorkflowLauncher() @@ -196,6 +200,7 @@ final class SwiftCurrent_NavigationLinkTests: XCTestCase, View { .onFinish { _ in expectOnFinish.fulfill() } + .embedInNavigationView() } .hostAndInspect(with: \.inspection) .extractWorkflowLauncher() @@ -240,6 +245,7 @@ final class SwiftCurrent_NavigationLinkTests: XCTestCase, View { .onFinish { _ in expectOnFinish.fulfill() } + .embedInNavigationView() } .hostAndInspect(with: \.inspection) .extractWorkflowLauncher() @@ -269,7 +275,7 @@ final class SwiftCurrent_NavigationLinkTests: XCTestCase, View { WorkflowItem(FR1.self).presentationType(.navigationLink) WorkflowItem(FR1.self).presentationType(.navigationLink) WorkflowItem(FR1.self) - } + }.embedInNavigationView() } .hostAndInspect(with: \.inspection) .extractWorkflowLauncher() @@ -337,7 +343,7 @@ final class SwiftCurrent_NavigationLinkTests: XCTestCase, View { WorkflowItem(FR5.self).presentationType(.navigationLink) WorkflowItem(FR6.self).presentationType(.navigationLink) WorkflowItem(FR7.self).presentationType(.navigationLink) - } + }.embedInNavigationView() } .hostAndInspect(with: \.inspection) .extractWorkflowLauncher() @@ -364,6 +370,51 @@ final class SwiftCurrent_NavigationLinkTests: XCTestCase, View { try await wfr7.find(FR7.self).proceedInWorkflow() } + func testWorkflowCanBeAbandoned() async throws { + struct FR1: View, FlowRepresentable, Inspectable { + var _workflowPointer: AnyFlowRepresentable? + var body: some View { Text("FR1 type") } + } + struct FR2: View, FlowRepresentable, Inspectable { + var _workflowPointer: AnyFlowRepresentable? + var body: some View { Text("FR2 type") } + } + struct FR3: View, FlowRepresentable, Inspectable { + var _workflowPointer: AnyFlowRepresentable? + var body: some View { + Button("continue") { + workflow?.abandon() + } + } + } + + let wfr1 = try await MainActor.run { + WorkflowView { + WorkflowItem(FR1.self).presentationType(.navigationLink) + WorkflowItem(FR2.self).presentationType(.navigationLink) + WorkflowItem(FR3.self).presentationType(.navigationLink) + }.embedInNavigationView() + } + .hostAndInspect(with: \.inspection) + .extractWorkflowLauncher() + .extractWorkflowItemWrapper() + + let navLink = try XCTUnwrap(try? wfr1.find(ViewType.NavigationLink.self)) + try await wfr1.proceedAndCheckNavLink(on: FR1.self) + XCTAssertFalse(try navLink.isActive()) + + let wfr2 = try await wfr1.extractWrappedWrapper() + try await wfr2.proceedAndCheckNavLink(on: FR2.self) + + let wfr3 = try await wfr2.extractWrappedWrapper() + XCTAssertNoThrow(try wfr3.find(button: "continue").tap()) + + XCTAssertNoThrow(try wfr1.find(FR1.self)) + XCTAssertEqual(try wfr1.find(ViewType.NavigationLink.self).isActive(), false) + XCTAssertThrowsError(try wfr1.find(FR2.self)) + XCTAssertThrowsError(try wfr1.find(FR3.self)) + } + func testNavLinkWorkflowsCanSkipTheFirstItem() async throws { struct FR1: View, FlowRepresentable, Inspectable { var _workflowPointer: AnyFlowRepresentable? @@ -384,6 +435,7 @@ final class SwiftCurrent_NavigationLinkTests: XCTestCase, View { WorkflowItem(FR2.self).presentationType(.navigationLink) WorkflowItem(FR3.self) } + .embedInNavigationView() } .hostAndInspect(with: \.inspection) .extractWorkflowLauncher() @@ -418,6 +470,7 @@ final class SwiftCurrent_NavigationLinkTests: XCTestCase, View { WorkflowItem(FR2.self).presentationType(.navigationLink) WorkflowItem(FR3.self) } + .embedInNavigationView() } .hostAndInspect(with: \.inspection) .extractWorkflowLauncher() @@ -458,6 +511,7 @@ final class SwiftCurrent_NavigationLinkTests: XCTestCase, View { WorkflowItem(FR3.self) WorkflowItem(FR4.self) } + .embedInNavigationView() } .hostAndInspect(with: \.inspection) .extractWorkflowLauncher() @@ -500,6 +554,7 @@ final class SwiftCurrent_NavigationLinkTests: XCTestCase, View { .onFinish { _ in expectOnFinish.fulfill() } + .embedInNavigationView() } .hostAndInspect(with: \.inspection) .extractWorkflowLauncher() diff --git a/Tests/SwiftCurrent_SwiftUITests/SwiftCurrent_SwiftUITests.swift b/Tests/SwiftCurrent_SwiftUITests/SwiftCurrent_SwiftUITests.swift index ed50a5eba..50b26fb54 100644 --- a/Tests/SwiftCurrent_SwiftUITests/SwiftCurrent_SwiftUITests.swift +++ b/Tests/SwiftCurrent_SwiftUITests/SwiftCurrent_SwiftUITests.swift @@ -750,7 +750,7 @@ final class SwiftCurrent_SwiftUIConsumerTests: XCTestCase, App { typealias WorkflowViewContent = State, Never>>> let content = try XCTUnwrap(Mirror(reflecting: workflowView).descendant("_content") as? WorkflowViewContent) // Note: Only add to these exceptions if you are *certain* the property should not be @State. Err on the side of the property being @State - let exceptions = ["_model", "_launcher", "_location", "_value", "inspection", "_presentation", "_isLaunched"] + let exceptions = ["_model", "_launcher", "_location", "_value", "inspection", "_presentation", "_isLaunched", "content"] let mirror = Mirror(reflecting: content.wrappedValue) @@ -840,7 +840,7 @@ final class SwiftCurrent_SwiftUIConsumerTests: XCTestCase, App { }.hostAndInspect(with: \.inspection) XCTAssertNoThrow(try firstLauncher.find(FR1.self), "Unable to find FR1") - let fr1Wrapper = try await firstLauncher.extractWorkflowLauncher().view(AnyWorkflowItem.self).anyView().view(WorkflowItemWrapper, Never>.self) + let fr1Wrapper = try await firstLauncher.extractWorkflowLauncher().view(WorkflowItemWrapper.self).view(AnyWorkflowItem.self).anyView().view(WorkflowItemWrapper, Never>.self) let fr1LaunchStyle = try await fr1Wrapper.actualView().workflowLaunchStyle XCTAssertEqual(fr1LaunchStyle, .modal) @@ -863,7 +863,7 @@ final class SwiftCurrent_SwiftUIConsumerTests: XCTestCase, App { }.hostAndInspect(with: \.inspection) XCTAssertNoThrow(try secondLauncher.find(FR1.self), "Unable to find FR1") - let secondFr1Wrapper = try await secondLauncher.extractWorkflowLauncher().view(AnyWorkflowItem.self).anyView().view(WorkflowItemWrapper, Never>.self) + let secondFr1Wrapper = try await secondLauncher.extractWorkflowLauncher().view(WorkflowItemWrapper.self).view(AnyWorkflowItem.self).anyView().view(WorkflowItemWrapper, Never>.self) let secondFr1LaunchStyle = try await secondFr1Wrapper.actualView().workflowLaunchStyle XCTAssertEqual(secondFr1LaunchStyle, .navigationLink) } @@ -895,7 +895,7 @@ final class SwiftCurrent_SwiftUIConsumerTests: XCTestCase, App { }.hostAndInspect(with: \.inspection) XCTAssertNoThrow(try firstLauncher.find(FR1.self), "Unable to find FR1") - let fr1Wrapper = try await firstLauncher.extractWorkflowLauncher().view(AnyWorkflowItem.self).anyView().view(WorkflowItemWrapper, Never>.self) + let fr1Wrapper = try await firstLauncher.extractWorkflowLauncher().view(WorkflowItemWrapper.self).view(AnyWorkflowItem.self).anyView().view(WorkflowItemWrapper, Never>.self) let fr1PersistenceClosure = try XCTUnwrap(Mirror(reflecting: fr1Wrapper.view(WorkflowItem.self).actualView()).descendant("_flowPersistenceClosure") as? State<(AnyWorkflow.PassedArgs) -> FlowPersistence>).wrappedValue XCTAssertEqual(fr1PersistenceClosure(.none), .default) @@ -918,7 +918,7 @@ final class SwiftCurrent_SwiftUIConsumerTests: XCTestCase, App { }.hostAndInspect(with: \.inspection) XCTAssertNoThrow(try secondLauncher.find(FR1.self), "Unable to find FR1") - let secondFr1Wrapper = try await secondLauncher.extractWorkflowLauncher().view(AnyWorkflowItem.self).anyView().view(WorkflowItemWrapper, Never>.self) + let secondFr1Wrapper = try await secondLauncher.extractWorkflowLauncher().view(WorkflowItemWrapper.self).view(AnyWorkflowItem.self).anyView().view(WorkflowItemWrapper, Never>.self) let secondFr1PersistenceClosure = try XCTUnwrap(Mirror(reflecting: secondFr1Wrapper.view(WorkflowItem.self).actualView()).descendant("_flowPersistenceClosure") as? State<(AnyWorkflow.PassedArgs) -> FlowPersistence>).wrappedValue XCTAssertEqual(secondFr1PersistenceClosure(.none), .removedAfterProceeding) } diff --git a/Tests/SwiftCurrent_SwiftUITests/ViewInspector/ViewHostingExtensions.swift b/Tests/SwiftCurrent_SwiftUITests/ViewInspector/ViewHostingExtensions.swift index 1e97a706f..481110d84 100644 --- a/Tests/SwiftCurrent_SwiftUITests/ViewInspector/ViewHostingExtensions.swift +++ b/Tests/SwiftCurrent_SwiftUITests/ViewInspector/ViewHostingExtensions.swift @@ -34,7 +34,7 @@ extension View where Self: Inspectable { @available(iOS 15.0, macOS 11, tvOS 14.0, watchOS 7.0, *) extension InspectableView where View: CustomViewType & SingleViewContent { func extractWorkflowLauncher() async throws -> InspectableView>> where View.T == WorkflowView> { - let actual = try view(WorkflowLauncher.self).actualView() + let actual = try find(WorkflowLauncher.self).actualView() DispatchQueue.main.async { ViewHosting.host(view: actual) @@ -47,7 +47,7 @@ extension InspectableView where View: CustomViewType & SingleViewContent { let mirror = Mirror(reflecting: try actualView()) let model = try XCTUnwrap(mirror.descendant("_model") as? StateObject) let launcher = try XCTUnwrap(mirror.descendant("_launcher") as? StateObject) - let actual = try view(WorkflowItemWrapper.self).actualView() + let actual = try find(WorkflowItemWrapper.self).actualView() DispatchQueue.main.async { ViewHosting.host(view: actual From 807451bed6cfc7d91975fd026c6363c7f0688ab0 Mon Sep 17 00:00:00 2001 From: Tyler Thompson Date: Sat, 11 Jun 2022 22:48:39 -0600 Subject: [PATCH 2/3] [fix-204] - Fixed flakey test - TT --- .../SwiftCurrent_NavigationLinkTests.swift | 6 ++---- 1 file changed, 2 insertions(+), 4 deletions(-) diff --git a/Tests/SwiftCurrent_SwiftUITests/SwiftCurrent_NavigationLinkTests.swift b/Tests/SwiftCurrent_SwiftUITests/SwiftCurrent_NavigationLinkTests.swift index 699f7021c..9584b2358 100644 --- a/Tests/SwiftCurrent_SwiftUITests/SwiftCurrent_NavigationLinkTests.swift +++ b/Tests/SwiftCurrent_SwiftUITests/SwiftCurrent_NavigationLinkTests.swift @@ -399,9 +399,7 @@ final class SwiftCurrent_NavigationLinkTests: XCTestCase, View { .extractWorkflowLauncher() .extractWorkflowItemWrapper() - let navLink = try XCTUnwrap(try? wfr1.find(ViewType.NavigationLink.self)) try await wfr1.proceedAndCheckNavLink(on: FR1.self) - XCTAssertFalse(try navLink.isActive()) let wfr2 = try await wfr1.extractWrappedWrapper() try await wfr2.proceedAndCheckNavLink(on: FR2.self) @@ -411,8 +409,8 @@ final class SwiftCurrent_NavigationLinkTests: XCTestCase, View { XCTAssertNoThrow(try wfr1.find(FR1.self)) XCTAssertEqual(try wfr1.find(ViewType.NavigationLink.self).isActive(), false) - XCTAssertThrowsError(try wfr1.find(FR2.self)) - XCTAssertThrowsError(try wfr1.find(FR3.self)) + XCTAssertThrowsError(try wfr2.find(FR2.self)) + XCTAssertThrowsError(try wfr3.find(FR3.self)) } func testNavLinkWorkflowsCanSkipTheFirstItem() async throws { From e516ddc312a93211b44ea4300d7396be0ee6e1d5 Mon Sep 17 00:00:00 2001 From: Tyler Thompson Date: Sat, 11 Jun 2022 23:19:26 -0600 Subject: [PATCH 3/3] [fix-204] - Reduce ultra massive workflow test because of additional type complexity - TT --- ...nt_SwiftUI_WorkflowBuilderArityTests.swift | 266 +----------------- 1 file changed, 1 insertion(+), 265 deletions(-) diff --git a/Tests/SwiftCurrent_SwiftUITests/SwiftCurrent_SwiftUI_WorkflowBuilderArityTests.swift b/Tests/SwiftCurrent_SwiftUITests/SwiftCurrent_SwiftUI_WorkflowBuilderArityTests.swift index 9db8f6df9..cc238d5db 100644 --- a/Tests/SwiftCurrent_SwiftUITests/SwiftCurrent_SwiftUI_WorkflowBuilderArityTests.swift +++ b/Tests/SwiftCurrent_SwiftUITests/SwiftCurrent_SwiftUI_WorkflowBuilderArityTests.swift @@ -644,210 +644,7 @@ final class SwiftCurrent_SwiftUI_WorkflowBuilderArityTests: XCTestCase, App { var _workflowPointer: AnyFlowRepresentable? var body: some View { Text("FR10 type") } } - struct FR21: View, FlowRepresentable, Inspectable { - var _workflowPointer: AnyFlowRepresentable? - var body: some View { Text("FR1 type") } - } - struct FR22: View, FlowRepresentable, Inspectable { - var _workflowPointer: AnyFlowRepresentable? - var body: some View { Text("FR2 type") } - } - struct FR23: View, FlowRepresentable, Inspectable { - var _workflowPointer: AnyFlowRepresentable? - var body: some View { Text("FR3 type") } - } - struct FR24: View, FlowRepresentable, Inspectable { - var _workflowPointer: AnyFlowRepresentable? - var body: some View { Text("FR4 type") } - } - struct FR25: View, FlowRepresentable, Inspectable { - var _workflowPointer: AnyFlowRepresentable? - var body: some View { Text("FR5 type") } - } - struct FR26: View, FlowRepresentable, Inspectable { - var _workflowPointer: AnyFlowRepresentable? - var body: some View { Text("FR6 type") } - } - struct FR27: View, FlowRepresentable, Inspectable { - var _workflowPointer: AnyFlowRepresentable? - var body: some View { Text("FR7 type") } - } - struct FR28: View, FlowRepresentable, Inspectable { - var _workflowPointer: AnyFlowRepresentable? - var body: some View { Text("FR8 type") } - } - struct FR29: View, FlowRepresentable, Inspectable { - var _workflowPointer: AnyFlowRepresentable? - var body: some View { Text("FR9 type") } - } - struct FR30: View, FlowRepresentable, Inspectable { - var _workflowPointer: AnyFlowRepresentable? - var body: some View { Text("FR10 type") } - } - struct FR31: View, FlowRepresentable, Inspectable { - var _workflowPointer: AnyFlowRepresentable? - var body: some View { Text("FR10 type") } - } - struct FR32: View, FlowRepresentable, Inspectable { - var _workflowPointer: AnyFlowRepresentable? - var body: some View { Text("FR10 type") } - } - struct FR33: View, FlowRepresentable, Inspectable { - var _workflowPointer: AnyFlowRepresentable? - var body: some View { Text("FR10 type") } - } - struct FR34: View, FlowRepresentable, Inspectable { - var _workflowPointer: AnyFlowRepresentable? - var body: some View { Text("FR10 type") } - } - struct FR35: View, FlowRepresentable, Inspectable { - var _workflowPointer: AnyFlowRepresentable? - var body: some View { Text("FR10 type") } - } - struct FR36: View, FlowRepresentable, Inspectable { - var _workflowPointer: AnyFlowRepresentable? - var body: some View { Text("FR10 type") } - } - struct FR37: View, FlowRepresentable, Inspectable { - var _workflowPointer: AnyFlowRepresentable? - var body: some View { Text("FR10 type") } - } - struct FR38: View, FlowRepresentable, Inspectable { - var _workflowPointer: AnyFlowRepresentable? - var body: some View { Text("FR10 type") } - } - struct FR39: View, FlowRepresentable, Inspectable { - var _workflowPointer: AnyFlowRepresentable? - var body: some View { Text("FR10 type") } - } - struct FR40: View, FlowRepresentable, Inspectable { - var _workflowPointer: AnyFlowRepresentable? - var body: some View { Text("FR10 type") } - } - struct FR41: View, FlowRepresentable, Inspectable { - var _workflowPointer: AnyFlowRepresentable? - var body: some View { Text("FR1 type") } - } - struct FR42: View, FlowRepresentable, Inspectable { - var _workflowPointer: AnyFlowRepresentable? - var body: some View { Text("FR2 type") } - } - struct FR43: View, FlowRepresentable, Inspectable { - var _workflowPointer: AnyFlowRepresentable? - var body: some View { Text("FR3 type") } - } - struct FR44: View, FlowRepresentable, Inspectable { - var _workflowPointer: AnyFlowRepresentable? - var body: some View { Text("FR4 type") } - } - struct FR45: View, FlowRepresentable, Inspectable { - var _workflowPointer: AnyFlowRepresentable? - var body: some View { Text("FR5 type") } - } - struct FR46: View, FlowRepresentable, Inspectable { - var _workflowPointer: AnyFlowRepresentable? - var body: some View { Text("FR6 type") } - } - struct FR47: View, FlowRepresentable, Inspectable { - var _workflowPointer: AnyFlowRepresentable? - var body: some View { Text("FR7 type") } - } - struct FR48: View, FlowRepresentable, Inspectable { - var _workflowPointer: AnyFlowRepresentable? - var body: some View { Text("FR8 type") } - } - struct FR49: View, FlowRepresentable, Inspectable { - var _workflowPointer: AnyFlowRepresentable? - var body: some View { Text("FR9 type") } - } - struct FR50: View, FlowRepresentable, Inspectable { - var _workflowPointer: AnyFlowRepresentable? - var body: some View { Text("FR10 type") } - } - struct FR51: View, FlowRepresentable, Inspectable { - var _workflowPointer: AnyFlowRepresentable? - var body: some View { Text("FR1 type") } - } - struct FR52: View, FlowRepresentable, Inspectable { - var _workflowPointer: AnyFlowRepresentable? - var body: some View { Text("FR2 type") } - } - struct FR53: View, FlowRepresentable, Inspectable { - var _workflowPointer: AnyFlowRepresentable? - var body: some View { Text("FR3 type") } - } - struct FR54: View, FlowRepresentable, Inspectable { - var _workflowPointer: AnyFlowRepresentable? - var body: some View { Text("FR4 type") } - } - struct FR55: View, FlowRepresentable, Inspectable { - var _workflowPointer: AnyFlowRepresentable? - var body: some View { Text("FR5 type") } - } - struct FR56: View, FlowRepresentable, Inspectable { - var _workflowPointer: AnyFlowRepresentable? - var body: some View { Text("FR6 type") } - } - struct FR57: View, FlowRepresentable, Inspectable { - var _workflowPointer: AnyFlowRepresentable? - var body: some View { Text("FR7 type") } - } - struct FR58: View, FlowRepresentable, Inspectable { - var _workflowPointer: AnyFlowRepresentable? - var body: some View { Text("FR8 type") } - } - struct FR59: View, FlowRepresentable, Inspectable { - var _workflowPointer: AnyFlowRepresentable? - var body: some View { Text("FR9 type") } - } - struct FR60: View, FlowRepresentable, Inspectable { - var _workflowPointer: AnyFlowRepresentable? - var body: some View { Text("FR10 type") } - } - struct FR61: View, FlowRepresentable, Inspectable { - var _workflowPointer: AnyFlowRepresentable? - var body: some View { Text("FR1 type") } - } - struct FR62: View, FlowRepresentable, Inspectable { - var _workflowPointer: AnyFlowRepresentable? - var body: some View { Text("FR2 type") } - } - struct FR63: View, FlowRepresentable, Inspectable { - var _workflowPointer: AnyFlowRepresentable? - var body: some View { Text("FR3 type") } - } - struct FR64: View, FlowRepresentable, Inspectable { - var _workflowPointer: AnyFlowRepresentable? - var body: some View { Text("FR4 type") } - } - struct FR65: View, FlowRepresentable, Inspectable { - var _workflowPointer: AnyFlowRepresentable? - var body: some View { Text("FR5 type") } - } - struct FR66: View, FlowRepresentable, Inspectable { - var _workflowPointer: AnyFlowRepresentable? - var body: some View { Text("FR6 type") } - } - struct FR67: View, FlowRepresentable, Inspectable { - var _workflowPointer: AnyFlowRepresentable? - var body: some View { Text("FR7 type") } - } - struct FR68: View, FlowRepresentable, Inspectable { - var _workflowPointer: AnyFlowRepresentable? - var body: some View { Text("FR8 type") } - } - struct FR69: View, FlowRepresentable, Inspectable { - var _workflowPointer: AnyFlowRepresentable? - var body: some View { Text("FR9 type") } - } - struct FR70: View, FlowRepresentable, Inspectable { - var _workflowPointer: AnyFlowRepresentable? - var body: some View { Text("FR10 type") } - } - struct FR71: View, FlowRepresentable, Inspectable { - var _workflowPointer: AnyFlowRepresentable? - var body: some View { Text("FR1 type") } - } + let viewUnderTest = try await MainActor.run { WorkflowView { WorkflowItem(FR1.self) @@ -873,67 +670,6 @@ final class SwiftCurrent_SwiftUI_WorkflowBuilderArityTests: XCTestCase, App { WorkflowGroup { WorkflowItem(FR19.self) WorkflowItem(FR20.self) - WorkflowItem(FR21.self) - WorkflowItem(FR22.self) - WorkflowItem(FR23.self) - WorkflowItem(FR24.self) - WorkflowItem(FR25.self) - WorkflowItem(FR26.self) - WorkflowItem(FR27.self) - WorkflowGroup { - WorkflowItem(FR28.self) - WorkflowItem(FR29.self) - WorkflowItem(FR30.self) - WorkflowItem(FR31.self) - WorkflowItem(FR32.self) - WorkflowItem(FR33.self) - WorkflowItem(FR34.self) - WorkflowItem(FR35.self) - WorkflowItem(FR36.self) - WorkflowGroup { - WorkflowItem(FR37.self) - WorkflowItem(FR38.self) - WorkflowItem(FR39.self) - WorkflowItem(FR40.self) - WorkflowItem(FR41.self) - WorkflowItem(FR42.self) - WorkflowItem(FR43.self) - WorkflowItem(FR44.self) - WorkflowItem(FR45.self) - WorkflowGroup { - WorkflowItem(FR46.self) - WorkflowItem(FR47.self) - WorkflowItem(FR48.self) - WorkflowItem(FR49.self) - WorkflowItem(FR50.self) - WorkflowItem(FR51.self) - WorkflowItem(FR52.self) - WorkflowItem(FR53.self) - WorkflowGroup { - WorkflowItem(FR54.self) - WorkflowItem(FR55.self) - WorkflowItem(FR56.self) - WorkflowItem(FR57.self) - WorkflowItem(FR58.self) - WorkflowItem(FR59.self) - WorkflowItem(FR60.self) - WorkflowItem(FR61.self) - WorkflowItem(FR62.self) - WorkflowGroup { - WorkflowItem(FR63.self) - WorkflowItem(FR64.self) - WorkflowItem(FR65.self) - WorkflowItem(FR66.self) - WorkflowItem(FR67.self) - WorkflowItem(FR68.self) - WorkflowItem(FR69.self) - WorkflowItem(FR70.self) - WorkflowItem(FR71.self) - } - } - } - } - } } } }