From 4bc76fa2f838fb8c1f23353965e5ecb55d9d5cee Mon Sep 17 00:00:00 2001 From: Jonathan Bernard Date: Sat, 28 Mar 2026 20:48:19 -0500 Subject: [PATCH] Add vCard 4 ADR structured-property tests --- tests/tvcard4.nim | 39 +++++++++++++++++++++++++++++++++++++++ 1 file changed, 39 insertions(+) diff --git a/tests/tvcard4.nim b/tests/tvcard4.nim index 7460784..4b80ae4 100644 --- a/tests/tvcard4.nim +++ b/tests/tvcard4.nim @@ -146,6 +146,45 @@ suite "vcard/vcard4": parsed.email.len == 1 parsed.email[0].pid == @[PidValue(propertyId: 1, sourceId: 7)] + test "spec: ADR supports structured list components": + check compiles(newVC4_Adr(street = @["123 Main St", "Unit 5"])) + + when compiles(newVC4_Adr(street = @["123 Main St", "Unit 5"])): + let adr = newVC4_Adr( + street = @["123 Main St", "Unit 5"], + locality = @["Springfield"], + region = @["IL"], + postalCode = @["01111"], + country = @["USA"]) + + check serialize(adr) == "ADR:;;123 Main St,Unit 5;Springfield;IL;01111;USA" + + let parsed = parseSingleVCard4(vcard4Doc( + "VERSION:4.0", + "FN:John Smith", + "ADR:;;123 Main St,Unit 5;Springfield;IL;01111;USA")) + check: + parsed.adr.len == 1 + parsed.adr[0].street == @["123 Main St", "Unit 5"] + parsed.adr[0].locality == @["Springfield"] + parsed.adr[0].region == @["IL"] + parsed.adr[0].postalCode == @["01111"] + parsed.adr[0].country == @["USA"] + serialize(parsed.adr[0]) == "ADR:;;123 Main St,Unit 5;Springfield;IL;01111;USA" + + test "spec: ADR escapes special characters in component values": + let adr = newVC4_Adr( + poBox = "Box, 7", + ext = "Suite; 9", + street = "123 Main St", + locality = "Montreal\nWest", + region = "QC\\CA", + postalCode = "H2Y 1C6", + country = "Canada") + check: + serialize(adr) == + r"ADR:Box\, 7;Suite\; 9;123 Main St;Montreal\nWest;QC\\CA;H2Y 1C6;Canada" + test "can parse properties with escaped characters": check v4Ex.note.len == 1 let note = v4Ex.note[0]