70 lines
1.6 KiB
JavaScript
70 lines
1.6 KiB
JavaScript
"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);
|
|
}
|
|
});
|