/* Any copyright is dedicated to the Public Domain.
* http://creativecommons.org/publicdomain/zero/1.0/ */
"use strict";
const { Domain } = ChromeUtils.importESModule(
"chrome://remote/content/cdp/domains/Domain.sys.mjs"
);
const { DomainCache } = ChromeUtils.importESModule(
"chrome://remote/content/cdp/domains/DomainCache.sys.mjs"
);
class MockSession {
onEvent() {}
}
const noopSession =
new MockSession();
add_task(
function test_DomainCache_constructor() {
new DomainCache(noopSession, {});
});
add_task(
function test_DomainCache_domainSupportsMethod() {
const modules = {
Foo:
class extends Domain {
bar() {}
},
};
const domains =
new DomainCache(noopSession, modules);
ok(domains.domainSupportsMethod(
"Foo",
"bar"));
ok(!domains.domainSupportsMethod(
"Foo",
"baz"));
ok(!domains.domainSupportsMethod(
"foo",
"bar"));
});
add_task(
function test_DomainCache_get_invalidModule() {
Assert.
throws(() => {
const domains =
new DomainCache(noopSession, { Foo: undefined });
domains.get(
"Foo");
}, /UnknownMethodError/);
});
add_task(
function test_DomainCache_get_missingConstructor() {
Assert.
throws(() => {
const domains =
new DomainCache(noopSession, { Foo: {} });
domains.get(
"Foo");
}, /TypeError/);
});
add_task(
function test_DomainCache_get_superClassNotDomain() {
Assert.
throws(() => {
const domains =
new DomainCache(noopSession, { Foo:
class {} });
domains.get(
"Foo");
}, /TypeError/);
});
add_task(
function test_DomainCache_get_constructs() {
let eventFired;
class Session {
onEvent(event) {
eventFired = event;
}
}
let constructed =
false;
class Foo
extends Domain {
constructor() {
super();
constructed =
true;
}
}
const session =
new Session();
const domains =
new DomainCache(session, { Foo });
const foo = domains.get(
"Foo");
ok(constructed);
ok(foo
instanceof Foo);
const event = {};
foo.emit(event);
equal(event, eventFired);
});
add_task(
function test_DomainCache_size() {
class Foo
extends Domain {}
const domains =
new DomainCache(noopSession, { Foo });
equal(domains.size, 0);
domains.get(
"Foo");
equal(domains.size, 1);
});
add_task(
function test_DomainCache_clear() {
let dtorCalled =
false;
class Foo
extends Domain {
destructor() {
dtorCalled =
true;
}
}
const domains =
new DomainCache(noopSession, { Foo });
equal(domains.size, 0);
domains.get(
"Foo");
equal(domains.size, 1);
domains.clear();
equal(domains.size, 0);
ok(dtorCalled);
});