1
0
Эх сурвалжийг харах

chore: add tests for getResourceText, GM_getResourceURL (#1224)

tophf 4 жил өмнө
parent
commit
c016877ff0

+ 1 - 1
src/background/utils/db.js

@@ -655,7 +655,7 @@ export async function vacuum() {
  * @property {string} name
  * @property {boolean} noframes
  * @property {string[]} require
- * @property {Object} resource
+ * @property {Object} resources
  * @property {VMScriptRunAt} runAt
  * @property {string} supportURL
  * @property {string} version

+ 42 - 0
test/injected/gm-resource.test.js

@@ -0,0 +1,42 @@
+import test from 'tape';
+import { buffer2string } from '#/common';
+import { wrapGM } from '#/injected/web/gm-wrapper';
+import store from '#/injected/web/store';
+
+const stringAsBase64 = str => btoa(buffer2string(new TextEncoder().encode(str).buffer));
+
+const blobAsText = async blobUrl => new Promise(resolve => {
+  const fr = new FileReader();
+  fr.onload = () => resolve(new TextDecoder().decode(fr.result));
+  fr.readAsArrayBuffer(URL._cache[blobUrl]);
+});
+
+// WARNING: don't include D800-DFFF range which is for surrogate pairs
+const RESOURCE_TEXT = 'abcd\u1234\u2345\u3456\u4567\u5678\u6789\u789A\u89AB\u9ABC\uABCD';
+/** @type VMScript */
+const script = {
+  config: {},
+  custom: {},
+  props: {
+    id: 1,
+  },
+  meta: {
+    grant: [
+      'GM_getResourceText',
+      'GM_getResourceURL',
+    ],
+    resources: {
+      foo: 'https://dummy.url/foo.txt',
+    },
+  },
+};
+const wrapper = wrapGM(script);
+store.cache = {
+  [script.meta.resources.foo]: `text/plain,${stringAsBase64(RESOURCE_TEXT)}`,
+};
+
+test('@resource decoding', async (t) => {
+  t.equal(wrapper.GM_getResourceText('foo'), RESOURCE_TEXT, 'GM_getResourceText');
+  t.equal(await blobAsText(wrapper.GM_getResourceURL('foo')), RESOURCE_TEXT, 'GM_getResourceURL');
+  t.end();
+});

+ 9 - 0
test/mock/polyfill.js

@@ -27,3 +27,12 @@ for (const k of Object.keys(domProps)) {
 }
 delete domProps.performance;
 Object.defineProperties(global, domProps);
+
+global.URL = {
+  _cache: {},
+  createObjectURL(blob) {
+    const blobUrl = `blob:${Math.random()}`;
+    URL._cache[blobUrl] = blob;
+    return blobUrl;
+  },
+};