apg-lite
Version:
lightweight JavaScript APG parser
157 lines (153 loc) • 5.93 kB
JavaScript
import { uriParser } from '../uri-app/node-uri-parser.js';
// Insure that tests all work even if the array prototype has been extended
// outside of the scope of the parser.
Array.prototype.foo = function () {
console.log(this.length);
};
const p = uriParser;
let result = undefined;
describe('reproduce uri-js tests', () => {
test('scheme', () => {
result = p.parse('uri:');
expect(result.uri).toBe('uri:');
expect(result.scheme).toBe('uri');
expect(result.userinfo).toBeUndefined();
expect(result.host).toBeUndefined();
expect(result.port).toBeUndefined();
expect(result.path).toBe('');
expect(result.query).toBeUndefined();
expect(result.fragment).toBeUndefined();
});
test('userinfo', () => {
result = p.parse('uri://@');
expect(result.scheme).toBe('uri');
expect(result.userinfo).toBe('');
expect(result.host).toBe('');
expect(result.port).toBeUndefined();
expect(result.path).toBe('');
expect(result.query).toBeUndefined();
expect(result.fragment).toBeUndefined();
});
test('empty host', () => {
result = p.parse('uri://@:');
expect(result.scheme).toBe('uri');
expect(result.userinfo).toBe('');
expect(result.host).toBe('');
expect(result.port).toBe('');
expect(result.path).toBe('');
expect(result.query).toBeUndefined();
expect(result.fragment).toBeUndefined();
});
test('host', () => {
result = p.parse('uri://');
expect(result.scheme).toBe('uri');
expect(result.userinfo).toBeUndefined();
expect(result.host).toBe('');
expect(result.port).toBeUndefined();
expect(result.path).toBe('');
expect(result.query).toBeUndefined();
expect(result.fragment).toBeUndefined();
});
test('port', () => {
result = p.parse('uri://:');
expect(result.scheme).toBe('uri');
expect(result.userinfo).toBeUndefined();
expect(result.host).toBe('');
expect(result.port).toBe('');
expect(result.path).toBe('');
expect(result.query).toBeUndefined();
expect(result.fragment).toBeUndefined();
});
test('query', () => {
result = p.parse('uri:?');
expect(result.scheme).toBe('uri');
expect(result.userinfo).toBeUndefined();
expect(result.host).toBeUndefined();
expect(result.port).toBeUndefined();
expect(result.path).toBe('');
expect(result.query).toBe('');
expect(result.fragment).toBeUndefined();
});
test('fragment', () => {
result = p.parse('uri:#');
expect(result.scheme).toBe('uri');
expect(result.userinfo).toBeUndefined();
expect(result.host).toBeUndefined();
expect(result.port).toBeUndefined();
expect(result.path).toBe('');
expect(result.query).toBeUndefined();
expect(result.fragment).toBe('');
});
test('all', () => {
result = p.parse('uri://user:pass@example.com:123/one/two.three?q1=a1&q2=a2#body');
expect(result.scheme).toBe('uri');
expect(result.userinfo).toBe('user:pass');
expect(result.host).toBe('example.com');
expect(result.port).toBe(123);
expect(result.path).toBe('/one/two.three');
expect(result.query).toBe('q1=a1&q2=a2');
expect(result.fragment).toBe('body');
});
test('IPv4address', () => {
result = p.parse('uri://10.10.10.10');
// console.dir(result);
expect(result.scheme).toBe('uri');
expect(result.userinfo).toBeUndefined();
expect(result.host).toBe('10.10.10.10');
expect(result.port).toBeUndefined();
expect(result.path).toBe('');
expect(result.query).toBeUndefined();
expect(result.fragment).toBeUndefined();
});
test('IPv6address', () => {
result = p.parse('uri://[2001:db8::7]');
expect(result.scheme).toBe('uri');
expect(result.userinfo).toBeUndefined();
expect(result.host).toBe('2001:db8::7');
expect(result.port).toBeUndefined();
expect(result.path).toBe('');
expect(result.query).toBeUndefined();
expect(result.fragment).toBeUndefined();
});
test('mixed IPv6address & IPv4address', () => {
result = p.parse('uri://[::ffff:129.144.52.38]');
expect(result.scheme).toBe('uri');
expect(result.userinfo).toBeUndefined();
expect(result.host).toBe('::ffff:129.144.52.38');
expect(result.port).toBeUndefined();
expect(result.path).toBe('');
expect(result.query).toBeUndefined();
expect(result.fragment).toBeUndefined();
});
test('mixed IPv4address & reg-name, example from terion-name (https://github.com/garycourt/uri-js/issues/4)', () => {
result = p.parse('uri://10.10.10.10.example.com/en/process');
expect(result.scheme).toBe('uri');
expect(result.userinfo).toBeUndefined();
expect(result.host).toBe('10.10.10.10.example.com');
expect(result.port).toBeUndefined();
expect(result.path).toBe('/en/process');
expect(result.query).toBeUndefined();
expect(result.fragment).toBeUndefined();
});
test('IPv6address, example from bkw (https://github.com/garycourt/uri-js/pull/16)', () => {
result = p.parse('uri://[2606:2800:220:1:248:1893:25c8:1946]/test');
expect(result.scheme).toBe('uri');
expect(result.userinfo).toBeUndefined();
expect(result.host).toBe('2606:2800:220:1:248:1893:25c8:1946');
expect(result.port).toBeUndefined();
expect(result.path).toBe('/test');
expect(result.query).toBeUndefined();
expect(result.fragment).toBeUndefined();
});
test('IPv6address, example from RFC 5952)', () => {
result = p.parse('uri://[2001:db8::1]:80');
// console.dir(result);
expect(result.scheme).toBe('uri');
expect(result.userinfo).toBeUndefined();
expect(result.host).toBe('2001:db8::1');
expect(result.port).toBe(80);
expect(result.path).toBe('');
expect(result.query).toBeUndefined();
expect(result.fragment).toBeUndefined();
});
});