Source code

Revision control

Copy as Markdown

Other Tools

Test Info:

/* This Source Code Form is subject to the terms of the Mozilla Public
* License, v. 2.0. If a copy of the MPL was not distributed with this
* file, You can obtain one at http://mozilla.org/MPL/2.0/. */
"use strict";
/**
* Test QRCodeGenerator with worker integration
*/
const { QRCodeGenerator } = ChromeUtils.importESModule(
"moz-src:///browser/components/qrcode/QRCodeGenerator.sys.mjs"
);
/**
* Helper function to create a minimal mock document with required methods
*/
function createMockDocument() {
return {
createElementNS: (ns, tagName) => {
if (tagName === "canvas") {
return {
width: 0,
height: 0,
getContext: () => ({
imageSmoothingEnabled: false,
imageSmoothingQuality: "high",
fillStyle: "white",
beginPath: () => {},
arc: () => {},
fill: () => {},
drawImage: () => {},
}),
toDataURL: () => "data:image/png;base64,mock",
};
} else if (tagName === "img") {
return {
onload: null,
onerror: null,
set src(value) {
// Simulate image load
Services.tm.dispatchToMainThread(() => {
if (this.onload) {
this.onload();
}
});
},
};
}
return {};
},
};
}
add_task(async function test_generator_uses_worker() {
info("Testing QRCodeGenerator generates QR code using worker");
const mockDocument = createMockDocument();
// Generate a QR code using the worker
const testUrl = "https://mozilla.org";
const dataUri = await QRCodeGenerator.generateQRCode(testUrl, mockDocument);
Assert.ok(dataUri, "Should get a data URI from generateQRCode");
Assert.ok(dataUri.startsWith("data:image/"), "Should be a data URI");
// Worker is automatically cleaned up after generation
});
add_task(async function test_generator_multiple_generations() {
info("Testing QRCodeGenerator can generate multiple QR codes");
// Generate first QR code
const dataUri1 = await QRCodeGenerator.generateQRCode(
createMockDocument()
);
Assert.ok(dataUri1, "Should get first data URI");
// Generate second QR code
const dataUri2 = await QRCodeGenerator.generateQRCode(
createMockDocument()
);
Assert.ok(dataUri2, "Should get second data URI");
// Each call creates and cleans up its own worker
});