/* Any copyright is dedicated to the Public Domain. http://creativecommons.org/publicdomain/zero/1.0/ */ "use strict"; const { sinon } = ChromeUtils.importESModule( "resource://testing-common/Sinon.sys.mjs" ); const { OPFS } = ChromeUtils.importESModule( "chrome://global/content/ml/OPFS.sys.mjs" ); const { Progress } = ChromeUtils.importESModule( "chrome://global/content/ml/Utils.sys.mjs" ); add_task(async function test_opfs_file_from_cache() { const iconUrl = "chrome://global/content/ml/mozilla-logo.webp"; const icon = await new OPFS.File({ urls: [iconUrl], localPath: `/icons/icon_${crypto.randomUUID()}.webp`, }); let blobUrl = await icon.getAsObjectURL(); Assert.notEqual(blobUrl, null, "we got a blob url"); // second call will get it from the cache let spy = sinon.spy(Progress, "fetchUrl"); blobUrl = await icon.getAsObjectURL(); Assert.notEqual(blobUrl, null); // check that it cames from OPFS Assert.equal(await spy.called, false); spy.restore(); await icon.delete(); }); add_task(async function test_opfs_file_download() { const iconUrl = "chrome://global/content/ml/mozilla-logo.webp"; let spy = sinon.spy(Progress, "fetchUrl"); const icon = await new OPFS.File({ urls: [iconUrl], localPath: `/icons/icon_${crypto.randomUUID()}.webp`, }); let blobUrl = await icon.getAsObjectURL(); Assert.notEqual(blobUrl, null, "we got a blob url"); // check that it didn't come from OPFS Assert.equal(spy.called, true); Assert.notEqual(await spy.lastCall, null); Assert.notEqual(await spy.lastCall.returnValue, null); spy.restore(); await icon.delete(); }); /** * Test toResponse function. */ add_task(async function test_ml_opfs_to_response() { const modelPath = `test_${crypto.randomUUID()}.txt`; await OPFS.getFileHandle(modelPath, { create: true }); registerCleanupFunction(async () => { await OPFS.remove(modelPath); }); const cases = [ { model: modelPath, headers: null, expected: {}, msg: "valid response with no headers", }, { model: modelPath, headers: { some: "header" }, expected: { some: "header" }, msg: "valid response", }, { model: modelPath, headers: { some: "header", int: 1234 }, expected: { some: "header", int: "1234" }, msg: "valid response with ints conversion", }, { model: modelPath, headers: { some: null, int: 1234 }, expected: { int: "1234" }, msg: "valid response with null keys ignored", }, ]; for (const case_ of cases) { const response = await OPFS.toResponse(case_.model, case_.headers); for (const [key, value] of Object.entries(case_.expected)) { Assert.deepEqual(response.headers.get(key), value, case_.message); } } });