153 lines
4.7 KiB
JavaScript
153 lines
4.7 KiB
JavaScript
/* Any copyright is dedicated to the Public Domain.
|
|
* http://creativecommons.org/publicdomain/zero/1.0/ */
|
|
|
|
"use strict";
|
|
|
|
const { Stream, StreamRegistry } = ChromeUtils.importESModule(
|
|
"chrome://remote/content/cdp/StreamRegistry.sys.mjs"
|
|
);
|
|
|
|
add_task(function test_constructor() {
|
|
const registry = new StreamRegistry();
|
|
equal(registry.streams.size, 0);
|
|
});
|
|
|
|
add_task(async function test_destructor() {
|
|
const registry = new StreamRegistry();
|
|
|
|
const stream1 = await createFileStream("foo bar");
|
|
const stream2 = await createFileStream("foo bar");
|
|
|
|
registry.add(stream1);
|
|
registry.add(stream2);
|
|
|
|
equal(registry.streams.size, 2);
|
|
|
|
await registry.destructor();
|
|
equal(registry.streams.size, 0);
|
|
|
|
ok(!(await IOUtils.exists(stream1.path)), "temporary file has been removed");
|
|
ok(!(await IOUtils.exists(stream2.path)), "temporary file has been removed");
|
|
});
|
|
|
|
add_task(async function test_addValidStreamType() {
|
|
const registry = new StreamRegistry();
|
|
|
|
const stream = await createFileStream("foo bar");
|
|
const handle = registry.add(stream);
|
|
|
|
equal(registry.streams.size, 1, "A single stream has been added");
|
|
equal(typeof handle, "string", "Handle is of type string");
|
|
ok(registry.streams.has(handle), "Handle has been found");
|
|
|
|
const rv = registry.streams.get(handle);
|
|
equal(rv, stream, "Expected stream found");
|
|
});
|
|
|
|
add_task(async function test_addCreatesDifferentHandles() {
|
|
const registry = new StreamRegistry();
|
|
const stream = await createFileStream("foo bar");
|
|
|
|
const handle1 = registry.add(stream);
|
|
equal(registry.streams.size, 1, "A single stream has been added");
|
|
equal(typeof handle1, "string", "Handle is of type string");
|
|
ok(registry.streams.has(handle1), "Handle has been found");
|
|
equal(registry.streams.get(handle1), stream, "Expected stream found");
|
|
|
|
const handle2 = registry.add(stream);
|
|
equal(registry.streams.size, 2, "A single stream has been added");
|
|
equal(typeof handle2, "string", "Handle is of type string");
|
|
ok(registry.streams.has(handle2), "Handle has been found");
|
|
equal(registry.streams.get(handle2), stream, "Expected stream found");
|
|
|
|
notEqual(handle1, handle2, "Different handles have been generated");
|
|
});
|
|
|
|
add_task(async function test_addInvalidStreamType() {
|
|
const registry = new StreamRegistry();
|
|
Assert.throws(() => registry.add(new Blob([])), /UnsupportedError/);
|
|
});
|
|
|
|
add_task(async function test_getForValidHandle() {
|
|
const registry = new StreamRegistry();
|
|
const stream = await createFileStream("foo bar");
|
|
const handle = registry.add(stream);
|
|
|
|
equal(registry.streams.size, 1, "A single stream has been added");
|
|
equal(registry.get(handle), stream, "Expected stream found");
|
|
});
|
|
|
|
add_task(async function test_getForInvalidHandle() {
|
|
const registry = new StreamRegistry();
|
|
const stream = await createFileStream("foo bar");
|
|
registry.add(stream);
|
|
|
|
equal(registry.streams.size, 1, "A single stream has been added");
|
|
Assert.throws(() => registry.get("foo"), /TypeError/);
|
|
});
|
|
|
|
add_task(async function test_removeForValidHandle() {
|
|
const registry = new StreamRegistry();
|
|
const stream1 = await createFileStream("foo bar");
|
|
const stream2 = await createFileStream("foo bar");
|
|
|
|
const handle1 = registry.add(stream1);
|
|
const handle2 = registry.add(stream2);
|
|
|
|
equal(registry.streams.size, 2);
|
|
|
|
await registry.remove(handle1);
|
|
equal(registry.streams.size, 1);
|
|
equal(registry.get(handle2), stream2, "Second stream has not been closed");
|
|
|
|
ok(
|
|
!(await IOUtils.exists(stream1.path)),
|
|
"temporary file for first stream is removed"
|
|
);
|
|
ok(
|
|
await IOUtils.exists(stream2.path),
|
|
"temporary file for second stream is not removed"
|
|
);
|
|
});
|
|
|
|
add_task(async function test_removeForInvalidHandle() {
|
|
const registry = new StreamRegistry();
|
|
const stream = await createFileStream("foo bar");
|
|
registry.add(stream);
|
|
|
|
equal(registry.streams.size, 1, "A single stream has been added");
|
|
await Assert.rejects(registry.remove("foo"), /TypeError/);
|
|
});
|
|
|
|
/**
|
|
* Create a stream with the specified contents.
|
|
*
|
|
* @param {string} contents
|
|
* Contents of the file.
|
|
* @param {object} options
|
|
* @param {string=} options.path
|
|
* Path of the file. Defaults to the temporary directory.
|
|
* @param {boolean=} options.remove
|
|
* If true, automatically remove the file after the test. Defaults to true.
|
|
*
|
|
* @returns {Promise<Stream>}
|
|
*/
|
|
async function createFileStream(contents, options = {}) {
|
|
let { path = null, remove = true } = options;
|
|
|
|
if (!path) {
|
|
path = await IOUtils.createUniqueFile(
|
|
PathUtils.tempDir,
|
|
"remote-agent.txt"
|
|
);
|
|
}
|
|
|
|
await IOUtils.writeUTF8(path, contents);
|
|
|
|
const stream = new Stream(path);
|
|
if (remove) {
|
|
registerCleanupFunction(() => stream.destroy());
|
|
}
|
|
|
|
return stream;
|
|
}
|