aboutsummaryrefslogtreecommitdiff
path: root/tests/jerry/es2015/class.js
diff options
context:
space:
mode:
Diffstat (limited to 'tests/jerry/es2015/class.js')
-rw-r--r--tests/jerry/es2015/class.js199
1 files changed, 199 insertions, 0 deletions
diff --git a/tests/jerry/es2015/class.js b/tests/jerry/es2015/class.js
new file mode 100644
index 00000000..066b2e78
--- /dev/null
+++ b/tests/jerry/es2015/class.js
@@ -0,0 +1,199 @@
+/* Copyright JS Foundation and other contributors, http://js.foundation
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+function must_throw(str) {
+ try {
+ eval("switch (1) { default: " + str + "}");
+ assert(false);
+ } catch (e) {
+ }
+
+ try {
+ eval(str);
+ assert(false);
+ }
+ catch (e) {
+ }
+
+ must_throw_strict(str);
+}
+
+function must_throw_strict(str) {
+ try {
+ eval ("'use strict'; switch (1) { default: " + str + "}");
+ assert (false);
+ } catch (e) {
+ }
+
+ try {
+ eval("'use strict'; " + str);
+ assert(false);
+ } catch (e) {
+ }
+}
+
+must_throw("class {}");
+must_throw("class class {}");
+must_throw("class A { constructor() {} this.a = 5 }");
+must_throw("class A { constructor() {} constructor() {} }");
+must_throw("class A { static prototype() {} }");
+must_throw("class A { get constructor() {} }");
+must_throw("class A { set constructor() {} }");
+must_throw("class A {}; A()");
+must_throw("class X {}; var o = {}; Object.defineProperty(o, 'p', { get: X, set: X }); o.p;");
+must_throw("var a = new A; class A {};");
+must_throw("class A { g\\u0065t e() {} }");
+must_throw('class A { "static" e() {} }');
+
+assert(eval("class A {}") === undefined);
+assert(eval("var a = class A {}") === undefined);
+assert(eval("var a = class {}") === undefined);
+assert(eval("class A { ; ; ; ;;;;;;;;;;;; ; ; ;;;;;;;;;;;;;;;;;;;;;;;;; }") === undefined);
+assert(eval('class A {"constructor"() {} }') === undefined);
+assert(isNaN (eval('switch(1) { default: (class A{} % 1) }')));
+
+class B {
+}
+
+var b = new B;
+assert(typeof B === "function");
+assert(typeof b === "object");
+
+class C {
+ c1() {
+ return 5;
+ }
+
+ c2() {
+ return this._c;
+ }
+ 3() {
+ return 3;
+ }
+}
+
+var c = new C;
+assert (c.c1() === 5);
+assert (c.c2() === undefined);
+assert (c["3"]() === 3);
+
+class D {
+ constructor(d) {
+ this._d = d;
+ }
+
+ d1() {
+ return this._d;
+ }
+}
+var d = new D(5);
+assert(d.d1() === 5);
+
+class E {
+ constructor(e) {
+ this._e = e;
+ }
+
+ get e() {
+ return this._e;
+ }
+
+ set e(e) {
+ this._e = e;
+ }
+}
+var e = new E (5);
+assert (e.e === 5);
+e.e = 10;
+assert (e.e === 10);
+
+var F = class ClassF {
+ constructor(f) {
+ this._f = f;
+ }
+
+ static f1() {
+ return this;
+ }
+
+ static f2() {
+ return this._f;
+ }
+
+ static f3(a, b) {
+ return a + b;
+ }
+
+ static constructor(a) {
+ return a;
+ }
+
+ static static(a) {
+ return a;
+ }
+
+ static 2 (a) {
+ return 2 * a;
+ }
+}
+
+var f = new F(5);
+
+assert (f.f1 === undefined);
+assert (f.f2 === undefined);
+assert (F.f1() === F);
+assert (F.f2() === undefined);
+assert (F.f3(1, 1) === 2);
+assert (F.constructor(5) === 5);
+assert (F.static(5) === 5);
+assert (F["2"](5) === 10);
+
+var G = class {
+ static set a(a) {
+ this._a = a;
+ }
+ static get a() {
+ return this._a;
+ }
+ static set 1(a) {
+ this._a = a;
+ }
+ static get 1() {
+ return this._a;
+ }
+
+ static set constructor(a) {
+ this._a = a;
+ }
+ static get constructor() {
+ return this._a;
+ }
+
+ static g1() {
+ return 5;
+ }
+
+ static g1() {
+ return 10;
+ }
+}
+
+G.a = 10;
+assert (G.a === 10);
+assert (G.g1() === 10);
+G["1"] = 20;
+assert (G["1"] === 20);
+G.constructor = 30;
+assert (G.constructor === 30);