#if canImport(SwiftUI) import ComposableArchitecture2 import SwiftUI import Testing @testable import ComposableForms @Suite struct FormViewTests { @Test @MainActor func fieldBindingSyntaxBuilds() { let store = Store(initialState: ViewTestForm.State(value: ViewTestValue())) { ViewTestForm(fields: []) } let view = ComposableForm(store) { FormField(\.name) { $field in TextField("Name", text: $field) .submitLabel(.next) } } _ = view } @Test @MainActor func fieldStyleSyntaxBuilds() { let store = Store(initialState: ViewTestForm.State(value: ViewTestValue())) { ViewTestForm(fields: []) } let view = ComposableForm(store) { FormField(\.name) { $field in TextField("Name", text: $field) } } .formFieldStyle(ViewTestFormFieldStyle()) _ = view } @Test @MainActor func scopedFieldIDsMatchFormDefinitionIDs() { let fields: [FormViewFieldDefinition] = FormScope(\.profile) { FormField(\.displayName) { $field in TextField("Display name", text: $field) } } #expect( fields.map(\.id) == [ AnyHashable( ScopedFormFieldID( scope: AnyHashable(\ViewTestValue.profile), field: AnyHashable(\ViewTestProfile.displayName) ) ), ] ) } } private typealias ViewTestForm = ComposableForms.Form private struct ViewTestValue: Equatable { var name = "" var profile = ViewTestProfile() } private struct ViewTestProfile: Equatable { var displayName = "" } private struct ViewTestFormFieldStyle: FormFieldStyle { func makeBody(configuration: FormFieldStyleConfiguration) -> some View { configuration.content } } #endif