161 lines
3.7 KiB
JavaScript
161 lines
3.7 KiB
JavaScript
/* Any copyright is dedicated to the Public Domain.
|
|
* http://creativecommons.org/publicdomain/zero/1.0/ */
|
|
|
|
"use strict";
|
|
|
|
var { getGlobalsForCode } = require("../lib/globals");
|
|
var assert = require("assert");
|
|
|
|
/* global describe, it */
|
|
|
|
describe("globals", function () {
|
|
it("should reflect top-level this property assignment", function () {
|
|
const globals = getGlobalsForCode(`
|
|
this.foo = 10;
|
|
`);
|
|
assert.deepEqual(globals, [{ name: "foo", writable: true }]);
|
|
});
|
|
|
|
it("should reflect this property assignment inside block", function () {
|
|
const globals = getGlobalsForCode(`
|
|
{
|
|
this.foo = 10;
|
|
}
|
|
`);
|
|
assert.deepEqual(globals, [{ name: "foo", writable: true }]);
|
|
});
|
|
|
|
it("should ignore this property assignment inside function declaration", function () {
|
|
const globals = getGlobalsForCode(`
|
|
function f() {
|
|
this.foo = 10;
|
|
}
|
|
`);
|
|
assert.deepEqual(globals, [{ name: "f", writable: true }]);
|
|
});
|
|
|
|
it("should ignore this property assignment inside function expression", function () {
|
|
const globals = getGlobalsForCode(`
|
|
(function f() {
|
|
this.foo = 10;
|
|
});
|
|
`);
|
|
assert.deepEqual(globals, []);
|
|
});
|
|
|
|
it("should ignore this property assignment inside method", function () {
|
|
const globals = getGlobalsForCode(`
|
|
({
|
|
method() {
|
|
this.foo = 10;
|
|
}
|
|
});
|
|
`);
|
|
assert.deepEqual(globals, []);
|
|
});
|
|
|
|
it("should ignore this property assignment inside accessor", function () {
|
|
const globals = getGlobalsForCode(`
|
|
({
|
|
get x() {
|
|
this.foo = 10;
|
|
},
|
|
set x(v) {
|
|
this.bar = 10;
|
|
}
|
|
});
|
|
`);
|
|
assert.deepEqual(globals, []);
|
|
});
|
|
|
|
it("should reflect this property assignment inside arrow function", function () {
|
|
const globals = getGlobalsForCode(`
|
|
() => {
|
|
this.foo = 10;
|
|
};
|
|
`);
|
|
assert.deepEqual(globals, [{ name: "foo", writable: true }]);
|
|
});
|
|
|
|
it("should ignore this property assignment inside arrow function inside function expression", function () {
|
|
const globals = getGlobalsForCode(`
|
|
(function f() {
|
|
() => {
|
|
this.foo = 10;
|
|
};
|
|
});
|
|
`);
|
|
assert.deepEqual(globals, []);
|
|
});
|
|
|
|
it("should ignore this property assignment inside class static", function () {
|
|
const globals = getGlobalsForCode(`
|
|
class A {
|
|
static {
|
|
this.foo = 10;
|
|
(() => {
|
|
this.bar = 10;
|
|
})();
|
|
}
|
|
}
|
|
`);
|
|
assert.deepEqual(globals, [{ name: "A", writable: true }]);
|
|
});
|
|
|
|
it("should ignore this property assignment inside class property", function () {
|
|
const globals = getGlobalsForCode(`
|
|
class A {
|
|
a = this.foo = 10;
|
|
b = (() => {
|
|
this.bar = 10;
|
|
})();
|
|
}
|
|
`);
|
|
assert.deepEqual(globals, [{ name: "A", writable: true }]);
|
|
});
|
|
|
|
it("should ignore this property assignment inside class static property", function () {
|
|
const globals = getGlobalsForCode(`
|
|
class A {
|
|
static a = this.foo = 10;
|
|
static b = (() => {
|
|
this.bar = 10;
|
|
})();
|
|
}
|
|
`);
|
|
assert.deepEqual(globals, [{ name: "A", writable: true }]);
|
|
});
|
|
|
|
it("should ignore this property assignment inside class private property", function () {
|
|
const globals = getGlobalsForCode(`
|
|
class A {
|
|
#a = this.foo = 10;
|
|
#b = (() => {
|
|
this.bar = 10;
|
|
})();
|
|
}
|
|
`);
|
|
assert.deepEqual(globals, [{ name: "A", writable: true }]);
|
|
});
|
|
|
|
it("should ignore this property assignment inside class static private property", function () {
|
|
const globals = getGlobalsForCode(`
|
|
class A {
|
|
static #a = this.foo = 10;
|
|
static #b = (() => {
|
|
this.bar = 10;
|
|
})();
|
|
}
|
|
`);
|
|
assert.deepEqual(globals, [{ name: "A", writable: true }]);
|
|
});
|
|
|
|
it("should reflect lazy getters", function () {
|
|
const globals = getGlobalsForCode(`
|
|
ChromeUtils.defineESModuleGetters(this, {
|
|
A: "B",
|
|
});
|
|
`);
|
|
assert.deepEqual(globals, [{ name: "A", writable: true, explicit: true }]);
|
|
});
|
|
});
|