summaryrefslogtreecommitdiff
path: root/tests
AgeCommit message (Collapse)Author
2023-01-06email: Support Date fields with missing seconds.Andrew Whatson
* email/email.scm (parse-email-headers): Extend the date-time parser to match when seconds are missing, defaulting to "0". * tests/email.scm ("parse Date", "parse Date without seconds"): New tests. Signed-off-by: Arun Isaac <arunisaac@systemreboot.net>
2023-01-03tests: Import (srfi srfi-64) in base64.scm.Arun Isaac
* tests/base64.scm: Import (srfi srfi-64).
2023-01-03email: Support quoted-printable CR LF sequences.Andrew Whatson
* email/quoted-printable.scm (quoted-printable-decode): Ignore "=\r\n" sequences in the input. * tests/quoted-printable.scm ("quoted-printable decoding of soft line breaks (=\\n)", "quoted-printable decoding of soft line breaks (=\\r\\n)"): New tests. Signed-off-by: Arun Isaac <arunisaac@systemreboot.net>
2021-10-24email: Handle Received header with two tokens but no timestamp.Arun Isaac
* email/email.scm (parse-email-headers): Match Received header with timestamp more precisely. * tests/email.scm ("Parse Received header with two tokens but no timestamp"): No test.
2021-10-24tests: Return trace with only one Receieved header as a list of lists.Arun Isaac
* tests/email.scm ("Trace with only one Received header must be a list of lists, not a list"): New test.
2021-10-24email: Handle unrecognized Content-Transfer-Encoding headers.Arun Isaac
* email/email.scm (handle-invalid-headers): New function. (parse-email-headers): Handle invalid headers. * tests/email.scm ("Assume application/octet-stream Content-Type if Content-Transfer-Encoding is unrecognized"): New test.
2021-10-24tests: Paginate tests/email.scm.Arun Isaac
tests/email.scm is getting really long. Pagination make it easier to understand. * tests/email.scm: Split into three pages---Emails, Email addresses and MIME encoded words.
2021-03-15email: Use only cfws-captured-words in obs-phrase.Arun Isaac
* email/email.scm (obs-phrase): Replace word with cfws-captured-word. * tests/email.scm ("Parse names with more than two words"): New test.
2020-12-06tests: Return a list of Received headers for trace.Arun Isaac
* tests/email.scm ("Trace with only one Received header should be a list of received traces, not a single received trace"): New test.
2020-12-06tests: Parse obsolete Received header.Arun Isaac
* tests/email.scm ("Parse obsolete Received header"): New test.
2020-12-05tests: Add example from RFC5322 A.6.3.Arun Isaac
* tests/email.scm ("RFC5322 A.6.3. Obsolete white space and comments"): New test.
2020-12-05email: Do not capture cfws in atoms and dot-atoms.Arun Isaac
* email/email.scm (define-atom-pattern): Do not capture cfws unless specified. (atom): Do not specify cfws. (define-dot-atom-pattern): Do not capture cfws. (define-word-pattern): New macro. (cfws-captured-atom, cfws-captured-word): New patterns. (obs-phrase): Use cfws-captured-word. (received-token): Capture all. (parse-mime-entity): Post process received and received-token. * tests/email.scm ("parse email headers"): Fix test.
2020-12-05email: Support obsolete date and time.Arun Isaac
* email/email.scm (obs-day-of-week, obs-day, obs-year, obs-hour, obs-minute, obs-second, obs-zone): New macros. (day-of-week, day, year, hours, minutes, seconds, zone): Include obsolete pattern. (parse-email-headers): Handle obsolete two and three digit years, and alphabetic time zone specifiers. * tests/email.scm ("RFC5322 A.6.2. Obsolete dates"): New test.
2020-12-05email: Support obsolete addressing.Arun Isaac
* email/email.scm (obs-qp, obs-fws, obs-no-ws-ctl, obs-ctext, obs-qtext, obs-phrase, obs-local-part, obs-dtext, obs-domain, obs-domain-list, obs-route, obs-angle-addr, captured-atom, captured-obs-domain, captured-domain, obs-mbox-list, obs-group-list, obs-addr-list, obs-id-left, obs-id-right): New patterns. (quoted-pair, fws, ctext, qtext, phrase, dtext, define-angle-addr-pattern, mailbox-list, group-list, address-list, define-field-pattern, from, sender, bcc, id-left, id-right, resent-from, resent-sender, resent-bcc, obs-resent-rply): Include obsolete pattern. (define-printable-ascii-character-pattern-with-obsolete, define-atom-pattern, define-obs-domain-pattern): New macros. (define-domain-pattern): Accept obs-domain as a new argument. (fields): Include obs-resent-rply. * tests/email.scm ("RFC5322 A.6.1. Obsolete addressing"): New test. ("parse email addresses with period in name"): Mark as passing.
2020-12-04tests: Parse email addresses with period in name.Arun Isaac
* tests/email.scm ("parse email addresses with period in name"): New test. Reported-by: Ricardo Wurmus <rekado@elephly.net>
2020-05-25tests: Test inputs of different lengths.Arun Isaac
* tests/base64.scm ("base64 random bytevector: base64-encode and base64-decode are inverses of each other", "base64 random bytevector: encoded output should not be more than 76 columns wide", "base64 random bytevector: encoded output must only consist of characters from the base64 alphabet"): Test inputs of different lengths. * tests/quoted-printable.scm ("quoted-printable random bytevector: quoted-printable-encode and quoted-printable-decode are inverses of each other", "quoted-printable random bytevector: encoded output should not be more than 76 columns wide", "quoted-printable random bytevector: encoded output must only consist of printable ASCII characters", "q-encoding random bytevector: q-encoding-encode and q-encoding-decode are inverses of each other"): Test inputs of different lengths.
2020-05-25tests: Add tests for (email base64).Arun Isaac
* tests/encoding.scm: Move common code for encoding tests to this new file. * tests/quoted-printable.scm: Load encoding.scm. * tests/base64.scm: New file. * Makefile.am (SCM_TESTS): Register tests/base64.scm.
2020-05-25utils: Do not return eof if matched at beginning.Arun Isaac
* email/utils.scm (read-while, read-bytes-till): Do not return eof if matched at beginning. Return empty string or bytevector respectively. * tests/utils.scm ("read-bytes-till returns empty bytevector on match at beginning", "read-while returns empty string on match at beginning"): New tests.
2019-12-21tests: Return References header with only one reference as a singleton list.Arun Isaac
* tests/email.scm ("References header with only one reference must be a singleton list, not a string"): New test.
2019-12-04tests: Title case header name.Arun Isaac
* tests/email.scm ("Keywords header must be a list"): Title case header name. Remove unnecessary blank line.
2019-12-04email: Handle blank Subject headers.Arun Isaac
* email/email.scm (post-process-fields): Treat blank Subject headers as having the null string as value. * tests/email.scm ("blank Subject header must be treated as having the null string as value"): New test. Reported-by: Ricardo Wurmus <rekado@elephly.net>
2019-10-09email: Return keywords header as a list.Arun Isaac
* email/email.scm (parse-email-headers): Return keywords header as a list of strings. * tests/email.scm ("keywords header must be a list"): New test.
2019-10-08Reindent calls to call-with-port.Arun Isaac
* email/email.scm (body->mime-entities, email->headers+body): Reindent calls to call-with-port. * email/quoted-printable.scm (quoted-printable-encode, q-encoding-encode): Reindent calls to call-with-port. * tests/utils.scm ("read-bytes-till returns eof-object on end of file"): Reindent call to call-with-port.
2019-10-08email: Override invalid charset more strongly.Arun Isaac
* email/email.scm (post-process-content-type): Use alist-combine to override charset more strongly than just appending to the alist. * tests/email.scm ("tolerate invalid charset"): Update test.
2019-10-08tests: Compare email headers disregarding order.Arun Isaac
* tests/email.scm (alist=?, body=?, email=?, mime-entity=?): New functions. (test-alist=, test-email=): New macros. ("parse email headers", "tolerate invalid charset", "tolerate decoding errors in body"): Use test-alist=. ("RFC5322 A.1.1. A message from one person to another with simple addressing", "parse email headers", "RFC2046 5.1.1. Common syntax", "decode MIME entity without headers", "multipart email with a 8 bit encoding and non UTF-8 charset part", "decode utf-8 characters in headers", "tolerate non-ascii non-utf-8 characters in headers", "tolerate decoding errors in body"): Use test-email=.
2019-10-02email: Tolerate decoding errors in body.Arun Isaac
* email/email.scm (decode-body): Tolerate decoding errors in the body using the substitute conversion strategy. * tests/email.scm ("tolerate decoding errors in body"): New test.
2019-10-01email: Tolerate invalid charset.Arun Isaac
* email/email.scm (post-process-content-type): If charset is invalid, assume default UTF-8 as charset. * tests/email.scm ("tolerate invalid charset"): New test. Reported-by: Ricardo Wurmus <rekado@elephly.net>
2019-09-28email: Tolerate decoding errors in MIME encoded words.Arun Isaac
* email/email.scm (decode-mime-encoded-word): Tolerate decoding errors in MIME encoded words using the substitute conversion strategy. * tests/email.scm ("tolerate decoding errors in MIME encoded words"): New test. Reported-by: Christopher Baines <mail@cbaines.net>
2019-09-23email: Tolerate non-ASCII non-UTF-8 characters in headers.Arun Isaac
* email/email.scm (email->headers+body): If non-ASCII non-UTF-8 characters occur in the headers, do not raise a decoding error. Work around using the substitute conversion strategy. * tests/email.scm ("tolerate non-ASCII characters in headers"): Rename to "decode utf-8 characters in headers". ("tolerate non-ascii non-utf-8 characters in headers"): New test. Reported-by: Christopher Baines <mail@cbaines.net>
2019-09-17email: Tolerate non-ASCII characters in headers.Arun Isaac
We tolerate non-ASCII characters in headers in order to support Emacs message mode parens style addresses. * email/email.scm (email->headers+body): Read headers as UTF-8 characters. * tests/email.scm ("tolerate non-ascii characters in headers"): New tests. Reported-by: Christopher Baines <mail@cbaines.net>
2019-08-09tests: Remove unnecessary execution permission.Arun Isaac
* tests/quoted-printable.scm: Remove execution permission.
2019-07-28tests: Add examples from RFC5322 A.1.1 and A.1.2.Arun Isaac
* tests/email.scm ("RFC5322 A.1.1. A message from one person to another with simple addressing", "RFC5322 A.1.2. Different types of mailboxes"): New tests.
2019-07-28tests: Add read-while eof-object test.Arun Isaac
* tests/utils.scm ("read-while returns eof-object on end of file"): New test.
2019-07-28utils: Return eof-object from read-bytes-till on end of file.Arun Isaac
* email/utils.scm (read-bytes-till): Return eof-object, not #vu8(), on end of file. * tests/utils.scm: New file. * Makefile.am (SCM_TESTS): Register it.
2019-07-28tests: Add example from RFC2046 5.1.1.Arun Isaac
* tests/email.scm ("RFC2046 5.1.1. Common syntax"): New test.
2019-07-28email: Decode MIME entities without headers.Arun Isaac
* email/email.scm (email->headers+body): If there are no headers, return "" as headers not an eof-object. (parse-email-body): Parse headers of parent entity or email to parse-mime-entity. (add-default-mime-entity-headers): New function. (parse-mime-entity): Use add-default-mime-entity-headers instead of add-default-headers. Handle MIME entities without headers. * tests/email.scm ("decode MIME entity without headers"): New test.
2019-07-28email: Support email with mixed encoding of characters.Arun Isaac
Prior to this, parse-email would accept email in the form of a string. A string is constrained to use the same encoding for all its characters whereas an email can have characters encoded using different encoding schemes. Therefore, it is more correct that parse-email deals with bytevectors instead of strings. * email/utils.scm (read-bytes-till): New function. * email/email.scm (body->mime-entities, email->headers+body, decode-body): Deal with emails as bytevectors instead of strings. (parse-mime-entity): Rename text argument to bv. (parse-email, parse-email-body): Overload to handle input in the form of a string or bytevector. * doc/guile-email.texi (Parsing e-mail): Document overloading of parse-email and parse-email-body. * tests/email.scm ("handle truncated multipart message gracefully"): Deal in bytevectors instead of strings. ("email with 8 bit encoding and non UTF-8 charset", "multipart email with a 8 bit encoding and non UTF-8 charset part"): New tests. * tests/email-with-8bit-encoding-and-non-utf8-charset, tests/multipart-email-with-a-8bit-encoding-and-non-utf8-charset-part: New files. Reported-by: Jack Hill <jackhill@jackhill.us>
2019-07-21email: Decode MIME encoded words in Subject header.Arun Isaac
Prior to this, MIME encoded words in the Subject header were not decoded. * email/email.scm (parse-email-headers): Decode MIME encoded words in Subject header. * tests/email.scm ("decode MIME encoded words in Subject header"): New test. Reported-by: Ricardo Wurmus <rekado@elephly.net>
2019-07-21tests: Add test for decoding MIME encoded phrases.Arun Isaac
* tests/email.scm ("decode MIME encoded phrases that contain multiple MIME encoded words each with their own encoding"): New test.
2018-11-14tests: Add tests for decoding MIME encoded words.Arun Isaac
* tests/email.scm ("decode MIME encoded word: wikipedia example", "decode MIME encoded phrases that mix ASCII text and MIME encoded words"): New tests.
2018-11-14tests: Add tests for email address parsing.Arun Isaac
* tests/email.scm ("parse name-addr email address", "parse addr-spec email address", "parse emacs message mode parens style email address"): New tests.
2018-10-01tests: Add tests for (email email).Arun Isaac
* tests/email.scm: New file. * Makefile.am (SCM_TESTS): Register it.
2018-09-15tests: Add random test for Q encoding.Arun Isaac
* tests/quoted-printable.scm (q-encoding random bytevector: q-encoding-encode and q-encoding-decode are inverses of each other): New test.
2018-09-15quoted-printable: Q-encode #\? and #\_ with their ASCII values.Arun Isaac
* email/quoted-printable.scm (%q-encoding-literal-char-set, %quoted-printable-literal-char-set): New variables. (quoted-printable-encode): Move core encoding code to ... (quoted-printable-style-encode): ... this new function. (q-encoding-decode): Call quoted-printable-style-encode with the appropriate literal-char-set instead of calling quoted-printable-encode. * tests/quoted-printable.scm (q-encoding of special characters): Add to check for this bug.
2018-09-15tests: Extend quoted-printable special characters encoding test.Arun Isaac
* tests/quoted-printable.scm (quoted-printable-escape-encode-char): New function. ("quoted-printable encoding of ="): Rename to ... ("quoted-printable encoding of special characters"): ... this. Extend to test encoding of #\return and #\newline as well.
2018-09-15tests: Add tests for quoted-printable.Arun Isaac
* tests/quoted-printable.scm (random-bytevector, each-line-has-a-maximum-of-76-characters?, string-has-only-quoted-printable-valid-characters?): New functions. (quoted-printable random bytevector: quoted-printable-encode and quoted-printable-decode are inverses of each other, quoted-printable random bytevector: encoded output should not be more than 76 columns wide, quoted-printable random bytevector: encoded output must only consist of printable ASCII characters): New tests.
2018-09-15quoted-printable: Encode #\= with its ASCII code.Arun Isaac
* email/quoted-printable.scm (quoted-printable-encode): Encode #\= with its ASCII code. * test/quoted-printable.scm (quoted-printable-encoding of =): Add test to check for this bug.
2018-09-12quoted-printable: Add q-encoding-encode.Arun Isaac
* email/quoted-printable.scm (q-encoding-encode): New function. * tests/quoted-printable.scm (q-encoding wikipedia example): Rename to ... (q-encoding wikipedia example: decoding): ... this. (q-encoding wikipedia example: encoding): New test.
2018-09-12Untabify and re-indent all sources.Arun Isaac
* build-aux/test-driver.scm, email/base64.scm, email/email.scm, email/quoted-printable.scm, email/utils.scm, tests/quoted-printable.scm: Untabify and re-indent.
2018-09-12quoted-printable: Add quoted-printable-encode.Arun Isaac
* email/quoted-printable.scm (quoted-printable-encode): New function. * tests/quoted-printable.scm (quoted-printable wikipedia example): Rename to ... (quoted-printable wikipedia example: decoding): ... this. (quoted-printable wikipedia example: encoding, quoted-printable wikipedia example: encoded output should not be more than 76 columns wide): New tests.