blob: 27519d77fd3e1699de9a0692b049ee7a76988bd8 [file]
// TODO: port to Python
'use strict';
var equals = require('assert').strictEqual;
var encode = require('../').encode;
describe('encode', function() {
it('should encode percent', function() {
equals(encode('%%%'), '%25%25%25');
});
it('should encode control chars', function() {
equals(encode('\r\n'), '%0D%0A');
});f
it('should not encode parts of an url', function() {
equals(encode('?#'), '?#');
});
it('should not encode []^ - commonmark tests', function() {
equals(encode('[]^'), '%5B%5D%5E');
});
it('should encode spaces', function() {
equals(encode('my url'), 'my%20url');
});
it('should encode unicode', function() {
equals(encode('φου'), '%CF%86%CE%BF%CF%85');
});
it('should encode % if it doesn\'t start a valid escape seq', function() {
equals(encode('%FG'), '%25FG');
});
it('should preserve non-utf8 encoded characters', function() {
equals(encode('%00%FF'), '%00%FF');
});
it('should encode characters on the cache borders', function() {
// protects against off-by-one in cache implementation
equals(encode('\x00\x7F\x80'), '%00%7F%C2%80');
});
describe('arguments', function() {
it('encode(string, unescapedSet)', function() {
equals(encode('!@#$', '@$'), '%21@%23$');
});
it('encode(string, keepEscaped=true)', function() {
equals(encode('%20%2G', true), '%20%252G');
});
it('encode(string, keepEscaped=false)', function() {
equals(encode('%20%2G', false), '%2520%252G');
});
it('encode(string, unescapedSet, keepEscaped)', function() {
equals(encode('!@%25', '@', false), '%21@%2525');
});
});
describe('surrogates', function() {
it('bad surrogates (high)', function() {
equals(encode('\uD800foo'), '%EF%BF%BDfoo');
equals(encode('foo\uD800'), 'foo%EF%BF%BD');
});
it('bad surrogates (low)', function() {
equals(encode('\uDD00foo'), '%EF%BF%BDfoo');
equals(encode('foo\uDD00'), 'foo%EF%BF%BD');
});
it('valid one', function() {
equals(encode('\uD800\uDD00'), '%F0%90%84%80');
});
});
});