summaryrefslogtreecommitdiffstats
path: root/js/src/jit-test/tests/decorators/addInitializer.js
diff options
context:
space:
mode:
Diffstat (limited to 'js/src/jit-test/tests/decorators/addInitializer.js')
-rw-r--r--js/src/jit-test/tests/decorators/addInitializer.js39
1 files changed, 39 insertions, 0 deletions
diff --git a/js/src/jit-test/tests/decorators/addInitializer.js b/js/src/jit-test/tests/decorators/addInitializer.js
new file mode 100644
index 0000000000..334de8f721
--- /dev/null
+++ b/js/src/jit-test/tests/decorators/addInitializer.js
@@ -0,0 +1,39 @@
+// |jit-test| skip-if: !getBuildConfiguration("decorators")
+load(libdir + "asserts.js");
+
+let extraInitializerCalled = {};
+
+function checkDecoratorContext(kind, isPrivate, isStatic, name) {
+ return function (value, context) {
+ if (kind == "field") {
+ assertEq(value, undefined);
+ } else if (kind == "accessor") {
+ assertEq(typeof value, "object");
+ assertEq(typeof value.get, "function");
+ assertEq(typeof value.set, "function");
+ }
+ assertEq(context.kind, kind);
+ assertEq(typeof context.access, "object");
+ assertEq(context.private, isPrivate);
+ assertEq(context.static, isStatic);
+ assertEq(context.name, name);
+ assertEq(typeof context.addInitializer, "function");
+ context.addInitializer(() => {extraInitializerCalled[context.name] = true;});
+ // return undefined
+ }
+}
+
+class C {
+ @checkDecoratorContext("field", false, false, "x") x;
+ @checkDecoratorContext("accessor", true, false, "y accessor storage") accessor y;
+ @checkDecoratorContext("method", false, false, "f") f() {};
+ @checkDecoratorContext("method", false, false, 1) 1() {};
+ @checkDecoratorContext("method", false, false, 2) 2n() {};
+}
+
+let c = new C();
+assertEq(extraInitializerCalled["x"], true);
+assertEq(extraInitializerCalled["y accessor storage"], true);
+assertEq(extraInitializerCalled["f"], true);
+assertEq(extraInitializerCalled["1"], true);
+assertEq(extraInitializerCalled["2"], true);