57 lines
2.2 KiB
JavaScript
57 lines
2.2 KiB
JavaScript
'use strict';
|
|
|
|
const test = require('node:test');
|
|
const assert = require('node:assert/strict');
|
|
|
|
const {
|
|
getCanonicalTabUrl,
|
|
isRestorableTabUrl,
|
|
parseSuspendedTabUrl,
|
|
} = require('./tab-url-utils.js');
|
|
|
|
test('parseSuspendedTabUrl extracts original uri and title from Marvellous Suspender URLs', () => {
|
|
const suspendedUrl = 'extension://noogafoofpebimajpfpamcfhoaifemoa/suspended.html#ttl=V-IOLE-T%2Ftab-harbor&pos=0&uri=https%3A%2F%2Fgithub.com%2FV-IOLE-T%2Ftab-harbor';
|
|
|
|
const parsed = parseSuspendedTabUrl(suspendedUrl);
|
|
|
|
assert.equal(parsed.isSuspended, true);
|
|
assert.equal(parsed.originalUrl, 'https://github.com/V-IOLE-T/tab-harbor');
|
|
assert.equal(parsed.title, 'V-IOLE-T/tab-harbor');
|
|
});
|
|
|
|
test('getCanonicalTabUrl leaves ordinary urls alone and unwraps suspended urls', () => {
|
|
assert.equal(
|
|
getCanonicalTabUrl('https://example.com/docs'),
|
|
'https://example.com/docs'
|
|
);
|
|
assert.equal(
|
|
getCanonicalTabUrl('extension://noogafoofpebimajpfpamcfhoaifemoa/suspended.html#ttl=Docs&uri=https%3A%2F%2Fexample.com%2Fdocs'),
|
|
'https://example.com/docs'
|
|
);
|
|
});
|
|
|
|
test('isRestorableTabUrl rejects browser internals and unsafe protocols', () => {
|
|
assert.equal(isRestorableTabUrl('https://example.com'), true);
|
|
assert.equal(isRestorableTabUrl('http://example.com'), true);
|
|
assert.equal(isRestorableTabUrl('file:///Users/test/report.pdf'), true);
|
|
assert.equal(isRestorableTabUrl('chrome://settings'), false);
|
|
assert.equal(isRestorableTabUrl('about:blank'), false);
|
|
assert.equal(isRestorableTabUrl('javascript:alert(1)'), false);
|
|
});
|
|
|
|
test('parseSuspendedTabUrl tolerates malformed suspended hashes', () => {
|
|
const parsed = parseSuspendedTabUrl('extension://noogafoofpebimajpfpamcfhoaifemoa/suspended.html#ttl=OnlyTitle');
|
|
|
|
assert.equal(parsed.isSuspended, true);
|
|
assert.equal(parsed.originalUrl, '');
|
|
assert.equal(parsed.title, 'OnlyTitle');
|
|
});
|
|
|
|
test('parseSuspendedTabUrl only unwraps extension suspended pages', () => {
|
|
const ordinaryPage = 'https://example.com/suspended.html#ttl=Docs&uri=https%3A%2F%2Fother.test';
|
|
const parsed = parseSuspendedTabUrl(ordinaryPage);
|
|
|
|
assert.equal(parsed.isSuspended, false);
|
|
assert.equal(getCanonicalTabUrl(ordinaryPage), ordinaryPage);
|
|
});
|