imap-utf7.test.js 1.1 KB

12345678910111213141516171819202122232425
  1. import assert from 'node:assert/strict';
  2. import { test } from 'node:test';
  3. import { decodeModifiedUtf7, encodeModifiedUtf7 } from '../src/imap-utf7.js';
  4. test('Modified UTF-7 keeps printable ASCII and escapes ampersands', () => {
  5. assert.equal(encodeModifiedUtf7('INBOX/Projects 2026'), 'INBOX/Projects 2026');
  6. assert.equal(encodeModifiedUtf7('R&D'), 'R&-D');
  7. assert.equal(decodeModifiedUtf7('R&-D'), 'R&D');
  8. });
  9. test('Modified UTF-7 encodes Unicode mailbox names as UTF-16BE', () => {
  10. assert.equal(encodeModifiedUtf7('中文'), '&Ti1lhw-');
  11. assert.equal(decodeModifiedUtf7('&Ti1lhw-'), '中文');
  12. assert.equal(decodeModifiedUtf7('~peter/mail/&U,BTFw-/&ZeVnLIqe-'), '~peter/mail/台北/日本語');
  13. const mailbox = '归档/客户 📧 & 2026';
  14. assert.equal(decodeModifiedUtf7(encodeModifiedUtf7(mailbox)), mailbox);
  15. });
  16. test('Modified UTF-7 preserves malformed encoded sections', () => {
  17. assert.equal(decodeModifiedUtf7('Broken &Ti1lhw'), 'Broken &Ti1lhw');
  18. assert.equal(decodeModifiedUtf7('Broken &!!!!- name'), 'Broken &!!!!- name');
  19. assert.equal(decodeModifiedUtf7('Broken &2AA- name'), 'Broken &2AA- name');
  20. });