summaryrefslogtreecommitdiffstats
path: root/js/src/tests/non262/expressions/trailing_comma_getter_setter.js
diff options
context:
space:
mode:
Diffstat (limited to '')
-rw-r--r--js/src/tests/non262/expressions/trailing_comma_getter_setter.js88
1 files changed, 88 insertions, 0 deletions
diff --git a/js/src/tests/non262/expressions/trailing_comma_getter_setter.js b/js/src/tests/non262/expressions/trailing_comma_getter_setter.js
new file mode 100644
index 0000000000..258dd8df61
--- /dev/null
+++ b/js/src/tests/non262/expressions/trailing_comma_getter_setter.js
@@ -0,0 +1,88 @@
+/* This Source Code Form is subject to the terms of the Mozilla Public
+ * License, v. 2.0. If a copy of the MPL was not distributed with this
+ * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
+
+// Trailing comma is not allowed in getter and setter methods
+
+// 14.3 Method Definitions
+// MethodDefinition[Yield]:
+// get PropertyName[?Yield] () { FunctionBody[~Yield] }
+// set PropertyName[?Yield] ( PropertySetParameterList ) { FunctionBody[~Yield] }
+// PropertySetParameterList:
+// FormalParameter[~Yield]
+
+function objectGetter(argList) {
+ return eval(`({
+ get m(${argList}) {}
+ })`);
+}
+
+function objectSetter(argList) {
+ return eval(`({
+ set m(${argList}) {}
+ })`);
+}
+
+function classGetter(argList) {
+ return eval(`(class {
+ get m(${argList}) {}
+ })`);
+}
+
+function classStaticGetter(argList) {
+ return eval(`(class {
+ static get m(${argList}) {}
+ })`);
+}
+
+function classSetter(argList) {
+ return eval(`(class {
+ set m(${argList}) {}
+ })`);
+}
+
+function classStaticSetter(argList) {
+ return eval(`(class {
+ static set m(${argList}) {}
+ })`);
+}
+
+const tests = [
+ objectGetter,
+ objectSetter,
+ classGetter,
+ classStaticGetter,
+ classSetter,
+ classStaticSetter,
+];
+
+for (let test of tests) {
+ // Trailing comma.
+ assertThrowsInstanceOf(() => test("a, "), SyntaxError);
+ assertThrowsInstanceOf(() => test("[], "), SyntaxError);
+ assertThrowsInstanceOf(() => test("{}, "), SyntaxError);
+ assertThrowsInstanceOf(() => test("a = 0, "), SyntaxError);
+ assertThrowsInstanceOf(() => test("[] = [], "), SyntaxError);
+ assertThrowsInstanceOf(() => test("{} = {}, "), SyntaxError);
+
+ // Trailing comma in empty parameters list.
+ assertThrowsInstanceOf(() => test(","), SyntaxError);
+
+ // Leading comma.
+ assertThrowsInstanceOf(() => test(", a"), SyntaxError);
+ assertThrowsInstanceOf(() => test(", ...a"), SyntaxError);
+
+ // Multiple trailing comma.
+ assertThrowsInstanceOf(() => test("a, ,"), SyntaxError);
+ assertThrowsInstanceOf(() => test("a..., ,"), SyntaxError);
+
+ // Trailing comma after rest parameter.
+ assertThrowsInstanceOf(() => test("...a ,"), SyntaxError);
+ assertThrowsInstanceOf(() => test("a, ...b, "), SyntaxError);
+
+ // Elision.
+ assertThrowsInstanceOf(() => test("a, , b"), SyntaxError);
+}
+
+if (typeof reportCompare === "function")
+ reportCompare(0, 0);