UNPKG

fast-uri

Version:

Dependency-free RFC 3986 URI toolbox

48 lines (38 loc) • 2.28 kB
'use strict' const test = require('tape') const fastURI = require('..') test('URN parsing validates the complete scheme-specific input', (t) => { const embedded = fastURI.parse('urn:x|foo:bar') t.equal(embedded.error, 'URN can not be parsed.', 'does not search for a later nid:nss substring') t.equal(embedded.nid, undefined, 'does not adopt the later nid') t.equal(embedded.nss, undefined, 'does not adopt the later nss') const trailing = fastURI.parse('urn:foo:bar|ignored') t.equal(trailing.error, 'URN can not be parsed.', 'rejects trailing input outside the RFC 2141 NSS grammar') t.equal(trailing.nid, undefined, 'does not return an nid from a partial match') t.equal(trailing.nss, undefined, 'does not return a truncated nss') t.end() }) test('URN parsing preserves the complete RFC 2141 NSS', (t) => { const parsed = fastURI.parse('urn:foo:allowed/evil') t.equal(parsed.error, undefined, 'accepts slash in an RFC 2141 NSS') t.equal(parsed.nid, 'foo', 'parses the nid') t.equal(parsed.nss, 'allowed/evil', 'preserves the complete NSS') t.equal(fastURI.normalize('urn:foo:allowed/evil'), 'urn:foo:allowed/evil', 'normalization retains slash data') t.equal(fastURI.equal('urn:foo:allowed/evil', 'urn:foo:allowed'), false, 'distinct NSS values do not compare equal') t.end() }) test('URN serialization preserves NSS dot segments', (t) => { const urnWithDotSegments = 'urn:example:a/b/../c' const destructiveDotSegments = 'urn:example:../../../etc/passwd' t.equal(fastURI.serialize(fastURI.parse(urnWithDotSegments)), urnWithDotSegments, 'parsed NSS round-trips unchanged') t.equal( fastURI.serialize({ scheme: 'urn', nid: 'example', nss: '../../../etc/passwd' }), destructiveDotSegments, 'structured NSS retains leading dot segments' ) t.equal(fastURI.normalize(urnWithDotSegments), urnWithDotSegments, 'normalization retains interior dot segments') t.equal(fastURI.normalize(destructiveDotSegments), destructiveDotSegments, 'normalization retains leading dot segments') t.equal(fastURI.resolve('', urnWithDotSegments), urnWithDotSegments, 'resolution retains NSS dot segments') t.equal(fastURI.equal(urnWithDotSegments, 'urn:example:a/c'), false, 'distinct NSS values do not compare equal') t.end() })