diff options
Diffstat (limited to 'remote/test/unit/test_DomainCache.js')
-rw-r--r-- | remote/test/unit/test_DomainCache.js | 127 |
1 files changed, 127 insertions, 0 deletions
diff --git a/remote/test/unit/test_DomainCache.js b/remote/test/unit/test_DomainCache.js new file mode 100644 index 0000000000..e54ebbc314 --- /dev/null +++ b/remote/test/unit/test_DomainCache.js @@ -0,0 +1,127 @@ +/* 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(); +}); |