Source code

Revision control

Copy as Markdown

Other Tools

Test Info:

"use strict";
add_task(function test_defineLazyGetter() {
let accessCount = 0;
let obj = {
inScope: false,
};
const TEST_VALUE = "test value";
ChromeUtils.defineLazyGetter(obj, "foo", function () {
accessCount++;
this.inScope = true;
return TEST_VALUE;
});
Assert.equal(accessCount, 0);
// Get the property, making sure the access count has increased.
Assert.equal(obj.foo, TEST_VALUE);
Assert.equal(accessCount, 1);
Assert.ok(obj.inScope);
// Get the property once more, making sure the access count has not
// increased.
Assert.equal(obj.foo, TEST_VALUE);
Assert.equal(accessCount, 1);
});
add_task(function test_defineLazyGetter_name() {
// Properties that are convertible to NonIntAtom should be reflected to
// the getter name.
for (const name of [
"foo",
"\u3042",
true,
false,
-1,
1.1,
0.1,
null,
undefined,
{},
[],
/a/,
]) {
const obj = {};
const v = {};
ChromeUtils.defineLazyGetter(obj, name, () => v);
Assert.equal(
Object.getOwnPropertyDescriptor(obj, name).get.name,
String(name)
);
Assert.equal(obj[name], v);
Assert.equal(obj[name], v);
}
// Int and Symbol properties are not reflected to the getter name.
for (const name of [
0,
10,
Symbol.iterator,
Symbol("foo"),
Symbol.for("foo"),
]) {
const obj = {};
const v = {};
ChromeUtils.defineLazyGetter(obj, name, () => v);
Assert.equal(Object.getOwnPropertyDescriptor(obj, name).get.name, "");
Assert.equal(obj[name], v);
Assert.equal(obj[name], v);
}
});