Skip to content

Commit f2ba659

Browse files
committed
Merge PR kkaefer/utf7#10
2 parents c0b989a + be606fb commit f2ba659

File tree

2 files changed

+28
-9
lines changed

2 files changed

+28
-9
lines changed

test/utf7-rfc2152.js

Lines changed: 25 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -2,33 +2,33 @@ var test = require('tape');
22
var utf7 = require('..');
33

44
test('test conversion from utf8 to utf7', function(assert) {
5-
assert.plan(20);
5+
assert.plan(22);
66

77
// Examples from RFC 2152.
8-
assert.equal('A+ImIDkQ-.', utf7.encodeAll('A\u2262\u0391.'));
8+
assert.equal('+AEEiYgORAC4-', utf7.encodeAll('A\u2262\u0391.'));
99
assert.equal('A+ImIDkQ-.', utf7.encode('A\u2262\u0391.'));
1010

1111
assert.equal('+ZeVnLIqe-', utf7.encodeAll('\u65E5\u672C\u8A9E'));
1212
assert.equal('+ZeVnLIqe-', utf7.encode('\u65E5\u672C\u8A9E'));
1313

14-
assert.equal('Hi Mom -+Jjo--!', utf7.encodeAll('Hi Mom -\u263A-!'));
14+
assert.equal('+AEgAaQAgAE0AbwBtACAALSY6AC0AIQ-', utf7.encodeAll('Hi Mom -\u263A-!'));
1515
assert.equal('Hi Mom -+Jjo--!', utf7.encode('Hi Mom -\u263A-!', ' !'));
1616
assert.equal('Hi+ACA-Mom+ACA--+Jjo--+ACE-', utf7.encode('Hi Mom -\u263A-!'));
1717

18-
assert.equal('Item 3 is +AKM-1.', utf7.encodeAll('Item 3 is \u00A31.'));
18+
assert.equal('+AEkAdABlAG0AIAAzACAAaQBzACAAowAxAC4-', utf7.encodeAll('Item 3 is \u00A31.'));
1919
assert.equal('Item 3 is +AKM-1.', utf7.encode('Item 3 is \u00A31.', ' '));
2020
assert.equal('Item+ACA-3+ACA-is+ACAAow-1.', utf7.encode('Item 3 is \u00A31.'));
2121

2222
// Custom examples that contain more than one mode shift.
2323
assert.equal('Jyv+AOQ-skyl+AOQ-', utf7.encode('Jyv\u00E4skyl\u00E4'));
24-
assert.equal('Jyv+AOQ-skyl+AOQ-', utf7.encodeAll('Jyv\u00E4skyl\u00E4'));
24+
assert.equal('+AEoAeQB2AOQAcwBrAHkAbADk-', utf7.encodeAll('Jyv\u00E4skyl\u00E4'));
2525

26-
assert.equal('\'+T2BZfQ-\' hei+AN8-t "Hallo"', utf7.encodeAll('\'\u4F60\u597D\' heißt "Hallo"'));
26+
assert.equal('+ACdPYFl9ACcAIABoAGUAaQDfAHQAIAAiAEgAYQBsAGwAbwAi-', utf7.encodeAll('\'\u4F60\u597D\' heißt "Hallo"'));
2727
assert.equal('\'+T2BZfQ-\' hei+AN8-t "Hallo"', utf7.encode('\'\u4F60\u597D\' heißt "Hallo"', ' "'));
2828
assert.equal('\'+T2BZfQ-\'+ACA-hei+AN8-t+ACAAIg-Hallo+ACI-', utf7.encode('\'\u4F60\u597D\' heißt "Hallo"'));
2929

3030
// The plus sign is represented as +-.
31-
assert.equal('Hot +- Spicy +- Fruity', utf7.encodeAll('Hot + Spicy + Fruity'));
31+
assert.equal('+AEgAbwB0ACAAKwAgAFMAcABpAGMAeQAgACsAIABGAHIAdQBpAHQAeQ-', utf7.encodeAll('Hot + Spicy + Fruity'));
3232
assert.equal('Hot +- Spicy +- Fruity', utf7.encode('Hot + Spicy + Fruity', ' '));
3333
assert.equal('Hot+ACAAKwAg-Spicy+ACAAKwAg-Fruity', utf7.encode('Hot + Spicy + Fruity'));
3434

@@ -37,14 +37,20 @@ test('test conversion from utf8 to utf7', function(assert) {
3737

3838
// + sign around non-ASCII chars
3939
assert.equal('+AOQAKwDkACsA5A-', utf7.encodeAll('\u00E4+\u00E4+\u00E4'));
40+
41+
// Some special characters
42+
assert.equal('+ACEAIgCnACQAJQAmAC8AKAApAD0APwAnACoAKwAjAC0AXwAuADoALAA7ADwAPgB8AFsAXQBcALQAYABA-', utf7.encodeAll('!"§$%&/()=?\'*+#-_.:,;<>|[]\\´`@'));
43+
assert.equal('+ACEAIgCnACQAJQAm-/()+AD0-?\'+ACoAKwAj--+AF8-.:,+ADsAPAA+AHwAWwBdAFwAtABgAEA-', utf7.encode('!"§$%&/()=?\'*+#-_.:,;<>|[]\\´`@'));
4044
});
4145

4246
test('test conversion from utf7 to utf8', function(assert) {
43-
assert.plan(22);
47+
assert.plan(32);
4448

4549
// Examples from RFC 2152.
4650
assert.equal('A\u2262\u0391.', utf7.decode('A+ImIDkQ-.'));
4751
assert.equal('A\u2262\u0391.', utf7.decode('A+ImIDkQ.'));
52+
assert.equal('A\u2262\u0391.', utf7.decode('+AEEiYgORAC4-'));
53+
assert.equal('A\u2262\u0391.', utf7.decode('+AEEiYgORAC4'));
4854

4955
assert.equal('\u65E5\u672C\u8A9E', utf7.decode('+ZeVnLIqe-'));
5056
assert.equal('\u65E5\u672C\u8A9E', utf7.decode('+ZeVnLIqe'));
@@ -53,6 +59,8 @@ test('test conversion from utf7 to utf8', function(assert) {
5359
assert.equal('Hi Mom -\u263A-!', utf7.decode('Hi+ACA-Mom+ACA--+Jjo--+ACE-'));
5460
assert.equal('Item 3 is \u00A31.', utf7.decode('Item 3 is +AKM-1.'));
5561
assert.equal('Item 3 is \u00A31.', utf7.decode('Item+ACA-3+ACA-is+ACAAow-1.'));
62+
assert.equal('Hi Mom -\u263A-!', utf7.decode('+AEgAaQAgAE0AbwBtACAALSY6AC0AIQ-'));
63+
assert.equal('Hi Mom -\u263A-!', utf7.decode('+AEgAaQAgAE0AbwBtACAALSY6AC0AIQ'));
5664

5765
// Custom examples that contain more than one mode shift.
5866
assert.equal('Jyv\u00E4skyl\u00E4', utf7.decode('Jyv+AOQ-skyl+AOQ-'));
@@ -61,10 +69,15 @@ test('test conversion from utf7 to utf8', function(assert) {
6169
assert.equal('\'\u4F60\u597D\' heißt "Hallo"', utf7.decode('\'+T2BZfQ\' hei+AN8-t "Hallo"'));
6270
assert.equal('\'\u4F60\u597D\' heißt "Hallo"', utf7.decode('\'+T2BZfQ-\'+ACA-hei+AN8-t+ACAAIg-Hallo+ACI-'));
6371
assert.equal('\'\u4F60\u597D\' heißt "Hallo"', utf7.decode('\'+T2BZfQ-\'+ACA-hei+AN8-t+ACAAIg-Hallo+ACI'));
72+
assert.equal('\'\u4F60\u597D\' heißt "Hallo"', utf7.decode('+ACdPYFl9ACcAIABoAGUAaQDfAHQAIAAiAEgAYQBsAGwAbwAi-'));
73+
assert.equal('\'\u4F60\u597D\' heißt "Hallo"', utf7.decode('+ACdPYFl9ACcAIABoAGUAaQDfAHQAIAAiAEgAYQBsAGwAbwAi'));
6474

6575
// The plus sign is represented by +-.
6676
assert.equal('Hot + Spicy + Fruity', utf7.decode('Hot +- Spicy +- Fruity'));
6777
assert.equal('Hot + Spicy + Fruity', utf7.decode('Hot+ACAAKwAg-Spicy+ACAAKwAg-Fruity'));
78+
assert.equal('Hot + Spicy + Fruity', utf7.decode('+AEgAbwB0ACAAKwAgAFMAcABpAGMAeQAgACsAIABGAHIAdQBpAHQAeQ-'));
79+
assert.equal('Hot + Spicy + Fruity', utf7.decode('+AEgAbwB0ACAAKwAgAFMAcABpAGMAeQAgACsAIABGAHIAdQBpAHQAeQ'));
80+
6881

6982
// Slashes in the beginning.
7083
assert.equal('\uffff\uedca\u9876\u5432\u1fed', utf7.decode('+///typh2VDIf7Q-'));
@@ -75,4 +88,8 @@ test('test conversion from utf7 to utf8', function(assert) {
7588
assert.equal('\u00E4+\u00E4+\u00E4', utf7.decode('+AOQ++AOQ+-+AOQ'));
7689
assert.equal('\u00E4+\u00E4+\u00E4', utf7.decode('+AOQAKwDkACsA5A-'));
7790
assert.equal('\u00E4+\u00E4+\u00E4', utf7.decode('+AOQAKwDkACsA5A'));
91+
92+
// Some special characters (e.g. plus sign)
93+
assert.equal('!"§$%&/()=?*+#-_.:,;<>|[]\\´`@', utf7.decode('+ACEAIgCnACQAJQAmAC8AKAApAD0APwAqACsAIwAtAF8ALgA6ACwAOwA8AD4AfABbAF0AXAC0AGAAQA-'));
94+
assert.equal('!"§$%&/()=?*+#-_.:,;<>|[]\\´`@', utf7.decode('+ACEAIgCnACQAJQAmAC8AKAApAD0APwAqACsAIwAtAF8ALgA6ACwAOwA8AD4AfABbAF0AXAC0AGAAQA'));
7895
});

utf7.js

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -59,7 +59,9 @@ var setW = escape(" \r\n\t");
5959

6060
// Stores compiled regexes for various replacement pattern.
6161
var regexes = {};
62-
var regexAll = new RegExp("[^" + setW + setD + setO + "]+", 'g');
62+
63+
// This regex matches all characters
64+
var regexAll = new RegExp("[\u0000-\uFFFF]+", 'g');
6365

6466
exports.imap = {};
6567

0 commit comments

Comments
 (0)