import Foundation @main struct TemplateMappingValidationTests { static func main() { for value in ["A", "c", "IV"] { precondition(TemplateMappingValidation.column(value)) } for value in ["", "A1", "IW", "1", "=A"] { precondition(!TemplateMappingValidation.column(value)) } for value in ["C23", "iv2000", "A1"] { precondition(TemplateMappingValidation.address(value)) } for value in ["A0", "A2001", "A01", "IW1", "C", "C23:D24"] { precondition(!TemplateMappingValidation.address(value)) } var mapping = ExpenseTemplateMapping(sheetName: "Sheet", columns: ["purpose": "C", "amount": "H"], cells: ["recipient": "C23"], signatureCells: "A30,D30") precondition(TemplateMappingValidation.issues(mapping).isEmpty) mapping.cells["bankName"] = " " precondition(TemplateMappingValidation.issues(mapping).isEmpty) mapping.columns["amount"] = "C" precondition(!TemplateMappingValidation.issues(mapping).isEmpty) mapping.columns["amount"] = "H" mapping.cells["recipient"] = "C10" precondition(!TemplateMappingValidation.issues(mapping).isEmpty) mapping.cells["recipient"] = "C23" mapping.clearCells = "C23" precondition(!TemplateMappingValidation.issues(mapping).isEmpty) mapping.clearCells = "" mapping.endRow = 8 precondition(!TemplateMappingValidation.issues(mapping).isEmpty) precondition(TemplateMappingValidation.references("A1,B2; C3\nD4") == ["A1", "B2", "C3", "D4"]) print("Template column/address bounds, duplicate targets and row validation passed") } }