gecko-dev/remote/test/unit/test_DomainCache.js

128 строки
2.6 KiB
JavaScript

/* Any copyright is dedicated to the Public Domain.
* http://creativecommons.org/publicdomain/zero/1.0/ */
"use strict";
const { Domain } = ChromeUtils.import(
"chrome://remote/content/domains/Domain.jsm"
);
const { DomainCache } = ChromeUtils.import(
"chrome://remote/content/domains/DomainCache.jsm"
);
class MockSession {
onEvent() {}
}
const noopSession = new MockSession();
add_test(function test_DomainCache_constructor() {
new DomainCache(noopSession, {});
run_next_test();
});
add_test(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"));
run_next_test();
});
add_test(function test_DomainCache_get_invalidModule() {
Assert.throws(() => {
const domains = new DomainCache(noopSession, { Foo: undefined });
domains.get("Foo");
}, /UnknownMethodError/);
run_next_test();
});
add_test(function test_DomainCache_get_missingConstructor() {
Assert.throws(() => {
const domains = new DomainCache(noopSession, { Foo: {} });
domains.get("Foo");
}, /TypeError/);
run_next_test();
});
add_test(function test_DomainCache_get_superClassNotDomain() {
Assert.throws(() => {
const domains = new DomainCache(noopSession, { Foo: class {} });
domains.get("Foo");
}, /TypeError/);
run_next_test();
});
add_test(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);
run_next_test();
});
add_test(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);
run_next_test();
});
add_test(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);
run_next_test();
});