import Foundation @main struct ExpensePreviewTests { static func rejects(_ action: () throws -> Void) { do { try action() preconditionFailure("Unexpected success") } catch { precondition(!error.localizedDescription.isEmpty) } } static func main() throws { let root = FileManager.default.temporaryDirectory.appendingPathComponent(UUID().uuidString) try FileManager.default.createDirectory(at: root, withIntermediateDirectories: true) defer { try? FileManager.default.removeItem(at: root) } let source = root.appendingPathComponent("组 模板.XLSX") let data = Data("test worksheet bytes".utf8) try data.write(to: source) let accepted = try ExpenseTemplateImportSource.validate([source]) precondition(accepted == source) rejects { _ = try ExpenseTemplateImportSource.validate([]) } rejects { _ = try ExpenseTemplateImportSource.validate([source, source]) } rejects { _ = try ExpenseTemplateImportSource.validate([root]) } rejects { _ = try ExpenseTemplateImportSource.validate([URL(string: "https://example.invalid/template.xlsx")!]) } rejects { _ = try ExpenseTemplateImportSource.validate([root.appendingPathComponent("missing.xlsx")]) } let empty = root.appendingPathComponent("empty.xlsx") try Data().write(to: empty) rejects { _ = try ExpenseTemplateImportSource.validate([empty]) } let oldFormat = root.appendingPathComponent("old.xls") try data.write(to: oldFormat) rejects { _ = try ExpenseTemplateImportSource.validate([oldFormat]) } let oversized = root.appendingPathComponent("large.xlsx") try Data(count: 20 * 1024 * 1024 + 1).write(to: oversized) rejects { _ = try ExpenseTemplateImportSource.validate([oversized]) } let request: [String: Any] = ["purpose": "交通", "amount": "100.30", "payee": ["recipient": "测试"]] let preview = PreparedExpensePreview(file: source, requestDigest: try PreparedExpensePreview.digest(request), fileDigest: ExpenseTemplateStorage.fingerprint(data), templateName: "测试", uncalculatedCells: []) let verified = try preview.verifiedData(request: request) precondition(verified == data) var changed = request changed["destination"] = "/different/output.xlsx" let relocated = try preview.verifiedData(request: changed) precondition(relocated == data) changed["payee"] = ["recipient": "新收款人"] rejects { _ = try preview.verifiedData(request: changed) } changed = request changed["amount"] = "444.00" rejects { _ = try preview.verifiedData(request: changed) } changed = request changed["templateMapping"] = ["purpose": "D"] rejects { _ = try preview.verifiedData(request: changed) } try Data("changed file".utf8).write(to: source) rejects { _ = try preview.verifiedData(request: request) } preview.remove() precondition(!FileManager.default.fileExists(atPath: source.path)) rejects { _ = try preview.verifiedData(request: request) } print("Template drop validation, preview identity, stale input and temporary cleanup tests passed") } }