aboutsummaryrefslogtreecommitdiffstats
path: root/tests
diff options
context:
space:
mode:
authorLars Knoll <lars.knoll@qt.io>2018-11-05 10:18:53 +0100
committerLars Knoll <lars.knoll@qt.io>2018-11-22 08:47:08 +0000
commit33c13efd91954fb50019e82f3ab8e8e1d8458332 (patch)
tree6d91724990f49fc4f04f012599cfa3241b98f4ec /tests
parent03f492f91a9ac6d33be05488f7ea6fb5decaf873 (diff)
Ensure our builtin constructors are subclassable
Respect the newTarget passed into those constructors and make sure we set up the proto chain correctly. Change-Id: I3d12c7dbef4b33660a6715d73e9fb0f89105167a Fixes: QTBUG-71138 Reviewed-by: Erik Verbruggen <erik.verbruggen@qt.io>
Diffstat (limited to 'tests')
-rw-r--r--tests/auto/qml/ecmascripttests/TestExpectations5
-rw-r--r--tests/auto/qml/v4misc/tst_v4misc.cpp43
2 files changed, 43 insertions, 5 deletions
diff --git a/tests/auto/qml/ecmascripttests/TestExpectations b/tests/auto/qml/ecmascripttests/TestExpectations
index 02cb6acf99..ed5060a77d 100644
--- a/tests/auto/qml/ecmascripttests/TestExpectations
+++ b/tests/auto/qml/ecmascripttests/TestExpectations
@@ -139,7 +139,6 @@ built-ins/Date/prototype/toTimeString/invalid-date.js fails
built-ins/Date/prototype/toUTCString/day-names.js fails
built-ins/Date/prototype/toUTCString/format.js fails
built-ins/Date/prototype/toUTCString/month-names.js fails
-built-ins/Date/subclassing.js fails
built-ins/Function/internals/Construct/base-ctor-revoked-proxy.js fails
built-ins/Function/prototype/bind/BoundFunction_restricted-properties.js fails
built-ins/Function/prototype/bind/instance-name-chained.js fails
@@ -177,14 +176,10 @@ built-ins/Object/prototype/toString/proxy-function.js fails
built-ins/Object/prototype/valueOf/S15.2.4.4_A14.js fails
built-ins/Object/values/getter-adding-key.js fails
built-ins/Object/values/observable-operations.js fails
-built-ins/Promise/all/ctx-ctor.js fails
built-ins/Promise/prototype/catch/this-value-obj-coercible.js fails
-built-ins/Promise/prototype/then/capability-executor-called-twice.js fails
built-ins/Promise/prototype/then/capability-executor-not-callable.js fails
built-ins/Promise/prototype/then/ctor-custom.js fails
built-ins/Promise/race/ctx-ctor.js fails
-built-ins/Promise/reject/ctx-ctor.js fails
-built-ins/Promise/resolve/ctx-ctor.js fails
built-ins/Proxy/ownKeys/return-duplicate-entries-throws.js fails
built-ins/Proxy/ownKeys/return-duplicate-symbol-entries-throws.js fails
built-ins/RegExp/S15.10.2.12_A2_T1.js fails
diff --git a/tests/auto/qml/v4misc/tst_v4misc.cpp b/tests/auto/qml/v4misc/tst_v4misc.cpp
index 5aac91aae9..ecc3a4100c 100644
--- a/tests/auto/qml/v4misc/tst_v4misc.cpp
+++ b/tests/auto/qml/v4misc/tst_v4misc.cpp
@@ -40,6 +40,9 @@ private slots:
void parserMisc_data();
void parserMisc();
+
+ void subClassing_data();
+ void subClassing();
};
void tst_v4misc::tdzOptimizations_data()
@@ -130,6 +133,46 @@ void tst_v4misc::parserMisc()
QCOMPARE(result.toString(), error);
}
+void tst_v4misc::subClassing_data()
+{
+ QTest::addColumn<QString>("script");
+
+ QString code(
+ "class Foo extends %1 {"
+ " constructor() { super(); this.reset(); }"
+ " reset() { }"
+ "}"
+ "new Foo();");
+
+
+ QTest::newRow("Array") << code.arg("Array");
+ QTest::newRow("Boolean") << code.arg("Boolean");
+ QTest::newRow("Date") << code.arg("Date");
+ QTest::newRow("Function") << code.arg("Function");
+ QTest::newRow("Number") << code.arg("Number");
+ QTest::newRow("Map") << code.arg("Map");
+ QTest::newRow("Promise") << QString(
+ "class Foo extends Promise {"
+ " constructor() { super(Function()); this.reset(); }"
+ " reset() { }"
+ "}"
+ "new Foo();");
+ QTest::newRow("RegExp") << code.arg("RegExp");
+ QTest::newRow("Set") << code.arg("Set");
+ QTest::newRow("String") << code.arg("String");
+ QTest::newRow("WeakMap") << code.arg("WeakMap");
+ QTest::newRow("WeakSet") << code.arg("WeakSet");
+}
+
+void tst_v4misc::subClassing()
+{
+ QFETCH(QString, script);
+
+ QJSEngine engine;
+ QJSValue result = engine.evaluate(script);
+ QVERIFY(!result.isError());
+}
+
QTEST_MAIN(tst_v4misc);
#include "tst_v4misc.moc"