uritemplate
Version:
An UriTemplate implementation of rfc 6570
73 lines (69 loc) • 3.07 kB
JavaScript
module.exports = (function () {
"use strict";
var
sandbox = require('nodeunit').utils.sandbox,
context = {};
sandbox('src/charHelper.js', context);
sandbox('src/pctEncoder.js', context);
var charHelper = context.charHelper;
var pctEncoder = context.pctEncoder;
return {
'isPctEncoded': {
'one byte utf8 characters are recognized': function (test) {
test.ok(pctEncoder.isPctEncoded('%00'));
test.ok(pctEncoder.isPctEncoded('%7F'));
test.ok(!pctEncoder.isPctEncoded('%80'));
test.ok(!pctEncoder.isPctEncoded('%C0'));
test.ok(!pctEncoder.isPctEncoded('%FF'));
test.done();
},
'two byte utf8 characters are recognized': function (test) {
test.ok(pctEncoder.isPctEncoded('%C3%B6'));
test.ok(!pctEncoder.isPctEncoded('%C1%B6'));
test.ok(!pctEncoder.isPctEncoded('%C3%7F'));
test.ok(!pctEncoder.isPctEncoded('%C3%C0'));
test.done();
},
'three byte utf8 characters are recognized': function (test) {
// the euro sign
test.ok(pctEncoder.isPctEncoded('%E2%82%AC'));
test.ok(!pctEncoder.isPctEncoded('%E2%82'));
test.done();
},
'four byte utf8 characters are recognized': function (test) {
// violin clef
test.ok(pctEncoder.isPctEncoded('%F0%9D%84%9E'));
test.ok(!pctEncoder.isPctEncoded('%F0%9D%84'));
test.done();
}
},
'pctCharAt': {
'corner cases are detected': function (test) {
test.equal(pctEncoder.pctCharAt('%', 0), '%');
test.equal(pctEncoder.pctCharAt('%X', 0), '%');
test.equal(pctEncoder.pctCharAt('%A', 0), '%');
test.equal(pctEncoder.pctCharAt('%1', 0), '%');
test.equal(pctEncoder.pctCharAt('%F0%9D%8', 0), '%');
test.equal(pctEncoder.pctCharAt('%20', 1), '2');
test.done();
},
'one byte utf8 characters are detected': function (test) {
test.equal(pctEncoder.pctCharAt('%25%', 0), '%25');
test.equal(pctEncoder.pctCharAt('%3C%', 0), '%3C');
test.equal(pctEncoder.pctCharAt('%3c%', 0), '%3c');
test.done();
}
},
'encodeCharacter': {
'encodeCharacter encodes even if not needed': function (test) {
test.equal(pctEncoder.encodeCharacter('y'), '%79');
test.equal(pctEncoder.encodeCharacter('!'), '%21');
test.done();
},
'encoding is always padded': function (test) {
test.equal(pctEncoder.encodeCharacter('\n'), '%0A');
test.done();
}
}
};
}());