mirror of
https://github.com/GetOpenScript/OpenScript.git
synced 2026-09-18 09:45:43 +00:00
67 lines
2.3 KiB
JavaScript
67 lines
2.3 KiB
JavaScript
import test from 'node:test';
|
|
import assert from 'node:assert/strict';
|
|
import { parseMeta, normalizeMatch, getBoilerplate } from '../src/utils/parser.js';
|
|
import { wrapScriptCode } from '../src/utils/userScripts.js';
|
|
|
|
test('parseMeta extracts standard Tampermonkey metadata', () => {
|
|
const sample = `
|
|
// ==UserScript==
|
|
// @name Test Script
|
|
// @version 2.1.0
|
|
// @description Sample description
|
|
// @author Alice
|
|
// @match https://gemini.google.com/*
|
|
// @match https://example.com/*
|
|
// @run-at document-start
|
|
// @grant none
|
|
// ==/UserScript==
|
|
|
|
console.log('hello');
|
|
`;
|
|
|
|
const meta = parseMeta(sample);
|
|
assert.equal(meta.name, 'Test Script');
|
|
assert.equal(meta.version, '2.1.0');
|
|
assert.equal(meta.description, 'Sample description');
|
|
assert.equal(meta.author, 'Alice');
|
|
assert.deepEqual(meta.matches, ['https://gemini.google.com/*', 'https://example.com/*']);
|
|
assert.equal(meta.runAt, 'document_start');
|
|
});
|
|
|
|
test('parseMeta falls back to defaults when fields are missing', () => {
|
|
const sample = `
|
|
// ==UserScript==
|
|
// ==/UserScript==
|
|
`;
|
|
const meta = parseMeta(sample);
|
|
assert.equal(meta.name, 'Untitled Script');
|
|
assert.equal(meta.version, '1.0.0');
|
|
assert.deepEqual(meta.matches, ['*://*/*']);
|
|
assert.equal(meta.runAt, 'document_idle');
|
|
});
|
|
|
|
test('normalizeMatch formats URL patterns for Chrome userScripts API', () => {
|
|
assert.equal(normalizeMatch('https://example.com'), 'https://example.com/*');
|
|
assert.equal(normalizeMatch('example.com/*'), '*://example.com/*');
|
|
assert.equal(normalizeMatch('*://*/*'), '*://*/*');
|
|
});
|
|
|
|
test('wrapScriptCode injects OpenScript.env and GM_getValue polyfill', () => {
|
|
const code = 'console.log(env.API_KEY, GM_getValue("API_KEY"));';
|
|
const wrapped = wrapScriptCode(code, { API_KEY: 'secret123' });
|
|
|
|
assert.ok(wrapped.includes('OpenScript'));
|
|
assert.ok(wrapped.includes('"API_KEY":"secret123"'));
|
|
assert.ok(wrapped.includes('globalThis.OpenScript'));
|
|
assert.ok(wrapped.includes('GM_getValue'));
|
|
assert.ok(wrapped.includes(code));
|
|
});
|
|
|
|
test('getBoilerplate produces valid Tampermonkey template without namespace', () => {
|
|
const template = getBoilerplate('My Script');
|
|
assert.ok(template.includes('// @name My Script'));
|
|
assert.ok(!template.includes('@namespace'));
|
|
const parsed = parseMeta(template);
|
|
assert.equal(parsed.name, 'My Script');
|
|
});
|