aboutsummaryrefslogtreecommitdiffstats
path: root/tests
diff options
context:
space:
mode:
Diffstat (limited to 'tests')
-rw-r--r--tests/auto/qml/debugger/qdebugmessageservice/tst_qdebugmessageservice.cpp9
-rw-r--r--tests/auto/qml/debugger/qqmldebugclient/tst_qqmldebugclient.cpp2
-rw-r--r--tests/auto/qml/debugger/qqmldebuggingenabler/qqmldebuggingenabler/tst_qqmldebuggingenabler.cpp4
-rw-r--r--tests/auto/qml/debugger/qqmldebugjs/qqmldebugjs/tst_qqmldebugjs.cpp6
-rw-r--r--tests/auto/qml/debugger/qqmldebuglocal/tst_qqmldebuglocal.cpp2
-rw-r--r--tests/auto/qml/debugger/qqmldebugprocess/qqmldebugprocess/tst_qqmldebugprocess.cpp2
-rw-r--r--tests/auto/qml/debugger/qqmldebugservice/tst_qqmldebugservice.cpp2
-rw-r--r--tests/auto/qml/debugger/qqmlprofilerservice/tst_qqmlprofilerservice.cpp22
-rw-r--r--tests/auto/qml/debugger/qv4debugger/tst_qv4debugger.cpp31
-rw-r--r--tests/auto/qml/debugger/shared/debugutil.cpp96
-rw-r--r--tests/auto/qml/debugger/shared/debugutil_p.h29
-rw-r--r--tests/auto/qml/debugger/shared/qqmldebugprocess.cpp8
-rw-r--r--tests/auto/qml/debugger/shared/qqmldebugprocess_p.h4
-rw-r--r--tests/auto/qml/debugger/shared/qqmldebugtestservice.cpp1
-rw-r--r--tests/auto/qml/debugger/shared/qqmldebugtestservice.h3
-rw-r--r--tests/auto/qml/ecmascripttests/TestExpectations4835
-rw-r--r--tests/auto/qml/ecmascripttests/ecmascripttests.pro15
-rw-r--r--tests/auto/qml/ecmascripttests/qjstest/main.cpp114
-rw-r--r--tests/auto/qml/ecmascripttests/qjstest/qjstest.pro13
-rw-r--r--tests/auto/qml/ecmascripttests/qjstest/test262runner.cpp758
-rw-r--r--tests/auto/qml/ecmascripttests/qjstest/test262runner.h131
m---------tests/auto/qml/ecmascripttests/test2620
-rwxr-xr-xtests/auto/qml/ecmascripttests/test262.py91
-rw-r--r--tests/auto/qml/ecmascripttests/testcase.pro15
-rw-r--r--tests/auto/qml/ecmascripttests/tst_ecmascripttests.cpp48
-rw-r--r--tests/auto/qml/qjsengine/tst_qjsengine.cpp115
-rw-r--r--tests/auto/qml/qmldiskcache/tst_qmldiskcache.cpp12
-rw-r--r--tests/auto/qml/qmlmin/tst_qmlmin.cpp2
-rw-r--r--tests/auto/qml/qqmlcomponent/tst_qqmlcomponent.cpp24
-rw-r--r--tests/auto/qml/qqmlconsole/data/logging.qml2
-rw-r--r--tests/auto/qml/qqmlconsole/tst_qqmlconsole.cpp11
-rw-r--r--tests/auto/qml/qqmlecmascript/data/assignSequenceTypes.8.qml16
-rw-r--r--tests/auto/qml/qqmlecmascript/data/include_pragma_shadow.js7
-rw-r--r--tests/auto/qml/qqmlecmascript/data/include_pragma_shadow.qml15
-rw-r--r--tests/auto/qml/qqmlecmascript/data/jsimport/importPragmaLibraryWithPragmaLibraryImports.js2
-rw-r--r--tests/auto/qml/qqmlecmascript/data/jsimport/testImportPragmaLibraryWithPragmaLibraryImports.qml2
-rw-r--r--tests/auto/qml/qqmlecmascript/data/jsimport/testJsImport.qml4
-rw-r--r--tests/auto/qml/qqmlecmascript/data/jsimport/testJsModuleImport.js2
-rw-r--r--tests/auto/qml/qqmlecmascript/data/jsimport/testJsModuleRemoteImport.js2
-rw-r--r--tests/auto/qml/qqmlecmascript/data/jsimport/testJsRemoteImport.qml4
-rw-r--r--tests/auto/qml/qqmlecmascript/data/lib/com/qt/JsModule/ScriptAPI.js (renamed from tests/auto/qml/qqmlecmascript/data/lib/com/nokia/JsModule/ScriptAPI.js)0
-rw-r--r--tests/auto/qml/qqmlecmascript/data/lib/com/qt/JsModule/qmldir (renamed from tests/auto/qml/qqmlecmascript/data/lib/com/nokia/JsModule/qmldir)0
-rw-r--r--tests/auto/qml/qqmlecmascript/data/remote/com/qt/JsRemoteModule/ScriptAPI.js (renamed from tests/auto/qml/qqmlecmascript/data/remote/com/nokia/JsRemoteModule/ScriptAPI.js)0
-rw-r--r--tests/auto/qml/qqmlecmascript/data/remote/com/qt/JsRemoteModule/qmldir (renamed from tests/auto/qml/qqmlecmascript/data/remote/com/nokia/JsRemoteModule/qmldir)0
-rw-r--r--tests/auto/qml/qqmlecmascript/data/removeBindingsWithNoDependencies.qml9
-rw-r--r--tests/auto/qml/qqmlecmascript/data/tryStatement.3.qml2
-rw-r--r--tests/auto/qml/qqmlecmascript/data/tryStatement.4.qml2
-rw-r--r--tests/auto/qml/qqmlecmascript/tst_qqmlecmascript.cpp389
-rw-r--r--tests/auto/qml/qqmlengine/tst_qqmlengine.cpp117
-rw-r--r--tests/auto/qml/qqmllanguage/data/dynamicMeta.5.errors.txt2
-rw-r--r--tests/auto/qml/qqmllanguage/data/incorrectCase.errors.insensitive.txt2
-rw-r--r--tests/auto/qml/qqmllanguage/data/objectValueTypeProperty.errors.txt2
-rw-r--r--tests/auto/qml/qqmllanguage/data/property.4.errors.txt2
-rw-r--r--tests/auto/qml/qqmllanguage/data/singletonTest18.qml9
-rw-r--r--tests/auto/qml/qqmllanguage/testtypes.cpp9
-rw-r--r--tests/auto/qml/qqmllanguage/tst_qqmllanguage.cpp50
-rw-r--r--tests/auto/qml/qqmllistmodel/data/dynamicroles.qml21
-rw-r--r--tests/auto/qml/qqmllistmodel/data/qtbug38907.qml25
-rw-r--r--tests/auto/qml/qqmllistmodel/tst_qqmllistmodel.cpp111
-rw-r--r--tests/auto/qml/qqmlopenmetaobject/tst_qqmlopenmetaobject.cpp2
-rw-r--r--tests/auto/qml/qqmlparser/tst_qqmlparser.cpp82
-rw-r--r--tests/auto/qml/qqmlproperty/tst_qqmlproperty.cpp6
-rw-r--r--tests/auto/qml/qqmlpropertycache/tst_qqmlpropertycache.cpp2
-rw-r--r--tests/auto/qml/qqmlqt/tst_qqmlqt.cpp10
-rw-r--r--tests/auto/qml/qqmltranslation/data/translationChange.qml8
-rw-r--r--tests/auto/qml/qqmltranslation/tst_qqmltranslation.cpp6
-rw-r--r--tests/auto/qml/qqmltypeloader/tst_qqmltypeloader.cpp2
-rw-r--r--tests/auto/qml/qqmlvaluetypes/tst_qqmlvaluetypes.cpp4
-rw-r--r--tests/auto/qml/qv4mm/tst_qv4mm.cpp11
-rw-r--r--tests/auto/qmltest/rectangle/tst_rectangle.qml23
-rw-r--r--tests/auto/quick/qquickanimatedsprite/data/infiniteLoops.qml38
-rw-r--r--tests/auto/quick/qquickanimatedsprite/tst_qquickanimatedsprite.cpp33
-rw-r--r--tests/auto/quick/qquickanimations/data/finished.qml95
-rw-r--r--tests/auto/quick/qquickanimations/tst_qquickanimations.cpp74
-rw-r--r--tests/auto/quick/qquickdesignersupport/data/TestComponent.qml4
-rw-r--r--tests/auto/quick/qquickframebufferobject/tst_qquickframebufferobject.cpp4
-rw-r--r--tests/auto/quick/qquickimageprovider/tst_qquickimageprovider.cpp65
-rw-r--r--tests/auto/quick/qquicklistview/tst_qquicklistview.cpp33
-rw-r--r--tests/auto/quick/qquickloader/tst_qquickloader.cpp4
-rw-r--r--tests/auto/quick/qquickpathview/tst_qquickpathview.cpp8
-rw-r--r--tests/auto/quick/qquickpositioners/tst_qquickpositioners.cpp20
-rw-r--r--tests/auto/quick/qquickrepeater/data/ownership.qml4
-rw-r--r--tests/auto/quick/qquickrepeater/data/package.qml35
-rw-r--r--tests/auto/quick/qquickrepeater/tst_qquickrepeater.cpp88
-rw-r--r--tests/auto/quick/qquickshape/qquickshape.pro24
-rw-r--r--tests/auto/quick/qquickshape/tst_qquickshape.cpp2
-rw-r--r--tests/auto/quick/qquicktableview/data/countingtableview.qml85
-rw-r--r--tests/auto/quick/qquicktableview/data/plaintableview.qml80
-rw-r--r--tests/auto/quick/qquicktableview/data/tableviewimplicitsize.qml66
-rw-r--r--tests/auto/quick/qquicktableview/qquicktableview.pro14
-rw-r--r--tests/auto/quick/qquicktableview/testmodel.h89
-rw-r--r--tests/auto/quick/qquicktableview/tst_qquicktableview.cpp822
-rw-r--r--tests/auto/quick/qquicktext/data/implicitSizeChangeRewrap.qml27
-rw-r--r--tests/auto/quick/qquicktext/tst_qquicktext.cpp23
-rw-r--r--tests/auto/quick/qquicktextinput/tst_qquicktextinput.cpp2
-rw-r--r--tests/auto/quick/qquickxmllistmodel/tst_qquickxmllistmodel.cpp13
-rw-r--r--tests/auto/quick/quick.pro3
-rw-r--r--tests/auto/quick/shared/viewtestutil.cpp8
-rw-r--r--tests/auto/quick/shared/viewtestutil.h3
-rw-r--r--tests/auto/quicktest/quicktest.pro3
-rw-r--r--tests/auto/quicktest/testfiltering/quicktestmain/quicktestmain.cpp29
-rw-r--r--tests/auto/quicktest/testfiltering/quicktestmain/quicktestmain.pro11
-rw-r--r--tests/auto/quicktest/testfiltering/quicktestmain/tst_first.qml38
-rw-r--r--tests/auto/quicktest/testfiltering/quicktestmain/tst_second.qml38
-rw-r--r--tests/auto/quicktest/testfiltering/test/test.pro5
-rw-r--r--tests/auto/quicktest/testfiltering/testfiltering.pro4
-rw-r--r--tests/auto/quicktest/testfiltering/tst_testfiltering.cpp135
-rw-r--r--tests/manual/pointer/pinchDragFlingMPTA.qml2
-rw-r--r--tests/manual/pointer/pinchHandler.qml6
-rw-r--r--tests/manual/pointer/singlePointHandlerProperties.qml5
-rw-r--r--tests/manual/tableview/abstracttablemodel/abstracttablemodel.pro10
-rw-r--r--tests/manual/tableview/abstracttablemodel/main.cpp100
-rw-r--r--tests/manual/tableview/abstracttablemodel/main.qml91
-rw-r--r--tests/manual/tableview/listmodel/listmodel.pro10
-rw-r--r--tests/manual/tableview/listmodel/main.cpp52
-rw-r--r--tests/manual/tableview/listmodel/main.qml86
-rw-r--r--tests/manual/tableview/storagemodel/main.cpp56
-rw-r--r--tests/manual/tableview/storagemodel/main.qml75
-rw-r--r--tests/manual/tableview/storagemodel/storagemodel.cpp226
-rw-r--r--tests/manual/tableview/storagemodel/storagemodel.h93
-rw-r--r--tests/manual/tableview/storagemodel/storagemodel.pro11
-rw-r--r--tests/manual/tableview/tableview.pro4
122 files changed, 9732 insertions, 493 deletions
diff --git a/tests/auto/qml/debugger/qdebugmessageservice/tst_qdebugmessageservice.cpp b/tests/auto/qml/debugger/qdebugmessageservice/tst_qdebugmessageservice.cpp
index f851688b5e..d2cfd3897a 100644
--- a/tests/auto/qml/debugger/qdebugmessageservice/tst_qdebugmessageservice.cpp
+++ b/tests/auto/qml/debugger/qdebugmessageservice/tst_qdebugmessageservice.cpp
@@ -89,21 +89,12 @@ public:
protected:
//inherited from QQmlDebugClient
- void stateChanged(State state);
void messageReceived(const QByteArray &data);
signals:
- void enabled();
void debugOutput();
};
-void QQmlDebugMsgClient::stateChanged(State state)
-{
- if (state == Enabled) {
- emit enabled();
- }
-}
-
void QQmlDebugMsgClient::messageReceived(const QByteArray &data)
{
QPacket ds(connection()->currentDataStreamVersion(), data);
diff --git a/tests/auto/qml/debugger/qqmldebugclient/tst_qqmldebugclient.cpp b/tests/auto/qml/debugger/qqmldebugclient/tst_qqmldebugclient.cpp
index 452520cf11..ffdbf72ded 100644
--- a/tests/auto/qml/debugger/qqmldebugclient/tst_qqmldebugclient.cpp
+++ b/tests/auto/qml/debugger/qqmldebugclient/tst_qqmldebugclient.cpp
@@ -66,8 +66,6 @@ void tst_QQmlDebugClient::initTestCase()
QQmlDebugConnector::setPluginKey(QLatin1String("QQmlDebugServer"));
QQmlDebugConnector::setServices(QStringList()
<< QStringLiteral("tst_QQmlDebugClient::handshake()"));
- QTest::ignoreMessage(QtWarningMsg,
- "QML debugger: Cannot set plugin key after loading the plugin.");
m_service = new QQmlDebugTestService("tst_QQmlDebugClient::handshake()");
diff --git a/tests/auto/qml/debugger/qqmldebuggingenabler/qqmldebuggingenabler/tst_qqmldebuggingenabler.cpp b/tests/auto/qml/debugger/qqmldebuggingenabler/qqmldebuggingenabler/tst_qqmldebuggingenabler.cpp
index 52e7f85e52..37118f4bd0 100644
--- a/tests/auto/qml/debugger/qqmldebuggingenabler/qqmldebuggingenabler/tst_qqmldebuggingenabler.cpp
+++ b/tests/auto/qml/debugger/qqmldebuggingenabler/qqmldebuggingenabler/tst_qqmldebuggingenabler.cpp
@@ -125,7 +125,7 @@ void tst_QQmlDebuggingEnabler::qmlscene()
QQmlDebugClient::Enabled : QQmlDebugClient::Unavailable);
}
- QCOMPARE(m_process->state(), QLatin1String("running"));
+ QCOMPARE(m_process->state(), QProcess::Running);
if (!blockMode) {
QTRY_VERIFY_WITH_TIMEOUT(m_process->output().contains(
QLatin1String("Component.onCompleted")), 15000);
@@ -172,7 +172,7 @@ void tst_QQmlDebuggingEnabler::custom()
QQmlDebugClient::Enabled : QQmlDebugClient::Unavailable);
}
- QCOMPARE(m_process->state(), QLatin1String("running"));
+ QCOMPARE(m_process->state(), QProcess::Running);
if (!blockMode) {
QTRY_VERIFY_WITH_TIMEOUT(m_process->output().contains(QLatin1String("QQmlEngine created")),
15000);
diff --git a/tests/auto/qml/debugger/qqmldebugjs/qqmldebugjs/tst_qqmldebugjs.cpp b/tests/auto/qml/debugger/qqmldebugjs/qqmldebugjs/tst_qqmldebugjs.cpp
index 660afce216..b36e576320 100644
--- a/tests/auto/qml/debugger/qqmldebugjs/qqmldebugjs/tst_qqmldebugjs.cpp
+++ b/tests/auto/qml/debugger/qqmldebugjs/qqmldebugjs/tst_qqmldebugjs.cpp
@@ -254,6 +254,8 @@ public:
{
parser = jsEngine.evaluate(QLatin1String("JSON.parse"));
stringify = jsEngine.evaluate(QLatin1String("JSON.stringify"));
+ QObject::connect(this, &QQmlDebugClient::stateChanged,
+ this, &QJSDebugClient::onStateChanged);
}
void connect(bool redundantRefs = false, bool namesAsObjects = false);
@@ -275,7 +277,7 @@ public:
protected:
//inherited from QQmlDebugClient
- void stateChanged(State state);
+ void onStateChanged(State state);
void messageReceived(const QByteArray &data);
signals:
@@ -663,7 +665,7 @@ void QJSDebugClient::disconnect()
sendMessage(packMessage(DISCONNECT, json.toString().toUtf8()));
}
-void QJSDebugClient::stateChanged(State state)
+void QJSDebugClient::onStateChanged(State state)
{
if (state == Enabled)
flushSendBuffer();
diff --git a/tests/auto/qml/debugger/qqmldebuglocal/tst_qqmldebuglocal.cpp b/tests/auto/qml/debugger/qqmldebuglocal/tst_qqmldebuglocal.cpp
index 5b3c0c5240..4e47c92c2a 100644
--- a/tests/auto/qml/debugger/qqmldebuglocal/tst_qqmldebuglocal.cpp
+++ b/tests/auto/qml/debugger/qqmldebuglocal/tst_qqmldebuglocal.cpp
@@ -65,8 +65,6 @@ void tst_QQmlDebugLocal::initTestCase()
{
fileName = QString::fromLatin1("tst_QQmlDebugLocal%1").arg(std::time(nullptr));
QQmlDebugConnector::setPluginKey("QQmlDebugServer");
- QTest::ignoreMessage(QtWarningMsg,
- "QML debugger: Cannot set plugin key after loading the plugin.");
m_service = new QQmlDebugTestService("tst_QQmlDebugLocal::handshake()");
const QString waitingMsg = QString("QML Debugger: Connecting to socket %1...").arg(fileName);
diff --git a/tests/auto/qml/debugger/qqmldebugprocess/qqmldebugprocess/tst_qqmldebugprocess.cpp b/tests/auto/qml/debugger/qqmldebugprocess/qqmldebugprocess/tst_qqmldebugprocess.cpp
index 993a1d5f63..35bd912d9b 100644
--- a/tests/auto/qml/debugger/qqmldebugprocess/qqmldebugprocess/tst_qqmldebugprocess.cpp
+++ b/tests/auto/qml/debugger/qqmldebugprocess/qqmldebugprocess/tst_qqmldebugprocess.cpp
@@ -118,7 +118,7 @@ void tst_QQmlDebugProcess::sessionStart()
QTimer::singleShot(delay, process.data(), wait);
QTRY_VERIFY(done);
- QVERIFY(process->state().startsWith("not running"));
+ QCOMPARE(process->state(), QProcess::NotRunning);
}
QTEST_MAIN(tst_QQmlDebugProcess)
diff --git a/tests/auto/qml/debugger/qqmldebugservice/tst_qqmldebugservice.cpp b/tests/auto/qml/debugger/qqmldebugservice/tst_qqmldebugservice.cpp
index 1daf6b581e..3557940386 100644
--- a/tests/auto/qml/debugger/qqmldebugservice/tst_qqmldebugservice.cpp
+++ b/tests/auto/qml/debugger/qqmldebugservice/tst_qqmldebugservice.cpp
@@ -75,8 +75,6 @@ void tst_QQmlDebugService::initTestCase()
QQmlDebugConnector::setPluginKey(QLatin1String("QQmlDebugServer"));
QQmlDebugConnector::setServices(QStringList()
<< QStringLiteral("tst_QQmlDebugService"));
- QTest::ignoreMessage(QtWarningMsg,
- "QML debugger: Cannot set plugin key after loading the plugin.");
m_service = new QQmlDebugTestService("tst_QQmlDebugService", 2);
foreach (const QString &service, QQmlDebuggingEnabler::debuggerServices())
diff --git a/tests/auto/qml/debugger/qqmlprofilerservice/tst_qqmlprofilerservice.cpp b/tests/auto/qml/debugger/qqmlprofilerservice/tst_qqmlprofilerservice.cpp
index 3cb315b355..323048f7d8 100644
--- a/tests/auto/qml/debugger/qqmlprofilerservice/tst_qqmlprofilerservice.cpp
+++ b/tests/auto/qml/debugger/qqmlprofilerservice/tst_qqmlprofilerservice.cpp
@@ -261,11 +261,13 @@ void tst_QQmlProfilerService::checkProcessTerminated()
QVERIFY(m_client->client);
QTRY_COMPARE(m_client->client->state(), QQmlDebugClient::NotConnected);
QVERIFY(m_process);
+ QVERIFY(m_process->exitStatus() != QProcess::CrashExit);
QTRY_COMPARE(m_process->exitStatus(), QProcess::NormalExit);
}
void tst_QQmlProfilerService::checkTraceReceived()
{
+ QVERIFY(m_process->exitStatus() != QProcess::CrashExit);
QTRY_VERIFY2(m_isComplete, "No trace received in time.");
QVector<qint64> numbers;
@@ -282,6 +284,7 @@ void tst_QQmlProfilerService::checkTraceReceived()
void tst_QQmlProfilerService::checkJsHeap()
{
+ QVERIFY(m_client);
QVERIFY2(m_client->jsHeapMessages.count() > 0, "no JavaScript heap messages received");
bool seen_alloc = false;
@@ -340,6 +343,11 @@ bool tst_QQmlProfilerService::verify(tst_QQmlProfilerService::MessageListType ty
int expectedPosition, const QQmlProfilerEventType &expected,
quint32 checks, const QVector<qint64> &expectedNumbers)
{
+ if (!m_client) {
+ qWarning() << "No debug client available";
+ return false;
+ }
+
const QVector<QQmlProfilerEvent> *target = nullptr;
switch (type) {
case MessageListQML: target = &(m_client->qmlMessages); break;
@@ -349,6 +357,11 @@ bool tst_QQmlProfilerService::verify(tst_QQmlProfilerService::MessageListType ty
case MessageListPixmap: target = &(m_client->pixmapMessages); break;
}
+ if (!target) {
+ qWarning() << "Invalid MessageListType" << type;
+ return false;
+ }
+
if (target->length() <= expectedPosition) {
qWarning() << "Not enough events. expected position:" << expectedPosition
<< "length:" << target->length();
@@ -629,7 +642,7 @@ void tst_QQmlProfilerService::scenegraphData()
void tst_QQmlProfilerService::profileOnExit()
{
- connect(true, "exit.qml");
+ QCOMPARE(connect(true, "exit.qml"), ConnectSuccess);
checkProcessTerminated();
checkTraceReceived();
@@ -711,7 +724,7 @@ void tst_QQmlProfilerService::flushInterval()
void tst_QQmlProfilerService::translationBinding()
{
- connect(true, "qstr.qml");
+ QCOMPARE(connect(true, "qstr.qml"), ConnectSuccess);
checkProcessTerminated();
checkTraceReceived();
@@ -727,12 +740,13 @@ void tst_QQmlProfilerService::translationBinding()
void tst_QQmlProfilerService::memory()
{
- connect(true, "memory.qml");
+ QCOMPARE(connect(true, "memory.qml"), ConnectSuccess);
checkProcessTerminated();
checkTraceReceived();
checkJsHeap();
+ QVERIFY(m_client);
int smallItems = 0;
for (auto message : m_client->jsHeapMessages) {
const QQmlProfilerEventType &type = m_client->types[message.typeIndex()];
@@ -757,6 +771,8 @@ void tst_QQmlProfilerService::compile()
// Flush interval so that we actually get the events before we stop recording.
connect(true, "test.qml", true, 100);
+ QVERIFY(m_client);
+
// We need to check specifically for compile events as we can otherwise stop recording after the
// StartTrace has arrived, but before it compiles anything.
QTRY_VERIFY(hasCompileEvents(m_client->types));
diff --git a/tests/auto/qml/debugger/qv4debugger/tst_qv4debugger.cpp b/tests/auto/qml/debugger/qv4debugger/tst_qv4debugger.cpp
index c65c592f10..a176f674e6 100644
--- a/tests/auto/qml/debugger/qv4debugger/tst_qv4debugger.cpp
+++ b/tests/auto/qml/debugger/qv4debugger/tst_qv4debugger.cpp
@@ -86,8 +86,7 @@ public:
QV4::Scope scope(v4);
QV4::ScopedString name(scope, v4->newString(functionName));
- QV4::ScopedContext ctx(scope, v4->rootContext());
- QV4::ScopedValue function(scope, FunctionObject::createBuiltinFunction(ctx, name, injectedFunction));
+ QV4::ScopedValue function(scope, FunctionObject::createBuiltinFunction(v4, name, injectedFunction, 0));
v4->globalObject->put(name, function);
}
@@ -220,7 +219,21 @@ public:
{
for (int i = 0, ei = m_stackTrace.size(); i != ei; ++i) {
m_capturedScope.append(NamedRefs());
- ScopeJob job(&collector, i, 0);
+ FrameJob frameJob(&collector, i);
+ debugger->runInEngine(&frameJob);
+ QJsonObject frameObj = frameJob.returnValue();
+ QJsonArray scopes = frameObj.value(QLatin1String("scopes")).toArray();
+ int nscopes = scopes.size();
+ int s = 0;
+ for (s = 0; s < nscopes; ++s) {
+ QJsonObject o = scopes.at(s).toObject();
+ if (o.value(QLatin1String("type")).toInt(-2) == 1) // CallContext
+ break;
+ }
+ if (s == nscopes)
+ return;
+
+ ScopeJob job(&collector, i, s);
debugger->runInEngine(&job);
NamedRefs &refs = m_capturedScope.last();
QJsonObject object = job.returnValue();
@@ -482,7 +495,7 @@ void tst_qv4debugger::conditionalBreakPoint()
QVERIFY(m_debuggerAgent->m_capturedScope.size() > 1);
const TestAgent::NamedRefs &frame0 = m_debuggerAgent->m_capturedScope.at(0);
- QCOMPARE(frame0.size(), 2);
+ QCOMPARE(frame0.size(), 3);
QVERIFY(frame0.contains("i"));
QCOMPARE(frame0.value("i").toInt(), 11);
}
@@ -541,7 +554,7 @@ void tst_qv4debugger::readArguments()
QVERIFY(m_debuggerAgent->m_wasPaused);
QVERIFY(m_debuggerAgent->m_capturedScope.size() > 1);
const TestAgent::NamedRefs &frame0 = m_debuggerAgent->m_capturedScope.at(0);
- QCOMPARE(frame0.size(), 4);
+ QCOMPARE(frame0.size(), 5);
QVERIFY(frame0.contains(QStringLiteral("a")));
QCOMPARE(frame0.type(QStringLiteral("a")), QStringLiteral("number"));
QCOMPARE(frame0.value(QStringLiteral("a")).toDouble(), 1.0);
@@ -565,7 +578,7 @@ void tst_qv4debugger::readComplicatedArguments()
QVERIFY(m_debuggerAgent->m_wasPaused);
QVERIFY(m_debuggerAgent->m_capturedScope.size() > 1);
const TestAgent::NamedRefs &frame0 = m_debuggerAgent->m_capturedScope.at(0);
- QCOMPARE(frame0.size(), 1);
+ QCOMPARE(frame0.size(), 2);
QVERIFY(frame0.contains(QStringLiteral("a")));
QCOMPARE(frame0.type(QStringLiteral("a")), QStringLiteral("number"));
QCOMPARE(frame0.value(QStringLiteral("a")).toInt(), 12);
@@ -589,7 +602,7 @@ void tst_qv4debugger::readLocals()
QVERIFY(m_debuggerAgent->m_wasPaused);
QVERIFY(m_debuggerAgent->m_capturedScope.size() > 1);
const TestAgent::NamedRefs &frame0 = m_debuggerAgent->m_capturedScope.at(0);
- QCOMPARE(frame0.size(), 4); // locals and parameters
+ QCOMPARE(frame0.size(), 5); // locals and parameters
QVERIFY(frame0.contains("c"));
QCOMPARE(frame0.type("c"), QStringLiteral("number"));
QCOMPARE(frame0.value("c").toDouble(), 3.0);
@@ -614,7 +627,7 @@ void tst_qv4debugger::readObject()
QVERIFY(m_debuggerAgent->m_wasPaused);
QVERIFY(m_debuggerAgent->m_capturedScope.size() > 1);
const TestAgent::NamedRefs &frame0 = m_debuggerAgent->m_capturedScope.at(0);
- QCOMPARE(frame0.size(), 2);
+ QCOMPARE(frame0.size(), 3);
QVERIFY(frame0.contains("b"));
QCOMPARE(frame0.type("b"), QStringLiteral("object"));
QJsonObject b = frame0.rawValue("b");
@@ -679,7 +692,7 @@ void tst_qv4debugger::readContextInAllFrames()
for (int i = 0; i < 12; ++i) {
const TestAgent::NamedRefs &scope = m_debuggerAgent->m_capturedScope.at(i);
- QCOMPARE(scope.size(), 2);
+ QCOMPARE(scope.size(), 3);
QVERIFY(scope.contains("n"));
QCOMPARE(scope.type("n"), QStringLiteral("number"));
QCOMPARE(scope.value("n").toDouble(), i + 1.0);
diff --git a/tests/auto/qml/debugger/shared/debugutil.cpp b/tests/auto/qml/debugger/shared/debugutil.cpp
index b118b22c64..602e533388 100644
--- a/tests/auto/qml/debugger/shared/debugutil.cpp
+++ b/tests/auto/qml/debugger/shared/debugutil.cpp
@@ -98,6 +98,9 @@ QString QQmlDebugTest::connectionStateString(const QQmlDebugConnection *connecti
QQmlDebugTestClient::QQmlDebugTestClient(const QString &s, QQmlDebugConnection *c)
: QQmlDebugClient(s, c)
{
+ connect(this, &QQmlDebugClient::stateChanged, this, [this](QQmlDebugClient::State newState) {
+ QCOMPARE(newState, state());
+ });
}
QByteArray QQmlDebugTestClient::waitForResponse()
@@ -111,31 +114,12 @@ QByteArray QQmlDebugTestClient::waitForResponse()
return lastMsg;
}
-void QQmlDebugTestClient::stateChanged(State stat)
-{
- QCOMPARE(stat, state());
- emit stateHasChanged();
-}
-
void QQmlDebugTestClient::messageReceived(const QByteArray &ba)
{
lastMsg = ba;
emit serverMessage(ba);
}
-template<typename F>
-struct Finalizer {
- F m_lambda;
- Finalizer(F &&lambda) : m_lambda(std::forward<F>(lambda)) {}
- ~Finalizer() { m_lambda(); }
-};
-
-template<typename F>
-static Finalizer<F> defer(F &&lambda)
-{
- return Finalizer<F>(std::forward<F>(lambda));
-}
-
QQmlDebugTest::ConnectResult QQmlDebugTest::connect(
const QString &executable, const QString &services, const QString &extraArgs,
bool block)
@@ -162,31 +146,27 @@ QQmlDebugTest::ConnectResult QQmlDebugTest::connect(
if (m_clients.contains(nullptr))
return ClientsFailed;
- auto allEnabled = [this]() {
- for (QQmlDebugClient *client : m_clients) {
- if (client->state() != QQmlDebugClient::Enabled)
- return false;
- }
- return true;
- };
+ ClientStateHandler stateHandler(m_clients, createOtherClients(m_connection), services.isEmpty()
+ ? QQmlDebugClient::Enabled : QQmlDebugClient::Unavailable);
- QList<QQmlDebugClient *> others = createOtherClients(m_connection);
- auto deleter = defer([&others]() { qDeleteAll(others); });
- Q_UNUSED(deleter);
const int port = m_process->debugPort();
m_connection->connectToHost(QLatin1String("127.0.0.1"), port);
- for (int tries = 0; tries < 100 && !allEnabled(); ++tries)
- QTest::qWait(50);
- if (!allEnabled())
+
+ QEventLoop loop;
+ QTimer timer;
+ QObject::connect(&stateHandler, &ClientStateHandler::allOk, &loop, &QEventLoop::quit);
+ QObject::connect(m_connection, &QQmlDebugConnection::disconnected, &loop, &QEventLoop::quit);
+ QObject::connect(&timer, &QTimer::timeout, &loop, &QEventLoop::quit);
+
+ timer.start(5000);
+ loop.exec();
+
+ if (!stateHandler.allEnabled())
return EnableFailed;
- const QQmlDebugClient::State expectedState = services.isEmpty() ? QQmlDebugClient::Enabled
- : QQmlDebugClient::Unavailable;
- for (QQmlDebugClient *other : others) {
- if (other->state() != expectedState)
- return RestrictFailed;
- }
+ if (!stateHandler.othersAsExpected())
+ return RestrictFailed;
return ConnectSuccess;
}
@@ -211,7 +191,7 @@ void QQmlDebugTest::cleanup()
if (QTest::currentTestFailed()) {
const QString null = QStringLiteral("null");
- qDebug() << "Process State:" << (m_process ? m_process->state() : null);
+ qDebug() << "Process State:" << (m_process ? m_process->stateString() : null);
qDebug() << "Application Output:" << (m_process ? m_process->output() : null);
qDebug() << "Connection State:" << QQmlDebugTest::connectionStateString(m_connection);
for (QQmlDebugClient *client : m_clients) {
@@ -234,3 +214,41 @@ void QQmlDebugTest::cleanup()
m_process = nullptr;
}
}
+
+ClientStateHandler::ClientStateHandler(const QList<QQmlDebugClient *> &clients,
+ const QList<QQmlDebugClient *> &others,
+ QQmlDebugClient::State expectedOthers) :
+ m_clients(clients), m_others(others), m_expectedOthers(expectedOthers)
+{
+ for (QQmlDebugClient *client : m_clients) {
+ QObject::connect(client, &QQmlDebugClient::stateChanged,
+ this, &ClientStateHandler::checkStates);
+ }
+ for (QQmlDebugClient *client : m_others) {
+ QObject::connect(client, &QQmlDebugClient::stateChanged,
+ this, &ClientStateHandler::checkStates);
+ }
+}
+
+ClientStateHandler::~ClientStateHandler()
+{
+ qDeleteAll(m_others);
+}
+
+void ClientStateHandler::checkStates()
+{
+ for (QQmlDebugClient *client : m_clients) {
+ if (client->state() != QQmlDebugClient::Enabled)
+ return;
+ }
+
+ m_allEnabled = true;
+
+ for (QQmlDebugClient *other : m_others) {
+ if (other->state() != m_expectedOthers)
+ return;
+ }
+
+ m_othersAsExpected = true;
+ emit allOk();
+}
diff --git a/tests/auto/qml/debugger/shared/debugutil_p.h b/tests/auto/qml/debugger/shared/debugutil_p.h
index 94ad83bfce..cc7c9bd19d 100644
--- a/tests/auto/qml/debugger/shared/debugutil_p.h
+++ b/tests/auto/qml/debugger/shared/debugutil_p.h
@@ -88,11 +88,9 @@ public:
QByteArray waitForResponse();
signals:
- void stateHasChanged();
void serverMessage(const QByteArray &);
protected:
- virtual void stateChanged(State state);
virtual void messageReceived(const QByteArray &ba);
private:
@@ -116,4 +114,31 @@ public:
}
};
+class ClientStateHandler : public QObject
+{
+ Q_OBJECT
+public:
+ ClientStateHandler(const QList<QQmlDebugClient *> &clients,
+ const QList<QQmlDebugClient *> &others,
+ QQmlDebugClient::State expectedOthers);
+
+ ~ClientStateHandler();
+
+ bool allEnabled() const { return m_allEnabled; }
+ bool othersAsExpected() const { return m_othersAsExpected; }
+
+signals:
+ void allOk();
+
+private:
+ void checkStates();
+
+ const QList<QQmlDebugClient *> m_clients;
+ const QList<QQmlDebugClient *> m_others;
+ const QQmlDebugClient::State m_expectedOthers;
+
+ bool m_allEnabled = false;
+ bool m_othersAsExpected = false;
+};
+
#endif // DEBUGUTIL_P_H
diff --git a/tests/auto/qml/debugger/shared/qqmldebugprocess.cpp b/tests/auto/qml/debugger/shared/qqmldebugprocess.cpp
index f2b85833c9..6f74edf863 100644
--- a/tests/auto/qml/debugger/shared/qqmldebugprocess.cpp
+++ b/tests/auto/qml/debugger/shared/qqmldebugprocess.cpp
@@ -50,6 +50,7 @@ QQmlDebugProcess::QQmlDebugProcess(const QString &executable, QObject *parent)
this, [this]() {
m_timer.stop();
m_eventLoop.quit();
+ emit finished();
});
connect(&m_timer, &QTimer::timeout,
this, &QQmlDebugProcess::timeout);
@@ -60,7 +61,7 @@ QQmlDebugProcess::~QQmlDebugProcess()
stop();
}
-QString QQmlDebugProcess::state()
+QString QQmlDebugProcess::stateString() const
{
QString stateStr;
switch (m_process.state()) {
@@ -155,6 +156,11 @@ bool QQmlDebugProcess::waitForFinished()
return m_process.waitForFinished();
}
+QProcess::ProcessState QQmlDebugProcess::state() const
+{
+ return m_process.state();
+}
+
QProcess::ExitStatus QQmlDebugProcess::exitStatus() const
{
return m_process.exitStatus();
diff --git a/tests/auto/qml/debugger/shared/qqmldebugprocess_p.h b/tests/auto/qml/debugger/shared/qqmldebugprocess_p.h
index fd2c89bb41..945cc58c85 100644
--- a/tests/auto/qml/debugger/shared/qqmldebugprocess_p.h
+++ b/tests/auto/qml/debugger/shared/qqmldebugprocess_p.h
@@ -52,7 +52,7 @@ public:
QQmlDebugProcess(const QString &executable, QObject *parent = 0);
~QQmlDebugProcess();
- QString state();
+ QString stateString() const;
void addEnvironment(const QString &environment);
@@ -61,6 +61,7 @@ public:
int debugPort() const;
bool waitForFinished();
+ QProcess::ProcessState state() const;
QProcess::ExitStatus exitStatus() const;
QString output() const;
@@ -69,6 +70,7 @@ public:
signals:
void readyReadStandardOutput();
+ void finished();
private slots:
void timeout();
diff --git a/tests/auto/qml/debugger/shared/qqmldebugtestservice.cpp b/tests/auto/qml/debugger/shared/qqmldebugtestservice.cpp
index 4dce07d824..896ed608fd 100644
--- a/tests/auto/qml/debugger/shared/qqmldebugtestservice.cpp
+++ b/tests/auto/qml/debugger/shared/qqmldebugtestservice.cpp
@@ -48,5 +48,4 @@ void QQmlDebugTestService::stateAboutToBeChanged(QQmlDebugService::State)
void QQmlDebugTestService::stateChanged(State)
{
Q_ASSERT(QThread::currentThread() != thread());
- emit stateHasChanged();
}
diff --git a/tests/auto/qml/debugger/shared/qqmldebugtestservice.h b/tests/auto/qml/debugger/shared/qqmldebugtestservice.h
index 37b4a9f98c..9c39c0893d 100644
--- a/tests/auto/qml/debugger/shared/qqmldebugtestservice.h
+++ b/tests/auto/qml/debugger/shared/qqmldebugtestservice.h
@@ -38,9 +38,6 @@ class QQmlDebugTestService : public QQmlDebugService
public:
QQmlDebugTestService(const QString &s, float version = 1, QObject *parent = 0);
-signals:
- void stateHasChanged();
-
protected:
virtual void messageReceived(const QByteArray &ba);
virtual void stateAboutToBeChanged(State state);
diff --git a/tests/auto/qml/ecmascripttests/TestExpectations b/tests/auto/qml/ecmascripttests/TestExpectations
index 589f25d174..de7a072842 100644
--- a/tests/auto/qml/ecmascripttests/TestExpectations
+++ b/tests/auto/qml/ecmascripttests/TestExpectations
@@ -1,177 +1,4664 @@
-# wrong tests
-# uses octal number
-15.2.3.6-2-17-1 failing
+# ----- These are tests we will not fix
-# these fail after the update to Unicode 6.3.
-# the reason is that u+180e changed type from whitespace to control
-S9.3.1_A2
-S9.3.1_A3_T1
-S9.3.1_A3_T2
-S15.1.2.2_A2_T10
-S15.1.2.3_A2_T10
-15.5.4.20-3-2
-15.5.4.20-3-3
-15.5.4.20-3-4
-15.5.4.20-3-5
-15.5.4.20-3-6
+# The tests below rely on the ES6 spec quirk that allows 'let' as an identifier. We've
+# always treated 'let' as a reserved keyword (without ever getting a bug report about it),
+# so we'll keep it that way. It also removes a huge headache in the parser.
+language/statements/for-in/let-block-with-newline.js sloppyFails
+language/statements/for-of/let-block-with-newline.js sloppyFails
+language/statements/for/let-block-with-newline.js sloppyFails
+language/statements/if/let-block-with-newline.js sloppyFails
+language/statements/labeled/let-block-with-newline.js sloppyFails
+language/statements/while/let-block-with-newline.js sloppyFails
+language/statements/with/let-block-with-newline.js sloppyFails
+language/statements/for-in/let-identifier-with-newline.js sloppyFails
+language/statements/for-of/let-identifier-with-newline.js sloppyFails
+language/statements/for/let-identifier-with-newline.js sloppyFails
+language/statements/if/let-identifier-with-newline.js sloppyFails
+language/statements/labeled/let-identifier-with-newline.js sloppyFails
+language/statements/while/let-identifier-with-newline.js sloppyFails
+language/statements/with/let-identifier-with-newline.js sloppyFails
-11.2.3-3_3 failing
-S13_A15_T4 failing
-S15.4.4.3_A1_T1 failing
-S15.4.4.3_A3_T1 failing
-S15.5.4.11_A5_T1 failing
-S15.2.4.4_A14 failing
-# Function declarations in conditionals. We allow them, because the real
-# world requires them.
-Sbp_12.5_A9_T3 failing
-Sbp_12.6.1_A13_T3 failing
-Sbp_12.6.2_A13_T3 failing
-Sbp_12.6.4_A13_T3 failing
-
-# es6: function length attributes are configurable, wasn't in es5
-S15.1.2.2_A9.2 failing
-S15.1.3.1_A5.2 failing
-S15.1.3.2_A5.2 failing
-S15.1.3.3_A5.2 failing
-S15.1.2.3_A7.2 failing
-S15.1.2.4_A2.2 failing
-S15.1.2.5_A2.2 failing
-S15.1.3.4_A5.2 failing
-15.2.3.3-4-186 failing
-S15.2.4.2_A9 failing
-S15.2.4.3_A9 failing
-S15.2.4.4_A9 failing
-S15.2.4.5_A9 failing
-S15.2.4.6_A9 failing
-S15.2.4.7_A9 failing
-15.3.3.2-1 failing
-15.4.4.2_A4.2
-S15.3.4.2_A9 failing
-S15.3.4.3_A9 failing
-S15.3.4.4_A9 failing
-15.3.4.5-15-2 failing
-S15.4.4.2_A4.2 failing
-S15.4.4.3_A4.2 failing
-S15.4.4.4_A4.2 failing
-S15.4.4.5_A6.2 failing
-S15.4.4.6_A5.2 failing
-S15.4.4.7_A6.2 failing
-S15.4.4.8_A5.2 failing
-S15.4.4.9_A5.2 failing
-S15.4.4.10_A5.2 failing
-S15.4.4.11_A7.2 failing
-S15.4.4.12_A5.2 failing
-S15.4.4.13_A5.2 failing
-S15.5.4.10_A9 failing
-S15.5.4.11_A9 failing
-S15.5.4.12_A9 failing
-S15.5.4.13_A9 failing
-S15.5.4.14_A9 failing
-S15.5.4.15_A9 failing
-S15.5.4.16_A9 failing
-S15.5.4.17_A9 failing
-S15.5.4.18_A9 failing
-S15.5.4.19_A9 failing
-S15.5.4.4_A9 failing
-S15.5.4.5_A9 failing
-S15.5.4.6_A9 failing
-S15.5.4.7_A9 failing
-S15.5.4.8_A9 failing
-S15.5.4.9_A9 failing
-S15.9.4.2_A3_T2 failing
-S15.9.4.3_A3_T2 failing
-S15.9.5.2_A3_T2 failing
-S15.9.5.3_A3_T2 failing
-S15.9.5.4_A3_T2 failing
-S15.9.5.5_A3_T2 failing
-S15.9.5.1_A3_T2 failing
-S15.9.5.10_A3_T2 failing
-S15.9.5.11_A3_T2 failing
-S15.9.5.12_A3_T2 failing
-S15.9.5.13_A3_T2 failing
-S15.9.5.14_A3_T2 failing
-S15.9.5.15_A3_T2 failing
-S15.9.5.16_A3_T2 failing
-S15.9.5.17_A3_T2 failing
-S15.9.5.18_A3_T2 failing
-S15.9.5.19_A3_T2 failing
-S15.9.5.20_A3_T2 failing
-S15.9.5.21_A3_T2 failing
-S15.9.5.22_A3_T2 failing
-S15.9.5.23_A3_T2 failing
-S15.9.5.24_A3_T2 failing
-S15.9.5.25_A3_T2 failing
-S15.9.5.26_A3_T2 failing
-S15.9.5.27_A3_T2 failing
-S15.9.5.28_A3_T2 failing
-S15.9.5.29_A3_T2 failing
-S15.9.5.30_A3_T2 failing
-S15.9.5.31_A3_T2 failing
-S15.9.5.32_A3_T2 failing
-S15.9.5.33_A3_T2 failing
-S15.9.5.34_A3_T2 failing
-S15.9.5.35_A3_T2 failing
-S15.9.5.36_A3_T2 failing
-S15.9.5.37_A3_T2 failing
-S15.9.5.38_A3_T2 failing
-S15.9.5.39_A3_T2 failing
-S15.9.5.40_A3_T2 failing
-S15.9.5.41_A3_T2 failing
-S15.9.5.42_A3_T2 failing
-S15.9.5.6_A3_T2 failing
-S15.9.5.7_A3_T2 failing
-S15.9.5.8_A3_T2 failing
-S15.9.5.9_A3_T2 failing
-S15.10.6.2_A9 failing
-S15.10.6.3_A9 failing
-S15.10.6.4_A9 failing
-
-# es6: Object.freeze(v) on a non-object returns v, no longer TypeError
-15.2.3.9-1 failing
-15.2.3.9-1-1 failing
-15.2.3.9-1-2 failing
-15.2.3.9-1-3 failing
-15.2.3.9-1-4 failing
-# es6: Object.preventExtensions(O) on a non-object, no longer TypeError
-15.2.3.10-1 failing
-15.2.3.10-1-3 failing
-15.2.3.10-1-4 failing
-# es6: Object.isSealed(O) on a non-object, no longer TypeError
-15.2.3.11-1
-# es6: Object.isFrozen(O) on a non-object, no longer TypeError
-15.2.3.12-1
-15.2.3.12-1-3
-15.2.3.12-1-4
-# es6: Object.isExtensible(O) on a non-object, no longer TypeError
-15.2.3.13-1
-15.2.3.13-1-3
-15.2.3.13-1-4
-# es6: Object.keys(O) on a non-object, no longer TypeError
-15.2.3.14-1-1
-15.2.3.14-1-2
-15.2.3.14-1-3
-15.2.3.14-1
-15.2.3.14-2
-15.2.3.14-3
-# es6: Object.getOwnPropertyDescriptor(O) on a non-object, no longer TypeError
-15.2.3.3-1
-15.2.3.3-1-3
-15.2.3.3-1-4
-# es6: Object.getPrototypeOf(O) on a non-object, no longer TypeError
-15.2.3.2-1
-15.2.3.2-1-3
-15.2.3.2-1-4
-# es6: Object.getOwnPropertyNames(O) on a non-object, no longer TypeError
-15.2.3.4-1
-15.2.3.4-1-4
-15.2.3.4-1-5
-# es6: Object.seal(O) on a non-object, no longer TypeError
-15.2.3.8-1
-15.2.3.8-1-1
-15.2.3.8-1-2
-15.2.3.8-1-3
-15.2.3.8-1-4
-
-# es6: Date.prototype is no longer a DateObject
-15.9.5.40_1 failing
+# ----- test failures that should be fixed
+built-ins/Array/from/iter-cstm-ctor-err.js fails
+built-ins/Array/from/proto-from-ctor-realm.js fails
+built-ins/Array/isArray/proxy-revoked.js fails
+built-ins/Array/isArray/proxy.js fails
+built-ins/Array/length/define-own-prop-length-overflow-realm.js fails
+built-ins/Array/of/proto-from-ctor-realm.js fails
+built-ins/Array/proto-from-ctor-realm.js fails
+built-ins/Array/prototype/Symbol.unscopables/prop-desc.js fails
+built-ins/Array/prototype/Symbol.unscopables/value.js fails
+built-ins/Array/prototype/concat/Array.prototype.concat_array-like-length-to-string-throws.js fails
+built-ins/Array/prototype/concat/Array.prototype.concat_array-like-length-value-of-throws.js fails
+built-ins/Array/prototype/concat/Array.prototype.concat_array-like-negative-length.js fails
+built-ins/Array/prototype/concat/Array.prototype.concat_array-like-primitive-non-number-length.js fails
+built-ins/Array/prototype/concat/Array.prototype.concat_array-like-string-length.js fails
+built-ins/Array/prototype/concat/Array.prototype.concat_array-like-to-length-throws.js fails
+built-ins/Array/prototype/concat/Array.prototype.concat_array-like.js fails
+built-ins/Array/prototype/concat/Array.prototype.concat_holey-sloppy-arguments.js fails
+built-ins/Array/prototype/concat/Array.prototype.concat_large-typed-array.js fails
+built-ins/Array/prototype/concat/Array.prototype.concat_length-throws.js fails
+built-ins/Array/prototype/concat/Array.prototype.concat_non-array.js fails
+built-ins/Array/prototype/concat/Array.prototype.concat_sloppy-arguments-throws.js fails
+built-ins/Array/prototype/concat/Array.prototype.concat_sloppy-arguments-with-dupes.js sloppyFails
+built-ins/Array/prototype/concat/Array.prototype.concat_sloppy-arguments.js fails
+built-ins/Array/prototype/concat/Array.prototype.concat_small-typed-array.js fails
+built-ins/Array/prototype/concat/Array.prototype.concat_spreadable-boolean-wrapper.js fails
+built-ins/Array/prototype/concat/Array.prototype.concat_spreadable-function.js fails
+built-ins/Array/prototype/concat/Array.prototype.concat_spreadable-getter-throws.js fails
+built-ins/Array/prototype/concat/Array.prototype.concat_spreadable-number-wrapper.js fails
+built-ins/Array/prototype/concat/Array.prototype.concat_spreadable-reg-exp.js fails
+built-ins/Array/prototype/concat/Array.prototype.concat_spreadable-sparse-object.js fails
+built-ins/Array/prototype/concat/Array.prototype.concat_spreadable-string-wrapper.js fails
+built-ins/Array/prototype/concat/Array.prototype.concat_strict-arguments.js fails
+built-ins/Array/prototype/concat/S15.4.4.4_A3_T2.js fails
+built-ins/Array/prototype/concat/S15.4.4.4_A3_T3.js fails
+built-ins/Array/prototype/concat/create-ctor-non-object.js fails
+built-ins/Array/prototype/concat/create-proto-from-ctor-realm-array.js fails
+built-ins/Array/prototype/concat/create-proto-from-ctor-realm-non-array.js fails
+built-ins/Array/prototype/concat/create-proxy.js fails
+built-ins/Array/prototype/concat/create-revoked-proxy.js fails
+built-ins/Array/prototype/concat/create-species-non-ctor.js fails
+built-ins/Array/prototype/concat/create-species.js fails
+built-ins/Array/prototype/concat/is-concat-spreadable-is-array-proxy-revoked.js fails
+built-ins/Array/prototype/concat/is-concat-spreadable-proxy-revoked.js fails
+built-ins/Array/prototype/concat/is-concat-spreadable-proxy.js fails
+built-ins/Array/prototype/concat/is-concat-spreadable-val-falsey.js fails
+built-ins/Array/prototype/concat/is-concat-spreadable-val-truthy.js fails
+built-ins/Array/prototype/copyWithin/return-abrupt-from-delete-proxy-target.js fails
+built-ins/Array/prototype/copyWithin/return-abrupt-from-has-start.js fails
+built-ins/Array/prototype/every/15.4.4.16-3-29.js fails
+built-ins/Array/prototype/filter/create-ctor-non-object.js fails
+built-ins/Array/prototype/filter/create-proto-from-ctor-realm-array.js fails
+built-ins/Array/prototype/filter/create-proto-from-ctor-realm-non-array.js fails
+built-ins/Array/prototype/filter/create-proxy.js fails
+built-ins/Array/prototype/filter/create-revoked-proxy.js fails
+built-ins/Array/prototype/filter/create-species-non-ctor.js fails
+built-ins/Array/prototype/filter/create-species.js fails
+built-ins/Array/prototype/includes/get-prop.js fails
+built-ins/Array/prototype/includes/length-boundaries.js fails
+built-ins/Array/prototype/indexOf/15.4.4.14-3-28.js fails
+built-ins/Array/prototype/indexOf/15.4.4.14-3-29.js fails
+built-ins/Array/prototype/join/S15.4.4.5_A4_T3.js fails
+built-ins/Array/prototype/lastIndexOf/15.4.4.15-3-28.js fails
+built-ins/Array/prototype/map/create-ctor-non-object.js fails
+built-ins/Array/prototype/map/create-proto-from-ctor-realm-array.js fails
+built-ins/Array/prototype/map/create-proto-from-ctor-realm-non-array.js fails
+built-ins/Array/prototype/map/create-proxy.js fails
+built-ins/Array/prototype/map/create-revoked-proxy.js fails
+built-ins/Array/prototype/map/create-species-non-ctor.js fails
+built-ins/Array/prototype/map/create-species-undef-invalid-len.js fails
+built-ins/Array/prototype/map/create-species.js fails
+built-ins/Array/prototype/pop/S15.4.4.6_A2_T2.js fails
+built-ins/Array/prototype/pop/S15.4.4.6_A3_T1.js fails
+built-ins/Array/prototype/pop/S15.4.4.6_A3_T2.js fails
+built-ins/Array/prototype/pop/clamps-to-integer-limit.js fails
+built-ins/Array/prototype/pop/length-near-integer-limit.js fails
+built-ins/Array/prototype/push/S15.4.4.7_A2_T2.js fails
+built-ins/Array/prototype/push/S15.4.4.7_A3.js fails
+built-ins/Array/prototype/push/throws-if-integer-limit-exceeded.js fails
+built-ins/Array/prototype/reverse/length-exceeding-integer-limit-with-object.js fails
+built-ins/Array/prototype/reverse/length-exceeding-integer-limit-with-proxy.js fails
+built-ins/Array/prototype/slice/S15.4.4.10_A3_T1.js fails
+built-ins/Array/prototype/slice/S15.4.4.10_A3_T2.js fails
+built-ins/Array/prototype/slice/create-ctor-non-object.js fails
+built-ins/Array/prototype/slice/create-non-array-invalid-len.js fails
+built-ins/Array/prototype/slice/create-proto-from-ctor-realm-array.js fails
+built-ins/Array/prototype/slice/create-proto-from-ctor-realm-non-array.js fails
+built-ins/Array/prototype/slice/create-proxied-array-invalid-len.js fails
+built-ins/Array/prototype/slice/create-proxy.js fails
+built-ins/Array/prototype/slice/create-revoked-proxy.js fails
+built-ins/Array/prototype/slice/create-species-neg-zero.js fails
+built-ins/Array/prototype/slice/create-species-non-ctor.js fails
+built-ins/Array/prototype/slice/create-species.js fails
+built-ins/Array/prototype/slice/length-exceeding-integer-limit-proxied-array.js fails
+built-ins/Array/prototype/slice/length-exceeding-integer-limit.js fails
+built-ins/Array/prototype/some/15.4.4.17-3-28.js fails
+built-ins/Array/prototype/some/15.4.4.17-3-29.js fails
+built-ins/Array/prototype/sort/comparefn-nonfunction-call-throws.js fails
+built-ins/Array/prototype/splice/S15.4.4.12_A3_T1.js fails
+built-ins/Array/prototype/splice/clamps-length-to-integer-limit.js fails
+built-ins/Array/prototype/splice/create-ctor-non-object.js fails
+built-ins/Array/prototype/splice/create-proto-from-ctor-realm-array.js fails
+built-ins/Array/prototype/splice/create-proto-from-ctor-realm-non-array.js fails
+built-ins/Array/prototype/splice/create-proxy.js fails
+built-ins/Array/prototype/splice/create-revoked-proxy.js fails
+built-ins/Array/prototype/splice/create-species-length-exceeding-integer-limit.js fails
+built-ins/Array/prototype/splice/create-species-neg-zero.js fails
+built-ins/Array/prototype/splice/create-species-non-ctor.js fails
+built-ins/Array/prototype/splice/create-species-undef-invalid-len.js fails
+built-ins/Array/prototype/splice/create-species.js fails
+built-ins/Array/prototype/splice/length-and-deleteCount-exceeding-integer-limit.js fails
+built-ins/Array/prototype/splice/length-exceeding-integer-limit-shrink-array.js fails
+built-ins/Array/prototype/splice/length-near-integer-limit-grow-array.js fails
+built-ins/Array/prototype/toLocaleString/S15.4.4.3_A1_T1.js fails
+built-ins/Array/prototype/toLocaleString/S15.4.4.3_A3_T1.js fails
+built-ins/Array/prototype/toLocaleString/primitive_this_value.js strictFails
+built-ins/Array/prototype/toLocaleString/primitive_this_value_getter.js strictFails
+built-ins/Array/prototype/unshift/clamps-to-integer-limit.js fails
+built-ins/Array/prototype/unshift/length-near-integer-limit.js fails
+built-ins/Array/prototype/unshift/throws-if-integer-limit-exceeded.js fails
+built-ins/ArrayBuffer/data-allocation-after-object-creation.js fails
+built-ins/ArrayBuffer/isView/arg-is-dataview-subclass-instance.js fails
+built-ins/ArrayBuffer/isView/arg-is-typedarray-subclass-instance.js fails
+built-ins/ArrayBuffer/proto-from-ctor-realm.js fails
+built-ins/ArrayBuffer/prototype-from-newtarget.js fails
+built-ins/ArrayBuffer/prototype/byteLength/detached-buffer.js fails
+built-ins/ArrayBuffer/prototype/slice/end-default-if-absent.js fails
+built-ins/ArrayBuffer/prototype/slice/end-default-if-undefined.js fails
+built-ins/ArrayBuffer/prototype/slice/end-exceeds-length.js fails
+built-ins/ArrayBuffer/prototype/slice/negative-end.js fails
+built-ins/ArrayBuffer/prototype/slice/negative-start.js fails
+built-ins/ArrayBuffer/prototype/slice/nonconstructor.js fails
+built-ins/ArrayBuffer/prototype/slice/species-constructor-is-undefined.js fails
+built-ins/ArrayBuffer/prototype/slice/species-is-null.js fails
+built-ins/ArrayBuffer/prototype/slice/species-is-undefined.js fails
+built-ins/ArrayBuffer/prototype/slice/species-returns-larger-arraybuffer.js fails
+built-ins/ArrayBuffer/prototype/slice/species.js fails
+built-ins/ArrayBuffer/prototype/slice/start-default-if-absent.js fails
+built-ins/ArrayBuffer/prototype/slice/start-default-if-undefined.js fails
+built-ins/ArrayBuffer/prototype/slice/start-exceeds-end.js fails
+built-ins/ArrayBuffer/prototype/slice/start-exceeds-length.js fails
+built-ins/ArrayBuffer/prototype/slice/tointeger-conversion-end.js fails
+built-ins/ArrayBuffer/prototype/slice/tointeger-conversion-start.js fails
+built-ins/ArrayBuffer/undefined-newtarget-throws.js fails
+built-ins/ArrayIteratorPrototype/next/detach-typedarray-in-progress.js fails
+built-ins/AsyncFunction/AsyncFunction-construct.js fails
+built-ins/AsyncFunction/AsyncFunction-is-extensible.js fails
+built-ins/AsyncFunction/AsyncFunction-is-subclass.js fails
+built-ins/AsyncFunction/AsyncFunction-length.js fails
+built-ins/AsyncFunction/AsyncFunction-name.js fails
+built-ins/AsyncFunction/AsyncFunction-prototype.js fails
+built-ins/AsyncFunction/AsyncFunction.js fails
+built-ins/AsyncFunction/AsyncFunctionPrototype-is-extensible.js fails
+built-ins/AsyncFunction/AsyncFunctionPrototype-prototype.js fails
+built-ins/AsyncFunction/AsyncFunctionPrototype-to-string.js fails
+built-ins/AsyncFunction/instance-construct-throws.js fails
+built-ins/AsyncFunction/instance-has-name.js fails
+built-ins/AsyncFunction/instance-length.js fails
+built-ins/AsyncFunction/instance-prototype-property.js fails
+built-ins/AsyncGeneratorPrototype/next/name.js fails
+built-ins/AsyncGeneratorPrototype/return/name.js fails
+built-ins/AsyncGeneratorPrototype/throw/name.js fails
+built-ins/Atomics/Symbol.toStringTag.js fails
+built-ins/Atomics/add/descriptor.js fails
+built-ins/Atomics/add/length.js fails
+built-ins/Atomics/add/name.js fails
+built-ins/Atomics/add/nonshared-int-views.js fails
+built-ins/Atomics/add/shared-nonint-views.js fails
+built-ins/Atomics/and/descriptor.js fails
+built-ins/Atomics/and/length.js fails
+built-ins/Atomics/and/name.js fails
+built-ins/Atomics/and/nonshared-int-views.js fails
+built-ins/Atomics/and/shared-nonint-views.js fails
+built-ins/Atomics/compareExchange/descriptor.js fails
+built-ins/Atomics/compareExchange/length.js fails
+built-ins/Atomics/compareExchange/name.js fails
+built-ins/Atomics/compareExchange/nonshared-int-views.js fails
+built-ins/Atomics/compareExchange/shared-nonint-views.js fails
+built-ins/Atomics/exchange/descriptor.js fails
+built-ins/Atomics/exchange/length.js fails
+built-ins/Atomics/exchange/name.js fails
+built-ins/Atomics/exchange/nonshared-int-views.js fails
+built-ins/Atomics/exchange/shared-nonint-views.js fails
+built-ins/Atomics/isLockFree/corner-cases.js fails
+built-ins/Atomics/isLockFree/descriptor.js fails
+built-ins/Atomics/isLockFree/length.js fails
+built-ins/Atomics/isLockFree/name.js fails
+built-ins/Atomics/isLockFree/value.js fails
+built-ins/Atomics/load/descriptor.js fails
+built-ins/Atomics/load/length.js fails
+built-ins/Atomics/load/name.js fails
+built-ins/Atomics/load/nonshared-int-views.js fails
+built-ins/Atomics/load/shared-nonint-views.js fails
+built-ins/Atomics/or/descriptor.js fails
+built-ins/Atomics/or/length.js fails
+built-ins/Atomics/or/name.js fails
+built-ins/Atomics/or/nonshared-int-views.js fails
+built-ins/Atomics/or/shared-nonint-views.js fails
+built-ins/Atomics/prop-desc.js fails
+built-ins/Atomics/proto.js fails
+built-ins/Atomics/store/descriptor.js fails
+built-ins/Atomics/store/length.js fails
+built-ins/Atomics/store/name.js fails
+built-ins/Atomics/store/nonshared-int-views.js fails
+built-ins/Atomics/store/shared-nonint-views.js fails
+built-ins/Atomics/sub/descriptor.js fails
+built-ins/Atomics/sub/length.js fails
+built-ins/Atomics/sub/name.js fails
+built-ins/Atomics/sub/nonshared-int-views.js fails
+built-ins/Atomics/sub/shared-nonint-views.js fails
+built-ins/Atomics/wait/descriptor.js fails
+built-ins/Atomics/wait/did-timeout.js fails
+built-ins/Atomics/wait/good-views.js fails
+built-ins/Atomics/wait/length.js fails
+built-ins/Atomics/wait/name.js fails
+built-ins/Atomics/wait/nan-timeout.js fails
+built-ins/Atomics/wait/negative-timeout.js fails
+built-ins/Atomics/wait/no-spurious-wakeup.js fails
+built-ins/Atomics/wait/nonshared-int-views.js fails
+built-ins/Atomics/wait/shared-nonint-views.js fails
+built-ins/Atomics/wait/was-woken.js fails
+built-ins/Atomics/wake/counts.js fails
+built-ins/Atomics/wake/descriptor.js fails
+built-ins/Atomics/wake/length.js fails
+built-ins/Atomics/wake/name.js fails
+built-ins/Atomics/wake/nonshared-int-views.js fails
+built-ins/Atomics/wake/shared-nonint-views.js fails
+built-ins/Atomics/wake/wake-all-on-loc.js fails
+built-ins/Atomics/wake/wake-all.js fails
+built-ins/Atomics/wake/wake-in-order.js fails
+built-ins/Atomics/wake/wake-nan.js fails
+built-ins/Atomics/wake/wake-negative.js fails
+built-ins/Atomics/wake/wake-one.js fails
+built-ins/Atomics/wake/wake-two.js fails
+built-ins/Atomics/wake/wake-zero.js fails
+built-ins/Atomics/xor/descriptor.js fails
+built-ins/Atomics/xor/length.js fails
+built-ins/Atomics/xor/name.js fails
+built-ins/Atomics/xor/nonshared-int-views.js fails
+built-ins/Atomics/xor/shared-nonint-views.js fails
+built-ins/Boolean/proto-from-ctor-realm.js fails
+built-ins/DataView/custom-proto-access-throws.js fails
+built-ins/DataView/custom-proto-if-object-is-used.js fails
+built-ins/DataView/detached-buffer.js fails
+built-ins/DataView/length.js fails
+built-ins/DataView/newtarget-undefined-throws.js fails
+built-ins/DataView/proto-from-ctor-realm.js fails
+built-ins/DataView/prototype/buffer/detached-buffer.js fails
+built-ins/DataView/prototype/byteLength/detached-buffer.js fails
+built-ins/DataView/prototype/byteOffset/detached-buffer.js fails
+built-ins/DataView/prototype/getFloat32/detached-buffer-after-toindex-byteoffset.js fails
+built-ins/DataView/prototype/getFloat32/detached-buffer-before-outofrange-byteoffset.js fails
+built-ins/DataView/prototype/getFloat32/detached-buffer.js fails
+built-ins/DataView/prototype/getFloat32/index-is-out-of-range.js fails
+built-ins/DataView/prototype/getFloat32/negative-byteoffset-throws.js fails
+built-ins/DataView/prototype/getFloat32/toindex-byteoffset.js fails
+built-ins/DataView/prototype/getFloat64/detached-buffer-after-toindex-byteoffset.js fails
+built-ins/DataView/prototype/getFloat64/detached-buffer-before-outofrange-byteoffset.js fails
+built-ins/DataView/prototype/getFloat64/detached-buffer.js fails
+built-ins/DataView/prototype/getFloat64/index-is-out-of-range.js fails
+built-ins/DataView/prototype/getFloat64/negative-byteoffset-throws.js fails
+built-ins/DataView/prototype/getFloat64/toindex-byteoffset.js fails
+built-ins/DataView/prototype/getInt16/detached-buffer-after-toindex-byteoffset.js fails
+built-ins/DataView/prototype/getInt16/detached-buffer-before-outofrange-byteoffset.js fails
+built-ins/DataView/prototype/getInt16/detached-buffer.js fails
+built-ins/DataView/prototype/getInt16/index-is-out-of-range.js fails
+built-ins/DataView/prototype/getInt16/negative-byteoffset-throws.js fails
+built-ins/DataView/prototype/getInt16/toindex-byteoffset.js fails
+built-ins/DataView/prototype/getInt32/detached-buffer-after-toindex-byteoffset.js fails
+built-ins/DataView/prototype/getInt32/detached-buffer-before-outofrange-byteoffset.js fails
+built-ins/DataView/prototype/getInt32/detached-buffer.js fails
+built-ins/DataView/prototype/getInt32/index-is-out-of-range.js fails
+built-ins/DataView/prototype/getInt32/negative-byteoffset-throws.js fails
+built-ins/DataView/prototype/getInt32/toindex-byteoffset.js fails
+built-ins/DataView/prototype/getInt8/detached-buffer-after-toindex-byteoffset.js fails
+built-ins/DataView/prototype/getInt8/detached-buffer-before-outofrange-byteoffset.js fails
+built-ins/DataView/prototype/getInt8/detached-buffer.js fails
+built-ins/DataView/prototype/getInt8/index-is-out-of-range.js fails
+built-ins/DataView/prototype/getInt8/negative-byteoffset-throws.js fails
+built-ins/DataView/prototype/getInt8/toindex-byteoffset.js fails
+built-ins/DataView/prototype/getUint16/detached-buffer-after-toindex-byteoffset.js fails
+built-ins/DataView/prototype/getUint16/detached-buffer-before-outofrange-byteoffset.js fails
+built-ins/DataView/prototype/getUint16/detached-buffer.js fails
+built-ins/DataView/prototype/getUint16/index-is-out-of-range.js fails
+built-ins/DataView/prototype/getUint16/negative-byteoffset-throws.js fails
+built-ins/DataView/prototype/getUint16/toindex-byteoffset.js fails
+built-ins/DataView/prototype/getUint32/detached-buffer-after-toindex-byteoffset.js fails
+built-ins/DataView/prototype/getUint32/detached-buffer-before-outofrange-byteoffset.js fails
+built-ins/DataView/prototype/getUint32/detached-buffer.js fails
+built-ins/DataView/prototype/getUint32/index-is-out-of-range.js fails
+built-ins/DataView/prototype/getUint32/negative-byteoffset-throws.js fails
+built-ins/DataView/prototype/getUint32/toindex-byteoffset.js fails
+built-ins/DataView/prototype/getUint8/detached-buffer-after-toindex-byteoffset.js fails
+built-ins/DataView/prototype/getUint8/detached-buffer-before-outofrange-byteoffset.js fails
+built-ins/DataView/prototype/getUint8/detached-buffer.js fails
+built-ins/DataView/prototype/getUint8/index-is-out-of-range.js fails
+built-ins/DataView/prototype/getUint8/negative-byteoffset-throws.js fails
+built-ins/DataView/prototype/getUint8/toindex-byteoffset.js fails
+built-ins/DataView/prototype/setFloat32/detached-buffer-after-number-value.js fails
+built-ins/DataView/prototype/setFloat32/detached-buffer-after-toindex-byteoffset.js fails
+built-ins/DataView/prototype/setFloat32/detached-buffer-before-outofrange-byteoffset.js fails
+built-ins/DataView/prototype/setFloat32/detached-buffer.js fails
+built-ins/DataView/prototype/setFloat32/index-check-before-value-conversion.js fails
+built-ins/DataView/prototype/setFloat32/index-is-out-of-range.js fails
+built-ins/DataView/prototype/setFloat32/negative-byteoffset-throws.js fails
+built-ins/DataView/prototype/setFloat32/range-check-after-value-conversion.js fails
+built-ins/DataView/prototype/setFloat32/toindex-byteoffset.js fails
+built-ins/DataView/prototype/setFloat64/detached-buffer-after-number-value.js fails
+built-ins/DataView/prototype/setFloat64/detached-buffer-after-toindex-byteoffset.js fails
+built-ins/DataView/prototype/setFloat64/detached-buffer-before-outofrange-byteoffset.js fails
+built-ins/DataView/prototype/setFloat64/detached-buffer.js fails
+built-ins/DataView/prototype/setFloat64/index-check-before-value-conversion.js fails
+built-ins/DataView/prototype/setFloat64/index-is-out-of-range.js fails
+built-ins/DataView/prototype/setFloat64/negative-byteoffset-throws.js fails
+built-ins/DataView/prototype/setFloat64/range-check-after-value-conversion.js fails
+built-ins/DataView/prototype/setFloat64/toindex-byteoffset.js fails
+built-ins/DataView/prototype/setInt16/detached-buffer-after-number-value.js fails
+built-ins/DataView/prototype/setInt16/detached-buffer-after-toindex-byteoffset.js fails
+built-ins/DataView/prototype/setInt16/detached-buffer-before-outofrange-byteoffset.js fails
+built-ins/DataView/prototype/setInt16/detached-buffer.js fails
+built-ins/DataView/prototype/setInt16/index-check-before-value-conversion.js fails
+built-ins/DataView/prototype/setInt16/index-is-out-of-range.js fails
+built-ins/DataView/prototype/setInt16/negative-byteoffset-throws.js fails
+built-ins/DataView/prototype/setInt16/range-check-after-value-conversion.js fails
+built-ins/DataView/prototype/setInt16/toindex-byteoffset.js fails
+built-ins/DataView/prototype/setInt32/detached-buffer-after-number-value.js fails
+built-ins/DataView/prototype/setInt32/detached-buffer-after-toindex-byteoffset.js fails
+built-ins/DataView/prototype/setInt32/detached-buffer-before-outofrange-byteoffset.js fails
+built-ins/DataView/prototype/setInt32/detached-buffer.js fails
+built-ins/DataView/prototype/setInt32/index-check-before-value-conversion.js fails
+built-ins/DataView/prototype/setInt32/index-is-out-of-range.js fails
+built-ins/DataView/prototype/setInt32/negative-byteoffset-throws.js fails
+built-ins/DataView/prototype/setInt32/range-check-after-value-conversion.js fails
+built-ins/DataView/prototype/setInt32/toindex-byteoffset.js fails
+built-ins/DataView/prototype/setInt8/detached-buffer-after-number-value.js fails
+built-ins/DataView/prototype/setInt8/detached-buffer-after-toindex-byteoffset.js fails
+built-ins/DataView/prototype/setInt8/detached-buffer-before-outofrange-byteoffset.js fails
+built-ins/DataView/prototype/setInt8/detached-buffer.js fails
+built-ins/DataView/prototype/setInt8/index-check-before-value-conversion.js fails
+built-ins/DataView/prototype/setInt8/index-is-out-of-range.js fails
+built-ins/DataView/prototype/setInt8/negative-byteoffset-throws.js fails
+built-ins/DataView/prototype/setInt8/range-check-after-value-conversion.js fails
+built-ins/DataView/prototype/setInt8/toindex-byteoffset.js fails
+built-ins/DataView/prototype/setUint16/detached-buffer-after-number-value.js fails
+built-ins/DataView/prototype/setUint16/detached-buffer-after-toindex-byteoffset.js fails
+built-ins/DataView/prototype/setUint16/detached-buffer-before-outofrange-byteoffset.js fails
+built-ins/DataView/prototype/setUint16/detached-buffer.js fails
+built-ins/DataView/prototype/setUint16/index-check-before-value-conversion.js fails
+built-ins/DataView/prototype/setUint16/index-is-out-of-range.js fails
+built-ins/DataView/prototype/setUint16/negative-byteoffset-throws.js fails
+built-ins/DataView/prototype/setUint16/range-check-after-value-conversion.js fails
+built-ins/DataView/prototype/setUint16/toindex-byteoffset.js fails
+built-ins/DataView/prototype/setUint32/detached-buffer-after-number-value.js fails
+built-ins/DataView/prototype/setUint32/detached-buffer-after-toindex-byteoffset.js fails
+built-ins/DataView/prototype/setUint32/detached-buffer-before-outofrange-byteoffset.js fails
+built-ins/DataView/prototype/setUint32/detached-buffer.js fails
+built-ins/DataView/prototype/setUint32/index-check-before-value-conversion.js fails
+built-ins/DataView/prototype/setUint32/index-is-out-of-range.js fails
+built-ins/DataView/prototype/setUint32/negative-byteoffset-throws.js fails
+built-ins/DataView/prototype/setUint32/range-check-after-value-conversion.js fails
+built-ins/DataView/prototype/setUint32/toindex-byteoffset.js fails
+built-ins/DataView/prototype/setUint8/detached-buffer-after-number-value.js fails
+built-ins/DataView/prototype/setUint8/detached-buffer-after-toindex-byteoffset.js fails
+built-ins/DataView/prototype/setUint8/detached-buffer-before-outofrange-byteoffset.js fails
+built-ins/DataView/prototype/setUint8/detached-buffer.js fails
+built-ins/DataView/prototype/setUint8/index-check-before-value-conversion.js fails
+built-ins/DataView/prototype/setUint8/index-is-out-of-range.js fails
+built-ins/DataView/prototype/setUint8/negative-byteoffset-throws.js fails
+built-ins/DataView/prototype/setUint8/range-check-after-value-conversion.js fails
+built-ins/DataView/prototype/setUint8/toindex-byteoffset.js fails
+built-ins/DataView/toindex-bytelength.js fails
+built-ins/DataView/toindex-byteoffset.js fails
+built-ins/Date/UTC/infinity-make-day.js fails
+built-ins/Date/UTC/nans.js fails
+built-ins/Date/UTC/no-arg.js fails
+built-ins/Date/UTC/non-integer-values.js fails
+built-ins/Date/UTC/return-value.js fails
+built-ins/Date/UTC/year-offset.js fails
+built-ins/Date/proto-from-ctor-realm-one.js fails
+built-ins/Date/proto-from-ctor-realm-two.js fails
+built-ins/Date/proto-from-ctor-realm-zero.js fails
+built-ins/Date/prototype/Symbol.toPrimitive/hint-default-first-invalid.js fails
+built-ins/Date/prototype/Symbol.toPrimitive/hint-default-first-non-callable.js fails
+built-ins/Date/prototype/Symbol.toPrimitive/hint-default-first-valid.js fails
+built-ins/Date/prototype/Symbol.toPrimitive/hint-number-first-invalid.js fails
+built-ins/Date/prototype/Symbol.toPrimitive/hint-number-first-non-callable.js fails
+built-ins/Date/prototype/Symbol.toPrimitive/hint-number-first-valid.js fails
+built-ins/Date/prototype/Symbol.toPrimitive/hint-string-first-invalid.js fails
+built-ins/Date/prototype/Symbol.toPrimitive/hint-string-first-non-callable.js fails
+built-ins/Date/prototype/Symbol.toPrimitive/hint-string-first-valid.js fails
+built-ins/Date/prototype/toDateString/format.js fails
+built-ins/Date/prototype/toDateString/invalid-date.js fails
+built-ins/Date/prototype/toString/format.js fails
+built-ins/Date/prototype/toTimeString/format.js fails
+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/Error/proto-from-ctor-realm.js fails
+built-ins/Error/prototype/S15.11.4_A2.js fails
+built-ins/Function/call-bind-this-realm-undef.js fails
+built-ins/Function/call-bind-this-realm-value.js fails
+built-ins/Function/internals/Call/class-ctor-realm.js fails
+built-ins/Function/internals/Call/class-ctor.js fails
+built-ins/Function/internals/Construct/base-ctor-revoked-proxy-realm.js fails
+built-ins/Function/internals/Construct/base-ctor-revoked-proxy.js fails
+built-ins/Function/internals/Construct/derived-return-val-realm.js fails
+built-ins/Function/internals/Construct/derived-return-val.js fails
+built-ins/Function/internals/Construct/derived-this-uninitialized-realm.js fails
+built-ins/Function/internals/Construct/derived-this-uninitialized.js fails
+built-ins/Function/proto-from-ctor-realm.js fails
+built-ins/Function/prototype/Symbol.hasInstance/this-val-not-callable.js fails
+built-ins/Function/prototype/Symbol.hasInstance/this-val-poisoned-prototype.js fails
+built-ins/Function/prototype/Symbol.hasInstance/value-get-prototype-of-err.js fails
+built-ins/Function/prototype/Symbol.hasInstance/value-non-obj.js fails
+built-ins/Function/prototype/bind/BoundFunction_restricted-properties.js fails
+built-ins/Function/prototype/bind/get-fn-realm.js fails
+built-ins/Function/prototype/bind/instance-construct-newtarget-boundtarget-bound.js fails
+built-ins/Function/prototype/bind/instance-construct-newtarget-boundtarget.js fails
+built-ins/Function/prototype/bind/instance-construct-newtarget-self-new.js fails
+built-ins/Function/prototype/bind/instance-construct-newtarget-self-reflect.js fails
+built-ins/Function/prototype/bind/instance-name-chained.js fails
+built-ins/Function/prototype/bind/instance-name-non-string.js fails
+built-ins/Function/prototype/bind/instance-name.js fails
+built-ins/Function/prototype/bind/proto-from-ctor-realm.js fails
+built-ins/Function/prototype/toString/AsyncFunction.js fails
+built-ins/Function/prototype/toString/Function.js fails
+built-ins/Function/prototype/toString/GeneratorFunction.js fails
+built-ins/Function/prototype/toString/anonymous-intrinsics.js fails
+built-ins/Function/prototype/toString/arrow-function.js fails
+built-ins/Function/prototype/toString/async-arrow-function.js fails
+built-ins/Function/prototype/toString/async-function-declaration.js fails
+built-ins/Function/prototype/toString/async-function-expression.js fails
+built-ins/Function/prototype/toString/async-method-class-expression-static.js fails
+built-ins/Function/prototype/toString/async-method-class-expression.js fails
+built-ins/Function/prototype/toString/async-method-class-statement-static.js fails
+built-ins/Function/prototype/toString/async-method-class-statement.js fails
+built-ins/Function/prototype/toString/async-method-object.js fails
+built-ins/Function/prototype/toString/bound-function.js fails
+built-ins/Function/prototype/toString/class-declaration-complex-heritage.js fails
+built-ins/Function/prototype/toString/class-declaration-explicit-ctor.js fails
+built-ins/Function/prototype/toString/class-declaration-implicit-ctor.js fails
+built-ins/Function/prototype/toString/class-expression-explicit-ctor.js fails
+built-ins/Function/prototype/toString/class-expression-implicit-ctor.js fails
+built-ins/Function/prototype/toString/function-declaration-non-simple-parameter-list.js fails
+built-ins/Function/prototype/toString/function-declaration.js fails
+built-ins/Function/prototype/toString/function-expression.js fails
+built-ins/Function/prototype/toString/generator-function-declaration.js fails
+built-ins/Function/prototype/toString/generator-function-expression.js fails
+built-ins/Function/prototype/toString/generator-method.js fails
+built-ins/Function/prototype/toString/getter-class-expression-static.js fails
+built-ins/Function/prototype/toString/getter-class-expression.js fails
+built-ins/Function/prototype/toString/getter-class-statement-static.js fails
+built-ins/Function/prototype/toString/getter-class-statement.js fails
+built-ins/Function/prototype/toString/getter-object.js fails
+built-ins/Function/prototype/toString/intrinsics.js fails
+built-ins/Function/prototype/toString/line-terminator-normalisation-CR-LF.js fails
+built-ins/Function/prototype/toString/line-terminator-normalisation-CR.js fails
+built-ins/Function/prototype/toString/line-terminator-normalisation-LF.js fails
+built-ins/Function/prototype/toString/method-class-expression-static.js fails
+built-ins/Function/prototype/toString/method-class-expression.js fails
+built-ins/Function/prototype/toString/method-class-statement-static.js fails
+built-ins/Function/prototype/toString/method-class-statement.js fails
+built-ins/Function/prototype/toString/method-computed-property-name.js fails
+built-ins/Function/prototype/toString/method-object.js fails
+built-ins/Function/prototype/toString/proxy.js fails
+built-ins/Function/prototype/toString/setter-class-expression-static.js fails
+built-ins/Function/prototype/toString/setter-class-expression.js fails
+built-ins/Function/prototype/toString/setter-class-statement-static.js fails
+built-ins/Function/prototype/toString/setter-class-statement.js fails
+built-ins/Function/prototype/toString/setter-object.js fails
+built-ins/Function/prototype/toString/symbol-named-builtins.js fails
+built-ins/Function/prototype/toString/unicode.js fails
+built-ins/GeneratorFunction/proto-from-ctor-realm.js fails
+built-ins/JSON/parse/revived-proxy-revoked.js fails
+built-ins/JSON/parse/revived-proxy.js fails
+built-ins/JSON/parse/reviver-array-define-prop-err.js fails
+built-ins/JSON/parse/reviver-array-delete-err.js fails
+built-ins/JSON/parse/reviver-array-length-coerce-err.js fails
+built-ins/JSON/parse/reviver-array-length-get-err.js fails
+built-ins/JSON/parse/reviver-object-define-prop-err.js fails
+built-ins/JSON/parse/reviver-object-delete-err.js fails
+built-ins/JSON/parse/reviver-object-own-keys-err.js fails
+built-ins/JSON/stringify/replacer-proxy-revoked.js fails
+built-ins/JSON/stringify/replacer-proxy.js fails
+built-ins/JSON/stringify/value-proxy-revoked.js fails
+built-ins/JSON/stringify/value-proxy.js fails
+built-ins/Map/iterable-calls-set.js fails
+built-ins/Map/iterator-close-after-set-failure.js fails
+built-ins/Map/iterator-is-undefined-throws.js fails
+built-ins/Map/iterator-item-first-entry-returns-abrupt.js fails
+built-ins/Map/iterator-item-second-entry-returns-abrupt.js fails
+built-ins/Map/iterator-items-are-not-object-close-iterator.js fails
+built-ins/Map/iterator-items-are-not-object.js fails
+built-ins/Map/map-iterable-throws-when-set-is-not-callable.js fails
+built-ins/Map/map-iterable.js fails
+built-ins/Map/proto-from-ctor-realm.js fails
+built-ins/Map/prototype/clear/context-is-weakmap-object-throws.js fails
+built-ins/Map/prototype/delete/context-is-weakmap-object-throws.js fails
+built-ins/Map/prototype/delete/does-not-break-iterators.js fails
+built-ins/Map/prototype/delete/returns-true-for-deleted-entry.js fails
+built-ins/Map/prototype/entries/does-not-have-mapdata-internal-slot-weakmap.js fails
+built-ins/Map/prototype/forEach/callback-parameters.js fails
+built-ins/Map/prototype/forEach/deleted-values-during-foreach.js fails
+built-ins/Map/prototype/forEach/does-not-have-mapdata-internal-slot-weakmap.js fails
+built-ins/Map/prototype/forEach/iterates-in-key-insertion-order.js fails
+built-ins/Map/prototype/forEach/iterates-values-added-after-foreach-begins.js fails
+built-ins/Map/prototype/forEach/iterates-values-deleted-then-readded.js fails
+built-ins/Map/prototype/get/does-not-have-mapdata-internal-slot-weakmap.js fails
+built-ins/Map/prototype/has/does-not-have-mapdata-internal-slot-weakmap.js fails
+built-ins/Map/prototype/keys/does-not-have-mapdata-internal-slot-weakmap.js fails
+built-ins/Map/prototype/set/append-new-values.js fails
+built-ins/Map/prototype/set/does-not-have-mapdata-internal-slot-weakmap.js fails
+built-ins/Map/prototype/set/length.js fails
+built-ins/Map/prototype/size/does-not-have-mapdata-internal-slot-weakmap.js fails
+built-ins/Map/prototype/size/returns-count-of-present-values-by-iterable.js fails
+built-ins/Map/prototype/values/does-not-have-mapdata-internal-slot-weakmap.js fails
+built-ins/Math/max/zeros.js fails
+built-ins/Math/round/S15.8.2.15_A7.js fails
+built-ins/NativeErrors/EvalError/proto.js fails
+built-ins/NativeErrors/EvalError/prototype/not-error-object.js fails
+built-ins/NativeErrors/RangeError/proto.js fails
+built-ins/NativeErrors/RangeError/prototype/not-error-object.js fails
+built-ins/NativeErrors/ReferenceError/proto.js fails
+built-ins/NativeErrors/ReferenceError/prototype/not-error-object.js fails
+built-ins/NativeErrors/SyntaxError/proto.js fails
+built-ins/NativeErrors/SyntaxError/prototype/not-error-object.js fails
+built-ins/NativeErrors/TypeError/proto.js fails
+built-ins/NativeErrors/TypeError/prototype/not-error-object.js fails
+built-ins/NativeErrors/URIError/proto.js fails
+built-ins/NativeErrors/URIError/prototype/not-error-object.js fails
+built-ins/Number/isFinite/arg-is-not-number.js fails
+built-ins/Number/isNaN/arg-is-not-number.js fails
+built-ins/Number/proto-from-ctor-realm.js fails
+built-ins/Number/prototype/toExponential/infinity.js fails
+built-ins/Number/prototype/toExponential/nan.js fails
+built-ins/Number/prototype/toExponential/range.js fails
+built-ins/Number/prototype/toFixed/range.js fails
+built-ins/Number/prototype/toPrecision/infinity.js fails
+built-ins/Number/prototype/toPrecision/nan.js fails
+built-ins/Number/prototype/toPrecision/range.js fails
+built-ins/Number/prototype/toPrecision/return-values.js fails
+built-ins/Number/string-binary-literal.js fails
+built-ins/Number/string-hex-literal-invalid.js fails
+built-ins/Number/string-octal-literal.js fails
+built-ins/Object/assign/Target-Symbol.js fails
+built-ins/Object/assign/source-own-prop-desc-missing.js fails
+built-ins/Object/assign/source-own-prop-error.js fails
+built-ins/Object/assign/source-own-prop-keys-error.js fails
+built-ins/Object/create/15.2.3.5-4-14.js strictFails
+built-ins/Object/create/15.2.3.5-4-37.js strictFails
+built-ins/Object/entries/exception-during-enumeration.js fails
+built-ins/Object/entries/function-length.js fails
+built-ins/Object/entries/function-name.js fails
+built-ins/Object/entries/function-property-descriptor.js fails
+built-ins/Object/entries/getter-adding-key.js fails
+built-ins/Object/entries/getter-making-future-key-nonenumerable.js fails
+built-ins/Object/entries/getter-removing-future-key.js fails
+built-ins/Object/entries/inherited-properties-omitted.js fails
+built-ins/Object/entries/observable-operations.js fails
+built-ins/Object/entries/primitive-booleans.js fails
+built-ins/Object/entries/primitive-numbers.js fails
+built-ins/Object/entries/primitive-strings.js fails
+built-ins/Object/entries/primitive-symbols.js fails
+built-ins/Object/entries/symbols-omitted.js fails
+built-ins/Object/entries/tamper-with-global-object.js fails
+built-ins/Object/entries/tamper-with-object-keys.js fails
+built-ins/Object/getOwnPropertyDescriptor/15.2.3.3-4-191.js fails
+built-ins/Object/getOwnPropertyDescriptor/15.2.3.3-4-194.js fails
+built-ins/Object/getOwnPropertyDescriptor/15.2.3.3-4-201.js fails
+built-ins/Object/getOwnPropertyDescriptor/15.2.3.3-4-212.js fails
+built-ins/Object/getOwnPropertyDescriptor/15.2.3.3-4-213.js fails
+built-ins/Object/getOwnPropertyDescriptor/15.2.3.3-4-214.js fails
+built-ins/Object/getOwnPropertyDescriptor/15.2.3.3-4-215.js fails
+built-ins/Object/getOwnPropertyDescriptors/function-length.js fails
+built-ins/Object/getOwnPropertyDescriptors/function-name.js fails
+built-ins/Object/getOwnPropertyDescriptors/function-property-descriptor.js fails
+built-ins/Object/getOwnPropertyDescriptors/inherited-properties-omitted.js fails
+built-ins/Object/getOwnPropertyDescriptors/normal-object.js fails
+built-ins/Object/getOwnPropertyDescriptors/observable-operations.js fails
+built-ins/Object/getOwnPropertyDescriptors/primitive-booleans.js fails
+built-ins/Object/getOwnPropertyDescriptors/primitive-numbers.js fails
+built-ins/Object/getOwnPropertyDescriptors/primitive-strings.js fails
+built-ins/Object/getOwnPropertyDescriptors/primitive-symbols.js fails
+built-ins/Object/getOwnPropertyDescriptors/proxy-undefined-descriptor.js fails
+built-ins/Object/getOwnPropertyDescriptors/symbols-included.js fails
+built-ins/Object/getOwnPropertyDescriptors/tamper-with-global-object.js fails
+built-ins/Object/getOwnPropertyDescriptors/tamper-with-object-keys.js fails
+built-ins/Object/getPrototypeOf/15.2.3.2-2-12.js fails
+built-ins/Object/getPrototypeOf/15.2.3.2-2-13.js fails
+built-ins/Object/getPrototypeOf/15.2.3.2-2-14.js fails
+built-ins/Object/getPrototypeOf/15.2.3.2-2-15.js fails
+built-ins/Object/getPrototypeOf/15.2.3.2-2-16.js fails
+built-ins/Object/getPrototypeOf/15.2.3.2-2-17.js fails
+built-ins/Object/isExtensible/15.2.3.13-1-1.js fails
+built-ins/Object/isExtensible/15.2.3.13-1-2.js fails
+built-ins/Object/isFrozen/15.2.3.12-1-1.js fails
+built-ins/Object/isFrozen/15.2.3.12-1-2.js fails
+built-ins/Object/keys/proxy-keys.js fails
+built-ins/Object/preventExtensions/15.2.3.10-1-1.js fails
+built-ins/Object/preventExtensions/15.2.3.10-1-2.js fails
+built-ins/Object/proto-from-ctor.js fails
+built-ins/Object/prototype/setPrototypeOf-with-different-values.js fails
+built-ins/Object/prototype/setPrototypeOf-with-same-value.js fails
+built-ins/Object/prototype/toLocaleString/primitive_this_value_getter.js strictFails
+built-ins/Object/prototype/toString/no-prototype-property.js fails
+built-ins/Object/prototype/toString/proxy-array.js fails
+built-ins/Object/prototype/toString/proxy-function.js fails
+built-ins/Object/prototype/toString/proxy-revoked.js fails
+built-ins/Object/prototype/valueOf/S15.2.4.4_A14.js fails
+built-ins/Object/setPrototypeOf/set-error.js fails
+built-ins/Object/values/exception-during-enumeration.js fails
+built-ins/Object/values/function-length.js fails
+built-ins/Object/values/function-name.js fails
+built-ins/Object/values/function-property-descriptor.js fails
+built-ins/Object/values/getter-adding-key.js fails
+built-ins/Object/values/getter-making-future-key-nonenumerable.js fails
+built-ins/Object/values/getter-removing-future-key.js fails
+built-ins/Object/values/inherited-properties-omitted.js fails
+built-ins/Object/values/observable-operations.js fails
+built-ins/Object/values/primitive-booleans.js fails
+built-ins/Object/values/primitive-numbers.js fails
+built-ins/Object/values/primitive-strings.js fails
+built-ins/Object/values/primitive-symbols.js fails
+built-ins/Object/values/symbols-omitted.js fails
+built-ins/Object/values/tamper-with-global-object.js fails
+built-ins/Object/values/tamper-with-object-keys.js fails
+built-ins/Promise/S25.4.3.1_A1.1_T1.js fails
+built-ins/Promise/S25.4.3.1_A2.1_T1.js fails
+built-ins/Promise/S25.4.3.1_A2.2_T1.js fails
+built-ins/Promise/S25.4.3.1_A3.1_T1.js fails
+built-ins/Promise/Symbol.species/length.js fails
+built-ins/Promise/Symbol.species/prop-desc.js fails
+built-ins/Promise/Symbol.species/return-value.js fails
+built-ins/Promise/Symbol.species/symbol-species-name.js fails
+built-ins/Promise/Symbol.species/symbol-species.js fails
+built-ins/Promise/all/S25.4.4.1_A1.1_T1.js fails
+built-ins/Promise/all/S25.4.4.1_A2.1_T1.js fails
+built-ins/Promise/all/S25.4.4.1_A4.1_T1.js fails
+built-ins/Promise/all/S25.4.4.1_A6.1_T1.js fails
+built-ins/Promise/all/call-resolve-element-after-return.js fails
+built-ins/Promise/all/call-resolve-element-items.js fails
+built-ins/Promise/all/call-resolve-element.js fails
+built-ins/Promise/all/capability-executor-called-twice.js fails
+built-ins/Promise/all/capability-executor-not-callable.js fails
+built-ins/Promise/all/capability-resolve-throws-no-close.js fails
+built-ins/Promise/all/ctx-ctor-throws.js fails
+built-ins/Promise/all/ctx-ctor.js fails
+built-ins/Promise/all/ctx-non-ctor.js fails
+built-ins/Promise/all/ctx-non-object.js fails
+built-ins/Promise/all/invoke-resolve-error-close.js fails
+built-ins/Promise/all/invoke-resolve-get-error-close.js fails
+built-ins/Promise/all/invoke-resolve-return.js fails
+built-ins/Promise/all/invoke-resolve.js fails
+built-ins/Promise/all/invoke-then-error-close.js fails
+built-ins/Promise/all/invoke-then-get-error-close.js fails
+built-ins/Promise/all/invoke-then.js fails
+built-ins/Promise/all/iter-next-val-err-no-close.js fails
+built-ins/Promise/all/iter-step-err-no-close.js fails
+built-ins/Promise/all/length.js fails
+built-ins/Promise/all/name.js fails
+built-ins/Promise/all/new-resolve-function.js fails
+built-ins/Promise/all/prop-desc.js fails
+built-ins/Promise/all/resolve-before-loop-exit-from-same.js fails
+built-ins/Promise/all/resolve-before-loop-exit.js fails
+built-ins/Promise/all/resolve-element-function-extensible.js fails
+built-ins/Promise/all/resolve-element-function-length.js fails
+built-ins/Promise/all/resolve-element-function-name.js fails
+built-ins/Promise/all/resolve-element-function-nonconstructor.js fails
+built-ins/Promise/all/resolve-element-function-prototype.js fails
+built-ins/Promise/all/resolve-from-same-thenable.js fails
+built-ins/Promise/all/same-reject-function.js fails
+built-ins/Promise/all/species-get-error.js fails
+built-ins/Promise/exec-args.js fails
+built-ins/Promise/executor-function-extensible.js fails
+built-ins/Promise/executor-function-length.js fails
+built-ins/Promise/executor-function-name.js fails
+built-ins/Promise/executor-function-nonconstructor.js fails
+built-ins/Promise/executor-function-prototype.js fails
+built-ins/Promise/length.js fails
+built-ins/Promise/name.js fails
+built-ins/Promise/proto-from-ctor-realm.js fails
+built-ins/Promise/prototype/S25.4.4.2_A1.1_T1.js fails
+built-ins/Promise/prototype/S25.4.5_A3.1_T1.js fails
+built-ins/Promise/prototype/Symbol.toStringTag.js fails
+built-ins/Promise/prototype/catch/S25.4.5.1_A1.1_T1.js fails
+built-ins/Promise/prototype/catch/S25.4.5.1_A2.1_T1.js fails
+built-ins/Promise/prototype/catch/invokes-then.js fails
+built-ins/Promise/prototype/catch/length.js fails
+built-ins/Promise/prototype/catch/name.js fails
+built-ins/Promise/prototype/catch/prop-desc.js fails
+built-ins/Promise/prototype/catch/this-value-non-object.js fails
+built-ins/Promise/prototype/catch/this-value-obj-coercible.js fails
+built-ins/Promise/prototype/catch/this-value-then-not-callable.js fails
+built-ins/Promise/prototype/catch/this-value-then-poisoned.js fails
+built-ins/Promise/prototype/catch/this-value-then-throws.js fails
+built-ins/Promise/prototype/no-promise-state.js fails
+built-ins/Promise/prototype/prop-desc.js fails
+built-ins/Promise/prototype/proto.js fails
+built-ins/Promise/prototype/then/S25.4.5.3_A1.1_T1.js fails
+built-ins/Promise/prototype/then/S25.4.5.3_A1.1_T2.js fails
+built-ins/Promise/prototype/then/S25.4.5.3_A2.1_T1.js fails
+built-ins/Promise/prototype/then/S25.4.5.3_A2.1_T2.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/context-check-on-entry.js fails
+built-ins/Promise/prototype/then/ctor-custom.js fails
+built-ins/Promise/prototype/then/ctor-null.js fails
+built-ins/Promise/prototype/then/ctor-poisoned.js fails
+built-ins/Promise/prototype/then/ctor-throws.js fails
+built-ins/Promise/prototype/then/ctor-undef.js fails
+built-ins/Promise/prototype/then/length.js fails
+built-ins/Promise/prototype/then/name.js fails
+built-ins/Promise/prototype/then/prop-desc.js fails
+built-ins/Promise/race/S25.4.4.3_A1.1_T1.js fails
+built-ins/Promise/race/S25.4.4.3_A2.1_T1.js fails
+built-ins/Promise/race/S25.4.4.3_A3.1_T1.js fails
+built-ins/Promise/race/S25.4.4.3_A3.1_T2.js fails
+built-ins/Promise/race/capability-executor-called-twice.js fails
+built-ins/Promise/race/capability-executor-not-callable.js fails
+built-ins/Promise/race/ctx-ctor-throws.js fails
+built-ins/Promise/race/ctx-ctor.js fails
+built-ins/Promise/race/ctx-non-ctor.js fails
+built-ins/Promise/race/ctx-non-object.js fails
+built-ins/Promise/race/invoke-resolve-error-close.js fails
+built-ins/Promise/race/invoke-resolve-get-error-close.js fails
+built-ins/Promise/race/invoke-resolve-return.js fails
+built-ins/Promise/race/invoke-resolve.js fails
+built-ins/Promise/race/invoke-then-error-close.js fails
+built-ins/Promise/race/invoke-then-get-error-close.js fails
+built-ins/Promise/race/invoke-then.js fails
+built-ins/Promise/race/iter-next-val-err-no-close.js fails
+built-ins/Promise/race/iter-step-err-no-close.js fails
+built-ins/Promise/race/length.js fails
+built-ins/Promise/race/name.js fails
+built-ins/Promise/race/prop-desc.js fails
+built-ins/Promise/race/same-reject-function.js fails
+built-ins/Promise/race/same-resolve-function.js fails
+built-ins/Promise/race/species-get-error.js fails
+built-ins/Promise/reject-function-extensible.js fails
+built-ins/Promise/reject-function-length.js fails
+built-ins/Promise/reject-function-name.js fails
+built-ins/Promise/reject-function-nonconstructor.js fails
+built-ins/Promise/reject-function-prototype.js fails
+built-ins/Promise/reject/S25.4.4.4_A1.1_T1.js fails
+built-ins/Promise/reject/S25.4.4.4_A3.1_T1.js fails
+built-ins/Promise/reject/capability-executor-called-twice.js fails
+built-ins/Promise/reject/capability-executor-not-callable.js fails
+built-ins/Promise/reject/capability-invocation-error.js fails
+built-ins/Promise/reject/capability-invocation.js fails
+built-ins/Promise/reject/ctx-ctor-throws.js fails
+built-ins/Promise/reject/ctx-ctor.js fails
+built-ins/Promise/reject/ctx-non-ctor.js fails
+built-ins/Promise/reject/ctx-non-object.js fails
+built-ins/Promise/reject/length.js fails
+built-ins/Promise/reject/name.js fails
+built-ins/Promise/reject/prop-desc.js fails
+built-ins/Promise/resolve-function-extensible.js fails
+built-ins/Promise/resolve-function-length.js fails
+built-ins/Promise/resolve-function-name.js fails
+built-ins/Promise/resolve-function-nonconstructor.js fails
+built-ins/Promise/resolve-function-prototype.js fails
+built-ins/Promise/resolve/S25.4.4.5_A1.1_T1.js fails
+built-ins/Promise/resolve/S25.4.4.5_A2.1_T1.js fails
+built-ins/Promise/resolve/arg-uniq-ctor.js fails
+built-ins/Promise/resolve/capability-executor-called-twice.js fails
+built-ins/Promise/resolve/capability-executor-not-callable.js fails
+built-ins/Promise/resolve/capability-invocation-error.js fails
+built-ins/Promise/resolve/context-non-object-with-promise.js fails
+built-ins/Promise/resolve/ctx-ctor-throws.js fails
+built-ins/Promise/resolve/ctx-ctor.js fails
+built-ins/Promise/resolve/ctx-non-ctor.js fails
+built-ins/Promise/resolve/ctx-non-object.js fails
+built-ins/Promise/resolve/length.js fails
+built-ins/Promise/resolve/name.js fails
+built-ins/Promise/resolve/prop-desc.js fails
+built-ins/Promise/resolve/resolve-from-promise-capability.js fails
+built-ins/Promise/resolve/resolve-prms-cstm-then.js fails
+built-ins/Proxy/apply/arguments-realm.js fails
+built-ins/Proxy/apply/call-parameters.js fails
+built-ins/Proxy/apply/call-result.js fails
+built-ins/Proxy/apply/null-handler.js fails
+built-ins/Proxy/apply/return-abrupt.js fails
+built-ins/Proxy/apply/trap-is-not-callable-realm.js fails
+built-ins/Proxy/apply/trap-is-not-callable.js fails
+built-ins/Proxy/apply/trap-is-null.js fails
+built-ins/Proxy/apply/trap-is-undefined-no-property.js fails
+built-ins/Proxy/apply/trap-is-undefined.js fails
+built-ins/Proxy/construct/arguments-realm.js fails
+built-ins/Proxy/construct/call-parameters-new-target.js fails
+built-ins/Proxy/construct/call-parameters.js fails
+built-ins/Proxy/construct/call-result.js fails
+built-ins/Proxy/construct/null-handler.js fails
+built-ins/Proxy/construct/return-is-abrupt.js fails
+built-ins/Proxy/construct/return-not-object-throws-boolean.js fails
+built-ins/Proxy/construct/return-not-object-throws-number.js fails
+built-ins/Proxy/construct/return-not-object-throws-string.js fails
+built-ins/Proxy/construct/return-not-object-throws-symbol.js fails
+built-ins/Proxy/construct/return-not-object-throws-undefined.js fails
+built-ins/Proxy/construct/trap-is-not-callable-realm.js fails
+built-ins/Proxy/construct/trap-is-not-callable.js fails
+built-ins/Proxy/construct/trap-is-null.js fails
+built-ins/Proxy/construct/trap-is-undefined-no-property.js fails
+built-ins/Proxy/construct/trap-is-undefined-proto-from-ctor-realm.js fails
+built-ins/Proxy/construct/trap-is-undefined.js fails
+built-ins/Proxy/constructor.js fails
+built-ins/Proxy/create-handler-is-revoked-proxy.js fails
+built-ins/Proxy/create-handler-not-object-throw-boolean.js fails
+built-ins/Proxy/create-handler-not-object-throw-null.js fails
+built-ins/Proxy/create-handler-not-object-throw-number.js fails
+built-ins/Proxy/create-handler-not-object-throw-string.js fails
+built-ins/Proxy/create-handler-not-object-throw-symbol.js fails
+built-ins/Proxy/create-handler-not-object-throw-undefined.js fails
+built-ins/Proxy/create-target-is-not-callable.js fails
+built-ins/Proxy/create-target-is-not-constructor.js fails
+built-ins/Proxy/create-target-is-revoked-proxy.js fails
+built-ins/Proxy/create-target-not-object-throw-boolean.js fails
+built-ins/Proxy/create-target-not-object-throw-null.js fails
+built-ins/Proxy/create-target-not-object-throw-number.js fails
+built-ins/Proxy/create-target-not-object-throw-string.js fails
+built-ins/Proxy/create-target-not-object-throw-symbol.js fails
+built-ins/Proxy/create-target-not-object-throw-undefined.js fails
+built-ins/Proxy/defineProperty/call-parameters.js fails
+built-ins/Proxy/defineProperty/desc-realm.js fails
+built-ins/Proxy/defineProperty/null-handler-realm.js fails
+built-ins/Proxy/defineProperty/null-handler.js fails
+built-ins/Proxy/defineProperty/return-boolean-and-define-target.js fails
+built-ins/Proxy/defineProperty/return-is-abrupt.js fails
+built-ins/Proxy/defineProperty/targetdesc-configurable-desc-not-configurable-realm.js fails
+built-ins/Proxy/defineProperty/targetdesc-configurable-desc-not-configurable.js fails
+built-ins/Proxy/defineProperty/targetdesc-not-compatible-descriptor-not-configurable-target-realm.js fails
+built-ins/Proxy/defineProperty/targetdesc-not-compatible-descriptor-not-configurable-target.js fails
+built-ins/Proxy/defineProperty/targetdesc-not-compatible-descriptor-realm.js fails
+built-ins/Proxy/defineProperty/targetdesc-not-compatible-descriptor.js fails
+built-ins/Proxy/defineProperty/targetdesc-undefined-not-configurable-descriptor-realm.js fails
+built-ins/Proxy/defineProperty/targetdesc-undefined-not-configurable-descriptor.js fails
+built-ins/Proxy/defineProperty/targetdesc-undefined-target-is-not-extensible-realm.js fails
+built-ins/Proxy/defineProperty/targetdesc-undefined-target-is-not-extensible.js fails
+built-ins/Proxy/defineProperty/trap-is-not-callable-realm.js fails
+built-ins/Proxy/defineProperty/trap-is-not-callable.js fails
+built-ins/Proxy/defineProperty/trap-is-undefined.js fails
+built-ins/Proxy/defineProperty/trap-return-is-false.js fails
+built-ins/Proxy/deleteProperty/boolean-trap-result-boolean-false.js fails
+built-ins/Proxy/deleteProperty/boolean-trap-result-boolean-true.js fails
+built-ins/Proxy/deleteProperty/call-parameters.js fails
+built-ins/Proxy/deleteProperty/null-handler.js fails
+built-ins/Proxy/deleteProperty/return-false-not-strict.js sloppyFails
+built-ins/Proxy/deleteProperty/return-false-strict.js strictFails
+built-ins/Proxy/deleteProperty/return-is-abrupt.js fails
+built-ins/Proxy/deleteProperty/targetdesc-is-not-configurable.js fails
+built-ins/Proxy/deleteProperty/targetdesc-is-undefined-return-true.js fails
+built-ins/Proxy/deleteProperty/trap-is-not-callable-realm.js fails
+built-ins/Proxy/deleteProperty/trap-is-not-callable.js fails
+built-ins/Proxy/deleteProperty/trap-is-undefined-not-strict.js sloppyFails
+built-ins/Proxy/deleteProperty/trap-is-undefined-strict.js strictFails
+built-ins/Proxy/enumerate/removed-does-not-trigger.js fails
+built-ins/Proxy/function-prototype.js fails
+built-ins/Proxy/get-fn-realm.js fails
+built-ins/Proxy/get/accessor-get-is-undefined-throws.js fails
+built-ins/Proxy/get/call-parameters.js fails
+built-ins/Proxy/get/not-same-value-configurable-false-writable-false-throws.js fails
+built-ins/Proxy/get/null-handler.js fails
+built-ins/Proxy/get/return-is-abrupt.js fails
+built-ins/Proxy/get/return-trap-result-accessor-property.js fails
+built-ins/Proxy/get/return-trap-result-configurable-false-writable-true.js fails
+built-ins/Proxy/get/return-trap-result-configurable-true-assessor-get-undefined.js fails
+built-ins/Proxy/get/return-trap-result-configurable-true-writable-false.js fails
+built-ins/Proxy/get/return-trap-result-same-value-configurable-false-writable-false.js fails
+built-ins/Proxy/get/return-trap-result.js fails
+built-ins/Proxy/get/trap-is-not-callable-realm.js fails
+built-ins/Proxy/get/trap-is-not-callable.js fails
+built-ins/Proxy/get/trap-is-undefined-no-property.js fails
+built-ins/Proxy/get/trap-is-undefined-receiver.js fails
+built-ins/Proxy/get/trap-is-undefined.js fails
+built-ins/Proxy/getOwnPropertyDescriptor/call-parameters.js fails
+built-ins/Proxy/getOwnPropertyDescriptor/null-handler.js fails
+built-ins/Proxy/getOwnPropertyDescriptor/result-is-undefined-target-is-not-extensible.js fails
+built-ins/Proxy/getOwnPropertyDescriptor/result-is-undefined-targetdesc-is-not-configurable.js fails
+built-ins/Proxy/getOwnPropertyDescriptor/result-is-undefined-targetdesc-is-undefined.js fails
+built-ins/Proxy/getOwnPropertyDescriptor/result-is-undefined.js fails
+built-ins/Proxy/getOwnPropertyDescriptor/result-type-is-not-object-nor-undefined-realm.js fails
+built-ins/Proxy/getOwnPropertyDescriptor/result-type-is-not-object-nor-undefined.js fails
+built-ins/Proxy/getOwnPropertyDescriptor/resultdesc-is-invalid-descriptor.js fails
+built-ins/Proxy/getOwnPropertyDescriptor/resultdesc-is-not-configurable-targetdesc-is-configurable.js fails
+built-ins/Proxy/getOwnPropertyDescriptor/resultdesc-is-not-configurable-targetdesc-is-undefined.js fails
+built-ins/Proxy/getOwnPropertyDescriptor/resultdesc-return-configurable.js fails
+built-ins/Proxy/getOwnPropertyDescriptor/resultdesc-return-not-configurable.js fails
+built-ins/Proxy/getOwnPropertyDescriptor/return-is-abrupt.js fails
+built-ins/Proxy/getOwnPropertyDescriptor/trap-is-not-callable-realm.js fails
+built-ins/Proxy/getOwnPropertyDescriptor/trap-is-not-callable.js fails
+built-ins/Proxy/getOwnPropertyDescriptor/trap-is-undefined.js fails
+built-ins/Proxy/getPrototypeOf/call-parameters.js fails
+built-ins/Proxy/getPrototypeOf/extensible-target-return-handlerproto.js fails
+built-ins/Proxy/getPrototypeOf/not-extensible-not-same-proto-throws.js fails
+built-ins/Proxy/getPrototypeOf/not-extensible-same-proto.js fails
+built-ins/Proxy/getPrototypeOf/null-handler.js fails
+built-ins/Proxy/getPrototypeOf/return-is-abrupt.js fails
+built-ins/Proxy/getPrototypeOf/trap-is-not-callable-realm.js fails
+built-ins/Proxy/getPrototypeOf/trap-is-not-callable.js fails
+built-ins/Proxy/getPrototypeOf/trap-is-undefined.js fails
+built-ins/Proxy/getPrototypeOf/trap-result-neither-object-nor-null-throws-boolean.js fails
+built-ins/Proxy/getPrototypeOf/trap-result-neither-object-nor-null-throws-number.js fails
+built-ins/Proxy/getPrototypeOf/trap-result-neither-object-nor-null-throws-string.js fails
+built-ins/Proxy/getPrototypeOf/trap-result-neither-object-nor-null-throws-symbol.js fails
+built-ins/Proxy/getPrototypeOf/trap-result-neither-object-nor-null-throws-undefined.js fails
+built-ins/Proxy/has/call-in.js fails
+built-ins/Proxy/has/call-object-create.js fails
+built-ins/Proxy/has/call-with.js sloppyFails
+built-ins/Proxy/has/null-handler-using-with.js sloppyFails
+built-ins/Proxy/has/null-handler.js fails
+built-ins/Proxy/has/return-false-target-not-extensible-using-with.js sloppyFails
+built-ins/Proxy/has/return-false-target-not-extensible.js fails
+built-ins/Proxy/has/return-false-target-prop-exists-using-with.js sloppyFails
+built-ins/Proxy/has/return-false-target-prop-exists.js fails
+built-ins/Proxy/has/return-false-targetdesc-not-configurable-using-with.js sloppyFails
+built-ins/Proxy/has/return-false-targetdesc-not-configurable.js fails
+built-ins/Proxy/has/return-is-abrupt-in.js fails
+built-ins/Proxy/has/return-is-abrupt-with.js sloppyFails
+built-ins/Proxy/has/return-true-target-prop-exists-using-with.js sloppyFails
+built-ins/Proxy/has/return-true-target-prop-exists.js fails
+built-ins/Proxy/has/return-true-without-same-target-prop.js fails
+built-ins/Proxy/has/trap-is-not-callable-realm.js fails
+built-ins/Proxy/has/trap-is-not-callable-using-with.js sloppyFails
+built-ins/Proxy/has/trap-is-not-callable.js fails
+built-ins/Proxy/has/trap-is-undefined-using-with.js sloppyFails
+built-ins/Proxy/has/trap-is-undefined.js fails
+built-ins/Proxy/isExtensible/call-parameters.js fails
+built-ins/Proxy/isExtensible/null-handler.js fails
+built-ins/Proxy/isExtensible/return-is-abrupt.js fails
+built-ins/Proxy/isExtensible/return-is-boolean.js fails
+built-ins/Proxy/isExtensible/return-is-different-from-target.js fails
+built-ins/Proxy/isExtensible/return-same-result-from-target.js fails
+built-ins/Proxy/isExtensible/trap-is-not-callable-realm.js fails
+built-ins/Proxy/isExtensible/trap-is-not-callable.js fails
+built-ins/Proxy/isExtensible/trap-is-undefined.js fails
+built-ins/Proxy/length.js fails
+built-ins/Proxy/name.js fails
+built-ins/Proxy/ownKeys/call-parameters-object-getownpropertynames.js fails
+built-ins/Proxy/ownKeys/call-parameters-object-getownpropertysymbols.js fails
+built-ins/Proxy/ownKeys/call-parameters-object-keys.js fails
+built-ins/Proxy/ownKeys/extensible-return-trap-result-absent-not-configurable-keys.js fails
+built-ins/Proxy/ownKeys/extensible-return-trap-result.js fails
+built-ins/Proxy/ownKeys/not-extensible-missing-keys-throws.js fails
+built-ins/Proxy/ownKeys/not-extensible-new-keys-throws.js fails
+built-ins/Proxy/ownKeys/not-extensible-return-keys.js fails
+built-ins/Proxy/ownKeys/null-handler.js fails
+built-ins/Proxy/ownKeys/return-all-non-configurable-keys.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/Proxy/ownKeys/return-is-abrupt.js fails
+built-ins/Proxy/ownKeys/return-not-list-object-throws-realm.js fails
+built-ins/Proxy/ownKeys/return-not-list-object-throws.js fails
+built-ins/Proxy/ownKeys/return-type-throws-array.js fails
+built-ins/Proxy/ownKeys/return-type-throws-boolean.js fails
+built-ins/Proxy/ownKeys/return-type-throws-null.js fails
+built-ins/Proxy/ownKeys/return-type-throws-number.js fails
+built-ins/Proxy/ownKeys/return-type-throws-object.js fails
+built-ins/Proxy/ownKeys/return-type-throws-undefined.js fails
+built-ins/Proxy/ownKeys/trap-is-not-callable-realm.js fails
+built-ins/Proxy/ownKeys/trap-is-not-callable.js fails
+built-ins/Proxy/ownKeys/trap-is-undefined.js fails
+built-ins/Proxy/preventExtensions/call-parameters.js fails
+built-ins/Proxy/preventExtensions/null-handler.js fails
+built-ins/Proxy/preventExtensions/return-false.js fails
+built-ins/Proxy/preventExtensions/return-is-abrupt.js fails
+built-ins/Proxy/preventExtensions/return-true-target-is-extensible.js fails
+built-ins/Proxy/preventExtensions/return-true-target-is-not-extensible.js fails
+built-ins/Proxy/preventExtensions/trap-is-not-callable-realm.js fails
+built-ins/Proxy/preventExtensions/trap-is-not-callable.js fails
+built-ins/Proxy/preventExtensions/trap-is-undefined.js fails
+built-ins/Proxy/proxy-newtarget.js fails
+built-ins/Proxy/proxy-no-prototype.js fails
+built-ins/Proxy/proxy-undefined-newtarget.js fails
+built-ins/Proxy/proxy.js fails
+built-ins/Proxy/revocable/length.js fails
+built-ins/Proxy/revocable/name.js fails
+built-ins/Proxy/revocable/proxy.js fails
+built-ins/Proxy/revocable/revocation-function-extensible.js fails
+built-ins/Proxy/revocable/revocation-function-length.js fails
+built-ins/Proxy/revocable/revocation-function-name.js fails
+built-ins/Proxy/revocable/revocation-function-nonconstructor.js fails
+built-ins/Proxy/revocable/revocation-function-prototype.js fails
+built-ins/Proxy/revocable/revoke-consecutive-call-returns-undefined.js fails
+built-ins/Proxy/revocable/revoke-returns-undefined.js fails
+built-ins/Proxy/revocable/revoke.js fails
+built-ins/Proxy/set/boolean-trap-result-is-false-boolean-return-false.js fails
+built-ins/Proxy/set/boolean-trap-result-is-false-null-return-false.js fails
+built-ins/Proxy/set/boolean-trap-result-is-false-number-return-false.js fails
+built-ins/Proxy/set/boolean-trap-result-is-false-string-return-false.js fails
+built-ins/Proxy/set/boolean-trap-result-is-false-undefined-return-false.js fails
+built-ins/Proxy/set/call-parameters.js fails
+built-ins/Proxy/set/null-handler.js fails
+built-ins/Proxy/set/return-is-abrupt.js fails
+built-ins/Proxy/set/return-true-target-property-accessor-is-configurable-set-is-undefined.js fails
+built-ins/Proxy/set/return-true-target-property-accessor-is-not-configurable.js fails
+built-ins/Proxy/set/return-true-target-property-is-not-configurable.js fails
+built-ins/Proxy/set/return-true-target-property-is-not-writable.js fails
+built-ins/Proxy/set/target-property-is-accessor-not-configurable-set-is-undefined.js fails
+built-ins/Proxy/set/target-property-is-not-configurable-not-writable-not-equal-to-v.js fails
+built-ins/Proxy/set/trap-is-not-callable-realm.js fails
+built-ins/Proxy/set/trap-is-not-callable.js fails
+built-ins/Proxy/set/trap-is-undefined-no-property.js fails
+built-ins/Proxy/set/trap-is-undefined-receiver.js fails
+built-ins/Proxy/set/trap-is-undefined.js fails
+built-ins/Proxy/setPrototypeOf/call-parameters.js fails
+built-ins/Proxy/setPrototypeOf/internals-call-order.js fails
+built-ins/Proxy/setPrototypeOf/not-extensible-target-not-same-target-prototype.js fails
+built-ins/Proxy/setPrototypeOf/not-extensible-target-same-target-prototype.js fails
+built-ins/Proxy/setPrototypeOf/null-handler.js fails
+built-ins/Proxy/setPrototypeOf/return-abrupt-from-get-trap.js fails
+built-ins/Proxy/setPrototypeOf/return-abrupt-from-isextensible-target.js fails
+built-ins/Proxy/setPrototypeOf/return-abrupt-from-target-getprototypeof.js fails
+built-ins/Proxy/setPrototypeOf/return-abrupt-from-trap.js fails
+built-ins/Proxy/setPrototypeOf/toboolean-trap-result-false.js fails
+built-ins/Proxy/setPrototypeOf/toboolean-trap-result-true-target-is-extensible.js fails
+built-ins/Proxy/setPrototypeOf/trap-is-not-callable-realm.js fails
+built-ins/Proxy/setPrototypeOf/trap-is-not-callable.js fails
+built-ins/Proxy/setPrototypeOf/trap-is-undefined-or-null.js fails
+built-ins/Reflect/construct/newtarget-is-not-constructor-throws.js fails
+built-ins/Reflect/construct/return-with-newtarget-argument.js fails
+built-ins/Reflect/defineProperty/return-abrupt-from-result.js fails
+built-ins/Reflect/deleteProperty/return-abrupt-from-result.js fails
+built-ins/Reflect/get/return-value-from-receiver.js fails
+built-ins/Reflect/getOwnPropertyDescriptor/return-abrupt-from-result.js fails
+built-ins/Reflect/getPrototypeOf/return-abrupt-from-result.js fails
+built-ins/Reflect/has/return-abrupt-from-result.js fails
+built-ins/Reflect/isExtensible/return-abrupt-from-result.js fails
+built-ins/Reflect/ownKeys/return-abrupt-from-result.js fails
+built-ins/Reflect/ownKeys/return-on-corresponding-order.js fails
+built-ins/Reflect/preventExtensions/return-abrupt-from-result.js fails
+built-ins/Reflect/preventExtensions/return-boolean-from-proxy-object.js fails
+built-ins/Reflect/set/creates-a-data-descriptor.js fails
+built-ins/Reflect/set/different-property-descriptors.js fails
+built-ins/Reflect/set/receiver-is-not-object.js fails
+built-ins/Reflect/set/return-false-if-target-is-not-writable.js fails
+built-ins/Reflect/set/set-value-on-accessor-descriptor-with-receiver.js fails
+built-ins/Reflect/set/set-value-on-data-descriptor.js fails
+built-ins/Reflect/set/symbol-property.js fails
+built-ins/Reflect/setPrototypeOf/return-abrupt-from-result.js fails
+built-ins/Reflect/setPrototypeOf/return-false-if-target-and-proto-are-the-same.js fails
+built-ins/Reflect/setPrototypeOf/return-false-if-target-is-not-extensible.js fails
+built-ins/Reflect/setPrototypeOf/return-false-if-target-is-prototype-of-proto.js fails
+built-ins/Reflect/setPrototypeOf/return-true-if-new-prototype-is-set.js fails
+built-ins/Reflect/setPrototypeOf/return-true-if-proto-is-current.js fails
+built-ins/RegExp/15.10.4.1-1.js fails
+built-ins/RegExp/S15.10.2.12_A2_T1.js fails
+built-ins/RegExp/S15.10.3.1_A2_T1.js fails
+built-ins/RegExp/S15.10.3.1_A2_T2.js fails
+built-ins/RegExp/S15.10.4.1_A2_T1.js fails
+built-ins/RegExp/S15.10.4.1_A2_T2.js fails
+built-ins/RegExp/call_with_non_regexp_same_constructor.js fails
+built-ins/RegExp/call_with_regexp_match_falsy.js fails
+built-ins/RegExp/call_with_regexp_not_same_constructor.js fails
+built-ins/RegExp/dotall/without-dotall-unicode.js fails
+built-ins/RegExp/from-regexp-like-flag-override.js fails
+built-ins/RegExp/from-regexp-like-get-source-err.js fails
+built-ins/RegExp/from-regexp-like-short-circuit.js fails
+built-ins/RegExp/from-regexp-like.js fails
+built-ins/RegExp/proto-from-ctor-realm.js fails
+built-ins/RegExp/prototype/15.10.6.js fails
+built-ins/RegExp/prototype/Symbol.match/builtin-coerce-lastindex.js fails
+built-ins/RegExp/prototype/Symbol.match/builtin-failure-g-set-lastindex.js fails
+built-ins/RegExp/prototype/Symbol.match/builtin-failure-return-val.js fails
+built-ins/RegExp/prototype/Symbol.match/builtin-failure-y-return-val.js fails
+built-ins/RegExp/prototype/Symbol.match/builtin-failure-y-set-lastindex-err.js fails
+built-ins/RegExp/prototype/Symbol.match/builtin-failure-y-set-lastindex.js fails
+built-ins/RegExp/prototype/Symbol.match/builtin-infer-unicode.js fails
+built-ins/RegExp/prototype/Symbol.match/builtin-success-g-set-lastindex.js fails
+built-ins/RegExp/prototype/Symbol.match/builtin-success-return-val-groups.js fails
+built-ins/RegExp/prototype/Symbol.match/builtin-success-return-val.js fails
+built-ins/RegExp/prototype/Symbol.match/builtin-success-u-return-val-groups.js fails
+built-ins/RegExp/prototype/Symbol.match/builtin-success-y-set-lastindex-err.js fails
+built-ins/RegExp/prototype/Symbol.match/builtin-success-y-set-lastindex.js fails
+built-ins/RegExp/prototype/Symbol.match/builtin-y-coerce-lastindex-err.js fails
+built-ins/RegExp/prototype/Symbol.match/coerce-arg-err.js fails
+built-ins/RegExp/prototype/Symbol.match/coerce-arg.js fails
+built-ins/RegExp/prototype/Symbol.match/coerce-global.js fails
+built-ins/RegExp/prototype/Symbol.match/exec-err.js fails
+built-ins/RegExp/prototype/Symbol.match/exec-invocation.js fails
+built-ins/RegExp/prototype/Symbol.match/exec-return-type-invalid.js fails
+built-ins/RegExp/prototype/Symbol.match/exec-return-type-valid.js fails
+built-ins/RegExp/prototype/Symbol.match/g-coerce-result-err.js fails
+built-ins/RegExp/prototype/Symbol.match/g-get-exec-err.js fails
+built-ins/RegExp/prototype/Symbol.match/g-get-result-err.js fails
+built-ins/RegExp/prototype/Symbol.match/g-init-lastindex.js fails
+built-ins/RegExp/prototype/Symbol.match/g-match-empty-advance-lastindex.js fails
+built-ins/RegExp/prototype/Symbol.match/g-match-empty-coerce-lastindex-err.js fails
+built-ins/RegExp/prototype/Symbol.match/g-match-no-coerce-lastindex.js fails
+built-ins/RegExp/prototype/Symbol.match/g-match-no-set-lastindex.js fails
+built-ins/RegExp/prototype/Symbol.match/g-success-return-val.js fails
+built-ins/RegExp/prototype/Symbol.match/g-zero-matches.js fails
+built-ins/RegExp/prototype/Symbol.match/get-exec-err.js fails
+built-ins/RegExp/prototype/Symbol.match/get-global-err.js fails
+built-ins/RegExp/prototype/Symbol.match/get-unicode-error.js fails
+built-ins/RegExp/prototype/Symbol.match/length.js fails
+built-ins/RegExp/prototype/Symbol.match/name.js fails
+built-ins/RegExp/prototype/Symbol.match/prop-desc.js fails
+built-ins/RegExp/prototype/Symbol.match/this-val-non-regexp.js fails
+built-ins/RegExp/prototype/Symbol.match/u-advance-after-empty.js fails
+built-ins/RegExp/prototype/Symbol.match/y-fail-global-return.js fails
+built-ins/RegExp/prototype/Symbol.match/y-fail-lastindex-no-write.js fails
+built-ins/RegExp/prototype/Symbol.match/y-fail-lastindex.js fails
+built-ins/RegExp/prototype/Symbol.match/y-fail-return.js fails
+built-ins/RegExp/prototype/Symbol.match/y-init-lastindex.js fails
+built-ins/RegExp/prototype/Symbol.match/y-set-lastindex.js fails
+built-ins/RegExp/prototype/Symbol.replace/arg-1-coerce-err.js fails
+built-ins/RegExp/prototype/Symbol.replace/arg-1-coerce.js fails
+built-ins/RegExp/prototype/Symbol.replace/arg-2-coerce-err.js fails
+built-ins/RegExp/prototype/Symbol.replace/arg-2-coerce.js fails
+built-ins/RegExp/prototype/Symbol.replace/coerce-global.js fails
+built-ins/RegExp/prototype/Symbol.replace/coerce-unicode.js fails
+built-ins/RegExp/prototype/Symbol.replace/exec-err.js fails
+built-ins/RegExp/prototype/Symbol.replace/exec-invocation.js fails
+built-ins/RegExp/prototype/Symbol.replace/fn-coerce-replacement-err.js fails
+built-ins/RegExp/prototype/Symbol.replace/fn-coerce-replacement.js fails
+built-ins/RegExp/prototype/Symbol.replace/fn-err.js fails
+built-ins/RegExp/prototype/Symbol.replace/fn-invoke-args.js fails
+built-ins/RegExp/prototype/Symbol.replace/fn-invoke-this-no-strict.js sloppyFails
+built-ins/RegExp/prototype/Symbol.replace/fn-invoke-this-strict.js strictFails
+built-ins/RegExp/prototype/Symbol.replace/g-init-lastindex-err.js fails
+built-ins/RegExp/prototype/Symbol.replace/g-init-lastindex.js fails
+built-ins/RegExp/prototype/Symbol.replace/g-pos-decrement.js fails
+built-ins/RegExp/prototype/Symbol.replace/g-pos-increment.js fails
+built-ins/RegExp/prototype/Symbol.replace/get-exec-err.js fails
+built-ins/RegExp/prototype/Symbol.replace/get-global-err.js fails
+built-ins/RegExp/prototype/Symbol.replace/get-unicode-error.js fails
+built-ins/RegExp/prototype/Symbol.replace/length.js fails
+built-ins/RegExp/prototype/Symbol.replace/match-failure.js fails
+built-ins/RegExp/prototype/Symbol.replace/name.js fails
+built-ins/RegExp/prototype/Symbol.replace/prop-desc.js fails
+built-ins/RegExp/prototype/Symbol.replace/replace-with-trailing.js fails
+built-ins/RegExp/prototype/Symbol.replace/replace-without-trailing.js fails
+built-ins/RegExp/prototype/Symbol.replace/result-coerce-capture-err.js fails
+built-ins/RegExp/prototype/Symbol.replace/result-coerce-capture.js fails
+built-ins/RegExp/prototype/Symbol.replace/result-coerce-index-err.js fails
+built-ins/RegExp/prototype/Symbol.replace/result-coerce-index.js fails
+built-ins/RegExp/prototype/Symbol.replace/result-coerce-length-err.js fails
+built-ins/RegExp/prototype/Symbol.replace/result-coerce-length.js fails
+built-ins/RegExp/prototype/Symbol.replace/result-coerce-matched-err.js fails
+built-ins/RegExp/prototype/Symbol.replace/result-coerce-matched.js fails
+built-ins/RegExp/prototype/Symbol.replace/result-get-capture-err.js fails
+built-ins/RegExp/prototype/Symbol.replace/result-get-index-err.js fails
+built-ins/RegExp/prototype/Symbol.replace/result-get-length-err.js fails
+built-ins/RegExp/prototype/Symbol.replace/result-get-matched-err.js fails
+built-ins/RegExp/prototype/Symbol.replace/subst-after.js fails
+built-ins/RegExp/prototype/Symbol.replace/subst-before.js fails
+built-ins/RegExp/prototype/Symbol.replace/subst-capture-idx-1.js fails
+built-ins/RegExp/prototype/Symbol.replace/subst-capture-idx-2.js fails
+built-ins/RegExp/prototype/Symbol.replace/subst-dollar.js fails
+built-ins/RegExp/prototype/Symbol.replace/subst-matched.js fails
+built-ins/RegExp/prototype/Symbol.replace/u-advance-after-empty.js fails
+built-ins/RegExp/prototype/Symbol.replace/y-fail-global-return.js fails
+built-ins/RegExp/prototype/Symbol.replace/y-fail-lastindex-no-write.js fails
+built-ins/RegExp/prototype/Symbol.replace/y-fail-lastindex.js fails
+built-ins/RegExp/prototype/Symbol.replace/y-fail-return.js fails
+built-ins/RegExp/prototype/Symbol.replace/y-init-lastindex.js fails
+built-ins/RegExp/prototype/Symbol.replace/y-set-lastindex.js fails
+built-ins/RegExp/prototype/Symbol.search/coerce-string-err.js fails
+built-ins/RegExp/prototype/Symbol.search/coerce-string.js fails
+built-ins/RegExp/prototype/Symbol.search/cstm-exec-return-index.js fails
+built-ins/RegExp/prototype/Symbol.search/failure-return-val.js fails
+built-ins/RegExp/prototype/Symbol.search/get-lastindex-err.js fails
+built-ins/RegExp/prototype/Symbol.search/lastindex-no-restore.js fails
+built-ins/RegExp/prototype/Symbol.search/length.js fails
+built-ins/RegExp/prototype/Symbol.search/match-err.js fails
+built-ins/RegExp/prototype/Symbol.search/name.js fails
+built-ins/RegExp/prototype/Symbol.search/prop-desc.js fails
+built-ins/RegExp/prototype/Symbol.search/set-lastindex-init-err.js fails
+built-ins/RegExp/prototype/Symbol.search/set-lastindex-init.js fails
+built-ins/RegExp/prototype/Symbol.search/set-lastindex-restore-err.js fails
+built-ins/RegExp/prototype/Symbol.search/set-lastindex-restore.js fails
+built-ins/RegExp/prototype/Symbol.search/success-get-index-err.js fails
+built-ins/RegExp/prototype/Symbol.search/success-return-val.js fails
+built-ins/RegExp/prototype/Symbol.search/u-lastindex-advance.js fails
+built-ins/RegExp/prototype/Symbol.search/y-fail-return.js fails
+built-ins/RegExp/prototype/Symbol.split/coerce-flags-err.js fails
+built-ins/RegExp/prototype/Symbol.split/coerce-flags.js fails
+built-ins/RegExp/prototype/Symbol.split/coerce-limit-err.js fails
+built-ins/RegExp/prototype/Symbol.split/coerce-limit.js fails
+built-ins/RegExp/prototype/Symbol.split/coerce-string-err.js fails
+built-ins/RegExp/prototype/Symbol.split/coerce-string.js fails
+built-ins/RegExp/prototype/Symbol.split/get-flags-err.js fails
+built-ins/RegExp/prototype/Symbol.split/last-index-exceeds-str-size.js fails
+built-ins/RegExp/prototype/Symbol.split/length.js fails
+built-ins/RegExp/prototype/Symbol.split/limit-0-bail.js fails
+built-ins/RegExp/prototype/Symbol.split/name.js fails
+built-ins/RegExp/prototype/Symbol.split/prop-desc.js fails
+built-ins/RegExp/prototype/Symbol.split/species-ctor-ctor-get-err.js fails
+built-ins/RegExp/prototype/Symbol.split/species-ctor-ctor-non-obj.js fails
+built-ins/RegExp/prototype/Symbol.split/species-ctor-ctor-undef.js fails
+built-ins/RegExp/prototype/Symbol.split/species-ctor-err.js fails
+built-ins/RegExp/prototype/Symbol.split/species-ctor-species-get-err.js fails
+built-ins/RegExp/prototype/Symbol.split/species-ctor-species-non-ctor.js fails
+built-ins/RegExp/prototype/Symbol.split/species-ctor-species-undef.js fails
+built-ins/RegExp/prototype/Symbol.split/species-ctor-y.js fails
+built-ins/RegExp/prototype/Symbol.split/species-ctor.js fails
+built-ins/RegExp/prototype/Symbol.split/splitter-proto-from-ctor-realm.js fails
+built-ins/RegExp/prototype/Symbol.split/str-adv-thru-empty-match.js fails
+built-ins/RegExp/prototype/Symbol.split/str-coerce-lastindex-err.js fails
+built-ins/RegExp/prototype/Symbol.split/str-coerce-lastindex.js fails
+built-ins/RegExp/prototype/Symbol.split/str-empty-match-err.js fails
+built-ins/RegExp/prototype/Symbol.split/str-empty-match.js fails
+built-ins/RegExp/prototype/Symbol.split/str-empty-no-match.js fails
+built-ins/RegExp/prototype/Symbol.split/str-get-lastindex-err.js fails
+built-ins/RegExp/prototype/Symbol.split/str-limit-capturing.js fails
+built-ins/RegExp/prototype/Symbol.split/str-limit.js fails
+built-ins/RegExp/prototype/Symbol.split/str-match-err.js fails
+built-ins/RegExp/prototype/Symbol.split/str-result-coerce-length-err.js fails
+built-ins/RegExp/prototype/Symbol.split/str-result-coerce-length.js fails
+built-ins/RegExp/prototype/Symbol.split/str-result-get-capture-err.js fails
+built-ins/RegExp/prototype/Symbol.split/str-result-get-length-err.js fails
+built-ins/RegExp/prototype/Symbol.split/str-set-lastindex-err.js fails
+built-ins/RegExp/prototype/Symbol.split/str-set-lastindex-match.js fails
+built-ins/RegExp/prototype/Symbol.split/str-set-lastindex-no-match.js fails
+built-ins/RegExp/prototype/Symbol.split/str-trailing-chars.js fails
+built-ins/RegExp/prototype/Symbol.split/u-lastindex-adv-thru-failure.js fails
+built-ins/RegExp/prototype/Symbol.split/u-lastindex-adv-thru-match.js fails
+built-ins/RegExp/prototype/exec/S15.10.6.2_A5_T3.js fails
+built-ins/RegExp/prototype/exec/failure-lastindex-access.js fails
+built-ins/RegExp/prototype/exec/success-lastindex-access.js fails
+built-ins/RegExp/prototype/exec/u-captured-value.js fails
+built-ins/RegExp/prototype/exec/u-lastindex-adv.js fails
+built-ins/RegExp/prototype/exec/u-lastindex-value.js fails
+built-ins/RegExp/prototype/exec/y-fail-lastindex-no-write.js fails
+built-ins/RegExp/prototype/exec/y-fail-lastindex.js fails
+built-ins/RegExp/prototype/exec/y-fail-return.js fails
+built-ins/RegExp/prototype/exec/y-init-lastindex.js fails
+built-ins/RegExp/prototype/exec/y-set-lastindex.js fails
+built-ins/RegExp/prototype/flags/coercion-global.js fails
+built-ins/RegExp/prototype/flags/coercion-ignoreCase.js fails
+built-ins/RegExp/prototype/flags/coercion-multiline.js fails
+built-ins/RegExp/prototype/flags/coercion-sticky.js fails
+built-ins/RegExp/prototype/flags/coercion-unicode.js fails
+built-ins/RegExp/prototype/flags/length.js fails
+built-ins/RegExp/prototype/flags/name.js fails
+built-ins/RegExp/prototype/flags/prop-desc.js fails
+built-ins/RegExp/prototype/flags/this-val-non-obj.js fails
+built-ins/RegExp/prototype/flags/this-val-regexp-prototype.js fails
+built-ins/RegExp/prototype/global/15.10.7.2-2.js fails
+built-ins/RegExp/prototype/global/S15.10.7.2_A9.js fails
+built-ins/RegExp/prototype/global/length.js fails
+built-ins/RegExp/prototype/global/name.js fails
+built-ins/RegExp/prototype/global/this-val-regexp-prototype.js fails
+built-ins/RegExp/prototype/ignoreCase/15.10.7.3-2.js fails
+built-ins/RegExp/prototype/ignoreCase/S15.10.7.3_A9.js fails
+built-ins/RegExp/prototype/ignoreCase/length.js fails
+built-ins/RegExp/prototype/ignoreCase/name.js fails
+built-ins/RegExp/prototype/ignoreCase/this-val-regexp-prototype.js fails
+built-ins/RegExp/prototype/multiline/15.10.7.4-2.js fails
+built-ins/RegExp/prototype/multiline/S15.10.7.4_A9.js fails
+built-ins/RegExp/prototype/multiline/length.js fails
+built-ins/RegExp/prototype/multiline/name.js fails
+built-ins/RegExp/prototype/multiline/this-val-regexp-prototype.js fails
+built-ins/RegExp/prototype/no-regexp-matcher.js fails
+built-ins/RegExp/prototype/source/length.js fails
+built-ins/RegExp/prototype/source/name.js fails
+built-ins/RegExp/prototype/source/prop-desc.js fails
+built-ins/RegExp/prototype/source/this-val-regexp-prototype.js fails
+built-ins/RegExp/prototype/source/value-line-terminator.js fails
+built-ins/RegExp/prototype/source/value-u.js fails
+built-ins/RegExp/prototype/sticky/length.js fails
+built-ins/RegExp/prototype/sticky/name.js fails
+built-ins/RegExp/prototype/sticky/prop-desc.js fails
+built-ins/RegExp/prototype/sticky/this-val-invalid-obj.js fails
+built-ins/RegExp/prototype/sticky/this-val-non-obj.js fails
+built-ins/RegExp/prototype/sticky/this-val-regexp-prototype.js fails
+built-ins/RegExp/prototype/sticky/this-val-regexp.js fails
+built-ins/RegExp/prototype/test/S15.10.6.3_A1_T22.js fails
+built-ins/RegExp/prototype/test/y-fail-lastindex-no-write.js fails
+built-ins/RegExp/prototype/test/y-fail-lastindex.js fails
+built-ins/RegExp/prototype/test/y-fail-return.js fails
+built-ins/RegExp/prototype/test/y-init-lastindex.js fails
+built-ins/RegExp/prototype/test/y-set-lastindex.js fails
+built-ins/RegExp/prototype/unicode/length.js fails
+built-ins/RegExp/prototype/unicode/name.js fails
+built-ins/RegExp/prototype/unicode/prop-desc.js fails
+built-ins/RegExp/prototype/unicode/this-val-invalid-obj.js fails
+built-ins/RegExp/prototype/unicode/this-val-non-obj.js fails
+built-ins/RegExp/prototype/unicode/this-val-regexp-prototype.js fails
+built-ins/RegExp/prototype/unicode/this-val-regexp.js fails
+built-ins/RegExp/u180e.js fails
+built-ins/RegExp/unicode_identity_escape.js fails
+built-ins/RegExp/valid-flags-y.js fails
+built-ins/Set/proto-from-ctor-realm.js fails
+built-ins/Set/prototype/add/does-not-have-setdata-internal-slot-weakset.js fails
+built-ins/Set/prototype/clear/does-not-have-setdata-internal-slot-weakset.js fails
+built-ins/Set/prototype/delete/does-not-have-setdata-internal-slot-weakset.js fails
+built-ins/Set/prototype/entries/does-not-have-setdata-internal-slot-weakset.js fails
+built-ins/Set/prototype/forEach/does-not-have-setdata-internal-slot-weakset.js fails
+built-ins/Set/prototype/forEach/iterates-values-added-after-foreach-begins.js fails
+built-ins/Set/prototype/forEach/iterates-values-deleted-then-readded.js fails
+built-ins/Set/prototype/forEach/iterates-values-revisits-after-delete-re-add.js fails
+built-ins/Set/prototype/forEach/this-arg-explicit-cannot-override-lexical-this-arrow.js fails
+built-ins/Set/prototype/has/does-not-have-setdata-internal-slot-weakset.js fails
+built-ins/Set/prototype/values/does-not-have-setdata-internal-slot-weakset.js fails
+built-ins/SharedArrayBuffer/allocation-limit.js fails
+built-ins/SharedArrayBuffer/data-allocation-after-object-creation.js fails
+built-ins/SharedArrayBuffer/init-zero.js fails
+built-ins/SharedArrayBuffer/length-is-absent.js fails
+built-ins/SharedArrayBuffer/length-is-too-large-throws.js fails
+built-ins/SharedArrayBuffer/negative-length-throws.js fails
+built-ins/SharedArrayBuffer/newtarget-prototype-is-not-object.js fails
+built-ins/SharedArrayBuffer/proto-from-ctor-realm.js fails
+built-ins/SharedArrayBuffer/prototype-from-newtarget.js fails
+built-ins/SharedArrayBuffer/prototype/Symbol.toStringTag.js fails
+built-ins/SharedArrayBuffer/prototype/byteLength/invoked-as-accessor.js fails
+built-ins/SharedArrayBuffer/prototype/byteLength/invoked-as-func.js fails
+built-ins/SharedArrayBuffer/prototype/byteLength/length.js fails
+built-ins/SharedArrayBuffer/prototype/byteLength/name.js fails
+built-ins/SharedArrayBuffer/prototype/byteLength/prop-desc.js fails
+built-ins/SharedArrayBuffer/prototype/byteLength/return-bytelength.js fails
+built-ins/SharedArrayBuffer/prototype/byteLength/this-has-no-typedarrayname-internal.js fails
+built-ins/SharedArrayBuffer/prototype/byteLength/this-is-arraybuffer.js fails
+built-ins/SharedArrayBuffer/prototype/byteLength/this-is-not-object.js fails
+built-ins/SharedArrayBuffer/prototype/constructor.js fails
+built-ins/SharedArrayBuffer/prototype/slice/context-is-not-arraybuffer-object.js fails
+built-ins/SharedArrayBuffer/prototype/slice/context-is-not-object.js fails
+built-ins/SharedArrayBuffer/prototype/slice/descriptor.js fails
+built-ins/SharedArrayBuffer/prototype/slice/end-default-if-absent.js fails
+built-ins/SharedArrayBuffer/prototype/slice/end-default-if-undefined.js fails
+built-ins/SharedArrayBuffer/prototype/slice/end-exceeds-length.js fails
+built-ins/SharedArrayBuffer/prototype/slice/extensible.js fails
+built-ins/SharedArrayBuffer/prototype/slice/length.js fails
+built-ins/SharedArrayBuffer/prototype/slice/name.js fails
+built-ins/SharedArrayBuffer/prototype/slice/negative-end.js fails
+built-ins/SharedArrayBuffer/prototype/slice/negative-start.js fails
+built-ins/SharedArrayBuffer/prototype/slice/nonconstructor.js fails
+built-ins/SharedArrayBuffer/prototype/slice/number-conversion.js fails
+built-ins/SharedArrayBuffer/prototype/slice/species-constructor-is-not-object.js fails
+built-ins/SharedArrayBuffer/prototype/slice/species-constructor-is-undefined.js fails
+built-ins/SharedArrayBuffer/prototype/slice/species-is-not-constructor.js fails
+built-ins/SharedArrayBuffer/prototype/slice/species-is-not-object.js fails
+built-ins/SharedArrayBuffer/prototype/slice/species-is-null.js fails
+built-ins/SharedArrayBuffer/prototype/slice/species-is-undefined.js fails
+built-ins/SharedArrayBuffer/prototype/slice/species-returns-larger-arraybuffer.js fails
+built-ins/SharedArrayBuffer/prototype/slice/species-returns-not-arraybuffer.js fails
+built-ins/SharedArrayBuffer/prototype/slice/species-returns-same-arraybuffer.js fails
+built-ins/SharedArrayBuffer/prototype/slice/species-returns-smaller-arraybuffer.js fails
+built-ins/SharedArrayBuffer/prototype/slice/species.js fails
+built-ins/SharedArrayBuffer/prototype/slice/start-default-if-absent.js fails
+built-ins/SharedArrayBuffer/prototype/slice/start-default-if-undefined.js fails
+built-ins/SharedArrayBuffer/prototype/slice/start-exceeds-end.js fails
+built-ins/SharedArrayBuffer/prototype/slice/start-exceeds-length.js fails
+built-ins/SharedArrayBuffer/prototype/slice/this-is-arraybuffer.js fails
+built-ins/SharedArrayBuffer/prototype/slice/tointeger-conversion-end.js fails
+built-ins/SharedArrayBuffer/prototype/slice/tointeger-conversion-start.js fails
+built-ins/SharedArrayBuffer/return-abrupt-from-length-symbol.js fails
+built-ins/SharedArrayBuffer/return-abrupt-from-length.js fails
+built-ins/SharedArrayBuffer/toindex-length.js fails
+built-ins/SharedArrayBuffer/undefined-newtarget-throws.js fails
+built-ins/SharedArrayBuffer/zero-length.js fails
+built-ins/String/proto-from-ctor-realm.js fails
+built-ins/String/prototype/endsWith/return-abrupt-from-searchstring-regexp-test.js fails
+built-ins/String/prototype/includes/return-abrupt-from-searchstring-regexp-test.js fails
+built-ins/String/prototype/indexOf/position-tointeger-toprimitive.js fails
+built-ins/String/prototype/indexOf/position-tointeger.js fails
+built-ins/String/prototype/indexOf/searchstring-tostring-toprimitive.js fails
+built-ins/String/prototype/match/invoke-builtin-match.js fails
+built-ins/String/prototype/match/cstm-matcher-invocation.js fails
+built-ins/String/prototype/replace/cstm-replace-invocation.js fails
+built-ins/String/prototype/replace/this-value-not-obj-coercible.js fails
+built-ins/String/prototype/search/cstm-search-invocation.js fails
+built-ins/String/prototype/search/invoke-builtin-search-searcher-undef.js fails
+built-ins/String/prototype/search/invoke-builtin-search.js fails
+built-ins/String/prototype/slice/this-value-not-obj-coercible.js fails
+built-ins/String/prototype/split/cstm-split-invocation.js fails
+built-ins/String/prototype/startsWith/return-abrupt-from-searchstring-regexp-test.js fails
+built-ins/String/prototype/toLocaleLowerCase/Final_Sigma_U180E.js fails
+built-ins/String/prototype/toLocaleLowerCase/special_casing_conditional.js fails
+built-ins/String/prototype/toLowerCase/Final_Sigma_U180E.js fails
+built-ins/String/prototype/toLowerCase/special_casing_conditional.js fails
+built-ins/String/raw/length.js fails
+built-ins/String/raw/name.js fails
+built-ins/String/raw/raw.js fails
+built-ins/String/raw/return-empty-string-from-empty-array-length.js fails
+built-ins/String/raw/return-empty-string-if-length-is-negative-infinity.js fails
+built-ins/String/raw/return-empty-string-if-length-is-not-defined.js fails
+built-ins/String/raw/return-empty-string-if-length-is-undefined.js fails
+built-ins/String/raw/return-empty-string-if-length-is-zero-NaN.js fails
+built-ins/String/raw/return-empty-string-if-length-is-zero-boolean.js fails
+built-ins/String/raw/return-empty-string-if-length-is-zero-null.js fails
+built-ins/String/raw/return-empty-string-if-length-is-zero-or-less-number.js fails
+built-ins/String/raw/return-empty-string-if-length-is-zero-or-less-string.js fails
+built-ins/String/raw/return-the-string-value-from-template.js fails
+built-ins/String/raw/return-the-string-value.js fails
+built-ins/String/raw/returns-abrupt-from-next-key-toString.js fails
+built-ins/String/raw/returns-abrupt-from-next-key.js fails
+built-ins/String/raw/returns-abrupt-from-substitution.js fails
+built-ins/String/raw/special-characters.js fails
+built-ins/String/raw/substitutions-are-appended-on-same-index.js fails
+built-ins/String/raw/substitutions-are-limited-to-template-raw-length.js fails
+built-ins/String/raw/template-length-throws.js fails
+built-ins/String/raw/template-raw-throws.js fails
+built-ins/String/raw/template-substitutions-are-appended-on-same-index.js fails
+built-ins/String/raw/zero-literal-segments.js fails
+built-ins/Symbol/for/cross-realm.js fails
+built-ins/Symbol/hasInstance/cross-realm.js fails
+built-ins/Symbol/isConcatSpreadable/cross-realm.js fails
+built-ins/Symbol/iterator/cross-realm.js fails
+built-ins/Symbol/keyFor/cross-realm.js fails
+built-ins/Symbol/match/cross-realm.js fails
+built-ins/Symbol/replace/cross-realm.js fails
+built-ins/Symbol/search/cross-realm.js fails
+built-ins/Symbol/species/builtin-getter-name.js fails
+built-ins/Symbol/species/cross-realm.js fails
+built-ins/Symbol/species/subclassing.js fails
+built-ins/Symbol/split/cross-realm.js fails
+built-ins/Symbol/toPrimitive/cross-realm.js fails
+built-ins/Symbol/toStringTag/cross-realm.js fails
+built-ins/Symbol/unscopables/cross-realm.js fails
+built-ins/ThrowTypeError/distinct-cross-realm.js fails
+built-ins/TypedArray/from/arylk-get-length-error.js fails
+built-ins/TypedArray/from/arylk-to-length-error.js fails
+built-ins/TypedArray/from/iter-access-error.js fails
+built-ins/TypedArray/from/iter-invoke-error.js fails
+built-ins/TypedArray/from/iter-next-error.js fails
+built-ins/TypedArray/from/iter-next-value-error.js fails
+built-ins/TypedArray/from/length.js fails
+built-ins/TypedArray/from/name.js fails
+built-ins/TypedArray/from/prop-desc.js fails
+built-ins/TypedArray/name.js fails
+built-ins/TypedArray/of/length.js fails
+built-ins/TypedArray/of/name.js fails
+built-ins/TypedArray/of/prop-desc.js fails
+built-ins/TypedArray/prototype/Symbol.toStringTag/detached-buffer.js fails
+built-ins/TypedArray/prototype/buffer/detached-buffer.js fails
+built-ins/TypedArray/prototype/byteLength/detached-buffer.js fails
+built-ins/TypedArray/prototype/byteOffset/detached-buffer.js fails
+built-ins/TypedArray/prototype/constructor.js fails
+built-ins/TypedArray/prototype/copyWithin/bit-precision.js fails
+built-ins/TypedArray/prototype/copyWithin/coerced-values-end.js fails
+built-ins/TypedArray/prototype/copyWithin/coerced-values-start.js fails
+built-ins/TypedArray/prototype/copyWithin/coerced-values-target.js fails
+built-ins/TypedArray/prototype/copyWithin/detached-buffer.js fails
+built-ins/TypedArray/prototype/copyWithin/get-length-ignores-length-prop.js fails
+built-ins/TypedArray/prototype/copyWithin/invoked-as-func.js fails
+built-ins/TypedArray/prototype/copyWithin/invoked-as-method.js fails
+built-ins/TypedArray/prototype/copyWithin/length.js fails
+built-ins/TypedArray/prototype/copyWithin/name.js fails
+built-ins/TypedArray/prototype/copyWithin/negative-end.js fails
+built-ins/TypedArray/prototype/copyWithin/negative-out-of-bounds-end.js fails
+built-ins/TypedArray/prototype/copyWithin/negative-out-of-bounds-start.js fails
+built-ins/TypedArray/prototype/copyWithin/negative-out-of-bounds-target.js fails
+built-ins/TypedArray/prototype/copyWithin/negative-start.js fails
+built-ins/TypedArray/prototype/copyWithin/negative-target.js fails
+built-ins/TypedArray/prototype/copyWithin/non-negative-out-of-bounds-end.js fails
+built-ins/TypedArray/prototype/copyWithin/non-negative-out-of-bounds-target-and-start.js fails
+built-ins/TypedArray/prototype/copyWithin/non-negative-target-and-start.js fails
+built-ins/TypedArray/prototype/copyWithin/non-negative-target-start-and-end.js fails
+built-ins/TypedArray/prototype/copyWithin/prop-desc.js fails
+built-ins/TypedArray/prototype/copyWithin/return-abrupt-from-end.js fails
+built-ins/TypedArray/prototype/copyWithin/return-abrupt-from-start.js fails
+built-ins/TypedArray/prototype/copyWithin/return-abrupt-from-target.js fails
+built-ins/TypedArray/prototype/copyWithin/return-this.js fails
+built-ins/TypedArray/prototype/copyWithin/undefined-end.js fails
+built-ins/TypedArray/prototype/entries/detached-buffer.js fails
+built-ins/TypedArray/prototype/every/callbackfn-arguments-with-thisarg.js fails
+built-ins/TypedArray/prototype/every/callbackfn-arguments-without-thisarg.js fails
+built-ins/TypedArray/prototype/every/callbackfn-detachbuffer.js fails
+built-ins/TypedArray/prototype/every/callbackfn-no-interaction-over-non-integer.js fails
+built-ins/TypedArray/prototype/every/callbackfn-not-called-on-empty.js fails
+built-ins/TypedArray/prototype/every/callbackfn-return-does-not-change-instance.js fails
+built-ins/TypedArray/prototype/every/callbackfn-returns-abrupt.js fails
+built-ins/TypedArray/prototype/every/callbackfn-set-value-during-interaction.js fails
+built-ins/TypedArray/prototype/every/callbackfn-this.js fails
+built-ins/TypedArray/prototype/every/detached-buffer.js fails
+built-ins/TypedArray/prototype/every/get-length-uses-internal-arraylength.js fails
+built-ins/TypedArray/prototype/every/invoked-as-func.js fails
+built-ins/TypedArray/prototype/every/invoked-as-method.js fails
+built-ins/TypedArray/prototype/every/length.js fails
+built-ins/TypedArray/prototype/every/name.js fails
+built-ins/TypedArray/prototype/every/prop-desc.js fails
+built-ins/TypedArray/prototype/every/returns-false-if-any-cb-returns-false.js fails
+built-ins/TypedArray/prototype/every/returns-true-if-every-cb-returns-true.js fails
+built-ins/TypedArray/prototype/every/values-are-not-cached.js fails
+built-ins/TypedArray/prototype/fill/coerced-indexes.js fails
+built-ins/TypedArray/prototype/fill/detached-buffer.js fails
+built-ins/TypedArray/prototype/fill/fill-values-conversion-once.js fails
+built-ins/TypedArray/prototype/fill/fill-values-conversion-operations-consistent-nan.js fails
+built-ins/TypedArray/prototype/fill/fill-values-conversion-operations.js fails
+built-ins/TypedArray/prototype/fill/fill-values-custom-start-and-end.js fails
+built-ins/TypedArray/prototype/fill/fill-values-non-numeric.js fails
+built-ins/TypedArray/prototype/fill/fill-values-relative-end.js fails
+built-ins/TypedArray/prototype/fill/fill-values-relative-start.js fails
+built-ins/TypedArray/prototype/fill/fill-values.js fails
+built-ins/TypedArray/prototype/fill/get-length-ignores-length-prop.js fails
+built-ins/TypedArray/prototype/fill/invoked-as-func.js fails
+built-ins/TypedArray/prototype/fill/invoked-as-method.js fails
+built-ins/TypedArray/prototype/fill/length.js fails
+built-ins/TypedArray/prototype/fill/name.js fails
+built-ins/TypedArray/prototype/fill/prop-desc.js fails
+built-ins/TypedArray/prototype/fill/return-abrupt-from-end.js fails
+built-ins/TypedArray/prototype/fill/return-abrupt-from-set-value.js fails
+built-ins/TypedArray/prototype/fill/return-abrupt-from-start.js fails
+built-ins/TypedArray/prototype/fill/return-this.js fails
+built-ins/TypedArray/prototype/filter/arraylength-internal.js fails
+built-ins/TypedArray/prototype/filter/callbackfn-arguments-with-thisarg.js fails
+built-ins/TypedArray/prototype/filter/callbackfn-arguments-without-thisarg.js fails
+built-ins/TypedArray/prototype/filter/callbackfn-called-before-ctor.js fails
+built-ins/TypedArray/prototype/filter/callbackfn-called-before-species.js fails
+built-ins/TypedArray/prototype/filter/callbackfn-detachbuffer.js fails
+built-ins/TypedArray/prototype/filter/callbackfn-no-iteration-over-non-integer.js fails
+built-ins/TypedArray/prototype/filter/callbackfn-not-called-on-empty.js fails
+built-ins/TypedArray/prototype/filter/callbackfn-return-does-not-change-instance.js fails
+built-ins/TypedArray/prototype/filter/callbackfn-returns-abrupt.js fails
+built-ins/TypedArray/prototype/filter/callbackfn-set-value-during-iteration.js fails
+built-ins/TypedArray/prototype/filter/callbackfn-this.js fails
+built-ins/TypedArray/prototype/filter/detached-buffer.js fails
+built-ins/TypedArray/prototype/filter/invoked-as-func.js fails
+built-ins/TypedArray/prototype/filter/invoked-as-method.js fails
+built-ins/TypedArray/prototype/filter/length.js fails
+built-ins/TypedArray/prototype/filter/name.js fails
+built-ins/TypedArray/prototype/filter/prop-desc.js fails
+built-ins/TypedArray/prototype/filter/result-does-not-share-buffer.js fails
+built-ins/TypedArray/prototype/filter/result-empty-callbackfn-returns-false.js fails
+built-ins/TypedArray/prototype/filter/result-full-callbackfn-returns-true.js fails
+built-ins/TypedArray/prototype/filter/speciesctor-get-ctor-abrupt.js fails
+built-ins/TypedArray/prototype/filter/speciesctor-get-ctor-inherited.js fails
+built-ins/TypedArray/prototype/filter/speciesctor-get-ctor.js fails
+built-ins/TypedArray/prototype/filter/speciesctor-get-species-abrupt.js fails
+built-ins/TypedArray/prototype/filter/speciesctor-get-species-custom-ctor-invocation.js fails
+built-ins/TypedArray/prototype/filter/speciesctor-get-species-custom-ctor-length.js fails
+built-ins/TypedArray/prototype/filter/speciesctor-get-species-custom-ctor-returns-another-instance.js fails
+built-ins/TypedArray/prototype/filter/speciesctor-get-species-custom-ctor.js fails
+built-ins/TypedArray/prototype/filter/speciesctor-get-species-use-default-ctor.js fails
+built-ins/TypedArray/prototype/filter/speciesctor-get-species.js fails
+built-ins/TypedArray/prototype/filter/values-are-not-cached.js fails
+built-ins/TypedArray/prototype/filter/values-are-set.js fails
+built-ins/TypedArray/prototype/find/detached-buffer.js fails
+built-ins/TypedArray/prototype/find/get-length-ignores-length-prop.js fails
+built-ins/TypedArray/prototype/find/invoked-as-func.js fails
+built-ins/TypedArray/prototype/find/invoked-as-method.js fails
+built-ins/TypedArray/prototype/find/length.js fails
+built-ins/TypedArray/prototype/find/name.js fails
+built-ins/TypedArray/prototype/find/predicate-call-changes-value.js fails
+built-ins/TypedArray/prototype/find/predicate-call-parameters.js fails
+built-ins/TypedArray/prototype/find/predicate-call-this-non-strict.js sloppyFails
+built-ins/TypedArray/prototype/find/predicate-call-this-strict.js strictFails
+built-ins/TypedArray/prototype/find/predicate-may-detach-buffer.js fails
+built-ins/TypedArray/prototype/find/predicate-not-called-on-empty-array.js fails
+built-ins/TypedArray/prototype/find/prop-desc.js fails
+built-ins/TypedArray/prototype/find/return-abrupt-from-predicate-call.js fails
+built-ins/TypedArray/prototype/find/return-found-value-predicate-result-is-true.js fails
+built-ins/TypedArray/prototype/find/return-undefined-if-predicate-returns-false-value.js fails
+built-ins/TypedArray/prototype/findIndex/detached-buffer.js fails
+built-ins/TypedArray/prototype/findIndex/get-length-ignores-length-prop.js fails
+built-ins/TypedArray/prototype/findIndex/invoked-as-func.js fails
+built-ins/TypedArray/prototype/findIndex/invoked-as-method.js fails
+built-ins/TypedArray/prototype/findIndex/length.js fails
+built-ins/TypedArray/prototype/findIndex/name.js fails
+built-ins/TypedArray/prototype/findIndex/predicate-call-changes-value.js fails
+built-ins/TypedArray/prototype/findIndex/predicate-call-parameters.js fails
+built-ins/TypedArray/prototype/findIndex/predicate-call-this-non-strict.js sloppyFails
+built-ins/TypedArray/prototype/findIndex/predicate-call-this-strict.js strictFails
+built-ins/TypedArray/prototype/findIndex/predicate-may-detach-buffer.js fails
+built-ins/TypedArray/prototype/findIndex/predicate-not-called-on-empty-array.js fails
+built-ins/TypedArray/prototype/findIndex/prop-desc.js fails
+built-ins/TypedArray/prototype/findIndex/return-abrupt-from-predicate-call.js fails
+built-ins/TypedArray/prototype/findIndex/return-index-predicate-result-is-true.js fails
+built-ins/TypedArray/prototype/findIndex/return-negative-one-if-predicate-returns-false-value.js fails
+built-ins/TypedArray/prototype/forEach/arraylength-internal.js fails
+built-ins/TypedArray/prototype/forEach/callbackfn-arguments-with-thisarg.js fails
+built-ins/TypedArray/prototype/forEach/callbackfn-arguments-without-thisarg.js fails
+built-ins/TypedArray/prototype/forEach/callbackfn-detachbuffer.js fails
+built-ins/TypedArray/prototype/forEach/callbackfn-no-interaction-over-non-integer.js fails
+built-ins/TypedArray/prototype/forEach/callbackfn-not-called-on-empty.js fails
+built-ins/TypedArray/prototype/forEach/callbackfn-return-does-not-change-instance.js fails
+built-ins/TypedArray/prototype/forEach/callbackfn-returns-abrupt.js fails
+built-ins/TypedArray/prototype/forEach/callbackfn-set-value-during-interaction.js fails
+built-ins/TypedArray/prototype/forEach/callbackfn-this.js fails
+built-ins/TypedArray/prototype/forEach/detached-buffer.js fails
+built-ins/TypedArray/prototype/forEach/invoked-as-func.js fails
+built-ins/TypedArray/prototype/forEach/invoked-as-method.js fails
+built-ins/TypedArray/prototype/forEach/length.js fails
+built-ins/TypedArray/prototype/forEach/name.js fails
+built-ins/TypedArray/prototype/forEach/prop-desc.js fails
+built-ins/TypedArray/prototype/forEach/returns-undefined.js fails
+built-ins/TypedArray/prototype/forEach/values-are-not-cached.js fails
+built-ins/TypedArray/prototype/includes/detached-buffer.js fails
+built-ins/TypedArray/prototype/includes/fromIndex-equal-or-greater-length-returns-false.js fails
+built-ins/TypedArray/prototype/includes/fromIndex-infinity.js fails
+built-ins/TypedArray/prototype/includes/fromIndex-minus-zero.js fails
+built-ins/TypedArray/prototype/includes/get-length-uses-internal-arraylength.js fails
+built-ins/TypedArray/prototype/includes/invoked-as-func.js fails
+built-ins/TypedArray/prototype/includes/invoked-as-method.js fails
+built-ins/TypedArray/prototype/includes/length-zero-returns-false.js fails
+built-ins/TypedArray/prototype/includes/length.js fails
+built-ins/TypedArray/prototype/includes/name.js fails
+built-ins/TypedArray/prototype/includes/prop-desc.js fails
+built-ins/TypedArray/prototype/includes/return-abrupt-tointeger-fromindex.js fails
+built-ins/TypedArray/prototype/includes/samevaluezero.js fails
+built-ins/TypedArray/prototype/includes/search-found-returns-true.js fails
+built-ins/TypedArray/prototype/includes/search-not-found-returns-false.js fails
+built-ins/TypedArray/prototype/includes/tointeger-fromindex.js fails
+built-ins/TypedArray/prototype/indexOf/detached-buffer.js fails
+built-ins/TypedArray/prototype/indexOf/fromIndex-equal-or-greater-length-returns-minus-one.js fails
+built-ins/TypedArray/prototype/indexOf/fromIndex-infinity.js fails
+built-ins/TypedArray/prototype/indexOf/fromIndex-minus-zero.js fails
+built-ins/TypedArray/prototype/indexOf/get-length-uses-internal-arraylength.js fails
+built-ins/TypedArray/prototype/indexOf/invoked-as-func.js fails
+built-ins/TypedArray/prototype/indexOf/invoked-as-method.js fails
+built-ins/TypedArray/prototype/indexOf/length-zero-returns-minus-one.js fails
+built-ins/TypedArray/prototype/indexOf/length.js fails
+built-ins/TypedArray/prototype/indexOf/name.js fails
+built-ins/TypedArray/prototype/indexOf/prop-desc.js fails
+built-ins/TypedArray/prototype/indexOf/return-abrupt-tointeger-fromindex.js fails
+built-ins/TypedArray/prototype/indexOf/search-found-returns-index.js fails
+built-ins/TypedArray/prototype/indexOf/search-not-found-returns-minus-one.js fails
+built-ins/TypedArray/prototype/indexOf/strict-comparison.js fails
+built-ins/TypedArray/prototype/indexOf/tointeger-fromindex.js fails
+built-ins/TypedArray/prototype/join/custom-separator-result-from-tostring-on-each-simple-value.js fails
+built-ins/TypedArray/prototype/join/custom-separator-result-from-tostring-on-each-value.js fails
+built-ins/TypedArray/prototype/join/detached-buffer.js fails
+built-ins/TypedArray/prototype/join/empty-instance-empty-string.js fails
+built-ins/TypedArray/prototype/join/get-length-uses-internal-arraylength.js fails
+built-ins/TypedArray/prototype/join/invoked-as-func.js fails
+built-ins/TypedArray/prototype/join/invoked-as-method.js fails
+built-ins/TypedArray/prototype/join/length.js fails
+built-ins/TypedArray/prototype/join/name.js fails
+built-ins/TypedArray/prototype/join/prop-desc.js fails
+built-ins/TypedArray/prototype/join/result-from-tostring-on-each-simple-value.js fails
+built-ins/TypedArray/prototype/join/result-from-tostring-on-each-value.js fails
+built-ins/TypedArray/prototype/join/return-abrupt-from-separator.js fails
+built-ins/TypedArray/prototype/keys/detached-buffer.js fails
+built-ins/TypedArray/prototype/lastIndexOf/detached-buffer.js fails
+built-ins/TypedArray/prototype/lastIndexOf/fromIndex-infinity.js fails
+built-ins/TypedArray/prototype/lastIndexOf/fromIndex-minus-zero.js fails
+built-ins/TypedArray/prototype/lastIndexOf/get-length-uses-internal-arraylength.js fails
+built-ins/TypedArray/prototype/lastIndexOf/invoked-as-func.js fails
+built-ins/TypedArray/prototype/lastIndexOf/invoked-as-method.js fails
+built-ins/TypedArray/prototype/lastIndexOf/length-zero-returns-minus-one.js fails
+built-ins/TypedArray/prototype/lastIndexOf/length.js fails
+built-ins/TypedArray/prototype/lastIndexOf/name.js fails
+built-ins/TypedArray/prototype/lastIndexOf/prop-desc.js fails
+built-ins/TypedArray/prototype/lastIndexOf/return-abrupt-tointeger-fromindex.js fails
+built-ins/TypedArray/prototype/lastIndexOf/search-found-returns-index.js fails
+built-ins/TypedArray/prototype/lastIndexOf/search-not-found-returns-minus-one.js fails
+built-ins/TypedArray/prototype/lastIndexOf/strict-comparison.js fails
+built-ins/TypedArray/prototype/lastIndexOf/tointeger-fromindex.js fails
+built-ins/TypedArray/prototype/length/detached-buffer.js fails
+built-ins/TypedArray/prototype/map/arraylength-internal.js fails
+built-ins/TypedArray/prototype/map/callbackfn-arguments-with-thisarg.js fails
+built-ins/TypedArray/prototype/map/callbackfn-arguments-without-thisarg.js fails
+built-ins/TypedArray/prototype/map/callbackfn-detachbuffer.js fails
+built-ins/TypedArray/prototype/map/callbackfn-no-interaction-over-non-integer-properties.js fails
+built-ins/TypedArray/prototype/map/callbackfn-not-called-on-empty.js fails
+built-ins/TypedArray/prototype/map/callbackfn-return-affects-returned-object.js fails
+built-ins/TypedArray/prototype/map/callbackfn-return-does-not-change-instance.js fails
+built-ins/TypedArray/prototype/map/callbackfn-return-does-not-copy-non-integer-properties.js fails
+built-ins/TypedArray/prototype/map/callbackfn-returns-abrupt.js fails
+built-ins/TypedArray/prototype/map/callbackfn-set-value-during-interaction.js fails
+built-ins/TypedArray/prototype/map/callbackfn-this.js fails
+built-ins/TypedArray/prototype/map/detached-buffer.js fails
+built-ins/TypedArray/prototype/map/invoked-as-func.js fails
+built-ins/TypedArray/prototype/map/invoked-as-method.js fails
+built-ins/TypedArray/prototype/map/length.js fails
+built-ins/TypedArray/prototype/map/name.js fails
+built-ins/TypedArray/prototype/map/prop-desc.js fails
+built-ins/TypedArray/prototype/map/return-new-typedarray-conversion-operation-consistent-nan.js fails
+built-ins/TypedArray/prototype/map/return-new-typedarray-conversion-operation.js fails
+built-ins/TypedArray/prototype/map/return-new-typedarray-from-empty-length.js fails
+built-ins/TypedArray/prototype/map/return-new-typedarray-from-positive-length.js fails
+built-ins/TypedArray/prototype/map/values-are-not-cached.js fails
+built-ins/TypedArray/prototype/reduce/callbackfn-arguments-custom-accumulator.js fails
+built-ins/TypedArray/prototype/reduce/callbackfn-arguments-default-accumulator.js fails
+built-ins/TypedArray/prototype/reduce/callbackfn-detachbuffer.js fails
+built-ins/TypedArray/prototype/reduce/callbackfn-no-iteration-over-non-integer-properties.js fails
+built-ins/TypedArray/prototype/reduce/callbackfn-not-called-on-empty.js fails
+built-ins/TypedArray/prototype/reduce/callbackfn-return-does-not-change-instance.js fails
+built-ins/TypedArray/prototype/reduce/callbackfn-returns-abrupt.js fails
+built-ins/TypedArray/prototype/reduce/callbackfn-set-value-during-iteration.js fails
+built-ins/TypedArray/prototype/reduce/callbackfn-this.js fails
+built-ins/TypedArray/prototype/reduce/detached-buffer.js fails
+built-ins/TypedArray/prototype/reduce/empty-instance-return-initialvalue.js fails
+built-ins/TypedArray/prototype/reduce/get-length-uses-internal-arraylength.js fails
+built-ins/TypedArray/prototype/reduce/invoked-as-func.js fails
+built-ins/TypedArray/prototype/reduce/invoked-as-method.js fails
+built-ins/TypedArray/prototype/reduce/length.js fails
+built-ins/TypedArray/prototype/reduce/name.js fails
+built-ins/TypedArray/prototype/reduce/prop-desc.js fails
+built-ins/TypedArray/prototype/reduce/result-is-last-callbackfn-return.js fails
+built-ins/TypedArray/prototype/reduce/result-of-any-type.js fails
+built-ins/TypedArray/prototype/reduce/return-first-value-without-callbackfn.js fails
+built-ins/TypedArray/prototype/reduce/values-are-not-cached.js fails
+built-ins/TypedArray/prototype/reduceRight/callbackfn-arguments-custom-accumulator.js fails
+built-ins/TypedArray/prototype/reduceRight/callbackfn-arguments-default-accumulator.js fails
+built-ins/TypedArray/prototype/reduceRight/callbackfn-detachbuffer.js fails
+built-ins/TypedArray/prototype/reduceRight/callbackfn-no-iteration-over-non-integer-properties.js fails
+built-ins/TypedArray/prototype/reduceRight/callbackfn-not-called-on-empty.js fails
+built-ins/TypedArray/prototype/reduceRight/callbackfn-return-does-not-change-instance.js fails
+built-ins/TypedArray/prototype/reduceRight/callbackfn-returns-abrupt.js fails
+built-ins/TypedArray/prototype/reduceRight/callbackfn-set-value-during-iteration.js fails
+built-ins/TypedArray/prototype/reduceRight/callbackfn-this.js fails
+built-ins/TypedArray/prototype/reduceRight/detached-buffer.js fails
+built-ins/TypedArray/prototype/reduceRight/empty-instance-return-initialvalue.js fails
+built-ins/TypedArray/prototype/reduceRight/get-length-uses-internal-arraylength.js fails
+built-ins/TypedArray/prototype/reduceRight/invoked-as-func.js fails
+built-ins/TypedArray/prototype/reduceRight/invoked-as-method.js fails
+built-ins/TypedArray/prototype/reduceRight/length.js fails
+built-ins/TypedArray/prototype/reduceRight/name.js fails
+built-ins/TypedArray/prototype/reduceRight/prop-desc.js fails
+built-ins/TypedArray/prototype/reduceRight/result-is-last-callbackfn-return.js fails
+built-ins/TypedArray/prototype/reduceRight/result-of-any-type.js fails
+built-ins/TypedArray/prototype/reduceRight/return-first-value-without-callbackfn.js fails
+built-ins/TypedArray/prototype/reduceRight/values-are-not-cached.js fails
+built-ins/TypedArray/prototype/reverse/detached-buffer.js fails
+built-ins/TypedArray/prototype/reverse/get-length-uses-internal-arraylength.js fails
+built-ins/TypedArray/prototype/reverse/invoked-as-func.js fails
+built-ins/TypedArray/prototype/reverse/invoked-as-method.js fails
+built-ins/TypedArray/prototype/reverse/length.js fails
+built-ins/TypedArray/prototype/reverse/name.js fails
+built-ins/TypedArray/prototype/reverse/preserves-non-numeric-properties.js fails
+built-ins/TypedArray/prototype/reverse/prop-desc.js fails
+built-ins/TypedArray/prototype/reverse/returns-original-object.js fails
+built-ins/TypedArray/prototype/reverse/reverts.js fails
+built-ins/TypedArray/prototype/set/array-arg-set-values-in-order.js fails
+built-ins/TypedArray/prototype/set/array-arg-targetbuffer-detached-on-get-src-value-throws.js fails
+built-ins/TypedArray/prototype/set/array-arg-targetbuffer-detached-on-tointeger-offset-throws.js fails
+built-ins/TypedArray/prototype/set/array-arg-targetbuffer-detached-throws.js fails
+built-ins/TypedArray/prototype/set/typedarray-arg-srcbuffer-detached-during-tointeger-offset-throws.js fails
+built-ins/TypedArray/prototype/set/typedarray-arg-targetbuffer-detached-during-tointeger-offset-throws.js fails
+built-ins/TypedArray/prototype/slice/arraylength-internal.js fails
+built-ins/TypedArray/prototype/slice/bit-precision.js fails
+built-ins/TypedArray/prototype/slice/detached-buffer-zero-count-custom-ctor-other-targettype.js fails
+built-ins/TypedArray/prototype/slice/detached-buffer-zero-count-custom-ctor-same-targettype.js fails
+built-ins/TypedArray/prototype/slice/detached-buffer.js fails
+built-ins/TypedArray/prototype/slice/infinity.js fails
+built-ins/TypedArray/prototype/slice/invoked-as-func.js fails
+built-ins/TypedArray/prototype/slice/invoked-as-method.js fails
+built-ins/TypedArray/prototype/slice/length.js fails
+built-ins/TypedArray/prototype/slice/minus-zero.js fails
+built-ins/TypedArray/prototype/slice/name.js fails
+built-ins/TypedArray/prototype/slice/prop-desc.js fails
+built-ins/TypedArray/prototype/slice/result-does-not-copy-ordinary-properties.js fails
+built-ins/TypedArray/prototype/slice/results-with-different-length.js fails
+built-ins/TypedArray/prototype/slice/results-with-empty-length.js fails
+built-ins/TypedArray/prototype/slice/results-with-same-length.js fails
+built-ins/TypedArray/prototype/slice/return-abrupt-from-end.js fails
+built-ins/TypedArray/prototype/slice/return-abrupt-from-start.js fails
+built-ins/TypedArray/prototype/slice/set-values-from-different-ctor-type.js fails
+built-ins/TypedArray/prototype/slice/speciesctor-get-ctor-abrupt.js fails
+built-ins/TypedArray/prototype/slice/speciesctor-get-ctor-inherited.js fails
+built-ins/TypedArray/prototype/slice/speciesctor-get-ctor.js fails
+built-ins/TypedArray/prototype/slice/speciesctor-get-species-abrupt.js fails
+built-ins/TypedArray/prototype/slice/speciesctor-get-species-custom-ctor-invocation.js fails
+built-ins/TypedArray/prototype/slice/speciesctor-get-species-custom-ctor-length.js fails
+built-ins/TypedArray/prototype/slice/speciesctor-get-species-custom-ctor-returns-another-instance.js fails
+built-ins/TypedArray/prototype/slice/speciesctor-get-species-custom-ctor.js fails
+built-ins/TypedArray/prototype/slice/speciesctor-get-species-use-default-ctor.js fails
+built-ins/TypedArray/prototype/slice/speciesctor-get-species.js fails
+built-ins/TypedArray/prototype/slice/tointeger-end.js fails
+built-ins/TypedArray/prototype/slice/tointeger-start.js fails
+built-ins/TypedArray/prototype/some/callbackfn-arguments-with-thisarg.js fails
+built-ins/TypedArray/prototype/some/callbackfn-arguments-without-thisarg.js fails
+built-ins/TypedArray/prototype/some/callbackfn-detachbuffer.js fails
+built-ins/TypedArray/prototype/some/callbackfn-no-interaction-over-non-integer.js fails
+built-ins/TypedArray/prototype/some/callbackfn-not-called-on-empty.js fails
+built-ins/TypedArray/prototype/some/callbackfn-return-does-not-change-instance.js fails
+built-ins/TypedArray/prototype/some/callbackfn-returns-abrupt.js fails
+built-ins/TypedArray/prototype/some/callbackfn-set-value-during-interaction.js fails
+built-ins/TypedArray/prototype/some/callbackfn-this.js fails
+built-ins/TypedArray/prototype/some/detached-buffer.js fails
+built-ins/TypedArray/prototype/some/get-length-uses-internal-arraylength.js fails
+built-ins/TypedArray/prototype/some/invoked-as-func.js fails
+built-ins/TypedArray/prototype/some/invoked-as-method.js fails
+built-ins/TypedArray/prototype/some/length.js fails
+built-ins/TypedArray/prototype/some/name.js fails
+built-ins/TypedArray/prototype/some/prop-desc.js fails
+built-ins/TypedArray/prototype/some/returns-false-if-every-cb-returns-false.js fails
+built-ins/TypedArray/prototype/some/returns-true-if-any-cb-returns-true.js fails
+built-ins/TypedArray/prototype/some/values-are-not-cached.js fails
+built-ins/TypedArray/prototype/sort/arraylength-internal.js fails
+built-ins/TypedArray/prototype/sort/comparefn-call-throws.js fails
+built-ins/TypedArray/prototype/sort/comparefn-calls.js fails
+built-ins/TypedArray/prototype/sort/detached-buffer-comparefn.js fails
+built-ins/TypedArray/prototype/sort/detached-buffer.js fails
+built-ins/TypedArray/prototype/sort/invoked-as-func.js fails
+built-ins/TypedArray/prototype/sort/invoked-as-method.js fails
+built-ins/TypedArray/prototype/sort/length.js fails
+built-ins/TypedArray/prototype/sort/name.js fails
+built-ins/TypedArray/prototype/sort/prop-desc.js fails
+built-ins/TypedArray/prototype/sort/return-same-instance.js fails
+built-ins/TypedArray/prototype/sort/sortcompare-with-no-tostring.js fails
+built-ins/TypedArray/prototype/sort/sorted-values-nan.js fails
+built-ins/TypedArray/prototype/sort/sorted-values.js fails
+built-ins/TypedArray/prototype/subarray/detached-buffer.js fails
+built-ins/TypedArray/prototype/subarray/length.js fails
+built-ins/TypedArray/prototype/subarray/speciesctor-get-ctor-inherited.js fails
+built-ins/TypedArray/prototype/subarray/speciesctor-get-ctor.js fails
+built-ins/TypedArray/prototype/subarray/speciesctor-get-species-abrupt.js fails
+built-ins/TypedArray/prototype/subarray/speciesctor-get-species-custom-ctor-invocation.js fails
+built-ins/TypedArray/prototype/subarray/speciesctor-get-species-custom-ctor-returns-another-instance.js fails
+built-ins/TypedArray/prototype/subarray/speciesctor-get-species-custom-ctor.js fails
+built-ins/TypedArray/prototype/subarray/speciesctor-get-species-use-default-ctor.js fails
+built-ins/TypedArray/prototype/subarray/speciesctor-get-species.js fails
+built-ins/TypedArray/prototype/toLocaleString/calls-tolocalestring-from-each-value.js fails
+built-ins/TypedArray/prototype/toLocaleString/calls-tostring-from-each-value.js fails
+built-ins/TypedArray/prototype/toLocaleString/calls-valueof-from-each-value.js fails
+built-ins/TypedArray/prototype/toLocaleString/detached-buffer.js fails
+built-ins/TypedArray/prototype/toLocaleString/empty-instance-returns-empty-string.js fails
+built-ins/TypedArray/prototype/toLocaleString/invoked-as-method.js fails
+built-ins/TypedArray/prototype/toLocaleString/prop-desc.js fails
+built-ins/TypedArray/prototype/toLocaleString/return-abrupt-from-firstelement-tolocalestring.js fails
+built-ins/TypedArray/prototype/toLocaleString/return-abrupt-from-firstelement-tostring.js fails
+built-ins/TypedArray/prototype/toLocaleString/return-abrupt-from-firstelement-valueof.js fails
+built-ins/TypedArray/prototype/toLocaleString/return-abrupt-from-nextelement-tolocalestring.js fails
+built-ins/TypedArray/prototype/toLocaleString/return-abrupt-from-nextelement-tostring.js fails
+built-ins/TypedArray/prototype/toLocaleString/return-abrupt-from-nextelement-valueof.js fails
+built-ins/TypedArray/prototype/toLocaleString/return-result.js fails
+built-ins/TypedArray/prototype/toLocaleString/this-is-not-object.js fails
+built-ins/TypedArray/prototype/toLocaleString/this-is-not-typedarray-instance.js fails
+built-ins/TypedArray/prototype/toString.js fails
+built-ins/TypedArray/prototype/toString/detached-buffer.js fails
+built-ins/TypedArray/prototype/values/detached-buffer.js fails
+built-ins/TypedArrays/ctors/buffer-arg/byteoffset-to-number-detachbuffer.js fails
+built-ins/TypedArrays/ctors/buffer-arg/custom-proto-access-throws.js fails
+built-ins/TypedArrays/ctors/buffer-arg/defined-negative-length.js fails
+built-ins/TypedArrays/ctors/buffer-arg/detachedbuffer.js fails
+built-ins/TypedArrays/ctors/buffer-arg/length-to-number-detachbuffer.js fails
+built-ins/TypedArrays/ctors/buffer-arg/proto-from-ctor-realm.js fails
+built-ins/TypedArrays/ctors/buffer-arg/use-custom-proto-if-object.js fails
+built-ins/TypedArrays/ctors/length-arg/custom-proto-access-throws.js fails
+built-ins/TypedArrays/ctors/length-arg/proto-from-ctor-realm.js fails
+built-ins/TypedArrays/ctors/length-arg/use-custom-proto-if-object.js fails
+built-ins/TypedArrays/ctors/no-args/custom-proto-access-throws.js fails
+built-ins/TypedArrays/ctors/no-args/proto-from-ctor-realm.js fails
+built-ins/TypedArrays/ctors/no-args/use-custom-proto-if-object.js fails
+built-ins/TypedArrays/ctors/object-arg/as-generator-iterable-returns.js fails
+built-ins/TypedArrays/ctors/object-arg/custom-proto-access-throws.js fails
+built-ins/TypedArrays/ctors/object-arg/iterator-not-callable-throws.js fails
+built-ins/TypedArrays/ctors/object-arg/proto-from-ctor-realm.js fails
+built-ins/TypedArrays/ctors/object-arg/use-custom-proto-if-object.js fails
+built-ins/TypedArrays/ctors/typedarray-arg/custom-proto-access-throws.js fails
+built-ins/TypedArrays/ctors/typedarray-arg/detached-when-species-retrieved-different-type.js fails
+built-ins/TypedArrays/ctors/typedarray-arg/detached-when-species-retrieved-same-type.js fails
+built-ins/TypedArrays/ctors/typedarray-arg/other-ctor-buffer-ctor-custom-species-proto-from-ctor-realm.js fails
+built-ins/TypedArrays/ctors/typedarray-arg/other-ctor-buffer-ctor-custom-species.js fails
+built-ins/TypedArrays/ctors/typedarray-arg/other-ctor-buffer-ctor-not-object-throws.js fails
+built-ins/TypedArrays/ctors/typedarray-arg/other-ctor-buffer-ctor-species-not-ctor-throws.js fails
+built-ins/TypedArrays/ctors/typedarray-arg/other-ctor-buffer-ctor-species-prototype-throws.js fails
+built-ins/TypedArrays/ctors/typedarray-arg/proto-from-ctor-realm.js fails
+built-ins/TypedArrays/ctors/typedarray-arg/same-ctor-buffer-ctor-species-custom-proto-from-ctor-realm.js fails
+built-ins/TypedArrays/ctors/typedarray-arg/same-ctor-buffer-ctor-species-custom.js fails
+built-ins/TypedArrays/ctors/typedarray-arg/same-ctor-buffer-ctor-species-not-ctor.js fails
+built-ins/TypedArrays/ctors/typedarray-arg/same-ctor-buffer-ctor-species-prototype-throws.js fails
+built-ins/TypedArrays/ctors/typedarray-arg/same-ctor-buffer-ctor-value-not-obj-throws.js fails
+built-ins/TypedArrays/ctors/typedarray-arg/use-custom-proto-if-object.js fails
+built-ins/TypedArrays/from/arylk-get-length-error.js fails
+built-ins/TypedArrays/from/arylk-to-length-error.js fails
+built-ins/TypedArrays/from/custom-ctor-returns-other-instance.js fails
+built-ins/TypedArrays/from/custom-ctor.js fails
+built-ins/TypedArrays/from/iter-access-error.js fails
+built-ins/TypedArrays/from/iter-invoke-error.js fails
+built-ins/TypedArrays/from/iter-next-error.js fails
+built-ins/TypedArrays/from/iter-next-value-error.js fails
+built-ins/TypedArrays/from/mapfn-abrupt-completion.js fails
+built-ins/TypedArrays/from/mapfn-arguments.js fails
+built-ins/TypedArrays/from/mapfn-this-with-thisarg.js fails
+built-ins/TypedArrays/from/mapfn-this-without-thisarg-non-strict.js sloppyFails
+built-ins/TypedArrays/from/mapfn-this-without-thisarg-strict.js strictFails
+built-ins/TypedArrays/from/nan-conversion.js fails
+built-ins/TypedArrays/from/new-instance-empty.js fails
+built-ins/TypedArrays/from/new-instance-from-ordinary-object.js fails
+built-ins/TypedArrays/from/new-instance-from-sparse-array.js fails
+built-ins/TypedArrays/from/new-instance-from-zero.js fails
+built-ins/TypedArrays/from/new-instance-using-custom-ctor.js fails
+built-ins/TypedArrays/from/new-instance-with-mapfn.js fails
+built-ins/TypedArrays/from/new-instance-without-mapfn.js fails
+built-ins/TypedArrays/from/property-abrupt-completion.js fails
+built-ins/TypedArrays/from/set-value-abrupt-completion.js fails
+built-ins/TypedArrays/internals/DefineOwnProperty/conversion-operation-consistent-nan.js fails
+built-ins/TypedArrays/internals/DefineOwnProperty/conversion-operation.js fails
+built-ins/TypedArrays/internals/DefineOwnProperty/detached-buffer-realm.js fails
+built-ins/TypedArrays/internals/DefineOwnProperty/detached-buffer.js fails
+built-ins/TypedArrays/internals/DefineOwnProperty/key-is-greater-than-last-index.js fails
+built-ins/TypedArrays/internals/DefineOwnProperty/key-is-lower-than-zero.js fails
+built-ins/TypedArrays/internals/DefineOwnProperty/key-is-minus-zero.js fails
+built-ins/TypedArrays/internals/DefineOwnProperty/key-is-not-integer.js fails
+built-ins/TypedArrays/internals/DefineOwnProperty/key-is-numericindex-accessor-desc.js fails
+built-ins/TypedArrays/internals/DefineOwnProperty/key-is-numericindex-desc-configurable.js fails
+built-ins/TypedArrays/internals/DefineOwnProperty/key-is-numericindex-desc-not-enumerable.js fails
+built-ins/TypedArrays/internals/DefineOwnProperty/key-is-numericindex-desc-not-writable.js fails
+built-ins/TypedArrays/internals/DefineOwnProperty/key-is-numericindex.js fails
+built-ins/TypedArrays/internals/DefineOwnProperty/set-value.js fails
+built-ins/TypedArrays/internals/DefineOwnProperty/tonumber-value-detached-buffer.js fails
+built-ins/TypedArrays/internals/Get/detached-buffer-key-is-not-numeric-index.js fails
+built-ins/TypedArrays/internals/Get/detached-buffer-key-is-symbol.js fails
+built-ins/TypedArrays/internals/Get/detached-buffer-realm.js fails
+built-ins/TypedArrays/internals/Get/detached-buffer.js fails
+built-ins/TypedArrays/internals/Get/infinity-detached-buffer.js fails
+built-ins/TypedArrays/internals/Get/key-is-not-integer.js fails
+built-ins/TypedArrays/internals/Get/key-is-not-minus-zero.js fails
+built-ins/TypedArrays/internals/Get/key-is-out-of-bounds.js fails
+built-ins/TypedArrays/internals/GetOwnProperty/detached-buffer-key-is-not-number.js fails
+built-ins/TypedArrays/internals/GetOwnProperty/detached-buffer-key-is-symbol.js fails
+built-ins/TypedArrays/internals/GetOwnProperty/detached-buffer-realm.js fails
+built-ins/TypedArrays/internals/GetOwnProperty/detached-buffer.js fails
+built-ins/TypedArrays/internals/GetOwnProperty/enumerate-detached-buffer.js fails
+built-ins/TypedArrays/internals/GetOwnProperty/index-prop-desc.js fails
+built-ins/TypedArrays/internals/HasProperty/abrupt-from-ordinary-has-parent-hasproperty.js fails
+built-ins/TypedArrays/internals/HasProperty/detached-buffer-key-is-not-number.js fails
+built-ins/TypedArrays/internals/HasProperty/detached-buffer-key-is-symbol.js fails
+built-ins/TypedArrays/internals/HasProperty/detached-buffer-realm.js fails
+built-ins/TypedArrays/internals/HasProperty/detached-buffer.js fails
+built-ins/TypedArrays/internals/HasProperty/infinity-with-detached-buffer.js sloppyFails
+built-ins/TypedArrays/internals/HasProperty/key-is-lower-than-zero.js fails
+built-ins/TypedArrays/internals/HasProperty/key-is-minus-zero.js fails
+built-ins/TypedArrays/internals/HasProperty/key-is-not-integer.js fails
+built-ins/TypedArrays/internals/OwnPropertyKeys/integer-indexes-and-string-and-symbol-keys-.js fails
+built-ins/TypedArrays/internals/OwnPropertyKeys/integer-indexes-and-string-keys.js fails
+built-ins/TypedArrays/internals/OwnPropertyKeys/integer-indexes.js fails
+built-ins/TypedArrays/internals/OwnPropertyKeys/not-enumerable-keys.js fails
+built-ins/TypedArrays/internals/Set/detached-buffer-key-is-not-numeric-index.js fails
+built-ins/TypedArrays/internals/Set/detached-buffer-key-is-symbol.js fails
+built-ins/TypedArrays/internals/Set/detached-buffer-realm.js fails
+built-ins/TypedArrays/internals/Set/detached-buffer.js fails
+built-ins/TypedArrays/internals/Set/indexed-value.js fails
+built-ins/TypedArrays/internals/Set/key-is-minus-zero.js fails
+built-ins/TypedArrays/internals/Set/key-is-not-canonical-index.js fails
+built-ins/TypedArrays/internals/Set/key-is-not-integer.js fails
+built-ins/TypedArrays/internals/Set/key-is-not-numeric-index.js fails
+built-ins/TypedArrays/internals/Set/key-is-out-of-bounds.js fails
+built-ins/TypedArrays/internals/Set/key-is-symbol.js fails
+built-ins/TypedArrays/internals/Set/tonumber-value-detached-buffer.js fails
+built-ins/TypedArrays/internals/Set/tonumber-value-throws.js strictFails
+built-ins/TypedArrays/of/argument-number-value-throws.js fails
+built-ins/TypedArrays/of/custom-ctor-returns-other-instance.js fails
+built-ins/TypedArrays/of/custom-ctor.js fails
+built-ins/TypedArrays/of/nan-conversion.js fails
+built-ins/TypedArrays/of/new-instance-empty.js fails
+built-ins/TypedArrays/of/new-instance-from-zero.js fails
+built-ins/TypedArrays/of/new-instance-using-custom-ctor.js fails
+built-ins/TypedArrays/of/new-instance.js fails
+built-ins/WeakMap/constructor.js fails
+built-ins/WeakMap/empty-iterable.js fails
+built-ins/WeakMap/get-set-method-failure.js fails
+built-ins/WeakMap/iterable-failure.js fails
+built-ins/WeakMap/iterable.js fails
+built-ins/WeakMap/iterator-close-after-set-failure.js fails
+built-ins/WeakMap/iterator-item-first-entry-returns-abrupt.js fails
+built-ins/WeakMap/iterator-item-second-entry-returns-abrupt.js fails
+built-ins/WeakMap/iterator-items-are-not-object-close-iterator.js fails
+built-ins/WeakMap/iterator-items-are-not-object.js fails
+built-ins/WeakMap/iterator-next-failure.js fails
+built-ins/WeakMap/iterator-value-failure.js fails
+built-ins/WeakMap/length.js fails
+built-ins/WeakMap/name.js fails
+built-ins/WeakMap/no-iterable.js fails
+built-ins/WeakMap/properties-of-map-instances.js fails
+built-ins/WeakMap/properties-of-the-weakmap-prototype-object.js fails
+built-ins/WeakMap/proto-from-ctor-realm.js fails
+built-ins/WeakMap/prototype-of-weakmap.js fails
+built-ins/WeakMap/prototype/Symbol.toStringTag.js fails
+built-ins/WeakMap/prototype/constructor.js fails
+built-ins/WeakMap/prototype/delete/delete-entry-initial-iterable.js fails
+built-ins/WeakMap/prototype/delete/delete-entry.js fails
+built-ins/WeakMap/prototype/delete/delete.js fails
+built-ins/WeakMap/prototype/delete/does-not-have-weakmapdata-internal-slot-array.js fails
+built-ins/WeakMap/prototype/delete/does-not-have-weakmapdata-internal-slot-map.js fails
+built-ins/WeakMap/prototype/delete/does-not-have-weakmapdata-internal-slot-object.js fails
+built-ins/WeakMap/prototype/delete/does-not-have-weakmapdata-internal-slot-set.js fails
+built-ins/WeakMap/prototype/delete/does-not-have-weakmapdata-internal-slot-weakmap-prototype.js fails
+built-ins/WeakMap/prototype/delete/length.js fails
+built-ins/WeakMap/prototype/delete/name.js fails
+built-ins/WeakMap/prototype/delete/returns-false-value-is-not-object.js fails
+built-ins/WeakMap/prototype/delete/returns-false-when-delete-is-noop.js fails
+built-ins/WeakMap/prototype/delete/this-not-object-throw-boolean.js fails
+built-ins/WeakMap/prototype/delete/this-not-object-throw-null.js fails
+built-ins/WeakMap/prototype/delete/this-not-object-throw-number.js fails
+built-ins/WeakMap/prototype/delete/this-not-object-throw-string.js fails
+built-ins/WeakMap/prototype/delete/this-not-object-throw-symbol.js fails
+built-ins/WeakMap/prototype/delete/this-not-object-throw-undefined.js fails
+built-ins/WeakMap/prototype/get/does-not-have-weakmapdata-internal-slot-map.js fails
+built-ins/WeakMap/prototype/get/does-not-have-weakmapdata-internal-slot-set.js fails
+built-ins/WeakMap/prototype/get/does-not-have-weakmapdata-internal-slot.js fails
+built-ins/WeakMap/prototype/get/get.js fails
+built-ins/WeakMap/prototype/get/length.js fails
+built-ins/WeakMap/prototype/get/name.js fails
+built-ins/WeakMap/prototype/get/returns-undefined-key-is-not-object.js fails
+built-ins/WeakMap/prototype/get/returns-undefined.js fails
+built-ins/WeakMap/prototype/get/returns-value.js fails
+built-ins/WeakMap/prototype/get/this-not-object-throw.js fails
+built-ins/WeakMap/prototype/has/does-not-have-weakmapdata-internal-slot-array.js fails
+built-ins/WeakMap/prototype/has/does-not-have-weakmapdata-internal-slot-map.js fails
+built-ins/WeakMap/prototype/has/does-not-have-weakmapdata-internal-slot-object.js fails
+built-ins/WeakMap/prototype/has/does-not-have-weakmapdata-internal-slot-set.js fails
+built-ins/WeakMap/prototype/has/does-not-have-weakmapdata-internal-slot-weakmap-prototype.js fails
+built-ins/WeakMap/prototype/has/has.js fails
+built-ins/WeakMap/prototype/has/length.js fails
+built-ins/WeakMap/prototype/has/name.js fails
+built-ins/WeakMap/prototype/has/returns-false-when-value-is-not-object.js fails
+built-ins/WeakMap/prototype/has/returns-false-when-value-not-present.js fails
+built-ins/WeakMap/prototype/has/returns-true-when-value-present.js fails
+built-ins/WeakMap/prototype/has/this-not-object-throw-boolean.js fails
+built-ins/WeakMap/prototype/has/this-not-object-throw-null.js fails
+built-ins/WeakMap/prototype/has/this-not-object-throw-number.js fails
+built-ins/WeakMap/prototype/has/this-not-object-throw-string.js fails
+built-ins/WeakMap/prototype/has/this-not-object-throw-symbol.js fails
+built-ins/WeakMap/prototype/has/this-not-object-throw-undefined.js fails
+built-ins/WeakMap/prototype/prototype-attributes.js fails
+built-ins/WeakMap/prototype/set/adds-element.js fails
+built-ins/WeakMap/prototype/set/does-not-have-weakmapdata-internal-slot-array.js fails
+built-ins/WeakMap/prototype/set/does-not-have-weakmapdata-internal-slot-map.js fails
+built-ins/WeakMap/prototype/set/does-not-have-weakmapdata-internal-slot-object.js fails
+built-ins/WeakMap/prototype/set/does-not-have-weakmapdata-internal-slot-set.js fails
+built-ins/WeakMap/prototype/set/does-not-have-weakmapdata-internal-slot-weakmap-prototype.js fails
+built-ins/WeakMap/prototype/set/key-not-object-throw.js fails
+built-ins/WeakMap/prototype/set/length.js fails
+built-ins/WeakMap/prototype/set/name.js fails
+built-ins/WeakMap/prototype/set/returns-this-when-ignoring-duplicate.js fails
+built-ins/WeakMap/prototype/set/returns-this.js fails
+built-ins/WeakMap/prototype/set/set.js fails
+built-ins/WeakMap/prototype/set/this-not-object-throw-boolean.js fails
+built-ins/WeakMap/prototype/set/this-not-object-throw-null.js fails
+built-ins/WeakMap/prototype/set/this-not-object-throw-number.js fails
+built-ins/WeakMap/prototype/set/this-not-object-throw-string.js fails
+built-ins/WeakMap/prototype/set/this-not-object-throw-symbol.js fails
+built-ins/WeakMap/prototype/set/this-not-object-throw-undefined.js fails
+built-ins/WeakMap/set-not-callable-throws.js fails
+built-ins/WeakMap/undefined-newtarget.js fails
+built-ins/WeakMap/weakmap.js fails
+built-ins/WeakSet/add-not-callable-throws.js fails
+built-ins/WeakSet/constructor.js fails
+built-ins/WeakSet/empty-iterable.js fails
+built-ins/WeakSet/get-add-method-failure.js fails
+built-ins/WeakSet/iterable-failure.js fails
+built-ins/WeakSet/iterable.js fails
+built-ins/WeakSet/iterator-close-after-add-failure.js fails
+built-ins/WeakSet/iterator-next-failure.js fails
+built-ins/WeakSet/iterator-value-failure.js fails
+built-ins/WeakSet/length.js fails
+built-ins/WeakSet/name.js fails
+built-ins/WeakSet/no-iterable.js fails
+built-ins/WeakSet/properties-of-the-weakset-prototype-object.js fails
+built-ins/WeakSet/proto-from-ctor-realm.js fails
+built-ins/WeakSet/prototype-of-weakset.js fails
+built-ins/WeakSet/prototype/Symbol.toStringTag.js fails
+built-ins/WeakSet/prototype/add/add.js fails
+built-ins/WeakSet/prototype/add/adds-element.js fails
+built-ins/WeakSet/prototype/add/does-not-have-weaksetdata-internal-slot-array.js fails
+built-ins/WeakSet/prototype/add/does-not-have-weaksetdata-internal-slot-map.js fails
+built-ins/WeakSet/prototype/add/does-not-have-weaksetdata-internal-slot-object.js fails
+built-ins/WeakSet/prototype/add/does-not-have-weaksetdata-internal-slot-set.js fails
+built-ins/WeakSet/prototype/add/does-not-have-weaksetdata-internal-slot-weakset-prototype.js fails
+built-ins/WeakSet/prototype/add/length.js fails
+built-ins/WeakSet/prototype/add/name.js fails
+built-ins/WeakSet/prototype/add/returns-this-when-ignoring-duplicate.js fails
+built-ins/WeakSet/prototype/add/returns-this.js fails
+built-ins/WeakSet/prototype/add/this-not-object-throw-boolean.js fails
+built-ins/WeakSet/prototype/add/this-not-object-throw-null.js fails
+built-ins/WeakSet/prototype/add/this-not-object-throw-number.js fails
+built-ins/WeakSet/prototype/add/this-not-object-throw-string.js fails
+built-ins/WeakSet/prototype/add/this-not-object-throw-symbol.js fails
+built-ins/WeakSet/prototype/add/this-not-object-throw-undefined.js fails
+built-ins/WeakSet/prototype/add/value-not-object-throw.js fails
+built-ins/WeakSet/prototype/constructor/weakset-prototype-constructor-intrinsic.js fails
+built-ins/WeakSet/prototype/constructor/weakset-prototype-constructor.js fails
+built-ins/WeakSet/prototype/delete/delete-entry-initial-iterable.js fails
+built-ins/WeakSet/prototype/delete/delete-entry.js fails
+built-ins/WeakSet/prototype/delete/delete.js fails
+built-ins/WeakSet/prototype/delete/does-not-have-weaksetdata-internal-slot-array.js fails
+built-ins/WeakSet/prototype/delete/does-not-have-weaksetdata-internal-slot-map.js fails
+built-ins/WeakSet/prototype/delete/does-not-have-weaksetdata-internal-slot-object.js fails
+built-ins/WeakSet/prototype/delete/does-not-have-weaksetdata-internal-slot-set.js fails
+built-ins/WeakSet/prototype/delete/does-not-have-weaksetdata-internal-slot-weakset-prototype.js fails
+built-ins/WeakSet/prototype/delete/length.js fails
+built-ins/WeakSet/prototype/delete/name.js fails
+built-ins/WeakSet/prototype/delete/returns-false-value-is-not-object.js fails
+built-ins/WeakSet/prototype/delete/returns-false-when-delete-is-noop.js fails
+built-ins/WeakSet/prototype/delete/this-not-object-throw-boolean.js fails
+built-ins/WeakSet/prototype/delete/this-not-object-throw-null.js fails
+built-ins/WeakSet/prototype/delete/this-not-object-throw-number.js fails
+built-ins/WeakSet/prototype/delete/this-not-object-throw-string.js fails
+built-ins/WeakSet/prototype/delete/this-not-object-throw-symbol.js fails
+built-ins/WeakSet/prototype/delete/this-not-object-throw-undefined.js fails
+built-ins/WeakSet/prototype/has/does-not-have-weaksetdata-internal-slot-array.js fails
+built-ins/WeakSet/prototype/has/does-not-have-weaksetdata-internal-slot-map.js fails
+built-ins/WeakSet/prototype/has/does-not-have-weaksetdata-internal-slot-object.js fails
+built-ins/WeakSet/prototype/has/does-not-have-weaksetdata-internal-slot-set.js fails
+built-ins/WeakSet/prototype/has/does-not-have-weaksetdata-internal-slot-weakset-prototype.js fails
+built-ins/WeakSet/prototype/has/has.js fails
+built-ins/WeakSet/prototype/has/length.js fails
+built-ins/WeakSet/prototype/has/name.js fails
+built-ins/WeakSet/prototype/has/returns-false-when-value-is-not-object.js fails
+built-ins/WeakSet/prototype/has/returns-false-when-value-not-present.js fails
+built-ins/WeakSet/prototype/has/returns-true-when-value-present.js fails
+built-ins/WeakSet/prototype/has/this-not-object-throw-boolean.js fails
+built-ins/WeakSet/prototype/has/this-not-object-throw-null.js fails
+built-ins/WeakSet/prototype/has/this-not-object-throw-number.js fails
+built-ins/WeakSet/prototype/has/this-not-object-throw-string.js fails
+built-ins/WeakSet/prototype/has/this-not-object-throw-symbol.js fails
+built-ins/WeakSet/prototype/has/this-not-object-throw-undefined.js fails
+built-ins/WeakSet/prototype/prototype-attributes.js fails
+built-ins/WeakSet/symbol-disallowed-as-weakset-key.js fails
+built-ins/WeakSet/undefined-newtarget.js fails
+built-ins/WeakSet/weakset.js fails
+built-ins/eval/length-non-configurable.js fails
+built-ins/global/global-object.js fails
+built-ins/global/property-descriptor.js fails
+built-ins/isFinite/toprimitive-not-callable-throws.js fails
+built-ins/isNaN/toprimitive-not-callable-throws.js fails
+language/arguments-object/cls-decl-gen-meth-args-trailing-comma-multiple.js fails
+language/arguments-object/cls-decl-gen-meth-args-trailing-comma-null.js fails
+language/arguments-object/cls-decl-gen-meth-args-trailing-comma-single-args.js fails
+language/arguments-object/cls-decl-gen-meth-args-trailing-comma-undefined.js fails
+language/arguments-object/cls-decl-gen-meth-static-args-trailing-comma-multiple.js fails
+language/arguments-object/cls-decl-gen-meth-static-args-trailing-comma-null.js fails
+language/arguments-object/cls-decl-gen-meth-static-args-trailing-comma-single-args.js fails
+language/arguments-object/cls-decl-gen-meth-static-args-trailing-comma-undefined.js fails
+language/arguments-object/cls-decl-meth-args-trailing-comma-multiple.js fails
+language/arguments-object/cls-decl-meth-args-trailing-comma-null.js fails
+language/arguments-object/cls-decl-meth-args-trailing-comma-single-args.js fails
+language/arguments-object/cls-decl-meth-args-trailing-comma-undefined.js fails
+language/arguments-object/cls-decl-meth-static-args-trailing-comma-multiple.js fails
+language/arguments-object/cls-decl-meth-static-args-trailing-comma-null.js fails
+language/arguments-object/cls-decl-meth-static-args-trailing-comma-single-args.js fails
+language/arguments-object/cls-decl-meth-static-args-trailing-comma-undefined.js fails
+language/arguments-object/cls-expr-gen-meth-args-trailing-comma-multiple.js fails
+language/arguments-object/cls-expr-gen-meth-args-trailing-comma-null.js fails
+language/arguments-object/cls-expr-gen-meth-args-trailing-comma-single-args.js fails
+language/arguments-object/cls-expr-gen-meth-args-trailing-comma-undefined.js fails
+language/arguments-object/cls-expr-gen-meth-static-args-trailing-comma-multiple.js fails
+language/arguments-object/cls-expr-gen-meth-static-args-trailing-comma-null.js fails
+language/arguments-object/cls-expr-gen-meth-static-args-trailing-comma-single-args.js fails
+language/arguments-object/cls-expr-gen-meth-static-args-trailing-comma-undefined.js fails
+language/arguments-object/cls-expr-meth-args-trailing-comma-multiple.js fails
+language/arguments-object/cls-expr-meth-args-trailing-comma-null.js fails
+language/arguments-object/cls-expr-meth-args-trailing-comma-single-args.js fails
+language/arguments-object/cls-expr-meth-args-trailing-comma-undefined.js fails
+language/arguments-object/cls-expr-meth-static-args-trailing-comma-multiple.js fails
+language/arguments-object/cls-expr-meth-static-args-trailing-comma-null.js fails
+language/arguments-object/cls-expr-meth-static-args-trailing-comma-single-args.js fails
+language/arguments-object/cls-expr-meth-static-args-trailing-comma-undefined.js fails
+language/arguments-object/mapped/mapped-arguments-nonconfigurable-2.js sloppyFails
+language/arguments-object/mapped/mapped-arguments-nonconfigurable-3.js sloppyFails
+language/arguments-object/mapped/mapped-arguments-nonconfigurable-4.js sloppyFails
+language/arguments-object/mapped/mapped-arguments-nonconfigurable-delete-2.js sloppyFails
+language/arguments-object/mapped/mapped-arguments-nonconfigurable-delete-3.js sloppyFails
+language/arguments-object/mapped/mapped-arguments-nonconfigurable-delete-4.js sloppyFails
+language/arguments-object/mapped/mapped-arguments-nonconfigurable-nonwritable-1.js sloppyFails
+language/arguments-object/mapped/mapped-arguments-nonconfigurable-nonwritable-3.js sloppyFails
+language/arguments-object/mapped/mapped-arguments-nonconfigurable-nonwritable-4.js sloppyFails
+language/arguments-object/mapped/mapped-arguments-nonconfigurable-nonwritable-5.js sloppyFails
+language/arguments-object/mapped/mapped-arguments-nonconfigurable-strict-delete-2.js sloppyFails
+language/arguments-object/mapped/mapped-arguments-nonconfigurable-strict-delete-3.js sloppyFails
+language/arguments-object/mapped/mapped-arguments-nonconfigurable-strict-delete-4.js sloppyFails
+language/arguments-object/mapped/mapped-arguments-nonwritable-nonconfigurable-1.js sloppyFails
+language/arguments-object/mapped/mapped-arguments-nonwritable-nonconfigurable-3.js sloppyFails
+language/arguments-object/mapped/mapped-arguments-nonwritable-nonconfigurable-4.js sloppyFails
+language/arguments-object/mapped/nonconfigurable-descriptors-set-value-by-arguments.js sloppyFails
+language/arguments-object/mapped/nonconfigurable-descriptors-set-value-with-define-property.js sloppyFails
+language/arguments-object/mapped/nonconfigurable-descriptors-with-param-assign.js sloppyFails
+language/arguments-object/mapped/nonconfigurable-nonenumerable-nonwritable-descriptors-set-by-arguments.js sloppyFails
+language/arguments-object/mapped/nonconfigurable-nonenumerable-nonwritable-descriptors-set-by-param.js sloppyFails
+language/arguments-object/mapped/nonconfigurable-nonwritable-descriptors-set-by-arguments.js sloppyFails
+language/arguments-object/mapped/nonconfigurable-nonwritable-descriptors-set-by-param.js sloppyFails
+language/arguments-object/mapped/nonwritable-nonconfigurable-descriptors-set-by-arguments.js sloppyFails
+language/computed-property-names/class/accessor/getter-duplicates.js fails
+language/computed-property-names/class/accessor/getter.js fails
+language/computed-property-names/class/accessor/setter-duplicates.js fails
+language/computed-property-names/class/accessor/setter.js fails
+language/computed-property-names/class/method/constructor-can-be-generator.js fails
+language/computed-property-names/class/method/constructor-can-be-getter.js fails
+language/computed-property-names/class/method/constructor-can-be-setter.js fails
+language/computed-property-names/class/method/constructor-duplicate-1.js fails
+language/computed-property-names/class/method/constructor-duplicate-2.js fails
+language/computed-property-names/class/method/constructor-duplicate-3.js fails
+language/computed-property-names/class/method/constructor.js fails
+language/computed-property-names/class/method/generator.js fails
+language/computed-property-names/class/method/number.js fails
+language/computed-property-names/class/method/string.js fails
+language/computed-property-names/class/method/symbol.js fails
+language/computed-property-names/class/static/generator-constructor.js fails
+language/computed-property-names/class/static/generator-prototype.js fails
+language/computed-property-names/class/static/getter-constructor.js fails
+language/computed-property-names/class/static/getter-prototype.js fails
+language/computed-property-names/class/static/method-constructor.js fails
+language/computed-property-names/class/static/method-number.js fails
+language/computed-property-names/class/static/method-prototype.js fails
+language/computed-property-names/class/static/method-string.js fails
+language/computed-property-names/class/static/method-symbol.js fails
+language/computed-property-names/class/static/setter-constructor.js fails
+language/computed-property-names/class/static/setter-prototype.js fails
+language/computed-property-names/object/accessor/getter-super.js fails
+language/computed-property-names/object/accessor/setter-super.js fails
+language/computed-property-names/object/method/super.js fails
+language/computed-property-names/to-name-side-effects/class.js fails
+language/computed-property-names/to-name-side-effects/numbers-class.js fails
+language/eval-code/direct/lex-env-distinct-cls.js fails
+language/eval-code/direct/lex-env-no-init-cls.js fails
+language/eval-code/direct/lex-env-no-init-const.js fails
+language/eval-code/direct/lex-env-no-init-let.js fails
+language/eval-code/direct/new.target-fn.js fails
+language/eval-code/direct/non-definable-function-with-function.js sloppyFails
+language/eval-code/direct/non-definable-function-with-variable.js sloppyFails
+language/eval-code/direct/non-definable-global-function.js sloppyFails
+language/eval-code/direct/non-definable-global-generator.js sloppyFails
+language/eval-code/direct/super-prop-method.js fails
+language/eval-code/direct/this-value-func-strict-source.js sloppyFails
+language/eval-code/direct/var-env-func-init-global-update-configurable.js sloppyFails
+language/eval-code/direct/var-env-global-lex-non-strict.js sloppyFails
+language/eval-code/direct/var-env-lower-lex-catch-non-strict.js sloppyFails
+language/eval-code/direct/var-env-lower-lex-non-strict.js sloppyFails
+language/eval-code/indirect/always-non-strict.js strictFails
+language/eval-code/indirect/lex-env-distinct-cls.js fails
+language/eval-code/indirect/lex-env-no-init-cls.js fails
+language/eval-code/indirect/lex-env-no-init-const.js fails
+language/eval-code/indirect/lex-env-no-init-let.js fails
+language/eval-code/indirect/non-definable-function-with-function.js sloppyFails
+language/eval-code/indirect/non-definable-function-with-variable.js sloppyFails
+language/eval-code/indirect/non-definable-global-function.js fails
+language/eval-code/indirect/non-definable-global-generator.js fails
+language/eval-code/indirect/realm.js fails
+language/eval-code/indirect/this-value-func.js strictFails
+language/eval-code/indirect/var-env-func-init-global-new.js strictFails
+language/eval-code/indirect/var-env-func-init-global-update-configurable.js fails
+language/eval-code/indirect/var-env-func-init-multi.js strictFails
+language/eval-code/indirect/var-env-func-non-strict.js strictFails
+language/eval-code/indirect/var-env-global-lex-non-strict.js fails
+language/eval-code/indirect/var-env-var-init-global-exstng.js strictFails
+language/eval-code/indirect/var-env-var-init-global-new.js strictFails
+language/eval-code/indirect/var-env-var-non-strict.js strictFails
+language/expressions/arrow-function/cannot-override-this-with-thisArg.js fails
+language/expressions/arrow-function/dflt-params-ref-later.js fails
+language/expressions/arrow-function/dflt-params-ref-self.js fails
+language/expressions/arrow-function/dstr-ary-ptrn-elem-id-init-fn-name-class.js fails
+language/expressions/arrow-function/dstr-dflt-ary-ptrn-elem-id-init-fn-name-class.js fails
+language/expressions/arrow-function/dstr-dflt-obj-ptrn-id-init-fn-name-class.js fails
+language/expressions/arrow-function/dstr-obj-ptrn-id-init-fn-name-class.js fails
+language/expressions/arrow-function/lexical-arguments.js fails
+language/expressions/arrow-function/lexical-new.target-closure-returned.js fails
+language/expressions/arrow-function/lexical-new.target.js fails
+language/expressions/arrow-function/lexical-super-call-from-within-constructor.js fails
+language/expressions/arrow-function/lexical-super-property-from-within-constructor.js fails
+language/expressions/arrow-function/lexical-super-property.js fails
+language/expressions/arrow-function/lexical-supercall-from-immediately-invoked-arrow.js fails
+language/expressions/arrow-function/lexical-this.js fails
+language/expressions/arrow-function/prototype-rules.js fails
+language/expressions/arrow-function/scope-body-lex-distinct.js sloppyFails
+language/expressions/arrow-function/scope-param-elem-var-close.js sloppyFails
+language/expressions/arrow-function/scope-param-elem-var-open.js sloppyFails
+language/expressions/arrow-function/scope-param-rest-elem-var-close.js sloppyFails
+language/expressions/arrow-function/scope-param-rest-elem-var-open.js sloppyFails
+language/expressions/arrow-function/scope-paramsbody-var-open.js fails
+language/expressions/arrow-function/throw-new.js fails
+language/expressions/assignment/S11.13.1_A5_T1.js sloppyFails
+language/expressions/assignment/S11.13.1_A5_T2.js sloppyFails
+language/expressions/assignment/S11.13.1_A5_T3.js sloppyFails
+language/expressions/assignment/S11.13.1_A5_T4.js sloppyFails
+language/expressions/assignment/S11.13.1_A5_T5.js fails
+language/expressions/assignment/S11.13.1_A6_T1.js sloppyFails
+language/expressions/assignment/S11.13.1_A6_T2.js sloppyFails
+language/expressions/assignment/S11.13.1_A6_T3.js sloppyFails
+language/expressions/assignment/S11.13.1_A7_T1.js fails
+language/expressions/assignment/S11.13.1_A7_T2.js fails
+language/expressions/assignment/S11.13.1_A7_T3.js fails
+language/expressions/assignment/destructuring/iterator-destructuring-property-reference-target-evaluation-order.js fails
+language/expressions/assignment/destructuring/keyed-destructuring-property-reference-target-evaluation-order.js fails
+language/expressions/assignment/dstr-array-elem-init-fn-name-class.js fails
+language/expressions/assignment/dstr-array-elem-init-let.js fails
+language/expressions/assignment/dstr-array-elem-iter-rtrn-close-err.js fails
+language/expressions/assignment/dstr-array-elem-iter-rtrn-close-null.js fails
+language/expressions/assignment/dstr-array-elem-iter-rtrn-close.js fails
+language/expressions/assignment/dstr-array-elem-iter-thrw-close-err.js fails
+language/expressions/assignment/dstr-array-elem-iter-thrw-close.js fails
+language/expressions/assignment/dstr-array-elem-put-const.js fails
+language/expressions/assignment/dstr-array-elem-put-let.js fails
+language/expressions/assignment/dstr-array-elem-trlg-iter-list-rtrn-close-err.js fails
+language/expressions/assignment/dstr-array-elem-trlg-iter-list-rtrn-close-null.js fails
+language/expressions/assignment/dstr-array-elem-trlg-iter-list-rtrn-close.js fails
+language/expressions/assignment/dstr-array-elem-trlg-iter-list-thrw-close-err.js fails
+language/expressions/assignment/dstr-array-elem-trlg-iter-list-thrw-close.js fails
+language/expressions/assignment/dstr-array-elem-trlg-iter-rest-rtrn-close-err.js fails
+language/expressions/assignment/dstr-array-elem-trlg-iter-rest-rtrn-close-null.js fails
+language/expressions/assignment/dstr-array-elem-trlg-iter-rest-rtrn-close.js fails
+language/expressions/assignment/dstr-array-elem-trlg-iter-rest-thrw-close-err.js fails
+language/expressions/assignment/dstr-array-elem-trlg-iter-rest-thrw-close.js fails
+language/expressions/assignment/dstr-array-rest-iter-rtrn-close-err.js fails
+language/expressions/assignment/dstr-array-rest-iter-rtrn-close-null.js fails
+language/expressions/assignment/dstr-array-rest-iter-rtrn-close.js fails
+language/expressions/assignment/dstr-array-rest-iter-thrw-close-err.js fails
+language/expressions/assignment/dstr-array-rest-iter-thrw-close.js fails
+language/expressions/assignment/dstr-array-rest-lref-err.js fails
+language/expressions/assignment/dstr-array-rest-put-const.js fails
+language/expressions/assignment/dstr-array-rest-put-let.js fails
+language/expressions/assignment/dstr-obj-empty-null.js fails
+language/expressions/assignment/dstr-obj-empty-undef.js fails
+language/expressions/assignment/dstr-obj-id-init-fn-name-class.js fails
+language/expressions/assignment/dstr-obj-id-init-let.js fails
+language/expressions/assignment/dstr-obj-id-put-const.js fails
+language/expressions/assignment/dstr-obj-id-put-let.js fails
+language/expressions/assignment/dstr-obj-prop-elem-init-fn-name-class.js fails
+language/expressions/assignment/dstr-obj-prop-elem-init-let.js fails
+language/expressions/assignment/dstr-obj-prop-put-const.js fails
+language/expressions/assignment/dstr-obj-prop-put-let.js fails
+language/expressions/assignment/fn-name-class.js fails
+language/expressions/assignment/fn-name-lhs-cover.js fails
+language/expressions/assignment/fn-name-lhs-member.js fails
+language/expressions/async-function/expression-returns-promise.js fails
+language/expressions/async-function/syntax-expression-is-PrimaryExpression.js fails
+language/expressions/await/await-BindingIdentifier-in-global.js fails
+language/expressions/await/await-in-nested-function.js fails
+language/expressions/await/await-in-nested-generator.js fails
+language/expressions/await/await-throws-rejections.js fails
+language/expressions/call/11.2.3-3_3.js fails
+language/expressions/call/eval-realm-indirect.js sloppyFails
+language/expressions/call/eval-spread-empty-leading.js fails
+language/expressions/call/eval-spread-empty-trailing.js fails
+language/expressions/call/eval-spread.js fails
+language/expressions/call/scope-lex-open.js fails
+language/expressions/call/tco-call-args.js strictFails
+language/expressions/call/tco-cross-realm-class-construct.js fails
+language/expressions/call/tco-cross-realm-class-derived-construct.js fails
+language/expressions/call/tco-cross-realm-fun-call.js fails
+language/expressions/call/tco-cross-realm-fun-construct.js fails
+language/expressions/call/tco-member-args.js strictFails
+language/expressions/call/tco-non-eval-function-dynamic.js sloppyFails
+language/expressions/call/tco-non-eval-function.js sloppyFails
+language/expressions/call/tco-non-eval-global.js sloppyFails
+language/expressions/call/tco-non-eval-with.js sloppyFails
+language/expressions/class/accessor-name-inst-computed-err-evaluation.js fails
+language/expressions/class/accessor-name-inst-computed-err-to-prop-key.js fails
+language/expressions/class/accessor-name-inst-computed-err-unresolvable.js fails
+language/expressions/class/accessor-name-inst-computed-in.js fails
+language/expressions/class/accessor-name-inst-computed-yield-expr.js fails
+language/expressions/class/accessor-name-inst-computed.js fails
+language/expressions/class/accessor-name-inst-literal-numeric-binary.js fails
+language/expressions/class/accessor-name-inst-literal-numeric-exponent.js fails
+language/expressions/class/accessor-name-inst-literal-numeric-hex.js fails
+language/expressions/class/accessor-name-inst-literal-numeric-leading-decimal.js fails
+language/expressions/class/accessor-name-inst-literal-numeric-non-canonical.js fails
+language/expressions/class/accessor-name-inst-literal-numeric-octal.js fails
+language/expressions/class/accessor-name-inst-literal-numeric-zero.js fails
+language/expressions/class/accessor-name-inst-literal-string-char-escape.js fails
+language/expressions/class/accessor-name-inst-literal-string-double-quote.js fails
+language/expressions/class/accessor-name-inst-literal-string-empty.js fails
+language/expressions/class/accessor-name-inst-literal-string-hex-escape.js fails
+language/expressions/class/accessor-name-inst-literal-string-line-continuation.js fails
+language/expressions/class/accessor-name-inst-literal-string-single-quote.js fails
+language/expressions/class/accessor-name-inst-literal-string-unicode-escape.js fails
+language/expressions/class/accessor-name-static-computed-err-evaluation.js fails
+language/expressions/class/accessor-name-static-computed-err-to-prop-key.js fails
+language/expressions/class/accessor-name-static-computed-err-unresolvable.js fails
+language/expressions/class/accessor-name-static-computed-in.js fails
+language/expressions/class/accessor-name-static-computed-yield-expr.js fails
+language/expressions/class/accessor-name-static-computed.js fails
+language/expressions/class/accessor-name-static-literal-numeric-binary.js fails
+language/expressions/class/accessor-name-static-literal-numeric-exponent.js fails
+language/expressions/class/accessor-name-static-literal-numeric-hex.js fails
+language/expressions/class/accessor-name-static-literal-numeric-leading-decimal.js fails
+language/expressions/class/accessor-name-static-literal-numeric-non-canonical.js fails
+language/expressions/class/accessor-name-static-literal-numeric-octal.js fails
+language/expressions/class/accessor-name-static-literal-numeric-zero.js fails
+language/expressions/class/accessor-name-static-literal-string-char-escape.js fails
+language/expressions/class/accessor-name-static-literal-string-double-quote.js fails
+language/expressions/class/accessor-name-static-literal-string-empty.js fails
+language/expressions/class/accessor-name-static-literal-string-hex-escape.js fails
+language/expressions/class/accessor-name-static-literal-string-line-continuation.js fails
+language/expressions/class/accessor-name-static-literal-string-single-quote.js fails
+language/expressions/class/accessor-name-static-literal-string-unicode-escape.js fails
+language/expressions/class/dstr-gen-meth-ary-init-iter-close.js fails
+language/expressions/class/dstr-gen-meth-ary-init-iter-get-err.js fails
+language/expressions/class/dstr-gen-meth-ary-init-iter-no-close.js fails
+language/expressions/class/dstr-gen-meth-ary-name-iter-val.js fails
+language/expressions/class/dstr-gen-meth-ary-ptrn-elem-ary-elem-init.js fails
+language/expressions/class/dstr-gen-meth-ary-ptrn-elem-ary-elem-iter.js fails
+language/expressions/class/dstr-gen-meth-ary-ptrn-elem-ary-elision-init.js fails
+language/expressions/class/dstr-gen-meth-ary-ptrn-elem-ary-elision-iter.js fails
+language/expressions/class/dstr-gen-meth-ary-ptrn-elem-ary-empty-init.js fails
+language/expressions/class/dstr-gen-meth-ary-ptrn-elem-ary-empty-iter.js fails
+language/expressions/class/dstr-gen-meth-ary-ptrn-elem-ary-rest-init.js fails
+language/expressions/class/dstr-gen-meth-ary-ptrn-elem-ary-rest-iter.js fails
+language/expressions/class/dstr-gen-meth-ary-ptrn-elem-ary-val-null.js fails
+language/expressions/class/dstr-gen-meth-ary-ptrn-elem-id-init-exhausted.js fails
+language/expressions/class/dstr-gen-meth-ary-ptrn-elem-id-init-fn-name-arrow.js fails
+language/expressions/class/dstr-gen-meth-ary-ptrn-elem-id-init-fn-name-class.js fails
+language/expressions/class/dstr-gen-meth-ary-ptrn-elem-id-init-fn-name-cover.js fails
+language/expressions/class/dstr-gen-meth-ary-ptrn-elem-id-init-fn-name-fn.js fails
+language/expressions/class/dstr-gen-meth-ary-ptrn-elem-id-init-fn-name-gen.js fails
+language/expressions/class/dstr-gen-meth-ary-ptrn-elem-id-init-hole.js fails
+language/expressions/class/dstr-gen-meth-ary-ptrn-elem-id-init-skipped.js fails
+language/expressions/class/dstr-gen-meth-ary-ptrn-elem-id-init-throws.js fails
+language/expressions/class/dstr-gen-meth-ary-ptrn-elem-id-init-undef.js fails
+language/expressions/class/dstr-gen-meth-ary-ptrn-elem-id-init-unresolvable.js fails
+language/expressions/class/dstr-gen-meth-ary-ptrn-elem-id-iter-complete.js fails
+language/expressions/class/dstr-gen-meth-ary-ptrn-elem-id-iter-done.js fails
+language/expressions/class/dstr-gen-meth-ary-ptrn-elem-id-iter-step-err.js fails
+language/expressions/class/dstr-gen-meth-ary-ptrn-elem-id-iter-val-err.js fails
+language/expressions/class/dstr-gen-meth-ary-ptrn-elem-id-iter-val.js fails
+language/expressions/class/dstr-gen-meth-ary-ptrn-elem-obj-id-init.js fails
+language/expressions/class/dstr-gen-meth-ary-ptrn-elem-obj-id.js fails
+language/expressions/class/dstr-gen-meth-ary-ptrn-elem-obj-prop-id-init.js fails
+language/expressions/class/dstr-gen-meth-ary-ptrn-elem-obj-prop-id.js fails
+language/expressions/class/dstr-gen-meth-ary-ptrn-elem-obj-val-null.js fails
+language/expressions/class/dstr-gen-meth-ary-ptrn-elem-obj-val-undef.js fails
+language/expressions/class/dstr-gen-meth-ary-ptrn-elision-exhausted.js fails
+language/expressions/class/dstr-gen-meth-ary-ptrn-elision-step-err.js fails
+language/expressions/class/dstr-gen-meth-ary-ptrn-elision.js fails
+language/expressions/class/dstr-gen-meth-ary-ptrn-empty.js fails
+language/expressions/class/dstr-gen-meth-ary-ptrn-rest-ary-elem.js fails
+language/expressions/class/dstr-gen-meth-ary-ptrn-rest-ary-elision.js fails
+language/expressions/class/dstr-gen-meth-ary-ptrn-rest-ary-empty.js fails
+language/expressions/class/dstr-gen-meth-ary-ptrn-rest-ary-rest.js fails
+language/expressions/class/dstr-gen-meth-ary-ptrn-rest-id-elision-next-err.js fails
+language/expressions/class/dstr-gen-meth-ary-ptrn-rest-id-elision.js fails
+language/expressions/class/dstr-gen-meth-ary-ptrn-rest-id-exhausted.js fails
+language/expressions/class/dstr-gen-meth-ary-ptrn-rest-id-iter-step-err.js fails
+language/expressions/class/dstr-gen-meth-ary-ptrn-rest-id-iter-val-err.js fails
+language/expressions/class/dstr-gen-meth-ary-ptrn-rest-id.js fails
+language/expressions/class/dstr-gen-meth-ary-ptrn-rest-obj-id.js fails
+language/expressions/class/dstr-gen-meth-ary-ptrn-rest-obj-prop-id.js fails
+language/expressions/class/dstr-gen-meth-dflt-ary-init-iter-close.js fails
+language/expressions/class/dstr-gen-meth-dflt-ary-init-iter-get-err.js fails
+language/expressions/class/dstr-gen-meth-dflt-ary-init-iter-no-close.js fails
+language/expressions/class/dstr-gen-meth-dflt-ary-name-iter-val.js fails
+language/expressions/class/dstr-gen-meth-dflt-ary-ptrn-elem-ary-elem-init.js fails
+language/expressions/class/dstr-gen-meth-dflt-ary-ptrn-elem-ary-elem-iter.js fails
+language/expressions/class/dstr-gen-meth-dflt-ary-ptrn-elem-ary-elision-init.js fails
+language/expressions/class/dstr-gen-meth-dflt-ary-ptrn-elem-ary-elision-iter.js fails
+language/expressions/class/dstr-gen-meth-dflt-ary-ptrn-elem-ary-empty-init.js fails
+language/expressions/class/dstr-gen-meth-dflt-ary-ptrn-elem-ary-empty-iter.js fails
+language/expressions/class/dstr-gen-meth-dflt-ary-ptrn-elem-ary-rest-init.js fails
+language/expressions/class/dstr-gen-meth-dflt-ary-ptrn-elem-ary-rest-iter.js fails
+language/expressions/class/dstr-gen-meth-dflt-ary-ptrn-elem-ary-val-null.js fails
+language/expressions/class/dstr-gen-meth-dflt-ary-ptrn-elem-id-init-exhausted.js fails
+language/expressions/class/dstr-gen-meth-dflt-ary-ptrn-elem-id-init-fn-name-arrow.js fails
+language/expressions/class/dstr-gen-meth-dflt-ary-ptrn-elem-id-init-fn-name-class.js fails
+language/expressions/class/dstr-gen-meth-dflt-ary-ptrn-elem-id-init-fn-name-cover.js fails
+language/expressions/class/dstr-gen-meth-dflt-ary-ptrn-elem-id-init-fn-name-fn.js fails
+language/expressions/class/dstr-gen-meth-dflt-ary-ptrn-elem-id-init-fn-name-gen.js fails
+language/expressions/class/dstr-gen-meth-dflt-ary-ptrn-elem-id-init-hole.js fails
+language/expressions/class/dstr-gen-meth-dflt-ary-ptrn-elem-id-init-skipped.js fails
+language/expressions/class/dstr-gen-meth-dflt-ary-ptrn-elem-id-init-throws.js fails
+language/expressions/class/dstr-gen-meth-dflt-ary-ptrn-elem-id-init-undef.js fails
+language/expressions/class/dstr-gen-meth-dflt-ary-ptrn-elem-id-init-unresolvable.js fails
+language/expressions/class/dstr-gen-meth-dflt-ary-ptrn-elem-id-iter-complete.js fails
+language/expressions/class/dstr-gen-meth-dflt-ary-ptrn-elem-id-iter-done.js fails
+language/expressions/class/dstr-gen-meth-dflt-ary-ptrn-elem-id-iter-step-err.js fails
+language/expressions/class/dstr-gen-meth-dflt-ary-ptrn-elem-id-iter-val-err.js fails
+language/expressions/class/dstr-gen-meth-dflt-ary-ptrn-elem-id-iter-val.js fails
+language/expressions/class/dstr-gen-meth-dflt-ary-ptrn-elem-obj-id-init.js fails
+language/expressions/class/dstr-gen-meth-dflt-ary-ptrn-elem-obj-id.js fails
+language/expressions/class/dstr-gen-meth-dflt-ary-ptrn-elem-obj-prop-id-init.js fails
+language/expressions/class/dstr-gen-meth-dflt-ary-ptrn-elem-obj-prop-id.js fails
+language/expressions/class/dstr-gen-meth-dflt-ary-ptrn-elem-obj-val-null.js fails
+language/expressions/class/dstr-gen-meth-dflt-ary-ptrn-elem-obj-val-undef.js fails
+language/expressions/class/dstr-gen-meth-dflt-ary-ptrn-elision-exhausted.js fails
+language/expressions/class/dstr-gen-meth-dflt-ary-ptrn-elision-step-err.js fails
+language/expressions/class/dstr-gen-meth-dflt-ary-ptrn-elision.js fails
+language/expressions/class/dstr-gen-meth-dflt-ary-ptrn-empty.js fails
+language/expressions/class/dstr-gen-meth-dflt-ary-ptrn-rest-ary-elem.js fails
+language/expressions/class/dstr-gen-meth-dflt-ary-ptrn-rest-ary-elision.js fails
+language/expressions/class/dstr-gen-meth-dflt-ary-ptrn-rest-ary-empty.js fails
+language/expressions/class/dstr-gen-meth-dflt-ary-ptrn-rest-ary-rest.js fails
+language/expressions/class/dstr-gen-meth-dflt-ary-ptrn-rest-id-elision-next-err.js fails
+language/expressions/class/dstr-gen-meth-dflt-ary-ptrn-rest-id-elision.js fails
+language/expressions/class/dstr-gen-meth-dflt-ary-ptrn-rest-id-exhausted.js fails
+language/expressions/class/dstr-gen-meth-dflt-ary-ptrn-rest-id-iter-step-err.js fails
+language/expressions/class/dstr-gen-meth-dflt-ary-ptrn-rest-id-iter-val-err.js fails
+language/expressions/class/dstr-gen-meth-dflt-ary-ptrn-rest-id.js fails
+language/expressions/class/dstr-gen-meth-dflt-ary-ptrn-rest-obj-id.js fails
+language/expressions/class/dstr-gen-meth-dflt-ary-ptrn-rest-obj-prop-id.js fails
+language/expressions/class/dstr-gen-meth-dflt-obj-init-null.js fails
+language/expressions/class/dstr-gen-meth-dflt-obj-init-undefined.js fails
+language/expressions/class/dstr-gen-meth-dflt-obj-ptrn-empty.js fails
+language/expressions/class/dstr-gen-meth-dflt-obj-ptrn-id-get-value-err.js fails
+language/expressions/class/dstr-gen-meth-dflt-obj-ptrn-id-init-fn-name-arrow.js fails
+language/expressions/class/dstr-gen-meth-dflt-obj-ptrn-id-init-fn-name-class.js fails
+language/expressions/class/dstr-gen-meth-dflt-obj-ptrn-id-init-fn-name-cover.js fails
+language/expressions/class/dstr-gen-meth-dflt-obj-ptrn-id-init-fn-name-fn.js fails
+language/expressions/class/dstr-gen-meth-dflt-obj-ptrn-id-init-fn-name-gen.js fails
+language/expressions/class/dstr-gen-meth-dflt-obj-ptrn-id-init-skipped.js fails
+language/expressions/class/dstr-gen-meth-dflt-obj-ptrn-id-init-throws.js fails
+language/expressions/class/dstr-gen-meth-dflt-obj-ptrn-id-init-unresolvable.js fails
+language/expressions/class/dstr-gen-meth-dflt-obj-ptrn-id-trailing-comma.js fails
+language/expressions/class/dstr-gen-meth-dflt-obj-ptrn-list-err.js fails
+language/expressions/class/dstr-gen-meth-dflt-obj-ptrn-prop-ary-init.js fails
+language/expressions/class/dstr-gen-meth-dflt-obj-ptrn-prop-ary-trailing-comma.js fails
+language/expressions/class/dstr-gen-meth-dflt-obj-ptrn-prop-ary-value-null.js fails
+language/expressions/class/dstr-gen-meth-dflt-obj-ptrn-prop-ary.js fails
+language/expressions/class/dstr-gen-meth-dflt-obj-ptrn-prop-eval-err.js fails
+language/expressions/class/dstr-gen-meth-dflt-obj-ptrn-prop-id-get-value-err.js fails
+language/expressions/class/dstr-gen-meth-dflt-obj-ptrn-prop-id-init-skipped.js fails
+language/expressions/class/dstr-gen-meth-dflt-obj-ptrn-prop-id-init-throws.js fails
+language/expressions/class/dstr-gen-meth-dflt-obj-ptrn-prop-id-init-unresolvable.js fails
+language/expressions/class/dstr-gen-meth-dflt-obj-ptrn-prop-id-init.js fails
+language/expressions/class/dstr-gen-meth-dflt-obj-ptrn-prop-id-trailing-comma.js fails
+language/expressions/class/dstr-gen-meth-dflt-obj-ptrn-prop-id.js fails
+language/expressions/class/dstr-gen-meth-dflt-obj-ptrn-prop-obj-init.js fails
+language/expressions/class/dstr-gen-meth-dflt-obj-ptrn-prop-obj-value-null.js fails
+language/expressions/class/dstr-gen-meth-dflt-obj-ptrn-prop-obj-value-undef.js fails
+language/expressions/class/dstr-gen-meth-dflt-obj-ptrn-prop-obj.js fails
+language/expressions/class/dstr-gen-meth-obj-init-null.js fails
+language/expressions/class/dstr-gen-meth-obj-init-undefined.js fails
+language/expressions/class/dstr-gen-meth-obj-ptrn-empty.js fails
+language/expressions/class/dstr-gen-meth-obj-ptrn-id-get-value-err.js fails
+language/expressions/class/dstr-gen-meth-obj-ptrn-id-init-fn-name-arrow.js fails
+language/expressions/class/dstr-gen-meth-obj-ptrn-id-init-fn-name-class.js fails
+language/expressions/class/dstr-gen-meth-obj-ptrn-id-init-fn-name-cover.js fails
+language/expressions/class/dstr-gen-meth-obj-ptrn-id-init-fn-name-fn.js fails
+language/expressions/class/dstr-gen-meth-obj-ptrn-id-init-fn-name-gen.js fails
+language/expressions/class/dstr-gen-meth-obj-ptrn-id-init-skipped.js fails
+language/expressions/class/dstr-gen-meth-obj-ptrn-id-init-throws.js fails
+language/expressions/class/dstr-gen-meth-obj-ptrn-id-init-unresolvable.js fails
+language/expressions/class/dstr-gen-meth-obj-ptrn-id-trailing-comma.js fails
+language/expressions/class/dstr-gen-meth-obj-ptrn-list-err.js fails
+language/expressions/class/dstr-gen-meth-obj-ptrn-prop-ary-init.js fails
+language/expressions/class/dstr-gen-meth-obj-ptrn-prop-ary-trailing-comma.js fails
+language/expressions/class/dstr-gen-meth-obj-ptrn-prop-ary-value-null.js fails
+language/expressions/class/dstr-gen-meth-obj-ptrn-prop-ary.js fails
+language/expressions/class/dstr-gen-meth-obj-ptrn-prop-eval-err.js fails
+language/expressions/class/dstr-gen-meth-obj-ptrn-prop-id-get-value-err.js fails
+language/expressions/class/dstr-gen-meth-obj-ptrn-prop-id-init-skipped.js fails
+language/expressions/class/dstr-gen-meth-obj-ptrn-prop-id-init-throws.js fails
+language/expressions/class/dstr-gen-meth-obj-ptrn-prop-id-init-unresolvable.js fails
+language/expressions/class/dstr-gen-meth-obj-ptrn-prop-id-init.js fails
+language/expressions/class/dstr-gen-meth-obj-ptrn-prop-id-trailing-comma.js fails
+language/expressions/class/dstr-gen-meth-obj-ptrn-prop-id.js fails
+language/expressions/class/dstr-gen-meth-obj-ptrn-prop-obj-init.js fails
+language/expressions/class/dstr-gen-meth-obj-ptrn-prop-obj-value-null.js fails
+language/expressions/class/dstr-gen-meth-obj-ptrn-prop-obj-value-undef.js fails
+language/expressions/class/dstr-gen-meth-obj-ptrn-prop-obj.js fails
+language/expressions/class/dstr-gen-meth-static-ary-init-iter-close.js fails
+language/expressions/class/dstr-gen-meth-static-ary-init-iter-get-err.js fails
+language/expressions/class/dstr-gen-meth-static-ary-init-iter-no-close.js fails
+language/expressions/class/dstr-gen-meth-static-ary-name-iter-val.js fails
+language/expressions/class/dstr-gen-meth-static-ary-ptrn-elem-ary-elem-init.js fails
+language/expressions/class/dstr-gen-meth-static-ary-ptrn-elem-ary-elem-iter.js fails
+language/expressions/class/dstr-gen-meth-static-ary-ptrn-elem-ary-elision-init.js fails
+language/expressions/class/dstr-gen-meth-static-ary-ptrn-elem-ary-elision-iter.js fails
+language/expressions/class/dstr-gen-meth-static-ary-ptrn-elem-ary-empty-init.js fails
+language/expressions/class/dstr-gen-meth-static-ary-ptrn-elem-ary-empty-iter.js fails
+language/expressions/class/dstr-gen-meth-static-ary-ptrn-elem-ary-rest-init.js fails
+language/expressions/class/dstr-gen-meth-static-ary-ptrn-elem-ary-rest-iter.js fails
+language/expressions/class/dstr-gen-meth-static-ary-ptrn-elem-ary-val-null.js fails
+language/expressions/class/dstr-gen-meth-static-ary-ptrn-elem-id-init-exhausted.js fails
+language/expressions/class/dstr-gen-meth-static-ary-ptrn-elem-id-init-fn-name-arrow.js fails
+language/expressions/class/dstr-gen-meth-static-ary-ptrn-elem-id-init-fn-name-class.js fails
+language/expressions/class/dstr-gen-meth-static-ary-ptrn-elem-id-init-fn-name-cover.js fails
+language/expressions/class/dstr-gen-meth-static-ary-ptrn-elem-id-init-fn-name-fn.js fails
+language/expressions/class/dstr-gen-meth-static-ary-ptrn-elem-id-init-fn-name-gen.js fails
+language/expressions/class/dstr-gen-meth-static-ary-ptrn-elem-id-init-hole.js fails
+language/expressions/class/dstr-gen-meth-static-ary-ptrn-elem-id-init-skipped.js fails
+language/expressions/class/dstr-gen-meth-static-ary-ptrn-elem-id-init-throws.js fails
+language/expressions/class/dstr-gen-meth-static-ary-ptrn-elem-id-init-undef.js fails
+language/expressions/class/dstr-gen-meth-static-ary-ptrn-elem-id-init-unresolvable.js fails
+language/expressions/class/dstr-gen-meth-static-ary-ptrn-elem-id-iter-complete.js fails
+language/expressions/class/dstr-gen-meth-static-ary-ptrn-elem-id-iter-done.js fails
+language/expressions/class/dstr-gen-meth-static-ary-ptrn-elem-id-iter-step-err.js fails
+language/expressions/class/dstr-gen-meth-static-ary-ptrn-elem-id-iter-val-err.js fails
+language/expressions/class/dstr-gen-meth-static-ary-ptrn-elem-id-iter-val.js fails
+language/expressions/class/dstr-gen-meth-static-ary-ptrn-elem-obj-id-init.js fails
+language/expressions/class/dstr-gen-meth-static-ary-ptrn-elem-obj-id.js fails
+language/expressions/class/dstr-gen-meth-static-ary-ptrn-elem-obj-prop-id-init.js fails
+language/expressions/class/dstr-gen-meth-static-ary-ptrn-elem-obj-prop-id.js fails
+language/expressions/class/dstr-gen-meth-static-ary-ptrn-elem-obj-val-null.js fails
+language/expressions/class/dstr-gen-meth-static-ary-ptrn-elem-obj-val-undef.js fails
+language/expressions/class/dstr-gen-meth-static-ary-ptrn-elision-exhausted.js fails
+language/expressions/class/dstr-gen-meth-static-ary-ptrn-elision-step-err.js fails
+language/expressions/class/dstr-gen-meth-static-ary-ptrn-elision.js fails
+language/expressions/class/dstr-gen-meth-static-ary-ptrn-empty.js fails
+language/expressions/class/dstr-gen-meth-static-ary-ptrn-rest-ary-elem.js fails
+language/expressions/class/dstr-gen-meth-static-ary-ptrn-rest-ary-elision.js fails
+language/expressions/class/dstr-gen-meth-static-ary-ptrn-rest-ary-empty.js fails
+language/expressions/class/dstr-gen-meth-static-ary-ptrn-rest-ary-rest.js fails
+language/expressions/class/dstr-gen-meth-static-ary-ptrn-rest-id-elision-next-err.js fails
+language/expressions/class/dstr-gen-meth-static-ary-ptrn-rest-id-elision.js fails
+language/expressions/class/dstr-gen-meth-static-ary-ptrn-rest-id-exhausted.js fails
+language/expressions/class/dstr-gen-meth-static-ary-ptrn-rest-id-iter-step-err.js fails
+language/expressions/class/dstr-gen-meth-static-ary-ptrn-rest-id-iter-val-err.js fails
+language/expressions/class/dstr-gen-meth-static-ary-ptrn-rest-id.js fails
+language/expressions/class/dstr-gen-meth-static-ary-ptrn-rest-obj-id.js fails
+language/expressions/class/dstr-gen-meth-static-ary-ptrn-rest-obj-prop-id.js fails
+language/expressions/class/dstr-gen-meth-static-dflt-ary-init-iter-close.js fails
+language/expressions/class/dstr-gen-meth-static-dflt-ary-init-iter-get-err.js fails
+language/expressions/class/dstr-gen-meth-static-dflt-ary-init-iter-no-close.js fails
+language/expressions/class/dstr-gen-meth-static-dflt-ary-name-iter-val.js fails
+language/expressions/class/dstr-gen-meth-static-dflt-ary-ptrn-elem-ary-elem-init.js fails
+language/expressions/class/dstr-gen-meth-static-dflt-ary-ptrn-elem-ary-elem-iter.js fails
+language/expressions/class/dstr-gen-meth-static-dflt-ary-ptrn-elem-ary-elision-init.js fails
+language/expressions/class/dstr-gen-meth-static-dflt-ary-ptrn-elem-ary-elision-iter.js fails
+language/expressions/class/dstr-gen-meth-static-dflt-ary-ptrn-elem-ary-empty-init.js fails
+language/expressions/class/dstr-gen-meth-static-dflt-ary-ptrn-elem-ary-empty-iter.js fails
+language/expressions/class/dstr-gen-meth-static-dflt-ary-ptrn-elem-ary-rest-init.js fails
+language/expressions/class/dstr-gen-meth-static-dflt-ary-ptrn-elem-ary-rest-iter.js fails
+language/expressions/class/dstr-gen-meth-static-dflt-ary-ptrn-elem-ary-val-null.js fails
+language/expressions/class/dstr-gen-meth-static-dflt-ary-ptrn-elem-id-init-exhausted.js fails
+language/expressions/class/dstr-gen-meth-static-dflt-ary-ptrn-elem-id-init-fn-name-arrow.js fails
+language/expressions/class/dstr-gen-meth-static-dflt-ary-ptrn-elem-id-init-fn-name-class.js fails
+language/expressions/class/dstr-gen-meth-static-dflt-ary-ptrn-elem-id-init-fn-name-cover.js fails
+language/expressions/class/dstr-gen-meth-static-dflt-ary-ptrn-elem-id-init-fn-name-fn.js fails
+language/expressions/class/dstr-gen-meth-static-dflt-ary-ptrn-elem-id-init-fn-name-gen.js fails
+language/expressions/class/dstr-gen-meth-static-dflt-ary-ptrn-elem-id-init-hole.js fails
+language/expressions/class/dstr-gen-meth-static-dflt-ary-ptrn-elem-id-init-skipped.js fails
+language/expressions/class/dstr-gen-meth-static-dflt-ary-ptrn-elem-id-init-throws.js fails
+language/expressions/class/dstr-gen-meth-static-dflt-ary-ptrn-elem-id-init-undef.js fails
+language/expressions/class/dstr-gen-meth-static-dflt-ary-ptrn-elem-id-init-unresolvable.js fails
+language/expressions/class/dstr-gen-meth-static-dflt-ary-ptrn-elem-id-iter-complete.js fails
+language/expressions/class/dstr-gen-meth-static-dflt-ary-ptrn-elem-id-iter-done.js fails
+language/expressions/class/dstr-gen-meth-static-dflt-ary-ptrn-elem-id-iter-step-err.js fails
+language/expressions/class/dstr-gen-meth-static-dflt-ary-ptrn-elem-id-iter-val-err.js fails
+language/expressions/class/dstr-gen-meth-static-dflt-ary-ptrn-elem-id-iter-val.js fails
+language/expressions/class/dstr-gen-meth-static-dflt-ary-ptrn-elem-obj-id-init.js fails
+language/expressions/class/dstr-gen-meth-static-dflt-ary-ptrn-elem-obj-id.js fails
+language/expressions/class/dstr-gen-meth-static-dflt-ary-ptrn-elem-obj-prop-id-init.js fails
+language/expressions/class/dstr-gen-meth-static-dflt-ary-ptrn-elem-obj-prop-id.js fails
+language/expressions/class/dstr-gen-meth-static-dflt-ary-ptrn-elem-obj-val-null.js fails
+language/expressions/class/dstr-gen-meth-static-dflt-ary-ptrn-elem-obj-val-undef.js fails
+language/expressions/class/dstr-gen-meth-static-dflt-ary-ptrn-elision-exhausted.js fails
+language/expressions/class/dstr-gen-meth-static-dflt-ary-ptrn-elision-step-err.js fails
+language/expressions/class/dstr-gen-meth-static-dflt-ary-ptrn-elision.js fails
+language/expressions/class/dstr-gen-meth-static-dflt-ary-ptrn-empty.js fails
+language/expressions/class/dstr-gen-meth-static-dflt-ary-ptrn-rest-ary-elem.js fails
+language/expressions/class/dstr-gen-meth-static-dflt-ary-ptrn-rest-ary-elision.js fails
+language/expressions/class/dstr-gen-meth-static-dflt-ary-ptrn-rest-ary-empty.js fails
+language/expressions/class/dstr-gen-meth-static-dflt-ary-ptrn-rest-ary-rest.js fails
+language/expressions/class/dstr-gen-meth-static-dflt-ary-ptrn-rest-id-elision-next-err.js fails
+language/expressions/class/dstr-gen-meth-static-dflt-ary-ptrn-rest-id-elision.js fails
+language/expressions/class/dstr-gen-meth-static-dflt-ary-ptrn-rest-id-exhausted.js fails
+language/expressions/class/dstr-gen-meth-static-dflt-ary-ptrn-rest-id-iter-step-err.js fails
+language/expressions/class/dstr-gen-meth-static-dflt-ary-ptrn-rest-id-iter-val-err.js fails
+language/expressions/class/dstr-gen-meth-static-dflt-ary-ptrn-rest-id.js fails
+language/expressions/class/dstr-gen-meth-static-dflt-ary-ptrn-rest-obj-id.js fails
+language/expressions/class/dstr-gen-meth-static-dflt-ary-ptrn-rest-obj-prop-id.js fails
+language/expressions/class/dstr-gen-meth-static-dflt-obj-init-null.js fails
+language/expressions/class/dstr-gen-meth-static-dflt-obj-init-undefined.js fails
+language/expressions/class/dstr-gen-meth-static-dflt-obj-ptrn-empty.js fails
+language/expressions/class/dstr-gen-meth-static-dflt-obj-ptrn-id-get-value-err.js fails
+language/expressions/class/dstr-gen-meth-static-dflt-obj-ptrn-id-init-fn-name-arrow.js fails
+language/expressions/class/dstr-gen-meth-static-dflt-obj-ptrn-id-init-fn-name-class.js fails
+language/expressions/class/dstr-gen-meth-static-dflt-obj-ptrn-id-init-fn-name-cover.js fails
+language/expressions/class/dstr-gen-meth-static-dflt-obj-ptrn-id-init-fn-name-fn.js fails
+language/expressions/class/dstr-gen-meth-static-dflt-obj-ptrn-id-init-fn-name-gen.js fails
+language/expressions/class/dstr-gen-meth-static-dflt-obj-ptrn-id-init-skipped.js fails
+language/expressions/class/dstr-gen-meth-static-dflt-obj-ptrn-id-init-throws.js fails
+language/expressions/class/dstr-gen-meth-static-dflt-obj-ptrn-id-init-unresolvable.js fails
+language/expressions/class/dstr-gen-meth-static-dflt-obj-ptrn-id-trailing-comma.js fails
+language/expressions/class/dstr-gen-meth-static-dflt-obj-ptrn-list-err.js fails
+language/expressions/class/dstr-gen-meth-static-dflt-obj-ptrn-prop-ary-init.js fails
+language/expressions/class/dstr-gen-meth-static-dflt-obj-ptrn-prop-ary-trailing-comma.js fails
+language/expressions/class/dstr-gen-meth-static-dflt-obj-ptrn-prop-ary-value-null.js fails
+language/expressions/class/dstr-gen-meth-static-dflt-obj-ptrn-prop-ary.js fails
+language/expressions/class/dstr-gen-meth-static-dflt-obj-ptrn-prop-eval-err.js fails
+language/expressions/class/dstr-gen-meth-static-dflt-obj-ptrn-prop-id-get-value-err.js fails
+language/expressions/class/dstr-gen-meth-static-dflt-obj-ptrn-prop-id-init-skipped.js fails
+language/expressions/class/dstr-gen-meth-static-dflt-obj-ptrn-prop-id-init-throws.js fails
+language/expressions/class/dstr-gen-meth-static-dflt-obj-ptrn-prop-id-init-unresolvable.js fails
+language/expressions/class/dstr-gen-meth-static-dflt-obj-ptrn-prop-id-init.js fails
+language/expressions/class/dstr-gen-meth-static-dflt-obj-ptrn-prop-id-trailing-comma.js fails
+language/expressions/class/dstr-gen-meth-static-dflt-obj-ptrn-prop-id.js fails
+language/expressions/class/dstr-gen-meth-static-dflt-obj-ptrn-prop-obj-init.js fails
+language/expressions/class/dstr-gen-meth-static-dflt-obj-ptrn-prop-obj-value-null.js fails
+language/expressions/class/dstr-gen-meth-static-dflt-obj-ptrn-prop-obj-value-undef.js fails
+language/expressions/class/dstr-gen-meth-static-dflt-obj-ptrn-prop-obj.js fails
+language/expressions/class/dstr-gen-meth-static-obj-init-null.js fails
+language/expressions/class/dstr-gen-meth-static-obj-init-undefined.js fails
+language/expressions/class/dstr-gen-meth-static-obj-ptrn-empty.js fails
+language/expressions/class/dstr-gen-meth-static-obj-ptrn-id-get-value-err.js fails
+language/expressions/class/dstr-gen-meth-static-obj-ptrn-id-init-fn-name-arrow.js fails
+language/expressions/class/dstr-gen-meth-static-obj-ptrn-id-init-fn-name-class.js fails
+language/expressions/class/dstr-gen-meth-static-obj-ptrn-id-init-fn-name-cover.js fails
+language/expressions/class/dstr-gen-meth-static-obj-ptrn-id-init-fn-name-fn.js fails
+language/expressions/class/dstr-gen-meth-static-obj-ptrn-id-init-fn-name-gen.js fails
+language/expressions/class/dstr-gen-meth-static-obj-ptrn-id-init-skipped.js fails
+language/expressions/class/dstr-gen-meth-static-obj-ptrn-id-init-throws.js fails
+language/expressions/class/dstr-gen-meth-static-obj-ptrn-id-init-unresolvable.js fails
+language/expressions/class/dstr-gen-meth-static-obj-ptrn-id-trailing-comma.js fails
+language/expressions/class/dstr-gen-meth-static-obj-ptrn-list-err.js fails
+language/expressions/class/dstr-gen-meth-static-obj-ptrn-prop-ary-init.js fails
+language/expressions/class/dstr-gen-meth-static-obj-ptrn-prop-ary-trailing-comma.js fails
+language/expressions/class/dstr-gen-meth-static-obj-ptrn-prop-ary-value-null.js fails
+language/expressions/class/dstr-gen-meth-static-obj-ptrn-prop-ary.js fails
+language/expressions/class/dstr-gen-meth-static-obj-ptrn-prop-eval-err.js fails
+language/expressions/class/dstr-gen-meth-static-obj-ptrn-prop-id-get-value-err.js fails
+language/expressions/class/dstr-gen-meth-static-obj-ptrn-prop-id-init-skipped.js fails
+language/expressions/class/dstr-gen-meth-static-obj-ptrn-prop-id-init-throws.js fails
+language/expressions/class/dstr-gen-meth-static-obj-ptrn-prop-id-init-unresolvable.js fails
+language/expressions/class/dstr-gen-meth-static-obj-ptrn-prop-id-init.js fails
+language/expressions/class/dstr-gen-meth-static-obj-ptrn-prop-id-trailing-comma.js fails
+language/expressions/class/dstr-gen-meth-static-obj-ptrn-prop-id.js fails
+language/expressions/class/dstr-gen-meth-static-obj-ptrn-prop-obj-init.js fails
+language/expressions/class/dstr-gen-meth-static-obj-ptrn-prop-obj-value-null.js fails
+language/expressions/class/dstr-gen-meth-static-obj-ptrn-prop-obj-value-undef.js fails
+language/expressions/class/dstr-gen-meth-static-obj-ptrn-prop-obj.js fails
+language/expressions/class/dstr-meth-ary-init-iter-close.js fails
+language/expressions/class/dstr-meth-ary-init-iter-get-err.js fails
+language/expressions/class/dstr-meth-ary-init-iter-no-close.js fails
+language/expressions/class/dstr-meth-ary-name-iter-val.js fails
+language/expressions/class/dstr-meth-ary-ptrn-elem-ary-elem-init.js fails
+language/expressions/class/dstr-meth-ary-ptrn-elem-ary-elem-iter.js fails
+language/expressions/class/dstr-meth-ary-ptrn-elem-ary-elision-init.js fails
+language/expressions/class/dstr-meth-ary-ptrn-elem-ary-elision-iter.js fails
+language/expressions/class/dstr-meth-ary-ptrn-elem-ary-empty-init.js fails
+language/expressions/class/dstr-meth-ary-ptrn-elem-ary-empty-iter.js fails
+language/expressions/class/dstr-meth-ary-ptrn-elem-ary-rest-init.js fails
+language/expressions/class/dstr-meth-ary-ptrn-elem-ary-rest-iter.js fails
+language/expressions/class/dstr-meth-ary-ptrn-elem-ary-val-null.js fails
+language/expressions/class/dstr-meth-ary-ptrn-elem-id-init-exhausted.js fails
+language/expressions/class/dstr-meth-ary-ptrn-elem-id-init-fn-name-arrow.js fails
+language/expressions/class/dstr-meth-ary-ptrn-elem-id-init-fn-name-class.js fails
+language/expressions/class/dstr-meth-ary-ptrn-elem-id-init-fn-name-cover.js fails
+language/expressions/class/dstr-meth-ary-ptrn-elem-id-init-fn-name-fn.js fails
+language/expressions/class/dstr-meth-ary-ptrn-elem-id-init-fn-name-gen.js fails
+language/expressions/class/dstr-meth-ary-ptrn-elem-id-init-hole.js fails
+language/expressions/class/dstr-meth-ary-ptrn-elem-id-init-skipped.js fails
+language/expressions/class/dstr-meth-ary-ptrn-elem-id-init-throws.js fails
+language/expressions/class/dstr-meth-ary-ptrn-elem-id-init-undef.js fails
+language/expressions/class/dstr-meth-ary-ptrn-elem-id-init-unresolvable.js fails
+language/expressions/class/dstr-meth-ary-ptrn-elem-id-iter-complete.js fails
+language/expressions/class/dstr-meth-ary-ptrn-elem-id-iter-done.js fails
+language/expressions/class/dstr-meth-ary-ptrn-elem-id-iter-step-err.js fails
+language/expressions/class/dstr-meth-ary-ptrn-elem-id-iter-val-err.js fails
+language/expressions/class/dstr-meth-ary-ptrn-elem-id-iter-val.js fails
+language/expressions/class/dstr-meth-ary-ptrn-elem-obj-id-init.js fails
+language/expressions/class/dstr-meth-ary-ptrn-elem-obj-id.js fails
+language/expressions/class/dstr-meth-ary-ptrn-elem-obj-prop-id-init.js fails
+language/expressions/class/dstr-meth-ary-ptrn-elem-obj-prop-id.js fails
+language/expressions/class/dstr-meth-ary-ptrn-elem-obj-val-null.js fails
+language/expressions/class/dstr-meth-ary-ptrn-elem-obj-val-undef.js fails
+language/expressions/class/dstr-meth-ary-ptrn-elision-exhausted.js fails
+language/expressions/class/dstr-meth-ary-ptrn-elision-step-err.js fails
+language/expressions/class/dstr-meth-ary-ptrn-elision.js fails
+language/expressions/class/dstr-meth-ary-ptrn-empty.js fails
+language/expressions/class/dstr-meth-ary-ptrn-rest-ary-elem.js fails
+language/expressions/class/dstr-meth-ary-ptrn-rest-ary-elision.js fails
+language/expressions/class/dstr-meth-ary-ptrn-rest-ary-empty.js fails
+language/expressions/class/dstr-meth-ary-ptrn-rest-ary-rest.js fails
+language/expressions/class/dstr-meth-ary-ptrn-rest-id-elision-next-err.js fails
+language/expressions/class/dstr-meth-ary-ptrn-rest-id-elision.js fails
+language/expressions/class/dstr-meth-ary-ptrn-rest-id-exhausted.js fails
+language/expressions/class/dstr-meth-ary-ptrn-rest-id-iter-step-err.js fails
+language/expressions/class/dstr-meth-ary-ptrn-rest-id-iter-val-err.js fails
+language/expressions/class/dstr-meth-ary-ptrn-rest-id.js fails
+language/expressions/class/dstr-meth-ary-ptrn-rest-obj-id.js fails
+language/expressions/class/dstr-meth-ary-ptrn-rest-obj-prop-id.js fails
+language/expressions/class/dstr-meth-dflt-ary-init-iter-close.js fails
+language/expressions/class/dstr-meth-dflt-ary-init-iter-get-err.js fails
+language/expressions/class/dstr-meth-dflt-ary-init-iter-no-close.js fails
+language/expressions/class/dstr-meth-dflt-ary-name-iter-val.js fails
+language/expressions/class/dstr-meth-dflt-ary-ptrn-elem-ary-elem-init.js fails
+language/expressions/class/dstr-meth-dflt-ary-ptrn-elem-ary-elem-iter.js fails
+language/expressions/class/dstr-meth-dflt-ary-ptrn-elem-ary-elision-init.js fails
+language/expressions/class/dstr-meth-dflt-ary-ptrn-elem-ary-elision-iter.js fails
+language/expressions/class/dstr-meth-dflt-ary-ptrn-elem-ary-empty-init.js fails
+language/expressions/class/dstr-meth-dflt-ary-ptrn-elem-ary-empty-iter.js fails
+language/expressions/class/dstr-meth-dflt-ary-ptrn-elem-ary-rest-init.js fails
+language/expressions/class/dstr-meth-dflt-ary-ptrn-elem-ary-rest-iter.js fails
+language/expressions/class/dstr-meth-dflt-ary-ptrn-elem-ary-val-null.js fails
+language/expressions/class/dstr-meth-dflt-ary-ptrn-elem-id-init-exhausted.js fails
+language/expressions/class/dstr-meth-dflt-ary-ptrn-elem-id-init-fn-name-arrow.js fails
+language/expressions/class/dstr-meth-dflt-ary-ptrn-elem-id-init-fn-name-class.js fails
+language/expressions/class/dstr-meth-dflt-ary-ptrn-elem-id-init-fn-name-cover.js fails
+language/expressions/class/dstr-meth-dflt-ary-ptrn-elem-id-init-fn-name-fn.js fails
+language/expressions/class/dstr-meth-dflt-ary-ptrn-elem-id-init-fn-name-gen.js fails
+language/expressions/class/dstr-meth-dflt-ary-ptrn-elem-id-init-hole.js fails
+language/expressions/class/dstr-meth-dflt-ary-ptrn-elem-id-init-skipped.js fails
+language/expressions/class/dstr-meth-dflt-ary-ptrn-elem-id-init-throws.js fails
+language/expressions/class/dstr-meth-dflt-ary-ptrn-elem-id-init-undef.js fails
+language/expressions/class/dstr-meth-dflt-ary-ptrn-elem-id-init-unresolvable.js fails
+language/expressions/class/dstr-meth-dflt-ary-ptrn-elem-id-iter-complete.js fails
+language/expressions/class/dstr-meth-dflt-ary-ptrn-elem-id-iter-done.js fails
+language/expressions/class/dstr-meth-dflt-ary-ptrn-elem-id-iter-step-err.js fails
+language/expressions/class/dstr-meth-dflt-ary-ptrn-elem-id-iter-val-err.js fails
+language/expressions/class/dstr-meth-dflt-ary-ptrn-elem-id-iter-val.js fails
+language/expressions/class/dstr-meth-dflt-ary-ptrn-elem-obj-id-init.js fails
+language/expressions/class/dstr-meth-dflt-ary-ptrn-elem-obj-id.js fails
+language/expressions/class/dstr-meth-dflt-ary-ptrn-elem-obj-prop-id-init.js fails
+language/expressions/class/dstr-meth-dflt-ary-ptrn-elem-obj-prop-id.js fails
+language/expressions/class/dstr-meth-dflt-ary-ptrn-elem-obj-val-null.js fails
+language/expressions/class/dstr-meth-dflt-ary-ptrn-elem-obj-val-undef.js fails
+language/expressions/class/dstr-meth-dflt-ary-ptrn-elision-exhausted.js fails
+language/expressions/class/dstr-meth-dflt-ary-ptrn-elision-step-err.js fails
+language/expressions/class/dstr-meth-dflt-ary-ptrn-elision.js fails
+language/expressions/class/dstr-meth-dflt-ary-ptrn-empty.js fails
+language/expressions/class/dstr-meth-dflt-ary-ptrn-rest-ary-elem.js fails
+language/expressions/class/dstr-meth-dflt-ary-ptrn-rest-ary-elision.js fails
+language/expressions/class/dstr-meth-dflt-ary-ptrn-rest-ary-empty.js fails
+language/expressions/class/dstr-meth-dflt-ary-ptrn-rest-ary-rest.js fails
+language/expressions/class/dstr-meth-dflt-ary-ptrn-rest-id-elision-next-err.js fails
+language/expressions/class/dstr-meth-dflt-ary-ptrn-rest-id-elision.js fails
+language/expressions/class/dstr-meth-dflt-ary-ptrn-rest-id-exhausted.js fails
+language/expressions/class/dstr-meth-dflt-ary-ptrn-rest-id-iter-step-err.js fails
+language/expressions/class/dstr-meth-dflt-ary-ptrn-rest-id-iter-val-err.js fails
+language/expressions/class/dstr-meth-dflt-ary-ptrn-rest-id.js fails
+language/expressions/class/dstr-meth-dflt-ary-ptrn-rest-obj-id.js fails
+language/expressions/class/dstr-meth-dflt-ary-ptrn-rest-obj-prop-id.js fails
+language/expressions/class/dstr-meth-dflt-obj-init-null.js fails
+language/expressions/class/dstr-meth-dflt-obj-init-undefined.js fails
+language/expressions/class/dstr-meth-dflt-obj-ptrn-empty.js fails
+language/expressions/class/dstr-meth-dflt-obj-ptrn-id-get-value-err.js fails
+language/expressions/class/dstr-meth-dflt-obj-ptrn-id-init-fn-name-arrow.js fails
+language/expressions/class/dstr-meth-dflt-obj-ptrn-id-init-fn-name-class.js fails
+language/expressions/class/dstr-meth-dflt-obj-ptrn-id-init-fn-name-cover.js fails
+language/expressions/class/dstr-meth-dflt-obj-ptrn-id-init-fn-name-fn.js fails
+language/expressions/class/dstr-meth-dflt-obj-ptrn-id-init-fn-name-gen.js fails
+language/expressions/class/dstr-meth-dflt-obj-ptrn-id-init-skipped.js fails
+language/expressions/class/dstr-meth-dflt-obj-ptrn-id-init-throws.js fails
+language/expressions/class/dstr-meth-dflt-obj-ptrn-id-init-unresolvable.js fails
+language/expressions/class/dstr-meth-dflt-obj-ptrn-id-trailing-comma.js fails
+language/expressions/class/dstr-meth-dflt-obj-ptrn-list-err.js fails
+language/expressions/class/dstr-meth-dflt-obj-ptrn-prop-ary-init.js fails
+language/expressions/class/dstr-meth-dflt-obj-ptrn-prop-ary-trailing-comma.js fails
+language/expressions/class/dstr-meth-dflt-obj-ptrn-prop-ary-value-null.js fails
+language/expressions/class/dstr-meth-dflt-obj-ptrn-prop-ary.js fails
+language/expressions/class/dstr-meth-dflt-obj-ptrn-prop-eval-err.js fails
+language/expressions/class/dstr-meth-dflt-obj-ptrn-prop-id-get-value-err.js fails
+language/expressions/class/dstr-meth-dflt-obj-ptrn-prop-id-init-skipped.js fails
+language/expressions/class/dstr-meth-dflt-obj-ptrn-prop-id-init-throws.js fails
+language/expressions/class/dstr-meth-dflt-obj-ptrn-prop-id-init-unresolvable.js fails
+language/expressions/class/dstr-meth-dflt-obj-ptrn-prop-id-init.js fails
+language/expressions/class/dstr-meth-dflt-obj-ptrn-prop-id-trailing-comma.js fails
+language/expressions/class/dstr-meth-dflt-obj-ptrn-prop-id.js fails
+language/expressions/class/dstr-meth-dflt-obj-ptrn-prop-obj-init.js fails
+language/expressions/class/dstr-meth-dflt-obj-ptrn-prop-obj-value-null.js fails
+language/expressions/class/dstr-meth-dflt-obj-ptrn-prop-obj-value-undef.js fails
+language/expressions/class/dstr-meth-dflt-obj-ptrn-prop-obj.js fails
+language/expressions/class/dstr-meth-obj-init-null.js fails
+language/expressions/class/dstr-meth-obj-init-undefined.js fails
+language/expressions/class/dstr-meth-obj-ptrn-empty.js fails
+language/expressions/class/dstr-meth-obj-ptrn-id-get-value-err.js fails
+language/expressions/class/dstr-meth-obj-ptrn-id-init-fn-name-arrow.js fails
+language/expressions/class/dstr-meth-obj-ptrn-id-init-fn-name-class.js fails
+language/expressions/class/dstr-meth-obj-ptrn-id-init-fn-name-cover.js fails
+language/expressions/class/dstr-meth-obj-ptrn-id-init-fn-name-fn.js fails
+language/expressions/class/dstr-meth-obj-ptrn-id-init-fn-name-gen.js fails
+language/expressions/class/dstr-meth-obj-ptrn-id-init-skipped.js fails
+language/expressions/class/dstr-meth-obj-ptrn-id-init-throws.js fails
+language/expressions/class/dstr-meth-obj-ptrn-id-init-unresolvable.js fails
+language/expressions/class/dstr-meth-obj-ptrn-id-trailing-comma.js fails
+language/expressions/class/dstr-meth-obj-ptrn-list-err.js fails
+language/expressions/class/dstr-meth-obj-ptrn-prop-ary-init.js fails
+language/expressions/class/dstr-meth-obj-ptrn-prop-ary-trailing-comma.js fails
+language/expressions/class/dstr-meth-obj-ptrn-prop-ary-value-null.js fails
+language/expressions/class/dstr-meth-obj-ptrn-prop-ary.js fails
+language/expressions/class/dstr-meth-obj-ptrn-prop-eval-err.js fails
+language/expressions/class/dstr-meth-obj-ptrn-prop-id-get-value-err.js fails
+language/expressions/class/dstr-meth-obj-ptrn-prop-id-init-skipped.js fails
+language/expressions/class/dstr-meth-obj-ptrn-prop-id-init-throws.js fails
+language/expressions/class/dstr-meth-obj-ptrn-prop-id-init-unresolvable.js fails
+language/expressions/class/dstr-meth-obj-ptrn-prop-id-init.js fails
+language/expressions/class/dstr-meth-obj-ptrn-prop-id-trailing-comma.js fails
+language/expressions/class/dstr-meth-obj-ptrn-prop-id.js fails
+language/expressions/class/dstr-meth-obj-ptrn-prop-obj-init.js fails
+language/expressions/class/dstr-meth-obj-ptrn-prop-obj-value-null.js fails
+language/expressions/class/dstr-meth-obj-ptrn-prop-obj-value-undef.js fails
+language/expressions/class/dstr-meth-obj-ptrn-prop-obj.js fails
+language/expressions/class/dstr-meth-static-ary-init-iter-close.js fails
+language/expressions/class/dstr-meth-static-ary-init-iter-get-err.js fails
+language/expressions/class/dstr-meth-static-ary-init-iter-no-close.js fails
+language/expressions/class/dstr-meth-static-ary-name-iter-val.js fails
+language/expressions/class/dstr-meth-static-ary-ptrn-elem-ary-elem-init.js fails
+language/expressions/class/dstr-meth-static-ary-ptrn-elem-ary-elem-iter.js fails
+language/expressions/class/dstr-meth-static-ary-ptrn-elem-ary-elision-init.js fails
+language/expressions/class/dstr-meth-static-ary-ptrn-elem-ary-elision-iter.js fails
+language/expressions/class/dstr-meth-static-ary-ptrn-elem-ary-empty-init.js fails
+language/expressions/class/dstr-meth-static-ary-ptrn-elem-ary-empty-iter.js fails
+language/expressions/class/dstr-meth-static-ary-ptrn-elem-ary-rest-init.js fails
+language/expressions/class/dstr-meth-static-ary-ptrn-elem-ary-rest-iter.js fails
+language/expressions/class/dstr-meth-static-ary-ptrn-elem-ary-val-null.js fails
+language/expressions/class/dstr-meth-static-ary-ptrn-elem-id-init-exhausted.js fails
+language/expressions/class/dstr-meth-static-ary-ptrn-elem-id-init-fn-name-arrow.js fails
+language/expressions/class/dstr-meth-static-ary-ptrn-elem-id-init-fn-name-class.js fails
+language/expressions/class/dstr-meth-static-ary-ptrn-elem-id-init-fn-name-cover.js fails
+language/expressions/class/dstr-meth-static-ary-ptrn-elem-id-init-fn-name-fn.js fails
+language/expressions/class/dstr-meth-static-ary-ptrn-elem-id-init-fn-name-gen.js fails
+language/expressions/class/dstr-meth-static-ary-ptrn-elem-id-init-hole.js fails
+language/expressions/class/dstr-meth-static-ary-ptrn-elem-id-init-skipped.js fails
+language/expressions/class/dstr-meth-static-ary-ptrn-elem-id-init-throws.js fails
+language/expressions/class/dstr-meth-static-ary-ptrn-elem-id-init-undef.js fails
+language/expressions/class/dstr-meth-static-ary-ptrn-elem-id-init-unresolvable.js fails
+language/expressions/class/dstr-meth-static-ary-ptrn-elem-id-iter-complete.js fails
+language/expressions/class/dstr-meth-static-ary-ptrn-elem-id-iter-done.js fails
+language/expressions/class/dstr-meth-static-ary-ptrn-elem-id-iter-step-err.js fails
+language/expressions/class/dstr-meth-static-ary-ptrn-elem-id-iter-val-err.js fails
+language/expressions/class/dstr-meth-static-ary-ptrn-elem-id-iter-val.js fails
+language/expressions/class/dstr-meth-static-ary-ptrn-elem-obj-id-init.js fails
+language/expressions/class/dstr-meth-static-ary-ptrn-elem-obj-id.js fails
+language/expressions/class/dstr-meth-static-ary-ptrn-elem-obj-prop-id-init.js fails
+language/expressions/class/dstr-meth-static-ary-ptrn-elem-obj-prop-id.js fails
+language/expressions/class/dstr-meth-static-ary-ptrn-elem-obj-val-null.js fails
+language/expressions/class/dstr-meth-static-ary-ptrn-elem-obj-val-undef.js fails
+language/expressions/class/dstr-meth-static-ary-ptrn-elision-exhausted.js fails
+language/expressions/class/dstr-meth-static-ary-ptrn-elision-step-err.js fails
+language/expressions/class/dstr-meth-static-ary-ptrn-elision.js fails
+language/expressions/class/dstr-meth-static-ary-ptrn-empty.js fails
+language/expressions/class/dstr-meth-static-ary-ptrn-rest-ary-elem.js fails
+language/expressions/class/dstr-meth-static-ary-ptrn-rest-ary-elision.js fails
+language/expressions/class/dstr-meth-static-ary-ptrn-rest-ary-empty.js fails
+language/expressions/class/dstr-meth-static-ary-ptrn-rest-ary-rest.js fails
+language/expressions/class/dstr-meth-static-ary-ptrn-rest-id-elision-next-err.js fails
+language/expressions/class/dstr-meth-static-ary-ptrn-rest-id-elision.js fails
+language/expressions/class/dstr-meth-static-ary-ptrn-rest-id-exhausted.js fails
+language/expressions/class/dstr-meth-static-ary-ptrn-rest-id-iter-step-err.js fails
+language/expressions/class/dstr-meth-static-ary-ptrn-rest-id-iter-val-err.js fails
+language/expressions/class/dstr-meth-static-ary-ptrn-rest-id.js fails
+language/expressions/class/dstr-meth-static-ary-ptrn-rest-obj-id.js fails
+language/expressions/class/dstr-meth-static-ary-ptrn-rest-obj-prop-id.js fails
+language/expressions/class/dstr-meth-static-dflt-ary-init-iter-close.js fails
+language/expressions/class/dstr-meth-static-dflt-ary-init-iter-get-err.js fails
+language/expressions/class/dstr-meth-static-dflt-ary-init-iter-no-close.js fails
+language/expressions/class/dstr-meth-static-dflt-ary-name-iter-val.js fails
+language/expressions/class/dstr-meth-static-dflt-ary-ptrn-elem-ary-elem-init.js fails
+language/expressions/class/dstr-meth-static-dflt-ary-ptrn-elem-ary-elem-iter.js fails
+language/expressions/class/dstr-meth-static-dflt-ary-ptrn-elem-ary-elision-init.js fails
+language/expressions/class/dstr-meth-static-dflt-ary-ptrn-elem-ary-elision-iter.js fails
+language/expressions/class/dstr-meth-static-dflt-ary-ptrn-elem-ary-empty-init.js fails
+language/expressions/class/dstr-meth-static-dflt-ary-ptrn-elem-ary-empty-iter.js fails
+language/expressions/class/dstr-meth-static-dflt-ary-ptrn-elem-ary-rest-init.js fails
+language/expressions/class/dstr-meth-static-dflt-ary-ptrn-elem-ary-rest-iter.js fails
+language/expressions/class/dstr-meth-static-dflt-ary-ptrn-elem-ary-val-null.js fails
+language/expressions/class/dstr-meth-static-dflt-ary-ptrn-elem-id-init-exhausted.js fails
+language/expressions/class/dstr-meth-static-dflt-ary-ptrn-elem-id-init-fn-name-arrow.js fails
+language/expressions/class/dstr-meth-static-dflt-ary-ptrn-elem-id-init-fn-name-class.js fails
+language/expressions/class/dstr-meth-static-dflt-ary-ptrn-elem-id-init-fn-name-cover.js fails
+language/expressions/class/dstr-meth-static-dflt-ary-ptrn-elem-id-init-fn-name-fn.js fails
+language/expressions/class/dstr-meth-static-dflt-ary-ptrn-elem-id-init-fn-name-gen.js fails
+language/expressions/class/dstr-meth-static-dflt-ary-ptrn-elem-id-init-hole.js fails
+language/expressions/class/dstr-meth-static-dflt-ary-ptrn-elem-id-init-skipped.js fails
+language/expressions/class/dstr-meth-static-dflt-ary-ptrn-elem-id-init-throws.js fails
+language/expressions/class/dstr-meth-static-dflt-ary-ptrn-elem-id-init-undef.js fails
+language/expressions/class/dstr-meth-static-dflt-ary-ptrn-elem-id-init-unresolvable.js fails
+language/expressions/class/dstr-meth-static-dflt-ary-ptrn-elem-id-iter-complete.js fails
+language/expressions/class/dstr-meth-static-dflt-ary-ptrn-elem-id-iter-done.js fails
+language/expressions/class/dstr-meth-static-dflt-ary-ptrn-elem-id-iter-step-err.js fails
+language/expressions/class/dstr-meth-static-dflt-ary-ptrn-elem-id-iter-val-err.js fails
+language/expressions/class/dstr-meth-static-dflt-ary-ptrn-elem-id-iter-val.js fails
+language/expressions/class/dstr-meth-static-dflt-ary-ptrn-elem-obj-id-init.js fails
+language/expressions/class/dstr-meth-static-dflt-ary-ptrn-elem-obj-id.js fails
+language/expressions/class/dstr-meth-static-dflt-ary-ptrn-elem-obj-prop-id-init.js fails
+language/expressions/class/dstr-meth-static-dflt-ary-ptrn-elem-obj-prop-id.js fails
+language/expressions/class/dstr-meth-static-dflt-ary-ptrn-elem-obj-val-null.js fails
+language/expressions/class/dstr-meth-static-dflt-ary-ptrn-elem-obj-val-undef.js fails
+language/expressions/class/dstr-meth-static-dflt-ary-ptrn-elision-exhausted.js fails
+language/expressions/class/dstr-meth-static-dflt-ary-ptrn-elision-step-err.js fails
+language/expressions/class/dstr-meth-static-dflt-ary-ptrn-elision.js fails
+language/expressions/class/dstr-meth-static-dflt-ary-ptrn-empty.js fails
+language/expressions/class/dstr-meth-static-dflt-ary-ptrn-rest-ary-elem.js fails
+language/expressions/class/dstr-meth-static-dflt-ary-ptrn-rest-ary-elision.js fails
+language/expressions/class/dstr-meth-static-dflt-ary-ptrn-rest-ary-empty.js fails
+language/expressions/class/dstr-meth-static-dflt-ary-ptrn-rest-ary-rest.js fails
+language/expressions/class/dstr-meth-static-dflt-ary-ptrn-rest-id-elision-next-err.js fails
+language/expressions/class/dstr-meth-static-dflt-ary-ptrn-rest-id-elision.js fails
+language/expressions/class/dstr-meth-static-dflt-ary-ptrn-rest-id-exhausted.js fails
+language/expressions/class/dstr-meth-static-dflt-ary-ptrn-rest-id-iter-step-err.js fails
+language/expressions/class/dstr-meth-static-dflt-ary-ptrn-rest-id-iter-val-err.js fails
+language/expressions/class/dstr-meth-static-dflt-ary-ptrn-rest-id.js fails
+language/expressions/class/dstr-meth-static-dflt-ary-ptrn-rest-obj-id.js fails
+language/expressions/class/dstr-meth-static-dflt-ary-ptrn-rest-obj-prop-id.js fails
+language/expressions/class/dstr-meth-static-dflt-obj-init-null.js fails
+language/expressions/class/dstr-meth-static-dflt-obj-init-undefined.js fails
+language/expressions/class/dstr-meth-static-dflt-obj-ptrn-empty.js fails
+language/expressions/class/dstr-meth-static-dflt-obj-ptrn-id-get-value-err.js fails
+language/expressions/class/dstr-meth-static-dflt-obj-ptrn-id-init-fn-name-arrow.js fails
+language/expressions/class/dstr-meth-static-dflt-obj-ptrn-id-init-fn-name-class.js fails
+language/expressions/class/dstr-meth-static-dflt-obj-ptrn-id-init-fn-name-cover.js fails
+language/expressions/class/dstr-meth-static-dflt-obj-ptrn-id-init-fn-name-fn.js fails
+language/expressions/class/dstr-meth-static-dflt-obj-ptrn-id-init-fn-name-gen.js fails
+language/expressions/class/dstr-meth-static-dflt-obj-ptrn-id-init-skipped.js fails
+language/expressions/class/dstr-meth-static-dflt-obj-ptrn-id-init-throws.js fails
+language/expressions/class/dstr-meth-static-dflt-obj-ptrn-id-init-unresolvable.js fails
+language/expressions/class/dstr-meth-static-dflt-obj-ptrn-id-trailing-comma.js fails
+language/expressions/class/dstr-meth-static-dflt-obj-ptrn-list-err.js fails
+language/expressions/class/dstr-meth-static-dflt-obj-ptrn-prop-ary-init.js fails
+language/expressions/class/dstr-meth-static-dflt-obj-ptrn-prop-ary-trailing-comma.js fails
+language/expressions/class/dstr-meth-static-dflt-obj-ptrn-prop-ary-value-null.js fails
+language/expressions/class/dstr-meth-static-dflt-obj-ptrn-prop-ary.js fails
+language/expressions/class/dstr-meth-static-dflt-obj-ptrn-prop-eval-err.js fails
+language/expressions/class/dstr-meth-static-dflt-obj-ptrn-prop-id-get-value-err.js fails
+language/expressions/class/dstr-meth-static-dflt-obj-ptrn-prop-id-init-skipped.js fails
+language/expressions/class/dstr-meth-static-dflt-obj-ptrn-prop-id-init-throws.js fails
+language/expressions/class/dstr-meth-static-dflt-obj-ptrn-prop-id-init-unresolvable.js fails
+language/expressions/class/dstr-meth-static-dflt-obj-ptrn-prop-id-init.js fails
+language/expressions/class/dstr-meth-static-dflt-obj-ptrn-prop-id-trailing-comma.js fails
+language/expressions/class/dstr-meth-static-dflt-obj-ptrn-prop-id.js fails
+language/expressions/class/dstr-meth-static-dflt-obj-ptrn-prop-obj-init.js fails
+language/expressions/class/dstr-meth-static-dflt-obj-ptrn-prop-obj-value-null.js fails
+language/expressions/class/dstr-meth-static-dflt-obj-ptrn-prop-obj-value-undef.js fails
+language/expressions/class/dstr-meth-static-dflt-obj-ptrn-prop-obj.js fails
+language/expressions/class/dstr-meth-static-obj-init-null.js fails
+language/expressions/class/dstr-meth-static-obj-init-undefined.js fails
+language/expressions/class/dstr-meth-static-obj-ptrn-empty.js fails
+language/expressions/class/dstr-meth-static-obj-ptrn-id-get-value-err.js fails
+language/expressions/class/dstr-meth-static-obj-ptrn-id-init-fn-name-arrow.js fails
+language/expressions/class/dstr-meth-static-obj-ptrn-id-init-fn-name-class.js fails
+language/expressions/class/dstr-meth-static-obj-ptrn-id-init-fn-name-cover.js fails
+language/expressions/class/dstr-meth-static-obj-ptrn-id-init-fn-name-fn.js fails
+language/expressions/class/dstr-meth-static-obj-ptrn-id-init-fn-name-gen.js fails
+language/expressions/class/dstr-meth-static-obj-ptrn-id-init-skipped.js fails
+language/expressions/class/dstr-meth-static-obj-ptrn-id-init-throws.js fails
+language/expressions/class/dstr-meth-static-obj-ptrn-id-init-unresolvable.js fails
+language/expressions/class/dstr-meth-static-obj-ptrn-id-trailing-comma.js fails
+language/expressions/class/dstr-meth-static-obj-ptrn-list-err.js fails
+language/expressions/class/dstr-meth-static-obj-ptrn-prop-ary-init.js fails
+language/expressions/class/dstr-meth-static-obj-ptrn-prop-ary-trailing-comma.js fails
+language/expressions/class/dstr-meth-static-obj-ptrn-prop-ary-value-null.js fails
+language/expressions/class/dstr-meth-static-obj-ptrn-prop-ary.js fails
+language/expressions/class/dstr-meth-static-obj-ptrn-prop-eval-err.js fails
+language/expressions/class/dstr-meth-static-obj-ptrn-prop-id-get-value-err.js fails
+language/expressions/class/dstr-meth-static-obj-ptrn-prop-id-init-skipped.js fails
+language/expressions/class/dstr-meth-static-obj-ptrn-prop-id-init-throws.js fails
+language/expressions/class/dstr-meth-static-obj-ptrn-prop-id-init-unresolvable.js fails
+language/expressions/class/dstr-meth-static-obj-ptrn-prop-id-init.js fails
+language/expressions/class/dstr-meth-static-obj-ptrn-prop-id-trailing-comma.js fails
+language/expressions/class/dstr-meth-static-obj-ptrn-prop-id.js fails
+language/expressions/class/dstr-meth-static-obj-ptrn-prop-obj-init.js fails
+language/expressions/class/dstr-meth-static-obj-ptrn-prop-obj-value-null.js fails
+language/expressions/class/dstr-meth-static-obj-ptrn-prop-obj-value-undef.js fails
+language/expressions/class/dstr-meth-static-obj-ptrn-prop-obj.js fails
+language/expressions/class/gen-meth-dflt-params-abrupt.js fails
+language/expressions/class/gen-meth-dflt-params-arg-val-not-undefined.js fails
+language/expressions/class/gen-meth-dflt-params-arg-val-undefined.js fails
+language/expressions/class/gen-meth-dflt-params-ref-later.js fails
+language/expressions/class/gen-meth-dflt-params-ref-prior.js fails
+language/expressions/class/gen-meth-dflt-params-ref-self.js fails
+language/expressions/class/gen-meth-dflt-params-trailing-comma.js fails
+language/expressions/class/gen-meth-params-trailing-comma-multiple.js fails
+language/expressions/class/gen-meth-params-trailing-comma-single.js fails
+language/expressions/class/gen-meth-static-dflt-params-abrupt.js fails
+language/expressions/class/gen-meth-static-dflt-params-arg-val-not-undefined.js fails
+language/expressions/class/gen-meth-static-dflt-params-arg-val-undefined.js fails
+language/expressions/class/gen-meth-static-dflt-params-ref-later.js fails
+language/expressions/class/gen-meth-static-dflt-params-ref-prior.js fails
+language/expressions/class/gen-meth-static-dflt-params-ref-self.js fails
+language/expressions/class/gen-meth-static-dflt-params-trailing-comma.js fails
+language/expressions/class/gen-meth-static-params-trailing-comma-multiple.js fails
+language/expressions/class/gen-meth-static-params-trailing-comma-single.js fails
+language/expressions/class/gen-method-length-dflt.js fails
+language/expressions/class/gen-method-static-yield-spread-arr-multiple.js fails
+language/expressions/class/gen-method-static-yield-spread-arr-single.js fails
+language/expressions/class/gen-method-yield-spread-arr-multiple.js fails
+language/expressions/class/gen-method-yield-spread-arr-single.js fails
+language/expressions/class/meth-dflt-params-abrupt.js fails
+language/expressions/class/meth-dflt-params-arg-val-not-undefined.js fails
+language/expressions/class/meth-dflt-params-arg-val-undefined.js fails
+language/expressions/class/meth-dflt-params-ref-later.js fails
+language/expressions/class/meth-dflt-params-ref-prior.js fails
+language/expressions/class/meth-dflt-params-ref-self.js fails
+language/expressions/class/meth-dflt-params-trailing-comma.js fails
+language/expressions/class/meth-params-trailing-comma-multiple.js fails
+language/expressions/class/meth-params-trailing-comma-single.js fails
+language/expressions/class/meth-static-dflt-params-abrupt.js fails
+language/expressions/class/meth-static-dflt-params-arg-val-not-undefined.js fails
+language/expressions/class/meth-static-dflt-params-arg-val-undefined.js fails
+language/expressions/class/meth-static-dflt-params-ref-later.js fails
+language/expressions/class/meth-static-dflt-params-ref-prior.js fails
+language/expressions/class/meth-static-dflt-params-ref-self.js fails
+language/expressions/class/meth-static-dflt-params-trailing-comma.js fails
+language/expressions/class/meth-static-params-trailing-comma-multiple.js fails
+language/expressions/class/meth-static-params-trailing-comma-single.js fails
+language/expressions/class/method-length-dflt.js fails
+language/expressions/class/name.js fails
+language/expressions/class/params-dflt-gen-meth-args-unmapped.js fails
+language/expressions/class/params-dflt-gen-meth-ref-arguments.js fails
+language/expressions/class/params-dflt-gen-meth-static-args-unmapped.js fails
+language/expressions/class/params-dflt-gen-meth-static-ref-arguments.js fails
+language/expressions/class/params-dflt-meth-args-unmapped.js fails
+language/expressions/class/params-dflt-meth-ref-arguments.js fails
+language/expressions/class/params-dflt-meth-static-args-unmapped.js fails
+language/expressions/class/params-dflt-meth-static-ref-arguments.js fails
+language/expressions/class/restricted-properties.js fails
+language/expressions/class/scope-gen-meth-paramsbody-var-close.js fails
+language/expressions/class/scope-gen-meth-paramsbody-var-open.js fails
+language/expressions/class/scope-meth-paramsbody-var-close.js fails
+language/expressions/class/scope-meth-paramsbody-var-open.js fails
+language/expressions/class/scope-name-lex-close.js fails
+language/expressions/class/scope-name-lex-open-heritage.js fails
+language/expressions/class/scope-name-lex-open-no-heritage.js fails
+language/expressions/class/scope-setter-paramsbody-var-close.js fails
+language/expressions/class/scope-setter-paramsbody-var-open.js fails
+language/expressions/class/scope-static-gen-meth-paramsbody-var-close.js fails
+language/expressions/class/scope-static-gen-meth-paramsbody-var-open.js fails
+language/expressions/class/scope-static-meth-paramsbody-var-close.js fails
+language/expressions/class/scope-static-meth-paramsbody-var-open.js fails
+language/expressions/class/scope-static-setter-paramsbody-var-close.js fails
+language/expressions/class/scope-static-setter-paramsbody-var-open.js fails
+language/expressions/class/setter-length-dflt.js fails
+language/expressions/class/static-method-length-dflt.js fails
+language/expressions/comma/tco-final.js strictFails
+language/expressions/compound-assignment/S11.13.2_A5.10_T1.js sloppyFails
+language/expressions/compound-assignment/S11.13.2_A5.10_T2.js sloppyFails
+language/expressions/compound-assignment/S11.13.2_A5.10_T3.js sloppyFails
+language/expressions/compound-assignment/S11.13.2_A5.10_T4.js sloppyFails
+language/expressions/compound-assignment/S11.13.2_A5.10_T5.js fails
+language/expressions/compound-assignment/S11.13.2_A5.11_T1.js sloppyFails
+language/expressions/compound-assignment/S11.13.2_A5.11_T2.js sloppyFails
+language/expressions/compound-assignment/S11.13.2_A5.11_T3.js sloppyFails
+language/expressions/compound-assignment/S11.13.2_A5.11_T4.js sloppyFails
+language/expressions/compound-assignment/S11.13.2_A5.11_T5.js fails
+language/expressions/compound-assignment/S11.13.2_A5.1_T1.js sloppyFails
+language/expressions/compound-assignment/S11.13.2_A5.1_T2.js sloppyFails
+language/expressions/compound-assignment/S11.13.2_A5.1_T3.js sloppyFails
+language/expressions/compound-assignment/S11.13.2_A5.1_T4.js sloppyFails
+language/expressions/compound-assignment/S11.13.2_A5.1_T5.js fails
+language/expressions/compound-assignment/S11.13.2_A5.2_T1.js sloppyFails
+language/expressions/compound-assignment/S11.13.2_A5.2_T2.js sloppyFails
+language/expressions/compound-assignment/S11.13.2_A5.2_T3.js sloppyFails
+language/expressions/compound-assignment/S11.13.2_A5.2_T4.js sloppyFails
+language/expressions/compound-assignment/S11.13.2_A5.2_T5.js fails
+language/expressions/compound-assignment/S11.13.2_A5.3_T1.js sloppyFails
+language/expressions/compound-assignment/S11.13.2_A5.3_T2.js sloppyFails
+language/expressions/compound-assignment/S11.13.2_A5.3_T3.js sloppyFails
+language/expressions/compound-assignment/S11.13.2_A5.3_T4.js sloppyFails
+language/expressions/compound-assignment/S11.13.2_A5.3_T5.js fails
+language/expressions/compound-assignment/S11.13.2_A5.4_T1.js sloppyFails
+language/expressions/compound-assignment/S11.13.2_A5.4_T2.js sloppyFails
+language/expressions/compound-assignment/S11.13.2_A5.4_T3.js sloppyFails
+language/expressions/compound-assignment/S11.13.2_A5.4_T4.js sloppyFails
+language/expressions/compound-assignment/S11.13.2_A5.4_T5.js fails
+language/expressions/compound-assignment/S11.13.2_A5.5_T1.js sloppyFails
+language/expressions/compound-assignment/S11.13.2_A5.5_T2.js sloppyFails
+language/expressions/compound-assignment/S11.13.2_A5.5_T3.js sloppyFails
+language/expressions/compound-assignment/S11.13.2_A5.5_T4.js sloppyFails
+language/expressions/compound-assignment/S11.13.2_A5.5_T5.js fails
+language/expressions/compound-assignment/S11.13.2_A5.6_T1.js sloppyFails
+language/expressions/compound-assignment/S11.13.2_A5.6_T2.js sloppyFails
+language/expressions/compound-assignment/S11.13.2_A5.6_T3.js sloppyFails
+language/expressions/compound-assignment/S11.13.2_A5.6_T4.js sloppyFails
+language/expressions/compound-assignment/S11.13.2_A5.6_T5.js fails
+language/expressions/compound-assignment/S11.13.2_A5.7_T1.js sloppyFails
+language/expressions/compound-assignment/S11.13.2_A5.7_T2.js sloppyFails
+language/expressions/compound-assignment/S11.13.2_A5.7_T3.js sloppyFails
+language/expressions/compound-assignment/S11.13.2_A5.7_T4.js sloppyFails
+language/expressions/compound-assignment/S11.13.2_A5.7_T5.js fails
+language/expressions/compound-assignment/S11.13.2_A5.8_T1.js sloppyFails
+language/expressions/compound-assignment/S11.13.2_A5.8_T2.js sloppyFails
+language/expressions/compound-assignment/S11.13.2_A5.8_T3.js sloppyFails
+language/expressions/compound-assignment/S11.13.2_A5.8_T4.js sloppyFails
+language/expressions/compound-assignment/S11.13.2_A5.8_T5.js fails
+language/expressions/compound-assignment/S11.13.2_A5.9_T1.js sloppyFails
+language/expressions/compound-assignment/S11.13.2_A5.9_T2.js sloppyFails
+language/expressions/compound-assignment/S11.13.2_A5.9_T3.js sloppyFails
+language/expressions/compound-assignment/S11.13.2_A5.9_T4.js sloppyFails
+language/expressions/compound-assignment/S11.13.2_A5.9_T5.js fails
+language/expressions/compound-assignment/S11.13.2_A6.10_T1.js sloppyFails
+language/expressions/compound-assignment/S11.13.2_A6.11_T1.js sloppyFails
+language/expressions/compound-assignment/S11.13.2_A6.1_T1.js sloppyFails
+language/expressions/compound-assignment/S11.13.2_A6.2_T1.js sloppyFails
+language/expressions/compound-assignment/S11.13.2_A6.3_T1.js sloppyFails
+language/expressions/compound-assignment/S11.13.2_A6.4_T1.js sloppyFails
+language/expressions/compound-assignment/S11.13.2_A6.5_T1.js sloppyFails
+language/expressions/compound-assignment/S11.13.2_A6.6_T1.js sloppyFails
+language/expressions/compound-assignment/S11.13.2_A6.7_T1.js sloppyFails
+language/expressions/compound-assignment/S11.13.2_A6.8_T1.js sloppyFails
+language/expressions/compound-assignment/S11.13.2_A6.9_T1.js sloppyFails
+language/expressions/compound-assignment/S11.13.2_A7.10_T4.js fails
+language/expressions/compound-assignment/S11.13.2_A7.11_T4.js fails
+language/expressions/compound-assignment/S11.13.2_A7.1_T4.js fails
+language/expressions/compound-assignment/S11.13.2_A7.2_T4.js fails
+language/expressions/compound-assignment/S11.13.2_A7.3_T4.js fails
+language/expressions/compound-assignment/S11.13.2_A7.4_T4.js fails
+language/expressions/compound-assignment/S11.13.2_A7.5_T4.js fails
+language/expressions/compound-assignment/S11.13.2_A7.6_T4.js fails
+language/expressions/compound-assignment/S11.13.2_A7.7_T4.js fails
+language/expressions/compound-assignment/S11.13.2_A7.8_T4.js fails
+language/expressions/compound-assignment/S11.13.2_A7.9_T4.js fails
+language/expressions/conditional/tco-cond.js strictFails
+language/expressions/conditional/tco-pos.js strictFails
+language/expressions/delete/super-property.js fails
+language/expressions/function/arguments-with-arguments-fn.js sloppyFails
+language/expressions/function/arguments-with-arguments-lex.js sloppyFails
+language/expressions/function/dflt-params-ref-later.js fails
+language/expressions/function/dflt-params-ref-self.js fails
+language/expressions/function/dstr-ary-ptrn-elem-id-init-fn-name-class.js fails
+language/expressions/function/dstr-dflt-ary-ptrn-elem-id-init-fn-name-class.js fails
+language/expressions/function/dstr-dflt-obj-ptrn-id-init-fn-name-class.js fails
+language/expressions/function/dstr-obj-ptrn-id-init-fn-name-class.js fails
+language/expressions/function/name.js fails
+language/expressions/function/param-dflt-yield-non-strict.js sloppyFails
+language/expressions/function/scope-body-lex-distinct.js sloppyFails
+language/expressions/function/scope-name-var-open-non-strict.js sloppyFails
+language/expressions/function/scope-name-var-open-strict.js strictFails
+language/expressions/function/scope-param-elem-var-close.js sloppyFails
+language/expressions/function/scope-param-elem-var-open.js sloppyFails
+language/expressions/function/scope-param-rest-elem-var-close.js sloppyFails
+language/expressions/function/scope-param-rest-elem-var-open.js sloppyFails
+language/expressions/function/scope-paramsbody-var-open.js fails
+language/expressions/generators/arguments-with-arguments-fn.js sloppyFails
+language/expressions/generators/arguments-with-arguments-lex.js sloppyFails
+language/expressions/generators/default-proto.js fails
+language/expressions/generators/dflt-params-ref-later.js fails
+language/expressions/generators/dflt-params-ref-self.js fails
+language/expressions/generators/dstr-ary-ptrn-elem-id-init-fn-name-class.js fails
+language/expressions/generators/dstr-dflt-ary-ptrn-elem-id-init-fn-name-class.js fails
+language/expressions/generators/dstr-dflt-obj-ptrn-id-init-fn-name-class.js fails
+language/expressions/generators/dstr-obj-ptrn-id-init-fn-name-class.js fails
+language/expressions/generators/eval-body-proto-realm.js fails
+language/expressions/generators/name.js fails
+language/expressions/generators/named-yield-identifier-non-strict.js sloppyFails
+language/expressions/generators/scope-body-lex-distinct.js sloppyFails
+language/expressions/generators/scope-name-var-open-non-strict.js sloppyFails
+language/expressions/generators/scope-name-var-open-strict.js strictFails
+language/expressions/generators/scope-param-elem-var-close.js sloppyFails
+language/expressions/generators/scope-param-elem-var-open.js sloppyFails
+language/expressions/generators/scope-param-rest-elem-var-close.js sloppyFails
+language/expressions/generators/scope-param-rest-elem-var-open.js sloppyFails
+language/expressions/generators/scope-paramsbody-var-open.js fails
+language/expressions/generators/yield-as-function-expression-binding-identifier.js sloppyFails
+language/expressions/generators/yield-as-identifier-in-nested-function.js sloppyFails
+language/expressions/generators/yield-as-literal-property-name.js fails
+language/expressions/generators/yield-as-property-name.js fails
+language/expressions/generators/yield-identifier-non-strict.js sloppyFails
+language/expressions/generators/yield-star-before-newline.js fails
+language/expressions/instanceof/prototype-getter-with-object-throws.js fails
+language/expressions/instanceof/prototype-getter-with-object.js fails
+language/expressions/logical-and/tco-right.js strictFails
+language/expressions/logical-or/tco-right.js strictFails
+language/expressions/new.target/asi.js fails
+language/expressions/new.target/value-via-call.js fails
+language/expressions/new.target/value-via-fpapply.js fails
+language/expressions/new.target/value-via-fpcall.js fails
+language/expressions/new.target/value-via-member.js fails
+language/expressions/new.target/value-via-new.js fails
+language/expressions/new.target/value-via-reflect-apply.js fails
+language/expressions/new.target/value-via-reflect-construct.js fails
+language/expressions/new.target/value-via-super-call.js fails
+language/expressions/new.target/value-via-super-property.js fails
+language/expressions/new.target/value-via-tagged-template.js fails
+language/expressions/new/non-ctor-err-realm.js fails
+language/expressions/object/concise-generator.js fails
+language/expressions/object/dstr-gen-meth-ary-ptrn-elem-id-init-fn-name-class.js fails
+language/expressions/object/dstr-gen-meth-dflt-ary-ptrn-elem-id-init-fn-name-class.js fails
+language/expressions/object/dstr-gen-meth-dflt-obj-ptrn-id-init-fn-name-class.js fails
+language/expressions/object/dstr-gen-meth-obj-ptrn-id-init-fn-name-class.js fails
+language/expressions/object/dstr-meth-ary-ptrn-elem-id-init-fn-name-class.js fails
+language/expressions/object/dstr-meth-dflt-ary-ptrn-elem-id-init-fn-name-class.js fails
+language/expressions/object/dstr-meth-dflt-obj-ptrn-id-init-fn-name-class.js fails
+language/expressions/object/dstr-meth-obj-ptrn-id-init-fn-name-class.js fails
+language/expressions/object/fn-name-accessor-get.js fails
+language/expressions/object/fn-name-accessor-set.js fails
+language/expressions/object/fn-name-arrow.js fails
+language/expressions/object/fn-name-class.js fails
+language/expressions/object/fn-name-cover.js fails
+language/expressions/object/fn-name-fn.js fails
+language/expressions/object/fn-name-gen.js fails
+language/expressions/object/getter-super-prop.js fails
+language/expressions/object/let-non-strict-access.js sloppyFails
+language/expressions/object/let-non-strict-syntax.js sloppyFails
+language/expressions/object/method-definition/fn-name-fn.js fails
+language/expressions/object/method-definition/fn-name-gen.js fails
+language/expressions/object/method-definition/gen-meth-dflt-params-ref-later.js fails
+language/expressions/object/method-definition/gen-meth-dflt-params-ref-self.js fails
+language/expressions/object/method-definition/gen-yield-identifier-non-strict.js sloppyFails
+language/expressions/object/method-definition/generator-name-prop-symbol.js fails
+language/expressions/object/method-definition/generator-super-prop-body.js fails
+language/expressions/object/method-definition/generator-super-prop-param.js fails
+language/expressions/object/method-definition/meth-dflt-params-ref-later.js fails
+language/expressions/object/method-definition/meth-dflt-params-ref-self.js fails
+language/expressions/object/method-definition/name-invoke-ctor.js fails
+language/expressions/object/method-definition/name-name-prop-symbol.js fails
+language/expressions/object/method-definition/name-prototype-prop.js fails
+language/expressions/object/method-definition/name-super-prop-body.js fails
+language/expressions/object/method-definition/name-super-prop-param.js fails
+language/expressions/object/method-definition/object-method-returns-promise.js fails
+language/expressions/object/method-definition/yield-as-function-expression-binding-identifier.js sloppyFails
+language/expressions/object/method-definition/yield-as-identifier-in-nested-function.js sloppyFails
+language/expressions/object/method-definition/yield-as-literal-property-name.js fails
+language/expressions/object/method-definition/yield-as-property-name.js fails
+language/expressions/object/method-definition/yield-star-before-newline.js fails
+language/expressions/object/method.js fails
+language/expressions/object/prop-def-id-eval-error-2.js sloppyFails
+language/expressions/object/properties-names-eval-arguments.js strictFails
+language/expressions/object/scope-gen-meth-body-lex-distinct.js sloppyFails
+language/expressions/object/scope-gen-meth-param-elem-var-close.js sloppyFails
+language/expressions/object/scope-gen-meth-param-elem-var-open.js sloppyFails
+language/expressions/object/scope-gen-meth-param-rest-elem-var-close.js sloppyFails
+language/expressions/object/scope-gen-meth-param-rest-elem-var-open.js sloppyFails
+language/expressions/object/scope-gen-meth-paramsbody-var-open.js fails
+language/expressions/object/scope-getter-body-lex-distinc.js sloppyFails
+language/expressions/object/scope-meth-body-lex-distinct.js sloppyFails
+language/expressions/object/scope-meth-param-elem-var-close.js sloppyFails
+language/expressions/object/scope-meth-param-elem-var-open.js sloppyFails
+language/expressions/object/scope-meth-param-rest-elem-var-close.js sloppyFails
+language/expressions/object/scope-meth-param-rest-elem-var-open.js sloppyFails
+language/expressions/object/scope-meth-paramsbody-var-open.js fails
+language/expressions/object/scope-setter-body-lex-distinc.js sloppyFails
+language/expressions/object/scope-setter-paramsbody-var-open.js fails
+language/expressions/object/setter-super-prop.js fails
+language/expressions/postfix-decrement/S11.3.2_A5_T1.js sloppyFails
+language/expressions/postfix-decrement/S11.3.2_A5_T2.js sloppyFails
+language/expressions/postfix-decrement/S11.3.2_A5_T3.js sloppyFails
+language/expressions/postfix-decrement/S11.3.2_A5_T4.js sloppyFails
+language/expressions/postfix-decrement/S11.3.2_A5_T5.js fails
+language/expressions/postfix-decrement/S11.3.2_A6_T3.js fails
+language/expressions/postfix-increment/S11.3.1_A5_T1.js sloppyFails
+language/expressions/postfix-increment/S11.3.1_A5_T2.js sloppyFails
+language/expressions/postfix-increment/S11.3.1_A5_T3.js sloppyFails
+language/expressions/postfix-increment/S11.3.1_A5_T4.js sloppyFails
+language/expressions/postfix-increment/S11.3.1_A5_T5.js fails
+language/expressions/postfix-increment/S11.3.1_A6_T3.js fails
+language/expressions/prefix-decrement/S11.4.5_A5_T1.js sloppyFails
+language/expressions/prefix-decrement/S11.4.5_A5_T2.js sloppyFails
+language/expressions/prefix-decrement/S11.4.5_A5_T3.js sloppyFails
+language/expressions/prefix-decrement/S11.4.5_A5_T4.js sloppyFails
+language/expressions/prefix-decrement/S11.4.5_A5_T5.js fails
+language/expressions/prefix-decrement/S11.4.5_A6_T3.js fails
+language/expressions/prefix-increment/S11.4.4_A5_T1.js sloppyFails
+language/expressions/prefix-increment/S11.4.4_A5_T2.js sloppyFails
+language/expressions/prefix-increment/S11.4.4_A5_T3.js sloppyFails
+language/expressions/prefix-increment/S11.4.4_A5_T4.js sloppyFails
+language/expressions/prefix-increment/S11.4.4_A5_T5.js fails
+language/expressions/prefix-increment/S11.4.4_A6_T3.js fails
+language/expressions/super/call-arg-evaluation-err.js fails
+language/expressions/super/call-bind-this-value-twice.js fails
+language/expressions/super/call-bind-this-value.js fails
+language/expressions/super/call-construct-error.js fails
+language/expressions/super/call-construct-invocation.js fails
+language/expressions/super/call-expr-value.js fails
+language/expressions/super/call-proto-not-ctor.js fails
+language/expressions/super/call-spread-err-mult-err-expr-throws.js fails
+language/expressions/super/call-spread-err-mult-err-iter-get-value.js fails
+language/expressions/super/call-spread-err-mult-err-itr-get-call.js fails
+language/expressions/super/call-spread-err-mult-err-itr-get-get.js fails
+language/expressions/super/call-spread-err-mult-err-itr-step.js fails
+language/expressions/super/call-spread-err-mult-err-itr-value.js fails
+language/expressions/super/call-spread-err-mult-err-unresolvable.js fails
+language/expressions/super/call-spread-err-sngl-err-expr-throws.js fails
+language/expressions/super/call-spread-err-sngl-err-itr-get-call.js fails
+language/expressions/super/call-spread-err-sngl-err-itr-get-get.js fails
+language/expressions/super/call-spread-err-sngl-err-itr-get-value.js fails
+language/expressions/super/call-spread-err-sngl-err-itr-step.js fails
+language/expressions/super/call-spread-err-sngl-err-itr-value.js fails
+language/expressions/super/call-spread-err-sngl-err-unresolvable.js fails
+language/expressions/super/call-spread-mult-empty.js fails
+language/expressions/super/call-spread-mult-expr.js fails
+language/expressions/super/call-spread-mult-iter.js fails
+language/expressions/super/call-spread-mult-literal.js fails
+language/expressions/super/call-spread-sngl-empty.js fails
+language/expressions/super/call-spread-sngl-expr.js fails
+language/expressions/super/call-spread-sngl-iter.js fails
+language/expressions/super/call-spread-sngl-literal.js fails
+language/expressions/super/prop-dot-cls-null-proto.js fails
+language/expressions/super/prop-dot-cls-ref-strict.js fails
+language/expressions/super/prop-dot-cls-ref-this.js fails
+language/expressions/super/prop-dot-cls-this-uninit.js fails
+language/expressions/super/prop-dot-cls-val-from-arrow.js fails
+language/expressions/super/prop-dot-cls-val-from-eval.js fails
+language/expressions/super/prop-dot-cls-val.js fails
+language/expressions/super/prop-dot-obj-null-proto.js fails
+language/expressions/super/prop-dot-obj-ref-non-strict.js sloppyFails
+language/expressions/super/prop-dot-obj-ref-strict.js strictFails
+language/expressions/super/prop-dot-obj-ref-this.js fails
+language/expressions/super/prop-dot-obj-val-from-arrow.js fails
+language/expressions/super/prop-dot-obj-val-from-eval.js fails
+language/expressions/super/prop-dot-obj-val.js fails
+language/expressions/super/prop-expr-cls-err.js fails
+language/expressions/super/prop-expr-cls-key-err.js fails
+language/expressions/super/prop-expr-cls-null-proto.js fails
+language/expressions/super/prop-expr-cls-ref-strict.js fails
+language/expressions/super/prop-expr-cls-ref-this.js fails
+language/expressions/super/prop-expr-cls-this-uninit.js fails
+language/expressions/super/prop-expr-cls-unresolvable.js fails
+language/expressions/super/prop-expr-cls-val-from-arrow.js fails
+language/expressions/super/prop-expr-cls-val-from-eval.js fails
+language/expressions/super/prop-expr-cls-val.js fails
+language/expressions/super/prop-expr-obj-err.js fails
+language/expressions/super/prop-expr-obj-key-err.js fails
+language/expressions/super/prop-expr-obj-null-proto.js fails
+language/expressions/super/prop-expr-obj-ref-non-strict.js sloppyFails
+language/expressions/super/prop-expr-obj-ref-strict.js strictFails
+language/expressions/super/prop-expr-obj-ref-this.js fails
+language/expressions/super/prop-expr-obj-unresolvable.js fails
+language/expressions/super/prop-expr-obj-val-from-arrow.js fails
+language/expressions/super/prop-expr-obj-val-from-eval.js fails
+language/expressions/super/prop-expr-obj-val.js fails
+language/expressions/super/realm.js fails
+language/expressions/tagged-template/cache-different-functions-same-site.js fails
+language/expressions/tagged-template/cache-eval-inner-function.js fails
+language/expressions/tagged-template/cache-realm.js fails
+language/expressions/tagged-template/cache-same-site-top-level.js fails
+language/expressions/tagged-template/cache-same-site.js fails
+language/expressions/tagged-template/invalid-escape-sequences.js fails
+language/expressions/tagged-template/tco-call.js strictFails
+language/expressions/tagged-template/tco-member.js strictFails
+language/expressions/tagged-template/template-object-frozen-non-strict.js sloppyFails
+language/expressions/tagged-template/template-object-frozen-strict.js strictFails
+language/expressions/tagged-template/template-object.js fails
+language/expressions/tco-pos.js strictFails
+language/expressions/template-literal/tv-character-escape-sequence.js fails
+language/expressions/template-literal/tv-hex-escape-sequence.js fails
+language/expressions/template-literal/tv-line-continuation.js fails
+language/expressions/template-literal/tv-line-terminator-sequence.js fails
+language/expressions/template-literal/tv-no-substitution.js fails
+language/expressions/template-literal/tv-null-character-escape-sequence.js fails
+language/expressions/template-literal/tv-template-character.js fails
+language/expressions/template-literal/tv-template-characters.js fails
+language/expressions/template-literal/tv-template-head.js fails
+language/expressions/template-literal/tv-template-middle.js fails
+language/expressions/template-literal/tv-template-tail.js fails
+language/expressions/template-literal/tv-utf16-escape-sequence.js fails
+language/expressions/template-literal/tv-zwnbsp.js fails
+language/expressions/yield/star-array.js fails
+language/expressions/yield/star-in-rltn-expr.js fails
+language/expressions/yield/star-iterable.js fails
+language/expressions/yield/star-rhs-iter-get-call-err.js fails
+language/expressions/yield/star-rhs-iter-get-call-non-obj.js fails
+language/expressions/yield/star-rhs-iter-get-get-err.js fails
+language/expressions/yield/star-rhs-iter-nrml-next-call-err.js fails
+language/expressions/yield/star-rhs-iter-nrml-next-call-non-obj.js fails
+language/expressions/yield/star-rhs-iter-nrml-next-get-err.js fails
+language/expressions/yield/star-rhs-iter-nrml-next-invoke.js fails
+language/expressions/yield/star-rhs-iter-nrml-res-done-err.js fails
+language/expressions/yield/star-rhs-iter-nrml-res-done-no-value.js fails
+language/expressions/yield/star-rhs-iter-nrml-res-value-err.js fails
+language/expressions/yield/star-rhs-iter-nrml-res-value-final.js fails
+language/expressions/yield/star-rhs-iter-rtrn-no-rtrn.js fails
+language/expressions/yield/star-rhs-iter-rtrn-res-done-err.js fails
+language/expressions/yield/star-rhs-iter-rtrn-res-done-no-value.js fails
+language/expressions/yield/star-rhs-iter-rtrn-res-value-err.js fails
+language/expressions/yield/star-rhs-iter-rtrn-res-value-final.js fails
+language/expressions/yield/star-rhs-iter-rtrn-rtrn-call-err.js fails
+language/expressions/yield/star-rhs-iter-rtrn-rtrn-call-non-obj.js fails
+language/expressions/yield/star-rhs-iter-rtrn-rtrn-get-err.js fails
+language/expressions/yield/star-rhs-iter-rtrn-rtrn-invoke.js fails
+language/expressions/yield/star-rhs-iter-thrw-res-done-err.js fails
+language/expressions/yield/star-rhs-iter-thrw-res-done-no-value.js fails
+language/expressions/yield/star-rhs-iter-thrw-res-value-err.js fails
+language/expressions/yield/star-rhs-iter-thrw-res-value-final.js fails
+language/expressions/yield/star-rhs-iter-thrw-thrw-call-err.js fails
+language/expressions/yield/star-rhs-iter-thrw-thrw-call-non-obj.js fails
+language/expressions/yield/star-rhs-iter-thrw-thrw-get-err.js fails
+language/expressions/yield/star-rhs-iter-thrw-thrw-invoke.js fails
+language/expressions/yield/star-rhs-iter-thrw-violation-no-rtrn.js fails
+language/expressions/yield/star-rhs-iter-thrw-violation-rtrn-call-err.js fails
+language/expressions/yield/star-rhs-iter-thrw-violation-rtrn-call-non-obj.js fails
+language/expressions/yield/star-rhs-iter-thrw-violation-rtrn-get-err.js fails
+language/expressions/yield/star-rhs-iter-thrw-violation-rtrn-invoke.js fails
+language/expressions/yield/star-rhs-unresolvable.js fails
+language/expressions/yield/star-string.js fails
+language/function-code/each-param-has-own-non-shared-eval-scope.js sloppyFails
+language/function-code/each-param-has-own-scope.js sloppyFails
+language/function-code/eval-param-env-with-computed-key.js sloppyFails
+language/function-code/eval-param-env-with-prop-initializer.js sloppyFails
+language/global-code/decl-lex-deletion.js sloppyFails
+language/global-code/decl-lex-restricted-global.js fails
+language/global-code/decl-lex.js fails
+language/global-code/script-decl-func-dups.js fails
+language/global-code/script-decl-func-err-non-configurable.js fails
+language/global-code/script-decl-func-err-non-extensible.js fails
+language/global-code/script-decl-func.js fails
+language/global-code/script-decl-lex-deletion.js sloppyFails
+language/global-code/script-decl-lex-lex.js fails
+language/global-code/script-decl-lex-restricted-global.js fails
+language/global-code/script-decl-lex-var.js fails
+language/global-code/script-decl-lex.js fails
+language/global-code/script-decl-var-collision.js fails
+language/global-code/script-decl-var-err.js fails
+language/global-code/script-decl-var.js fails
+language/identifiers/other_id_continue.js fails
+language/identifiers/other_id_start-escaped.js fails
+language/identifiers/other_id_start.js fails
+language/literals/regexp/u-astral.js fails
+language/literals/regexp/u-case-mapping.js fails
+language/literals/regexp/u-surrogate-pairs-atom-char-class.js fails
+language/literals/regexp/u-surrogate-pairs-atom-dot.js fails
+language/literals/regexp/u-surrogate-pairs-atom-escape-char-class.js fails
+language/literals/regexp/u-surrogate-pairs-atom-escape-decimal.js fails
+language/literals/regexp/u-surrogate-pairs.js fails
+language/literals/regexp/u-unicode-esc.js fails
+language/literals/regexp/y-assertion-start.js fails
+language/module-code/eval-gtbndng-indirect-trlng-comma_FIXTURE.js fails
+language/module-code/eval-gtbndng-indirect-update-as_FIXTURE.js fails
+language/module-code/eval-gtbndng-indirect-update-dflt_FIXTURE.js fails
+language/module-code/eval-gtbndng-indirect-update_FIXTURE.js fails
+language/module-code/eval-rqstd-abrupt-err-type_FIXTURE.js fails
+language/module-code/eval-rqstd-abrupt-err-uri_FIXTURE.js fails
+language/module-code/eval-rqstd-once_FIXTURE.js fails
+language/module-code/eval-rqstd-order-4_FIXTURE.js fails
+language/module-code/eval-rqstd-order-6_FIXTURE.js fails
+language/module-code/eval-rqstd-order-8_FIXTURE.js fails
+language/module-code/instn-iee-bndng-cls_FIXTURE.js fails
+language/module-code/instn-iee-bndng-const_FIXTURE.js fails
+language/module-code/instn-iee-bndng-fun_FIXTURE.js fails
+language/module-code/instn-iee-bndng-gen_FIXTURE.js fails
+language/module-code/instn-iee-bndng-let_FIXTURE.js fails
+language/module-code/instn-iee-bndng-var_FIXTURE.js fails
+language/module-code/instn-iee-err-ambiguous-1_FIXTURE.js fails
+language/module-code/instn-iee-err-ambiguous-2_FIXTURE.js fails
+language/module-code/instn-iee-err-ambiguous_FIXTURE.js fails
+language/module-code/instn-iee-err-circular_FIXTURE.js fails
+language/module-code/instn-iee-err-dflt-thru-star-dflt_FIXTURE.js fails
+language/module-code/instn-iee-err-dflt-thru-star-int_FIXTURE.js fails
+language/module-code/instn-iee-iee-cycle-2_FIXTURE.js fails
+language/module-code/instn-iee-star-cycle-2_FIXTURE.js fails
+language/module-code/instn-iee-star-cycle-indirect-x_FIXTURE.js fails
+language/module-code/instn-iee-trlng-comma_FIXTURE.js fails
+language/module-code/instn-named-err-ambiguous-1_FIXTURE.js fails
+language/module-code/instn-named-err-ambiguous-2_FIXTURE.js fails
+language/module-code/instn-named-err-ambiguous_FIXTURE.js fails
+language/module-code/instn-named-err-dflt-thru-star-dflt_FIXTURE.js fails
+language/module-code/instn-named-err-dflt-thru-star-int_FIXTURE.js fails
+language/module-code/instn-named-iee-cycle-2_FIXTURE.js fails
+language/module-code/instn-named-star-cycle-2_FIXTURE.js fails
+language/module-code/instn-named-star-cycle-indirect-x_FIXTURE.js fails
+language/module-code/instn-resolve-empty-export_FIXTURE.js fails
+language/module-code/instn-resolve-empty-import_FIXTURE.js fails
+language/module-code/instn-resolve-err-reference_FIXTURE.js fails
+language/module-code/instn-resolve-err-syntax_FIXTURE.js fails
+language/module-code/instn-resolve-order-depth-child_FIXTURE.js fails
+language/module-code/instn-resolve-order-depth-reference_FIXTURE.js fails
+language/module-code/instn-resolve-order-depth-syntax_FIXTURE.js fails
+language/module-code/instn-resolve-order-src-reference_FIXTURE.js fails
+language/module-code/instn-resolve-order-src-syntax_FIXTURE.js fails
+language/module-code/instn-star-ambiguous-1_FIXTURE.js fails
+language/module-code/instn-star-ambiguous-2_FIXTURE.js fails
+language/module-code/instn-star-ambiguous_FIXTURE.js fails
+language/module-code/instn-star-equality-other_FIXTURE.js fails
+language/module-code/instn-star-err-not-found-faulty_FIXTURE.js fails
+language/module-code/instn-star-iee-cycle-2_FIXTURE.js fails
+language/module-code/instn-star-props-circular-a_FIXTURE.js fails
+language/module-code/instn-star-props-circular-b_FIXTURE.js fails
+language/module-code/instn-star-props-dflt-keep-indirect-def_FIXTURE.js fails
+language/module-code/instn-star-props-dflt-keep-indirect-reexport_FIXTURE.js fails
+language/module-code/instn-star-props-dflt-keep-local-named_FIXTURE.js fails
+language/module-code/instn-star-props-dflt-keep-local-prod_FIXTURE.js fails
+language/module-code/instn-star-props-dflt-skip-named_FIXTURE.js fails
+language/module-code/instn-star-props-dflt-skip-prod_FIXTURE.js fails
+language/module-code/instn-star-props-dflt-skip-star-named_FIXTURE.js fails
+language/module-code/instn-star-props-dflt-skip-star-prod_FIXTURE.js fails
+language/module-code/instn-star-props-nrml-1_FIXTURE.js fails
+language/module-code/instn-star-props-nrml-indirect_FIXTURE.js fails
+language/module-code/instn-star-props-nrml-star_FIXTURE.js fails
+language/module-code/instn-star-star-cycle-2_FIXTURE.js fails
+language/module-code/instn-star-star-cycle-indirect-x_FIXTURE.js fails
+language/module-code/instn-uniq-env-rec-other_FIXTURE.js fails
+language/module-code/namespace/internals/own-property-keys-binding-types_FIXTURE.js fails
+language/rest-parameters/with-new-target.js fails
+language/statements/async-function/cptn-decl.js fails
+language/statements/async-function/declaration-returns-promise.js fails
+language/statements/async-function/evaluation-body.js fails
+language/statements/async-function/syntax-declaration-line-terminators-allowed.js fails
+language/statements/block/tco-stmt-list.js strictFails
+language/statements/block/tco-stmt.js strictFails
+language/statements/class/accessor-name-inst-computed-err-evaluation.js fails
+language/statements/class/accessor-name-inst-computed-err-to-prop-key.js fails
+language/statements/class/accessor-name-inst-computed-err-unresolvable.js fails
+language/statements/class/accessor-name-inst-computed-yield-expr.js fails
+language/statements/class/accessor-name-inst-computed.js fails
+language/statements/class/accessor-name-inst-literal-numeric-binary.js fails
+language/statements/class/accessor-name-inst-literal-numeric-exponent.js fails
+language/statements/class/accessor-name-inst-literal-numeric-hex.js fails
+language/statements/class/accessor-name-inst-literal-numeric-leading-decimal.js fails
+language/statements/class/accessor-name-inst-literal-numeric-non-canonical.js fails
+language/statements/class/accessor-name-inst-literal-numeric-octal.js fails
+language/statements/class/accessor-name-inst-literal-numeric-zero.js fails
+language/statements/class/accessor-name-inst-literal-string-char-escape.js fails
+language/statements/class/accessor-name-inst-literal-string-double-quote.js fails
+language/statements/class/accessor-name-inst-literal-string-empty.js fails
+language/statements/class/accessor-name-inst-literal-string-hex-escape.js fails
+language/statements/class/accessor-name-inst-literal-string-line-continuation.js fails
+language/statements/class/accessor-name-inst-literal-string-single-quote.js fails
+language/statements/class/accessor-name-inst-literal-string-unicode-escape.js fails
+language/statements/class/accessor-name-static-computed-err-evaluation.js fails
+language/statements/class/accessor-name-static-computed-err-to-prop-key.js fails
+language/statements/class/accessor-name-static-computed-err-unresolvable.js fails
+language/statements/class/accessor-name-static-computed-yield-expr.js fails
+language/statements/class/accessor-name-static-computed.js fails
+language/statements/class/accessor-name-static-literal-numeric-binary.js fails
+language/statements/class/accessor-name-static-literal-numeric-exponent.js fails
+language/statements/class/accessor-name-static-literal-numeric-hex.js fails
+language/statements/class/accessor-name-static-literal-numeric-leading-decimal.js fails
+language/statements/class/accessor-name-static-literal-numeric-non-canonical.js fails
+language/statements/class/accessor-name-static-literal-numeric-octal.js fails
+language/statements/class/accessor-name-static-literal-numeric-zero.js fails
+language/statements/class/accessor-name-static-literal-string-char-escape.js fails
+language/statements/class/accessor-name-static-literal-string-double-quote.js fails
+language/statements/class/accessor-name-static-literal-string-empty.js fails
+language/statements/class/accessor-name-static-literal-string-hex-escape.js fails
+language/statements/class/accessor-name-static-literal-string-line-continuation.js fails
+language/statements/class/accessor-name-static-literal-string-single-quote.js fails
+language/statements/class/accessor-name-static-literal-string-unicode-escape.js fails
+language/statements/class/arguments/access.js fails
+language/statements/class/arguments/default-constructor.js fails
+language/statements/class/constructor-inferred-observable-iteration.js fails
+language/statements/class/cptn-decl.js fails
+language/statements/class/definition/accessors.js fails
+language/statements/class/definition/basics.js fails
+language/statements/class/definition/class-method-returns-promise.js fails
+language/statements/class/definition/constructable-but-no-prototype.js fails
+language/statements/class/definition/constructor-property.js fails
+language/statements/class/definition/constructor-strict-by-default.js fails
+language/statements/class/definition/constructor.js fails
+language/statements/class/definition/fn-name-accessor-get.js fails
+language/statements/class/definition/fn-name-accessor-set.js fails
+language/statements/class/definition/fn-name-gen-method.js fails
+language/statements/class/definition/fn-name-method.js fails
+language/statements/class/definition/fn-name-static-precedence.js fails
+language/statements/class/definition/getters-non-configurable-err.js fails
+language/statements/class/definition/getters-prop-desc.js fails
+language/statements/class/definition/getters-restricted-ids.js fails
+language/statements/class/definition/implicit-constructor.js fails
+language/statements/class/definition/invalid-extends.js fails
+language/statements/class/definition/methods-gen-no-yield.js fails
+language/statements/class/definition/methods-gen-return.js fails
+language/statements/class/definition/methods-gen-yield-as-expression-with-rhs.js fails
+language/statements/class/definition/methods-gen-yield-as-expression-without-rhs.js fails
+language/statements/class/definition/methods-gen-yield-as-generator-method-binding-identifier.js fails
+language/statements/class/definition/methods-gen-yield-as-literal-property-name.js fails
+language/statements/class/definition/methods-gen-yield-as-property-name.js fails
+language/statements/class/definition/methods-gen-yield-as-statement.js fails
+language/statements/class/definition/methods-gen-yield-as-yield-operand.js fails
+language/statements/class/definition/methods-gen-yield-newline.js fails
+language/statements/class/definition/methods-gen-yield-star-before-newline.js fails
+language/statements/class/definition/methods-named-eval-arguments.js fails
+language/statements/class/definition/methods-restricted-properties.js fails
+language/statements/class/definition/methods.js fails
+language/statements/class/definition/numeric-property-names.js fails
+language/statements/class/definition/prototype-getter.js fails
+language/statements/class/definition/prototype-property.js fails
+language/statements/class/definition/prototype-setter.js fails
+language/statements/class/definition/prototype-wiring.js fails
+language/statements/class/definition/setters-non-configurable-err.js fails
+language/statements/class/definition/setters-prop-desc.js fails
+language/statements/class/definition/setters-restricted-ids.js fails
+language/statements/class/definition/side-effects-in-extends.js fails
+language/statements/class/definition/side-effects-in-property-define.js fails
+language/statements/class/definition/this-access-restriction-2.js fails
+language/statements/class/definition/this-access-restriction.js fails
+language/statements/class/definition/this-check-ordering.js fails
+language/statements/class/dstr-gen-meth-ary-init-iter-close.js fails
+language/statements/class/dstr-gen-meth-ary-init-iter-get-err.js fails
+language/statements/class/dstr-gen-meth-ary-init-iter-no-close.js fails
+language/statements/class/dstr-gen-meth-ary-name-iter-val.js fails
+language/statements/class/dstr-gen-meth-ary-ptrn-elem-ary-elem-init.js fails
+language/statements/class/dstr-gen-meth-ary-ptrn-elem-ary-elem-iter.js fails
+language/statements/class/dstr-gen-meth-ary-ptrn-elem-ary-elision-init.js fails
+language/statements/class/dstr-gen-meth-ary-ptrn-elem-ary-elision-iter.js fails
+language/statements/class/dstr-gen-meth-ary-ptrn-elem-ary-empty-init.js fails
+language/statements/class/dstr-gen-meth-ary-ptrn-elem-ary-empty-iter.js fails
+language/statements/class/dstr-gen-meth-ary-ptrn-elem-ary-rest-init.js fails
+language/statements/class/dstr-gen-meth-ary-ptrn-elem-ary-rest-iter.js fails
+language/statements/class/dstr-gen-meth-ary-ptrn-elem-ary-val-null.js fails
+language/statements/class/dstr-gen-meth-ary-ptrn-elem-id-init-exhausted.js fails
+language/statements/class/dstr-gen-meth-ary-ptrn-elem-id-init-fn-name-arrow.js fails
+language/statements/class/dstr-gen-meth-ary-ptrn-elem-id-init-fn-name-class.js fails
+language/statements/class/dstr-gen-meth-ary-ptrn-elem-id-init-fn-name-cover.js fails
+language/statements/class/dstr-gen-meth-ary-ptrn-elem-id-init-fn-name-fn.js fails
+language/statements/class/dstr-gen-meth-ary-ptrn-elem-id-init-fn-name-gen.js fails
+language/statements/class/dstr-gen-meth-ary-ptrn-elem-id-init-hole.js fails
+language/statements/class/dstr-gen-meth-ary-ptrn-elem-id-init-skipped.js fails
+language/statements/class/dstr-gen-meth-ary-ptrn-elem-id-init-throws.js fails
+language/statements/class/dstr-gen-meth-ary-ptrn-elem-id-init-undef.js fails
+language/statements/class/dstr-gen-meth-ary-ptrn-elem-id-init-unresolvable.js fails
+language/statements/class/dstr-gen-meth-ary-ptrn-elem-id-iter-complete.js fails
+language/statements/class/dstr-gen-meth-ary-ptrn-elem-id-iter-done.js fails
+language/statements/class/dstr-gen-meth-ary-ptrn-elem-id-iter-step-err.js fails
+language/statements/class/dstr-gen-meth-ary-ptrn-elem-id-iter-val-err.js fails
+language/statements/class/dstr-gen-meth-ary-ptrn-elem-id-iter-val.js fails
+language/statements/class/dstr-gen-meth-ary-ptrn-elem-obj-id-init.js fails
+language/statements/class/dstr-gen-meth-ary-ptrn-elem-obj-id.js fails
+language/statements/class/dstr-gen-meth-ary-ptrn-elem-obj-prop-id-init.js fails
+language/statements/class/dstr-gen-meth-ary-ptrn-elem-obj-prop-id.js fails
+language/statements/class/dstr-gen-meth-ary-ptrn-elem-obj-val-null.js fails
+language/statements/class/dstr-gen-meth-ary-ptrn-elem-obj-val-undef.js fails
+language/statements/class/dstr-gen-meth-ary-ptrn-elision-exhausted.js fails
+language/statements/class/dstr-gen-meth-ary-ptrn-elision-step-err.js fails
+language/statements/class/dstr-gen-meth-ary-ptrn-elision.js fails
+language/statements/class/dstr-gen-meth-ary-ptrn-empty.js fails
+language/statements/class/dstr-gen-meth-ary-ptrn-rest-ary-elem.js fails
+language/statements/class/dstr-gen-meth-ary-ptrn-rest-ary-elision.js fails
+language/statements/class/dstr-gen-meth-ary-ptrn-rest-ary-empty.js fails
+language/statements/class/dstr-gen-meth-ary-ptrn-rest-ary-rest.js fails
+language/statements/class/dstr-gen-meth-ary-ptrn-rest-id-elision-next-err.js fails
+language/statements/class/dstr-gen-meth-ary-ptrn-rest-id-elision.js fails
+language/statements/class/dstr-gen-meth-ary-ptrn-rest-id-exhausted.js fails
+language/statements/class/dstr-gen-meth-ary-ptrn-rest-id-iter-step-err.js fails
+language/statements/class/dstr-gen-meth-ary-ptrn-rest-id-iter-val-err.js fails
+language/statements/class/dstr-gen-meth-ary-ptrn-rest-id.js fails
+language/statements/class/dstr-gen-meth-ary-ptrn-rest-obj-id.js fails
+language/statements/class/dstr-gen-meth-ary-ptrn-rest-obj-prop-id.js fails
+language/statements/class/dstr-gen-meth-dflt-ary-init-iter-close.js fails
+language/statements/class/dstr-gen-meth-dflt-ary-init-iter-get-err.js fails
+language/statements/class/dstr-gen-meth-dflt-ary-init-iter-no-close.js fails
+language/statements/class/dstr-gen-meth-dflt-ary-name-iter-val.js fails
+language/statements/class/dstr-gen-meth-dflt-ary-ptrn-elem-ary-elem-init.js fails
+language/statements/class/dstr-gen-meth-dflt-ary-ptrn-elem-ary-elem-iter.js fails
+language/statements/class/dstr-gen-meth-dflt-ary-ptrn-elem-ary-elision-init.js fails
+language/statements/class/dstr-gen-meth-dflt-ary-ptrn-elem-ary-elision-iter.js fails
+language/statements/class/dstr-gen-meth-dflt-ary-ptrn-elem-ary-empty-init.js fails
+language/statements/class/dstr-gen-meth-dflt-ary-ptrn-elem-ary-empty-iter.js fails
+language/statements/class/dstr-gen-meth-dflt-ary-ptrn-elem-ary-rest-init.js fails
+language/statements/class/dstr-gen-meth-dflt-ary-ptrn-elem-ary-rest-iter.js fails
+language/statements/class/dstr-gen-meth-dflt-ary-ptrn-elem-ary-val-null.js fails
+language/statements/class/dstr-gen-meth-dflt-ary-ptrn-elem-id-init-exhausted.js fails
+language/statements/class/dstr-gen-meth-dflt-ary-ptrn-elem-id-init-fn-name-arrow.js fails
+language/statements/class/dstr-gen-meth-dflt-ary-ptrn-elem-id-init-fn-name-class.js fails
+language/statements/class/dstr-gen-meth-dflt-ary-ptrn-elem-id-init-fn-name-cover.js fails
+language/statements/class/dstr-gen-meth-dflt-ary-ptrn-elem-id-init-fn-name-fn.js fails
+language/statements/class/dstr-gen-meth-dflt-ary-ptrn-elem-id-init-fn-name-gen.js fails
+language/statements/class/dstr-gen-meth-dflt-ary-ptrn-elem-id-init-hole.js fails
+language/statements/class/dstr-gen-meth-dflt-ary-ptrn-elem-id-init-skipped.js fails
+language/statements/class/dstr-gen-meth-dflt-ary-ptrn-elem-id-init-throws.js fails
+language/statements/class/dstr-gen-meth-dflt-ary-ptrn-elem-id-init-undef.js fails
+language/statements/class/dstr-gen-meth-dflt-ary-ptrn-elem-id-init-unresolvable.js fails
+language/statements/class/dstr-gen-meth-dflt-ary-ptrn-elem-id-iter-complete.js fails
+language/statements/class/dstr-gen-meth-dflt-ary-ptrn-elem-id-iter-done.js fails
+language/statements/class/dstr-gen-meth-dflt-ary-ptrn-elem-id-iter-step-err.js fails
+language/statements/class/dstr-gen-meth-dflt-ary-ptrn-elem-id-iter-val-err.js fails
+language/statements/class/dstr-gen-meth-dflt-ary-ptrn-elem-id-iter-val.js fails
+language/statements/class/dstr-gen-meth-dflt-ary-ptrn-elem-obj-id-init.js fails
+language/statements/class/dstr-gen-meth-dflt-ary-ptrn-elem-obj-id.js fails
+language/statements/class/dstr-gen-meth-dflt-ary-ptrn-elem-obj-prop-id-init.js fails
+language/statements/class/dstr-gen-meth-dflt-ary-ptrn-elem-obj-prop-id.js fails
+language/statements/class/dstr-gen-meth-dflt-ary-ptrn-elem-obj-val-null.js fails
+language/statements/class/dstr-gen-meth-dflt-ary-ptrn-elem-obj-val-undef.js fails
+language/statements/class/dstr-gen-meth-dflt-ary-ptrn-elision-exhausted.js fails
+language/statements/class/dstr-gen-meth-dflt-ary-ptrn-elision-step-err.js fails
+language/statements/class/dstr-gen-meth-dflt-ary-ptrn-elision.js fails
+language/statements/class/dstr-gen-meth-dflt-ary-ptrn-empty.js fails
+language/statements/class/dstr-gen-meth-dflt-ary-ptrn-rest-ary-elem.js fails
+language/statements/class/dstr-gen-meth-dflt-ary-ptrn-rest-ary-elision.js fails
+language/statements/class/dstr-gen-meth-dflt-ary-ptrn-rest-ary-empty.js fails
+language/statements/class/dstr-gen-meth-dflt-ary-ptrn-rest-ary-rest.js fails
+language/statements/class/dstr-gen-meth-dflt-ary-ptrn-rest-id-elision-next-err.js fails
+language/statements/class/dstr-gen-meth-dflt-ary-ptrn-rest-id-elision.js fails
+language/statements/class/dstr-gen-meth-dflt-ary-ptrn-rest-id-exhausted.js fails
+language/statements/class/dstr-gen-meth-dflt-ary-ptrn-rest-id-iter-step-err.js fails
+language/statements/class/dstr-gen-meth-dflt-ary-ptrn-rest-id-iter-val-err.js fails
+language/statements/class/dstr-gen-meth-dflt-ary-ptrn-rest-id.js fails
+language/statements/class/dstr-gen-meth-dflt-ary-ptrn-rest-obj-id.js fails
+language/statements/class/dstr-gen-meth-dflt-ary-ptrn-rest-obj-prop-id.js fails
+language/statements/class/dstr-gen-meth-dflt-obj-init-null.js fails
+language/statements/class/dstr-gen-meth-dflt-obj-init-undefined.js fails
+language/statements/class/dstr-gen-meth-dflt-obj-ptrn-empty.js fails
+language/statements/class/dstr-gen-meth-dflt-obj-ptrn-id-get-value-err.js fails
+language/statements/class/dstr-gen-meth-dflt-obj-ptrn-id-init-fn-name-arrow.js fails
+language/statements/class/dstr-gen-meth-dflt-obj-ptrn-id-init-fn-name-class.js fails
+language/statements/class/dstr-gen-meth-dflt-obj-ptrn-id-init-fn-name-cover.js fails
+language/statements/class/dstr-gen-meth-dflt-obj-ptrn-id-init-fn-name-fn.js fails
+language/statements/class/dstr-gen-meth-dflt-obj-ptrn-id-init-fn-name-gen.js fails
+language/statements/class/dstr-gen-meth-dflt-obj-ptrn-id-init-skipped.js fails
+language/statements/class/dstr-gen-meth-dflt-obj-ptrn-id-init-throws.js fails
+language/statements/class/dstr-gen-meth-dflt-obj-ptrn-id-init-unresolvable.js fails
+language/statements/class/dstr-gen-meth-dflt-obj-ptrn-id-trailing-comma.js fails
+language/statements/class/dstr-gen-meth-dflt-obj-ptrn-list-err.js fails
+language/statements/class/dstr-gen-meth-dflt-obj-ptrn-prop-ary-init.js fails
+language/statements/class/dstr-gen-meth-dflt-obj-ptrn-prop-ary-trailing-comma.js fails
+language/statements/class/dstr-gen-meth-dflt-obj-ptrn-prop-ary-value-null.js fails
+language/statements/class/dstr-gen-meth-dflt-obj-ptrn-prop-ary.js fails
+language/statements/class/dstr-gen-meth-dflt-obj-ptrn-prop-eval-err.js fails
+language/statements/class/dstr-gen-meth-dflt-obj-ptrn-prop-id-get-value-err.js fails
+language/statements/class/dstr-gen-meth-dflt-obj-ptrn-prop-id-init-skipped.js fails
+language/statements/class/dstr-gen-meth-dflt-obj-ptrn-prop-id-init-throws.js fails
+language/statements/class/dstr-gen-meth-dflt-obj-ptrn-prop-id-init-unresolvable.js fails
+language/statements/class/dstr-gen-meth-dflt-obj-ptrn-prop-id-init.js fails
+language/statements/class/dstr-gen-meth-dflt-obj-ptrn-prop-id-trailing-comma.js fails
+language/statements/class/dstr-gen-meth-dflt-obj-ptrn-prop-id.js fails
+language/statements/class/dstr-gen-meth-dflt-obj-ptrn-prop-obj-init.js fails
+language/statements/class/dstr-gen-meth-dflt-obj-ptrn-prop-obj-value-null.js fails
+language/statements/class/dstr-gen-meth-dflt-obj-ptrn-prop-obj-value-undef.js fails
+language/statements/class/dstr-gen-meth-dflt-obj-ptrn-prop-obj.js fails
+language/statements/class/dstr-gen-meth-obj-init-null.js fails
+language/statements/class/dstr-gen-meth-obj-init-undefined.js fails
+language/statements/class/dstr-gen-meth-obj-ptrn-empty.js fails
+language/statements/class/dstr-gen-meth-obj-ptrn-id-get-value-err.js fails
+language/statements/class/dstr-gen-meth-obj-ptrn-id-init-fn-name-arrow.js fails
+language/statements/class/dstr-gen-meth-obj-ptrn-id-init-fn-name-class.js fails
+language/statements/class/dstr-gen-meth-obj-ptrn-id-init-fn-name-cover.js fails
+language/statements/class/dstr-gen-meth-obj-ptrn-id-init-fn-name-fn.js fails
+language/statements/class/dstr-gen-meth-obj-ptrn-id-init-fn-name-gen.js fails
+language/statements/class/dstr-gen-meth-obj-ptrn-id-init-skipped.js fails
+language/statements/class/dstr-gen-meth-obj-ptrn-id-init-throws.js fails
+language/statements/class/dstr-gen-meth-obj-ptrn-id-init-unresolvable.js fails
+language/statements/class/dstr-gen-meth-obj-ptrn-id-trailing-comma.js fails
+language/statements/class/dstr-gen-meth-obj-ptrn-list-err.js fails
+language/statements/class/dstr-gen-meth-obj-ptrn-prop-ary-init.js fails
+language/statements/class/dstr-gen-meth-obj-ptrn-prop-ary-trailing-comma.js fails
+language/statements/class/dstr-gen-meth-obj-ptrn-prop-ary-value-null.js fails
+language/statements/class/dstr-gen-meth-obj-ptrn-prop-ary.js fails
+language/statements/class/dstr-gen-meth-obj-ptrn-prop-eval-err.js fails
+language/statements/class/dstr-gen-meth-obj-ptrn-prop-id-get-value-err.js fails
+language/statements/class/dstr-gen-meth-obj-ptrn-prop-id-init-skipped.js fails
+language/statements/class/dstr-gen-meth-obj-ptrn-prop-id-init-throws.js fails
+language/statements/class/dstr-gen-meth-obj-ptrn-prop-id-init-unresolvable.js fails
+language/statements/class/dstr-gen-meth-obj-ptrn-prop-id-init.js fails
+language/statements/class/dstr-gen-meth-obj-ptrn-prop-id-trailing-comma.js fails
+language/statements/class/dstr-gen-meth-obj-ptrn-prop-id.js fails
+language/statements/class/dstr-gen-meth-obj-ptrn-prop-obj-init.js fails
+language/statements/class/dstr-gen-meth-obj-ptrn-prop-obj-value-null.js fails
+language/statements/class/dstr-gen-meth-obj-ptrn-prop-obj-value-undef.js fails
+language/statements/class/dstr-gen-meth-obj-ptrn-prop-obj.js fails
+language/statements/class/dstr-gen-meth-static-ary-init-iter-close.js fails
+language/statements/class/dstr-gen-meth-static-ary-init-iter-get-err.js fails
+language/statements/class/dstr-gen-meth-static-ary-init-iter-no-close.js fails
+language/statements/class/dstr-gen-meth-static-ary-name-iter-val.js fails
+language/statements/class/dstr-gen-meth-static-ary-ptrn-elem-ary-elem-init.js fails
+language/statements/class/dstr-gen-meth-static-ary-ptrn-elem-ary-elem-iter.js fails
+language/statements/class/dstr-gen-meth-static-ary-ptrn-elem-ary-elision-init.js fails
+language/statements/class/dstr-gen-meth-static-ary-ptrn-elem-ary-elision-iter.js fails
+language/statements/class/dstr-gen-meth-static-ary-ptrn-elem-ary-empty-init.js fails
+language/statements/class/dstr-gen-meth-static-ary-ptrn-elem-ary-empty-iter.js fails
+language/statements/class/dstr-gen-meth-static-ary-ptrn-elem-ary-rest-init.js fails
+language/statements/class/dstr-gen-meth-static-ary-ptrn-elem-ary-rest-iter.js fails
+language/statements/class/dstr-gen-meth-static-ary-ptrn-elem-ary-val-null.js fails
+language/statements/class/dstr-gen-meth-static-ary-ptrn-elem-id-init-exhausted.js fails
+language/statements/class/dstr-gen-meth-static-ary-ptrn-elem-id-init-fn-name-arrow.js fails
+language/statements/class/dstr-gen-meth-static-ary-ptrn-elem-id-init-fn-name-class.js fails
+language/statements/class/dstr-gen-meth-static-ary-ptrn-elem-id-init-fn-name-cover.js fails
+language/statements/class/dstr-gen-meth-static-ary-ptrn-elem-id-init-fn-name-fn.js fails
+language/statements/class/dstr-gen-meth-static-ary-ptrn-elem-id-init-fn-name-gen.js fails
+language/statements/class/dstr-gen-meth-static-ary-ptrn-elem-id-init-hole.js fails
+language/statements/class/dstr-gen-meth-static-ary-ptrn-elem-id-init-skipped.js fails
+language/statements/class/dstr-gen-meth-static-ary-ptrn-elem-id-init-throws.js fails
+language/statements/class/dstr-gen-meth-static-ary-ptrn-elem-id-init-undef.js fails
+language/statements/class/dstr-gen-meth-static-ary-ptrn-elem-id-init-unresolvable.js fails
+language/statements/class/dstr-gen-meth-static-ary-ptrn-elem-id-iter-complete.js fails
+language/statements/class/dstr-gen-meth-static-ary-ptrn-elem-id-iter-done.js fails
+language/statements/class/dstr-gen-meth-static-ary-ptrn-elem-id-iter-step-err.js fails
+language/statements/class/dstr-gen-meth-static-ary-ptrn-elem-id-iter-val-err.js fails
+language/statements/class/dstr-gen-meth-static-ary-ptrn-elem-id-iter-val.js fails
+language/statements/class/dstr-gen-meth-static-ary-ptrn-elem-obj-id-init.js fails
+language/statements/class/dstr-gen-meth-static-ary-ptrn-elem-obj-id.js fails
+language/statements/class/dstr-gen-meth-static-ary-ptrn-elem-obj-prop-id-init.js fails
+language/statements/class/dstr-gen-meth-static-ary-ptrn-elem-obj-prop-id.js fails
+language/statements/class/dstr-gen-meth-static-ary-ptrn-elem-obj-val-null.js fails
+language/statements/class/dstr-gen-meth-static-ary-ptrn-elem-obj-val-undef.js fails
+language/statements/class/dstr-gen-meth-static-ary-ptrn-elision-exhausted.js fails
+language/statements/class/dstr-gen-meth-static-ary-ptrn-elision-step-err.js fails
+language/statements/class/dstr-gen-meth-static-ary-ptrn-elision.js fails
+language/statements/class/dstr-gen-meth-static-ary-ptrn-empty.js fails
+language/statements/class/dstr-gen-meth-static-ary-ptrn-rest-ary-elem.js fails
+language/statements/class/dstr-gen-meth-static-ary-ptrn-rest-ary-elision.js fails
+language/statements/class/dstr-gen-meth-static-ary-ptrn-rest-ary-empty.js fails
+language/statements/class/dstr-gen-meth-static-ary-ptrn-rest-ary-rest.js fails
+language/statements/class/dstr-gen-meth-static-ary-ptrn-rest-id-elision-next-err.js fails
+language/statements/class/dstr-gen-meth-static-ary-ptrn-rest-id-elision.js fails
+language/statements/class/dstr-gen-meth-static-ary-ptrn-rest-id-exhausted.js fails
+language/statements/class/dstr-gen-meth-static-ary-ptrn-rest-id-iter-step-err.js fails
+language/statements/class/dstr-gen-meth-static-ary-ptrn-rest-id-iter-val-err.js fails
+language/statements/class/dstr-gen-meth-static-ary-ptrn-rest-id.js fails
+language/statements/class/dstr-gen-meth-static-ary-ptrn-rest-obj-id.js fails
+language/statements/class/dstr-gen-meth-static-ary-ptrn-rest-obj-prop-id.js fails
+language/statements/class/dstr-gen-meth-static-dflt-ary-init-iter-close.js fails
+language/statements/class/dstr-gen-meth-static-dflt-ary-init-iter-get-err.js fails
+language/statements/class/dstr-gen-meth-static-dflt-ary-init-iter-no-close.js fails
+language/statements/class/dstr-gen-meth-static-dflt-ary-name-iter-val.js fails
+language/statements/class/dstr-gen-meth-static-dflt-ary-ptrn-elem-ary-elem-init.js fails
+language/statements/class/dstr-gen-meth-static-dflt-ary-ptrn-elem-ary-elem-iter.js fails
+language/statements/class/dstr-gen-meth-static-dflt-ary-ptrn-elem-ary-elision-init.js fails
+language/statements/class/dstr-gen-meth-static-dflt-ary-ptrn-elem-ary-elision-iter.js fails
+language/statements/class/dstr-gen-meth-static-dflt-ary-ptrn-elem-ary-empty-init.js fails
+language/statements/class/dstr-gen-meth-static-dflt-ary-ptrn-elem-ary-empty-iter.js fails
+language/statements/class/dstr-gen-meth-static-dflt-ary-ptrn-elem-ary-rest-init.js fails
+language/statements/class/dstr-gen-meth-static-dflt-ary-ptrn-elem-ary-rest-iter.js fails
+language/statements/class/dstr-gen-meth-static-dflt-ary-ptrn-elem-ary-val-null.js fails
+language/statements/class/dstr-gen-meth-static-dflt-ary-ptrn-elem-id-init-exhausted.js fails
+language/statements/class/dstr-gen-meth-static-dflt-ary-ptrn-elem-id-init-fn-name-arrow.js fails
+language/statements/class/dstr-gen-meth-static-dflt-ary-ptrn-elem-id-init-fn-name-class.js fails
+language/statements/class/dstr-gen-meth-static-dflt-ary-ptrn-elem-id-init-fn-name-cover.js fails
+language/statements/class/dstr-gen-meth-static-dflt-ary-ptrn-elem-id-init-fn-name-fn.js fails
+language/statements/class/dstr-gen-meth-static-dflt-ary-ptrn-elem-id-init-fn-name-gen.js fails
+language/statements/class/dstr-gen-meth-static-dflt-ary-ptrn-elem-id-init-hole.js fails
+language/statements/class/dstr-gen-meth-static-dflt-ary-ptrn-elem-id-init-skipped.js fails
+language/statements/class/dstr-gen-meth-static-dflt-ary-ptrn-elem-id-init-throws.js fails
+language/statements/class/dstr-gen-meth-static-dflt-ary-ptrn-elem-id-init-undef.js fails
+language/statements/class/dstr-gen-meth-static-dflt-ary-ptrn-elem-id-init-unresolvable.js fails
+language/statements/class/dstr-gen-meth-static-dflt-ary-ptrn-elem-id-iter-complete.js fails
+language/statements/class/dstr-gen-meth-static-dflt-ary-ptrn-elem-id-iter-done.js fails
+language/statements/class/dstr-gen-meth-static-dflt-ary-ptrn-elem-id-iter-step-err.js fails
+language/statements/class/dstr-gen-meth-static-dflt-ary-ptrn-elem-id-iter-val-err.js fails
+language/statements/class/dstr-gen-meth-static-dflt-ary-ptrn-elem-id-iter-val.js fails
+language/statements/class/dstr-gen-meth-static-dflt-ary-ptrn-elem-obj-id-init.js fails
+language/statements/class/dstr-gen-meth-static-dflt-ary-ptrn-elem-obj-id.js fails
+language/statements/class/dstr-gen-meth-static-dflt-ary-ptrn-elem-obj-prop-id-init.js fails
+language/statements/class/dstr-gen-meth-static-dflt-ary-ptrn-elem-obj-prop-id.js fails
+language/statements/class/dstr-gen-meth-static-dflt-ary-ptrn-elem-obj-val-null.js fails
+language/statements/class/dstr-gen-meth-static-dflt-ary-ptrn-elem-obj-val-undef.js fails
+language/statements/class/dstr-gen-meth-static-dflt-ary-ptrn-elision-exhausted.js fails
+language/statements/class/dstr-gen-meth-static-dflt-ary-ptrn-elision-step-err.js fails
+language/statements/class/dstr-gen-meth-static-dflt-ary-ptrn-elision.js fails
+language/statements/class/dstr-gen-meth-static-dflt-ary-ptrn-empty.js fails
+language/statements/class/dstr-gen-meth-static-dflt-ary-ptrn-rest-ary-elem.js fails
+language/statements/class/dstr-gen-meth-static-dflt-ary-ptrn-rest-ary-elision.js fails
+language/statements/class/dstr-gen-meth-static-dflt-ary-ptrn-rest-ary-empty.js fails
+language/statements/class/dstr-gen-meth-static-dflt-ary-ptrn-rest-ary-rest.js fails
+language/statements/class/dstr-gen-meth-static-dflt-ary-ptrn-rest-id-elision-next-err.js fails
+language/statements/class/dstr-gen-meth-static-dflt-ary-ptrn-rest-id-elision.js fails
+language/statements/class/dstr-gen-meth-static-dflt-ary-ptrn-rest-id-exhausted.js fails
+language/statements/class/dstr-gen-meth-static-dflt-ary-ptrn-rest-id-iter-step-err.js fails
+language/statements/class/dstr-gen-meth-static-dflt-ary-ptrn-rest-id-iter-val-err.js fails
+language/statements/class/dstr-gen-meth-static-dflt-ary-ptrn-rest-id.js fails
+language/statements/class/dstr-gen-meth-static-dflt-ary-ptrn-rest-obj-id.js fails
+language/statements/class/dstr-gen-meth-static-dflt-ary-ptrn-rest-obj-prop-id.js fails
+language/statements/class/dstr-gen-meth-static-dflt-obj-init-null.js fails
+language/statements/class/dstr-gen-meth-static-dflt-obj-init-undefined.js fails
+language/statements/class/dstr-gen-meth-static-dflt-obj-ptrn-empty.js fails
+language/statements/class/dstr-gen-meth-static-dflt-obj-ptrn-id-get-value-err.js fails
+language/statements/class/dstr-gen-meth-static-dflt-obj-ptrn-id-init-fn-name-arrow.js fails
+language/statements/class/dstr-gen-meth-static-dflt-obj-ptrn-id-init-fn-name-class.js fails
+language/statements/class/dstr-gen-meth-static-dflt-obj-ptrn-id-init-fn-name-cover.js fails
+language/statements/class/dstr-gen-meth-static-dflt-obj-ptrn-id-init-fn-name-fn.js fails
+language/statements/class/dstr-gen-meth-static-dflt-obj-ptrn-id-init-fn-name-gen.js fails
+language/statements/class/dstr-gen-meth-static-dflt-obj-ptrn-id-init-skipped.js fails
+language/statements/class/dstr-gen-meth-static-dflt-obj-ptrn-id-init-throws.js fails
+language/statements/class/dstr-gen-meth-static-dflt-obj-ptrn-id-init-unresolvable.js fails
+language/statements/class/dstr-gen-meth-static-dflt-obj-ptrn-id-trailing-comma.js fails
+language/statements/class/dstr-gen-meth-static-dflt-obj-ptrn-list-err.js fails
+language/statements/class/dstr-gen-meth-static-dflt-obj-ptrn-prop-ary-init.js fails
+language/statements/class/dstr-gen-meth-static-dflt-obj-ptrn-prop-ary-trailing-comma.js fails
+language/statements/class/dstr-gen-meth-static-dflt-obj-ptrn-prop-ary-value-null.js fails
+language/statements/class/dstr-gen-meth-static-dflt-obj-ptrn-prop-ary.js fails
+language/statements/class/dstr-gen-meth-static-dflt-obj-ptrn-prop-eval-err.js fails
+language/statements/class/dstr-gen-meth-static-dflt-obj-ptrn-prop-id-get-value-err.js fails
+language/statements/class/dstr-gen-meth-static-dflt-obj-ptrn-prop-id-init-skipped.js fails
+language/statements/class/dstr-gen-meth-static-dflt-obj-ptrn-prop-id-init-throws.js fails
+language/statements/class/dstr-gen-meth-static-dflt-obj-ptrn-prop-id-init-unresolvable.js fails
+language/statements/class/dstr-gen-meth-static-dflt-obj-ptrn-prop-id-init.js fails
+language/statements/class/dstr-gen-meth-static-dflt-obj-ptrn-prop-id-trailing-comma.js fails
+language/statements/class/dstr-gen-meth-static-dflt-obj-ptrn-prop-id.js fails
+language/statements/class/dstr-gen-meth-static-dflt-obj-ptrn-prop-obj-init.js fails
+language/statements/class/dstr-gen-meth-static-dflt-obj-ptrn-prop-obj-value-null.js fails
+language/statements/class/dstr-gen-meth-static-dflt-obj-ptrn-prop-obj-value-undef.js fails
+language/statements/class/dstr-gen-meth-static-dflt-obj-ptrn-prop-obj.js fails
+language/statements/class/dstr-gen-meth-static-obj-init-null.js fails
+language/statements/class/dstr-gen-meth-static-obj-init-undefined.js fails
+language/statements/class/dstr-gen-meth-static-obj-ptrn-empty.js fails
+language/statements/class/dstr-gen-meth-static-obj-ptrn-id-get-value-err.js fails
+language/statements/class/dstr-gen-meth-static-obj-ptrn-id-init-fn-name-arrow.js fails
+language/statements/class/dstr-gen-meth-static-obj-ptrn-id-init-fn-name-class.js fails
+language/statements/class/dstr-gen-meth-static-obj-ptrn-id-init-fn-name-cover.js fails
+language/statements/class/dstr-gen-meth-static-obj-ptrn-id-init-fn-name-fn.js fails
+language/statements/class/dstr-gen-meth-static-obj-ptrn-id-init-fn-name-gen.js fails
+language/statements/class/dstr-gen-meth-static-obj-ptrn-id-init-skipped.js fails
+language/statements/class/dstr-gen-meth-static-obj-ptrn-id-init-throws.js fails
+language/statements/class/dstr-gen-meth-static-obj-ptrn-id-init-unresolvable.js fails
+language/statements/class/dstr-gen-meth-static-obj-ptrn-id-trailing-comma.js fails
+language/statements/class/dstr-gen-meth-static-obj-ptrn-list-err.js fails
+language/statements/class/dstr-gen-meth-static-obj-ptrn-prop-ary-init.js fails
+language/statements/class/dstr-gen-meth-static-obj-ptrn-prop-ary-trailing-comma.js fails
+language/statements/class/dstr-gen-meth-static-obj-ptrn-prop-ary-value-null.js fails
+language/statements/class/dstr-gen-meth-static-obj-ptrn-prop-ary.js fails
+language/statements/class/dstr-gen-meth-static-obj-ptrn-prop-eval-err.js fails
+language/statements/class/dstr-gen-meth-static-obj-ptrn-prop-id-get-value-err.js fails
+language/statements/class/dstr-gen-meth-static-obj-ptrn-prop-id-init-skipped.js fails
+language/statements/class/dstr-gen-meth-static-obj-ptrn-prop-id-init-throws.js fails
+language/statements/class/dstr-gen-meth-static-obj-ptrn-prop-id-init-unresolvable.js fails
+language/statements/class/dstr-gen-meth-static-obj-ptrn-prop-id-init.js fails
+language/statements/class/dstr-gen-meth-static-obj-ptrn-prop-id-trailing-comma.js fails
+language/statements/class/dstr-gen-meth-static-obj-ptrn-prop-id.js fails
+language/statements/class/dstr-gen-meth-static-obj-ptrn-prop-obj-init.js fails
+language/statements/class/dstr-gen-meth-static-obj-ptrn-prop-obj-value-null.js fails
+language/statements/class/dstr-gen-meth-static-obj-ptrn-prop-obj-value-undef.js fails
+language/statements/class/dstr-gen-meth-static-obj-ptrn-prop-obj.js fails
+language/statements/class/dstr-meth-ary-init-iter-close.js fails
+language/statements/class/dstr-meth-ary-init-iter-get-err.js fails
+language/statements/class/dstr-meth-ary-init-iter-no-close.js fails
+language/statements/class/dstr-meth-ary-name-iter-val.js fails
+language/statements/class/dstr-meth-ary-ptrn-elem-ary-elem-init.js fails
+language/statements/class/dstr-meth-ary-ptrn-elem-ary-elem-iter.js fails
+language/statements/class/dstr-meth-ary-ptrn-elem-ary-elision-init.js fails
+language/statements/class/dstr-meth-ary-ptrn-elem-ary-elision-iter.js fails
+language/statements/class/dstr-meth-ary-ptrn-elem-ary-empty-init.js fails
+language/statements/class/dstr-meth-ary-ptrn-elem-ary-empty-iter.js fails
+language/statements/class/dstr-meth-ary-ptrn-elem-ary-rest-init.js fails
+language/statements/class/dstr-meth-ary-ptrn-elem-ary-rest-iter.js fails
+language/statements/class/dstr-meth-ary-ptrn-elem-ary-val-null.js fails
+language/statements/class/dstr-meth-ary-ptrn-elem-id-init-exhausted.js fails
+language/statements/class/dstr-meth-ary-ptrn-elem-id-init-fn-name-arrow.js fails
+language/statements/class/dstr-meth-ary-ptrn-elem-id-init-fn-name-class.js fails
+language/statements/class/dstr-meth-ary-ptrn-elem-id-init-fn-name-cover.js fails
+language/statements/class/dstr-meth-ary-ptrn-elem-id-init-fn-name-fn.js fails
+language/statements/class/dstr-meth-ary-ptrn-elem-id-init-fn-name-gen.js fails
+language/statements/class/dstr-meth-ary-ptrn-elem-id-init-hole.js fails
+language/statements/class/dstr-meth-ary-ptrn-elem-id-init-skipped.js fails
+language/statements/class/dstr-meth-ary-ptrn-elem-id-init-throws.js fails
+language/statements/class/dstr-meth-ary-ptrn-elem-id-init-undef.js fails
+language/statements/class/dstr-meth-ary-ptrn-elem-id-init-unresolvable.js fails
+language/statements/class/dstr-meth-ary-ptrn-elem-id-iter-complete.js fails
+language/statements/class/dstr-meth-ary-ptrn-elem-id-iter-done.js fails
+language/statements/class/dstr-meth-ary-ptrn-elem-id-iter-step-err.js fails
+language/statements/class/dstr-meth-ary-ptrn-elem-id-iter-val-err.js fails
+language/statements/class/dstr-meth-ary-ptrn-elem-id-iter-val.js fails
+language/statements/class/dstr-meth-ary-ptrn-elem-obj-id-init.js fails
+language/statements/class/dstr-meth-ary-ptrn-elem-obj-id.js fails
+language/statements/class/dstr-meth-ary-ptrn-elem-obj-prop-id-init.js fails
+language/statements/class/dstr-meth-ary-ptrn-elem-obj-prop-id.js fails
+language/statements/class/dstr-meth-ary-ptrn-elem-obj-val-null.js fails
+language/statements/class/dstr-meth-ary-ptrn-elem-obj-val-undef.js fails
+language/statements/class/dstr-meth-ary-ptrn-elision-exhausted.js fails
+language/statements/class/dstr-meth-ary-ptrn-elision-step-err.js fails
+language/statements/class/dstr-meth-ary-ptrn-elision.js fails
+language/statements/class/dstr-meth-ary-ptrn-empty.js fails
+language/statements/class/dstr-meth-ary-ptrn-rest-ary-elem.js fails
+language/statements/class/dstr-meth-ary-ptrn-rest-ary-elision.js fails
+language/statements/class/dstr-meth-ary-ptrn-rest-ary-empty.js fails
+language/statements/class/dstr-meth-ary-ptrn-rest-ary-rest.js fails
+language/statements/class/dstr-meth-ary-ptrn-rest-id-elision-next-err.js fails
+language/statements/class/dstr-meth-ary-ptrn-rest-id-elision.js fails
+language/statements/class/dstr-meth-ary-ptrn-rest-id-exhausted.js fails
+language/statements/class/dstr-meth-ary-ptrn-rest-id-iter-step-err.js fails
+language/statements/class/dstr-meth-ary-ptrn-rest-id-iter-val-err.js fails
+language/statements/class/dstr-meth-ary-ptrn-rest-id.js fails
+language/statements/class/dstr-meth-ary-ptrn-rest-obj-id.js fails
+language/statements/class/dstr-meth-ary-ptrn-rest-obj-prop-id.js fails
+language/statements/class/dstr-meth-dflt-ary-init-iter-close.js fails
+language/statements/class/dstr-meth-dflt-ary-init-iter-get-err.js fails
+language/statements/class/dstr-meth-dflt-ary-init-iter-no-close.js fails
+language/statements/class/dstr-meth-dflt-ary-name-iter-val.js fails
+language/statements/class/dstr-meth-dflt-ary-ptrn-elem-ary-elem-init.js fails
+language/statements/class/dstr-meth-dflt-ary-ptrn-elem-ary-elem-iter.js fails
+language/statements/class/dstr-meth-dflt-ary-ptrn-elem-ary-elision-init.js fails
+language/statements/class/dstr-meth-dflt-ary-ptrn-elem-ary-elision-iter.js fails
+language/statements/class/dstr-meth-dflt-ary-ptrn-elem-ary-empty-init.js fails
+language/statements/class/dstr-meth-dflt-ary-ptrn-elem-ary-empty-iter.js fails
+language/statements/class/dstr-meth-dflt-ary-ptrn-elem-ary-rest-init.js fails
+language/statements/class/dstr-meth-dflt-ary-ptrn-elem-ary-rest-iter.js fails
+language/statements/class/dstr-meth-dflt-ary-ptrn-elem-ary-val-null.js fails
+language/statements/class/dstr-meth-dflt-ary-ptrn-elem-id-init-exhausted.js fails
+language/statements/class/dstr-meth-dflt-ary-ptrn-elem-id-init-fn-name-arrow.js fails
+language/statements/class/dstr-meth-dflt-ary-ptrn-elem-id-init-fn-name-class.js fails
+language/statements/class/dstr-meth-dflt-ary-ptrn-elem-id-init-fn-name-cover.js fails
+language/statements/class/dstr-meth-dflt-ary-ptrn-elem-id-init-fn-name-fn.js fails
+language/statements/class/dstr-meth-dflt-ary-ptrn-elem-id-init-fn-name-gen.js fails
+language/statements/class/dstr-meth-dflt-ary-ptrn-elem-id-init-hole.js fails
+language/statements/class/dstr-meth-dflt-ary-ptrn-elem-id-init-skipped.js fails
+language/statements/class/dstr-meth-dflt-ary-ptrn-elem-id-init-throws.js fails
+language/statements/class/dstr-meth-dflt-ary-ptrn-elem-id-init-undef.js fails
+language/statements/class/dstr-meth-dflt-ary-ptrn-elem-id-init-unresolvable.js fails
+language/statements/class/dstr-meth-dflt-ary-ptrn-elem-id-iter-complete.js fails
+language/statements/class/dstr-meth-dflt-ary-ptrn-elem-id-iter-done.js fails
+language/statements/class/dstr-meth-dflt-ary-ptrn-elem-id-iter-step-err.js fails
+language/statements/class/dstr-meth-dflt-ary-ptrn-elem-id-iter-val-err.js fails
+language/statements/class/dstr-meth-dflt-ary-ptrn-elem-id-iter-val.js fails
+language/statements/class/dstr-meth-dflt-ary-ptrn-elem-obj-id-init.js fails
+language/statements/class/dstr-meth-dflt-ary-ptrn-elem-obj-id.js fails
+language/statements/class/dstr-meth-dflt-ary-ptrn-elem-obj-prop-id-init.js fails
+language/statements/class/dstr-meth-dflt-ary-ptrn-elem-obj-prop-id.js fails
+language/statements/class/dstr-meth-dflt-ary-ptrn-elem-obj-val-null.js fails
+language/statements/class/dstr-meth-dflt-ary-ptrn-elem-obj-val-undef.js fails
+language/statements/class/dstr-meth-dflt-ary-ptrn-elision-exhausted.js fails
+language/statements/class/dstr-meth-dflt-ary-ptrn-elision-step-err.js fails
+language/statements/class/dstr-meth-dflt-ary-ptrn-elision.js fails
+language/statements/class/dstr-meth-dflt-ary-ptrn-empty.js fails
+language/statements/class/dstr-meth-dflt-ary-ptrn-rest-ary-elem.js fails
+language/statements/class/dstr-meth-dflt-ary-ptrn-rest-ary-elision.js fails
+language/statements/class/dstr-meth-dflt-ary-ptrn-rest-ary-empty.js fails
+language/statements/class/dstr-meth-dflt-ary-ptrn-rest-ary-rest.js fails
+language/statements/class/dstr-meth-dflt-ary-ptrn-rest-id-elision-next-err.js fails
+language/statements/class/dstr-meth-dflt-ary-ptrn-rest-id-elision.js fails
+language/statements/class/dstr-meth-dflt-ary-ptrn-rest-id-exhausted.js fails
+language/statements/class/dstr-meth-dflt-ary-ptrn-rest-id-iter-step-err.js fails
+language/statements/class/dstr-meth-dflt-ary-ptrn-rest-id-iter-val-err.js fails
+language/statements/class/dstr-meth-dflt-ary-ptrn-rest-id.js fails
+language/statements/class/dstr-meth-dflt-ary-ptrn-rest-obj-id.js fails
+language/statements/class/dstr-meth-dflt-ary-ptrn-rest-obj-prop-id.js fails
+language/statements/class/dstr-meth-dflt-obj-init-null.js fails
+language/statements/class/dstr-meth-dflt-obj-init-undefined.js fails
+language/statements/class/dstr-meth-dflt-obj-ptrn-empty.js fails
+language/statements/class/dstr-meth-dflt-obj-ptrn-id-get-value-err.js fails
+language/statements/class/dstr-meth-dflt-obj-ptrn-id-init-fn-name-arrow.js fails
+language/statements/class/dstr-meth-dflt-obj-ptrn-id-init-fn-name-class.js fails
+language/statements/class/dstr-meth-dflt-obj-ptrn-id-init-fn-name-cover.js fails
+language/statements/class/dstr-meth-dflt-obj-ptrn-id-init-fn-name-fn.js fails
+language/statements/class/dstr-meth-dflt-obj-ptrn-id-init-fn-name-gen.js fails
+language/statements/class/dstr-meth-dflt-obj-ptrn-id-init-skipped.js fails
+language/statements/class/dstr-meth-dflt-obj-ptrn-id-init-throws.js fails
+language/statements/class/dstr-meth-dflt-obj-ptrn-id-init-unresolvable.js fails
+language/statements/class/dstr-meth-dflt-obj-ptrn-id-trailing-comma.js fails
+language/statements/class/dstr-meth-dflt-obj-ptrn-list-err.js fails
+language/statements/class/dstr-meth-dflt-obj-ptrn-prop-ary-init.js fails
+language/statements/class/dstr-meth-dflt-obj-ptrn-prop-ary-trailing-comma.js fails
+language/statements/class/dstr-meth-dflt-obj-ptrn-prop-ary-value-null.js fails
+language/statements/class/dstr-meth-dflt-obj-ptrn-prop-ary.js fails
+language/statements/class/dstr-meth-dflt-obj-ptrn-prop-eval-err.js fails
+language/statements/class/dstr-meth-dflt-obj-ptrn-prop-id-get-value-err.js fails
+language/statements/class/dstr-meth-dflt-obj-ptrn-prop-id-init-skipped.js fails
+language/statements/class/dstr-meth-dflt-obj-ptrn-prop-id-init-throws.js fails
+language/statements/class/dstr-meth-dflt-obj-ptrn-prop-id-init-unresolvable.js fails
+language/statements/class/dstr-meth-dflt-obj-ptrn-prop-id-init.js fails
+language/statements/class/dstr-meth-dflt-obj-ptrn-prop-id-trailing-comma.js fails
+language/statements/class/dstr-meth-dflt-obj-ptrn-prop-id.js fails
+language/statements/class/dstr-meth-dflt-obj-ptrn-prop-obj-init.js fails
+language/statements/class/dstr-meth-dflt-obj-ptrn-prop-obj-value-null.js fails
+language/statements/class/dstr-meth-dflt-obj-ptrn-prop-obj-value-undef.js fails
+language/statements/class/dstr-meth-dflt-obj-ptrn-prop-obj.js fails
+language/statements/class/dstr-meth-obj-init-null.js fails
+language/statements/class/dstr-meth-obj-init-undefined.js fails
+language/statements/class/dstr-meth-obj-ptrn-empty.js fails
+language/statements/class/dstr-meth-obj-ptrn-id-get-value-err.js fails
+language/statements/class/dstr-meth-obj-ptrn-id-init-fn-name-arrow.js fails
+language/statements/class/dstr-meth-obj-ptrn-id-init-fn-name-class.js fails
+language/statements/class/dstr-meth-obj-ptrn-id-init-fn-name-cover.js fails
+language/statements/class/dstr-meth-obj-ptrn-id-init-fn-name-fn.js fails
+language/statements/class/dstr-meth-obj-ptrn-id-init-fn-name-gen.js fails
+language/statements/class/dstr-meth-obj-ptrn-id-init-skipped.js fails
+language/statements/class/dstr-meth-obj-ptrn-id-init-throws.js fails
+language/statements/class/dstr-meth-obj-ptrn-id-init-unresolvable.js fails
+language/statements/class/dstr-meth-obj-ptrn-id-trailing-comma.js fails
+language/statements/class/dstr-meth-obj-ptrn-list-err.js fails
+language/statements/class/dstr-meth-obj-ptrn-prop-ary-init.js fails
+language/statements/class/dstr-meth-obj-ptrn-prop-ary-trailing-comma.js fails
+language/statements/class/dstr-meth-obj-ptrn-prop-ary-value-null.js fails
+language/statements/class/dstr-meth-obj-ptrn-prop-ary.js fails
+language/statements/class/dstr-meth-obj-ptrn-prop-eval-err.js fails
+language/statements/class/dstr-meth-obj-ptrn-prop-id-get-value-err.js fails
+language/statements/class/dstr-meth-obj-ptrn-prop-id-init-skipped.js fails
+language/statements/class/dstr-meth-obj-ptrn-prop-id-init-throws.js fails
+language/statements/class/dstr-meth-obj-ptrn-prop-id-init-unresolvable.js fails
+language/statements/class/dstr-meth-obj-ptrn-prop-id-init.js fails
+language/statements/class/dstr-meth-obj-ptrn-prop-id-trailing-comma.js fails
+language/statements/class/dstr-meth-obj-ptrn-prop-id.js fails
+language/statements/class/dstr-meth-obj-ptrn-prop-obj-init.js fails
+language/statements/class/dstr-meth-obj-ptrn-prop-obj-value-null.js fails
+language/statements/class/dstr-meth-obj-ptrn-prop-obj-value-undef.js fails
+language/statements/class/dstr-meth-obj-ptrn-prop-obj.js fails
+language/statements/class/dstr-meth-static-ary-init-iter-close.js fails
+language/statements/class/dstr-meth-static-ary-init-iter-get-err.js fails
+language/statements/class/dstr-meth-static-ary-init-iter-no-close.js fails
+language/statements/class/dstr-meth-static-ary-name-iter-val.js fails
+language/statements/class/dstr-meth-static-ary-ptrn-elem-ary-elem-init.js fails
+language/statements/class/dstr-meth-static-ary-ptrn-elem-ary-elem-iter.js fails
+language/statements/class/dstr-meth-static-ary-ptrn-elem-ary-elision-init.js fails
+language/statements/class/dstr-meth-static-ary-ptrn-elem-ary-elision-iter.js fails
+language/statements/class/dstr-meth-static-ary-ptrn-elem-ary-empty-init.js fails
+language/statements/class/dstr-meth-static-ary-ptrn-elem-ary-empty-iter.js fails
+language/statements/class/dstr-meth-static-ary-ptrn-elem-ary-rest-init.js fails
+language/statements/class/dstr-meth-static-ary-ptrn-elem-ary-rest-iter.js fails
+language/statements/class/dstr-meth-static-ary-ptrn-elem-ary-val-null.js fails
+language/statements/class/dstr-meth-static-ary-ptrn-elem-id-init-exhausted.js fails
+language/statements/class/dstr-meth-static-ary-ptrn-elem-id-init-fn-name-arrow.js fails
+language/statements/class/dstr-meth-static-ary-ptrn-elem-id-init-fn-name-class.js fails
+language/statements/class/dstr-meth-static-ary-ptrn-elem-id-init-fn-name-cover.js fails
+language/statements/class/dstr-meth-static-ary-ptrn-elem-id-init-fn-name-fn.js fails
+language/statements/class/dstr-meth-static-ary-ptrn-elem-id-init-fn-name-gen.js fails
+language/statements/class/dstr-meth-static-ary-ptrn-elem-id-init-hole.js fails
+language/statements/class/dstr-meth-static-ary-ptrn-elem-id-init-skipped.js fails
+language/statements/class/dstr-meth-static-ary-ptrn-elem-id-init-throws.js fails
+language/statements/class/dstr-meth-static-ary-ptrn-elem-id-init-undef.js fails
+language/statements/class/dstr-meth-static-ary-ptrn-elem-id-init-unresolvable.js fails
+language/statements/class/dstr-meth-static-ary-ptrn-elem-id-iter-complete.js fails
+language/statements/class/dstr-meth-static-ary-ptrn-elem-id-iter-done.js fails
+language/statements/class/dstr-meth-static-ary-ptrn-elem-id-iter-step-err.js fails
+language/statements/class/dstr-meth-static-ary-ptrn-elem-id-iter-val-err.js fails
+language/statements/class/dstr-meth-static-ary-ptrn-elem-id-iter-val.js fails
+language/statements/class/dstr-meth-static-ary-ptrn-elem-obj-id-init.js fails
+language/statements/class/dstr-meth-static-ary-ptrn-elem-obj-id.js fails
+language/statements/class/dstr-meth-static-ary-ptrn-elem-obj-prop-id-init.js fails
+language/statements/class/dstr-meth-static-ary-ptrn-elem-obj-prop-id.js fails
+language/statements/class/dstr-meth-static-ary-ptrn-elem-obj-val-null.js fails
+language/statements/class/dstr-meth-static-ary-ptrn-elem-obj-val-undef.js fails
+language/statements/class/dstr-meth-static-ary-ptrn-elision-exhausted.js fails
+language/statements/class/dstr-meth-static-ary-ptrn-elision-step-err.js fails
+language/statements/class/dstr-meth-static-ary-ptrn-elision.js fails
+language/statements/class/dstr-meth-static-ary-ptrn-empty.js fails
+language/statements/class/dstr-meth-static-ary-ptrn-rest-ary-elem.js fails
+language/statements/class/dstr-meth-static-ary-ptrn-rest-ary-elision.js fails
+language/statements/class/dstr-meth-static-ary-ptrn-rest-ary-empty.js fails
+language/statements/class/dstr-meth-static-ary-ptrn-rest-ary-rest.js fails
+language/statements/class/dstr-meth-static-ary-ptrn-rest-id-elision-next-err.js fails
+language/statements/class/dstr-meth-static-ary-ptrn-rest-id-elision.js fails
+language/statements/class/dstr-meth-static-ary-ptrn-rest-id-exhausted.js fails
+language/statements/class/dstr-meth-static-ary-ptrn-rest-id-iter-step-err.js fails
+language/statements/class/dstr-meth-static-ary-ptrn-rest-id-iter-val-err.js fails
+language/statements/class/dstr-meth-static-ary-ptrn-rest-id.js fails
+language/statements/class/dstr-meth-static-ary-ptrn-rest-obj-id.js fails
+language/statements/class/dstr-meth-static-ary-ptrn-rest-obj-prop-id.js fails
+language/statements/class/dstr-meth-static-dflt-ary-init-iter-close.js fails
+language/statements/class/dstr-meth-static-dflt-ary-init-iter-get-err.js fails
+language/statements/class/dstr-meth-static-dflt-ary-init-iter-no-close.js fails
+language/statements/class/dstr-meth-static-dflt-ary-name-iter-val.js fails
+language/statements/class/dstr-meth-static-dflt-ary-ptrn-elem-ary-elem-init.js fails
+language/statements/class/dstr-meth-static-dflt-ary-ptrn-elem-ary-elem-iter.js fails
+language/statements/class/dstr-meth-static-dflt-ary-ptrn-elem-ary-elision-init.js fails
+language/statements/class/dstr-meth-static-dflt-ary-ptrn-elem-ary-elision-iter.js fails
+language/statements/class/dstr-meth-static-dflt-ary-ptrn-elem-ary-empty-init.js fails
+language/statements/class/dstr-meth-static-dflt-ary-ptrn-elem-ary-empty-iter.js fails
+language/statements/class/dstr-meth-static-dflt-ary-ptrn-elem-ary-rest-init.js fails
+language/statements/class/dstr-meth-static-dflt-ary-ptrn-elem-ary-rest-iter.js fails
+language/statements/class/dstr-meth-static-dflt-ary-ptrn-elem-ary-val-null.js fails
+language/statements/class/dstr-meth-static-dflt-ary-ptrn-elem-id-init-exhausted.js fails
+language/statements/class/dstr-meth-static-dflt-ary-ptrn-elem-id-init-fn-name-arrow.js fails
+language/statements/class/dstr-meth-static-dflt-ary-ptrn-elem-id-init-fn-name-class.js fails
+language/statements/class/dstr-meth-static-dflt-ary-ptrn-elem-id-init-fn-name-cover.js fails
+language/statements/class/dstr-meth-static-dflt-ary-ptrn-elem-id-init-fn-name-fn.js fails
+language/statements/class/dstr-meth-static-dflt-ary-ptrn-elem-id-init-fn-name-gen.js fails
+language/statements/class/dstr-meth-static-dflt-ary-ptrn-elem-id-init-hole.js fails
+language/statements/class/dstr-meth-static-dflt-ary-ptrn-elem-id-init-skipped.js fails
+language/statements/class/dstr-meth-static-dflt-ary-ptrn-elem-id-init-throws.js fails
+language/statements/class/dstr-meth-static-dflt-ary-ptrn-elem-id-init-undef.js fails
+language/statements/class/dstr-meth-static-dflt-ary-ptrn-elem-id-init-unresolvable.js fails
+language/statements/class/dstr-meth-static-dflt-ary-ptrn-elem-id-iter-complete.js fails
+language/statements/class/dstr-meth-static-dflt-ary-ptrn-elem-id-iter-done.js fails
+language/statements/class/dstr-meth-static-dflt-ary-ptrn-elem-id-iter-step-err.js fails
+language/statements/class/dstr-meth-static-dflt-ary-ptrn-elem-id-iter-val-err.js fails
+language/statements/class/dstr-meth-static-dflt-ary-ptrn-elem-id-iter-val.js fails
+language/statements/class/dstr-meth-static-dflt-ary-ptrn-elem-obj-id-init.js fails
+language/statements/class/dstr-meth-static-dflt-ary-ptrn-elem-obj-id.js fails
+language/statements/class/dstr-meth-static-dflt-ary-ptrn-elem-obj-prop-id-init.js fails
+language/statements/class/dstr-meth-static-dflt-ary-ptrn-elem-obj-prop-id.js fails
+language/statements/class/dstr-meth-static-dflt-ary-ptrn-elem-obj-val-null.js fails
+language/statements/class/dstr-meth-static-dflt-ary-ptrn-elem-obj-val-undef.js fails
+language/statements/class/dstr-meth-static-dflt-ary-ptrn-elision-exhausted.js fails
+language/statements/class/dstr-meth-static-dflt-ary-ptrn-elision-step-err.js fails
+language/statements/class/dstr-meth-static-dflt-ary-ptrn-elision.js fails
+language/statements/class/dstr-meth-static-dflt-ary-ptrn-empty.js fails
+language/statements/class/dstr-meth-static-dflt-ary-ptrn-rest-ary-elem.js fails
+language/statements/class/dstr-meth-static-dflt-ary-ptrn-rest-ary-elision.js fails
+language/statements/class/dstr-meth-static-dflt-ary-ptrn-rest-ary-empty.js fails
+language/statements/class/dstr-meth-static-dflt-ary-ptrn-rest-ary-rest.js fails
+language/statements/class/dstr-meth-static-dflt-ary-ptrn-rest-id-elision-next-err.js fails
+language/statements/class/dstr-meth-static-dflt-ary-ptrn-rest-id-elision.js fails
+language/statements/class/dstr-meth-static-dflt-ary-ptrn-rest-id-exhausted.js fails
+language/statements/class/dstr-meth-static-dflt-ary-ptrn-rest-id-iter-step-err.js fails
+language/statements/class/dstr-meth-static-dflt-ary-ptrn-rest-id-iter-val-err.js fails
+language/statements/class/dstr-meth-static-dflt-ary-ptrn-rest-id.js fails
+language/statements/class/dstr-meth-static-dflt-ary-ptrn-rest-obj-id.js fails
+language/statements/class/dstr-meth-static-dflt-ary-ptrn-rest-obj-prop-id.js fails
+language/statements/class/dstr-meth-static-dflt-obj-init-null.js fails
+language/statements/class/dstr-meth-static-dflt-obj-init-undefined.js fails
+language/statements/class/dstr-meth-static-dflt-obj-ptrn-empty.js fails
+language/statements/class/dstr-meth-static-dflt-obj-ptrn-id-get-value-err.js fails
+language/statements/class/dstr-meth-static-dflt-obj-ptrn-id-init-fn-name-arrow.js fails
+language/statements/class/dstr-meth-static-dflt-obj-ptrn-id-init-fn-name-class.js fails
+language/statements/class/dstr-meth-static-dflt-obj-ptrn-id-init-fn-name-cover.js fails
+language/statements/class/dstr-meth-static-dflt-obj-ptrn-id-init-fn-name-fn.js fails
+language/statements/class/dstr-meth-static-dflt-obj-ptrn-id-init-fn-name-gen.js fails
+language/statements/class/dstr-meth-static-dflt-obj-ptrn-id-init-skipped.js fails
+language/statements/class/dstr-meth-static-dflt-obj-ptrn-id-init-throws.js fails
+language/statements/class/dstr-meth-static-dflt-obj-ptrn-id-init-unresolvable.js fails
+language/statements/class/dstr-meth-static-dflt-obj-ptrn-id-trailing-comma.js fails
+language/statements/class/dstr-meth-static-dflt-obj-ptrn-list-err.js fails
+language/statements/class/dstr-meth-static-dflt-obj-ptrn-prop-ary-init.js fails
+language/statements/class/dstr-meth-static-dflt-obj-ptrn-prop-ary-trailing-comma.js fails
+language/statements/class/dstr-meth-static-dflt-obj-ptrn-prop-ary-value-null.js fails
+language/statements/class/dstr-meth-static-dflt-obj-ptrn-prop-ary.js fails
+language/statements/class/dstr-meth-static-dflt-obj-ptrn-prop-eval-err.js fails
+language/statements/class/dstr-meth-static-dflt-obj-ptrn-prop-id-get-value-err.js fails
+language/statements/class/dstr-meth-static-dflt-obj-ptrn-prop-id-init-skipped.js fails
+language/statements/class/dstr-meth-static-dflt-obj-ptrn-prop-id-init-throws.js fails
+language/statements/class/dstr-meth-static-dflt-obj-ptrn-prop-id-init-unresolvable.js fails
+language/statements/class/dstr-meth-static-dflt-obj-ptrn-prop-id-init.js fails
+language/statements/class/dstr-meth-static-dflt-obj-ptrn-prop-id-trailing-comma.js fails
+language/statements/class/dstr-meth-static-dflt-obj-ptrn-prop-id.js fails
+language/statements/class/dstr-meth-static-dflt-obj-ptrn-prop-obj-init.js fails
+language/statements/class/dstr-meth-static-dflt-obj-ptrn-prop-obj-value-null.js fails
+language/statements/class/dstr-meth-static-dflt-obj-ptrn-prop-obj-value-undef.js fails
+language/statements/class/dstr-meth-static-dflt-obj-ptrn-prop-obj.js fails
+language/statements/class/dstr-meth-static-obj-init-null.js fails
+language/statements/class/dstr-meth-static-obj-init-undefined.js fails
+language/statements/class/dstr-meth-static-obj-ptrn-empty.js fails
+language/statements/class/dstr-meth-static-obj-ptrn-id-get-value-err.js fails
+language/statements/class/dstr-meth-static-obj-ptrn-id-init-fn-name-arrow.js fails
+language/statements/class/dstr-meth-static-obj-ptrn-id-init-fn-name-class.js fails
+language/statements/class/dstr-meth-static-obj-ptrn-id-init-fn-name-cover.js fails
+language/statements/class/dstr-meth-static-obj-ptrn-id-init-fn-name-fn.js fails
+language/statements/class/dstr-meth-static-obj-ptrn-id-init-fn-name-gen.js fails
+language/statements/class/dstr-meth-static-obj-ptrn-id-init-skipped.js fails
+language/statements/class/dstr-meth-static-obj-ptrn-id-init-throws.js fails
+language/statements/class/dstr-meth-static-obj-ptrn-id-init-unresolvable.js fails
+language/statements/class/dstr-meth-static-obj-ptrn-id-trailing-comma.js fails
+language/statements/class/dstr-meth-static-obj-ptrn-list-err.js fails
+language/statements/class/dstr-meth-static-obj-ptrn-prop-ary-init.js fails
+language/statements/class/dstr-meth-static-obj-ptrn-prop-ary-trailing-comma.js fails
+language/statements/class/dstr-meth-static-obj-ptrn-prop-ary-value-null.js fails
+language/statements/class/dstr-meth-static-obj-ptrn-prop-ary.js fails
+language/statements/class/dstr-meth-static-obj-ptrn-prop-eval-err.js fails
+language/statements/class/dstr-meth-static-obj-ptrn-prop-id-get-value-err.js fails
+language/statements/class/dstr-meth-static-obj-ptrn-prop-id-init-skipped.js fails
+language/statements/class/dstr-meth-static-obj-ptrn-prop-id-init-throws.js fails
+language/statements/class/dstr-meth-static-obj-ptrn-prop-id-init-unresolvable.js fails
+language/statements/class/dstr-meth-static-obj-ptrn-prop-id-init.js fails
+language/statements/class/dstr-meth-static-obj-ptrn-prop-id-trailing-comma.js fails
+language/statements/class/dstr-meth-static-obj-ptrn-prop-id.js fails
+language/statements/class/dstr-meth-static-obj-ptrn-prop-obj-init.js fails
+language/statements/class/dstr-meth-static-obj-ptrn-prop-obj-value-null.js fails
+language/statements/class/dstr-meth-static-obj-ptrn-prop-obj-value-undef.js fails
+language/statements/class/dstr-meth-static-obj-ptrn-prop-obj.js fails
+language/statements/class/gen-meth-dflt-params-abrupt.js fails
+language/statements/class/gen-meth-dflt-params-arg-val-not-undefined.js fails
+language/statements/class/gen-meth-dflt-params-arg-val-undefined.js fails
+language/statements/class/gen-meth-dflt-params-ref-later.js fails
+language/statements/class/gen-meth-dflt-params-ref-prior.js fails
+language/statements/class/gen-meth-dflt-params-ref-self.js fails
+language/statements/class/gen-meth-dflt-params-trailing-comma.js fails
+language/statements/class/gen-meth-params-trailing-comma-multiple.js fails
+language/statements/class/gen-meth-params-trailing-comma-single.js fails
+language/statements/class/gen-meth-static-dflt-params-abrupt.js fails
+language/statements/class/gen-meth-static-dflt-params-arg-val-not-undefined.js fails
+language/statements/class/gen-meth-static-dflt-params-arg-val-undefined.js fails
+language/statements/class/gen-meth-static-dflt-params-ref-later.js fails
+language/statements/class/gen-meth-static-dflt-params-ref-prior.js fails
+language/statements/class/gen-meth-static-dflt-params-ref-self.js fails
+language/statements/class/gen-meth-static-dflt-params-trailing-comma.js fails
+language/statements/class/gen-meth-static-params-trailing-comma-multiple.js fails
+language/statements/class/gen-meth-static-params-trailing-comma-single.js fails
+language/statements/class/gen-method-length-dflt.js fails
+language/statements/class/gen-method-static-yield-spread-arr-multiple.js fails
+language/statements/class/gen-method-static-yield-spread-arr-single.js fails
+language/statements/class/gen-method-yield-spread-arr-multiple.js fails
+language/statements/class/gen-method-yield-spread-arr-single.js fails
+language/statements/class/meth-dflt-params-abrupt.js fails
+language/statements/class/meth-dflt-params-arg-val-not-undefined.js fails
+language/statements/class/meth-dflt-params-arg-val-undefined.js fails
+language/statements/class/meth-dflt-params-ref-later.js fails
+language/statements/class/meth-dflt-params-ref-prior.js fails
+language/statements/class/meth-dflt-params-ref-self.js fails
+language/statements/class/meth-dflt-params-trailing-comma.js fails
+language/statements/class/meth-params-trailing-comma-multiple.js fails
+language/statements/class/meth-params-trailing-comma-single.js fails
+language/statements/class/meth-static-dflt-params-abrupt.js fails
+language/statements/class/meth-static-dflt-params-arg-val-not-undefined.js fails
+language/statements/class/meth-static-dflt-params-arg-val-undefined.js fails
+language/statements/class/meth-static-dflt-params-ref-later.js fails
+language/statements/class/meth-static-dflt-params-ref-prior.js fails
+language/statements/class/meth-static-dflt-params-ref-self.js fails
+language/statements/class/meth-static-dflt-params-trailing-comma.js fails
+language/statements/class/meth-static-params-trailing-comma-multiple.js fails
+language/statements/class/meth-static-params-trailing-comma-single.js fails
+language/statements/class/method-length-dflt.js fails
+language/statements/class/name-binding/basic.js fails
+language/statements/class/name-binding/const.js fails
+language/statements/class/name-binding/expression.js fails
+language/statements/class/name-binding/in-extends-expression-assigned.js fails
+language/statements/class/name-binding/in-extends-expression-grouped.js fails
+language/statements/class/name-binding/in-extends-expression.js fails
+language/statements/class/name.js fails
+language/statements/class/params-dflt-gen-meth-args-unmapped.js fails
+language/statements/class/params-dflt-gen-meth-ref-arguments.js fails
+language/statements/class/params-dflt-gen-meth-static-args-unmapped.js fails
+language/statements/class/params-dflt-gen-meth-static-ref-arguments.js fails
+language/statements/class/params-dflt-meth-args-unmapped.js fails
+language/statements/class/params-dflt-meth-ref-arguments.js fails
+language/statements/class/params-dflt-meth-static-args-unmapped.js fails
+language/statements/class/params-dflt-meth-static-ref-arguments.js fails
+language/statements/class/restricted-properties.js fails
+language/statements/class/scope-gen-meth-paramsbody-var-close.js fails
+language/statements/class/scope-gen-meth-paramsbody-var-open.js fails
+language/statements/class/scope-meth-paramsbody-var-close.js fails
+language/statements/class/scope-meth-paramsbody-var-open.js fails
+language/statements/class/scope-name-lex-close.js fails
+language/statements/class/scope-name-lex-open-heritage.js fails
+language/statements/class/scope-name-lex-open-no-heritage.js fails
+language/statements/class/scope-setter-paramsbody-var-close.js fails
+language/statements/class/scope-setter-paramsbody-var-open.js fails
+language/statements/class/scope-static-gen-meth-paramsbody-var-close.js fails
+language/statements/class/scope-static-gen-meth-paramsbody-var-open.js fails
+language/statements/class/scope-static-meth-paramsbody-var-close.js fails
+language/statements/class/scope-static-meth-paramsbody-var-open.js fails
+language/statements/class/scope-static-setter-paramsbody-var-close.js fails
+language/statements/class/scope-static-setter-paramsbody-var-open.js fails
+language/statements/class/setter-length-dflt.js fails
+language/statements/class/static-method-gen-non-configurable-err.js fails
+language/statements/class/static-method-length-dflt.js fails
+language/statements/class/static-method-non-configurable-err.js fails
+language/statements/class/strict-mode/arguments-callee.js fails
+language/statements/class/subclass/binding.js fails
+language/statements/class/subclass/bound-function.js fails
+language/statements/class/subclass/builtin-objects/Array/contructor-calls-super-multiple-arguments.js fails
+language/statements/class/subclass/builtin-objects/Array/contructor-calls-super-single-argument.js fails
+language/statements/class/subclass/builtin-objects/Array/length.js fails
+language/statements/class/subclass/builtin-objects/Array/regular-subclassing.js fails
+language/statements/class/subclass/builtin-objects/Array/super-must-be-called.js fails
+language/statements/class/subclass/builtin-objects/ArrayBuffer/regular-subclassing.js fails
+language/statements/class/subclass/builtin-objects/ArrayBuffer/super-must-be-called.js fails
+language/statements/class/subclass/builtin-objects/Boolean/regular-subclassing.js fails
+language/statements/class/subclass/builtin-objects/Boolean/super-must-be-called.js fails
+language/statements/class/subclass/builtin-objects/DataView/regular-subclassing.js fails
+language/statements/class/subclass/builtin-objects/DataView/super-must-be-called.js fails
+language/statements/class/subclass/builtin-objects/Date/regular-subclassing.js fails
+language/statements/class/subclass/builtin-objects/Date/super-must-be-called.js fails
+language/statements/class/subclass/builtin-objects/Error/message-property-assignment.js fails
+language/statements/class/subclass/builtin-objects/Error/regular-subclassing.js fails
+language/statements/class/subclass/builtin-objects/Error/super-must-be-called.js fails
+language/statements/class/subclass/builtin-objects/Function/instance-length.js fails
+language/statements/class/subclass/builtin-objects/Function/instance-name.js fails
+language/statements/class/subclass/builtin-objects/Function/regular-subclassing.js fails
+language/statements/class/subclass/builtin-objects/Function/super-must-be-called.js fails
+language/statements/class/subclass/builtin-objects/GeneratorFunction/instance-length.js fails
+language/statements/class/subclass/builtin-objects/GeneratorFunction/instance-name.js fails
+language/statements/class/subclass/builtin-objects/GeneratorFunction/instance-prototype.js fails
+language/statements/class/subclass/builtin-objects/GeneratorFunction/regular-subclassing.js fails
+language/statements/class/subclass/builtin-objects/GeneratorFunction/super-must-be-called.js fails
+language/statements/class/subclass/builtin-objects/Map/regular-subclassing.js fails
+language/statements/class/subclass/builtin-objects/Map/super-must-be-called.js fails
+language/statements/class/subclass/builtin-objects/NativeError/EvalError-message.js fails
+language/statements/class/subclass/builtin-objects/NativeError/EvalError-name.js fails
+language/statements/class/subclass/builtin-objects/NativeError/EvalError-super.js fails
+language/statements/class/subclass/builtin-objects/NativeError/RangeError-message.js fails
+language/statements/class/subclass/builtin-objects/NativeError/RangeError-name.js fails
+language/statements/class/subclass/builtin-objects/NativeError/RangeError-super.js fails
+language/statements/class/subclass/builtin-objects/NativeError/ReferenceError-message.js fails
+language/statements/class/subclass/builtin-objects/NativeError/ReferenceError-name.js fails
+language/statements/class/subclass/builtin-objects/NativeError/ReferenceError-super.js fails
+language/statements/class/subclass/builtin-objects/NativeError/SyntaxError-message.js fails
+language/statements/class/subclass/builtin-objects/NativeError/SyntaxError-name.js fails
+language/statements/class/subclass/builtin-objects/NativeError/SyntaxError-super.js fails
+language/statements/class/subclass/builtin-objects/NativeError/TypeError-message.js fails
+language/statements/class/subclass/builtin-objects/NativeError/TypeError-name.js fails
+language/statements/class/subclass/builtin-objects/NativeError/TypeError-super.js fails
+language/statements/class/subclass/builtin-objects/NativeError/URIError-message.js fails
+language/statements/class/subclass/builtin-objects/NativeError/URIError-name.js fails
+language/statements/class/subclass/builtin-objects/NativeError/URIError-super.js fails
+language/statements/class/subclass/builtin-objects/Number/regular-subclassing.js fails
+language/statements/class/subclass/builtin-objects/Number/super-must-be-called.js fails
+language/statements/class/subclass/builtin-objects/Object/constructor-return-undefined-throws.js fails
+language/statements/class/subclass/builtin-objects/Object/constructor-returns-non-object.js fails
+language/statements/class/subclass/builtin-objects/Object/regular-subclassing.js fails
+language/statements/class/subclass/builtin-objects/Object/replacing-prototype.js fails
+language/statements/class/subclass/builtin-objects/Promise/regular-subclassing.js fails
+language/statements/class/subclass/builtin-objects/Promise/super-must-be-called.js fails
+language/statements/class/subclass/builtin-objects/Proxy/no-prototype-throws.js fails
+language/statements/class/subclass/builtin-objects/RegExp/lastIndex.js fails
+language/statements/class/subclass/builtin-objects/RegExp/regular-subclassing.js fails
+language/statements/class/subclass/builtin-objects/RegExp/super-must-be-called.js fails
+language/statements/class/subclass/builtin-objects/Set/regular-subclassing.js fails
+language/statements/class/subclass/builtin-objects/Set/super-must-be-called.js fails
+language/statements/class/subclass/builtin-objects/String/length.js fails
+language/statements/class/subclass/builtin-objects/String/regular-subclassing.js fails
+language/statements/class/subclass/builtin-objects/String/super-must-be-called.js fails
+language/statements/class/subclass/builtin-objects/Symbol/new-symbol-with-super-throws.js fails
+language/statements/class/subclass/builtin-objects/Symbol/symbol-valid-as-extends-value.js fails
+language/statements/class/subclass/builtin-objects/TypedArray/regular-subclassing.js fails
+language/statements/class/subclass/builtin-objects/TypedArray/super-must-be-called.js fails
+language/statements/class/subclass/builtin-objects/WeakMap/regular-subclassing.js fails
+language/statements/class/subclass/builtin-objects/WeakMap/super-must-be-called.js fails
+language/statements/class/subclass/builtin-objects/WeakSet/regular-subclassing.js fails
+language/statements/class/subclass/builtin-objects/WeakSet/super-must-be-called.js fails
+language/statements/class/subclass/builtins.js fails
+language/statements/class/subclass/class-definition-evaluation-empty-constructor-heritage-present.js fails
+language/statements/class/subclass/class-definition-null-proto-contains-return-override.js fails
+language/statements/class/subclass/class-definition-null-proto-missing-return-override.js fails
+language/statements/class/subclass/class-definition-null-proto-super.js fails
+language/statements/class/subclass/class-definition-null-proto-this.js fails
+language/statements/class/subclass/class-definition-null-proto.js fails
+language/statements/class/subclass/class-definition-parent-proto-null.js fails
+language/statements/class/subclass/class-definition-superclass-generator.js fails
+language/statements/class/subclass/default-constructor-2.js fails
+language/statements/class/subclass/default-constructor-spread-override.js fails
+language/statements/class/subclass/default-constructor.js fails
+language/statements/class/subclass/derived-class-return-override-with-boolean.js fails
+language/statements/class/subclass/derived-class-return-override-with-empty.js fails
+language/statements/class/subclass/derived-class-return-override-with-null.js fails
+language/statements/class/subclass/derived-class-return-override-with-number.js fails
+language/statements/class/subclass/derived-class-return-override-with-object.js fails
+language/statements/class/subclass/derived-class-return-override-with-string.js fails
+language/statements/class/subclass/derived-class-return-override-with-symbol.js fails
+language/statements/class/subclass/derived-class-return-override-with-this.js fails
+language/statements/class/subclass/derived-class-return-override-with-undefined.js fails
+language/statements/class/subclass/superclass-prototype-setter-constructor.js fails
+language/statements/class/subclass/superclass-prototype-setter-method-override.js fails
+language/statements/class/subclass/superclass-static-method-override.js fails
+language/statements/class/super/in-constructor.js fails
+language/statements/class/super/in-getter.js fails
+language/statements/class/super/in-methods.js fails
+language/statements/class/super/in-setter.js fails
+language/statements/class/super/in-static-getter.js fails
+language/statements/class/super/in-static-methods.js fails
+language/statements/class/super/in-static-setter.js fails
+language/statements/class/syntax/class-body-has-direct-super-class-heritage.js fails
+language/statements/class/syntax/class-body-method-definition-super-property.js fails
+language/statements/class/syntax/class-declaration-binding-identifier-class-element-list.js fails
+language/statements/class/syntax/class-declaration-computed-method-definition.js fails
+language/statements/class/syntax/class-declaration-computed-method-generator-definition.js fails
+language/statements/class/syntax/class-declaration-heritage-identifier-reference-class-element-list.js fails
+language/statements/class/syntax/class-expression-binding-identifier-opt-class-element-list.js fails
+language/statements/class/syntax/class-expression-heritage-identifier-reference.js fails
+language/statements/class/syntax/class-expression.js fails
+language/statements/class/syntax/class-method-propname-constructor.js fails
+language/statements/class/syntax/early-errors/class-body-constructor-empty-missing-class-heritage.js fails
+language/statements/const/block-local-closure-get-before-initialization.js fails
+language/statements/const/block-local-use-before-initialization-in-declaration-statement.js fails
+language/statements/const/block-local-use-before-initialization-in-prior-statement.js fails
+language/statements/const/dstr-ary-ptrn-elem-id-init-fn-name-class.js fails
+language/statements/const/dstr-obj-ptrn-id-init-fn-name-class.js fails
+language/statements/const/fn-name-class.js fails
+language/statements/const/function-local-closure-get-before-initialization.js fails
+language/statements/const/function-local-use-before-initialization-in-declaration-statement.js fails
+language/statements/const/function-local-use-before-initialization-in-prior-statement.js fails
+language/statements/const/global-closure-get-before-initialization.js fails
+language/statements/const/global-use-before-initialization-in-declaration-statement.js fails
+language/statements/const/global-use-before-initialization-in-prior-statement.js fails
+language/statements/const/syntax/const-invalid-assignment-next-expression-for.js fails
+language/statements/const/syntax/const-invalid-assignment-statement-body-for-in.js fails
+language/statements/const/syntax/const-invalid-assignment-statement-body-for-of.js fails
+language/statements/do-while/tco-body.js strictFails
+language/statements/for-in/head-const-bound-names-fordecl-tdz.js fails
+language/statements/for-in/head-const-fresh-binding-per-iteration.js fails
+language/statements/for-in/head-let-bound-names-fordecl-tdz.js fails
+language/statements/for-in/head-lhs-let.js sloppyFails
+language/statements/for-in/head-var-bound-names-let.js sloppyFails
+language/statements/for-in/identifier-let-allowed-as-lefthandside-expression-not-strict.js sloppyFails
+language/statements/for-in/scope-body-lex-open.js fails
+language/statements/for-in/scope-head-lex-close.js fails
+language/statements/for-in/scope-head-lex-open.js fails
+language/statements/for-of/body-dstr-assign-error.js fails
+language/statements/for-of/body-put-error.js fails
+language/statements/for-of/dstr-array-elem-init-fn-name-class.js fails
+language/statements/for-of/dstr-array-elem-init-let.js fails
+language/statements/for-of/dstr-array-elem-iter-rtrn-close-err.js fails
+language/statements/for-of/dstr-array-elem-iter-rtrn-close-null.js fails
+language/statements/for-of/dstr-array-elem-iter-rtrn-close.js fails
+language/statements/for-of/dstr-array-elem-iter-thrw-close-err.js fails
+language/statements/for-of/dstr-array-elem-iter-thrw-close.js fails
+language/statements/for-of/dstr-array-elem-put-const.js fails
+language/statements/for-of/dstr-array-elem-put-let.js fails
+language/statements/for-of/dstr-array-elem-trlg-iter-list-rtrn-close-err.js fails
+language/statements/for-of/dstr-array-elem-trlg-iter-list-rtrn-close-null.js fails
+language/statements/for-of/dstr-array-elem-trlg-iter-list-rtrn-close.js fails
+language/statements/for-of/dstr-array-elem-trlg-iter-list-thrw-close-err.js fails
+language/statements/for-of/dstr-array-elem-trlg-iter-list-thrw-close.js fails
+language/statements/for-of/dstr-array-elem-trlg-iter-rest-rtrn-close-err.js fails
+language/statements/for-of/dstr-array-elem-trlg-iter-rest-rtrn-close-null.js fails
+language/statements/for-of/dstr-array-elem-trlg-iter-rest-rtrn-close.js fails
+language/statements/for-of/dstr-array-elem-trlg-iter-rest-thrw-close-err.js fails
+language/statements/for-of/dstr-array-elem-trlg-iter-rest-thrw-close.js fails
+language/statements/for-of/dstr-array-rest-iter-rtrn-close-err.js fails
+language/statements/for-of/dstr-array-rest-iter-rtrn-close-null.js fails
+language/statements/for-of/dstr-array-rest-iter-rtrn-close.js fails
+language/statements/for-of/dstr-array-rest-iter-thrw-close-err.js fails
+language/statements/for-of/dstr-array-rest-iter-thrw-close.js fails
+language/statements/for-of/dstr-array-rest-lref-err.js fails
+language/statements/for-of/dstr-array-rest-put-const.js fails
+language/statements/for-of/dstr-array-rest-put-let.js fails
+language/statements/for-of/dstr-const-ary-ptrn-elem-id-init-fn-name-class.js fails
+language/statements/for-of/dstr-const-obj-ptrn-id-init-fn-name-class.js fails
+language/statements/for-of/dstr-let-ary-ptrn-elem-id-init-fn-name-class.js fails
+language/statements/for-of/dstr-let-obj-ptrn-id-init-fn-name-class.js fails
+language/statements/for-of/dstr-obj-empty-null.js fails
+language/statements/for-of/dstr-obj-empty-undef.js fails
+language/statements/for-of/dstr-obj-id-init-fn-name-class.js fails
+language/statements/for-of/dstr-obj-id-init-let.js fails
+language/statements/for-of/dstr-obj-id-put-const.js fails
+language/statements/for-of/dstr-obj-id-put-let.js fails
+language/statements/for-of/dstr-obj-prop-elem-init-fn-name-class.js fails
+language/statements/for-of/dstr-obj-prop-elem-init-let.js fails
+language/statements/for-of/dstr-obj-prop-put-const.js fails
+language/statements/for-of/dstr-obj-prop-put-let.js fails
+language/statements/for-of/dstr-var-ary-ptrn-elem-id-init-fn-name-class.js fails
+language/statements/for-of/dstr-var-obj-ptrn-id-init-fn-name-class.js fails
+language/statements/for-of/generator-close-via-continue.js fails
+language/statements/for-of/generator-close-via-return.js fails
+language/statements/for-of/generator-close-via-throw.js fails
+language/statements/for-of/head-const-bound-names-fordecl-tdz.js fails
+language/statements/for-of/head-const-fresh-binding-per-iteration.js fails
+language/statements/for-of/head-let-bound-names-fordecl-tdz.js fails
+language/statements/for-of/head-var-bound-names-let.js sloppyFails
+language/statements/for-of/iterator-as-proxy.js fails
+language/statements/for-of/iterator-close-via-continue.js fails
+language/statements/for-of/iterator-close-via-return.js fails
+language/statements/for-of/iterator-close-via-throw.js fails
+language/statements/for-of/iterator-next-reference.js fails
+language/statements/for-of/iterator-next-result-type.js fails
+language/statements/for-of/scope-body-lex-open.js fails
+language/statements/for-of/scope-head-lex-close.js fails
+language/statements/for-of/scope-head-lex-open.js fails
+language/statements/for-of/yield-star-from-catch.js fails
+language/statements/for-of/yield-star-from-finally.js fails
+language/statements/for-of/yield-star-from-try.js fails
+language/statements/for-of/yield-star.js fails
+language/statements/for/dstr-const-ary-ptrn-elem-id-init-fn-name-class.js fails
+language/statements/for/dstr-const-obj-ptrn-id-init-fn-name-class.js fails
+language/statements/for/dstr-let-ary-ptrn-elem-id-init-fn-name-class.js fails
+language/statements/for/dstr-let-obj-ptrn-id-init-fn-name-class.js fails
+language/statements/for/dstr-var-ary-ptrn-elem-id-init-fn-name-class.js fails
+language/statements/for/dstr-var-obj-ptrn-id-init-fn-name-class.js fails
+language/statements/for/head-lhs-let.js sloppyFails
+language/statements/for/scope-body-lex-open.js fails
+language/statements/for/tco-const-body.js strictFails
+language/statements/for/tco-let-body.js strictFails
+language/statements/for/tco-lhs-body.js strictFails
+language/statements/for/tco-var-body.js strictFails
+language/statements/function/13.2-30-s.js fails
+language/statements/function/S13_A15_T4.js sloppyFails
+language/statements/function/arguments-with-arguments-fn.js sloppyFails
+language/statements/function/arguments-with-arguments-lex.js sloppyFails
+language/statements/function/dflt-params-ref-later.js fails
+language/statements/function/dflt-params-ref-self.js fails
+language/statements/function/dstr-ary-ptrn-elem-id-init-fn-name-class.js fails
+language/statements/function/dstr-dflt-ary-ptrn-elem-id-init-fn-name-class.js fails
+language/statements/function/dstr-dflt-obj-ptrn-id-init-fn-name-class.js fails
+language/statements/function/dstr-obj-ptrn-id-init-fn-name-class.js fails
+language/statements/function/param-dflt-yield-non-strict.js sloppyFails
+language/statements/function/scope-body-lex-distinct.js sloppyFails
+language/statements/function/scope-param-elem-var-close.js sloppyFails
+language/statements/function/scope-param-elem-var-open.js sloppyFails
+language/statements/function/scope-param-rest-elem-var-close.js sloppyFails
+language/statements/function/scope-param-rest-elem-var-open.js sloppyFails
+language/statements/function/scope-paramsbody-var-open.js fails
+language/statements/generators/arguments-with-arguments-fn.js sloppyFails
+language/statements/generators/arguments-with-arguments-lex.js sloppyFails
+language/statements/generators/default-proto.js fails
+language/statements/generators/dflt-params-ref-later.js fails
+language/statements/generators/dflt-params-ref-self.js fails
+language/statements/generators/dstr-ary-ptrn-elem-id-init-fn-name-class.js fails
+language/statements/generators/dstr-dflt-ary-ptrn-elem-id-init-fn-name-class.js fails
+language/statements/generators/dstr-dflt-obj-ptrn-id-init-fn-name-class.js fails
+language/statements/generators/dstr-obj-ptrn-id-init-fn-name-class.js fails
+language/statements/generators/scope-body-lex-distinct.js sloppyFails
+language/statements/generators/scope-param-elem-var-close.js sloppyFails
+language/statements/generators/scope-param-elem-var-open.js sloppyFails
+language/statements/generators/scope-param-rest-elem-var-close.js sloppyFails
+language/statements/generators/scope-param-rest-elem-var-open.js sloppyFails
+language/statements/generators/scope-paramsbody-var-open.js fails
+language/statements/generators/yield-as-function-expression-binding-identifier.js sloppyFails
+language/statements/generators/yield-as-identifier-in-nested-function.js sloppyFails
+language/statements/generators/yield-as-literal-property-name.js fails
+language/statements/generators/yield-as-property-name.js fails
+language/statements/generators/yield-identifier-non-strict.js sloppyFails
+language/statements/generators/yield-star-before-newline.js fails
+language/statements/if/tco-else-body.js strictFails
+language/statements/if/tco-if-body.js strictFails
+language/statements/labeled/tco.js strictFails
+language/statements/let/block-local-closure-get-before-initialization.js fails
+language/statements/let/block-local-closure-set-before-initialization.js fails
+language/statements/let/block-local-use-before-initialization-in-declaration-statement.js fails
+language/statements/let/block-local-use-before-initialization-in-prior-statement.js fails
+language/statements/let/dstr-ary-ptrn-elem-id-init-fn-name-class.js fails
+language/statements/let/dstr-obj-ptrn-id-init-fn-name-class.js fails
+language/statements/let/fn-name-class.js fails
+language/statements/let/function-local-closure-get-before-initialization.js fails
+language/statements/let/function-local-closure-set-before-initialization.js fails
+language/statements/let/function-local-use-before-initialization-in-declaration-statement.js fails
+language/statements/let/function-local-use-before-initialization-in-prior-statement.js fails
+language/statements/let/global-closure-get-before-initialization.js fails
+language/statements/let/global-closure-set-before-initialization.js fails
+language/statements/let/global-use-before-initialization-in-declaration-statement.js fails
+language/statements/let/global-use-before-initialization-in-prior-statement.js fails
+language/statements/let/syntax/let.js fails
+language/statements/return/tco.js strictFails
+language/statements/switch/scope-lex-open-case.js fails
+language/statements/switch/scope-lex-open-dflt.js fails
+language/statements/switch/tco-case-body-dflt.js strictFails
+language/statements/switch/tco-case-body.js strictFails
+language/statements/switch/tco-dftl-body.js strictFails
+language/statements/throw/S12.13_A2_T6.js strictFails
+language/statements/try/S12.14_A18_T6.js strictFails
+language/statements/try/dstr-ary-ptrn-elem-id-init-fn-name-class.js fails
+language/statements/try/dstr-obj-ptrn-id-init-fn-name-class.js fails
+language/statements/try/scope-catch-block-lex-open.js fails
+language/statements/try/tco-catch-finally.js strictFails
+language/statements/try/tco-catch.js strictFails
+language/statements/try/tco-finally.js strictFails
+language/statements/variable/binding-resolution.js sloppyFails
+language/statements/variable/dstr-ary-ptrn-elem-id-init-fn-name-class.js fails
+language/statements/variable/dstr-obj-ptrn-id-init-fn-name-class.js fails
+language/statements/variable/fn-name-class.js fails
+language/statements/while/tco-body.js strictFails
+language/statements/with/binding-blocked-by-unscopables.js sloppyFails
+language/statements/with/has-property-err.js sloppyFails
+language/statements/with/unscopables-inc-dec.js sloppyFails
+language/types/reference/get-value-prop-base-primitive-realm.js fails
+language/types/reference/put-value-prop-base-primitive-realm.js fails
+language/types/reference/put-value-prop-base-primitive.js fails
diff --git a/tests/auto/qml/ecmascripttests/ecmascripttests.pro b/tests/auto/qml/ecmascripttests/ecmascripttests.pro
index 6d3ee12307..9c09ee701e 100644
--- a/tests/auto/qml/ecmascripttests/ecmascripttests.pro
+++ b/tests/auto/qml/ecmascripttests/ecmascripttests.pro
@@ -1,20 +1,13 @@
-CONFIG += testcase
-TARGET = tst_ecmascripttests
-QT += testlib
-macos:CONFIG -= app_bundle
-SOURCES += tst_ecmascripttests.cpp
-DEFINES += SRCDIR=\\\"$$PWD\\\"
-
-TESTSCRIPT=$$PWD/test262.py
-isEmpty(V4CMD): V4CMD = qmljs
+TEMPLATE = subdirs
+SUBDIRS = testcase.pro qjstest
checkjittarget.target = check-jit
-checkjittarget.commands = python $$TESTSCRIPT --command=$$V4CMD --parallel --with-test-expectations --update-expectations
+checkjittarget.commands = qjstest --jit --parallel --with-test-expectations --update-expectations
checkjittarget.depends = all
QMAKE_EXTRA_TARGETS += checkjittarget
checkmothtarget.target = check-interpreter
-checkmothtarget.commands = python $$TESTSCRIPT --command=\"$$V4CMD --interpret\" --parallel --with-test-expectations
+checkmothtarget.commands = qjstest --interpret --parallel --with-test-expectations
checkmothtarget.depends = all
QMAKE_EXTRA_TARGETS += checkmothtarget
diff --git a/tests/auto/qml/ecmascripttests/qjstest/main.cpp b/tests/auto/qml/ecmascripttests/qjstest/main.cpp
new file mode 100644
index 0000000000..4a3541d892
--- /dev/null
+++ b/tests/auto/qml/ecmascripttests/qjstest/main.cpp
@@ -0,0 +1,114 @@
+/****************************************************************************
+**
+** Copyright (C) 2016 The Qt Company Ltd.
+** Contact: https://www.qt.io/licensing/
+**
+** This file is part of the V4VM module of the Qt Toolkit.
+**
+** $QT_BEGIN_LICENSE:GPL-EXCEPT$
+** Commercial License Usage
+** Licensees holding valid commercial Qt licenses may use this file in
+** accordance with the commercial license agreement provided with the
+** Software or, alternatively, in accordance with the terms contained in
+** a written agreement between you and The Qt Company. For licensing terms
+** and conditions see https://www.qt.io/terms-conditions. For further
+** information use the contact form at https://www.qt.io/contact-us.
+**
+** GNU General Public License Usage
+** Alternatively, this file may be used under the terms of the GNU
+** General Public License version 3 as published by the Free Software
+** Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT
+** included in the packaging of this file. Please review the following
+** information to ensure the GNU General Public License requirements will
+** be met: https://www.gnu.org/licenses/gpl-3.0.html.
+**
+** $QT_END_LICENSE$
+**
+****************************************************************************/
+#include <QJSEngine>
+#include <QCoreApplication>
+#include <QCommandLineParser>
+#include <qdebug.h>
+#include <stdlib.h>
+
+#include "test262runner.h"
+
+int main(int argc, char **argv)
+{
+ QCoreApplication app(argc, argv);
+
+
+ QCommandLineParser parser;
+ parser.addHelpOption();
+ parser.addVersionOption();
+ QCommandLineOption verbose("verbose", "Verbose output");
+ parser.addOption(verbose);
+ QCommandLineOption commandOption("command", "Javascript command line interpreter", "command");
+ parser.addOption(commandOption);
+ QCommandLineOption testDir("tests", "path to the tests", "tests", "test262");
+ parser.addOption(testDir);
+ QCommandLineOption cat("cat", "Print packaged test code that would be run");
+ parser.addOption(cat);
+ QCommandLineOption parallel("parallel", "Run tests in parallel");
+ parser.addOption(parallel);
+ QCommandLineOption jit("jit", "JIT all code");
+ parser.addOption(jit);
+ QCommandLineOption bytecode("interpret", "Run using the bytecode interpreter");
+ parser.addOption(bytecode);
+ QCommandLineOption withExpectations("with-test-expectations", "Parse TestExpectations to deal with known failures");
+ parser.addOption(withExpectations);
+ QCommandLineOption updateExpectations("update-expectations", "Update TestExpectations to remove unexepected passes");
+ parser.addOption(updateExpectations);
+ QCommandLineOption writeExpectations("write-expectations", "Generate a new TestExpectations file based on the results of the run");
+ parser.addOption(writeExpectations);
+ parser.addPositionalArgument("[filter]", "Only run tests that contain filter in their name");
+
+ parser.process(app);
+
+ Test262Runner testRunner(parser.value(commandOption), parser.value(testDir));
+
+ QStringList otherArgs = parser.positionalArguments();
+ if (otherArgs.size() > 1) {
+ qWarning() << "too many arguments";
+ return 1;
+ } else if (otherArgs.size()) {
+ testRunner.setFilter(otherArgs.at(0));
+ }
+
+ if (parser.isSet(cat)) {
+ testRunner.cat();
+ return 0;
+ }
+
+ if (parser.isSet(updateExpectations) && parser.isSet(writeExpectations)) {
+ qWarning() << "Can only specify one of --update-expectations and --write-expectations.";
+ exit(1);
+ }
+
+ if (parser.isSet(jit) && parser.isSet(bytecode)) {
+ qWarning() << "Can only specify one of --jit and --interpret.";
+ exit(1);
+ }
+
+ int flags = 0;
+ if (parser.isSet(verbose))
+ flags |= Test262Runner::Verbose;
+ if (parser.isSet(parallel))
+ flags |= Test262Runner::Parallel;
+ if (parser.isSet(jit))
+ flags |= Test262Runner::ForceJIT;
+ if (parser.isSet(bytecode))
+ flags |= Test262Runner::ForceBytecode;
+ if (parser.isSet(withExpectations))
+ flags |= Test262Runner::WithTestExpectations;
+ if (parser.isSet(updateExpectations))
+ flags |= Test262Runner::UpdateTestExpectations;
+ if (parser.isSet(writeExpectations))
+ flags |= Test262Runner::WriteTestExpectations;
+ testRunner.setFlags(flags);
+
+ if (testRunner.run())
+ return EXIT_SUCCESS;
+ else
+ return EXIT_FAILURE;
+}
diff --git a/tests/auto/qml/ecmascripttests/qjstest/qjstest.pro b/tests/auto/qml/ecmascripttests/qjstest/qjstest.pro
new file mode 100644
index 0000000000..6dec5f8f23
--- /dev/null
+++ b/tests/auto/qml/ecmascripttests/qjstest/qjstest.pro
@@ -0,0 +1,13 @@
+TEMPLATE = app
+TARGET = qjstest
+QT += qml-private
+INCLUDEPATH += .
+
+DEFINES += QT_DEPRECATED_WARNINGS
+
+HEADERS += test262runner.h
+SOURCES += main.cpp test262runner.cpp
+
+QMAKE_TARGET_DESCRIPTION = Javascript test runner
+
+load(qt_tool)
diff --git a/tests/auto/qml/ecmascripttests/qjstest/test262runner.cpp b/tests/auto/qml/ecmascripttests/qjstest/test262runner.cpp
new file mode 100644
index 0000000000..d2d389305a
--- /dev/null
+++ b/tests/auto/qml/ecmascripttests/qjstest/test262runner.cpp
@@ -0,0 +1,758 @@
+/****************************************************************************
+**
+** Copyright (C) 2016 The Qt Company Ltd.
+** Contact: https://www.qt.io/licensing/
+**
+** This file is part of the V4VM module of the Qt Toolkit.
+**
+** $QT_BEGIN_LICENSE:GPL-EXCEPT$
+** Commercial License Usage
+** Licensees holding valid commercial Qt licenses may use this file in
+** accordance with the commercial license agreement provided with the
+** Software or, alternatively, in accordance with the terms contained in
+** a written agreement between you and The Qt Company. For licensing terms
+** and conditions see https://www.qt.io/terms-conditions. For further
+** information use the contact form at https://www.qt.io/contact-us.
+**
+** GNU General Public License Usage
+** Alternatively, this file may be used under the terms of the GNU
+** General Public License version 3 as published by the Free Software
+** Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT
+** included in the packaging of this file. Please review the following
+** information to ensure the GNU General Public License requirements will
+** be met: https://www.gnu.org/licenses/gpl-3.0.html.
+**
+** $QT_END_LICENSE$
+**
+****************************************************************************/
+#include "test262runner.h"
+
+#include <qfile.h>
+#include <qdir.h>
+#include <qdiriterator.h>
+#include <qdebug.h>
+#include <qprocess.h>
+#include <qtemporaryfile.h>
+
+#include <private/qv4script_p.h>
+#include "private/qv4globalobject_p.h"
+#include "private/qqmlbuiltinfunctions_p.h"
+
+#include "qrunnable.h"
+
+static const char *excludedFeatures[] = {
+ "BigInt",
+ "class-fields-public",
+ "class-fields-private",
+ "Promise.prototype.finally",
+ "async-iteration",
+ "Symbol.asyncIterator",
+ "object-rest",
+ "object-spread",
+ "optional-catch-binding",
+ "regexp-dotall",
+ "regexp-lookbehind",
+ "regexp-named-groups",
+ "regexp-unicode-property-escapes",
+ "Atomics",
+ "SharedArrayBuffer",
+ "Array.prototype.flatten",
+ "Array.prototype.flatMap",
+ "string-trimming",
+ "String.prototype.trimEnd",
+ "String.prototype.trimStart",
+ "numeric-separator-literal",
+
+ // optional features, not supported by us
+ "caller",
+ nullptr
+};
+
+Test262Runner::Test262Runner(const QString &command, const QString &dir)
+ : command(command), testDir(dir)
+{
+ if (testDir.endsWith(QLatin1Char('/')))
+ testDir = testDir.chopped(1);
+}
+
+Test262Runner::~Test262Runner()
+{
+ delete threadPool;
+}
+
+void Test262Runner::cat()
+{
+ if (!loadTests())
+ return;
+
+ if (testCases.size() != 1)
+ qWarning() << "test262 --cat: Ambiguous test case, using" << testCases.begin().key();
+ TestData data = getTestData(testCases.begin().value());
+ printf("%s", data.content.constData());
+}
+
+bool Test262Runner::run()
+{
+ if (!loadTests())
+ return false;
+
+ if (flags & Parallel) {
+ threadPool = new QThreadPool;
+ threadPool->setStackSize(16*1024*1024);
+ if (flags & Verbose)
+ qDebug() << "Running in parallel with" << QThread::idealThreadCount() << "threads.";
+ }
+
+ if (flags & ForceJIT)
+ qputenv("QV4_JIT_CALL_THRESHOLD", QByteArray("0"));
+ else if (flags & ForceBytecode)
+ qputenv("QV4_FORCE_INTERPRETER", QByteArray("1"));
+
+ if (flags & WithTestExpectations)
+ loadTestExpectations();
+
+ for (auto it = testCases.constBegin(); it != testCases.constEnd(); ++it) {
+ auto c = it.value();
+ if (!c.skipTestCase) {
+ int result = runSingleTest(c);
+ if (result == -2)
+ return false;
+ }
+ }
+
+ if (threadPool)
+ threadPool->waitForDone();
+
+ report();
+
+ if (flags & WriteTestExpectations)
+ writeTestExpectations();
+ else if (flags & UpdateTestExpectations)
+ updateTestExpectations();
+
+ return true;
+}
+
+void Test262Runner::report()
+{
+ qDebug() << "Test execution summary:";
+ qDebug() << " Executed" << testCases.size() << "test cases.";
+ QStringList crashes;
+ QStringList unexpectedFailures;
+ QStringList unexpectedPasses;
+ for (auto it = testCases.constBegin(); it != testCases.constEnd(); ++it) {
+ const auto c = it.value();
+ if (c.strictResult == c.strictExpectation && c.sloppyResult == c.sloppyExpectation)
+ continue;
+ auto report = [&] (TestCase::Result expected, TestCase::Result result, const char *s) {
+ if (result == TestCase::Crashes)
+ crashes << (it.key() + " crashed in " + s + " mode");
+ if (result == TestCase::Fails && expected == TestCase::Passes)
+ unexpectedFailures << (it.key() + " failed in " + s + " mode");
+ if (result == TestCase::Passes && expected == TestCase::Fails)
+ unexpectedPasses << (it.key() + " unexpectedly passed in " + s + " mode");
+ };
+ report(c.strictExpectation, c.strictResult, "strict");
+ report(c.sloppyExpectation, c.sloppyResult, "sloppy");
+ }
+ if (!crashes.isEmpty()) {
+ qDebug() << " Encountered" << crashes.size() << "crashes in the following files:";
+ for (const QString &f : qAsConst(crashes))
+ qDebug() << " " << f;
+ }
+ if (!unexpectedFailures.isEmpty()) {
+ qDebug() << " Encountered" << unexpectedFailures.size() << "unexpected failures in the following files:";
+ for (const QString &f : qAsConst(unexpectedFailures))
+ qDebug() << " " << f;
+ }
+ if (!unexpectedPasses.isEmpty()) {
+ qDebug() << " Encountered" << unexpectedPasses.size() << "unexpected passes in the following files:";
+ for (const QString &f : qAsConst(unexpectedPasses))
+ qDebug() << " " << f;
+ }
+}
+
+bool Test262Runner::loadTests()
+{
+ QDir dir(testDir + "/test");
+ if (!dir.exists()) {
+ qWarning() << "Could not load tests," << dir.path() << "does not exist.";
+ return false;
+ }
+
+ QString annexB = "annexB";
+ QString harness = "harness";
+ QString intl402 = "intl402";
+
+ int pathlen = dir.path().length() + 1;
+ QDirIterator it(dir, QDirIterator::Subdirectories);
+ while (it.hasNext()) {
+ QString file = it.next().mid(pathlen);
+ if (!file.endsWith(".js"))
+ continue;
+ if (!filter.isEmpty() && !file.contains(filter))
+ continue;
+ if (file.startsWith(annexB) || file.startsWith(harness) || file.startsWith(intl402))
+ continue;
+
+ testCases.insert(file, TestCase{ file });
+ }
+ if (testCases.isEmpty()) {
+ qWarning() << "No tests to run.";
+ return false;
+ }
+
+ return true;
+}
+
+
+struct TestExpectationLine {
+ TestExpectationLine(const QByteArray &line);
+ enum State {
+ Fails,
+ SloppyFails,
+ StrictFails,
+ Skip,
+ Passes
+ } state;
+ QString testCase;
+
+ QByteArray toLine() const;
+ void update(const TestCase &testCase);
+
+ static TestExpectationLine fromTestCase(const TestCase &testCase);
+private:
+ TestExpectationLine() = default;
+ static State stateFromTestCase(const TestCase &testCase);
+};
+
+TestExpectationLine::TestExpectationLine(const QByteArray &line)
+{
+ int space = line.indexOf(' ');
+
+ testCase = QString::fromUtf8(space > 0 ? line.left(space) : line);
+ if (!testCase.endsWith(".js"))
+ testCase += ".js";
+
+ state = Fails;
+ if (space < 0)
+ return;
+ QByteArray qualifier = line.mid(space + 1);
+ if (qualifier == "skip")
+ state = Skip;
+ else if (qualifier == "strictFails")
+ state = StrictFails;
+ else if (qualifier == "sloppyFails")
+ state = SloppyFails;
+ else if (qualifier == "fails")
+ state = Fails;
+ else
+ qWarning() << "illegal format in TestExpectations, line" << line;
+}
+
+QByteArray TestExpectationLine::toLine() const {
+ const char *res = nullptr;
+ switch (state) {
+ case Fails:
+ res = " fails\n";
+ break;
+ case SloppyFails:
+ res = " sloppyFails\n";
+ break;
+ case StrictFails:
+ res = " strictFails\n";
+ break;
+ case Skip:
+ res = " skip\n";
+ break;
+ case Passes:
+ // no need for an entry
+ return QByteArray();
+ }
+ QByteArray result = testCase.toUtf8() + res;
+ return result;
+}
+
+void TestExpectationLine::update(const TestCase &testCase)
+{
+ Q_ASSERT(testCase.test == this->testCase);
+
+ State resultState = stateFromTestCase(testCase);
+ switch (resultState) {
+ case Fails:
+ // no improvement, don't update
+ break;
+ case SloppyFails:
+ if (state == Fails)
+ state = SloppyFails;
+ else if (state == StrictFails)
+ // we have a regression in sloppy mode, but strict now passes
+ state = Passes;
+ break;
+ case StrictFails:
+ if (state == Fails)
+ state = StrictFails;
+ else if (state == SloppyFails)
+ // we have a regression in strict mode, but sloppy now passes
+ state = Passes;
+ break;
+ case Skip:
+ Q_ASSERT(state == Skip);
+ // nothing to do
+ break;
+ case Passes:
+ state = Passes;
+ }
+}
+
+TestExpectationLine TestExpectationLine::fromTestCase(const TestCase &testCase)
+{
+ TestExpectationLine l;
+ l.testCase = testCase.test;
+ l.state = stateFromTestCase(testCase);
+ return l;
+}
+
+TestExpectationLine::State TestExpectationLine::stateFromTestCase(const TestCase &testCase)
+{
+ // keep skipped tests
+ if (testCase.skipTestCase)
+ return Skip;
+
+ bool strictFails = (testCase.strictResult == TestCase::Crashes || testCase.strictResult == TestCase::Fails);
+ bool sloppyFails = (testCase.sloppyResult == TestCase::Crashes || testCase.sloppyResult == TestCase::Fails);
+ if (strictFails && sloppyFails)
+ return Fails;
+ if (strictFails)
+ return StrictFails;
+ if (sloppyFails)
+ return SloppyFails;
+ return Passes;
+}
+
+
+void Test262Runner::loadTestExpectations()
+{
+ QFile file("TestExpectations");
+ if (!file.open(QFile::ReadOnly)) {
+ qWarning() << "Could not open TestExpectations file.";
+ return;
+ }
+
+ int line = 0;
+ while (!file.atEnd()) {
+ ++line;
+ QByteArray line = file.readLine().trimmed();
+ if (line.startsWith('#') || line.isEmpty())
+ continue;
+ TestExpectationLine expectation(line);
+ if (!filter.isEmpty() && !expectation.testCase.contains(filter))
+ continue;
+
+ if (!testCases.contains(expectation.testCase))
+ qWarning() << "Unknown test case" << expectation.testCase << "in TestExpectations file.";
+ //qDebug() << "TestExpectations:" << expectation.testCase << expectation.state;
+ TestCase &s = testCases[expectation.testCase];
+ switch (expectation.state) {
+ case TestExpectationLine::Fails:
+ s.strictExpectation = TestCase::Fails;
+ s.sloppyExpectation = TestCase::Fails;
+ break;
+ case TestExpectationLine::SloppyFails:
+ s.strictExpectation = TestCase::Passes;
+ s.sloppyExpectation = TestCase::Fails;
+ break;
+ case TestExpectationLine::StrictFails:
+ s.strictExpectation = TestCase::Fails;
+ s.sloppyExpectation = TestCase::Passes;
+ break;
+ case TestExpectationLine::Skip:
+ s.skipTestCase = true;
+ break;
+ case TestExpectationLine::Passes:
+ Q_UNREACHABLE();
+ }
+ }
+}
+
+void Test262Runner::updateTestExpectations()
+{
+ QFile file("TestExpectations");
+ if (!file.open(QFile::ReadOnly)) {
+ qWarning() << "Could not open TestExpectations file.";
+ return;
+ }
+
+ QTemporaryFile updatedExpectations;
+ updatedExpectations.open();
+
+ int line = 0;
+ while (!file.atEnd()) {
+ ++line;
+ QByteArray originalLine = file.readLine();
+ QByteArray line = originalLine.trimmed();
+ if (line.startsWith('#') || line.isEmpty()) {
+ updatedExpectations.write(originalLine);
+ continue;
+ }
+
+ TestExpectationLine expectation(line);
+// qDebug() << "checking: " << expectation.testCase;
+ if (!testCases.contains(expectation.testCase)) {
+ updatedExpectations.write(originalLine);
+ continue;
+ }
+ const TestCase &testcase = testCases.value(expectation.testCase);
+ expectation.update(testcase);
+
+ line = expectation.toLine();
+// qDebug() << "updated line:" << line;
+ updatedExpectations.write(line);
+ }
+ file.close();
+ updatedExpectations.close();
+ file.remove();
+ qDebug() << updatedExpectations.fileName() << file.fileName();
+ updatedExpectations.copy(file.fileName());
+ qDebug() << "Updated TestExpectations file written!";
+}
+
+void Test262Runner::writeTestExpectations()
+{
+ QFile file("TestExpectations");
+
+ QTemporaryFile expectations;
+ expectations.open();
+
+ for (auto c : qAsConst(testCases)) {
+ TestExpectationLine line = TestExpectationLine::fromTestCase(c);
+ expectations.write(line.toLine());
+ }
+
+ expectations.close();
+ if (file.exists())
+ file.remove();
+ qDebug() << expectations.fileName() << file.fileName();
+ expectations.copy(file.fileName());
+ qDebug() << "new TestExpectations file written!";
+
+}
+
+static bool executeTest(const QByteArray &data)
+{
+ QString testData = QString::fromUtf8(data);
+
+ QV4::ExecutionEngine vm;
+
+ QV4::Scope scope(&vm);
+ QV4::ScopedContext ctx(scope, vm.rootContext());
+
+ QV4::GlobalExtensions::init(vm.globalObject, QJSEngine::ConsoleExtension | QJSEngine::GarbageCollectionExtension);
+
+ QV4::Script script(ctx, QV4::Compiler::ContextType::Global, testData, QString());
+ script.parse();
+
+ QV4::ScopedValue result(scope);
+ if (!scope.engine->hasException)
+ result = script.run();
+
+ if (scope.engine->hasException)
+ return false;
+ return true;
+}
+
+class SingleTest : public QRunnable
+{
+public:
+ SingleTest(Test262Runner *runner, const TestData &data)
+ : runner(runner), data(data)
+ {
+ command = runner->command;
+ }
+ void run();
+
+ void runExternalTest();
+
+ QString command;
+ Test262Runner *runner;
+ TestData data;
+};
+
+void SingleTest::run()
+{
+ if (!command.isEmpty()) {
+ runExternalTest();
+ return;
+ }
+
+ if (data.runInSloppyMode) {
+ bool ok = ::executeTest(data.content);
+ if (data.negative)
+ ok = !ok;
+
+ data.sloppyResult = ok ? TestCase::Passes : TestCase::Fails;
+ } else {
+ data.sloppyResult = TestCase::Skipped;
+ }
+ if (data.runInStrictMode) {
+ QByteArray c = "'use strict';\n" + data.content;
+ bool ok = ::executeTest(c);
+ if (data.negative)
+ ok = !ok;
+
+ data.strictResult = ok ? TestCase::Passes : TestCase::Fails;
+ } else {
+ data.strictResult = TestCase::Skipped;
+ }
+ runner->addResult(data);
+}
+
+void SingleTest::runExternalTest()
+{
+ auto runTest = [=] (const char *header, TestCase::Result *result) {
+ QTemporaryFile tempFile;
+ tempFile.open();
+ tempFile.write(header);
+ tempFile.write(data.content);
+ tempFile.close();
+
+ QProcess process;
+// if (flags & Verbose)
+// process.setReadChannelMode(QProcess::ForwardedChannels);
+
+ process.start(command, QStringList(tempFile.fileName()));
+ if (!process.waitForFinished(-1) || process.error() == QProcess::FailedToStart) {
+ qWarning() << "Could not execute" << command;
+ *result = TestCase::Crashes;
+ }
+ if (process.exitStatus() != QProcess::NormalExit) {
+ *result = TestCase::Crashes;
+ }
+ bool ok = (process.exitCode() == EXIT_SUCCESS);
+ if (data.negative)
+ ok = !ok;
+ *result = ok ? TestCase::Passes : TestCase::Fails;
+ };
+
+ if (data.runInSloppyMode)
+ runTest("", &data.sloppyResult);
+ if (data.runInStrictMode)
+ runTest("'use strict';\n", &data.strictResult);
+
+ runner->addResult(data);
+}
+
+int Test262Runner::runSingleTest(TestCase testCase)
+{
+ TestData data = getTestData(testCase);
+// qDebug() << "starting test" << data.test;
+
+ if (data.isExcluded || data.async || data.runAsModuleCode)
+ return 0;
+
+ if (threadPool) {
+ SingleTest *test = new SingleTest(this, data);
+ threadPool->start(test);
+ return 0;
+ }
+ SingleTest test(this, data);
+ test.run();
+ return 0;
+}
+
+void Test262Runner::addResult(TestCase result)
+{
+ {
+ QMutexLocker locker(&mutex);
+ Q_ASSERT(result.strictExpectation == testCases[result.test].strictExpectation);
+ Q_ASSERT(result.sloppyExpectation == testCases[result.test].sloppyExpectation);
+ testCases[result.test] = result;
+ }
+
+ if (!(flags & Verbose))
+ return;
+
+ QString test = result.test;
+ if (result.strictResult == TestCase::Skipped) {
+ ;
+ } else if (result.strictResult == TestCase::Crashes) {
+ qDebug() << "FAIL:" << test << "crashed in strict mode!";
+ } else if ((result.strictResult == TestCase::Fails) && (result.strictExpectation == TestCase::Fails)) {
+ qDebug() << "PASS:" << test << "failed in strict mode as expected";
+ } else if ((result.strictResult == TestCase::Passes) == (result.strictExpectation == TestCase::Passes)) {
+ qDebug() << "PASS:" << test << "passed in strict mode";
+ } else if (!(result.strictExpectation == TestCase::Fails)) {
+ qDebug() << "FAIL:" << test << "failed in strict mode";
+ } else {
+ qDebug() << "XPASS:" << test << "unexpectedly passed in strict mode";
+ }
+
+ if (result.sloppyResult == TestCase::Skipped) {
+ ;
+ } else if (result.sloppyResult == TestCase::Crashes) {
+ qDebug() << "FAIL:" << test << "crashed in sloppy mode!";
+ } else if ((result.sloppyResult == TestCase::Fails) && (result.sloppyExpectation == TestCase::Fails)) {
+ qDebug() << "PASS:" << test << "failed in sloppy mode as expected";
+ } else if ((result.sloppyResult == TestCase::Passes) == (result.sloppyExpectation == TestCase::Passes)) {
+ qDebug() << "PASS:" << test << "passed in sloppy mode";
+ } else if (!(result.sloppyExpectation == TestCase::Fails)) {
+ qDebug() << "FAIL:" << test << "failed in sloppy mode";
+ } else {
+ qDebug() << "XPASS:" << test << "unexpectedly passed in sloppy mode";
+ }
+}
+
+TestData Test262Runner::getTestData(const TestCase &testCase)
+{
+ QFile testFile(testDir + "/test/" + testCase.test);
+ if (!testFile.open(QFile::ReadOnly)) {
+ qWarning() << "wrong test file" << testCase.test;
+ exit(1);
+ }
+ QByteArray content = testFile.readAll();
+
+// qDebug() << "parsing test file" << test;
+
+ TestData data(testCase);
+ parseYaml(content, &data);
+
+ data.content += harness("assert.js");
+ data.content += harness("sta.js");
+
+ for (QByteArray inc : qAsConst(data.includes)) {
+ inc = inc.trimmed();
+ data.content += harness(inc);
+ }
+
+ if (data.async)
+ data.content += harness("doneprintHandle.js");
+
+ data.content += content;
+
+ return data;
+}
+
+struct YamlSection {
+ YamlSection(const QByteArray &yaml, const char *sectionName);
+
+ bool contains(const char *keyword) const;
+ QList<QByteArray> keywords() const;
+
+ QByteArray yaml;
+ int start = -1;
+ int length = 0;
+ bool shortSection = false;
+};
+
+YamlSection::YamlSection(const QByteArray &yaml, const char *sectionName)
+ : yaml(yaml)
+{
+ start = yaml.indexOf(sectionName);
+ if (start < 0)
+ return;
+ start += static_cast<int>(strlen(sectionName));
+ int end = yaml.indexOf('\n', start + 1);
+ if (end < 0)
+ end = yaml.length();
+
+ int s = yaml.indexOf('[', start);
+ if (s > 0 && s < end) {
+ shortSection = true;
+ start = s + 1;
+ end = yaml.indexOf(']', s);
+ } else {
+ while (end < yaml.size() - 1 && yaml.at(end + 1) == ' ')
+ end = yaml.indexOf('\n', end + 1);
+ }
+ length = end - start;
+}
+
+bool YamlSection::contains(const char *keyword) const
+{
+ if (start < 0)
+ return false;
+ int idx = yaml.indexOf(keyword, start);
+ if (idx >= start && idx < start + length)
+ return true;
+ return false;
+}
+
+QList<QByteArray> YamlSection::keywords() const
+{
+ if (start < 0)
+ return QList<QByteArray>();
+
+ QByteArray content = yaml.mid(start, length);
+ QList<QByteArray> keywords;
+ if (shortSection) {
+ keywords = content.split(',');
+ } else {
+ const QList<QByteArray> list = content.split('\n');
+ for (const QByteArray &l : list) {
+ int i = 0;
+ while (i < l.size() && (l.at(i) == ' ' || l.at(i) == '-'))
+ ++i;
+ QByteArray entry = l.mid(i);
+ if (!entry.isEmpty())
+ keywords.append(entry);
+ }
+ }
+// qDebug() << "keywords:" << keywords;
+ return keywords;
+}
+
+
+void Test262Runner::parseYaml(const QByteArray &content, TestData *data)
+{
+ int start = content.indexOf("/*---");
+ if (start < 0)
+ return;
+ start += sizeof("/*---");
+
+ int end = content.indexOf("---*/");
+ if (end < 0)
+ return;
+
+ QByteArray yaml = content.mid(start, end - start);
+
+ if (yaml.contains("negative:"))
+ data->negative = true;
+
+ YamlSection flags(yaml, "flags:");
+ data->runInSloppyMode = !flags.contains("onlyStrict");
+ data->runInStrictMode = !flags.contains("noStrict") && !flags.contains("raw");
+ data->runAsModuleCode = flags.contains("module");
+ data->async = flags.contains("async");
+
+ YamlSection includes(yaml, "includes:");
+ data->includes = includes.keywords();
+
+ YamlSection features = YamlSection(yaml, "features:");
+
+ const char **f = excludedFeatures;
+ while (*f) {
+ if (features.contains(*f)) {
+ data->isExcluded = true;
+ break;
+ }
+ ++f;
+ }
+
+// qDebug() << "Yaml:\n" << yaml;
+}
+
+QByteArray Test262Runner::harness(const QByteArray &name)
+{
+ if (harnessFiles.contains(name))
+ return harnessFiles.value(name);
+
+ QFile h(testDir + QLatin1String("/harness/") + name);
+ if (!h.open(QFile::ReadOnly)) {
+ qWarning() << "Illegal test harness file" << name;
+ exit(1);
+ }
+
+ QByteArray content = h.readAll();
+ harnessFiles.insert(name, content);
+ return content;
+}
diff --git a/tests/auto/qml/ecmascripttests/qjstest/test262runner.h b/tests/auto/qml/ecmascripttests/qjstest/test262runner.h
new file mode 100644
index 0000000000..a4035e0b72
--- /dev/null
+++ b/tests/auto/qml/ecmascripttests/qjstest/test262runner.h
@@ -0,0 +1,131 @@
+/****************************************************************************
+**
+** Copyright (C) 2016 The Qt Company Ltd.
+** Contact: https://www.qt.io/licensing/
+**
+** This file is part of the V4VM module of the Qt Toolkit.
+**
+** $QT_BEGIN_LICENSE:GPL-EXCEPT$
+** Commercial License Usage
+** Licensees holding valid commercial Qt licenses may use this file in
+** accordance with the commercial license agreement provided with the
+** Software or, alternatively, in accordance with the terms contained in
+** a written agreement between you and The Qt Company. For licensing terms
+** and conditions see https://www.qt.io/terms-conditions. For further
+** information use the contact form at https://www.qt.io/contact-us.
+**
+** GNU General Public License Usage
+** Alternatively, this file may be used under the terms of the GNU
+** General Public License version 3 as published by the Free Software
+** Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT
+** included in the packaging of this file. Please review the following
+** information to ensure the GNU General Public License requirements will
+** be met: https://www.gnu.org/licenses/gpl-3.0.html.
+**
+** $QT_END_LICENSE$
+**
+****************************************************************************/
+#ifndef TEST262RUNNER_H
+#define TEST262RUNNER_H
+#include <qstring.h>
+#include <qstringlist.h>
+#include <qset.h>
+#include <qmap.h>
+#include <qmutex.h>
+#include <qthreadpool.h>
+
+struct TestCase {
+ TestCase() = default;
+ TestCase(const QString &test)
+ : test(test) {}
+ enum Result {
+ Skipped,
+ Passes,
+ Fails,
+ Crashes
+ };
+ bool skipTestCase = false;
+ Result strictExpectation = Passes;
+ Result sloppyExpectation = Passes;
+ Result strictResult = Skipped;
+ Result sloppyResult = Skipped;
+
+ QString test;
+};
+
+struct TestData : TestCase {
+ TestData(const TestCase &testCase)
+ : TestCase(testCase) {}
+ // flags
+ bool negative = false;
+ bool runInStrictMode = true;
+ bool runInSloppyMode = true;
+ bool runAsModuleCode = false;
+ bool async = false;
+
+ bool isExcluded = false;
+
+ QList<QByteArray> includes;
+
+ QByteArray content;
+};
+
+class Test262Runner
+{
+public:
+ Test262Runner(const QString &command, const QString &testDir);
+ ~Test262Runner();
+
+ enum Mode {
+ Sloppy = 0,
+ Strict = 1
+ };
+
+ enum Flags {
+ Verbose = 0x1,
+ Parallel = 0x2,
+ ForceBytecode = 0x4,
+ ForceJIT = 0x8,
+ WithTestExpectations = 0x10,
+ UpdateTestExpectations = 0x20,
+ WriteTestExpectations = 0x40,
+ };
+ void setFlags(int f) { flags = f; }
+
+ void setFilter(const QString &f) { filter = f; }
+
+ void cat();
+ bool run();
+
+ void report();
+
+private:
+ friend class SingleTest;
+ bool loadTests();
+ void loadTestExpectations();
+ void updateTestExpectations();
+ void writeTestExpectations();
+ int runSingleTest(TestCase testCase);
+
+ TestData getTestData(const TestCase &testCase);
+ void parseYaml(const QByteArray &content, TestData *data);
+
+ QByteArray harness(const QByteArray &name);
+
+ void addResult(TestCase result);
+
+ QString command;
+ QString testDir;
+ int flags = 0;
+
+ QMutex mutex;
+ QString filter;
+
+ QMap<QString, TestCase> testCases;
+ QHash<QByteArray, QByteArray> harnessFiles;
+
+ QThreadPool *threadPool = nullptr;
+};
+
+
+#endif
diff --git a/tests/auto/qml/ecmascripttests/test262 b/tests/auto/qml/ecmascripttests/test262
-Subproject 40b4f28e98c416a092e26aa17489bf94ccb8bf4
+Subproject 3c69133cc419840c1be34638039cd8c48a7ef58
diff --git a/tests/auto/qml/ecmascripttests/test262.py b/tests/auto/qml/ecmascripttests/test262.py
index e055c7a8e7..19551e3ba2 100755
--- a/tests/auto/qml/ecmascripttests/test262.py
+++ b/tests/auto/qml/ecmascripttests/test262.py
@@ -61,6 +61,35 @@ from parseTestRecord import parseTestRecord, stripHeader
from packagerConfig import *
+# excluded features that are still experimental and not part of any official standard
+# see also the features.txt file in test262/
+excludedFeatures = [
+ "BigInt",
+ "class-fields-public",
+ "class-fields-private",
+ "Promise.prototype.finally",
+ "async-iteration",
+ "Symbol.asyncIterator",
+ "object-rest",
+ "object-spread",
+ "optional-catch-binding",
+ "regexp-dotall",
+ "regexp-lookbehind",
+ "regexp-named-groups",
+ "regexp-unicode-property-escapes",
+ "Atomics",
+ "SharedArrayBuffer",
+ "Array.prototype.flatten",
+ "Array.prototype.flatMap",
+ "string-trimming",
+ "String.prototype.trimEnd",
+ "String.prototype.trimStart",
+ "numeric-separator-literal",
+
+ # optional features, not supported by us
+ "caller"
+]
+
# ############# Helpers needed for parallel multi-process test execution ############
def runTest(case, args):
@@ -95,19 +124,19 @@ class TestExpectations:
continue
record = line.split()
if len(record) == 1:
- self.testsToSkip.append(record[0])
+ self.failingTests.append(record[0])
else:
test = record[0]
expectation = record[1]
- if expectation == "failing":
- self.failingTests.append(test)
+ if expectation == "skip":
+ self.testsToSkip.append(test)
f.close()
def update(self, progress):
- unexpectedPasses = [c.case.name[-1] for c in progress.failed_tests if c.case.IsNegative()]
+ unexpectedPasses = [c.case.name for c in progress.failed_tests if c.case.IsNegative()]
# If a test fails that we expected to fail, then it actually passed unexpectedly.
- failures = [c.case.name[-1] for c in progress.failed_tests if not c.case.IsNegative()]
+ failures = [c.case.name for c in progress.failed_tests if not c.case.IsNegative()]
for failure in failures:
if failure in self.failingTests:
unexpectedPasses.append(failure)
@@ -116,7 +145,7 @@ class TestExpectations:
lines = f.read().splitlines()
oldLen = len(lines)
for result in unexpectedPasses:
- expectationLine = result + " failing"
+ expectationLine = result
try:
lines.remove(expectationLine)
except ValueError:
@@ -277,14 +306,17 @@ class TestCase(object):
f.close()
testRecord = parseTestRecord(self.contents, name)
self.test = testRecord["test"]
+ if 'features' in testRecord:
+ self.features = testRecord["features"];
+ else:
+ self.features = []
del testRecord["test"]
del testRecord["header"]
- del testRecord["commentary"]
self.testRecord = testRecord;
def GetName(self):
- return path.join(*self.name)
+ return self.name
def GetMode(self):
if self.strict_mode:
@@ -310,14 +342,20 @@ class TestCase(object):
def IsNoStrict(self):
return 'noStrict' in self.testRecord
+ def IsExperimental(self):
+ for f in self.features:
+ if excludedFeatures.count(f) >= 1:
+ return True;
+ return False
+
def GetSource(self):
# "var testDescrip = " + str(self.testRecord) + ';\n\n' + \
- source = self.suite.GetInclude("cth.js") + \
+ source = self.suite.GetInclude("assert.js") + \
self.suite.GetInclude("sta.js") + \
- self.suite.GetInclude("ed.js") + \
- self.suite.GetInclude("testBuiltInObject.js") + \
- self.suite.GetInclude("testIntl.js") + \
self.test + '\n'
+ if 'includes' in self.testRecord:
+ for inc in self.testRecord['includes']:
+ source += self.suite.GetInclude(inc);
if self.strict_mode:
source = '"use strict";\nvar strict_mode = true;\n' + source
@@ -403,14 +441,23 @@ class TestSuite(object):
def __init__(self, root, strict_only, non_strict_only, unmarked_default, load_expectations):
# TODO: derive from packagerConfig.py
- self.test_root = path.join(root, 'test', 'suite')
- self.lib_root = path.join(root, 'test', 'harness')
+ self.test_root = path.join(root, 'test')
+ self.lib_root = path.join(root, 'harness')
self.strict_only = strict_only
self.non_strict_only = non_strict_only
self.unmarked_default = unmarked_default
self.include_cache = { }
self.expectations = TestExpectations(load_expectations)
+ def IsExcludedTest(self, path):
+ if path.startswith('annexB'):
+ return True;
+ if path.startswith('harness'):
+ return True;
+ if path.startswith('intl402'):
+ return True;
+ return False;
+
def Validate(self):
if not path.exists(self.test_root):
ReportError("No test repository found")
@@ -459,25 +506,25 @@ class TestSuite(object):
else:
logging.warning("Unexpected path %s", full_path)
rel_path = full_path
- if self.ShouldRun(rel_path, tests) and not rel_path.startswith("intl402" + os.sep):
+ if self.ShouldRun(rel_path, tests) and not self.IsExcludedTest(rel_path):
basename = path.basename(full_path)[:-3]
- name = rel_path.split(path.sep)[:-1] + [basename]
- if EXCLUDE_LIST.count(basename) >= 1 or self.expectations.testsToSkip.count(basename) >= 1:
- print 'Excluded: ' + basename
+ name = rel_path.replace('.js', '')
+ if EXCLUDE_LIST.count(basename) >= 1 or self.expectations.testsToSkip.count(name) >= 1:
+ print 'Excluded: ' + rel_path
else:
if not self.non_strict_only:
strict_case = TestCase(self, name, full_path, True)
- if self.expectations.failingTests.count(basename) >= 1:
+ if self.expectations.failingTests.count(name) >= 1:
strict_case.NegateResult()
- if not strict_case.IsNoStrict():
+ if not strict_case.IsNoStrict() and not strict_case.IsExperimental():
if strict_case.IsOnlyStrict() or \
self.unmarked_default in ['both', 'strict']:
cases.append(strict_case)
if not self.strict_only:
non_strict_case = TestCase(self, name, full_path, False)
- if self.expectations.failingTests.count(basename) >= 1:
+ if self.expectations.failingTests.count(name) >= 1:
non_strict_case.NegateResult()
- if not non_strict_case.IsOnlyStrict():
+ if not non_strict_case.IsOnlyStrict() and not non_strict_case.IsExperimental():
if non_strict_case.IsNoStrict() or \
self.unmarked_default in ['both', 'non_strict']:
cases.append(non_strict_case)
diff --git a/tests/auto/qml/ecmascripttests/testcase.pro b/tests/auto/qml/ecmascripttests/testcase.pro
new file mode 100644
index 0000000000..5bf7ecd696
--- /dev/null
+++ b/tests/auto/qml/ecmascripttests/testcase.pro
@@ -0,0 +1,15 @@
+CONFIG += testcase
+TARGET = tst_ecmascripttests
+QT += testlib qml-private
+macos:CONFIG -= app_bundle
+SOURCES += tst_ecmascripttests.cpp qjstest/test262runner.cpp
+HEADERS += qjstest/test262runner.h
+DEFINES += SRCDIR=\\\"$$PWD\\\"
+
+# The ES test suite takes approximately 5 mins to run, on a fairly
+# vanilla developer machine, so the default watchdog timer kills the
+# test some of the time. Fix by raising time-out to 400s when
+# invoking tst_ecmascripttests:
+checkenv.name = QTEST_FUNCTION_TIMEOUT
+checkenv.value = 500000
+QT_TOOL_ENV += checkenv
diff --git a/tests/auto/qml/ecmascripttests/tst_ecmascripttests.cpp b/tests/auto/qml/ecmascripttests/tst_ecmascripttests.cpp
index 0d58d045b9..27d2822762 100644
--- a/tests/auto/qml/ecmascripttests/tst_ecmascripttests.cpp
+++ b/tests/auto/qml/ecmascripttests/tst_ecmascripttests.cpp
@@ -30,55 +30,37 @@
#include <QtTest/QtTest>
#include <QProcess>
#include <QLibraryInfo>
+#include <qjstest/test262runner.h>
class tst_EcmaScriptTests : public QObject
{
Q_OBJECT
- void runTests(bool interpret);
-
private slots:
void runInterpreted();
void runJitted();
};
-void tst_EcmaScriptTests::runTests(bool interpret)
-{
-#if defined(Q_OS_LINUX) && defined(Q_PROCESSOR_X86_64)
- QProcessEnvironment env = QProcessEnvironment::systemEnvironment();
- if (interpret)
- env.insert("QV4_FORCE_INTERPRETER", "1");
- else
- env.insert("QV4_JIT_CALL_THRESHOLD", "0");
-
- QProcess process;
- process.setProcessChannelMode(QProcess::ForwardedChannels);
- process.setWorkingDirectory(QLatin1String(SRCDIR));
- process.setProgram("python");
- process.setProcessEnvironment(env);
- process.setArguments(QStringList() << "test262.py" << "--command=" + QLibraryInfo::location(QLibraryInfo::BinariesPath) + "/qmljs" << "--parallel" << "--with-test-expectations");
-
- qDebug() << "Going to run" << process.program() << process.arguments() << "in" << process.workingDirectory();
-
- process.start();
- QVERIFY(process.waitForStarted());
- const int timeoutInMSecs = 20 * 60 * 1000;
- QVERIFY2(process.waitForFinished(timeoutInMSecs), "Tests did not terminate in time -- see output above for details");
- QVERIFY2(process.exitStatus() == QProcess::NormalExit, "Running the test harness failed -- see output above for details");
- QVERIFY2(process.exitCode() == 0, "Tests failed -- see output above for details");
-#else
- QSKIP("Currently the ecmascript tests are only run on Linux/x86-64");
-#endif
-}
-
void tst_EcmaScriptTests::runInterpreted()
{
- runTests(true);
+#if defined(Q_PROCESSOR_X86_64)
+ QDir::setCurrent(QLatin1String(SRCDIR));
+ Test262Runner runner(QString(), "test262");
+ runner.setFlags(Test262Runner::ForceBytecode|Test262Runner::WithTestExpectations|Test262Runner::Parallel|Test262Runner::Verbose);
+ bool result = runner.run();
+ QVERIFY(result);
+#endif
}
void tst_EcmaScriptTests::runJitted()
{
- runTests(false);
+#if defined(Q_PROCESSOR_X86_64)
+ QDir::setCurrent(QLatin1String(SRCDIR));
+ Test262Runner runner(QString(), "test262");
+ runner.setFlags(Test262Runner::ForceJIT|Test262Runner::WithTestExpectations|Test262Runner::Parallel|Test262Runner::Verbose);
+ bool result = runner.run();
+ QVERIFY(result);
+#endif
}
QTEST_GUILESS_MAIN(tst_EcmaScriptTests)
diff --git a/tests/auto/qml/qjsengine/tst_qjsengine.cpp b/tests/auto/qml/qjsengine/tst_qjsengine.cpp
index bb923951a8..08f69618c4 100644
--- a/tests/auto/qml/qjsengine/tst_qjsengine.cpp
+++ b/tests/auto/qml/qjsengine/tst_qjsengine.cpp
@@ -206,7 +206,18 @@ private slots:
void scriptScopes();
+ void binaryNumbers();
+ void octalNumbers();
+
+ void incrementAfterNewline();
+
+ void deleteInsideForIn();
+
+ void functionToString_data();
+ void functionToString();
+
void protoChanges_QTBUG68369();
+ void multilineStrings();
signals:
void testSignal();
@@ -942,6 +953,7 @@ void tst_QJSEngine::globalObjectProperties_enumerate()
<< "decodeURIComponent"
<< "Date"
<< "Array"
+ << "Symbol"
<< "escape"
<< "unescape"
<< "SyntaxError"
@@ -958,6 +970,9 @@ void tst_QJSEngine::globalObjectProperties_enumerate()
<< "Uint32Array"
<< "Float32Array"
<< "Float64Array"
+ << "Set"
+ << "Map"
+ << "Reflect"
;
QSet<QString> actualNames;
{
@@ -3207,9 +3222,7 @@ void tst_QJSEngine::threadedEngine()
void tst_QJSEngine::functionDeclarationsInConditionals()
{
- // Even though this is bad practice (and test262 covers it with best practices test cases),
- // we do allow for function declarations in if and while statements, as unfortunately that's
- // real world JavaScript. (QTBUG-33064 for example)
+ // Visibility of function declarations inside blocks is limited to the block
QJSEngine eng;
QJSValue result = eng.evaluate("if (true) {\n"
" function blah() { return false; }\n"
@@ -3217,8 +3230,7 @@ void tst_QJSEngine::functionDeclarationsInConditionals()
" function blah() { return true; }\n"
"}\n"
"blah();");
- QVERIFY(result.isBool());
- QCOMPARE(result.toBool(), true);
+ QVERIFY(result.isError());
}
void tst_QJSEngine::arrayPop_QTBUG_35979()
@@ -4169,6 +4181,88 @@ void tst_QJSEngine::scriptScopes()
QCOMPARE(use.toInt(), 42);
}
+void tst_QJSEngine::binaryNumbers()
+{
+ QJSEngine engine;
+
+ QJSValue result = engine.evaluate("0b1001");
+ QVERIFY(result.isNumber());
+ QVERIFY(result.toNumber() == 9);
+
+ result = engine.evaluate("0B1001");
+ QVERIFY(result.isNumber());
+ QVERIFY(result.toNumber() == 9);
+
+ result = engine.evaluate("0b2");
+ QVERIFY(result.isError());
+}
+
+void tst_QJSEngine::octalNumbers()
+{
+ QJSEngine engine;
+
+ QJSValue result = engine.evaluate("0o11");
+ QVERIFY(result.isNumber());
+ QVERIFY(result.toNumber() == 9);
+
+ result = engine.evaluate("0O11");
+ QVERIFY(result.isNumber());
+ QVERIFY(result.toNumber() == 9);
+
+ result = engine.evaluate("0o9");
+ QVERIFY(result.isError());
+}
+
+void tst_QJSEngine::incrementAfterNewline()
+{
+ QJSEngine engine;
+
+ QJSValue result = engine.evaluate("var x = 0; if (\n++x) x; else -x;");
+ QVERIFY(result.isNumber());
+ QVERIFY(result.toNumber() == 1);
+
+ result = engine.evaluate("var x = 0; if (\n--x) x; else -x;");
+ QVERIFY(result.isNumber());
+ QVERIFY(result.toNumber() == -1);
+}
+
+void tst_QJSEngine::deleteInsideForIn()
+{
+ QJSEngine engine;
+
+ QJSValue iterationCount = engine.evaluate(
+ "var o = { a: 1, b: 2, c: 3, d: 4};\n"
+ "var count = 0;\n"
+ "for (var prop in o) { count++; delete o[prop]; }\n"
+ "count");
+ QVERIFY(iterationCount.isNumber());
+ QCOMPARE(iterationCount.toInt(), 4);
+}
+
+void tst_QJSEngine::functionToString_data()
+{
+ QTest::addColumn<QString>("source");
+ QTest::addColumn<QString>("expectedString");
+
+ QTest::newRow("named function") << QString::fromLatin1("function f() {}; f.toString()")
+ << QString::fromLatin1("function f() { [code] }");
+ QTest::newRow("anonymous function") << QString::fromLatin1("(function() {}).toString()")
+ << QString::fromLatin1("function() { [code] }");
+}
+
+// Tests that function.toString() prints the function's name.
+void tst_QJSEngine::functionToString()
+{
+ QFETCH(QString, source);
+ QFETCH(QString, expectedString);
+
+ QJSEngine engine;
+ engine.installExtensions(QJSEngine::AllExtensions);
+ QJSValue evaluationResult = engine.evaluate(source);
+ QVERIFY(!evaluationResult.isError());
+ QCOMPARE(evaluationResult.toString(), expectedString);
+}
+
void tst_QJSEngine::protoChanges_QTBUG68369()
{
QJSEngine engine;
@@ -4185,6 +4279,17 @@ void tst_QJSEngine::protoChanges_QTBUG68369()
QVERIFY(ok.toBool() == true);
}
+void tst_QJSEngine::multilineStrings()
+{
+ QJSEngine engine;
+ QJSValue result = engine.evaluate(
+ "var x = `a\nb`; x;"
+ );
+ QVERIFY(result.isString());
+ QVERIFY(result.toString() == QStringLiteral("a\nb"));
+
+}
+
QTEST_MAIN(tst_QJSEngine)
#include "tst_qjsengine.moc"
diff --git a/tests/auto/qml/qmldiskcache/tst_qmldiskcache.cpp b/tests/auto/qml/qmldiskcache/tst_qmldiskcache.cpp
index f5905758f3..d363180c06 100644
--- a/tests/auto/qml/qmldiskcache/tst_qmldiskcache.cpp
+++ b/tests/auto/qml/qmldiskcache/tst_qmldiskcache.cpp
@@ -106,7 +106,7 @@ struct TestCompiler
{
closeMapping();
testFilePath = baseDirectory + QStringLiteral("/test.qml");
- cacheFilePath = baseDirectory + QStringLiteral("/test.qmlc");
+ cacheFilePath = QV4::CompiledData::CompilationUnit::localCacheFilePath(QUrl::fromLocalFile(testFilePath));
mappedFile.setFileName(cacheFilePath);
}
@@ -499,7 +499,7 @@ void tst_qmldiskcache::fileSelectors()
QVERIFY(!obj.isNull());
QCOMPARE(obj->property("value").toInt(), 42);
- QFile cacheFile(testFilePath + "c");
+ QFile cacheFile(QV4::CompiledData::CompilationUnit::localCacheFilePath(QUrl::fromLocalFile(testFilePath)));
QVERIFY2(cacheFile.exists(), qPrintable(cacheFile.fileName()));
}
@@ -514,7 +514,7 @@ void tst_qmldiskcache::fileSelectors()
QVERIFY(!obj.isNull());
QCOMPARE(obj->property("value").toInt(), 100);
- QFile cacheFile(selectedTestFilePath + "c");
+ QFile cacheFile(QV4::CompiledData::CompilationUnit::localCacheFilePath(QUrl::fromLocalFile(selectedTestFilePath)));
QVERIFY2(cacheFile.exists(), qPrintable(cacheFile.fileName()));
}
}
@@ -667,7 +667,7 @@ void tst_qmldiskcache::stableOrderOfDependentCompositeTypes()
QVERIFY2(firstDependentTypeClassName.contains("QMLTYPE"), firstDependentTypeClassName.constData());
QVERIFY2(secondDependentTypeClassName.contains("QMLTYPE"), secondDependentTypeClassName.constData());
- const QString testFileCachePath = testFilePath + QLatin1Char('c');
+ const QString testFileCachePath = QV4::CompiledData::CompilationUnit::localCacheFilePath(QUrl::fromLocalFile(testFilePath));
QVERIFY(QFile::exists(testFileCachePath));
QDateTime initialCacheTimeStamp = QFileInfo(testFileCachePath).lastModified();
@@ -745,7 +745,7 @@ void tst_qmldiskcache::singletonDependency()
QCOMPARE(obj->property("value").toInt(), 42);
}
- const QString testFileCachePath = testFilePath + QLatin1Char('c');
+ const QString testFileCachePath = QV4::CompiledData::CompilationUnit::localCacheFilePath(QUrl::fromLocalFile(testFilePath));
QVERIFY(QFile::exists(testFileCachePath));
QDateTime initialCacheTimeStamp = QFileInfo(testFileCachePath).lastModified();
@@ -802,7 +802,7 @@ void tst_qmldiskcache::cppRegisteredSingletonDependency()
QCOMPARE(value.toInt(), 42);
}
- const QString testFileCachePath = testFilePath + QLatin1Char('c');
+ const QString testFileCachePath = QV4::CompiledData::CompilationUnit::localCacheFilePath(QUrl::fromLocalFile(testFilePath));
QVERIFY(QFile::exists(testFileCachePath));
QDateTime initialCacheTimeStamp = QFileInfo(testFileCachePath).lastModified();
diff --git a/tests/auto/qml/qmlmin/tst_qmlmin.cpp b/tests/auto/qml/qmlmin/tst_qmlmin.cpp
index 5941385c80..e1ba6d12c0 100644
--- a/tests/auto/qml/qmlmin/tst_qmlmin.cpp
+++ b/tests/auto/qml/qmlmin/tst_qmlmin.cpp
@@ -125,6 +125,8 @@ void tst_qmlmin::initTestCase()
invalidFiles << "tests/auto/qml/qqmlecmascript/data/stringParsing_error.6.qml";
invalidFiles << "tests/auto/qml/qqmlecmascript/data/numberParsing_error.1.qml";
invalidFiles << "tests/auto/qml/qqmlecmascript/data/numberParsing_error.2.qml";
+ invalidFiles << "tests/auto/qml/parserstress/tests/ecma_3/FunExpr/fe-001.js";
+ invalidFiles << "tests/auto/qml/qjsengine/script/com/trolltech/syntaxerror/__init__.js";
}
QStringList tst_qmlmin::findFiles(const QDir &d)
diff --git a/tests/auto/qml/qqmlcomponent/tst_qqmlcomponent.cpp b/tests/auto/qml/qqmlcomponent/tst_qqmlcomponent.cpp
index 3a70890362..efd5bb571b 100644
--- a/tests/auto/qml/qqmlcomponent/tst_qqmlcomponent.cpp
+++ b/tests/auto/qml/qqmlcomponent/tst_qqmlcomponent.cpp
@@ -116,6 +116,7 @@ private slots:
void onDestructionCount();
void recursion();
void recursionContinuation();
+ void partialComponentCreation();
void callingContextForInitialProperties();
void setNonExistentInitialProperty();
void relativeUrl_data();
@@ -527,6 +528,29 @@ void tst_qqmlcomponent::recursionContinuation()
QVERIFY(object->property("success").toBool());
}
+void tst_qqmlcomponent::partialComponentCreation()
+{
+ const int maxCount = 17;
+ QQmlEngine engine;
+ QScopedPointer<QQmlComponent> components[maxCount];
+ QScopedPointer<QObject> objects[maxCount];
+ QQmlTestMessageHandler messageHandler;
+
+ QCOMPARE(engine.outputWarningsToStandardError(), true);
+
+ for (int i = 0; i < maxCount; i++) {
+ components[i].reset(new QQmlComponent(&engine, testFileUrl("QtObjectComponent.qml")));
+ objects[i].reset(components[i]->beginCreate(engine.rootContext()));
+ QVERIFY(objects[i].isNull() == false);
+ }
+ QVERIFY2(messageHandler.messages().isEmpty(), qPrintable(messageHandler.messageString()));
+
+ for (int i = 0; i < maxCount; i++) {
+ components[i]->completeCreate();
+ }
+ QVERIFY2(messageHandler.messages().isEmpty(), qPrintable(messageHandler.messageString()));
+}
+
class CallingContextCheckingClass : public QObject
{
Q_OBJECT
diff --git a/tests/auto/qml/qqmlconsole/data/logging.qml b/tests/auto/qml/qqmlconsole/data/logging.qml
index d55c99bcbd..0764ad7545 100644
--- a/tests/auto/qml/qqmlconsole/data/logging.qml
+++ b/tests/auto/qml/qqmlconsole/data/logging.qml
@@ -67,6 +67,8 @@ QtObject {
console.log(1, "pong!", new Object);
console.log(1, ["ping","pong"], new Object, 2);
+ console.log(contextStringListProperty);
+
try {
console.log(exception);
} catch (e) {
diff --git a/tests/auto/qml/qqmlconsole/tst_qqmlconsole.cpp b/tests/auto/qml/qqmlconsole/tst_qqmlconsole.cpp
index 0d915f98f8..40a9295e50 100644
--- a/tests/auto/qml/qqmlconsole/tst_qqmlconsole.cpp
+++ b/tests/auto/qml/qqmlconsole/tst_qqmlconsole.cpp
@@ -29,6 +29,7 @@
#include <QDebug>
#include <QQmlEngine>
#include <QQmlComponent>
+#include <QQmlContext>
#include <QLoggingCategory>
#include "../../shared/util.h"
@@ -74,18 +75,22 @@ void tst_qqmlconsole::logging()
QTest::ignoreMessage(QtDebugMsg, "{\"a\":\"hello\",\"d\":1}");
QTest::ignoreMessage(QtDebugMsg, "undefined");
QTest::ignoreMessage(QtDebugMsg, "12");
- QTest::ignoreMessage(QtDebugMsg, "function() { [code] }");
+ QTest::ignoreMessage(QtDebugMsg, "function e() { [code] }");
QTest::ignoreMessage(QtDebugMsg, "true");
// Printing QML object prints out the class/type of QML object with the memory address
// QTest::ignoreMessage(QtDebugMsg, "QtObject_QML_0(0xABCD..)");
// QTest::ignoreMessage(QtDebugMsg, "[object Object]");
QTest::ignoreMessage(QtDebugMsg, "1 pong! [object Object]");
QTest::ignoreMessage(QtDebugMsg, "1 [ping,pong] [object Object] 2");
+ QTest::ignoreMessage(QtDebugMsg, "[Hello,World]");
+
+ QScopedPointer<QQmlContext> loggingContext(new QQmlContext(engine.rootContext()));
+ QStringList stringList; stringList << QStringLiteral("Hello") << QStringLiteral("World");
+ loggingContext->setContextProperty("contextStringListProperty", stringList);
QQmlComponent component(&engine, testUrl);
- QObject *object = component.create();
+ QScopedPointer<QObject> object(component.create(loggingContext.data()));
QVERIFY(object != nullptr);
- delete object;
}
void tst_qqmlconsole::categorized_logging()
diff --git a/tests/auto/qml/qqmlecmascript/data/assignSequenceTypes.8.qml b/tests/auto/qml/qqmlecmascript/data/assignSequenceTypes.8.qml
new file mode 100644
index 0000000000..3f838fe8f2
--- /dev/null
+++ b/tests/auto/qml/qqmlecmascript/data/assignSequenceTypes.8.qml
@@ -0,0 +1,16 @@
+import QtQml 2.0
+QtObject {
+ function tryWritingReadOnlySequence() {
+ try {
+ Qt.application.arguments.push("hello")
+ } catch (e) {
+
+ try {
+ Qt.application.arguments.sort()
+ } catch (e) {
+ return true
+ }
+ }
+ return false
+ }
+}
diff --git a/tests/auto/qml/qqmlecmascript/data/include_pragma_shadow.js b/tests/auto/qml/qqmlecmascript/data/include_pragma_shadow.js
new file mode 100644
index 0000000000..500f04bec7
--- /dev/null
+++ b/tests/auto/qml/qqmlecmascript/data/include_pragma_shadow.js
@@ -0,0 +1,7 @@
+.pragma library
+var Shadowed = 2;
+var global = (function(){return this})()
+
+// set Shadowed on the global object as well. This should be different from
+// the variable above, as the library has it's on context
+global.Shadowed = 1;
diff --git a/tests/auto/qml/qqmlecmascript/data/include_pragma_shadow.qml b/tests/auto/qml/qqmlecmascript/data/include_pragma_shadow.qml
new file mode 100644
index 0000000000..7cac09d342
--- /dev/null
+++ b/tests/auto/qml/qqmlecmascript/data/include_pragma_shadow.qml
@@ -0,0 +1,15 @@
+import QtQuick 2.0
+import "include_pragma_shadow.js" as Shadowed
+import "include_pragma_shadow.js" as Other
+
+Item {
+ property bool result
+
+ Component.onCompleted: {
+ result = false;
+ var global = (function(){return this})()
+ if (Shadowed.Shadowed === 2 && Other.Shadowed === 2 && global.Shadowed === 1)
+ result = true;
+ }
+}
+
diff --git a/tests/auto/qml/qqmlecmascript/data/jsimport/importPragmaLibraryWithPragmaLibraryImports.js b/tests/auto/qml/qqmlecmascript/data/jsimport/importPragmaLibraryWithPragmaLibraryImports.js
index fa6497d99b..66e18ac2a9 100644
--- a/tests/auto/qml/qqmlecmascript/data/jsimport/importPragmaLibraryWithPragmaLibraryImports.js
+++ b/tests/auto/qml/qqmlecmascript/data/jsimport/importPragmaLibraryWithPragmaLibraryImports.js
@@ -7,5 +7,5 @@ function importIncrementedValue() {
i = i + 1;
// because LibraryImport is shared, and used in previous tests,
// the value will be large (already incremented a bunch of times).
- return (i + LibraryImport.importIncrementedValue());
+ return (i + LibraryImport.importIncrementedValue()); // 11 + 5
}
diff --git a/tests/auto/qml/qqmlecmascript/data/jsimport/testImportPragmaLibraryWithPragmaLibraryImports.qml b/tests/auto/qml/qqmlecmascript/data/jsimport/testImportPragmaLibraryWithPragmaLibraryImports.qml
index 01f08dbdc3..8264b7229d 100644
--- a/tests/auto/qml/qqmlecmascript/data/jsimport/testImportPragmaLibraryWithPragmaLibraryImports.qml
+++ b/tests/auto/qml/qqmlecmascript/data/jsimport/testImportPragmaLibraryWithPragmaLibraryImports.qml
@@ -3,5 +3,5 @@ import "importPragmaLibraryWithPragmaLibraryImports.js" as LibraryImport
QtObject {
id: root
- property int testValue: LibraryImport.importIncrementedValue(); // 10 + 1 + (7 due to previous tests) = 18
+ property int testValue: LibraryImport.importIncrementedValue(); // 16
}
diff --git a/tests/auto/qml/qqmlecmascript/data/jsimport/testJsImport.qml b/tests/auto/qml/qqmlecmascript/data/jsimport/testJsImport.qml
index ae43e90210..0e314b20ea 100644
--- a/tests/auto/qml/qqmlecmascript/data/jsimport/testJsImport.qml
+++ b/tests/auto/qml/qqmlecmascript/data/jsimport/testJsImport.qml
@@ -1,7 +1,7 @@
import QtQuick 2.0
-import com.nokia.JsModule 1.0
-import com.nokia.JsModule 1.0 as RenamedModule
+import com.qt.JsModule 1.0
+import com.qt.JsModule 1.0 as RenamedModule
import "testJsModuleImport.js" as TestJsModuleImport
QtObject {
diff --git a/tests/auto/qml/qqmlecmascript/data/jsimport/testJsModuleImport.js b/tests/auto/qml/qqmlecmascript/data/jsimport/testJsModuleImport.js
index 2d21953d2c..7440f610c1 100644
--- a/tests/auto/qml/qqmlecmascript/data/jsimport/testJsModuleImport.js
+++ b/tests/auto/qml/qqmlecmascript/data/jsimport/testJsModuleImport.js
@@ -1,4 +1,4 @@
-.import com.nokia.JsModule 1.0 as JsModule
+.import com.qt.JsModule 1.0 as JsModule
function importedValue() {
return JsModule.ScriptAPI.greeting();
diff --git a/tests/auto/qml/qqmlecmascript/data/jsimport/testJsModuleRemoteImport.js b/tests/auto/qml/qqmlecmascript/data/jsimport/testJsModuleRemoteImport.js
index e6e41bc6b2..6826f09da2 100644
--- a/tests/auto/qml/qqmlecmascript/data/jsimport/testJsModuleRemoteImport.js
+++ b/tests/auto/qml/qqmlecmascript/data/jsimport/testJsModuleRemoteImport.js
@@ -1,4 +1,4 @@
-.import com.nokia.JsRemoteModule 1.0 as JsModule
+.import com.qt.JsRemoteModule 1.0 as JsModule
function importedValue() {
return JsModule.ScriptAPI.greeting();
diff --git a/tests/auto/qml/qqmlecmascript/data/jsimport/testJsRemoteImport.qml b/tests/auto/qml/qqmlecmascript/data/jsimport/testJsRemoteImport.qml
index 4199bb022d..f49b38df23 100644
--- a/tests/auto/qml/qqmlecmascript/data/jsimport/testJsRemoteImport.qml
+++ b/tests/auto/qml/qqmlecmascript/data/jsimport/testJsRemoteImport.qml
@@ -1,7 +1,7 @@
import QtQuick 2.0
-import com.nokia.JsModule 1.0
-import com.nokia.JsModule 1.0 as RenamedModule
+import com.qt.JsModule 1.0
+import com.qt.JsModule 1.0 as RenamedModule
import "testJsModuleRemoteImport.js" as TestJsModuleImport
QtObject {
diff --git a/tests/auto/qml/qqmlecmascript/data/lib/com/nokia/JsModule/ScriptAPI.js b/tests/auto/qml/qqmlecmascript/data/lib/com/qt/JsModule/ScriptAPI.js
index b90033eeb4..b90033eeb4 100644
--- a/tests/auto/qml/qqmlecmascript/data/lib/com/nokia/JsModule/ScriptAPI.js
+++ b/tests/auto/qml/qqmlecmascript/data/lib/com/qt/JsModule/ScriptAPI.js
diff --git a/tests/auto/qml/qqmlecmascript/data/lib/com/nokia/JsModule/qmldir b/tests/auto/qml/qqmlecmascript/data/lib/com/qt/JsModule/qmldir
index c33d1e7a0d..c33d1e7a0d 100644
--- a/tests/auto/qml/qqmlecmascript/data/lib/com/nokia/JsModule/qmldir
+++ b/tests/auto/qml/qqmlecmascript/data/lib/com/qt/JsModule/qmldir
diff --git a/tests/auto/qml/qqmlecmascript/data/remote/com/nokia/JsRemoteModule/ScriptAPI.js b/tests/auto/qml/qqmlecmascript/data/remote/com/qt/JsRemoteModule/ScriptAPI.js
index b90033eeb4..b90033eeb4 100644
--- a/tests/auto/qml/qqmlecmascript/data/remote/com/nokia/JsRemoteModule/ScriptAPI.js
+++ b/tests/auto/qml/qqmlecmascript/data/remote/com/qt/JsRemoteModule/ScriptAPI.js
diff --git a/tests/auto/qml/qqmlecmascript/data/remote/com/nokia/JsRemoteModule/qmldir b/tests/auto/qml/qqmlecmascript/data/remote/com/qt/JsRemoteModule/qmldir
index c33d1e7a0d..c33d1e7a0d 100644
--- a/tests/auto/qml/qqmlecmascript/data/remote/com/nokia/JsRemoteModule/qmldir
+++ b/tests/auto/qml/qqmlecmascript/data/remote/com/qt/JsRemoteModule/qmldir
diff --git a/tests/auto/qml/qqmlecmascript/data/removeBindingsWithNoDependencies.qml b/tests/auto/qml/qqmlecmascript/data/removeBindingsWithNoDependencies.qml
new file mode 100644
index 0000000000..aacf16474d
--- /dev/null
+++ b/tests/auto/qml/qqmlecmascript/data/removeBindingsWithNoDependencies.qml
@@ -0,0 +1,9 @@
+import QtQuick 2.0
+Item {
+ property rect placement: Qt.rect(0, 0, 100, 100)
+
+ function someFunction() { return 42; }
+
+ property rect partialPlacement
+ partialPlacement.x: someFunction()
+}
diff --git a/tests/auto/qml/qqmlecmascript/data/tryStatement.3.qml b/tests/auto/qml/qqmlecmascript/data/tryStatement.3.qml
index 04b39f73d5..7f5a22a459 100644
--- a/tests/auto/qml/qqmlecmascript/data/tryStatement.3.qml
+++ b/tests/auto/qml/qqmlecmascript/data/tryStatement.3.qml
@@ -8,6 +8,6 @@ MyQmlObject {
return 321
}
- value: try { var p = go() } catch(e) { var p = defaultValue } finally { p == 123 }
+ qjsvalue: try { var p = go() } catch(e) { var p = defaultValue } finally { p == 123 }
}
diff --git a/tests/auto/qml/qqmlecmascript/data/tryStatement.4.qml b/tests/auto/qml/qqmlecmascript/data/tryStatement.4.qml
index 231aaf0683..39d4f74e97 100644
--- a/tests/auto/qml/qqmlecmascript/data/tryStatement.4.qml
+++ b/tests/auto/qml/qqmlecmascript/data/tryStatement.4.qml
@@ -7,6 +7,6 @@ MyQmlObject {
return 321
}
- value: try { var p = go() } catch(e) { var p = defaultValue } finally { p == 321 }
+ qjsvalue: try { var p = go() } catch(e) { var p = defaultValue } finally { p == 321 }
}
diff --git a/tests/auto/qml/qqmlecmascript/tst_qqmlecmascript.cpp b/tests/auto/qml/qqmlecmascript/tst_qqmlecmascript.cpp
index f40a9758f7..acdee3a808 100644
--- a/tests/auto/qml/qqmlecmascript/tst_qqmlecmascript.cpp
+++ b/tests/auto/qml/qqmlecmascript/tst_qqmlecmascript.cpp
@@ -49,6 +49,8 @@
#include <private/qv4object_p.h>
#include <private/qqmlcomponentattached_p.h>
#include <private/qv4objectiterator_p.h>
+#include <private/qqmlabstractbinding_p.h>
+#include <private/qqmlvaluetypeproxybinding_p.h>
#ifdef Q_CC_MSVC
#define NO_INLINE __declspec(noinline)
@@ -353,11 +355,11 @@ private slots:
void anotherNaN();
void callPropertyOnUndefined();
void jumpStrictNotEqualUndefined();
+ void removeBindingsWithNoDependencies();
private:
// static void propertyVarWeakRefCallback(v8::Persistent<v8::Value> object, void* parameter);
static void verifyContextLifetime(QQmlContextData *ctxt);
- QQmlEngine engine;
// When calling into JavaScript, the specific type of the return value can differ if that return
// value is a number. This is not only the case for non-integral numbers, or numbers that do not
@@ -384,13 +386,11 @@ void tst_qqmlecmascript::initTestCase()
{
QQmlDataTest::initTestCase();
registerTypes();
-
- QString dataDir(dataDirectory() + QLatin1Char('/') + QLatin1String("lib"));
- engine.addImportPath(dataDir);
}
void tst_qqmlecmascript::assignBasicTypes()
{
+ QQmlEngine engine;
{
QQmlComponent component(&engine, testFileUrl("assignBasicTypes.qml"));
MyTypeObject *object = qobject_cast<MyTypeObject *>(component.create());
@@ -470,6 +470,7 @@ void tst_qqmlecmascript::assignDate()
QFETCH(QUrl, source);
QFETCH(int, timeOffset);
+ QQmlEngine engine;
QQmlComponent component(&engine, source);
QScopedPointer<QObject> obj(component.create());
MyTypeObject *object = qobject_cast<MyTypeObject *>(obj.data());
@@ -550,6 +551,7 @@ void tst_qqmlecmascript::exportDate()
void tst_qqmlecmascript::idShortcutInvalidates()
{
+ QQmlEngine engine;
{
QQmlComponent component(&engine, testFileUrl("idShortcutInvalidates.qml"));
MyQmlObject *object = qobject_cast<MyQmlObject *>(component.create());
@@ -573,6 +575,7 @@ void tst_qqmlecmascript::idShortcutInvalidates()
void tst_qqmlecmascript::boolPropertiesEvaluateAsBool()
{
+ QQmlEngine engine;
{
QQmlComponent component(&engine, testFileUrl("boolPropertiesEvaluateAsBool.1.qml"));
MyQmlObject *object = qobject_cast<MyQmlObject *>(component.create());
@@ -591,6 +594,7 @@ void tst_qqmlecmascript::boolPropertiesEvaluateAsBool()
void tst_qqmlecmascript::signalAssignment()
{
+ QQmlEngine engine;
{
QQmlComponent component(&engine, testFileUrl("signalAssignment.1.qml"));
MyQmlObject *object = qobject_cast<MyQmlObject *>(component.create());
@@ -628,6 +632,7 @@ void tst_qqmlecmascript::signalAssignment()
void tst_qqmlecmascript::signalArguments()
{
+ QQmlEngine engine;
{
QQmlComponent component(&engine, testFileUrl("signalArguments.1.qml"));
MyQmlObject *object = qobject_cast<MyQmlObject *>(component.create());
@@ -653,6 +658,7 @@ void tst_qqmlecmascript::signalArguments()
void tst_qqmlecmascript::methods()
{
+ QQmlEngine engine;
{
QQmlComponent component(&engine, testFileUrl("methods.1.qml"));
MyQmlObject *object = qobject_cast<MyQmlObject *>(component.create());
@@ -706,6 +712,7 @@ void tst_qqmlecmascript::methods()
void tst_qqmlecmascript::bindingLoop()
{
+ QQmlEngine engine;
QQmlComponent component(&engine, testFileUrl("bindingLoop.qml"));
QString warning = component.url().toString() + ":9:9: QML MyQmlObject: Binding loop detected for property \"stringProperty\"";
QTest::ignoreMessage(QtWarningMsg, warning.toLatin1().constData());
@@ -747,6 +754,8 @@ void tst_qqmlecmascript::basicExpressions()
QFETCH(QVariant, result);
QFETCH(bool, nest);
+ QQmlEngine engine;
+
MyQmlObject object1;
MyQmlObject object2;
MyQmlObject object3;
@@ -779,6 +788,7 @@ void tst_qqmlecmascript::arrayExpressions()
QObject obj2;
QObject obj3;
+ QQmlEngine engine;
QQmlContext context(engine.rootContext());
context.setContextProperty("a", &obj1);
context.setContextProperty("b", &obj2);
@@ -798,6 +808,7 @@ void tst_qqmlecmascript::arrayExpressions()
// Tests that modifying a context property will reevaluate expressions
void tst_qqmlecmascript::contextPropertiesTriggerReeval()
{
+ QQmlEngine engine;
QQmlContext context(engine.rootContext());
MyQmlObject object1;
MyQmlObject object2;
@@ -861,6 +872,7 @@ void tst_qqmlecmascript::contextPropertiesTriggerReeval()
void tst_qqmlecmascript::objectPropertiesTriggerReeval()
{
+ QQmlEngine engine;
QQmlContext context(engine.rootContext());
MyQmlObject object1;
MyQmlObject object2;
@@ -927,6 +939,7 @@ void tst_qqmlecmascript::dependenciesWithFunctions()
void tst_qqmlecmascript::deferredProperties()
{
+ QQmlEngine engine;
QQmlComponent component(&engine, testFileUrl("deferredProperties.qml"));
MyDeferredObject *object =
qobject_cast<MyDeferredObject *>(component.create());
@@ -950,6 +963,7 @@ void tst_qqmlecmascript::deferredProperties()
// Check errors on deferred properties are correctly emitted
void tst_qqmlecmascript::deferredPropertiesErrors()
{
+ QQmlEngine engine;
QQmlComponent component(&engine, testFileUrl("deferredPropertiesErrors.qml"));
MyDeferredObject *object =
qobject_cast<MyDeferredObject *>(component.create());
@@ -958,7 +972,7 @@ void tst_qqmlecmascript::deferredPropertiesErrors()
QVERIFY(!object->objectProperty());
QVERIFY(!object->objectProperty2());
- QString warning = component.url().toString() + ":6:21: Unable to assign [undefined] to QObject*";
+ QString warning = component.url().toString() + ":6:5: Unable to assign [undefined] to QObject*";
QTest::ignoreMessage(QtWarningMsg, qPrintable(warning));
qmlExecuteDeferred(object);
@@ -969,6 +983,7 @@ void tst_qqmlecmascript::deferredPropertiesErrors()
void tst_qqmlecmascript::deferredPropertiesInComponents()
{
// Test that it works when the property is set inside and outside component
+ QQmlEngine engine;
QQmlComponent component(&engine, testFileUrl("deferredPropertiesInComponents.qml"));
QObject *object = component.create();
if (!object)
@@ -1002,6 +1017,7 @@ void tst_qqmlecmascript::deferredPropertiesInDestruction()
//Test that the component does not get created at all if creation is deferred until the containing context is destroyed
//Very specific operation ordering is needed for this to occur, currently accessing object from object destructor.
//
+ QQmlEngine engine;
QQmlComponent component(&engine, testFileUrl("deferredPropertiesInDestruction.qml"));
QObject *object = component.create();
if (!object)
@@ -1012,6 +1028,7 @@ void tst_qqmlecmascript::deferredPropertiesInDestruction()
void tst_qqmlecmascript::extensionObjects()
{
+ QQmlEngine engine;
QQmlComponent component(&engine, testFileUrl("extensionObjects.qml"));
MyExtendedObject *object =
qobject_cast<MyExtendedObject *>(component.create());
@@ -1037,6 +1054,7 @@ void tst_qqmlecmascript::extensionObjects()
void tst_qqmlecmascript::overrideExtensionProperties()
{
+ QQmlEngine engine;
QQmlComponent component(&engine, testFileUrl("extensionObjectsPropertyOverride.qml"));
OverrideDefaultPropertyObject *object =
qobject_cast<OverrideDefaultPropertyObject *>(component.create());
@@ -1049,6 +1067,8 @@ void tst_qqmlecmascript::overrideExtensionProperties()
void tst_qqmlecmascript::attachedProperties()
{
+ QQmlEngine engine;
+
{
QQmlComponent component(&engine, testFileUrl("attachedProperty.qml"));
QObject *object = component.create();
@@ -1090,6 +1110,8 @@ void tst_qqmlecmascript::attachedProperties()
void tst_qqmlecmascript::enums()
{
+ QQmlEngine engine;
+
// Existent enums
{
QQmlComponent component(&engine, testFileUrl("enums.1.qml"));
@@ -1119,13 +1141,13 @@ void tst_qqmlecmascript::enums()
{
QUrl file = testFileUrl("enums.2.qml");
QString w1 = QLatin1String("QMetaProperty::read: Unable to handle unregistered datatype 'MyEnum' for property 'MyUnregisteredEnumTypeObject::enumProperty'");
- QString w2 = QLatin1String("QQmlExpression: Expression ") + testFileUrl("enums.2.qml").toString() + QLatin1String(":9:21 depends on non-NOTIFYable properties:");
+ QString w2 = QLatin1String("QQmlExpression: Expression ") + testFileUrl("enums.2.qml").toString() + QLatin1String(":9:5 depends on non-NOTIFYable properties:");
QString w3 = QLatin1String(" MyUnregisteredEnumTypeObject::enumProperty");
- QString w4 = file.toString() + ":7:21: Unable to assign [undefined] to int";
- QString w5 = file.toString() + ":8:21: Unable to assign [undefined] to int";
- QString w6 = file.toString() + ":9:21: Unable to assign [undefined] to int";
- QString w7 = file.toString() + ":13:23: Unable to assign [undefined] to [unknown property type]";
- QString w8 = file.toString() + ":31:23: Unable to assign int to [unknown property type]";
+ QString w4 = file.toString() + ":7:5: Unable to assign [undefined] to int";
+ QString w5 = file.toString() + ":8:5: Unable to assign [undefined] to int";
+ QString w6 = file.toString() + ":9:5: Unable to assign [undefined] to int";
+ QString w7 = file.toString() + ":13:9: Unable to assign [undefined] to [unknown property type]";
+ QString w8 = file.toString() + ":31:9: Unable to assign int to [unknown property type]";
QTest::ignoreMessage(QtWarningMsg, qPrintable(w1));
QTest::ignoreMessage(QtWarningMsg, qPrintable(w2));
QTest::ignoreMessage(QtWarningMsg, qPrintable(w3));
@@ -1196,6 +1218,7 @@ void tst_qqmlecmascript::enums()
void tst_qqmlecmascript::valueTypeFunctions()
{
+ QQmlEngine engine;
QQmlComponent component(&engine, testFileUrl("valueTypeFunctions.qml"));
MyTypeObject *obj = qobject_cast<MyTypeObject*>(component.create());
QVERIFY(obj != nullptr);
@@ -1211,6 +1234,8 @@ binding.
*/
void tst_qqmlecmascript::constantsOverrideBindings()
{
+ QQmlEngine engine;
+
// From ECMAScript
{
QQmlComponent component(&engine, testFileUrl("constantsOverrideBindings.1.qml"));
@@ -1288,6 +1313,7 @@ the original binding to be disabled.
*/
void tst_qqmlecmascript::outerBindingOverridesInnerBinding()
{
+ QQmlEngine engine;
QQmlComponent component(&engine,
testFileUrl("outerBindingOverridesInnerBinding.qml"));
MyQmlObject *object = qobject_cast<MyQmlObject *>(component.create());
@@ -1317,9 +1343,10 @@ Tests for a regression where this used to crash.
*/
void tst_qqmlecmascript::nonExistentAttachedObject()
{
+ QQmlEngine engine;
QQmlComponent component(&engine, testFileUrl("nonExistentAttachedObject.qml"));
- QString warning = component.url().toString() + ":4:21: Unable to assign [undefined] to QString";
+ QString warning = component.url().toString() + ":4:5: Unable to assign [undefined] to QString";
QTest::ignoreMessage(QtWarningMsg, qPrintable(warning));
QObject *object = component.create();
@@ -1330,6 +1357,8 @@ void tst_qqmlecmascript::nonExistentAttachedObject()
void tst_qqmlecmascript::scope()
{
+ QQmlEngine engine;
+
{
QQmlComponent component(&engine, testFileUrl("scope.qml"));
QObject *object = component.create();
@@ -1420,6 +1449,7 @@ void tst_qqmlecmascript::scope()
// importing context
void tst_qqmlecmascript::importScope()
{
+ QQmlEngine engine;
QQmlComponent component(&engine, testFileUrl("importScope.qml"));
QObject *o = component.create();
QVERIFY(o != nullptr);
@@ -1435,6 +1465,7 @@ is essentially a test of QQmlMetaType::copy()
*/
void tst_qqmlecmascript::signalParameterTypes()
{
+ QQmlEngine engine;
QQmlComponent component(&engine, testFileUrl("signalParameterTypes.qml"));
MyQmlObject *object = qobject_cast<MyQmlObject *>(component.create());
QVERIFY(object != nullptr);
@@ -1462,6 +1493,7 @@ Test that two JS objects for the same QObject compare as equal.
*/
void tst_qqmlecmascript::objectsCompareAsEqual()
{
+ QQmlEngine engine;
QQmlComponent component(&engine, testFileUrl("objectsCompareAsEqual.qml"));
QObject *object = component.create();
QVERIFY(object != nullptr);
@@ -1482,6 +1514,7 @@ Tests for a regression where the binding would not reevaluate.
*/
void tst_qqmlecmascript::aliasPropertyAndBinding()
{
+ QQmlEngine engine;
QQmlComponent component(&engine, testFileUrl("aliasPropertyAndBinding.qml"));
QObject *object = component.create();
QVERIFY(object != nullptr);
@@ -1503,6 +1536,7 @@ and that the aliased property is reset correctly if possible.
*/
void tst_qqmlecmascript::aliasPropertyReset()
{
+ QQmlEngine engine;
QObject *object = nullptr;
// test that a manual write (of undefined) to a resettable aliased property succeeds
@@ -1631,6 +1665,7 @@ void tst_qqmlecmascript::componentCreation()
QFETCH(QString, creationError);
QFETCH(QString, createdParent);
+ QQmlEngine engine;
QUrl testUrl(testFileUrl("componentCreation.qml"));
if (!creationError.isEmpty()) {
@@ -1677,6 +1712,7 @@ void tst_qqmlecmascript::dynamicCreation()
QFETCH(QString, method);
QFETCH(QString, createdName);
+ QQmlEngine engine;
QQmlComponent component(&engine, testFileUrl("dynamicCreation.qml"));
MyQmlObject *object = qobject_cast<MyQmlObject*>(component.create());
QVERIFY(object != nullptr);
@@ -1694,6 +1730,8 @@ void tst_qqmlecmascript::dynamicCreation()
*/
void tst_qqmlecmascript::dynamicDestruction()
{
+ QQmlEngine engine;
+
{
QQmlComponent component(&engine, testFileUrl("dynamicDeletion.qml"));
QPointer<MyQmlObject> object = qobject_cast<MyQmlObject*>(component.create());
@@ -1777,6 +1815,7 @@ void tst_qqmlecmascript::dynamicDestruction()
*/
void tst_qqmlecmascript::objectToString()
{
+ QQmlEngine engine;
QQmlComponent component(&engine, testFileUrl("qmlToString.qml"));
MyQmlObject *object = qobject_cast<MyQmlObject*>(component.create());
QVERIFY(object != nullptr);
@@ -1797,6 +1836,7 @@ void tst_qqmlecmascript::objectHasOwnProperty()
QString warning2 = url.toString() + ":64: TypeError: Cannot call method 'hasOwnProperty' of undefined";
QString warning3 = url.toString() + ":69: TypeError: Cannot call method 'hasOwnProperty' of undefined";
+ QQmlEngine engine;
QQmlComponent component(&engine, url);
QObject *object = component.create();
QVERIFY(object != nullptr);
@@ -1843,6 +1883,8 @@ This test is best run under valgrind to ensure no invalid memory access occur.
*/
void tst_qqmlecmascript::selfDeletingBinding()
{
+ QQmlEngine engine;
+
{
QQmlComponent component(&engine, testFileUrl("selfDeletingBinding.qml"));
QObject *object = component.create();
@@ -1869,6 +1911,7 @@ and no synthesiszed properties).
*/
void tst_qqmlecmascript::extendedObjectPropertyLookup()
{
+ QQmlEngine engine;
QQmlComponent component(&engine, testFileUrl("extendedObjectPropertyLookup.qml"));
QObject *object = component.create();
QVERIFY(object != nullptr);
@@ -1880,6 +1923,7 @@ Test that extended object properties can be accessed correctly.
*/
void tst_qqmlecmascript::extendedObjectPropertyLookup2()
{
+ QQmlEngine engine;
QQmlComponent component(&engine, testFileUrl("extendedObjectPropertyLookup2.qml"));
QObject *object = component.create();
QVERIFY(object != nullptr);
@@ -1896,6 +1940,7 @@ Test failure when trying to create and uncreatable extended type object.
*/
void tst_qqmlecmascript::uncreatableExtendedObjectFailureCheck()
{
+ QQmlEngine engine;
QQmlComponent component(&engine, testFileUrl("uncreatableExtendedObjectFailureCheck.qml"));
QObject *object = component.create();
@@ -1907,6 +1952,7 @@ Test that an subclass of an uncreatable extended object contains all the require
*/
void tst_qqmlecmascript::extendedObjectPropertyLookup3()
{
+ QQmlEngine engine;
QQmlComponent component(&engine, testFileUrl("extendedObjectPropertyLookup3.qml"));
QObject *object = component.create();
@@ -1927,6 +1973,7 @@ Test file/lineNumbers for binding/Script errors.
*/
void tst_qqmlecmascript::scriptErrors()
{
+ QQmlEngine engine;
QQmlComponent component(&engine, testFileUrl("scriptErrors.qml"));
QString url = component.url().toString();
@@ -1935,7 +1982,7 @@ void tst_qqmlecmascript::scriptErrors()
QString warning3 = url.left(url.length() - 3) + "js:4: Error: Invalid write to global property \"a\"";
QString warning4 = url + ":13: ReferenceError: a is not defined";
QString warning5 = url + ":11: ReferenceError: a is not defined";
- QString warning6 = url + ":10:21: Unable to assign [undefined] to int";
+ QString warning6 = url + ":10:5: Unable to assign [undefined] to int";
QString warning7 = url + ":15: TypeError: Cannot assign to read-only property \"trueProperty\"";
QString warning8 = url + ":16: Error: Cannot assign to non-existent property \"fakeProperty\"";
@@ -1964,6 +2011,7 @@ Test file/lineNumbers for inline functions.
*/
void tst_qqmlecmascript::functionErrors()
{
+ QQmlEngine engine;
QQmlComponent component(&engine, testFileUrl("functionErrors.qml"));
QString url = component.url().toString();
@@ -1994,6 +2042,7 @@ Test various errors that can occur when assigning a property from script
*/
void tst_qqmlecmascript::propertyAssignmentErrors()
{
+ QQmlEngine engine;
QQmlComponent component(&engine, testFileUrl("propertyAssignmentErrors.qml"));
QString url = component.url().toString();
@@ -2013,6 +2062,7 @@ a signal script.
*/
void tst_qqmlecmascript::signalTriggeredBindings()
{
+ QQmlEngine engine;
QQmlComponent component(&engine, testFileUrl("signalTriggeredBindings.qml"));
MyQmlObject *object = qobject_cast<MyQmlObject*>(component.create());
QVERIFY(object != nullptr);
@@ -2041,6 +2091,7 @@ Test that list properties can be iterated from ECMAScript
*/
void tst_qqmlecmascript::listProperties()
{
+ QQmlEngine engine;
QQmlComponent component(&engine, testFileUrl("listProperties.qml"));
MyQmlObject *object = qobject_cast<MyQmlObject*>(component.create());
QVERIFY(object != nullptr);
@@ -2055,6 +2106,7 @@ void tst_qqmlecmascript::listProperties()
void tst_qqmlecmascript::exceptionClearsOnReeval()
{
+ QQmlEngine engine;
QQmlComponent component(&engine, testFileUrl("exceptionClearsOnReeval.qml"));
QString url = component.url().toString();
@@ -2078,6 +2130,7 @@ void tst_qqmlecmascript::exceptionClearsOnReeval()
void tst_qqmlecmascript::exceptionSlotProducesWarning()
{
+ QQmlEngine engine;
QQmlComponent component(&engine, testFileUrl("exceptionProducesWarning.qml"));
QString url = component.url().toString();
@@ -2091,6 +2144,7 @@ void tst_qqmlecmascript::exceptionSlotProducesWarning()
void tst_qqmlecmascript::exceptionBindingProducesWarning()
{
+ QQmlEngine engine;
QQmlComponent component(&engine, testFileUrl("exceptionProducesWarning2.qml"));
QString url = component.url().toString();
@@ -2105,6 +2159,7 @@ void tst_qqmlecmascript::exceptionBindingProducesWarning()
void tst_qqmlecmascript::compileInvalidBinding()
{
// QTBUG-23387: ensure that invalid bindings don't cause a crash.
+ QQmlEngine engine;
QQmlComponent component(&engine, testFileUrl("v8bindingException.qml"));
QObject *object = component.create();
QVERIFY(object != nullptr);
@@ -2114,6 +2169,8 @@ void tst_qqmlecmascript::compileInvalidBinding()
// Check that transient binding errors are not displayed
void tst_qqmlecmascript::transientErrors()
{
+ QQmlEngine engine;
+
{
QQmlComponent component(&engine, testFileUrl("transientErrors.qml"));
@@ -2145,6 +2202,7 @@ void tst_qqmlecmascript::transientErrors()
// Check that errors during shutdown are minimized
void tst_qqmlecmascript::shutdownErrors()
{
+ QQmlEngine engine;
QQmlComponent component(&engine, testFileUrl("shutdownErrors.qml"));
QObject *object = component.create();
QVERIFY(object != nullptr);
@@ -2158,6 +2216,7 @@ void tst_qqmlecmascript::shutdownErrors()
void tst_qqmlecmascript::compositePropertyType()
{
+ QQmlEngine engine;
QQmlComponent component(&engine, testFileUrl("compositePropertyType.qml"));
QTest::ignoreMessage(QtDebugMsg, "hello world");
@@ -2168,6 +2227,7 @@ void tst_qqmlecmascript::compositePropertyType()
// QTBUG-5759
void tst_qqmlecmascript::jsObject()
{
+ QQmlEngine engine;
QQmlComponent component(&engine, testFileUrl("jsObject.qml"));
QObject *object = component.create();
QVERIFY(object != nullptr);
@@ -2179,6 +2239,8 @@ void tst_qqmlecmascript::jsObject()
void tst_qqmlecmascript::undefinedResetsProperty()
{
+ QQmlEngine engine;
+
{
QQmlComponent component(&engine, testFileUrl("undefinedResetsProperty.qml"));
QObject *object = component.create();
@@ -2214,6 +2276,7 @@ void tst_qqmlecmascript::undefinedResetsProperty()
// Aliases to variant properties should work
void tst_qqmlecmascript::qtbug_22464()
{
+ QQmlEngine engine;
QQmlComponent component(&engine, testFileUrl("qtbug_22464.qml"));
QObject *object = component.create();
QVERIFY(object != nullptr);
@@ -2225,6 +2288,7 @@ void tst_qqmlecmascript::qtbug_22464()
void tst_qqmlecmascript::qtbug_21580()
{
+ QQmlEngine engine;
QQmlComponent component(&engine, testFileUrl("qtbug_21580.qml"));
QObject *object = component.create();
@@ -2238,6 +2302,7 @@ void tst_qqmlecmascript::qtbug_21580()
// Causes a v8 binding, but not all v8 bindings to be destroyed during evaluation
void tst_qqmlecmascript::singleV8BindingDestroyedDuringEvaluation()
{
+ QQmlEngine engine;
QQmlComponent component(&engine, testFileUrl("singleV8BindingDestroyedDuringEvaluation.qml"));
QObject *object = component.create();
@@ -2248,6 +2313,7 @@ void tst_qqmlecmascript::singleV8BindingDestroyedDuringEvaluation()
// QTBUG-6781
void tst_qqmlecmascript::bug1()
{
+ QQmlEngine engine;
QQmlComponent component(&engine, testFileUrl("bug.1.qml"));
QObject *object = component.create();
QVERIFY(object != nullptr);
@@ -2268,6 +2334,7 @@ void tst_qqmlecmascript::bug1()
#ifndef QT_NO_WIDGETS
void tst_qqmlecmascript::bug2()
{
+ QQmlEngine engine;
QQmlComponent component(&engine);
component.setData("import Qt.test 1.0;\nQPlainTextEdit { width: 100 }", QUrl());
@@ -2281,6 +2348,7 @@ void tst_qqmlecmascript::bug2()
// Don't crash in createObject when the component has errors.
void tst_qqmlecmascript::dynamicCreationCrash()
{
+ QQmlEngine engine;
QQmlComponent component(&engine, testFileUrl("dynamicCreation.qml"));
MyQmlObject *object = qobject_cast<MyQmlObject*>(component.create());
QVERIFY(object != nullptr);
@@ -2331,6 +2399,8 @@ void tst_qqmlecmascript::dynamicCreationOwnership()
void tst_qqmlecmascript::regExpBug()
{
+ QQmlEngine engine;
+
//QTBUG-9367
{
QQmlComponent component(&engine, testFileUrl("regExp.qml"));
@@ -2357,7 +2427,7 @@ static inline bool evaluate_error(QV4::ExecutionEngine *v4, const QV4::Value &o,
QLatin1String(source) + QLatin1String(" })");
QV4::Scope scope(v4);
- QV4::Script program(QV4::ScopedContext(scope, scope.engine->rootContext()), QV4::Compiler::EvalCode, functionSource);
+ QV4::Script program(QV4::ScopedContext(scope, scope.engine->rootContext()), QV4::Compiler::ContextType::Eval, functionSource);
program.inheritContext = true;
QV4::ScopedFunctionObject function(scope, program.run());
@@ -2383,7 +2453,7 @@ static inline bool evaluate_value(QV4::ExecutionEngine *v4, const QV4::Value &o,
QLatin1String(source) + QLatin1String(" })");
QV4::Scope scope(v4);
- QV4::Script program(QV4::ScopedContext(scope, scope.engine->rootContext()), QV4::Compiler::EvalCode, functionSource);
+ QV4::Script program(QV4::ScopedContext(scope, scope.engine->rootContext()), QV4::Compiler::ContextType::Eval, functionSource);
program.inheritContext = true;
QV4::ScopedFunctionObject function(scope, program.run());
@@ -2414,7 +2484,7 @@ static inline QV4::ReturnedValue evaluate(QV4::ExecutionEngine *v4, const QV4::V
QV4::Scope scope(v4);
- QV4::Script program(QV4::ScopedContext(scope, scope.engine->rootContext()), QV4::Compiler::EvalCode, functionSource);
+ QV4::Script program(QV4::ScopedContext(scope, scope.engine->rootContext()), QV4::Compiler::ContextType::Eval, functionSource);
program.inheritContext = true;
QV4::ScopedFunctionObject function(scope, program.run());
@@ -3058,6 +3128,7 @@ void tst_qqmlecmascript::resolveClashingProperties()
// QTBUG-13047 (check that you can pass registered object types as args)
void tst_qqmlecmascript::invokableObjectArg()
{
+ QQmlEngine engine;
QQmlComponent component(&engine, testFileUrl("invokableObjectArg.qml"));
QObject *o = component.create();
@@ -3072,6 +3143,7 @@ void tst_qqmlecmascript::invokableObjectArg()
// QTBUG-13047 (check that you can return registered object types from methods)
void tst_qqmlecmascript::invokableObjectRet()
{
+ QQmlEngine engine;
QQmlComponent component(&engine, testFileUrl("invokableObjectRet.qml"));
QObject *o = component.create();
@@ -3082,6 +3154,7 @@ void tst_qqmlecmascript::invokableObjectRet()
void tst_qqmlecmascript::invokableEnumRet()
{
+ QQmlEngine engine;
QQmlComponent component(&engine, testFileUrl("invokableEnumRet.qml"));
QObject *o = component.create();
@@ -3093,6 +3166,7 @@ void tst_qqmlecmascript::invokableEnumRet()
// QTBUG-5675
void tst_qqmlecmascript::listToVariant()
{
+ QQmlEngine engine;
QQmlComponent component(&engine, testFileUrl("listToVariant.qml"));
MyQmlContainer container;
@@ -3113,6 +3187,7 @@ void tst_qqmlecmascript::listToVariant()
// QTBUG-16316
void tst_qqmlecmascript::listAssignment()
{
+ QQmlEngine engine;
QQmlComponent component(&engine, testFileUrl("listAssignment.qml"));
QObject *obj = component.create();
QCOMPARE(obj->property("list1length").toInt(), 2);
@@ -3151,6 +3226,7 @@ void tst_qqmlecmascript::multiEngineObject()
// Test that references to QObjects are cleanup when the object is destroyed
void tst_qqmlecmascript::deletedObject()
{
+ QQmlEngine engine;
QQmlComponent component(&engine, testFileUrl("deletedObject.qml"));
QObject *object = component.create();
@@ -3165,6 +3241,7 @@ void tst_qqmlecmascript::deletedObject()
void tst_qqmlecmascript::attachedPropertyScope()
{
+ QQmlEngine engine;
QQmlComponent component(&engine, testFileUrl("attachedPropertyScope.qml"));
QObject *object = component.create();
@@ -3185,6 +3262,8 @@ void tst_qqmlecmascript::attachedPropertyScope()
void tst_qqmlecmascript::scriptConnect()
{
+ QQmlEngine engine;
+
{
QQmlComponent component(&engine, testFileUrl("scriptConnect.1.qml"));
@@ -3266,6 +3345,8 @@ void tst_qqmlecmascript::scriptConnect()
void tst_qqmlecmascript::scriptDisconnect()
{
+ QQmlEngine engine;
+
{
QQmlComponent component(&engine, testFileUrl("scriptDisconnect.1.qml"));
@@ -3356,6 +3437,7 @@ public slots:
void tst_qqmlecmascript::ownership()
{
+ QQmlEngine engine;
OwnershipObject own;
QQmlContext *context = new QQmlContext(engine.rootContext());
context->setContextObject(&own);
@@ -3453,6 +3535,7 @@ void tst_qqmlecmascript::cppOwnershipReturnValue()
// QTBUG-15697
void tst_qqmlecmascript::ownershipCustomReturnValue()
{
+ QQmlEngine engine;
CppOwnershipReturnValue source;
{
@@ -3496,6 +3579,7 @@ public slots:
void tst_qqmlecmascript::ownershipRootObject()
{
+ QQmlEngine engine;
OwnershipChangingObject own;
QQmlContext *context = new QQmlContext(engine.rootContext());
context->setContextObject(&own);
@@ -3517,6 +3601,7 @@ void tst_qqmlecmascript::ownershipRootObject()
void tst_qqmlecmascript::ownershipConsistency()
{
+ QQmlEngine engine;
OwnershipChangingObject own;
QQmlContext *context = new QQmlContext(engine.rootContext());
context->setContextObject(&own);
@@ -3547,6 +3632,7 @@ void tst_qqmlecmascript::ownershipConsistency()
void tst_qqmlecmascript::ownershipQmlIncubated()
{
+ QQmlEngine engine;
QQmlComponent component(&engine, testFileUrl("ownershipQmlIncubated.qml"));
QObject *object = component.create();
QVERIFY(object);
@@ -3586,6 +3672,7 @@ private:
// Tests that returning a QList<QObject*> from a method works
void tst_qqmlecmascript::qlistqobjectMethods()
{
+ QQmlEngine engine;
QListQObjectMethodsObject obj;
QQmlContext *context = new QQmlContext(engine.rootContext());
context->setContextObject(&obj);
@@ -3604,6 +3691,7 @@ void tst_qqmlecmascript::qlistqobjectMethods()
// QTBUG-9205
void tst_qqmlecmascript::strictlyEquals()
{
+ QQmlEngine engine;
QQmlComponent component(&engine, testFileUrl("strictlyEquals.qml"));
QObject *object = component.create();
@@ -3623,6 +3711,7 @@ void tst_qqmlecmascript::strictlyEquals()
void tst_qqmlecmascript::compiled()
{
+ QQmlEngine engine;
QQmlComponent component(&engine, testFileUrl("compiled.qml"));
QObject *object = component.create();
@@ -3663,6 +3752,7 @@ void tst_qqmlecmascript::compiled()
// Test that numbers assigned in bindings as strings work consistently
void tst_qqmlecmascript::numberAssignment()
{
+ QQmlEngine engine;
QQmlComponent component(&engine, testFileUrl("numberAssignment.qml"));
QObject *object = component.create();
@@ -3689,6 +3779,7 @@ void tst_qqmlecmascript::numberAssignment()
void tst_qqmlecmascript::propertySplicing()
{
+ QQmlEngine engine;
QQmlComponent component(&engine, testFileUrl("propertySplicing.qml"));
QObject *object = component.create();
@@ -3702,6 +3793,7 @@ void tst_qqmlecmascript::propertySplicing()
// QTBUG-16683
void tst_qqmlecmascript::signalWithUnknownTypes()
{
+ QQmlEngine engine;
QQmlComponent component(&engine, testFileUrl("signalWithUnknownTypes.qml"));
MyQmlObject *object = qobject_cast<MyQmlObject *>(component.create());
@@ -3755,6 +3847,7 @@ void tst_qqmlecmascript::signalWithJSValueInVariant()
QFETCH(QString, expression);
QFETCH(QString, compare);
+ QQmlEngine engine;
QQmlComponent component(&engine, testFileUrl("signalWithJSValueInVariant.qml"));
QScopedPointer<MyQmlObject> object(qobject_cast<MyQmlObject *>(component.create()));
QVERIFY(object != nullptr);
@@ -3779,6 +3872,7 @@ void tst_qqmlecmascript::signalWithJSValueInVariant_twoEngines()
QFETCH(QString, expression);
QFETCH(QString, compare);
+ QQmlEngine engine;
QQmlComponent component(&engine, testFileUrl("signalWithJSValueInVariant.qml"));
QScopedPointer<MyQmlObject> object(qobject_cast<MyQmlObject *>(component.create()));
QVERIFY(object != nullptr);
@@ -3809,6 +3903,7 @@ void tst_qqmlecmascript::signalWithQJSValue()
QFETCH(QString, expression);
QFETCH(QString, compare);
+ QQmlEngine engine;
QQmlComponent component(&engine, testFileUrl("signalWithQJSValue.qml"));
QScopedPointer<MyQmlObject> object(qobject_cast<MyQmlObject *>(component.create()));
QVERIFY(object != nullptr);
@@ -4029,6 +4124,7 @@ void tst_qqmlecmascript::singletonTypeCaching()
void tst_qqmlecmascript::singletonTypeImportOrder()
{
+ QQmlEngine engine;
QQmlComponent component(&engine, testFileUrl("singletontype/singletonTypeImportOrder.qml"));
QObject *object = component.create();
QVERIFY(object);
@@ -4038,6 +4134,7 @@ void tst_qqmlecmascript::singletonTypeImportOrder()
void tst_qqmlecmascript::singletonTypeResolution()
{
+ QQmlEngine engine;
QQmlComponent component(&engine, testFileUrl("singletontype/singletonTypeResolution.qml"));
QObject *object = component.create();
QVERIFY(object);
@@ -4181,7 +4278,7 @@ void tst_qqmlecmascript::importScripts_data()
<< QString()
<< QStringList()
<< (QStringList() << QLatin1String("testValue"))
- << (QVariantList() << QVariant(18));
+ << (QVariantList() << QVariant(16));
QTest::newRow("import singleton type into js import")
<< testFileUrl("jsimport/testImportSingletonType.qml")
@@ -4315,6 +4412,10 @@ void tst_qqmlecmascript::importScripts()
ThreadedTestHTTPServer server(dataDirectory() + "/remote");
+ QQmlEngine engine;
+ QString dataDir(dataDirectory() + QLatin1Char('/') + QLatin1String("lib"));
+ engine.addImportPath(dataDir);
+
QStringList importPathList = engine.importPathList();
QString remotePath(server.urlString("/"));
@@ -4358,6 +4459,7 @@ void tst_qqmlecmascript::importScripts()
void tst_qqmlecmascript::importCreationContext()
{
+ QQmlEngine engine;
QQmlComponent component(&engine, testFileUrl("jsimport/creationContext.qml"));
QScopedPointer<QObject> object(component.create());
QVERIFY(!object.isNull());
@@ -4378,6 +4480,7 @@ void tst_qqmlecmascript::scarceResources_other()
QPixmap origPixmap(100, 100);
origPixmap.fill(Qt::blue);
QString srp_name, expectedWarning;
+ QQmlEngine engine;
QV4::ExecutionEngine *v4 = engine.handle();
ScarceResourceObject *eo = nullptr;
QObject *srsc = nullptr;
@@ -4749,6 +4852,7 @@ void tst_qqmlecmascript::scarceResources()
QFETCH(QVariantList, expectedValues);
QFETCH(QStringList, expectedErrors);
+ QQmlEngine engine;
QV4::ExecutionEngine *v4 = engine.handle();
ScarceResourceObject *eo = nullptr;
QObject *object = nullptr;
@@ -4781,6 +4885,7 @@ void tst_qqmlecmascript::scarceResources()
void tst_qqmlecmascript::propertyChangeSlots()
{
// ensure that allowable property names are allowed and onPropertyNameChanged slots are generated correctly.
+ QQmlEngine engine;
QQmlComponent component(&engine, testFileUrl("changeslots/propertyChangeSlots.qml"));
QObject *object = component.create();
QVERIFY(object != nullptr);
@@ -4847,6 +4952,7 @@ void tst_qqmlecmascript::propertyVar()
{
QFETCH(QUrl, qmlFile);
+ QQmlEngine engine;
QQmlComponent component(&engine, qmlFile);
QObject *object = component.create();
QVERIFY(object != nullptr);
@@ -4886,6 +4992,7 @@ void tst_qqmlecmascript::propertyQJSValue()
{
QFETCH(QUrl, qmlFile);
+ QQmlEngine engine;
QQmlComponent component(&engine, qmlFile);
QObject *object = component.create();
QVERIFY(object != nullptr);
@@ -4903,6 +5010,7 @@ void tst_qqmlecmascript::propertyVarCpp()
// ensure that writing to and reading from a var property from cpp works as required.
// Literal values stored in var properties can be read and written as QVariants
// of a specific type, whereas object values are read as QVariantMaps.
+ QQmlEngine engine;
QQmlComponent component(&engine, testFileUrl("propertyVarCpp.qml"));
object = component.create();
QVERIFY(object != nullptr);
@@ -4924,6 +5032,8 @@ void tst_qqmlecmascript::propertyVarCpp()
void tst_qqmlecmascript::propertyVarOwnership()
{
+ QQmlEngine engine;
+
// Referenced JS objects are not collected
{
QQmlComponent component(&engine, testFileUrl("propertyVarOwnership.qml"));
@@ -5005,6 +5115,7 @@ void tst_qqmlecmascript::propertyVarImplicitOwnership()
// The childObject has a reference to a different QObject. We want to ensure
// that the different item will not be cleaned up until required. IE, the childObject
// has implicit ownership of the constructed QObject.
+ QQmlEngine engine;
QQmlComponent component(&engine, testFileUrl("propertyVarImplicitOwnership.qml"));
QObject *object = component.create();
QVERIFY(object != nullptr);
@@ -5032,6 +5143,7 @@ void tst_qqmlecmascript::propertyVarImplicitOwnership()
void tst_qqmlecmascript::propertyVarReparent()
{
// ensure that nothing breaks if we re-parent objects
+ QQmlEngine engine;
QQmlComponent component(&engine, testFileUrl("propertyVar.reparent.qml"));
QObject *object = component.create();
QVERIFY(object != nullptr);
@@ -5074,6 +5186,7 @@ void tst_qqmlecmascript::propertyVarReparentNullContext()
// sometimes reparenting can cause problems
// (eg, if the ctxt is collected, varproperties are no longer available)
// this test ensures that no crash occurs in that situation.
+ QQmlEngine engine;
QQmlComponent component(&engine, testFileUrl("propertyVar.reparent.qml"));
QObject *object = component.create();
QVERIFY(object != nullptr);
@@ -5110,6 +5223,7 @@ void tst_qqmlecmascript::propertyVarReparentNullContext()
void tst_qqmlecmascript::propertyVarCircular()
{
// enforce behaviour regarding circular references - ensure qdvmemo deletion.
+ QQmlEngine engine;
QQmlComponent component(&engine, testFileUrl("propertyVar.circular.qml"));
QObject *object = component.create();
QVERIFY(object != nullptr);
@@ -5142,6 +5256,7 @@ void tst_qqmlecmascript::propertyVarCircular2()
{
// track deletion of JS-owned parent item with Cpp-owned child
// where the child has a var property referencing its parent.
+ QQmlEngine engine;
QQmlComponent component(&engine, testFileUrl("propertyVar.circular.2.qml"));
QObject *object = component.create();
QVERIFY(object != nullptr);
@@ -5170,6 +5285,7 @@ void tst_qqmlecmascript::propertyVarInheritance()
{
// enforce behaviour regarding element inheritance - ensure handle disposal.
// The particular component under test here has a chain of references.
+ QQmlEngine engine;
QQmlComponent component(&engine, testFileUrl("propertyVar.inherit.qml"));
QObject *object = component.create();
QVERIFY(object != nullptr);
@@ -5215,6 +5331,7 @@ void tst_qqmlecmascript::propertyVarInheritance2()
{
// The particular component under test here does NOT have a chain of references; the
// only link between rootObject and childObject is that rootObject is the parent of childObject.
+ QQmlEngine engine;
QQmlComponent component(&engine, testFileUrl("propertyVar.circular.2.qml"));
QObject *object = component.create();
QVERIFY(object != nullptr);
@@ -5248,6 +5365,7 @@ void tst_qqmlecmascript::propertyVarInheritance2()
// Ensure that QObject type conversion works on binding assignment
void tst_qqmlecmascript::elementAssign()
{
+ QQmlEngine engine;
QQmlComponent component(&engine, testFileUrl("elementAssign.qml"));
QObject *object = component.create();
@@ -5261,6 +5379,7 @@ void tst_qqmlecmascript::elementAssign()
// QTBUG-12457
void tst_qqmlecmascript::objectPassThroughSignals()
{
+ QQmlEngine engine;
QQmlComponent component(&engine, testFileUrl("objectsPassThroughSignals.qml"));
QObject *object = component.create();
@@ -5274,6 +5393,7 @@ void tst_qqmlecmascript::objectPassThroughSignals()
// QTBUG-21626
void tst_qqmlecmascript::objectConversion()
{
+ QQmlEngine engine;
QQmlComponent component(&engine, testFileUrl("objectConversion.qml"));
QObject *object = component.create();
@@ -5289,6 +5409,7 @@ void tst_qqmlecmascript::objectConversion()
// QTBUG-20242
void tst_qqmlecmascript::booleanConversion()
{
+ QQmlEngine engine;
QQmlComponent component(&engine, testFileUrl("booleanConversion.qml"));
QObject *object = component.create();
@@ -5401,6 +5522,7 @@ void tst_qqmlecmascript::handleReferenceManagement()
void tst_qqmlecmascript::stringArg()
{
+ QQmlEngine engine;
QQmlComponent component(&engine, testFileUrl("stringArg.qml"));
QObject *object = component.create();
QVERIFY(object != nullptr);
@@ -5417,6 +5539,7 @@ void tst_qqmlecmascript::stringArg()
void tst_qqmlecmascript::readonlyDeclaration()
{
+ QQmlEngine engine;
QQmlComponent component(&engine, testFileUrl("readonlyDeclaration.qml"));
QObject *object = component.create();
@@ -5434,6 +5557,8 @@ Q_DECLARE_METATYPE(QList<QString>)
Q_DECLARE_METATYPE(QList<QUrl>)
void tst_qqmlecmascript::sequenceConversionRead()
{
+ QQmlEngine engine;
+
{
QUrl qmlFile = testFileUrl("sequenceConversion.read.qml");
QQmlComponent component(&engine, qmlFile);
@@ -5514,6 +5639,7 @@ void tst_qqmlecmascript::sequenceConversionRead()
void tst_qqmlecmascript::sequenceConversionWrite()
{
+ QQmlEngine engine;
{
QUrl qmlFile = testFileUrl("sequenceConversion.write.qml");
QQmlComponent component(&engine, qmlFile);
@@ -5562,6 +5688,7 @@ void tst_qqmlecmascript::sequenceConversionArray()
{
// ensure that in JS the returned sequences act just like normal JS Arrays.
QUrl qmlFile = testFileUrl("sequenceConversion.array.qml");
+ QQmlEngine engine;
QQmlComponent component(&engine, qmlFile);
QScopedPointer<QObject> object(component.create());
QVERIFY(object != nullptr);
@@ -5583,6 +5710,7 @@ void tst_qqmlecmascript::sequenceConversionIndexes()
// ensure that we gracefully fail if unsupported index values are specified.
// Qt container classes only support non-negative, signed integer index values.
QUrl qmlFile = testFileUrl("sequenceConversion.indexes.qml");
+ QQmlEngine engine;
QQmlComponent component(&engine, qmlFile);
QObject *object = component.create();
QVERIFY(object != nullptr);
@@ -5604,6 +5732,7 @@ void tst_qqmlecmascript::sequenceConversionThreads()
// ensure that sequence conversion operations work correctly in a worker thread
// and that serialisation between the main and worker thread succeeds.
QUrl qmlFile = testFileUrl("sequenceConversion.threads.qml");
+ QQmlEngine engine;
QQmlComponent component(&engine, qmlFile);
QObject *object = component.create();
QVERIFY(object != nullptr);
@@ -5641,6 +5770,7 @@ void tst_qqmlecmascript::sequenceConversionThreads()
void tst_qqmlecmascript::sequenceConversionBindings()
{
+ QQmlEngine engine;
{
QUrl qmlFile = testFileUrl("sequenceConversion.bindings.qml");
QQmlComponent component(&engine, qmlFile);
@@ -5656,7 +5786,7 @@ void tst_qqmlecmascript::sequenceConversionBindings()
{
QUrl qmlFile = testFileUrl("sequenceConversion.bindings.error.qml");
- QString warning = QString(QLatin1String("%1:17:27: Unable to assign QList<int> to QList<bool>")).arg(qmlFile.toString());
+ QString warning = QString(QLatin1String("%1:17:9: Unable to assign QList<int> to QList<bool>")).arg(qmlFile.toString());
QTest::ignoreMessage(QtWarningMsg, warning.toLatin1().constData());
QQmlComponent component(&engine, qmlFile);
QObject *object = component.create();
@@ -5668,6 +5798,7 @@ void tst_qqmlecmascript::sequenceConversionBindings()
void tst_qqmlecmascript::sequenceConversionCopy()
{
QUrl qmlFile = testFileUrl("sequenceConversion.copy.qml");
+ QQmlEngine engine;
QQmlComponent component(&engine, qmlFile);
QObject *object = component.create();
QVERIFY(object != nullptr);
@@ -5686,6 +5817,8 @@ void tst_qqmlecmascript::sequenceConversionCopy()
void tst_qqmlecmascript::assignSequenceTypes()
{
+ QQmlEngine engine;
+
// test binding array to sequence type property
{
QQmlComponent component(&engine, testFileUrl("assignSequenceTypes.1.qml"));
@@ -5784,12 +5917,23 @@ void tst_qqmlecmascript::assignSequenceTypes()
QCOMPARE(msco5->urlListProperty(), (QList<QUrl>() << QUrl(testFileUrl("example.html")) << QUrl(testFileUrl("example2.html"))));
delete object;
}
+
+ {
+ QQmlComponent component(&engine, testFileUrl("assignSequenceTypes.8.qml"));
+ QScopedPointer<QObject> object(component.create());
+ QVERIFY(object != nullptr);
+ QVariant result;
+ QMetaObject::invokeMethod(object.data(), "tryWritingReadOnlySequence", Q_RETURN_ARG(QVariant, result));
+ QVERIFY(result.type() == QVariant::Bool);
+ QVERIFY(result.toBool());
+ }
}
// Test that assigning a null object works
// Regressed with: df1788b4dbbb2826ae63f26bdf166342595343f4
void tst_qqmlecmascript::nullObjectBinding()
{
+ QQmlEngine engine;
QQmlComponent component(&engine, testFileUrl("nullObjectBinding.qml"));
QObject *object = component.create();
@@ -5802,6 +5946,7 @@ void tst_qqmlecmascript::nullObjectBinding()
void tst_qqmlecmascript::nullObjectInitializer()
{
+ QQmlEngine engine;
{
QQmlComponent component(&engine, testFileUrl("nullObjectInitializer.qml"));
QScopedPointer<QObject> obj(component.create());
@@ -5832,7 +5977,7 @@ void tst_qqmlecmascript::nullObjectInitializer()
{
const int propertyIndex = obj->metaObject()->indexOfProperty("testProperty");
QVERIFY(propertyIndex > 0);
- QVERIFY(ddata->hasBindingBit(propertyIndex));
+ QVERIFY(!ddata->hasBindingBit(propertyIndex));
}
QVERIFY(obj->property("success").toBool());
@@ -5869,6 +6014,7 @@ void tst_qqmlecmascript::deletedEngine()
// Test the crashing part of QTBUG-9705
void tst_qqmlecmascript::libraryScriptAssert()
{
+ QQmlEngine engine;
QQmlComponent component(&engine, testFileUrl("libraryScriptAssert.qml"));
QObject *object = component.create();
@@ -5879,6 +6025,7 @@ void tst_qqmlecmascript::libraryScriptAssert()
void tst_qqmlecmascript::variantsAssignedUndefined()
{
+ QQmlEngine engine;
QQmlComponent component(&engine, testFileUrl("variantsAssignedUndefined.qml"));
QObject *object = component.create();
@@ -5898,6 +6045,7 @@ void tst_qqmlecmascript::variantsAssignedUndefined()
void tst_qqmlecmascript::variants()
{
+ QQmlEngine engine;
QQmlComponent component(&engine, testFileUrl("variants.qml"));
QObject *object = component.create();
@@ -5921,6 +6069,7 @@ void tst_qqmlecmascript::variants()
void tst_qqmlecmascript::qtbug_9792()
{
+ QQmlEngine engine;
QQmlComponent component(&engine, testFileUrl("qtbug_9792.qml"));
QQmlContext *context = new QQmlContext(engine.rootContext());
@@ -5945,6 +6094,7 @@ void tst_qqmlecmascript::qtbug_9792()
// Verifies that QPointer<>s used in the vmemetaobject are cleaned correctly
void tst_qqmlecmascript::qtcreatorbug_1289()
{
+ QQmlEngine engine;
QQmlComponent component(&engine, testFileUrl("qtcreatorbug_1289.qml"));
QObject *o = component.create();
@@ -5966,6 +6116,7 @@ void tst_qqmlecmascript::qtcreatorbug_1289()
// Test that we shut down without stupid warnings
void tst_qqmlecmascript::noSpuriousWarningsAtShutdown()
{
+ QQmlEngine engine;
{
QQmlComponent component(&engine, testFileUrl("noSpuriousWarningsAtShutdown.qml"));
@@ -5994,6 +6145,7 @@ void tst_qqmlecmascript::noSpuriousWarningsAtShutdown()
void tst_qqmlecmascript::canAssignNullToQObject()
{
+ QQmlEngine engine;
{
QQmlComponent component(&engine, testFileUrl("canAssignNullToQObject.1.qml"));
@@ -6023,13 +6175,14 @@ void tst_qqmlecmascript::canAssignNullToQObject()
void tst_qqmlecmascript::functionAssignment_fromBinding()
{
+ QQmlEngine engine;
QQmlComponent component(&engine, testFileUrl("functionAssignment.1.qml"));
QString url = component.url().toString();
- QString w1 = url + ":4:25: Unable to assign a function to a property of any type other than var.";
- QString w2 = url + ":5:25: Invalid use of Qt.binding() in a binding declaration.";
- QString w3 = url + ":6:21: Invalid use of Qt.binding() in a binding declaration.";
- QString w4 = url + ":7:15: Invalid use of Qt.binding() in a binding declaration.";
+ QString w1 = url + ":4:5: Unable to assign a function to a property of any type other than var.";
+ QString w2 = url + ":5:5: Invalid use of Qt.binding() in a binding declaration.";
+ QString w3 = url + ":6:5: Invalid use of Qt.binding() in a binding declaration.";
+ QString w4 = url + ":7:5: Invalid use of Qt.binding() in a binding declaration.";
QTest::ignoreMessage(QtWarningMsg, w1.toLatin1().constData());
QTest::ignoreMessage(QtWarningMsg, w2.toLatin1().constData());
QTest::ignoreMessage(QtWarningMsg, w3.toLatin1().constData());
@@ -6047,6 +6200,7 @@ void tst_qqmlecmascript::functionAssignment_fromJS()
{
QFETCH(QString, triggerProperty);
+ QQmlEngine engine;
QQmlComponent component(&engine, testFileUrl("functionAssignment.2.qml"));
QVERIFY2(component.errorString().isEmpty(), qPrintable(component.errorString()));
@@ -6079,6 +6233,7 @@ void tst_qqmlecmascript::functionAssignment_fromJS_data()
void tst_qqmlecmascript::functionAssignmentfromJS_invalid()
{
+ QQmlEngine engine;
QQmlComponent component(&engine, testFileUrl("functionAssignment.2.qml"));
QVERIFY2(component.errorString().isEmpty(), qPrintable(component.errorString()));
@@ -6103,6 +6258,7 @@ void tst_qqmlecmascript::functionAssignmentfromJS_invalid()
void tst_qqmlecmascript::functionAssignment_afterBinding()
{
+ QQmlEngine engine;
QQmlComponent component(&engine, testFileUrl("functionAssignment.3.qml"));
QString url = component.url().toString();
@@ -6119,6 +6275,7 @@ void tst_qqmlecmascript::functionAssignment_afterBinding()
void tst_qqmlecmascript::eval()
{
+ QQmlEngine engine;
QQmlComponent component(&engine, testFileUrl("eval.qml"));
QObject *o = component.create();
@@ -6135,6 +6292,7 @@ void tst_qqmlecmascript::eval()
void tst_qqmlecmascript::function()
{
+ QQmlEngine engine;
QQmlComponent component(&engine, testFileUrl("function.qml"));
QObject *o = component.create();
@@ -6150,6 +6308,7 @@ void tst_qqmlecmascript::function()
// Test the "Qt.include" method
void tst_qqmlecmascript::include()
{
+ QQmlEngine engine;
// Non-library relative include
{
QQmlComponent component(&engine, testFileUrl("include.qml"));
@@ -6208,6 +6367,14 @@ void tst_qqmlecmascript::include()
delete o;
}
+ // Including file with ".pragma library", shadowing a global var
+ {
+ QQmlComponent component(&engine, testFileUrl("include_pragma_shadow.qml"));
+ QScopedPointer<QObject> o(component.create());
+ QVERIFY(!o.isNull());
+ QCOMPARE(o->property("result").toBool(), true);
+ }
+
// Remote - error
{
TestHTTPServer server;
@@ -6254,6 +6421,7 @@ void tst_qqmlecmascript::includeRemoteSuccess()
QVERIFY2(server.listen(), qPrintable(server.errorString()));
server.serveDirectory(dataDirectory());
+ QQmlEngine engine;
QQmlComponent component(&engine, testFileUrl("include_remote.qml"));
QObject *o = component.beginCreate(engine.rootContext());
QVERIFY(o != nullptr);
@@ -6280,6 +6448,7 @@ void tst_qqmlecmascript::includeRemoteSuccess()
void tst_qqmlecmascript::signalHandlers()
{
+ QQmlEngine engine;
QQmlComponent component(&engine, testFileUrl("signalHandlers.qml"));
QScopedPointer<QObject> o(component.create());
QVERIFY(o != nullptr);
@@ -6340,6 +6509,7 @@ void tst_qqmlecmascript::qtbug_37351()
void tst_qqmlecmascript::qtbug_10696()
{
+ QQmlEngine engine;
QQmlComponent component(&engine, testFileUrl("qtbug_10696.qml"));
QObject *o = component.create();
QVERIFY(o != nullptr);
@@ -6348,6 +6518,7 @@ void tst_qqmlecmascript::qtbug_10696()
void tst_qqmlecmascript::qtbug_11606()
{
+ QQmlEngine engine;
QQmlComponent component(&engine, testFileUrl("qtbug_11606.qml"));
QObject *o = component.create();
QVERIFY(o != nullptr);
@@ -6357,6 +6528,7 @@ void tst_qqmlecmascript::qtbug_11606()
void tst_qqmlecmascript::qtbug_11600()
{
+ QQmlEngine engine;
QQmlComponent component(&engine, testFileUrl("qtbug_11600.qml"));
QObject *o = component.create();
QVERIFY(o != nullptr);
@@ -6366,6 +6538,7 @@ void tst_qqmlecmascript::qtbug_11600()
void tst_qqmlecmascript::qtbug_21864()
{
+ QQmlEngine engine;
QQmlComponent component(&engine, testFileUrl("qtbug_21864.qml"));
QObject *o = component.create();
QVERIFY(o != nullptr);
@@ -6375,6 +6548,7 @@ void tst_qqmlecmascript::qtbug_21864()
void tst_qqmlecmascript::rewriteMultiLineStrings()
{
+ QQmlEngine engine;
{
// QTBUG-23387
QQmlComponent component(&engine, testFileUrl("rewriteMultiLineStrings.qml"));
@@ -6395,6 +6569,7 @@ void tst_qqmlecmascript::rewriteMultiLineStrings()
void tst_qqmlecmascript::qobjectConnectionListExceptionHandling()
{
// QTBUG-23375
+ QQmlEngine engine;
QQmlComponent component(&engine, testFileUrl("qobjectConnectionListExceptionHandling.qml"));
QString warning = component.url().toString() + QLatin1String(":13: TypeError: Cannot read property 'undefined' of undefined");
QTest::ignoreMessage(QtWarningMsg, qPrintable(warning));
@@ -6409,6 +6584,7 @@ void tst_qqmlecmascript::qobjectConnectionListExceptionHandling()
// Reading and writing non-scriptable properties should fail
void tst_qqmlecmascript::nonscriptable()
{
+ QQmlEngine engine;
QQmlComponent component(&engine, testFileUrl("nonscriptable.qml"));
QObject *o = component.create();
QVERIFY(o != nullptr);
@@ -6420,6 +6596,7 @@ void tst_qqmlecmascript::nonscriptable()
// deleteLater() should not be callable from QML
void tst_qqmlecmascript::deleteLater()
{
+ QQmlEngine engine;
QQmlComponent component(&engine, testFileUrl("deleteLater.qml"));
QObject *o = component.create();
QVERIFY(o != nullptr);
@@ -6430,6 +6607,7 @@ void tst_qqmlecmascript::deleteLater()
// objectNameChanged() should be usable from QML
void tst_qqmlecmascript::objectNameChangedSignal()
{
+ QQmlEngine engine;
QQmlComponent component(&engine, testFileUrl("objectNameChangedSignal.qml"));
QObject *o = component.create();
QVERIFY(o != nullptr);
@@ -6442,6 +6620,7 @@ void tst_qqmlecmascript::objectNameChangedSignal()
// destroyed() should not be usable from QML
void tst_qqmlecmascript::destroyedSignal()
{
+ QQmlEngine engine;
QQmlComponent component(&engine, testFileUrl("destroyedSignal.qml"));
QVERIFY(component.isError());
@@ -6451,6 +6630,7 @@ void tst_qqmlecmascript::destroyedSignal()
void tst_qqmlecmascript::in()
{
+ QQmlEngine engine;
QQmlComponent component(&engine, testFileUrl("in.qml"));
QObject *o = component.create();
QVERIFY(o != nullptr);
@@ -6461,6 +6641,7 @@ void tst_qqmlecmascript::in()
void tst_qqmlecmascript::typeOf()
{
+ QQmlEngine engine;
QQmlComponent component(&engine, testFileUrl("typeOf.qml"));
QObject *o = component.create();
@@ -6481,6 +6662,7 @@ void tst_qqmlecmascript::typeOf()
void tst_qqmlecmascript::qtbug_24448()
{
+ QQmlEngine engine;
QQmlComponent component(&engine, testFileUrl("qtbug_24448.qml"));
QScopedPointer<QObject> o(component.create());
QVERIFY(o != nullptr);
@@ -6489,6 +6671,7 @@ void tst_qqmlecmascript::qtbug_24448()
void tst_qqmlecmascript::sharedAttachedObject()
{
+ QQmlEngine engine;
QQmlComponent component(&engine, testFileUrl("sharedAttachedObject.qml"));
QObject *o = component.create();
QVERIFY(o != nullptr);
@@ -6500,6 +6683,7 @@ void tst_qqmlecmascript::sharedAttachedObject()
// QTBUG-13999
void tst_qqmlecmascript::objectName()
{
+ QQmlEngine engine;
QQmlComponent component(&engine, testFileUrl("objectName.qml"));
QObject *o = component.create();
QVERIFY(o != nullptr);
@@ -6517,6 +6701,7 @@ void tst_qqmlecmascript::objectName()
void tst_qqmlecmascript::writeRemovesBinding()
{
+ QQmlEngine engine;
QQmlComponent component(&engine, testFileUrl("writeRemovesBinding.qml"));
QObject *o = component.create();
QVERIFY(o != nullptr);
@@ -6529,6 +6714,7 @@ void tst_qqmlecmascript::writeRemovesBinding()
// Test bindings assigned to alias properties actually assign to the alias' target
void tst_qqmlecmascript::aliasBindingsAssignCorrectly()
{
+ QQmlEngine engine;
QQmlComponent component(&engine, testFileUrl("aliasBindingsAssignCorrectly.qml"));
QObject *o = component.create();
QVERIFY(o != nullptr);
@@ -6541,6 +6727,7 @@ void tst_qqmlecmascript::aliasBindingsAssignCorrectly()
// Test bindings assigned to alias properties override a binding on the target (QTBUG-13719)
void tst_qqmlecmascript::aliasBindingsOverrideTarget()
{
+ QQmlEngine engine;
{
QQmlComponent component(&engine, testFileUrl("aliasBindingsOverrideTarget.qml"));
QObject *o = component.create();
@@ -6575,6 +6762,7 @@ void tst_qqmlecmascript::aliasBindingsOverrideTarget()
// Test that writes to alias properties override bindings on the alias target (QTBUG-13719)
void tst_qqmlecmascript::aliasWritesOverrideBindings()
{
+ QQmlEngine engine;
{
QQmlComponent component(&engine, testFileUrl("aliasWritesOverrideBindings.qml"));
QObject *o = component.create();
@@ -6610,6 +6798,7 @@ void tst_qqmlecmascript::aliasWritesOverrideBindings()
// QTBUG-20200
void tst_qqmlecmascript::aliasToCompositeElement()
{
+ QQmlEngine engine;
QQmlComponent component(&engine, testFileUrl("aliasToCompositeElement.qml"));
QObject *object = component.create();
@@ -6620,6 +6809,7 @@ void tst_qqmlecmascript::aliasToCompositeElement()
void tst_qqmlecmascript::qtbug_20344()
{
+ QQmlEngine engine;
QQmlComponent component(&engine, testFileUrl("qtbug_20344.qml"));
QString warning = component.url().toString() + ":5: Error: Exception thrown from within QObject slot";
@@ -6633,6 +6823,7 @@ void tst_qqmlecmascript::qtbug_20344()
void tst_qqmlecmascript::revisionErrors()
{
+ QQmlEngine engine;
{
QQmlComponent component(&engine, testFileUrl("metaobjectRevisionErrors.qml"));
QString url = component.url().toString();
@@ -6690,6 +6881,7 @@ void tst_qqmlecmascript::revisionErrors()
void tst_qqmlecmascript::revision()
{
+ QQmlEngine engine;
{
QQmlComponent component(&engine, testFileUrl("metaobjectRevision.qml"));
QString url = component.url().toString();
@@ -6736,6 +6928,7 @@ void tst_qqmlecmascript::revision()
void tst_qqmlecmascript::realToInt()
{
+ QQmlEngine engine;
QQmlComponent component(&engine, testFileUrl("realToInt.qml"));
MyQmlObject *object = qobject_cast<MyQmlObject*>(component.create());
QVERIFY(object != nullptr);
@@ -6748,6 +6941,7 @@ void tst_qqmlecmascript::realToInt()
void tst_qqmlecmascript::urlProperty()
{
+ QQmlEngine engine;
{
QQmlComponent component(&engine, testFileUrl("urlProperty.1.qml"));
MyQmlObject *object = qobject_cast<MyQmlObject*>(component.create());
@@ -6762,6 +6956,7 @@ void tst_qqmlecmascript::urlProperty()
void tst_qqmlecmascript::urlPropertyWithEncoding()
{
+ QQmlEngine engine;
{
QQmlComponent component(&engine, testFileUrl("urlProperty.2.qml"));
MyQmlObject *object = qobject_cast<MyQmlObject*>(component.create());
@@ -6776,6 +6971,7 @@ void tst_qqmlecmascript::urlPropertyWithEncoding()
void tst_qqmlecmascript::urlListPropertyWithEncoding()
{
+ QQmlEngine engine;
{
QQmlComponent component(&engine, testFileUrl("urlListProperty.qml"));
QObject *object = component.create();
@@ -6796,6 +6992,7 @@ void tst_qqmlecmascript::urlListPropertyWithEncoding()
void tst_qqmlecmascript::dynamicString()
{
+ QQmlEngine engine;
QQmlComponent component(&engine, testFileUrl("dynamicString.qml"));
QObject *object = component.create();
QVERIFY(object != nullptr);
@@ -6805,6 +7002,7 @@ void tst_qqmlecmascript::dynamicString()
void tst_qqmlecmascript::deleteLaterObjectMethodCall()
{
+ QQmlEngine engine;
QQmlComponent component(&engine, testFileUrl("deleteLaterObjectMethodCall.qml"));
QObject *object = component.create();
QVERIFY(object != nullptr);
@@ -6812,6 +7010,7 @@ void tst_qqmlecmascript::deleteLaterObjectMethodCall()
void tst_qqmlecmascript::automaticSemicolon()
{
+ QQmlEngine engine;
QQmlComponent component(&engine, testFileUrl("automaticSemicolon.qml"));
QObject *object = component.create();
QVERIFY(object != nullptr);
@@ -6819,6 +7018,7 @@ void tst_qqmlecmascript::automaticSemicolon()
void tst_qqmlecmascript::compatibilitySemicolon()
{
+ QQmlEngine engine;
QQmlComponent component(&engine, testFileUrl("compatibilitySemicolon.qml"));
QObject *object = component.create();
QVERIFY(object != nullptr);
@@ -6826,6 +7026,7 @@ void tst_qqmlecmascript::compatibilitySemicolon()
void tst_qqmlecmascript::incrDecrSemicolon1()
{
+ QQmlEngine engine;
QQmlComponent component(&engine, testFileUrl("incrDecrSemicolon1.qml"));
QObject *object = component.create();
QVERIFY(object != nullptr);
@@ -6833,6 +7034,7 @@ void tst_qqmlecmascript::incrDecrSemicolon1()
void tst_qqmlecmascript::incrDecrSemicolon2()
{
+ QQmlEngine engine;
QQmlComponent component(&engine, testFileUrl("incrDecrSemicolon2.qml"));
QObject *object = component.create();
QVERIFY(object != nullptr);
@@ -6840,6 +7042,7 @@ void tst_qqmlecmascript::incrDecrSemicolon2()
void tst_qqmlecmascript::incrDecrSemicolon_error1()
{
+ QQmlEngine engine;
QQmlComponent component(&engine, testFileUrl("incrDecrSemicolon_error1.qml"));
QObject *object = component.create();
QVERIFY(!object);
@@ -6847,6 +7050,7 @@ void tst_qqmlecmascript::incrDecrSemicolon_error1()
void tst_qqmlecmascript::unaryExpression()
{
+ QQmlEngine engine;
QQmlComponent component(&engine, testFileUrl("unaryExpression.qml"));
QObject *object = component.create();
QVERIFY(object != nullptr);
@@ -6855,6 +7059,7 @@ void tst_qqmlecmascript::unaryExpression()
// Makes sure that a binding isn't double re-evaluated when it depends on the same variable twice
void tst_qqmlecmascript::doubleEvaluate()
{
+ QQmlEngine engine;
QQmlComponent component(&engine, testFileUrl("doubleEvaluate.qml"));
QObject *object = component.create();
QVERIFY(object != nullptr);
@@ -6871,6 +7076,7 @@ void tst_qqmlecmascript::doubleEvaluate()
void tst_qqmlecmascript::nonNotifyable()
{
+ QQmlEngine engine;
QQmlComponent component(&engine, testFileUrl("nonNotifyable.qml"));
QQmlTestMessageHandler messageHandler;
@@ -6881,7 +7087,7 @@ void tst_qqmlecmascript::nonNotifyable()
QString expected1 = QLatin1String("QQmlExpression: Expression ") +
component.url().toString() +
- QLatin1String(":5:24 depends on non-NOTIFYable properties:");
+ QLatin1String(":5:5 depends on non-NOTIFYable properties:");
QString expected2 = QLatin1String(" ") +
QLatin1String(object->metaObject()->className()) +
QLatin1String("::value");
@@ -6895,6 +7101,7 @@ void tst_qqmlecmascript::nonNotifyable()
void tst_qqmlecmascript::nonNotifyableConstant()
{
+ QQmlEngine engine;
QQmlComponent component(&engine, testFileUrl("nonNotifyableConstant.qml"));
QQmlTestMessageHandler messageHandler;
@@ -6907,6 +7114,7 @@ void tst_qqmlecmascript::nonNotifyableConstant()
void tst_qqmlecmascript::forInLoop()
{
+ QQmlEngine engine;
QQmlComponent component(&engine, testFileUrl("forInLoop.qml"));
QObject *object = component.create();
QVERIFY(object != nullptr);
@@ -6927,6 +7135,7 @@ void tst_qqmlecmascript::forInLoop()
// An object the binding depends on is deleted while the binding is still running
void tst_qqmlecmascript::deleteWhileBindingRunning()
{
+ QQmlEngine engine;
QQmlComponent component(&engine, testFileUrl("deleteWhileBindingRunning.qml"));
QObject *object = component.create();
QVERIFY(object != nullptr);
@@ -6937,6 +7146,7 @@ void tst_qqmlecmascript::qtbug_22679()
{
MyQmlObject object;
object.setStringProperty(QLatin1String("Please work correctly"));
+ QQmlEngine engine;
engine.rootContext()->setContextProperty("contextProp", &object);
QQmlComponent component(&engine, testFileUrl("qtbug_22679.qml"));
@@ -6966,6 +7176,7 @@ void tst_qqmlecmascript::qtbug_22843()
fileName += QLatin1String(".library");
fileName += QLatin1String(".qml");
+ QQmlEngine engine;
QQmlComponent component(&engine, testFileUrl(fileName));
QString url = component.url().toString();
@@ -6978,6 +7189,7 @@ void tst_qqmlecmascript::qtbug_22843()
void tst_qqmlecmascript::switchStatement()
{
+ QQmlEngine engine;
{
QQmlComponent component(&engine, testFileUrl("switchStatement.1.qml"));
MyQmlObject *object = qobject_cast<MyQmlObject *>(component.create());
@@ -7050,7 +7262,7 @@ void tst_qqmlecmascript::switchStatement()
{
QQmlComponent component(&engine, testFileUrl("switchStatement.4.qml"));
- QString warning = component.url().toString() + ":4:12: Unable to assign [undefined] to int";
+ QString warning = component.url().toString() + ":4:5: Unable to assign [undefined] to int";
QTest::ignoreMessage(QtWarningMsg, qPrintable(warning));
MyQmlObject *object = qobject_cast<MyQmlObject *>(component.create());
@@ -7124,6 +7336,7 @@ void tst_qqmlecmascript::switchStatement()
void tst_qqmlecmascript::withStatement()
{
+ QQmlEngine engine;
{
QUrl url = testFileUrl("withStatement.1.qml");
QQmlComponent component(&engine, url);
@@ -7136,6 +7349,7 @@ void tst_qqmlecmascript::withStatement()
void tst_qqmlecmascript::tryStatement()
{
+ QQmlEngine engine;
{
QQmlComponent component(&engine, testFileUrl("tryStatement.1.qml"));
MyQmlObject *object = qobject_cast<MyQmlObject *>(component.create());
@@ -7157,7 +7371,7 @@ void tst_qqmlecmascript::tryStatement()
MyQmlObject *object = qobject_cast<MyQmlObject *>(component.create());
QVERIFY(object != nullptr);
- QCOMPARE(object->value(), 1);
+ QVERIFY(object->qjsvalue().isUndefined());
}
{
@@ -7165,7 +7379,7 @@ void tst_qqmlecmascript::tryStatement()
MyQmlObject *object = qobject_cast<MyQmlObject *>(component.create());
QVERIFY(object != nullptr);
- QCOMPARE(object->value(), 1);
+ QVERIFY(object->qjsvalue().isUndefined());
}
}
@@ -7211,6 +7425,7 @@ void tst_qqmlecmascript::invokableWithQObjectDerived()
void tst_qqmlecmascript::realTypePrecision()
{
// Properties and signal parameters of type real should have double precision.
+ QQmlEngine engine;
QQmlComponent component(&engine, testFileUrl("realTypePrecision.qml"));
QScopedPointer<QObject> object(component.create());
QVERIFY(object != nullptr);
@@ -7261,8 +7476,8 @@ void tst_qqmlecmascript::bindingBoundFunctions()
void tst_qqmlecmascript::deleteRootObjectInCreation()
{
- {
QQmlEngine engine;
+ {
QQmlComponent c(&engine, testFileUrl("deleteRootObjectInCreation.qml"));
QObject *obj = c.create();
QVERIFY(obj != nullptr);
@@ -7401,7 +7616,7 @@ void tst_qqmlecmascript::onDestructionViaGC()
QVERIFY2(!weakReferenceMutator.isNull(), qPrintable(component.errorString()));
weakReferenceMutator->init(v4, weakRef.data(), &mutatorResult);
- v4->memoryManager->allocObject<QV4::WeakReferenceSentinel>(weakRef.data(), &sentinelResult);
+ v4->memoryManager->allocate<QV4::WeakReferenceSentinel>(weakRef.data(), &sentinelResult);
}
gc(engine);
@@ -7475,6 +7690,7 @@ void tst_qqmlecmascript::signalEmitted()
// QTBUG-25647
void tst_qqmlecmascript::threadSignal()
{
+ QQmlEngine engine;
{
QQmlComponent c(&engine, testFileUrl("threadSignal.qml"));
QScopedPointer<QObject> object(c.create());
@@ -7493,6 +7709,7 @@ void tst_qqmlecmascript::threadSignal()
// ensure that the qqmldata::destroyed() handler doesn't cause problems
void tst_qqmlecmascript::qqmldataDestroyed()
{
+ QQmlEngine engine;
// gc cleans up a qobject, later the qqmldata destroyed handler will run.
{
QQmlComponent c(&engine, testFileUrl("qqmldataDestroyed.qml"));
@@ -7526,6 +7743,7 @@ void tst_qqmlecmascript::qqmldataDestroyed()
void tst_qqmlecmascript::secondAlias()
{
+ QQmlEngine engine;
QQmlComponent c(&engine, testFileUrl("secondAlias.qml"));
QObject *object = c.create();
QVERIFY(object != nullptr);
@@ -7536,6 +7754,7 @@ void tst_qqmlecmascript::secondAlias()
// An alias to a var property works
void tst_qqmlecmascript::varAlias()
{
+ QQmlEngine engine;
QQmlComponent c(&engine, testFileUrl("varAlias.qml"));
QObject *object = c.create();
QVERIFY(object != nullptr);
@@ -7546,6 +7765,7 @@ void tst_qqmlecmascript::varAlias()
// Used to trigger an assert in the lazy meta object creation stage
void tst_qqmlecmascript::overrideDataAssert()
{
+ QQmlEngine engine;
QQmlComponent c(&engine, testFileUrl("overrideDataAssert.qml"));
QObject *object = c.create();
QVERIFY(object != nullptr);
@@ -7571,6 +7791,7 @@ void tst_qqmlecmascript::fallbackBindings()
{
QFETCH(QString, source);
+ QQmlEngine engine;
QQmlComponent component(&engine, testFileUrl(source));
QScopedPointer<QObject> object(component.create());
QVERIFY(object != nullptr);
@@ -7580,6 +7801,7 @@ void tst_qqmlecmascript::fallbackBindings()
void tst_qqmlecmascript::propertyOverride()
{
+ QQmlEngine engine;
QQmlComponent component(&engine, testFileUrl("propertyOverride.qml"));
QScopedPointer<QObject> object(component.create());
QVERIFY(object != nullptr);
@@ -7615,6 +7837,7 @@ void tst_qqmlecmascript::sequenceSort()
QFETCH(QString, function);
QFETCH(bool, useComparer);
+ QQmlEngine engine;
QQmlComponent component(&engine, testFileUrl("sequenceSort.qml"));
QObject *object = component.create();
@@ -7631,6 +7854,7 @@ void tst_qqmlecmascript::sequenceSort()
void tst_qqmlecmascript::dateParse()
{
+ QQmlEngine engine;
QQmlComponent component(&engine, testFileUrl("date.qml"));
QObject *object = component.create();
@@ -7651,6 +7875,7 @@ void tst_qqmlecmascript::dateParse()
void tst_qqmlecmascript::utcDate()
{
+ QQmlEngine engine;
QQmlComponent component(&engine, testFileUrl("utcdate.qml"));
QObject *object = component.create();
@@ -7666,6 +7891,7 @@ void tst_qqmlecmascript::utcDate()
void tst_qqmlecmascript::negativeYear()
{
+ QQmlEngine engine;
QQmlComponent component(&engine, testFileUrl("negativeyear.qml"));
QObject *object = component.create();
@@ -7687,6 +7913,7 @@ void tst_qqmlecmascript::negativeYear()
void tst_qqmlecmascript::concatenatedStringPropertyAccess()
{
+ QQmlEngine engine;
QQmlComponent component(&engine, testFileUrl("concatenatedStringPropertyAccess.qml"));
QObject *object = component.create();
QVERIFY(object);
@@ -7732,6 +7959,7 @@ void tst_qqmlecmascript::updateCall()
// documented it can be called from within QML. Make sure
// we don't crash when calling it.
QString file("updateCall.qml");
+ QQmlEngine engine;
QQmlComponent component(&engine, testFileUrl(file));
QObject *object = component.create();
QVERIFY(object != nullptr);
@@ -7739,6 +7967,7 @@ void tst_qqmlecmascript::updateCall()
void tst_qqmlecmascript::numberParsing()
{
+ QQmlEngine engine;
for (int i = 1; i < 8; ++i) {
QString file("numberParsing.%1.qml");
file = file.arg(i);
@@ -7756,6 +7985,7 @@ void tst_qqmlecmascript::numberParsing()
void tst_qqmlecmascript::stringParsing()
{
+ QQmlEngine engine;
for (int i = 1; i < 7; ++i) {
QString file("stringParsing_error.%1.qml");
file = file.arg(i);
@@ -7779,6 +8009,7 @@ void tst_qqmlecmascript::push_and_shift()
void tst_qqmlecmascript::qtbug_32801()
{
+ QQmlEngine engine;
QQmlComponent component(&engine, testFileUrl("qtbug_32801.qml"));
QScopedPointer<QObject> obj(component.create());
@@ -7791,6 +8022,7 @@ void tst_qqmlecmascript::qtbug_32801()
void tst_qqmlecmascript::thisObject()
{
+ QQmlEngine engine;
QQmlComponent component(&engine, testFileUrl("thisObject.qml"));
QObject *object = component.create();
QVERIFY(object);
@@ -7800,6 +8032,7 @@ void tst_qqmlecmascript::thisObject()
void tst_qqmlecmascript::qtbug_33754()
{
+ QQmlEngine engine;
QQmlComponent component(&engine, testFileUrl("qtbug_33754.qml"));
QScopedPointer<QObject> obj(component.create());
@@ -7808,6 +8041,7 @@ void tst_qqmlecmascript::qtbug_33754()
void tst_qqmlecmascript::qtbug_34493()
{
+ QQmlEngine engine;
QQmlComponent component(&engine, testFileUrl("qtbug_34493.qml"));
QScopedPointer<QObject> obj(component.create());
@@ -7823,6 +8057,7 @@ void tst_qqmlecmascript::qtbug_34493()
// as its type*, it's parent type* and as QObject*
void tst_qqmlecmascript::singletonFromQMLToCpp()
{
+ QQmlEngine engine;
QQmlComponent component(&engine, testFile("singletonTest.qml"));
QScopedPointer<QObject> obj(component.create());
if (component.errors().size())
@@ -7840,6 +8075,7 @@ void tst_qqmlecmascript::singletonFromQMLToCpp()
// and correctly compares to itself
void tst_qqmlecmascript::singletonFromQMLAndBackAndCompare()
{
+ QQmlEngine engine;
QQmlComponent component(&engine, testFile("singletonTest2.qml"));
QScopedPointer<QObject> o(component.create());
if (component.errors().size())
@@ -7864,6 +8100,7 @@ void tst_qqmlecmascript::singletonFromQMLAndBackAndCompare()
void tst_qqmlecmascript::setPropertyOnInvalid()
{
+ QQmlEngine engine;
{
QQmlComponent component(&engine, testFileUrl("setPropertyOnNull.qml"));
QString warning = component.url().toString() + ":4: TypeError: Type error";
@@ -7885,6 +8122,7 @@ void tst_qqmlecmascript::setPropertyOnInvalid()
void tst_qqmlecmascript::miscTypeTest()
{
+ QQmlEngine engine;
QQmlComponent component(&engine, testFileUrl("misctypetest.qml"));
QObject *object = component.create();
@@ -7913,6 +8151,7 @@ void tst_qqmlecmascript::stackLimits()
void tst_qqmlecmascript::idsAsLValues()
{
+ QQmlEngine engine;
QString err = QString(QLatin1String("%1:5 left-hand side of assignment operator is not an lvalue\n")).arg(testFileUrl("idAsLValue.qml").toString());
QQmlComponent component(&engine, testFileUrl("idAsLValue.qml"));
QTest::ignoreMessage(QtWarningMsg, "QQmlComponent: Component is not ready");
@@ -7923,6 +8162,7 @@ void tst_qqmlecmascript::idsAsLValues()
void tst_qqmlecmascript::qtbug_34792()
{
+ QQmlEngine engine;
QQmlComponent component(&engine, testFileUrl("qtbug34792.qml"));
QObject *object = component.create();
@@ -7934,6 +8174,7 @@ void tst_qqmlecmascript::qtbug_34792()
void tst_qqmlecmascript::noCaptureWhenWritingProperty()
{
+ QQmlEngine engine;
QQmlComponent component(&engine, testFileUrl("noCaptureWhenWritingProperty.qml"));
QScopedPointer<QObject> obj(component.create());
QVERIFY(!obj.isNull());
@@ -7942,6 +8183,7 @@ void tst_qqmlecmascript::noCaptureWhenWritingProperty()
void tst_qqmlecmascript::singletonWithEnum()
{
+ QQmlEngine engine;
QQmlComponent component(&engine, testFileUrl("singletontype/singletonWithEnum.qml"));
QScopedPointer<QObject> obj(component.create());
if (obj.isNull())
@@ -7963,48 +8205,53 @@ void tst_qqmlecmascript::singletonWithEnum()
void tst_qqmlecmascript::lazyBindingEvaluation()
{
- QQmlComponent component(&engine, testFileUrl("lazyBindingEvaluation.qml"));
- QScopedPointer<QObject> obj(component.create());
- if (obj.isNull())
+ QQmlEngine engine;
+ QQmlComponent component(&engine, testFileUrl("lazyBindingEvaluation.qml"));
+ QScopedPointer<QObject> obj(component.create());
+ if (obj.isNull())
qDebug() << component.errors().first().toString();
- QVERIFY(!obj.isNull());
- QVariant prop = obj->property("arrayLength");
- QCOMPARE(prop.type(), QVariant::Int);
- QCOMPARE(prop.toInt(), 2);
+ QVERIFY(!obj.isNull());
+ QVariant prop = obj->property("arrayLength");
+ QCOMPARE(prop.type(), QVariant::Int);
+ QCOMPARE(prop.toInt(), 2);
}
void tst_qqmlecmascript::varPropertyAccessOnObjectWithInvalidContext()
{
- QQmlComponent component(&engine, testFileUrl("varPropertyAccessOnObjectWithInvalidContext.qml"));
- QScopedPointer<QObject> obj(component.create());
- if (obj.isNull())
+ QQmlEngine engine;
+ QQmlComponent component(&engine, testFileUrl("varPropertyAccessOnObjectWithInvalidContext.qml"));
+ QScopedPointer<QObject> obj(component.create());
+ if (obj.isNull())
qDebug() << component.errors().first().toString();
- QVERIFY(!obj.isNull());
- QVERIFY(obj->property("success").toBool());
+ QVERIFY(!obj.isNull());
+ QVERIFY(obj->property("success").toBool());
}
void tst_qqmlecmascript::importedScriptsAccessOnObjectWithInvalidContext()
{
- QQmlComponent component(&engine, testFileUrl("importedScriptsAccessOnObjectWithInvalidContext.qml"));
- QScopedPointer<QObject> obj(component.create());
- if (obj.isNull())
+ QQmlEngine engine;
+ QQmlComponent component(&engine, testFileUrl("importedScriptsAccessOnObjectWithInvalidContext.qml"));
+ QScopedPointer<QObject> obj(component.create());
+ if (obj.isNull())
qDebug() << component.errors().first().toString();
- QVERIFY(!obj.isNull());
- QTRY_VERIFY(obj->property("success").toBool());
+ QVERIFY(!obj.isNull());
+ QTRY_VERIFY(obj->property("success").toBool());
}
void tst_qqmlecmascript::importedScriptsWithoutQmlMode()
{
- QQmlComponent component(&engine, testFileUrl("importScriptsWithoutQmlMode.qml"));
- QScopedPointer<QObject> obj(component.create());
- if (obj.isNull())
+ QQmlEngine engine;
+ QQmlComponent component(&engine, testFileUrl("importScriptsWithoutQmlMode.qml"));
+ QScopedPointer<QObject> obj(component.create());
+ if (obj.isNull())
qDebug() << component.errors().first().toString();
- QVERIFY(!obj.isNull());
- QTRY_VERIFY(obj->property("success").toBool());
+ QVERIFY(!obj.isNull());
+ QTRY_VERIFY(obj->property("success").toBool());
}
void tst_qqmlecmascript::contextObjectOnLazyBindings()
{
+ QQmlEngine engine;
QQmlComponent component(&engine, testFileUrl("contextObjectOnLazyBindings.qml"));
QScopedPointer<QObject> obj(component.create());
if (obj.isNull())
@@ -8017,6 +8264,7 @@ void tst_qqmlecmascript::contextObjectOnLazyBindings()
void tst_qqmlecmascript::garbageCollectionDuringCreation()
{
+ QQmlEngine engine;
QQmlComponent component(&engine);
component.setData("import Qt.test 1.0\n"
"QObjectContainerWithGCOnAppend {\n"
@@ -8044,6 +8292,7 @@ void tst_qqmlecmascript::garbageCollectionDuringCreation()
void tst_qqmlecmascript::qtbug_39520()
{
+ QQmlEngine engine;
QQmlComponent component(&engine);
component.setData("import QtQuick 2.0\n"
"Item {\n"
@@ -8165,6 +8414,7 @@ void tst_qqmlecmascript::switchExpression()
void tst_qqmlecmascript::qtbug_46022()
{
+ QQmlEngine engine;
QQmlComponent component(&engine, testFileUrl("qtbug_46022.qml"));
QScopedPointer<QObject> obj(component.create());
@@ -8175,6 +8425,7 @@ void tst_qqmlecmascript::qtbug_46022()
void tst_qqmlecmascript::qtbug_52340()
{
+ QQmlEngine engine;
QQmlComponent component(&engine, testFileUrl("qtbug_52340.qml"));
QScopedPointer<QObject> object(component.create());
QVERIFY(!object.isNull());
@@ -8186,6 +8437,7 @@ void tst_qqmlecmascript::qtbug_52340()
void tst_qqmlecmascript::qtbug_54589()
{
+ QQmlEngine engine;
QQmlComponent component(&engine, testFileUrl("qtbug_54589.qml"));
QScopedPointer<QObject> obj(component.create());
@@ -8197,11 +8449,12 @@ void tst_qqmlecmascript::qtbug_54687()
{
QJSEngine e;
// it's simple: this shouldn't crash.
- engine.evaluate("12\n----12");
+ e.evaluate("12\n----12");
}
void tst_qqmlecmascript::stringify_qtbug_50592()
{
+ QQmlEngine engine;
QQmlComponent component(&engine, testFileUrl("stringify_qtbug_50592.qml"));
QScopedPointer<QObject> obj(component.create());
@@ -8389,6 +8642,7 @@ void tst_qqmlecmascript::freeze_empty_object()
void tst_qqmlecmascript::singleBlockLoops()
{
+ QQmlEngine engine;
QQmlComponent component(&engine, testFileUrl("qtbug_59012.qml"));
QScopedPointer<QObject> obj(component.create());
@@ -8400,6 +8654,7 @@ void tst_qqmlecmascript::singleBlockLoops()
// This fix ensures it looks up the right thing.
void tst_qqmlecmascript::qtbug_60547()
{
+ QQmlEngine engine;
QQmlComponent component(&engine, testFileUrl("qtbug60547/main.qml"));
QScopedPointer<QObject> object(component.create());
QVERIFY2(!object.isNull(), qPrintable(component.errorString()));
@@ -8408,6 +8663,7 @@ void tst_qqmlecmascript::qtbug_60547()
void tst_qqmlecmascript::anotherNaN()
{
+ QQmlEngine engine;
QQmlComponent component(&engine, testFileUrl("nans.qml"));
QScopedPointer<QObject> object(component.create());
QVERIFY2(!object.isNull(), qPrintable(component.errorString()));
@@ -8513,6 +8769,35 @@ void tst_qqmlecmascript::jumpStrictNotEqualUndefined()
QCOMPARE(v.toInt(), 2);
}
+void tst_qqmlecmascript::removeBindingsWithNoDependencies()
+{
+ QQmlEngine engine;
+ QQmlComponent component(&engine, testFileUrl("removeBindingsWithNoDependencies.qml"));
+ QScopedPointer<QObject> object(component.create());
+ QVERIFY(!object.isNull());
+ QVariant rect = object->property("placement");
+ QCOMPARE(rect.toRectF(), QRectF(0, 0, 100, 100));
+ const QMetaObject *metaObject = object->metaObject();
+
+ {
+ const QMetaProperty prop = metaObject->property(metaObject->indexOfProperty("placement"));
+ QVERIFY(prop.isValid());
+ QVERIFY(!QQmlPropertyPrivate::binding(object.data(), QQmlPropertyIndex(prop.propertyIndex())));
+ }
+
+ {
+ const QMetaProperty prop = metaObject->property(metaObject->indexOfProperty("partialPlacement"));
+ QVERIFY(prop.isValid());
+ QQmlAbstractBinding *vtProxyBinding = QQmlPropertyPrivate::binding(object.data(), QQmlPropertyIndex(prop.propertyIndex()));
+ QVERIFY(vtProxyBinding);
+ QVERIFY(vtProxyBinding->isValueTypeProxy());
+
+ QQmlValueTypeProxyBinding *proxy = static_cast<QQmlValueTypeProxyBinding*>(vtProxyBinding);
+ QVERIFY(!proxy->subBindings());
+ }
+
+}
+
QTEST_MAIN(tst_qqmlecmascript)
#include "tst_qqmlecmascript.moc"
diff --git a/tests/auto/qml/qqmlengine/tst_qqmlengine.cpp b/tests/auto/qml/qqmlengine/tst_qqmlengine.cpp
index 95098648fa..f58ae38264 100644
--- a/tests/auto/qml/qqmlengine/tst_qqmlengine.cpp
+++ b/tests/auto/qml/qqmlengine/tst_qqmlengine.cpp
@@ -79,6 +79,7 @@ private slots:
void componentFromEval();
void qrcUrls();
void cppSignalAndEval();
+ void singletonInstance();
public slots:
QObject *createAQObjectForOwnershipTest ()
@@ -543,7 +544,7 @@ void tst_qqmlengine::outputWarningsToStandardError()
delete o;
QCOMPARE(messageHandler.messages().count(), 1);
- QCOMPARE(messageHandler.messages().at(0), QLatin1String("<Unknown File>:1:48: Unable to assign [undefined] to int"));
+ QCOMPARE(messageHandler.messages().at(0), QLatin1String("<Unknown File>:1:32: Unable to assign [undefined] to int"));
messageHandler.clear();
engine.setOutputWarningsToStandardError(false);
@@ -905,23 +906,19 @@ void tst_qqmlengine::qrcUrls()
QQmlEnginePrivate *pEngine = QQmlEnginePrivate::get(&engine);
{
- QQmlRefPointer<QQmlTypeData> oneQml(pEngine->typeLoader.getType(QUrl("qrc:/qrcurls.qml")),
- QQmlRefPointer<QQmlTypeData>::Adopt);
- QVERIFY(oneQml != nullptr);
- QQmlRefPointer<QQmlTypeData> twoQml(pEngine->typeLoader.getType(QUrl("qrc:///qrcurls.qml")),
- QQmlRefPointer<QQmlTypeData>::Adopt);
- QVERIFY(twoQml != nullptr);
- QCOMPARE(oneQml, twoQml);
+ QQmlRefPointer<QQmlTypeData> oneQml(pEngine->typeLoader.getType(QUrl("qrc:/qrcurls.qml")));
+ QVERIFY(oneQml.data() != nullptr);
+ QQmlRefPointer<QQmlTypeData> twoQml(pEngine->typeLoader.getType(QUrl("qrc:///qrcurls.qml")));
+ QVERIFY(twoQml.data() != nullptr);
+ QCOMPARE(oneQml.data(), twoQml.data());
}
{
- QQmlRefPointer<QQmlTypeData> oneJS(pEngine->typeLoader.getType(QUrl("qrc:/qrcurls.js")),
- QQmlRefPointer<QQmlTypeData>::Adopt);
- QVERIFY(oneJS != nullptr);
- QQmlRefPointer<QQmlTypeData> twoJS(pEngine->typeLoader.getType(QUrl("qrc:///qrcurls.js")),
- QQmlRefPointer<QQmlTypeData>::Adopt);
- QVERIFY(twoJS != nullptr);
- QCOMPARE(oneJS, twoJS);
+ QQmlRefPointer<QQmlTypeData> oneJS(pEngine->typeLoader.getType(QUrl("qrc:/qrcurls.js")));
+ QVERIFY(oneJS.data() != nullptr);
+ QQmlRefPointer<QQmlTypeData> twoJS(pEngine->typeLoader.getType(QUrl("qrc:///qrcurls.js")));
+ QVERIFY(twoJS.data() != nullptr);
+ QCOMPARE(oneJS.data(), twoJS.data());
}
}
@@ -956,6 +953,96 @@ void tst_qqmlengine::cppSignalAndEval()
QCOMPARE(object->property("r"), 1.1234);
}
+class CppSingleton : public QObject {
+ Q_OBJECT
+public:
+ CppSingleton() {}
+
+ static QObject *create(QQmlEngine *qmlEngine, QJSEngine *jsEngine)
+ {
+ Q_UNUSED(qmlEngine);
+ Q_UNUSED(jsEngine);
+ return new CppSingleton();
+ }
+};
+
+class JsSingleton : public QObject {
+ Q_OBJECT
+public:
+ JsSingleton() {}
+
+ static QJSValue create(QQmlEngine *qmlEngine, QJSEngine *jsEngine)
+ {
+ Q_UNUSED(qmlEngine);
+ QJSValue value = jsEngine->newQObject(new JsSingleton());
+ return value;
+ }
+};
+
+class SomeQObjectClass : public QObject {
+ Q_OBJECT
+public:
+ SomeQObjectClass() : QObject(nullptr){}
+};
+
+void tst_qqmlengine::singletonInstance()
+{
+ QQmlEngine engine;
+
+ int cppSingletonTypeId = qmlRegisterSingletonType<CppSingleton>("Test", 1, 0, "CppSingleton", &CppSingleton::create);
+ int jsValueSingletonTypeId = qmlRegisterSingletonType("Test", 1, 0, "JsSingleton", &JsSingleton::create);
+
+ {
+ // Cpp QObject singleton type
+ QJSValue value = engine.singletonInstance<QJSValue>(cppSingletonTypeId);
+ QVERIFY(!value.isUndefined());
+ QVERIFY(value.isQObject());
+ QObject *instance = value.toQObject();
+ QVERIFY(instance);
+ QCOMPARE(instance->metaObject()->className(), "CppSingleton");
+ }
+
+ {
+ // QJSValue QObject singleton type
+ QJSValue value = engine.singletonInstance<QJSValue>(jsValueSingletonTypeId);
+ QVERIFY(!value.isUndefined());
+ QVERIFY(value.isQObject());
+ QObject *instance = value.toQObject();
+ QVERIFY(instance);
+ QCOMPARE(instance->metaObject()->className(), "JsSingleton");
+ }
+
+ {
+ // Invalid types
+ QJSValue value;
+ value = engine.singletonInstance<QJSValue>(-4711);
+ QVERIFY(value.isUndefined());
+ value = engine.singletonInstance<QJSValue>(1701);
+ QVERIFY(value.isUndefined());
+ }
+
+ {
+ // Valid, but non-singleton type
+ int typeId = qmlRegisterType<CppSingleton>("Test", 1, 0, "NotASingleton");
+ QJSValue value = engine.singletonInstance<QJSValue>(typeId);
+ QVERIFY(value.isUndefined());
+ }
+
+ {
+ // Cpp QObject singleton type
+ CppSingleton *instance = engine.singletonInstance<CppSingleton*>(cppSingletonTypeId);
+ QVERIFY(instance);
+ QCOMPARE(instance->metaObject()->className(), "CppSingleton");
+ QCOMPARE(instance, engine.singletonInstance<QJSValue>(cppSingletonTypeId).toQObject());
+ }
+
+ {
+ // Wrong destination type
+ SomeQObjectClass * instance = engine.singletonInstance<SomeQObjectClass*>(cppSingletonTypeId);
+ QVERIFY(!instance);
+ }
+}
+
QTEST_MAIN(tst_qqmlengine)
#include "tst_qqmlengine.moc"
diff --git a/tests/auto/qml/qqmllanguage/data/dynamicMeta.5.errors.txt b/tests/auto/qml/qqmllanguage/data/dynamicMeta.5.errors.txt
index 015d55b03b..30b5193cd5 100644
--- a/tests/auto/qml/qqmllanguage/data/dynamicMeta.5.errors.txt
+++ b/tests/auto/qml/qqmllanguage/data/dynamicMeta.5.errors.txt
@@ -1 +1 @@
-3:1:UnknownType is not a type
+4:5:UnknownType is not a type
diff --git a/tests/auto/qml/qqmllanguage/data/incorrectCase.errors.insensitive.txt b/tests/auto/qml/qqmllanguage/data/incorrectCase.errors.insensitive.txt
index 3813680562..4f3f758b7e 100644
--- a/tests/auto/qml/qqmllanguage/data/incorrectCase.errors.insensitive.txt
+++ b/tests/auto/qml/qqmllanguage/data/incorrectCase.errors.insensitive.txt
@@ -1,2 +1,2 @@
-3:1:Type IncorrectCaseType unavailable
+3:1:IncorrectCaseType is not a type
-1:-1:File name case mismatch
diff --git a/tests/auto/qml/qqmllanguage/data/objectValueTypeProperty.errors.txt b/tests/auto/qml/qqmllanguage/data/objectValueTypeProperty.errors.txt
index db7d9c0f60..cefd62f9d4 100644
--- a/tests/auto/qml/qqmllanguage/data/objectValueTypeProperty.errors.txt
+++ b/tests/auto/qml/qqmllanguage/data/objectValueTypeProperty.errors.txt
@@ -1 +1 @@
-4:18:Unexpected object assignment
+4:18:Unexpected object assignment for property "x"
diff --git a/tests/auto/qml/qqmllanguage/data/property.4.errors.txt b/tests/auto/qml/qqmllanguage/data/property.4.errors.txt
index b447186849..2807384ec4 100644
--- a/tests/auto/qml/qqmllanguage/data/property.4.errors.txt
+++ b/tests/auto/qml/qqmllanguage/data/property.4.errors.txt
@@ -1 +1 @@
-5:1:Syntax error
+5:1:Expected token `:'
diff --git a/tests/auto/qml/qqmllanguage/data/singletonTest18.qml b/tests/auto/qml/qqmllanguage/data/singletonTest18.qml
new file mode 100644
index 0000000000..7616c23531
--- /dev/null
+++ b/tests/auto/qml/qqmllanguage/data/singletonTest18.qml
@@ -0,0 +1,9 @@
+import QtQuick 2.0
+import "singleton"
+import Test 1.0
+
+Item {
+ property var qmlSingleton: SingletonType
+ property var jsSingleton: MyQJSValueQObjectSingleton
+ property var cppSingleton: MyTypeObjectSingleton
+}
diff --git a/tests/auto/qml/qqmllanguage/testtypes.cpp b/tests/auto/qml/qqmllanguage/testtypes.cpp
index 0eb4f26878..7e247b1906 100644
--- a/tests/auto/qml/qqmllanguage/testtypes.cpp
+++ b/tests/auto/qml/qqmllanguage/testtypes.cpp
@@ -35,6 +35,14 @@ static QObject *myTypeObjectSingleton(QQmlEngine *engine, QJSEngine *scriptEngin
return new MyTypeObject();
}
+static QJSValue myQJSValueQObjectSingleton(QQmlEngine *engine, QJSEngine *scriptEngine)
+{
+ Q_UNUSED(engine)
+
+ QJSValue value = scriptEngine->newQObject(new MyTypeObject());
+ return value;
+}
+
void registerTypes()
{
qmlRegisterInterface<MyInterface>("MyInterface");
@@ -101,6 +109,7 @@ void registerTypes()
qmlRegisterType<MyCompositeBaseType>("Test", 1, 0, "MyCompositeBaseType");
qmlRegisterSingletonType<MyTypeObjectSingleton>("Test", 1, 0, "MyTypeObjectSingleton", myTypeObjectSingleton);
+ qmlRegisterSingletonType("Test", 1, 0, "MyQJSValueQObjectSingleton", myQJSValueQObjectSingleton);
qmlRegisterType<MyArrayBufferTestClass>("Test", 1, 0, "MyArrayBufferTestClass");
diff --git a/tests/auto/qml/qqmllanguage/tst_qqmllanguage.cpp b/tests/auto/qml/qqmllanguage/tst_qqmllanguage.cpp
index 8913528d79..f3569c2efe 100644
--- a/tests/auto/qml/qqmllanguage/tst_qqmllanguage.cpp
+++ b/tests/auto/qml/qqmllanguage/tst_qqmllanguage.cpp
@@ -246,6 +246,8 @@ private slots:
void compositeSingletonRegistered();
void compositeSingletonCircular();
+ void singletonsHaveContextAndEngine();
+
void customParserBindingScopes();
void customParserEvaluateEnum();
void customParserProperties();
@@ -288,6 +290,8 @@ private slots:
void valueTypeGroupPropertiesInBehavior();
+ void retrieveQmlTypeId();
+
private:
QQmlEngine engine;
QStringList defaultImportPathList;
@@ -2193,7 +2197,7 @@ void tst_qqmllanguage::scriptStringWithoutSourceCode()
QUrl url = testFileUrl("scriptString7.qml");
{
QQmlEnginePrivate *eng = QQmlEnginePrivate::get(&engine);
- QQmlTypeData *td = eng->typeLoader.getType(url);
+ QQmlRefPointer<QQmlTypeData> td = eng->typeLoader.getType(url);
Q_ASSERT(td);
const QV4::CompiledData::Unit *readOnlyQmlUnit = td->compilationUnit()->data;
@@ -3923,11 +3927,13 @@ void tst_qqmllanguage::getSingletonInstance(QObject* o, const char* propertyName
return;
QVariant variant = o->property(propertyName);
- QVERIFY(variant.userType() == qMetaTypeId<QObject *>());
+ QVERIFY(variant.isValid());
QObject *singleton = nullptr;
- if (variant.canConvert<QObject*>())
+ if (variant.userType() == qMetaTypeId<QObject *>())
singleton = variant.value<QObject*>();
+ else if (variant.userType() == qMetaTypeId<QJSValue>())
+ singleton = variant.value<QJSValue>().toQObject();
QVERIFY(singleton != nullptr);
*result = singleton;
@@ -4232,6 +4238,24 @@ void tst_qqmllanguage::compositeSingletonCircular()
QCOMPARE(o->property("value").toInt(), 2);
}
+void tst_qqmllanguage::singletonsHaveContextAndEngine()
+{
+ QObject *qmlSingleton = nullptr;
+ getSingletonInstance(engine, "singletonTest18.qml", "qmlSingleton", &qmlSingleton);
+ QVERIFY(qmlContext(qmlSingleton));
+ QCOMPARE(qmlEngine(qmlSingleton), &engine);
+
+ QObject *jsSingleton = nullptr;
+ getSingletonInstance(engine, "singletonTest18.qml", "jsSingleton", &jsSingleton);
+ QVERIFY(qmlContext(jsSingleton));
+ QCOMPARE(qmlEngine(jsSingleton), &engine);
+
+ QObject *cppSingleton = nullptr;
+ getSingletonInstance(engine, "singletonTest18.qml", "cppSingleton", &cppSingleton);
+ QVERIFY(qmlContext(cppSingleton));
+ QCOMPARE(qmlEngine(cppSingleton), &engine);
+}
+
void tst_qqmllanguage::customParserBindingScopes()
{
QQmlComponent component(&engine, testFile("customParserBindingScopes.qml"));
@@ -4934,6 +4958,26 @@ void tst_qqmllanguage::valueTypeGroupPropertiesInBehavior()
QCOMPARE(animation->property("easing").value<QEasingCurve>().type(), QEasingCurve::InOutQuad);
}
+void tst_qqmllanguage::retrieveQmlTypeId()
+{
+ // Register in reverse order to provoke wrong minor version matching.
+ int id2 = qmlRegisterType<QObject>("Test", 2, 3, "SomeTestType");
+ int id1 = qmlRegisterType<QObject>("Test", 2, 1, "SomeTestType");
+ QCOMPARE(qmlTypeId("Test", 2, 1, "SomeTestType"), id1);
+ QCOMPARE(qmlTypeId("Test", 2, 2, "SomeTestType"), id1);
+ QCOMPARE(qmlTypeId("Test", 2, 3, "SomeTestType"), id2);
+
+ // Error cases
+ QCOMPARE(qmlTypeId("Test", 2, 0, "SomeTestType"), -1);
+ QCOMPARE(qmlTypeId("Test", 2, 3, "DoesNotExist"), -1);
+ QCOMPARE(qmlTypeId("DoesNotExist", 2, 3, "SomeTestType"), -1);
+
+ // Must also work for other types (defined in testtpes.cpp)
+ QVERIFY(qmlTypeId("Test", 1, 0, "MyExtendedUncreateableBaseClass") >= 0);
+ QVERIFY(qmlTypeId("Test", 1, 0, "MyUncreateableBaseClass") >= 0);
+ QVERIFY(qmlTypeId("Test", 1, 0, "MyTypeObjectSingleton") >= 0);
+}
+
QTEST_MAIN(tst_qqmllanguage)
#include "tst_qqmllanguage.moc"
diff --git a/tests/auto/qml/qqmllistmodel/data/dynamicroles.qml b/tests/auto/qml/qqmllistmodel/data/dynamicroles.qml
new file mode 100644
index 0000000000..7d3650c3b9
--- /dev/null
+++ b/tests/auto/qml/qqmllistmodel/data/dynamicroles.qml
@@ -0,0 +1,21 @@
+import QtQuick 2.0
+
+Item {
+ id: root
+
+ ListModel {
+ id: listModel
+ objectName: "listModel"
+ dynamicRoles: true
+
+ // have to add elements dynamically when dynamicRoles = true
+ function appendNewElement() {
+ listModel.append({"name": "test", "obj": null})
+ }
+
+ function setElementAgain() {
+ var element = listModel.get(0)
+ listModel.set(0, element)
+ }
+ }
+}
diff --git a/tests/auto/qml/qqmllistmodel/data/qtbug38907.qml b/tests/auto/qml/qqmllistmodel/data/qtbug38907.qml
new file mode 100644
index 0000000000..0abf221f60
--- /dev/null
+++ b/tests/auto/qml/qqmllistmodel/data/qtbug38907.qml
@@ -0,0 +1,25 @@
+import QtQuick 2.0
+import QtTest 1.0
+
+Item {
+
+ Item {
+ id : testItem
+ property string name : "testObject"
+ property var object : this
+ function testMethod() {
+ return -1;
+ }
+ }
+
+ ListModel {
+ id : listModel
+ dynamicRoles : true
+ }
+
+ function exec() {
+ listModel.append(testItem);
+ listModel.append({ item : testItem });
+ return true;
+ }
+}
diff --git a/tests/auto/qml/qqmllistmodel/tst_qqmllistmodel.cpp b/tests/auto/qml/qqmllistmodel/tst_qqmllistmodel.cpp
index 9fdc54f067..771f3e5c4e 100644
--- a/tests/auto/qml/qqmllistmodel/tst_qqmllistmodel.cpp
+++ b/tests/auto/qml/qqmllistmodel/tst_qqmllistmodel.cpp
@@ -106,6 +106,7 @@ private slots:
void get_nested_data();
void crash_model_with_multiple_roles();
void crash_model_with_unknown_roles();
+ void crash_model_with_dynamic_roles();
void set_model_cache();
void property_changes();
void property_changes_data();
@@ -126,6 +127,7 @@ private slots:
void stringifyModelEntry();
void qobjectTrackerForDynamicModelObjects();
void crash_append_empty_array();
+ void dynamic_roles_crash_QTBUG_38907();
};
bool tst_qqmllistmodel::compareVariantList(const QVariantList &testList, QVariant object)
@@ -984,6 +986,97 @@ void tst_qqmllistmodel::crash_model_with_unknown_roles()
model->index(0, 0, QModelIndex()).data(Qt::UserRole);
}
+//QTBUG-35639
+void tst_qqmllistmodel::crash_model_with_dynamic_roles()
+{
+ {
+ // setting a dynamic role to a QObject value, then triggering dtor
+ QQmlEngine eng;
+ QQmlComponent component(&eng, testFileUrl("dynamicroles.qml"));
+ QObject *rootItem = component.create();
+ qWarning() << component.errorString();
+ QVERIFY(component.errorString().isEmpty());
+ QVERIFY(rootItem != 0);
+ QQmlListModel *model = rootItem->findChild<QQmlListModel*>("listModel");
+ QVERIFY(model != 0);
+
+ QMetaObject::invokeMethod(model, "appendNewElement");
+
+ QObject *testObj = new QObject;
+ model->setProperty(0, "obj", QVariant::fromValue<QObject*>(testObj));
+ delete testObj;
+
+ // delete the root item, which will cause the model dtor to run
+ // previously, this would crash as it attempted to delete testObj.
+ delete rootItem;
+ }
+
+ {
+ // setting a dynamic role to a QObject value, then triggering
+ // DynamicRoleModelNode::updateValues() to trigger unsafe qobject_cast
+ QQmlEngine eng;
+ QQmlComponent component(&eng, testFileUrl("dynamicroles.qml"));
+ QObject *rootItem = component.create();
+ qWarning() << component.errorString();
+ QVERIFY(component.errorString().isEmpty());
+ QVERIFY(rootItem != 0);
+ QQmlListModel *model = rootItem->findChild<QQmlListModel*>("listModel");
+ QVERIFY(model != 0);
+
+ QMetaObject::invokeMethod(model, "appendNewElement");
+
+ QObject *testObj = new QObject;
+ model->setProperty(0, "obj", QVariant::fromValue<QObject*>(testObj));
+ delete testObj;
+
+ QMetaObject::invokeMethod(model, "setElementAgain");
+
+ delete rootItem;
+ }
+
+ {
+ // setting a dynamic role to a QObject value, then triggering
+ // DynamicRoleModelNodeMetaObject::propertyWrite()
+
+ /*
+ XXX TODO: I couldn't reproduce this one simply - I think it
+ requires a WorkerScript sync() call, and that's non-trivial.
+ I thought I could do it simply via:
+
+ QQmlEngine eng;
+ QQmlComponent component(&eng, testFileUrl("dynamicroles.qml"));
+ QObject *rootItem = component.create();
+ qWarning() << component.errorString();
+ QVERIFY(component.errorString().isEmpty());
+ QVERIFY(rootItem != 0);
+ QQmlListModel *model = rootItem->findChild<QQmlListModel*>("listModel");
+ QVERIFY(model != 0);
+
+ QMetaObject::invokeMethod(model, "appendNewElement");
+
+ QObject *testObj = new QObject;
+ model->setProperty(0, "obj", QVariant::fromValue<QObject*>(testObj));
+ delete testObj;
+ QObject *testObj2 = new QObject;
+ model->setProperty(0, "obj", QVariant::fromValue<QObject*>(testObj2));
+
+ But it turns out that that doesn't work (the setValue() call within
+ setProperty() doesn't seem to trigger the right codepath, for some
+ reason), and you can't trigger it manually via:
+
+ QObject *testObj2 = new QObject;
+ void *a[] = { testObj2, 0 };
+ QMetaObject::metacall(dynamicNodeModel, QMetaObject::WriteProperty, 0, a);
+
+ because the dynamicNodeModel for that index cannot be retrieved
+ using the public API.
+
+ But, anyway, I think the above two test cases are sufficient to
+ show that QObject* values should be guarded internally.
+ */
+ }
+}
+
//QTBUG-15190
void tst_qqmllistmodel::set_model_cache()
{
@@ -1556,6 +1649,24 @@ void tst_qqmllistmodel::crash_append_empty_array()
QCOMPARE(spy.count(), 0);
}
+void tst_qqmllistmodel::dynamic_roles_crash_QTBUG_38907()
+{
+ QQmlEngine eng;
+ QQmlComponent component(&eng, testFileUrl("qtbug38907.qml"));
+ QVERIFY(!component.isError());
+ QScopedPointer<QQuickItem> item(qobject_cast<QQuickItem*>(component.create()));
+ QVERIFY(item != 0);
+
+ QVariant retVal;
+
+ QMetaObject::invokeMethod(item.data(),
+ "exec",
+ Qt::DirectConnection,
+ Q_RETURN_ARG(QVariant, retVal));
+
+ QVERIFY(retVal.toBool());
+}
+
QTEST_MAIN(tst_qqmllistmodel)
#include "tst_qqmllistmodel.moc"
diff --git a/tests/auto/qml/qqmlopenmetaobject/tst_qqmlopenmetaobject.cpp b/tests/auto/qml/qqmlopenmetaobject/tst_qqmlopenmetaobject.cpp
index 7fd4d69b5e..44ce1d6987 100644
--- a/tests/auto/qml/qqmlopenmetaobject/tst_qqmlopenmetaobject.cpp
+++ b/tests/auto/qml/qqmlopenmetaobject/tst_qqmlopenmetaobject.cpp
@@ -53,7 +53,7 @@ void tst_qqmlopenmetaobject::createProperties()
QQmlEngine engine;
CustomObject object;
const QQmlRefPointer<QQmlOpenMetaObjectType> mot = new QQmlOpenMetaObjectType(object.metaObject(), &engine);
- QQmlOpenMetaObject *const mo = new QQmlOpenMetaObject(&object, mot);
+ QQmlOpenMetaObject *const mo = new QQmlOpenMetaObject(&object, mot.data());
mo->setCached(true);
mot->createProperty("customProperty");
QVERIFY(true);
diff --git a/tests/auto/qml/qqmlparser/tst_qqmlparser.cpp b/tests/auto/qml/qqmlparser/tst_qqmlparser.cpp
index ba2b836a6d..ce9d0ac894 100644
--- a/tests/auto/qml/qqmlparser/tst_qqmlparser.cpp
+++ b/tests/auto/qml/qqmlparser/tst_qqmlparser.cpp
@@ -50,6 +50,9 @@ private slots:
void qmlParser();
#endif
void invalidEscapeSequence();
+ void stringLiteral();
+ void noSubstitutionTemplateLiteral();
+ void templateLiteral();
private:
QStringList excludedDirs;
@@ -78,6 +81,13 @@ public:
const quint32 parentBegin = parent->firstSourceLocation().begin();
const quint32 parentEnd = parent->lastSourceLocation().end();
+ if (node->firstSourceLocation().begin() < parentBegin)
+ qDebug() << "first source loc failed: node:" << node->kind << "at" << node->firstSourceLocation().startLine << "/" << node->firstSourceLocation().startColumn
+ << "parent" << parent->kind << "at" << parent->firstSourceLocation().startLine << "/" << parent->firstSourceLocation().startColumn;
+ if (node->lastSourceLocation().end() > parentEnd)
+ qDebug() << "first source loc failed: node:" << node->kind << "at" << node->lastSourceLocation().startLine << "/" << node->lastSourceLocation().startColumn
+ << "parent" << parent->kind << "at" << parent->lastSourceLocation().startLine << "/" << parent->lastSourceLocation().startColumn;
+
QVERIFY(node->firstSourceLocation().begin() >= parentBegin);
QVERIFY(node->lastSourceLocation().end() <= parentEnd);
}
@@ -183,13 +193,12 @@ void tst_qqmlparser::qmlParser()
Lexer lexer(&engine);
lexer.setCode(code, 1, qmlMode);
Parser parser(&engine);
- if (qmlMode)
- parser.parse();
- else
- parser.parseProgram();
+ bool ok = qmlMode ? parser.parse() : parser.parseProgram();
- check::Check chk;
- chk(parser.rootNode());
+ if (ok) {
+ check::Check chk;
+ chk(parser.rootNode());
+ }
}
#endif
@@ -204,6 +213,67 @@ void tst_qqmlparser::invalidEscapeSequence()
parser.parse();
}
+void tst_qqmlparser::stringLiteral()
+{
+ using namespace QQmlJS;
+
+ Engine engine;
+ Lexer lexer(&engine);
+ QLatin1String code("'hello string'");
+ lexer.setCode(code , 1);
+ Parser parser(&engine);
+ QVERIFY(parser.parseExpression());
+ AST::ExpressionNode *expression = parser.expression();
+ QVERIFY(expression);
+ auto *literal = QQmlJS::AST::cast<QQmlJS::AST::StringLiteral *>(expression);
+ QVERIFY(literal);
+ QCOMPARE(literal->value, "hello string");
+ QCOMPARE(literal->firstSourceLocation().begin(), 0);
+ QCOMPARE(literal->lastSourceLocation().end(), code.size());
+}
+
+void tst_qqmlparser::noSubstitutionTemplateLiteral()
+{
+ using namespace QQmlJS;
+
+ Engine engine;
+ Lexer lexer(&engine);
+ QLatin1String code("`hello template`");
+ lexer.setCode(code, 1);
+ Parser parser(&engine);
+ QVERIFY(parser.parseExpression());
+ AST::ExpressionNode *expression = parser.expression();
+ QVERIFY(expression);
+
+ auto *literal = QQmlJS::AST::cast<QQmlJS::AST::TemplateLiteral *>(expression);
+ QVERIFY(literal);
+
+ QCOMPARE(literal->value, "hello template");
+ QCOMPARE(literal->firstSourceLocation().begin(), 0);
+ QCOMPARE(literal->lastSourceLocation().end(), code.size());
+}
+
+void tst_qqmlparser::templateLiteral()
+{
+ using namespace QQmlJS;
+
+ Engine engine;
+ Lexer lexer(&engine);
+ QLatin1String code("`one plus one equals ${1+1}!`");
+ lexer.setCode(code, 1);
+ Parser parser(&engine);
+ QVERIFY(parser.parseExpression());
+ AST::ExpressionNode *expression = parser.expression();
+ QVERIFY(expression);
+
+ auto *templateLiteral = QQmlJS::AST::cast<QQmlJS::AST::TemplateLiteral *>(expression);
+ QVERIFY(templateLiteral);
+
+ QCOMPARE(templateLiteral->firstSourceLocation().begin(), 0);
+ auto *e = templateLiteral->expression;
+ QVERIFY(e);
+}
+
QTEST_MAIN(tst_qqmlparser)
#include "tst_qqmlparser.moc"
diff --git a/tests/auto/qml/qqmlproperty/tst_qqmlproperty.cpp b/tests/auto/qml/qqmlproperty/tst_qqmlproperty.cpp
index 1e9ba80264..b8d5a4d3a3 100644
--- a/tests/auto/qml/qqmlproperty/tst_qqmlproperty.cpp
+++ b/tests/auto/qml/qqmlproperty/tst_qqmlproperty.cpp
@@ -2007,15 +2007,15 @@ void tst_qqmlproperty::warnOnInvalidBinding()
QString expectedWarning;
// V4 error message for property-to-property binding
- expectedWarning = testUrl.toString() + QString::fromLatin1(":6:36: Unable to assign QQuickText to QQuickRectangle");
+ expectedWarning = testUrl.toString() + QString::fromLatin1(":6:5: Unable to assign QQuickText to QQuickRectangle");
QTest::ignoreMessage(QtWarningMsg, expectedWarning.toLatin1().constData());
// V8 error message for function-to-property binding
- expectedWarning = testUrl.toString() + QString::fromLatin1(":7:36: Unable to assign QQuickText to QQuickRectangle");
+ expectedWarning = testUrl.toString() + QString::fromLatin1(":7:5: Unable to assign QQuickText to QQuickRectangle");
QTest::ignoreMessage(QtWarningMsg, expectedWarning.toLatin1().constData());
// V8 error message for invalid binding to anchor
- expectedWarning = testUrl.toString() + QString::fromLatin1(":14:33: Unable to assign QQuickItem_QML_8 to QQuickAnchorLine");
+ expectedWarning = testUrl.toString() + QString::fromLatin1(":14:9: Unable to assign QQuickItem_QML_8 to QQuickAnchorLine");
QTest::ignoreMessage(QtWarningMsg, expectedWarning.toLatin1().constData());
QQmlComponent component(&engine, testUrl);
diff --git a/tests/auto/qml/qqmlpropertycache/tst_qqmlpropertycache.cpp b/tests/auto/qml/qqmlpropertycache/tst_qqmlpropertycache.cpp
index b9e56b39a2..29f70c4e46 100644
--- a/tests/auto/qml/qqmlpropertycache/tst_qqmlpropertycache.cpp
+++ b/tests/auto/qml/qqmlpropertycache/tst_qqmlpropertycache.cpp
@@ -95,7 +95,7 @@ Q_SIGNALS:
void signalB();
};
-QQmlPropertyData *cacheProperty(QQmlPropertyCache *cache, const char *name)
+QQmlPropertyData *cacheProperty(const QQmlRefPointer<QQmlPropertyCache> &cache, const char *name)
{
return cache->property(QLatin1String(name), nullptr, nullptr);
}
diff --git a/tests/auto/qml/qqmlqt/tst_qqmlqt.cpp b/tests/auto/qml/qqmlqt/tst_qqmlqt.cpp
index b96eecafe8..2d8115e867 100644
--- a/tests/auto/qml/qqmlqt/tst_qqmlqt.cpp
+++ b/tests/auto/qml/qqmlqt/tst_qqmlqt.cpp
@@ -505,8 +505,14 @@ void tst_qqmlqt::font()
QObject *object = component.create();
QVERIFY(object != nullptr);
- QCOMPARE(qvariant_cast<QFont>(object->property("test1")), QFont("Arial", 22));
- QCOMPARE(qvariant_cast<QFont>(object->property("test2")), QFont("Arial", 20, QFont::DemiBold, true));
+ QFont f;
+ f.setFamily("Arial");
+ f.setPointSize(22);
+ QCOMPARE(qvariant_cast<QFont>(object->property("test1")), f);
+ f.setPointSize(20);
+ f.setWeight(QFont::DemiBold);
+ f.setItalic(true);
+ QCOMPARE(qvariant_cast<QFont>(object->property("test2")), f);
QCOMPARE(qvariant_cast<QFont>(object->property("test3")), QFont());
QCOMPARE(qvariant_cast<QFont>(object->property("test4")), QFont());
diff --git a/tests/auto/qml/qqmltranslation/data/translationChange.qml b/tests/auto/qml/qqmltranslation/data/translationChange.qml
index c48a482138..ae3231935c 100644
--- a/tests/auto/qml/qqmltranslation/data/translationChange.qml
+++ b/tests/auto/qml/qqmltranslation/data/translationChange.qml
@@ -3,6 +3,13 @@ import QtQuick 2.0
TranslationChangeBase {
id: root
+ ListModel {
+ id: listModel
+ ListElement {
+ text: qsTr("translate me")
+ }
+ }
+
baseProperty: "do not translate"
property string text1: qsTr("translate me")
function weDoTranslations() {
@@ -10,6 +17,7 @@ TranslationChangeBase {
}
property string text2: weDoTranslations()
property string text3
+ property string fromListModel: listModel.get(0).text
states: [
State {
diff --git a/tests/auto/qml/qqmltranslation/tst_qqmltranslation.cpp b/tests/auto/qml/qqmltranslation/tst_qqmltranslation.cpp
index 1c67ba5541..5042a236d4 100644
--- a/tests/auto/qml/qqmltranslation/tst_qqmltranslation.cpp
+++ b/tests/auto/qml/qqmltranslation/tst_qqmltranslation.cpp
@@ -76,7 +76,7 @@ void tst_qqmltranslation::translation()
if (verifyCompiledData) {
QQmlContext *context = qmlContext(object);
QQmlEnginePrivate *engine = QQmlEnginePrivate::get(context->engine());
- QQmlTypeData *typeData = engine->typeLoader.getType(context->baseUrl());
+ QQmlRefPointer<QQmlTypeData> typeData = engine->typeLoader.getType(context->baseUrl());
QV4::CompiledData::CompilationUnit *compilationUnit = typeData->compilationUnit();
QVERIFY(compilationUnit);
@@ -136,7 +136,7 @@ void tst_qqmltranslation::idTranslation()
{
QQmlContext *context = qmlContext(object);
QQmlEnginePrivate *engine = QQmlEnginePrivate::get(context->engine());
- QQmlTypeData *typeData = engine->typeLoader.getType(context->baseUrl());
+ QQmlRefPointer<QQmlTypeData> typeData = engine->typeLoader.getType(context->baseUrl());
QV4::CompiledData::CompilationUnit *compilationUnit = typeData->compilationUnit();
QVERIFY(compilationUnit);
@@ -195,6 +195,7 @@ void tst_qqmltranslation::translationChange()
QCOMPARE(object->property("text1").toString(), QString::fromUtf8("translate me"));
QCOMPARE(object->property("text2").toString(), QString::fromUtf8("translate me"));
QCOMPARE(object->property("text3").toString(), QString::fromUtf8("translate me"));
+ QCOMPARE(object->property("fromListModel").toString(), QString::fromUtf8("translate me"));
DummyTranslator translator;
QCoreApplication::installTranslator(&translator);
@@ -206,6 +207,7 @@ void tst_qqmltranslation::translationChange()
QCOMPARE(object->property("text1").toString(), QString::fromUtf8("xxx"));
QCOMPARE(object->property("text2").toString(), QString::fromUtf8("xxx"));
QCOMPARE(object->property("text3").toString(), QString::fromUtf8("xxx"));
+ QCOMPARE(object->property("fromListModel").toString(), QString::fromUtf8("xxx"));
QCoreApplication::removeTranslator(&translator);
}
diff --git a/tests/auto/qml/qqmltypeloader/tst_qqmltypeloader.cpp b/tests/auto/qml/qqmltypeloader/tst_qqmltypeloader.cpp
index d336d033a3..cf3bc8b050 100644
--- a/tests/auto/qml/qqmltypeloader/tst_qqmltypeloader.cpp
+++ b/tests/auto/qml/qqmltypeloader/tst_qqmltypeloader.cpp
@@ -87,7 +87,7 @@ void tst_QQMLTypeLoader::trimCache()
QUrl url = testFileUrl("trim_cache.qml");
url.setQuery(QString::number(i));
- QQmlTypeData *data = loader.getType(url);
+ QQmlTypeData *data = loader.getType(url).take();
// Run an event loop to receive the callback that release()es.
QTRY_COMPARE(data->count(), 2);
diff --git a/tests/auto/qml/qqmlvaluetypes/tst_qqmlvaluetypes.cpp b/tests/auto/qml/qqmlvaluetypes/tst_qqmlvaluetypes.cpp
index a456facd2f..1ee4510e30 100644
--- a/tests/auto/qml/qqmlvaluetypes/tst_qqmlvaluetypes.cpp
+++ b/tests/auto/qml/qqmlvaluetypes/tst_qqmlvaluetypes.cpp
@@ -1020,7 +1020,7 @@ void tst_qqmlvaluetypes::bindingAssignment()
// function assignment should fail without crashing
{
- QString warning1 = testFileUrl("bindingAssignment.2.qml").toString() + QLatin1String(":6:13: Invalid use of Qt.binding() in a binding declaration.");
+ QString warning1 = testFileUrl("bindingAssignment.2.qml").toString() + QLatin1String(":6:5: Invalid use of Qt.binding() in a binding declaration.");
QString warning2 = testFileUrl("bindingAssignment.2.qml").toString() + QLatin1String(":10: Cannot assign JavaScript function to value-type property");
QTest::ignoreMessage(QtWarningMsg, qPrintable(warning1));
QTest::ignoreMessage(QtWarningMsg, qPrintable(warning2));
@@ -1125,7 +1125,7 @@ void tst_qqmlvaluetypes::autoBindingRemoval()
{
QQmlComponent component(&engine, testFileUrl("autoBindingRemoval.3.qml"));
- QString warning = component.url().toString() + ":6:11: Unable to assign [undefined] to QRect";
+ QString warning = component.url().toString() + ":6:5: Unable to assign [undefined] to QRect";
QTest::ignoreMessage(QtWarningMsg, qPrintable(warning));
MyTypeObject *object = qobject_cast<MyTypeObject *>(component.create());
QVERIFY(object != nullptr);
diff --git a/tests/auto/qml/qv4mm/tst_qv4mm.cpp b/tests/auto/qml/qv4mm/tst_qv4mm.cpp
index d4ba363d00..07f8e9f1d1 100644
--- a/tests/auto/qml/qv4mm/tst_qv4mm.cpp
+++ b/tests/auto/qml/qv4mm/tst_qv4mm.cpp
@@ -28,6 +28,7 @@
#include <qtest.h>
#include <QQmlEngine>
+#include <QLoggingCategory>
#include <private/qv4mm_p.h>
class tst_qv4mm : public QObject
@@ -36,23 +37,15 @@ class tst_qv4mm : public QObject
private slots:
void gcStats();
- void tweaks();
};
void tst_qv4mm::gcStats()
{
- qputenv(QV4_MM_STATS, "1");
+ QLoggingCategory::setFilterRules("qt.qml.gc.*=true");
QQmlEngine engine;
engine.collectGarbage();
}
-void tst_qv4mm::tweaks()
-{
- qputenv(QV4_MM_MAXBLOCK_SHIFT, "5");
- qputenv(QV4_MM_MAX_CHUNK_SIZE, "65536");
- QQmlEngine engine;
-}
-
QTEST_MAIN(tst_qv4mm)
#include "tst_qv4mm.moc"
diff --git a/tests/auto/qmltest/rectangle/tst_rectangle.qml b/tests/auto/qmltest/rectangle/tst_rectangle.qml
index 9af55b6a79..cf57da0d73 100644
--- a/tests/auto/qmltest/rectangle/tst_rectangle.qml
+++ b/tests/auto/qmltest/rectangle/tst_rectangle.qml
@@ -48,7 +48,7 @@
**
****************************************************************************/
-import QtQuick 2.0
+import QtQuick 2.12
import QtTest 1.1
Item {
@@ -83,6 +83,17 @@ Item {
}
Rectangle {
+ id: horizontalGradient
+ width: 300
+ height: 100
+ gradient: Gradient {
+ orientation: Gradient.Horizontal
+ GradientStop { position: 0.0; color: "red" }
+ GradientStop { position: 1.0; color: "green" }
+ }
+ }
+
+ Rectangle {
id: rectangleborder
width: 300
height: 150
@@ -132,8 +143,18 @@ Item {
compare(gstops[0].color.toString(), "#ff0000")
compare(gstops[1].color.toString(), "#ffff00")
compare(gstops[2].color.toString(), "#008000")
+ compare(grad.orientation, Gradient.Vertical)
+ }
+
+ function test_horizontalGradient() {
+ var grad = horizontalGradient.gradient;
+ var gstops = grad.stops;
+ compare(gstops[0].color.toString(), "#ff0000")
+ compare(gstops[1].color.toString(), "#008000")
+ compare(grad.orientation, Gradient.Horizontal)
}
+
function test_borders() {
compare(rectangleborder.border.width, 1)
compare(rectangleborder.border.color.toString(), "#808080")
diff --git a/tests/auto/quick/qquickanimatedsprite/data/infiniteLoops.qml b/tests/auto/quick/qquickanimatedsprite/data/infiniteLoops.qml
new file mode 100644
index 0000000000..551329a457
--- /dev/null
+++ b/tests/auto/quick/qquickanimatedsprite/data/infiniteLoops.qml
@@ -0,0 +1,38 @@
+/****************************************************************************
+**
+** Copyright (C) 2018 The Qt Company Ltd.
+** Contact: https://www.qt.io/licensing/
+**
+** This file is part of the test suite of the Qt Toolkit.
+**
+** $QT_BEGIN_LICENSE:GPL-EXCEPT$
+** Commercial License Usage
+** Licensees holding valid commercial Qt licenses may use this file in
+** accordance with the commercial license agreement provided with the
+** Software or, alternatively, in accordance with the terms contained in
+** a written agreement between you and The Qt Company. For licensing terms
+** and conditions see https://www.qt.io/terms-conditions. For further
+** information use the contact form at https://www.qt.io/contact-us.
+**
+** GNU General Public License Usage
+** Alternatively, this file may be used under the terms of the GNU
+** General Public License version 3 as published by the Free Software
+** Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT
+** included in the packaging of this file. Please review the following
+** information to ensure the GNU General Public License requirements will
+** be met: https://www.gnu.org/licenses/gpl-3.0.html.
+**
+** $QT_END_LICENSE$
+**
+****************************************************************************/
+
+import QtQuick 2.0
+
+AnimatedSprite {
+ loops: AnimatedSprite.Infinite
+ source: "squarefacesprite.png"
+ frameCount: 6
+ frameDuration: 240
+ width: 160
+ height: 160
+}
diff --git a/tests/auto/quick/qquickanimatedsprite/tst_qquickanimatedsprite.cpp b/tests/auto/quick/qquickanimatedsprite/tst_qquickanimatedsprite.cpp
index d24ebd9878..4ca31fd957 100644
--- a/tests/auto/quick/qquickanimatedsprite/tst_qquickanimatedsprite.cpp
+++ b/tests/auto/quick/qquickanimatedsprite/tst_qquickanimatedsprite.cpp
@@ -53,6 +53,7 @@ private slots:
void test_largeAnimation();
void test_reparenting();
void test_changeSourceToSmallerImgKeepingBigFrameSize();
+ void test_infiniteLoops();
void test_implicitSize();
};
@@ -79,8 +80,13 @@ void tst_qquickanimatedsprite::test_properties()
QVERIFY(sprite->interpolate());
QCOMPARE(sprite->loops(), 30);
+ QSignalSpy finishedSpy(sprite, SIGNAL(finished()));
+ QVERIFY(finishedSpy.isValid());
+
sprite->setRunning(false);
QVERIFY(!sprite->running());
+ // The finished() signal shouldn't be emitted when running is manually set to false.
+ QCOMPARE(finishedSpy.count(), 0);
sprite->setInterpolate(false);
QVERIFY(!sprite->interpolate());
}
@@ -100,10 +106,15 @@ void tst_qquickanimatedsprite::test_runningChangedSignal()
QVERIFY(!sprite->running());
QSignalSpy runningChangedSpy(sprite, SIGNAL(runningChanged(bool)));
+ QSignalSpy finishedSpy(sprite, SIGNAL(finished()));
+ QVERIFY(finishedSpy.isValid());
+
sprite->setRunning(true);
QTRY_COMPARE(runningChangedSpy.count(), 1);
+ QCOMPARE(finishedSpy.count(), 0);
QTRY_VERIFY(!sprite->running());
QTRY_COMPARE(runningChangedSpy.count(), 2);
+ QCOMPARE(finishedSpy.count(), 1);
}
template <typename T>
@@ -357,6 +368,28 @@ void tst_qquickanimatedsprite::test_implicitSize()
QCOMPARE(frameImplicitHeightChangedSpy.count(), 1);
}
+void tst_qquickanimatedsprite::test_infiniteLoops()
+{
+ QQuickView window;
+ window.setSource(testFileUrl("infiniteLoops.qml"));
+ window.show();
+ QVERIFY(QTest::qWaitForWindowExposed(&window));
+ QVERIFY(window.rootObject());
+
+ QQuickAnimatedSprite* sprite = qobject_cast<QQuickAnimatedSprite*>(window.rootObject());
+ QVERIFY(sprite);
+
+ QTRY_VERIFY(sprite->running());
+
+ QSignalSpy finishedSpy(sprite, SIGNAL(finished()));
+ QVERIFY(finishedSpy.isValid());
+
+ // The finished() signal shouldn't be emitted for infinite animations.
+ const int previousFrame = sprite->currentFrame();
+ QTRY_VERIFY(sprite->currentFrame() != previousFrame);
+ QCOMPARE(finishedSpy.count(), 0);
+}
+
QTEST_MAIN(tst_qquickanimatedsprite)
#include "tst_qquickanimatedsprite.moc"
diff --git a/tests/auto/quick/qquickanimations/data/finished.qml b/tests/auto/quick/qquickanimations/data/finished.qml
new file mode 100644
index 0000000000..a18b321501
--- /dev/null
+++ b/tests/auto/quick/qquickanimations/data/finished.qml
@@ -0,0 +1,95 @@
+/****************************************************************************
+**
+** Copyright (C) 2018 The Qt Company Ltd.
+** Contact: https://www.qt.io/licensing/
+**
+** This file is part of the test suite of the Qt Toolkit.
+**
+** $QT_BEGIN_LICENSE:GPL-EXCEPT$
+** Commercial License Usage
+** Licensees holding valid commercial Qt licenses may use this file in
+** accordance with the commercial license agreement provided with the
+** Software or, alternatively, in accordance with the terms contained in
+** a written agreement between you and The Qt Company. For licensing terms
+** and conditions see https://www.qt.io/terms-conditions. For further
+** information use the contact form at https://www.qt.io/contact-us.
+**
+** GNU General Public License Usage
+** Alternatively, this file may be used under the terms of the GNU
+** General Public License version 3 as published by the Free Software
+** Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT
+** included in the packaging of this file. Please review the following
+** information to ensure the GNU General Public License requirements will
+** be met: https://www.gnu.org/licenses/gpl-3.0.html.
+**
+** $QT_END_LICENSE$
+**
+****************************************************************************/
+
+import QtQuick 2.12
+
+Item {
+ id: root
+ width: 400
+ height: 400
+
+ property bool finishedUsableInQml: false
+
+ property alias simpleTopLevelAnimation: simpleTopLevelAnimation
+ property real foo: 0
+
+ property alias transitionRect: transitionRect
+ property alias transition: transition
+ property alias animationWithinTransition: animationWithinTransition
+
+ property real bar: 0
+ property alias animationWithinBehavior: animationWithinBehavior
+ property alias behavior: behavior
+
+ NumberAnimation {
+ id: simpleTopLevelAnimation
+ target: root
+ property: "foo"
+ from: 0
+ to: 1
+ duration: 10
+
+ onFinished: finishedUsableInQml = true
+ }
+
+ Rectangle {
+ id: transitionRect
+ color: "green"
+ width: 50
+ height: 50
+ anchors.centerIn: parent
+
+ states: State {
+ name: "go"
+ }
+ transitions: Transition {
+ id: transition
+ to: "go"
+ SequentialAnimation {
+ NumberAnimation {
+ id: animationWithinTransition
+ duration: 10
+ property: "foo"
+ from: 1
+ to: 2
+ }
+ }
+ }
+ }
+
+ Behavior on bar {
+ id: behavior
+ NumberAnimation {
+ id: animationWithinBehavior
+ duration: 10
+ property: "bar"
+ from: 0
+ to: 1
+ }
+ }
+}
diff --git a/tests/auto/quick/qquickanimations/tst_qquickanimations.cpp b/tests/auto/quick/qquickanimations/tst_qquickanimations.cpp
index de86bb16db..3cfe03a376 100644
--- a/tests/auto/quick/qquickanimations/tst_qquickanimations.cpp
+++ b/tests/auto/quick/qquickanimations/tst_qquickanimations.cpp
@@ -105,6 +105,7 @@ private slots:
void pathSvgAnimation();
void pathLineUnspecifiedXYBug();
void unsetAnimatorProxyJobWindow();
+ void finished();
};
#define QTIMED_COMPARE(lhs, rhs) do { \
@@ -1612,6 +1613,79 @@ void tst_qquickanimations::unsetAnimatorProxyJobWindow()
QCOMPARE(proxy.job().data(), job);
}
+void tst_qquickanimations::finished()
+{
+ QQmlEngine engine;
+ QQmlComponent component(&engine, testFileUrl("finished.qml"));
+ QScopedPointer<QObject> root(component.create());
+ QVERIFY(root);
+
+ // Test that finished() is emitted for a simple top-level animation.
+ // (Each test is in its own block so that we can reuse the nice signal names :))
+ {
+ QQuickAbstractAnimation *simpleTopLevelAnimation
+ = root->property("simpleTopLevelAnimation").value<QQuickAbstractAnimation*>();
+ QVERIFY(simpleTopLevelAnimation);
+
+ QSignalSpy stoppedSpy(simpleTopLevelAnimation, SIGNAL(stopped()));
+ QVERIFY(stoppedSpy.isValid());
+
+ QSignalSpy finishedSpy(simpleTopLevelAnimation, SIGNAL(finished()));
+ QVERIFY(finishedSpy.isValid());
+
+ QVERIFY(simpleTopLevelAnimation->setProperty("running", QVariant(true)));
+ QTRY_COMPARE(stoppedSpy.count(), 1);
+ QCOMPARE(finishedSpy.count(), 1);
+
+ // Test that the signal is properly revisioned and hence accessible from QML.
+ QCOMPARE(root->property("finishedUsableInQml").toBool(), true);
+ }
+
+ // Test that finished() is not emitted for animations within a Transition.
+ {
+ QObject *transition = root->property("transition").value<QObject*>();
+ QVERIFY(transition);
+
+ QSignalSpy runningChangedSpy(transition, SIGNAL(runningChanged()));
+ QVERIFY(runningChangedSpy.isValid());
+
+ QQuickAbstractAnimation *animationWithinTransition
+ = root->property("animationWithinTransition").value<QQuickAbstractAnimation*>();
+ QVERIFY(animationWithinTransition);
+
+ QSignalSpy stoppedSpy(animationWithinTransition, SIGNAL(stopped()));
+ QVERIFY(stoppedSpy.isValid());
+
+ QSignalSpy finishedSpy(animationWithinTransition, SIGNAL(finished()));
+ QVERIFY(finishedSpy.isValid());
+
+ QObject *transitionRect = root->property("transitionRect").value<QObject*>();
+ QVERIFY(transitionRect);
+ QVERIFY(transitionRect->setProperty("state", QVariant(QLatin1String("go"))));
+ QTRY_COMPARE(runningChangedSpy.count(), 1);
+ QCOMPARE(stoppedSpy.count(), 0);
+ QCOMPARE(finishedSpy.count(), 0);
+ }
+
+ // Test that finished() is not emitted for animations within a Behavior.
+ {
+ QQuickAbstractAnimation *animationWithinBehavior
+ = root->property("animationWithinBehavior").value<QQuickAbstractAnimation*>();
+ QVERIFY(animationWithinBehavior);
+
+ QSignalSpy stoppedSpy(animationWithinBehavior, SIGNAL(stopped()));
+ QVERIFY(stoppedSpy.isValid());
+
+ QSignalSpy finishedSpy(animationWithinBehavior, SIGNAL(finished()));
+ QVERIFY(finishedSpy.isValid());
+
+ QVERIFY(root->setProperty("bar", QVariant(1.0)));
+ QTRY_COMPARE(root->property("bar").toReal(), 1.0);
+ QCOMPARE(stoppedSpy.count(), 0);
+ QCOMPARE(finishedSpy.count(), 0);
+ }
+}
+
QTEST_MAIN(tst_qquickanimations)
#include "tst_qquickanimations.moc"
diff --git a/tests/auto/quick/qquickdesignersupport/data/TestComponent.qml b/tests/auto/quick/qquickdesignersupport/data/TestComponent.qml
index 68f456af99..63d65b435c 100644
--- a/tests/auto/quick/qquickdesignersupport/data/TestComponent.qml
+++ b/tests/auto/quick/qquickdesignersupport/data/TestComponent.qml
@@ -4,6 +4,8 @@ Item {
width: 100
height: 62
- x: Math.max(0, 200)
+ // Add a dummy dependency to parent.x to ensure that the
+ // binding stays for the test.
+ x: parent.x + Math.max(0, 200) - parent.x
}
diff --git a/tests/auto/quick/qquickframebufferobject/tst_qquickframebufferobject.cpp b/tests/auto/quick/qquickframebufferobject/tst_qquickframebufferobject.cpp
index 805baebc7a..6aff66d61e 100644
--- a/tests/auto/quick/qquickframebufferobject/tst_qquickframebufferobject.cpp
+++ b/tests/auto/quick/qquickframebufferobject/tst_qquickframebufferobject.cpp
@@ -193,7 +193,7 @@ void tst_QQuickFramebufferObject::testThatStuffWorks()
view.show();
view.requestActivate();
- QVERIFY(QTest::qWaitForWindowActive(&view));
+ QVERIFY(QTest::qWaitForWindowExposed(&view));
QImage result = view.grabWindow();
@@ -233,7 +233,7 @@ void tst_QQuickFramebufferObject::testInvalidate()
view.show();
view.requestActivate();
- QVERIFY(QTest::qWaitForWindowActive(&view));
+ QVERIFY(QTest::qWaitForWindowExposed(&view));
QCOMPARE(frameInfo.fboSize, QSize(200, 200));
diff --git a/tests/auto/quick/qquickimageprovider/tst_qquickimageprovider.cpp b/tests/auto/quick/qquickimageprovider/tst_qquickimageprovider.cpp
index d8464ebc74..4b75a7e008 100644
--- a/tests/auto/quick/qquickimageprovider/tst_qquickimageprovider.cpp
+++ b/tests/auto/quick/qquickimageprovider/tst_qquickimageprovider.cpp
@@ -65,6 +65,7 @@ private slots:
void threadTest();
void asyncTextureTest();
+ void instantAsyncTextureTest();
private:
QString newImageFileName() const;
@@ -550,6 +551,70 @@ void tst_qquickimageprovider::asyncTextureTest()
}
}
+class InstantAsyncImageResponse : public QQuickImageResponse
+{
+ public:
+ InstantAsyncImageResponse(const QString &id, const QSize &requestedSize)
+ {
+ QImage image(50, 50, QImage::Format_RGB32);
+ image.fill(QColor(id).rgb());
+ if (requestedSize.isValid())
+ image = image.scaled(requestedSize);
+ m_texture = QQuickTextureFactory::textureFactoryForImage(image);
+ emit finished();
+ }
+
+ QQuickTextureFactory *textureFactory() const
+ {
+ return m_texture;
+ }
+
+ QQuickTextureFactory *m_texture;
+};
+
+class InstancAsyncProvider : public QQuickAsyncImageProvider
+{
+ public:
+ InstancAsyncProvider()
+ {
+ }
+
+ ~InstancAsyncProvider() {}
+
+ QQuickImageResponse *requestImageResponse(const QString &id, const QSize &requestedSize)
+ {
+ return new InstantAsyncImageResponse(id, requestedSize);
+ }
+};
+
+void tst_qquickimageprovider::instantAsyncTextureTest()
+{
+ QQmlEngine engine;
+
+ InstancAsyncProvider *provider = new InstancAsyncProvider;
+
+ engine.addImageProvider("test_instantasync", provider);
+ QVERIFY(engine.imageProvider("test_instantasync") != nullptr);
+
+ QString componentStr = "import QtQuick 2.0\nItem { \n"
+ "Image { source: \"image://test_instantasync/blue\"; }\n"
+ "Image { source: \"image://test_instantasync/red\"; }\n"
+ "Image { source: \"image://test_instantasync/green\"; }\n"
+ "Image { source: \"image://test_instantasync/yellow\"; }\n"
+ " }";
+ QQmlComponent component(&engine);
+ component.setData(componentStr.toLatin1(), QUrl::fromLocalFile(""));
+ QScopedPointer<QObject> obj(component.create());
+
+ QVERIFY(!obj.isNull());
+ const QList<QQuickImage *> images = obj->findChildren<QQuickImage *>();
+ QCOMPARE(images.count(), 4);
+
+ for (QQuickImage *img: images) {
+ QTRY_COMPARE(img->status(), QQuickImage::Ready);
+ }
+}
+
QTEST_MAIN(tst_qquickimageprovider)
diff --git a/tests/auto/quick/qquicklistview/tst_qquicklistview.cpp b/tests/auto/quick/qquicklistview/tst_qquicklistview.cpp
index c1daddb561..5d6708a765 100644
--- a/tests/auto/quick/qquicklistview/tst_qquicklistview.cpp
+++ b/tests/auto/quick/qquicklistview/tst_qquicklistview.cpp
@@ -118,6 +118,7 @@ private slots:
void noCurrentIndex();
void keyNavigation();
void keyNavigation_data();
+ void checkCountForMultiColumnModels();
void enforceRange();
void enforceRange_withoutHighlight();
void spacing();
@@ -1855,6 +1856,38 @@ void tst_QQuickListView::swapWithFirstItem()
delete testObject;
}
+void tst_QQuickListView::checkCountForMultiColumnModels()
+{
+ // Check that a list view will only load items for the first
+ // column, even if the model reports that it got several columns.
+ // We test this since QQmlDelegateModel has been changed to
+ // also understand multi-column models, but this should not affect ListView.
+ QScopedPointer<QQuickView> window(createView());
+
+ const int rowCount = 10;
+ const int columnCount = 10;
+
+ QaimModel model;
+ model.columns = columnCount;
+ for (int i = 0; i < rowCount; i++)
+ model.addItem("Item" + QString::number(i), "");
+
+ QQmlContext *ctxt = window->rootContext();
+ ctxt->setContextProperty("testModel", &model);
+
+ QScopedPointer<TestObject> testObject(new TestObject);
+ ctxt->setContextProperty("testObject", testObject.data());
+
+ window->setSource(testFileUrl("listviewtest.qml"));
+ window->show();
+ QVERIFY(QTest::qWaitForWindowExposed(window.data()));
+
+ QQuickListView *listview = findItem<QQuickListView>(window->rootObject(), "list");
+ QTRY_VERIFY(listview != nullptr);
+
+ QCOMPARE(listview->count(), rowCount);
+}
+
void tst_QQuickListView::enforceRange()
{
QScopedPointer<QQuickView> window(createView());
diff --git a/tests/auto/quick/qquickloader/tst_qquickloader.cpp b/tests/auto/quick/qquickloader/tst_qquickloader.cpp
index 7a176661e8..fd9fed39b5 100644
--- a/tests/auto/quick/qquickloader/tst_qquickloader.cpp
+++ b/tests/auto/quick/qquickloader/tst_qquickloader.cpp
@@ -737,7 +737,7 @@ void tst_QQuickLoader::initialPropertyValuesError_data()
<< (QStringList() << QString(testFileUrl("NonexistentSourceComponent.qml").toString() + ": No such file or directory"));
QTest::newRow("invalid source url") << testFileUrl("initialPropertyValues.error.3.qml")
- << (QStringList() << QString(testFileUrl("InvalidSourceComponent.qml").toString() + ":5:1: Syntax error"));
+ << (QStringList() << QString(testFileUrl("InvalidSourceComponent.qml").toString() + ":5:1: Expected token `:'"));
QTest::newRow("invalid initial property values object with invalid property access") << testFileUrl("initialPropertyValues.error.4.qml")
<< (QStringList() << QString(testFileUrl("initialPropertyValues.error.4.qml").toString() + ":7:5: QML Loader: setSource: value is not an object")
@@ -883,7 +883,7 @@ void tst_QQuickLoader::asynchronous_data()
<< (QStringList() << QString(testFileUrl("IDoNotExist.qml").toString() + ": No such file or directory"));
QTest::newRow("Invalid component") << testFileUrl("InvalidSourceComponent.qml")
- << (QStringList() << QString(testFileUrl("InvalidSourceComponent.qml").toString() + ":5:1: Syntax error"));
+ << (QStringList() << QString(testFileUrl("InvalidSourceComponent.qml").toString() + ":5:1: Expected token `:'"));
}
void tst_QQuickLoader::asynchronous()
diff --git a/tests/auto/quick/qquickpathview/tst_qquickpathview.cpp b/tests/auto/quick/qquickpathview/tst_qquickpathview.cpp
index 4211d08393..7a6f302403 100644
--- a/tests/auto/quick/qquickpathview/tst_qquickpathview.cpp
+++ b/tests/auto/quick/qquickpathview/tst_qquickpathview.cpp
@@ -366,6 +366,10 @@ void tst_QQuickPathView::insertModel_data()
void tst_QQuickPathView::insertModel()
{
+#ifdef Q_OS_MACOS
+ QSKIP("this test currently crashes on MacOS. See QTBUG-68048");
+#endif
+
QFETCH(int, mode);
QFETCH(int, idx);
QFETCH(int, count);
@@ -772,6 +776,10 @@ void tst_QQuickPathView::path()
void tst_QQuickPathView::dataModel()
{
+#ifdef Q_OS_MACOS
+ QSKIP("this test currently crashes on MacOS. See QTBUG-68047");
+#endif
+
QScopedPointer<QQuickView> window(createView());
window->show();
diff --git a/tests/auto/quick/qquickpositioners/tst_qquickpositioners.cpp b/tests/auto/quick/qquickpositioners/tst_qquickpositioners.cpp
index 0395b08f10..ec31acf035 100644
--- a/tests/auto/quick/qquickpositioners/tst_qquickpositioners.cpp
+++ b/tests/auto/quick/qquickpositioners/tst_qquickpositioners.cpp
@@ -40,6 +40,8 @@
using namespace QQuickViewTestUtil;
using namespace QQuickVisualTestUtil;
+Q_LOGGING_CATEGORY(lcTests, "qt.quick.tests")
+
class tst_qquickpositioners : public QQmlDataTest
{
Q_OBJECT
@@ -3772,6 +3774,10 @@ void tst_qquickpositioners::test_mirroring()
QList<QString> objectNames;
objectNames << "one" << "two" << "three" << "four" << "five";
+#ifdef Q_OS_MACOS
+ qputenv("QSG_RENDER_LOOP","basic"); // QTBUG-69040
+#endif
+
foreach (const QString qmlFile, qmlFiles) {
QScopedPointer<QQuickView> windowA(createView(testFile(qmlFile)));
QQuickItem *rootA = qobject_cast<QQuickItem*>(windowA->rootObject());
@@ -4007,15 +4013,19 @@ void tst_qquickpositioners::test_attachedproperties_dynamic()
QQuickView *tst_qquickpositioners::createView(const QString &filename, bool wait)
{
QQuickView *window = new QQuickView(nullptr);
- qDebug() << "1";
+ qCDebug(lcTests) << "created window";
window->setSource(QUrl::fromLocalFile(filename));
- qDebug() << "2";
+ qCDebug(lcTests) << "loaded content from" << filename;
window->show();
- qDebug() << "3";
+ qCDebug(lcTests) << "window shown";
+ bool exposed = true;
if (wait)
- QTest::qWaitForWindowExposed(window); //It may not relayout until the next frame, so it needs to be drawn
- qDebug() << "4";
+ exposed = QTest::qWaitForWindowExposed(window); //It may not relayout until the next frame, so it needs to be drawn
+ if (exposed)
+ qCDebug(lcTests) << "window exposed";
+ else
+ qCWarning(lcTests) << "window NOT exposed";
return window;
}
diff --git a/tests/auto/quick/qquickrepeater/data/ownership.qml b/tests/auto/quick/qquickrepeater/data/ownership.qml
new file mode 100644
index 0000000000..e13df3ab3a
--- /dev/null
+++ b/tests/auto/quick/qquickrepeater/data/ownership.qml
@@ -0,0 +1,4 @@
+import QtQuick 2.0
+
+Repeater {
+}
diff --git a/tests/auto/quick/qquickrepeater/data/package.qml b/tests/auto/quick/qquickrepeater/data/package.qml
new file mode 100644
index 0000000000..1f9eb0d970
--- /dev/null
+++ b/tests/auto/quick/qquickrepeater/data/package.qml
@@ -0,0 +1,35 @@
+import QtQuick 2.0
+import QtQml.Models 2.2
+import QtQuick.Window 2.0
+
+Window {
+ width: 300
+ height: 300
+ visible: true
+ DelegateModel {
+ id: mdl
+
+ model: 1
+ delegate: Package {
+ Item {
+ id: first
+ Package.name: "first"
+ objectName: "firstItem"
+ }
+ Item{
+ id: second
+ Package.name: "second"
+ objectName: "secondItem"
+ }
+ }
+ }
+
+ Repeater {
+ id: repeater1
+ model: mdl.parts.first
+ }
+ Repeater {
+ id: repeater2
+ model: mdl.parts.second
+ }
+}
diff --git a/tests/auto/quick/qquickrepeater/tst_qquickrepeater.cpp b/tests/auto/quick/qquickrepeater/tst_qquickrepeater.cpp
index 0499e2f9a6..0860956224 100644
--- a/tests/auto/quick/qquickrepeater/tst_qquickrepeater.cpp
+++ b/tests/auto/quick/qquickrepeater/tst_qquickrepeater.cpp
@@ -37,6 +37,7 @@
#include <QtQuick/private/qquicktext_p.h>
#include <QtQml/private/qqmllistmodel_p.h>
#include <QtQml/private/qqmlobjectmodel_p.h>
+#include <QtGui/qstandarditemmodel.h>
#include "../../shared/util.h"
#include "../shared/viewtestutil.h"
@@ -76,6 +77,8 @@ private slots:
void stackingOrder();
void objectModel();
void QTBUG54859_asynchronousMove();
+ void package();
+ void ownership();
};
class TestObject : public QObject
@@ -1014,6 +1017,91 @@ void tst_QQuickRepeater::QTBUG54859_asynchronousMove()
QTRY_COMPARE(item->property("finished"), QVariant(true));
}
+void tst_QQuickRepeater::package()
+{
+ QQmlEngine engine;
+ QQmlComponent component(&engine, testFileUrl("package.qml"));
+
+ QScopedPointer<QObject>o(component.create()); // don't crash!
+ QVERIFY(o != nullptr);
+
+ {
+ QQuickRepeater *repeater1 = qobject_cast<QQuickRepeater*>(qmlContext(o.data())->contextProperty("repeater1").value<QObject*>());
+ QVERIFY(repeater1);
+ QCOMPARE(repeater1->count(), 1);
+ QCOMPARE(repeater1->itemAt(0)->objectName(), "firstItem");
+ }
+
+ {
+ QQuickRepeater *repeater2 = qobject_cast<QQuickRepeater*>(qmlContext(o.data())->contextProperty("repeater2").value<QObject*>());
+ QVERIFY(repeater2);
+ QCOMPARE(repeater2->count(), 1);
+ QCOMPARE(repeater2->itemAt(0)->objectName(), "secondItem");
+ }
+}
+
+void tst_QQuickRepeater::ownership()
+{
+ QQmlEngine engine;
+
+ QQmlComponent component(&engine, testFileUrl("ownership.qml"));
+
+ QScopedPointer<QAbstractItemModel> aim(new QStandardItemModel);
+ QPointer<QAbstractItemModel> modelGuard(aim.data());
+ QQmlEngine::setObjectOwnership(aim.data(), QQmlEngine::JavaScriptOwnership);
+ {
+ QJSValue wrapper = engine.newQObject(aim.data());
+ }
+
+ QScopedPointer<QObject> repeater(component.create());
+ QVERIFY(!repeater.isNull());
+
+ QVERIFY(!QQmlData::keepAliveDuringGarbageCollection(aim.data()));
+
+ repeater->setProperty("model", QVariant::fromValue<QObject*>(aim.data()));
+
+ QVERIFY(!QQmlData::keepAliveDuringGarbageCollection(aim.data()));
+
+ engine.collectGarbage();
+ QCoreApplication::sendPostedEvents(nullptr, QEvent::DeferredDelete);
+
+ QVERIFY(modelGuard);
+
+ QScopedPointer<QQmlComponent> delegate(new QQmlComponent(&engine));
+ delegate->setData(QByteArrayLiteral("import QtQuick 2.0\nItem{}"), dataDirectoryUrl().resolved(QUrl("inline.qml")));
+ QPointer<QQmlComponent> delegateGuard(delegate.data());
+ QQmlEngine::setObjectOwnership(delegate.data(), QQmlEngine::JavaScriptOwnership);
+ {
+ QJSValue wrapper = engine.newQObject(delegate.data());
+ }
+
+ QVERIFY(!QQmlData::keepAliveDuringGarbageCollection(delegate.data()));
+
+ repeater->setProperty("delegate", QVariant::fromValue<QObject*>(delegate.data()));
+
+ QVERIFY(!QQmlData::keepAliveDuringGarbageCollection(delegate.data()));
+
+ engine.collectGarbage();
+ QCoreApplication::sendPostedEvents(nullptr, QEvent::DeferredDelete);
+
+ QVERIFY(delegateGuard);
+
+ repeater->setProperty("model", QVariant());
+ repeater->setProperty("delegate", QVariant());
+
+ QVERIFY(delegateGuard);
+ QVERIFY(modelGuard);
+
+ delegate.take();
+ aim.take();
+
+ engine.collectGarbage();
+ QCoreApplication::sendPostedEvents(nullptr, QEvent::DeferredDelete);
+
+ QVERIFY(!delegateGuard);
+ QVERIFY(!modelGuard);
+}
+
QTEST_MAIN(tst_QQuickRepeater)
#include "tst_qquickrepeater.moc"
diff --git a/tests/auto/quick/qquickshape/qquickshape.pro b/tests/auto/quick/qquickshape/qquickshape.pro
index 29c3502b86..a0e5c002e0 100644
--- a/tests/auto/quick/qquickshape/qquickshape.pro
+++ b/tests/auto/quick/qquickshape/qquickshape.pro
@@ -9,27 +9,5 @@ include (../shared/util.pri)
TESTDATA = data/*
-HEADERS += \
- ../../../../src/imports/shapes/qquickshape_p.h \
- ../../../../src/imports/shapes/qquickshape_p_p.h \
- ../../../../src/imports/shapes/qquickshapegenericrenderer_p.h \
- ../../../../src/imports/shapes/qquickshapesoftwarerenderer_p.h
-
-SOURCES += \
- ../../../../src/imports/shapes/qquickshape.cpp \
- ../../../../src/imports/shapes/qquickshapegenericrenderer.cpp \
- ../../../../src/imports/shapes/qquickshapesoftwarerenderer.cpp
-
-qtConfig(opengl) {
- HEADERS += \
- ../../../../src/imports/shapes/qquicknvprfunctions_p.h \
- ../../../../src/imports/shapes/qquicknvprfunctions_p_p.h \
- ../../../../src/imports/shapes/qquickshapenvprrenderer_p.h
-
- SOURCES += \
- ../../../../src/imports/shapes/qquicknvprfunctions.cpp \
- ../../../../src/imports/shapes/qquickshapenvprrenderer.cpp
-}
-
-QT += core-private gui-private qml-private quick-private testlib
+QT += core-private gui-private qml-private quick-private testlib quickshapes-private
qtHaveModule(widgets): QT += widgets
diff --git a/tests/auto/quick/qquickshape/tst_qquickshape.cpp b/tests/auto/quick/qquickshape/tst_qquickshape.cpp
index 2a349d2013..72f987ce4a 100644
--- a/tests/auto/quick/qquickshape/tst_qquickshape.cpp
+++ b/tests/auto/quick/qquickshape/tst_qquickshape.cpp
@@ -33,7 +33,7 @@
#include <QtQml/qqmlcontext.h>
#include <QtQml/qqmlexpression.h>
#include <QtQml/qqmlincubator.h>
-#include "../../../../src/imports/shapes/qquickshape_p.h"
+#include <QtQuickShapes/private/qquickshape_p.h>
#include "../../shared/util.h"
#include "../shared/viewtestutil.h"
diff --git a/tests/auto/quick/qquicktableview/data/countingtableview.qml b/tests/auto/quick/qquicktableview/data/countingtableview.qml
new file mode 100644
index 0000000000..d8315be54f
--- /dev/null
+++ b/tests/auto/quick/qquicktableview/data/countingtableview.qml
@@ -0,0 +1,85 @@
+/****************************************************************************
+**
+** Copyright (C) 2018 The Qt Company Ltd.
+** Contact: https://www.qt.io/licensing/
+**
+** This file is part of the QtQuick module of the Qt Toolkit.
+**
+** $QT_BEGIN_LICENSE:LGPL$
+** Commercial License Usage
+** Licensees holding valid commercial Qt licenses may use this file in
+** accordance with the commercial license agreement provided with the
+** Software or, alternatively, in accordance with the terms contained in
+** a written agreement between you and The Qt Company. For licensing terms
+** and conditions see https://www.qt.io/terms-conditions. For further
+** information use the contact form at https://www.qt.io/contact-us.
+**
+** GNU Lesser General Public License Usage
+** Alternatively, this file may be used under the terms of the GNU Lesser
+** General Public License version 3 as published by the Free Software
+** Foundation and appearing in the file LICENSE.LGPL3 included in the
+** packaging of this file. Please review the following information to
+** ensure the GNU Lesser General Public License version 3 requirements
+** will be met: https://www.gnu.org/licenses/lgpl-3.0.html.
+**
+** GNU General Public License Usage
+** Alternatively, this file may be used under the terms of the GNU
+** General Public License version 2.0 or (at your option) the GNU General
+** Public license version 3 or any later version approved by the KDE Free
+** Qt Foundation. The licenses are as published by the Free Software
+** Foundation and appearing in the file LICENSE.GPL2 and LICENSE.GPL3
+** included in the packaging of this file. Please review the following
+** information to ensure the GNU General Public License requirements will
+** be met: https://www.gnu.org/licenses/gpl-2.0.html and
+** https://www.gnu.org/licenses/gpl-3.0.html.
+**
+** $QT_END_LICENSE$
+**
+****************************************************************************/
+
+import QtQuick 2.12
+import QtQuick.Window 2.3
+import Qt.labs.tableview 1.0
+
+Item {
+ id: root
+ width: 640
+ height: 450
+
+ property alias tableView: tableView
+ property int currentDelegateCount: 0
+ property int maxDelegateCount: 0
+
+ TableView {
+ id: tableView
+ width: 600
+ height: 400
+ anchors.margins: 1
+ clip: true
+ delegate: tableViewDelegate
+ cacheBuffer: 0
+ }
+
+ Component {
+ id: tableViewDelegate
+ Rectangle {
+ objectName: "tableViewDelegate"
+ TableView.cellWidth: 100
+ TableView.cellHeight: 50
+ color: "lightgray"
+ border.width: 1
+ Text {
+ anchors.centerIn: parent
+ text: modelData
+ }
+ Component.onCompleted: {
+ currentDelegateCount++;
+ maxDelegateCount = Math.max(maxDelegateCount, currentDelegateCount);
+ }
+ Component.onDestruction: {
+ currentDelegateCount--;
+ }
+ }
+ }
+
+}
diff --git a/tests/auto/quick/qquicktableview/data/plaintableview.qml b/tests/auto/quick/qquicktableview/data/plaintableview.qml
new file mode 100644
index 0000000000..7668f0ca01
--- /dev/null
+++ b/tests/auto/quick/qquicktableview/data/plaintableview.qml
@@ -0,0 +1,80 @@
+/****************************************************************************
+**
+** Copyright (C) 2018 The Qt Company Ltd.
+** Contact: https://www.qt.io/licensing/
+**
+** This file is part of the QtQuick module of the Qt Toolkit.
+**
+** $QT_BEGIN_LICENSE:LGPL$
+** Commercial License Usage
+** Licensees holding valid commercial Qt licenses may use this file in
+** accordance with the commercial license agreement provided with the
+** Software or, alternatively, in accordance with the terms contained in
+** a written agreement between you and The Qt Company. For licensing terms
+** and conditions see https://www.qt.io/terms-conditions. For further
+** information use the contact form at https://www.qt.io/contact-us.
+**
+** GNU Lesser General Public License Usage
+** Alternatively, this file may be used under the terms of the GNU Lesser
+** General Public License version 3 as published by the Free Software
+** Foundation and appearing in the file LICENSE.LGPL3 included in the
+** packaging of this file. Please review the following information to
+** ensure the GNU Lesser General Public License version 3 requirements
+** will be met: https://www.gnu.org/licenses/lgpl-3.0.html.
+**
+** GNU General Public License Usage
+** Alternatively, this file may be used under the terms of the GNU
+** General Public License version 2.0 or (at your option) the GNU General
+** Public license version 3 or any later version approved by the KDE Free
+** Qt Foundation. The licenses are as published by the Free Software
+** Foundation and appearing in the file LICENSE.GPL2 and LICENSE.GPL3
+** included in the packaging of this file. Please review the following
+** information to ensure the GNU General Public License requirements will
+** be met: https://www.gnu.org/licenses/gpl-2.0.html and
+** https://www.gnu.org/licenses/gpl-3.0.html.
+**
+** $QT_END_LICENSE$
+**
+****************************************************************************/
+
+import QtQuick 2.12
+import QtQuick.Window 2.3
+import Qt.labs.tableview 1.0
+
+Item {
+ width: 640
+ height: 450
+
+ property alias tableView: tableView
+ property real delegateWidth: 100
+ property real delegateHeight: 50
+ property Component delegate: tableViewDelegate
+
+ TableView {
+ id: tableView
+ width: 600
+ height: 400
+ anchors.margins: 1
+ clip: true
+ delegate: tableViewDelegate
+ cacheBuffer: 0
+ columnSpacing: 1
+ rowSpacing: 1
+ }
+
+ Component {
+ id: tableViewDelegate
+ Rectangle {
+ objectName: "tableViewDelegate"
+ TableView.cellWidth: delegateWidth
+ TableView.cellHeight: delegateHeight
+ color: "lightgray"
+ border.width: 1
+ Text {
+ anchors.centerIn: parent
+ text: modelData
+ }
+ }
+ }
+
+}
diff --git a/tests/auto/quick/qquicktableview/data/tableviewimplicitsize.qml b/tests/auto/quick/qquicktableview/data/tableviewimplicitsize.qml
new file mode 100644
index 0000000000..65e4d0861c
--- /dev/null
+++ b/tests/auto/quick/qquicktableview/data/tableviewimplicitsize.qml
@@ -0,0 +1,66 @@
+/****************************************************************************
+**
+** Copyright (C) 2018 The Qt Company Ltd.
+** Contact: https://www.qt.io/licensing/
+**
+** This file is part of the test suite of the Qt Toolkit.
+**
+** $QT_BEGIN_LICENSE:GPL-EXCEPT$
+** Commercial License Usage
+** Licensees holding valid commercial Qt licenses may use this file in
+** accordance with the commercial license agreement provided with the
+** Software or, alternatively, in accordance with the terms contained in
+** a written agreement between you and The Qt Company. For licensing terms
+** and conditions see https://www.qt.io/terms-conditions. For further
+** information use the contact form at https://www.qt.io/contact-us.
+**
+** GNU General Public License Usage
+** Alternatively, this file may be used under the terms of the GNU
+** General Public License version 3 as published by the Free Software
+** Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT
+** included in the packaging of this file. Please review the following
+** information to ensure the GNU General Public License requirements will
+** be met: https://www.gnu.org/licenses/gpl-3.0.html.
+**
+** $QT_END_LICENSE$
+**
+****************************************************************************/
+
+import QtQuick 2.12
+import QtQuick.Window 2.3
+import Qt.labs.tableview 1.0
+
+Item {
+ width: 640
+ height: 450
+
+ property alias tableView: tableView
+
+ TableView {
+ id: tableView
+ width: 600
+ height: 400
+ anchors.margins: 1
+ clip: true
+ delegate: tableViewDelegate
+ cacheBuffer: 0
+ columnSpacing: 1
+ rowSpacing: 1
+ }
+
+ Component {
+ id: tableViewDelegate
+ Rectangle {
+ objectName: "tableViewDelegate"
+ color: "lightgray"
+ border.width: 1
+ implicitWidth: 90
+ implicitHeight: 60
+ Text {
+ anchors.centerIn: parent
+ text: modelData
+ }
+ }
+ }
+
+}
diff --git a/tests/auto/quick/qquicktableview/qquicktableview.pro b/tests/auto/quick/qquicktableview/qquicktableview.pro
new file mode 100644
index 0000000000..f4d0265dd3
--- /dev/null
+++ b/tests/auto/quick/qquicktableview/qquicktableview.pro
@@ -0,0 +1,14 @@
+CONFIG += testcase
+TARGET = tst_qquicktableview
+macos:CONFIG -= app_bundle
+
+HEADERS += testmodel.h
+SOURCES += tst_qquicktableview.cpp
+
+include (../../shared/util.pri)
+include (../shared/util.pri)
+
+TESTDATA = data/*
+
+QT += core-private gui-private qml-private quick-private testlib
+
diff --git a/tests/auto/quick/qquicktableview/testmodel.h b/tests/auto/quick/qquicktableview/testmodel.h
new file mode 100644
index 0000000000..06384f7a5e
--- /dev/null
+++ b/tests/auto/quick/qquicktableview/testmodel.h
@@ -0,0 +1,89 @@
+/****************************************************************************
+**
+** Copyright (C) 2018 The Qt Company Ltd.
+** Contact: https://www.qt.io/licensing/
+**
+** This file is part of the test suite of the Qt Toolkit.
+**
+** $QT_BEGIN_LICENSE:GPL-EXCEPT$
+** Commercial License Usage
+** Licensees holding valid commercial Qt licenses may use this file in
+** accordance with the commercial license agreement provided with the
+** Software or, alternatively, in accordance with the terms contained in
+** a written agreement between you and The Qt Company. For licensing terms
+** and conditions see https://www.qt.io/terms-conditions. For further
+** information use the contact form at https://www.qt.io/contact-us.
+**
+** GNU General Public License Usage
+** Alternatively, this file may be used under the terms of the GNU
+** General Public License version 3 as published by the Free Software
+** Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT
+** included in the packaging of this file. Please review the following
+** information to ensure the GNU General Public License requirements will
+** be met: https://www.gnu.org/licenses/gpl-3.0.html.
+**
+** $QT_END_LICENSE$
+**
+****************************************************************************/
+
+#include <QtCore/QtCore>
+#include <QtGui/QStandardItemModel>
+
+class TestModel : public QAbstractTableModel
+{
+ Q_OBJECT
+ Q_PROPERTY(int rowCount READ rowCount WRITE setRowCount NOTIFY rowCountChanged)
+ Q_PROPERTY(int columnCount READ columnCount WRITE setColumnCount NOTIFY columnCountChanged)
+
+public:
+ TestModel(QObject *parent = nullptr)
+ : QAbstractTableModel(parent)
+ {}
+
+ TestModel(int rows, int columns, QObject *parent = nullptr)
+ : QAbstractTableModel(parent)
+ , m_rows(rows)
+ , m_columns(columns)
+ {}
+
+ int rowCount(const QModelIndex & = QModelIndex()) const override { return m_rows; }
+ void setRowCount(int count) { beginResetModel(); m_rows = count; emit rowCountChanged(); endResetModel(); }
+
+ int columnCount(const QModelIndex & = QModelIndex()) const override { return m_columns; }
+ void setColumnCount(int count) { beginResetModel(); m_columns = count; emit columnCountChanged(); endResetModel(); }
+
+ QVariant data(const QModelIndex &index, int role) const override
+ {
+ if (!index.isValid() || role != Qt::DisplayRole)
+ return QVariant();
+
+ int cell = index.row() + (index.column() * m_columns);
+ if (selectedCells.contains(cell))
+ return QStringLiteral("selected");
+ return QString("%1").arg(index.row());
+ }
+
+ QHash<int, QByteArray> roleNames() const override
+ {
+ return { {Qt::DisplayRole, "display"} };
+ }
+
+ Q_INVOKABLE void selectCell(int row, int column)
+ {
+ int cell = row + (column * m_columns);
+ selectedCells.insert(cell);
+ auto index = createIndex(row, column, nullptr);
+ emit dataChanged(index, index);
+ }
+
+signals:
+ void rowCountChanged();
+ void columnCountChanged();
+
+private:
+ int m_rows = 0;
+ int m_columns = 0;
+ QSet<int> selectedCells;
+};
+
+#define TestModelAsVariant(...) QVariant::fromValue(QSharedPointer<TestModel>(new TestModel(__VA_ARGS__)))
diff --git a/tests/auto/quick/qquicktableview/tst_qquicktableview.cpp b/tests/auto/quick/qquicktableview/tst_qquicktableview.cpp
new file mode 100644
index 0000000000..1de40aaae0
--- /dev/null
+++ b/tests/auto/quick/qquicktableview/tst_qquicktableview.cpp
@@ -0,0 +1,822 @@
+/****************************************************************************
+**
+** Copyright (C) 2018 The Qt Company Ltd.
+** Contact: https://www.qt.io/licensing/
+**
+** This file is part of the test suite of the Qt Toolkit.
+**
+** $QT_BEGIN_LICENSE:GPL-EXCEPT$
+** Commercial License Usage
+** Licensees holding valid commercial Qt licenses may use this file in
+** accordance with the commercial license agreement provided with the
+** Software or, alternatively, in accordance with the terms contained in
+** a written agreement between you and The Qt Company. For licensing terms
+** and conditions see https://www.qt.io/terms-conditions. For further
+** information use the contact form at https://www.qt.io/contact-us.
+**
+** GNU General Public License Usage
+** Alternatively, this file may be used under the terms of the GNU
+** General Public License version 3 as published by the Free Software
+** Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT
+** included in the packaging of this file. Please review the following
+** information to ensure the GNU General Public License requirements will
+** be met: https://www.gnu.org/licenses/gpl-3.0.html.
+**
+** $QT_END_LICENSE$
+**
+****************************************************************************/
+
+#include <QtTest/QtTest>
+
+#include <QtQuick/qquickview.h>
+#include <QtQuick/private/qquicktableview_p.h>
+#include <QtQuick/private/qquicktableview_p_p.h>
+
+#include <QtQml/qqmlengine.h>
+#include <QtQml/qqmlcontext.h>
+#include <QtQml/qqmlexpression.h>
+#include <QtQml/qqmlincubator.h>
+#include <QtQml/private/qqmlobjectmodel_p.h>
+#include <QtQml/private/qqmllistmodel_p.h>
+#include <QtQml/private/qqmldelegatemodel_p.h>
+
+#include "testmodel.h"
+
+#include "../../shared/util.h"
+#include "../shared/viewtestutil.h"
+#include "../shared/visualtestutil.h"
+
+using namespace QQuickViewTestUtil;
+using namespace QQuickVisualTestUtil;
+
+static const char* kTableViewPropName = "tableView";
+static const char* kDelegateObjectName = "tableViewDelegate";
+
+Q_DECLARE_METATYPE(QMarginsF);
+
+#define LOAD_TABLEVIEW(fileName) \
+ QScopedPointer<QQuickView> view(createView()); \
+ view->setSource(testFileUrl(fileName)); \
+ view->show(); \
+ QVERIFY(QTest::qWaitForWindowActive(view.data())); \
+ auto tableView = view->rootObject()->property(kTableViewPropName).value<QQuickTableView *>(); \
+ QVERIFY(tableView); \
+ auto tableViewPrivate = QQuickTableViewPrivate::get(tableView); \
+ Q_UNUSED(tableViewPrivate)
+
+#define WAIT_UNTIL_POLISHED \
+ QVERIFY(tableViewPrivate->polishScheduled); \
+ QTRY_VERIFY(!tableViewPrivate->polishScheduled)
+
+class tst_QQuickTableView : public QQmlDataTest
+{
+ Q_OBJECT
+public:
+ tst_QQuickTableView();
+
+ QQuickTableViewAttached *getAttachedObject(const QObject *object) const;
+ FxTableItem *findFxTableItem(int row, int column, const QList<FxTableItem *> items) const;
+ FxTableItem *findLoadedBottomRightItem(const QList<FxTableItem *> items) const;
+
+private slots:
+ void initTestCase() override;
+
+ void setAndGetModel_data();
+ void setAndGetModel();
+ void emptyModel_data();
+ void emptyModel();
+ void checkZeroSizedDelegate();
+ void checkImplicitSizeDelegate();
+ void noDelegate();
+ void countDelegateItems_data();
+ void countDelegateItems();
+ void checkLayoutOfEqualSizedDelegateItems_data();
+ void checkLayoutOfEqualSizedDelegateItems();
+ void checkTableMargins_data();
+ void checkTableMargins();
+ void fillTableViewButNothingMore_data();
+ void fillTableViewButNothingMore();
+ void checkInitialAttachedProperties_data();
+ void checkInitialAttachedProperties();
+ void flick_data();
+ void flick();
+ void flickOvershoot_data();
+ void flickOvershoot();
+ void checkRowColumnCount();
+};
+
+tst_QQuickTableView::tst_QQuickTableView()
+{
+}
+
+void tst_QQuickTableView::initTestCase()
+{
+ QQmlDataTest::initTestCase();
+ qmlRegisterType<TestModel>("TestModel", 0, 1, "TestModel");
+}
+
+QQuickTableViewAttached *tst_QQuickTableView::getAttachedObject(const QObject *object) const
+{
+ QObject *attachedObject = qmlAttachedPropertiesObject<QQuickTableView>(object);
+ return static_cast<QQuickTableViewAttached *>(attachedObject);
+}
+
+FxTableItem *tst_QQuickTableView::findFxTableItem(int row, int column, const QList<FxTableItem *> items) const
+{
+ for (int i = 0; i < items.count(); ++i) {
+ FxTableItem *fxitem = items[i];
+ auto attached = getAttachedObject(fxitem->item);
+ if (row == attached->row() && column == attached->column())
+ return fxitem;
+ }
+ return nullptr;
+}
+
+FxTableItem *tst_QQuickTableView::findLoadedBottomRightItem(const QList<FxTableItem *> items) const
+{
+ FxTableItem *bottomRightItem = nullptr;
+ int bottomRightIndex = 0;
+
+ for (int i = items.count() - 1; i > 0; --i) {
+ FxTableItem *fxitem = items[i];
+ if (fxitem->index > bottomRightIndex) {
+ bottomRightItem = fxitem;
+ bottomRightIndex = fxitem->index;
+ }
+ }
+ return bottomRightItem;
+}
+
+void tst_QQuickTableView::setAndGetModel_data()
+{
+ QTest::addColumn<QVariant>("model");
+
+ QTest::newRow("QAIM 1x1") << TestModelAsVariant(1, 1);
+ QTest::newRow("Number model 1") << QVariant::fromValue(1);
+ QTest::newRow("QStringList 1") << QVariant::fromValue(QStringList() << "one");
+}
+
+void tst_QQuickTableView::setAndGetModel()
+{
+ // Test that we can set and get different kind of models
+ QFETCH(QVariant, model);
+ LOAD_TABLEVIEW("plaintableview.qml");
+
+ tableView->setModel(model);
+ QCOMPARE(model, tableView->model());
+}
+
+void tst_QQuickTableView::emptyModel_data()
+{
+ QTest::addColumn<QVariant>("model");
+
+ QTest::newRow("QAIM") << TestModelAsVariant(0, 0);
+ QTest::newRow("Number model") << QVariant::fromValue(0);
+ QTest::newRow("QStringList") << QVariant::fromValue(QStringList());
+}
+
+void tst_QQuickTableView::emptyModel()
+{
+ // Check that if we assign an empty model to
+ // TableView, no delegate items will be created.
+ QFETCH(QVariant, model);
+ LOAD_TABLEVIEW("plaintableview.qml");
+
+ tableView->setModel(model);
+ WAIT_UNTIL_POLISHED;
+ QCOMPARE(tableViewPrivate->loadedItems.count(), 0);
+}
+
+void tst_QQuickTableView::checkZeroSizedDelegate()
+{
+ // Check that if we assign a delegate with empty width and height, we
+ // fall back to use kDefaultColumnWidth and kDefaultRowHeight as
+ // column/row sizes.
+ LOAD_TABLEVIEW("plaintableview.qml");
+
+ auto model = TestModelAsVariant(100, 100);
+ tableView->setModel(model);
+
+ view->rootObject()->setProperty("delegateWidth", 0);
+ view->rootObject()->setProperty("delegateHeight", 0);
+
+ WAIT_UNTIL_POLISHED;
+
+ auto items = tableViewPrivate->loadedItems;
+ QVERIFY(!items.isEmpty());
+
+ for (auto fxItem : tableViewPrivate->loadedItems) {
+ auto item = fxItem->item;
+ QCOMPARE(item->width(), kDefaultColumnWidth);
+ QCOMPARE(item->height(), kDefaultRowHeight);
+ }
+}
+
+void tst_QQuickTableView::checkImplicitSizeDelegate()
+{
+ // Check that we can set the size of delegate items using
+ // implicit width/height, instead of forcing the user to
+ // create an attached object by using TableView.cellWidth/Height.
+ LOAD_TABLEVIEW("tableviewimplicitsize.qml");
+
+ auto model = TestModelAsVariant(100, 100);
+ tableView->setModel(model);
+
+ WAIT_UNTIL_POLISHED;
+
+ auto items = tableViewPrivate->loadedItems;
+ QVERIFY(!items.isEmpty());
+
+ for (auto fxItem : tableViewPrivate->loadedItems) {
+ auto item = fxItem->item;
+ QCOMPARE(item->width(), 90);
+ QCOMPARE(item->height(), 60);
+ }
+}
+
+void tst_QQuickTableView::noDelegate()
+{
+ // Check that you can skip setting a delegate without
+ // it causing any problems (like crashing or asserting).
+ // And then set a delegate, and do a quick check that the
+ // view gets populated as expected.
+ LOAD_TABLEVIEW("plaintableview.qml");
+
+ const int rows = 5;
+ const int columns = 5;
+ auto model = TestModelAsVariant(columns, rows);
+ tableView->setModel(model);
+
+ // Start with no delegate, and check
+ // that we end up with no items in the table.
+ tableView->setDelegate(nullptr);
+
+ WAIT_UNTIL_POLISHED;
+
+ auto items = tableViewPrivate->loadedItems;
+ QVERIFY(items.isEmpty());
+
+ // Set a delegate, and check that we end
+ // up with the expected number of items.
+ auto delegate = view->rootObject()->property("delegate").value<QQmlComponent *>();
+ QVERIFY(delegate);
+ tableView->setDelegate(delegate);
+
+ WAIT_UNTIL_POLISHED;
+
+ items = tableViewPrivate->loadedItems;
+ QCOMPARE(items.count(), rows * columns);
+
+ // And then unset the delegate again, and check
+ // that we end up with no items.
+ tableView->setDelegate(nullptr);
+
+ WAIT_UNTIL_POLISHED;
+
+ items = tableViewPrivate->loadedItems;
+ QVERIFY(items.isEmpty());
+}
+
+void tst_QQuickTableView::countDelegateItems_data()
+{
+ QTest::addColumn<QVariant>("model");
+ QTest::addColumn<int>("count");
+
+ QTest::newRow("QAIM 1x1") << TestModelAsVariant(1, 1) << 1;
+ QTest::newRow("QAIM 2x1") << TestModelAsVariant(2, 1) << 2;
+ QTest::newRow("QAIM 1x2") << TestModelAsVariant(1, 2) << 2;
+ QTest::newRow("QAIM 2x2") << TestModelAsVariant(2, 2) << 4;
+ QTest::newRow("QAIM 4x4") << TestModelAsVariant(4, 4) << 16;
+
+ QTest::newRow("Number model 1") << QVariant::fromValue(1) << 1;
+ QTest::newRow("Number model 4") << QVariant::fromValue(4) << 4;
+
+ QTest::newRow("QStringList 1") << QVariant::fromValue(QStringList() << "one") << 1;
+ QTest::newRow("QStringList 4") << QVariant::fromValue(QStringList() << "one" << "two" << "three" << "four") << 4;
+}
+
+void tst_QQuickTableView::countDelegateItems()
+{
+ // Assign different models of various sizes, and check that the number of
+ // delegate items in the view matches the size of the model. Note that for
+ // this test to be valid, all items must be within the visible area of the view.
+ QFETCH(QVariant, model);
+ QFETCH(int, count);
+ LOAD_TABLEVIEW("plaintableview.qml");
+
+ tableView->setModel(model);
+ WAIT_UNTIL_POLISHED;
+
+ // Check that tableview internals contain the expected number of items
+ auto const items = tableViewPrivate->loadedItems;
+ QCOMPARE(items.count(), count);
+
+ // Check that this also matches the items found in the view
+ auto foundItems = findItems<QQuickItem>(tableView, kDelegateObjectName);
+ QCOMPARE(foundItems.count(), count);
+}
+
+void tst_QQuickTableView::checkLayoutOfEqualSizedDelegateItems_data()
+{
+ QTest::addColumn<QVariant>("model");
+ QTest::addColumn<QSize>("tableSize");
+ QTest::addColumn<QSizeF>("spacing");
+ QTest::addColumn<QMarginsF>("margins");
+
+ // Check spacing together with different table setups
+ QTest::newRow("QAIM 1x1 1,1") << TestModelAsVariant(1, 1) << QSize(1, 1) << QSizeF(1, 1) << QMarginsF(0, 0, 0, 0);
+ QTest::newRow("QAIM 5x5 0,0") << TestModelAsVariant(5, 5) << QSize(5, 5) << QSizeF(0, 0) << QMarginsF(0, 0, 0, 0);
+ QTest::newRow("QAIM 5x5 1,0") << TestModelAsVariant(5, 5) << QSize(5, 5) << QSizeF(1, 0) << QMarginsF(0, 0, 0, 0);
+ QTest::newRow("QAIM 5x5 0,1") << TestModelAsVariant(5, 5) << QSize(5, 5) << QSizeF(0, 1) << QMarginsF(0, 0, 0, 0);
+
+ // Check spacing together with margins
+ QTest::newRow("QAIM 1x1 1,1 5555") << TestModelAsVariant(1, 1) << QSize(1, 1) << QSizeF(1, 1) << QMarginsF(5, 5, 5, 5);
+ QTest::newRow("QAIM 4x4 0,0 3333") << TestModelAsVariant(4, 4) << QSize(4, 4) << QSizeF(0, 0) << QMarginsF(3, 3, 3, 3);
+ QTest::newRow("QAIM 4x4 2,2 1234") << TestModelAsVariant(4, 4) << QSize(4, 4) << QSizeF(2, 2) << QMarginsF(1, 2, 3, 4);
+
+ // Check "list" models
+ QTest::newRow("NumberModel 1x4, 0000") << QVariant::fromValue(4) << QSize(1, 4) << QSizeF(1, 1) << QMarginsF(0, 0, 0, 0);
+ QTest::newRow("QStringList 1x4, 0,0 1111") << QVariant::fromValue(QStringList() << "one" << "two" << "three" << "four")
+ << QSize(1, 4) << QSizeF(0, 0) << QMarginsF(1, 1, 1, 1);
+}
+
+void tst_QQuickTableView::checkLayoutOfEqualSizedDelegateItems()
+{
+ // Check that the geometry of the delegate items are correct
+ QFETCH(QVariant, model);
+ QFETCH(QSize, tableSize);
+ QFETCH(QSizeF, spacing);
+ QFETCH(QMarginsF, margins);
+ LOAD_TABLEVIEW("plaintableview.qml");
+
+ const qreal expectedItemWidth = 100;
+ const qreal expectedItemHeight = 50;
+ const int expectedItemCount = tableSize.width() * tableSize.height();
+
+ tableView->setModel(model);
+ tableView->setRowSpacing(spacing.height());
+ tableView->setColumnSpacing(spacing.width());
+ tableView->setLeftMargin(margins.left());
+ tableView->setTopMargin(margins.top());
+ tableView->setRightMargin(margins.right());
+ tableView->setBottomMargin(margins.bottom());
+
+ WAIT_UNTIL_POLISHED;
+
+ auto const items = tableViewPrivate->loadedItems;
+ QVERIFY(!items.isEmpty());
+
+ for (int i = 0; i < expectedItemCount; ++i) {
+ const QQuickItem *item = items[i]->item;
+ QVERIFY(item);
+ QCOMPARE(item->parentItem(), tableView->contentItem());
+
+ auto attached = getAttachedObject(item);
+ int row = attached->row();
+ int column = attached->column();
+ qreal expectedX = margins.left() + (column * (expectedItemWidth + spacing.width()));
+ qreal expectedY = margins.top() + (row * (expectedItemHeight + spacing.height()));
+ QCOMPARE(item->x(), expectedX);
+ QCOMPARE(item->y(), expectedY);
+ QCOMPARE(item->width(), expectedItemWidth);
+ QCOMPARE(item->height(), expectedItemHeight);
+ }
+}
+
+void tst_QQuickTableView::checkTableMargins_data()
+{
+ QTest::addColumn<QVariant>("model");
+ QTest::addColumn<QSize>("tableSize");
+ QTest::addColumn<QSizeF>("spacing");
+ QTest::addColumn<QMarginsF>("margins");
+
+ QTest::newRow("QAIM 1x1 1,1 0000") << TestModelAsVariant(1, 1) << QSize(1, 1) << QSizeF(1, 1) << QMarginsF(0, 0, 0, 0);
+ QTest::newRow("QAIM 4x4 1,1 0000") << TestModelAsVariant(4, 4) << QSize(4, 4) << QSizeF(1, 1) << QMarginsF(0, 0, 0, 0);
+ QTest::newRow("QAIM 1x1 1,1 5555") << TestModelAsVariant(1, 1) << QSize(1, 1) << QSizeF(1, 1) << QMarginsF(5, 5, 5, 5);
+ QTest::newRow("QAIM 4x4 0,0 3333") << TestModelAsVariant(4, 4) << QSize(4, 4) << QSizeF(0, 0) << QMarginsF(3, 3, 3, 3);
+ QTest::newRow("QAIM 4x4 2,2 1234") << TestModelAsVariant(4, 4) << QSize(4, 4) << QSizeF(2, 2) << QMarginsF(1, 2, 3, 4);
+ QTest::newRow("QAIM 1x1 0,0 3210") << TestModelAsVariant(1, 1) << QSize(1, 1) << QSizeF(0, 0) << QMarginsF(3, 2, 1, 0);
+}
+
+void tst_QQuickTableView::checkTableMargins()
+{
+ // Check that the space between the content view and
+ // the items matches the margins we set on the tableview.
+ QFETCH(QVariant, model);
+ QFETCH(QSize, tableSize);
+ QFETCH(QSizeF, spacing);
+ QFETCH(QMarginsF, margins);
+ LOAD_TABLEVIEW("plaintableview.qml");
+
+ tableView->setModel(model);
+ tableView->setRowSpacing(spacing.height());
+ tableView->setColumnSpacing(spacing.width());
+ tableView->setLeftMargin(margins.left());
+ tableView->setTopMargin(margins.top());
+ tableView->setRightMargin(margins.right());
+ tableView->setBottomMargin(margins.bottom());
+
+ WAIT_UNTIL_POLISHED;
+
+ auto const items = tableViewPrivate->loadedItems;
+
+ auto const topLeftFxItem = findFxTableItem(0, 0, items);
+ auto const bottomRightFxItem = findFxTableItem(tableSize.height() - 1, tableSize.width() - 1, items);
+ QVERIFY(topLeftFxItem);
+ QVERIFY(bottomRightFxItem);
+
+ auto const topLeftItem = topLeftFxItem->item;
+ auto const bottomRightItem = bottomRightFxItem->item;
+ qreal leftSpace = topLeftItem->x();
+ qreal topSpace = topLeftItem->y();
+ qreal rightSpace = tableView->contentWidth() - (bottomRightItem->x() + bottomRightItem->width());
+ qreal bottomSpace = tableView->contentHeight() - (bottomRightItem->y() + bottomRightItem->height());
+ QCOMPARE(leftSpace, margins.left());
+ QCOMPARE(topSpace, margins.top());
+ QCOMPARE(rightSpace, margins.right());
+ QCOMPARE(bottomSpace, margins.bottom());
+}
+
+void tst_QQuickTableView::fillTableViewButNothingMore_data()
+{
+ QTest::addColumn<QSizeF>("spacing");
+ QTest::addColumn<QMarginsF>("margins");
+
+ QTest::newRow("0 0,0 0") << QSizeF(0, 0) << QMarginsF(0, 0, 0, 0);
+ QTest::newRow("0 10,10 0") << QSizeF(10, 10) << QMarginsF(0, 0, 0, 0);
+ QTest::newRow("100 10,10 0") << QSizeF(10, 10) << QMarginsF(0, 0, 0, 0);
+ QTest::newRow("0 0,0 100") << QSizeF(0, 0) << QMarginsF(0, 0, 0, 0);
+ QTest::newRow("0 10,10 100") << QSizeF(10, 10) << QMarginsF(100, 100, 100, 100);
+ QTest::newRow("100 10,10 100") << QSizeF(10, 10) << QMarginsF(100, 100, 100, 100);
+}
+
+void tst_QQuickTableView::fillTableViewButNothingMore()
+{
+ // Check that we end up filling the whole visible part of
+ // the tableview with cells, but nothing more.
+ QFETCH(QSizeF, spacing);
+ QFETCH(QMarginsF, margins);
+ LOAD_TABLEVIEW("plaintableview.qml");
+
+ const int rows = 100;
+ const int columns = 100;
+ auto model = TestModelAsVariant(rows, columns);
+
+ tableView->setModel(model);
+ tableView->setRowSpacing(spacing.height());
+ tableView->setColumnSpacing(spacing.width());
+ tableView->setLeftMargin(margins.left());
+ tableView->setTopMargin(margins.top());
+ tableView->setRightMargin(margins.right());
+ tableView->setBottomMargin(margins.bottom());
+ tableView->setCacheBuffer(0);
+
+ WAIT_UNTIL_POLISHED;
+
+ auto const items = tableViewPrivate->loadedItems;
+
+ auto const topLeftFxItem = findFxTableItem(0, 0, items);
+ QVERIFY(topLeftFxItem);
+ auto const topLeftItem = topLeftFxItem->item;
+
+ // Check that the top-left item are at the corner of the view
+ QCOMPARE(topLeftItem->x(), margins.left());
+ QCOMPARE(topLeftItem->y(), margins.top());
+
+ auto const bottomRightFxItem = findLoadedBottomRightItem(items);
+ QVERIFY(bottomRightFxItem);
+ auto const bottomRightItem = bottomRightFxItem->item;
+ auto bottomRightAttached = getAttachedObject(bottomRightItem);
+
+ // Check that the right-most item is overlapping the right edge of the view
+ QVERIFY(bottomRightItem->x() < tableView->width());
+ QVERIFY(bottomRightItem->x() + bottomRightItem->width() >= tableView->width() - spacing.width());
+
+ // Check that the actual number of columns matches what we expect
+ qreal cellWidth = bottomRightItem->width() + spacing.width();
+ qreal availableWidth = tableView->width() - margins.left();
+ int expectedColumns = qCeil(availableWidth / cellWidth);
+ int actualColumns = bottomRightAttached->column() + 1;
+ QCOMPARE(actualColumns, expectedColumns);
+
+ // Check that the bottom-most item is overlapping the bottom edge of the view
+ QVERIFY(bottomRightItem->y() < tableView->height());
+ QVERIFY(bottomRightItem->y() + bottomRightItem->height() >= tableView->height() - spacing.height());
+
+ // Check that the actual number of rows matches what we expect
+ qreal cellHeight = bottomRightItem->height() + spacing.height();
+ qreal availableHeight = tableView->height() - margins.top();
+ int expectedRows = qCeil(availableHeight / cellHeight);
+ int actualRows = bottomRightAttached->row() + 1;
+ QCOMPARE(actualRows, expectedRows);
+}
+
+void tst_QQuickTableView::checkInitialAttachedProperties_data()
+{
+ QTest::addColumn<QVariant>("model");
+
+ QTest::newRow("QAIM") << TestModelAsVariant(4, 4);
+ QTest::newRow("Number model") << QVariant::fromValue(4);
+ QTest::newRow("QStringList") << QVariant::fromValue(QStringList() << "0" << "1" << "2" << "3");
+}
+
+void tst_QQuickTableView::checkInitialAttachedProperties()
+{
+ // Check that the context and attached properties inside
+ // the delegate items are what we expect at start-up.
+ QFETCH(QVariant, model);
+ LOAD_TABLEVIEW("plaintableview.qml");
+
+ tableView->setModel(model);
+
+ WAIT_UNTIL_POLISHED;
+
+ for (auto fxItem : tableViewPrivate->loadedItems) {
+ const int index = fxItem->index;
+ const auto item = fxItem->item;
+ const auto attached = getAttachedObject(item);
+ const auto context = qmlContext(item.data());
+ const QPoint cell = tableViewPrivate->cellAtModelIndex(index);
+ const int contextIndex = context->contextProperty("index").toInt();
+ const int contextRow = context->contextProperty("row").toInt();
+ const int contextColumn = context->contextProperty("column").toInt();
+ const QString contextModelData = context->contextProperty("modelData").toString();
+ const QQmlDelegateModelAttached *delegateModelAttached =
+ static_cast<QQmlDelegateModelAttached *>(
+ qmlAttachedPropertiesObject<QQmlDelegateModel>(item));
+ const int contextItemsIndex = delegateModelAttached->property("itemsIndex").toInt();
+
+ QCOMPARE(attached->row(), cell.y());
+ QCOMPARE(attached->column(), cell.x());
+ QCOMPARE(contextRow, cell.y());
+ QCOMPARE(contextColumn, cell.x());
+ QCOMPARE(contextIndex, index);
+ QCOMPARE(contextModelData, QStringLiteral("%1").arg(cell.y()));
+ QCOMPARE(contextItemsIndex, index);
+ }
+}
+
+void tst_QQuickTableView::flick_data()
+{
+ QTest::addColumn<QSizeF>("spacing");
+ QTest::addColumn<QMarginsF>("margins");
+
+ QTest::newRow("s:0 m:0") << QSizeF(0, 0) << QMarginsF(0, 0, 0, 0);
+ QTest::newRow("s:5 m:0") << QSizeF(5, 5) << QMarginsF(0, 0, 0, 0);
+ QTest::newRow("s:0 m:20") << QSizeF(0, 0) << QMarginsF(20, 20, 20, 20);
+ QTest::newRow("s:5 m:20") << QSizeF(5, 5) << QMarginsF(20, 20, 20, 20);
+}
+
+void tst_QQuickTableView::flick()
+{
+ // Check that if we end up with the correct start and end column/row as we flick around
+ // with different table configurations.
+ QFETCH(QSizeF, spacing);
+ QFETCH(QMarginsF, margins);
+ LOAD_TABLEVIEW("plaintableview.qml");
+
+ const qreal delegateWidth = 100;
+ const qreal delegateHeight = 50;
+ const int visualColumnCount = 4;
+ const int visualRowCount = 4;
+ const qreal cellWidth = delegateWidth + spacing.width();
+ const qreal cellHeight = delegateHeight + spacing.height();
+ auto model = TestModelAsVariant(100, 100);
+
+ tableView->setModel(model);
+ tableView->setRowSpacing(spacing.height());
+ tableView->setColumnSpacing(spacing.width());
+ tableView->setLeftMargin(margins.left());
+ tableView->setTopMargin(margins.top());
+ tableView->setRightMargin(margins.right());
+ tableView->setBottomMargin(margins.bottom());
+ tableView->setCacheBuffer(0);
+ tableView->setWidth(margins.left() + (visualColumnCount * cellWidth) - spacing.width());
+ tableView->setHeight(margins.top() + (visualRowCount * cellHeight) - spacing.height());
+
+ WAIT_UNTIL_POLISHED;
+
+ // Check the "simple" case if the cells never lands egde-to-edge with the viewport. For
+ // that case we only accept that visible row/columns are loaded.
+ qreal flickValues[] = {0.5, 1.5, 4.5, 20.5, 10.5, 3.5, 1.5, 0.5};
+
+ for (qreal cellsToFlick : flickValues) {
+ // Flick to the beginning of the cell
+ tableView->setContentX(cellsToFlick * cellWidth);
+ tableView->setContentY(cellsToFlick * cellHeight);
+ tableView->polish();
+
+ WAIT_UNTIL_POLISHED;
+
+ const QRect loadedTable = tableViewPrivate->loadedTable;
+
+ const int expectedTableLeft = cellsToFlick - int((margins.left() + spacing.width()) / cellWidth);
+ const int expectedTableTop = cellsToFlick - int((margins.top() + spacing.height()) / cellHeight);
+
+ QCOMPARE(loadedTable.left(), expectedTableLeft);
+ QCOMPARE(loadedTable.right(), expectedTableLeft + visualColumnCount);
+ QCOMPARE(loadedTable.top(), expectedTableTop);
+ QCOMPARE(loadedTable.bottom(), expectedTableTop + visualRowCount);
+ }
+}
+
+void tst_QQuickTableView::flickOvershoot_data()
+{
+ QTest::addColumn<QSizeF>("spacing");
+ QTest::addColumn<QMarginsF>("margins");
+
+ QTest::newRow("s:0 m:0") << QSizeF(0, 0) << QMarginsF(0, 0, 0, 0);
+ QTest::newRow("s:5 m:0") << QSizeF(5, 5) << QMarginsF(0, 0, 0, 0);
+ QTest::newRow("s:0 m:20") << QSizeF(0, 0) << QMarginsF(20, 20, 20, 20);
+ QTest::newRow("s:5 m:20") << QSizeF(5, 5) << QMarginsF(20, 20, 20, 20);
+}
+
+void tst_QQuickTableView::flickOvershoot()
+{
+ // Flick the table completely out and then in again, and see
+ // that we still contains the expected rows/columns
+ // Note that TableView always keeps top-left item loaded, even
+ // when everything is flicked out of view.
+ QFETCH(QSizeF, spacing);
+ QFETCH(QMarginsF, margins);
+ LOAD_TABLEVIEW("plaintableview.qml");
+
+ const int rowCount = 5;
+ const int columnCount = 5;
+ const qreal delegateWidth = 100;
+ const qreal delegateHeight = 50;
+ const qreal cellWidth = delegateWidth + spacing.width();
+ const qreal cellHeight = delegateHeight + spacing.height();
+ const qreal tableWidth = margins.left() + margins.right() + (cellWidth * columnCount) - spacing.width();
+ const qreal tableHeight = margins.top() + margins.bottom() + (cellHeight * rowCount) - spacing.height();
+ const int outsideMargin = 10;
+ auto model = TestModelAsVariant(rowCount, columnCount);
+
+ tableView->setModel(model);
+ tableView->setRowSpacing(spacing.height());
+ tableView->setColumnSpacing(spacing.width());
+ tableView->setLeftMargin(margins.left());
+ tableView->setTopMargin(margins.top());
+ tableView->setRightMargin(margins.right());
+ tableView->setBottomMargin(margins.bottom());
+ tableView->setCacheBuffer(0);
+ tableView->setWidth(tableWidth - margins.right() - cellWidth / 2);
+ tableView->setHeight(tableHeight - margins.bottom() - cellHeight / 2);
+
+ WAIT_UNTIL_POLISHED;
+
+ // Flick table out of view left
+ tableView->setContentX(-tableView->width() - outsideMargin);
+ tableView->setContentY(0);
+ tableView->polish();
+
+ WAIT_UNTIL_POLISHED;
+
+ QCOMPARE(tableViewPrivate->loadedTable.left(), 0);
+ QCOMPARE(tableViewPrivate->loadedTable.right(), 0);
+ QCOMPARE(tableViewPrivate->loadedTable.top(), 0);
+ QCOMPARE(tableViewPrivate->loadedTable.bottom(), rowCount - 1);
+
+ // Flick table out of view right
+ tableView->setContentX(tableWidth + outsideMargin);
+ tableView->setContentY(0);
+ tableView->polish();
+
+ WAIT_UNTIL_POLISHED;
+
+ QCOMPARE(tableViewPrivate->loadedTable.left(), columnCount - 1);
+ QCOMPARE(tableViewPrivate->loadedTable.right(), columnCount - 1);
+ QCOMPARE(tableViewPrivate->loadedTable.top(), 0);
+ QCOMPARE(tableViewPrivate->loadedTable.bottom(), rowCount - 1);
+
+ // Flick table out of view on top
+ tableView->setContentX(0);
+ tableView->setContentY(-tableView->height() - outsideMargin);
+ tableView->polish();
+
+ WAIT_UNTIL_POLISHED;
+
+ QCOMPARE(tableViewPrivate->loadedTable.left(), 0);
+ QCOMPARE(tableViewPrivate->loadedTable.right(), columnCount - 1);
+ QCOMPARE(tableViewPrivate->loadedTable.top(), 0);
+ QCOMPARE(tableViewPrivate->loadedTable.bottom(), 0);
+
+ // Flick table out of view at the bottom
+ tableView->setContentX(0);
+ tableView->setContentY(tableHeight + outsideMargin);
+ tableView->polish();
+
+ WAIT_UNTIL_POLISHED;
+
+ QCOMPARE(tableViewPrivate->loadedTable.left(), 0);
+ QCOMPARE(tableViewPrivate->loadedTable.right(), columnCount - 1);
+ QCOMPARE(tableViewPrivate->loadedTable.top(), rowCount - 1);
+ QCOMPARE(tableViewPrivate->loadedTable.bottom(), rowCount - 1);
+
+ // Flick table out of view left and top at the same time
+ tableView->setContentX(-tableView->width() - outsideMargin);
+ tableView->setContentY(-tableView->height() - outsideMargin);
+ tableView->polish();
+
+ WAIT_UNTIL_POLISHED;
+
+ QCOMPARE(tableViewPrivate->loadedTable.left(), 0);
+ QCOMPARE(tableViewPrivate->loadedTable.right(), 0);
+ QCOMPARE(tableViewPrivate->loadedTable.top(), 0);
+ QCOMPARE(tableViewPrivate->loadedTable.bottom(), 0);
+
+ // Flick table back to origo
+ tableView->setContentX(0);
+ tableView->setContentY(0);
+ tableView->polish();
+
+ WAIT_UNTIL_POLISHED;
+
+ QCOMPARE(tableViewPrivate->loadedTable.left(), 0);
+ QCOMPARE(tableViewPrivate->loadedTable.right(), columnCount - 1);
+ QCOMPARE(tableViewPrivate->loadedTable.top(), 0);
+ QCOMPARE(tableViewPrivate->loadedTable.bottom(), rowCount - 1);
+
+ // Flick table out of view right and bottom at the same time
+ tableView->setContentX(tableWidth + outsideMargin);
+ tableView->setContentY(tableHeight + outsideMargin);
+ tableView->polish();
+
+ WAIT_UNTIL_POLISHED;
+
+ QCOMPARE(tableViewPrivate->loadedTable.left(), columnCount - 1);
+ QCOMPARE(tableViewPrivate->loadedTable.right(), columnCount - 1);
+ QCOMPARE(tableViewPrivate->loadedTable.top(), rowCount - 1);
+ QCOMPARE(tableViewPrivate->loadedTable.bottom(), rowCount - 1);
+
+ // Flick table back to origo
+ tableView->setContentX(0);
+ tableView->setContentY(0);
+ tableView->polish();
+
+ WAIT_UNTIL_POLISHED;
+
+ QCOMPARE(tableViewPrivate->loadedTable.left(), 0);
+ QCOMPARE(tableViewPrivate->loadedTable.right(), columnCount - 1);
+ QCOMPARE(tableViewPrivate->loadedTable.top(), 0);
+ QCOMPARE(tableViewPrivate->loadedTable.bottom(), rowCount - 1);
+}
+
+void tst_QQuickTableView::checkRowColumnCount()
+{
+ // If we flick several columns (rows) at the same time, check that we don't
+ // end up with loading more delegate items into memory than necessary. We
+ // should free up columns as we go before loading new ones.
+ LOAD_TABLEVIEW("countingtableview.qml");
+
+ const char *maxDelegateCountProp = "maxDelegateCount";
+ auto model = TestModelAsVariant(100, 100);
+
+ tableView->setModel(model);
+
+ WAIT_UNTIL_POLISHED;
+
+ const int tableViewCount = tableViewPrivate->loadedItems.count();
+ const int qmlCountAfterInit = view->rootObject()->property(maxDelegateCountProp).toInt();
+ QCOMPARE(tableViewCount, qmlCountAfterInit);
+
+ // Flick a long distance right
+ tableView->setContentX(tableView->width() * 2);
+ tableView->polish();
+
+ WAIT_UNTIL_POLISHED;
+
+ const int qmlCountAfterRightFlick = view->rootObject()->property(maxDelegateCountProp).toInt();
+ QCOMPARE(qmlCountAfterRightFlick, qmlCountAfterInit);
+
+ // Flick a long distance down
+ tableView->setContentX(tableView->height() * 2);
+ tableView->polish();
+
+ WAIT_UNTIL_POLISHED;
+
+ const int qmlCountAfterDownFlick = view->rootObject()->property(maxDelegateCountProp).toInt();
+ QCOMPARE(qmlCountAfterDownFlick, qmlCountAfterInit);
+
+ // Flick a long distance left
+ tableView->setContentX(0);
+ tableView->polish();
+
+ WAIT_UNTIL_POLISHED;
+
+ const int qmlCountAfterLeftFlick = view->rootObject()->property(maxDelegateCountProp).toInt();
+ QCOMPARE(qmlCountAfterLeftFlick, qmlCountAfterInit);
+
+ // Flick a long distance up
+ tableView->setContentY(0);
+ tableView->polish();
+
+ WAIT_UNTIL_POLISHED;
+
+ const int qmlCountAfterUpFlick = view->rootObject()->property(maxDelegateCountProp).toInt();
+ QCOMPARE(qmlCountAfterUpFlick, qmlCountAfterInit);
+}
+
+QTEST_MAIN(tst_QQuickTableView)
+
+#include "tst_qquicktableview.moc"
diff --git a/tests/auto/quick/qquicktext/data/implicitSizeChangeRewrap.qml b/tests/auto/quick/qquicktext/data/implicitSizeChangeRewrap.qml
new file mode 100644
index 0000000000..fb8626a75a
--- /dev/null
+++ b/tests/auto/quick/qquicktext/data/implicitSizeChangeRewrap.qml
@@ -0,0 +1,27 @@
+import QtQuick 2.0
+import QtQuick.Layouts 1.0
+
+Item
+{
+ id : _rootItem
+ width : 200
+ height : 1000
+ ColumnLayout
+ {
+ id : _textContainer
+ anchors.centerIn: parent
+ Layout.maximumWidth: (_rootItem.width - 40) // to have some space left / right
+ Text
+ {
+ id : text
+ objectName: "text"
+ font.italic: true
+ textFormat: Text.RichText
+ horizontalAlignment : Text.AlignHCenter
+ verticalAlignment : Text.AlignVCenter
+ wrapMode: Text.Wrap
+ Layout.maximumWidth: (_rootItem.width - 60)
+ Component.onCompleted: text.text = "This is a too long text for the interface with a stupid path also too long -> /home/long/long/long/to/force/it/to/need/to/wrap This is a too long text for the interface with a stupid path also too long -> /home/long/long/long/to/force/it/to/need/to/wrap This is a too long text for the interface with a stupid path also too long -> /home/long/long/long/to/force/it/to/need/to/wrap This is a too long text for the interface with a stupid path also too long -> /home/long/long/long/to/force/it/to/need/to/wrap"
+ }
+ }
+}
diff --git a/tests/auto/quick/qquicktext/tst_qquicktext.cpp b/tests/auto/quick/qquicktext/tst_qquicktext.cpp
index 89d2590c03..48069ab8c5 100644
--- a/tests/auto/quick/qquicktext/tst_qquicktext.cpp
+++ b/tests/auto/quick/qquicktext/tst_qquicktext.cpp
@@ -105,6 +105,7 @@ private slots:
void implicitSize_data();
void implicitSize();
+ void implicitSizeChangeRewrap();
void dependentImplicitSizes();
void contentSize();
void implicitSizeBinding_data();
@@ -999,11 +1000,14 @@ static inline QByteArray msgNotLessThan(int n1, int n2)
void tst_qquicktext::hAlignImplicitWidth()
{
+#ifdef Q_OS_MACOS
+ QSKIP("this test currently crashes on MacOS. See QTBUG-68047");
+#endif
QQuickView view(testFileUrl("hAlignImplicitWidth.qml"));
view.setFlags(view.flags() | Qt::WindowStaysOnTopHint); // Prevent being obscured by other windows.
view.show();
view.requestActivate();
- QVERIFY(QTest::qWaitForWindowActive(&view));
+ QVERIFY(QTest::qWaitForWindowExposed(&view));
QQuickText *text = view.rootObject()->findChild<QQuickText*>("textItem");
QVERIFY(text != nullptr);
@@ -4369,6 +4373,23 @@ void tst_qquicktext::fontInfo()
QVERIFY(copy->font().pixelSize() < 1000);
}
+void tst_qquicktext::implicitSizeChangeRewrap()
+{
+ QScopedPointer<QQuickView> window(new QQuickView);
+ window->setSource(testFileUrl("implicitSizeChangeRewrap.qml"));
+ QTRY_COMPARE(window->status(), QQuickView::Ready);
+
+ window->show();
+ QVERIFY(QTest::qWaitForWindowExposed(window.data()));
+
+ QObject *root = window->rootObject();
+
+ QQuickText *text = root->findChild<QQuickText *>("text");
+ QVERIFY(text != nullptr);
+
+ QVERIFY(text->contentWidth() < window->width());
+}
+
QTEST_MAIN(tst_qquicktext)
#include "tst_qquicktext.moc"
diff --git a/tests/auto/quick/qquicktextinput/tst_qquicktextinput.cpp b/tests/auto/quick/qquicktextinput/tst_qquicktextinput.cpp
index 65c9c9e8ad..f2ee8564ef 100644
--- a/tests/auto/quick/qquicktextinput/tst_qquicktextinput.cpp
+++ b/tests/auto/quick/qquicktextinput/tst_qquicktextinput.cpp
@@ -5989,7 +5989,7 @@ void tst_qquicktextinput::QTBUG_19956_regexp()
{
QUrl url = testFileUrl("qtbug-19956regexp.qml");
- QString warning = url.toString() + ":11:17: Unable to assign [undefined] to QRegExp";
+ QString warning = url.toString() + ":11:9: Unable to assign [undefined] to QRegExp";
QTest::ignoreMessage(QtWarningMsg, qPrintable(warning));
QQuickView window(url);
diff --git a/tests/auto/quick/qquickxmllistmodel/tst_qquickxmllistmodel.cpp b/tests/auto/quick/qquickxmllistmodel/tst_qquickxmllistmodel.cpp
index 757cb8f513..bcff0c46fb 100644
--- a/tests/auto/quick/qquickxmllistmodel/tst_qquickxmllistmodel.cpp
+++ b/tests/auto/quick/qquickxmllistmodel/tst_qquickxmllistmodel.cpp
@@ -354,7 +354,7 @@ void tst_qquickxmllistmodel::xml()
QSignalSpy spy(model, SIGNAL(statusChanged(QQuickXmlListModel::Status)));
QVERIFY(errorString(model).isEmpty());
- QCOMPARE(model->property("progress").toDouble(), qreal(0.0));
+ QCOMPARE(model->property("progress").toDouble(), qreal(1.0));
QCOMPARE(qvariant_cast<QQuickXmlListModel::Status>(model->property("status")),
QQuickXmlListModel::Loading);
QTRY_COMPARE(spy.count(), 1); spy.clear();
@@ -410,6 +410,13 @@ void tst_qquickxmllistmodel::headers()
QTRY_COMPARE(qvariant_cast<QQuickXmlListModel::Status>(model->property("status")),
QQuickXmlListModel::Ready);
+ // It doesn't do a network request for a local file
+ QCOMPARE(factory.lastSentHeaders.count(), 0);
+
+ model->setProperty("source", QUrl("http://localhost/filethatdoesnotexist.xml"));
+ QTRY_COMPARE(qvariant_cast<QQuickXmlListModel::Status>(model->property("status")),
+ QQuickXmlListModel::Error);
+
QVariantMap expectedHeaders;
expectedHeaders["Accept"] = "application/xml,*/*";
@@ -433,7 +440,7 @@ void tst_qquickxmllistmodel::source()
QSignalSpy spy(model, SIGNAL(statusChanged(QQuickXmlListModel::Status)));
QVERIFY(errorString(model).isEmpty());
- QCOMPARE(model->property("progress").toDouble(), qreal(0.0));
+ QCOMPARE(model->property("progress").toDouble(), qreal(1.0));
QCOMPARE(qvariant_cast<QQuickXmlListModel::Status>(model->property("status")),
QQuickXmlListModel::Loading);
QTRY_COMPARE(spy.count(), 1); spy.clear();
@@ -447,7 +454,7 @@ void tst_qquickxmllistmodel::source()
if (model->property("source").toString().isEmpty())
QCOMPARE(qvariant_cast<QQuickXmlListModel::Status>(model->property("status")),
QQuickXmlListModel::Null);
- QCOMPARE(model->property("progress").toDouble(), qreal(0.0));
+ QCOMPARE(model->property("progress").toDouble(), qreal(source.isLocalFile() ? 1.0 : 0.0));
QTRY_COMPARE(spy.count(), 1); spy.clear();
QCOMPARE(qvariant_cast<QQuickXmlListModel::Status>(model->property("status")),
QQuickXmlListModel::Loading);
diff --git a/tests/auto/quick/quick.pro b/tests/auto/quick/quick.pro
index a54a707f4a..a4b6076a34 100644
--- a/tests/auto/quick/quick.pro
+++ b/tests/auto/quick/quick.pro
@@ -66,6 +66,7 @@ QUICKTESTS += \
qquickitem2 \
qquickitemlayer \
qquicklistview \
+ qquicktableview \
qquickloader \
qquickmousearea \
qquickmultipointtoucharea \
@@ -93,7 +94,7 @@ QUICKTESTS += \
SUBDIRS += $$PUBLICTESTS
# Following tests are too slow on qemu + software backend
-boot2qt: QUICKTESTS -= qquickgridview qquicklistview qquickpositioners
+boot2qt: QUICKTESTS -= qquickgridview qquicklistview qquicktableview qquickpositioners
!qtConfig(accessibility):QUICKTESTS -= qquickaccessible
diff --git a/tests/auto/quick/shared/viewtestutil.cpp b/tests/auto/quick/shared/viewtestutil.cpp
index dc813b9d59..3bfa23173e 100644
--- a/tests/auto/quick/shared/viewtestutil.cpp
+++ b/tests/auto/quick/shared/viewtestutil.cpp
@@ -153,6 +153,12 @@ int QQuickViewTestUtil::QaimModel::rowCount(const QModelIndex &parent) const
return list.count();
}
+int QQuickViewTestUtil::QaimModel::columnCount(const QModelIndex &parent) const
+{
+ Q_UNUSED(parent);
+ return columns;
+}
+
QHash<int,QByteArray> QQuickViewTestUtil::QaimModel::roleNames() const
{
QHash<int,QByteArray> roles = QAbstractListModel::roleNames();
@@ -174,7 +180,7 @@ QVariant QQuickViewTestUtil::QaimModel::data(const QModelIndex &index, int role)
int QQuickViewTestUtil::QaimModel::count() const
{
- return rowCount();
+ return rowCount() * columnCount();
}
QString QQuickViewTestUtil::QaimModel::name(int index) const
diff --git a/tests/auto/quick/shared/viewtestutil.h b/tests/auto/quick/shared/viewtestutil.h
index b11d5e4859..04e1771ef8 100644
--- a/tests/auto/quick/shared/viewtestutil.h
+++ b/tests/auto/quick/shared/viewtestutil.h
@@ -76,6 +76,7 @@ namespace QQuickViewTestUtil
QaimModel(QObject *parent=0);
int rowCount(const QModelIndex &parent=QModelIndex()) const;
+ int columnCount(const QModelIndex &parent=QModelIndex()) const;
QVariant data(const QModelIndex &index, int role=Qt::DisplayRole) const;
QHash<int,QByteArray> roleNames() const;
@@ -104,6 +105,8 @@ namespace QQuickViewTestUtil
using QAbstractListModel::dataChanged;
+ int columns = 1;
+
private:
QList<QPair<QString,QString> > list;
};
diff --git a/tests/auto/quicktest/quicktest.pro b/tests/auto/quicktest/quicktest.pro
index 9d909f1d16..0e3f257e33 100644
--- a/tests/auto/quicktest/quicktest.pro
+++ b/tests/auto/quicktest/quicktest.pro
@@ -1,4 +1,5 @@
TEMPLATE = subdirs
SUBDIRS = \
signalspy \
- quicktestmainwithsetup
+ quicktestmainwithsetup \
+ testfiltering
diff --git a/tests/auto/quicktest/testfiltering/quicktestmain/quicktestmain.cpp b/tests/auto/quicktest/testfiltering/quicktestmain/quicktestmain.cpp
new file mode 100644
index 0000000000..656911f842
--- /dev/null
+++ b/tests/auto/quicktest/testfiltering/quicktestmain/quicktestmain.cpp
@@ -0,0 +1,29 @@
+/****************************************************************************
+**
+** Copyright (C) 2018 The Qt Company Ltd.
+** Contact: https://www.qt.io/licensing/
+**
+** This file is part of the test suite of the Qt Toolkit.
+**
+** $QT_BEGIN_LICENSE:GPL-EXCEPT$
+** Commercial License Usage
+** Licensees holding valid commercial Qt licenses may use this file in
+** accordance with the commercial license agreement provided with the
+** Software or, alternatively, in accordance with the terms contained in
+** a written agreement between you and The Qt Company. For licensing terms
+** and conditions see https://www.qt.io/terms-conditions. For further
+** information use the contact form at https://www.qt.io/contact-us.
+**
+** GNU General Public License Usage
+** Alternatively, this file may be used under the terms of the GNU
+** General Public License version 3 as published by the Free Software
+** Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT
+** included in the packaging of this file. Please review the following
+** information to ensure the GNU General Public License requirements will
+** be met: https://www.gnu.org/licenses/gpl-3.0.html.
+**
+** $QT_END_LICENSE$
+**
+****************************************************************************/
+#include <QtQuickTest/quicktest.h>
+QUICK_TEST_MAIN(quicktestmain)
diff --git a/tests/auto/quicktest/testfiltering/quicktestmain/quicktestmain.pro b/tests/auto/quicktest/testfiltering/quicktestmain/quicktestmain.pro
new file mode 100644
index 0000000000..7b3e734cb4
--- /dev/null
+++ b/tests/auto/quicktest/testfiltering/quicktestmain/quicktestmain.pro
@@ -0,0 +1,11 @@
+CONFIG += qmltestcase
+macos:CONFIG -= app_bundle
+TARGET = quicktestmain
+
+DEFINES += QT_QMLTEST_DATADIR=\\\"$${PWD}\\\"
+
+SOURCES += quicktestmain.cpp
+
+TESTDATA += $$PWD/*.qml
+
+DESTDIR = ./
diff --git a/tests/auto/quicktest/testfiltering/quicktestmain/tst_first.qml b/tests/auto/quicktest/testfiltering/quicktestmain/tst_first.qml
new file mode 100644
index 0000000000..55c9612b78
--- /dev/null
+++ b/tests/auto/quicktest/testfiltering/quicktestmain/tst_first.qml
@@ -0,0 +1,38 @@
+/****************************************************************************
+**
+** Copyright (C) 2018 The Qt Company Ltd.
+** Contact: https://www.qt.io/licensing/
+**
+** This file is part of the test suite of the Qt Toolkit.
+**
+** $QT_BEGIN_LICENSE:GPL-EXCEPT$
+** Commercial License Usage
+** Licensees holding valid commercial Qt licenses may use this file in
+** accordance with the commercial license agreement provided with the
+** Software or, alternatively, in accordance with the terms contained in
+** a written agreement between you and The Qt Company. For licensing terms
+** and conditions see https://www.qt.io/terms-conditions. For further
+** information use the contact form at https://www.qt.io/contact-us.
+**
+** GNU General Public License Usage
+** Alternatively, this file may be used under the terms of the GNU
+** General Public License version 3 as published by the Free Software
+** Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT
+** included in the packaging of this file. Please review the following
+** information to ensure the GNU General Public License requirements will
+** be met: https://www.gnu.org/licenses/gpl-3.0.html.
+**
+** $QT_END_LICENSE$
+**
+****************************************************************************/
+
+import QtQuick 2.3
+import QtTest 1.1
+
+TestCase {
+ name: "First"
+
+ function test_foo() { }
+ function test_bar() { }
+ function test_baz() { }
+}
diff --git a/tests/auto/quicktest/testfiltering/quicktestmain/tst_second.qml b/tests/auto/quicktest/testfiltering/quicktestmain/tst_second.qml
new file mode 100644
index 0000000000..2143d93e12
--- /dev/null
+++ b/tests/auto/quicktest/testfiltering/quicktestmain/tst_second.qml
@@ -0,0 +1,38 @@
+/****************************************************************************
+**
+** Copyright (C) 2018 The Qt Company Ltd.
+** Contact: https://www.qt.io/licensing/
+**
+** This file is part of the test suite of the Qt Toolkit.
+**
+** $QT_BEGIN_LICENSE:GPL-EXCEPT$
+** Commercial License Usage
+** Licensees holding valid commercial Qt licenses may use this file in
+** accordance with the commercial license agreement provided with the
+** Software or, alternatively, in accordance with the terms contained in
+** a written agreement between you and The Qt Company. For licensing terms
+** and conditions see https://www.qt.io/terms-conditions. For further
+** information use the contact form at https://www.qt.io/contact-us.
+**
+** GNU General Public License Usage
+** Alternatively, this file may be used under the terms of the GNU
+** General Public License version 3 as published by the Free Software
+** Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT
+** included in the packaging of this file. Please review the following
+** information to ensure the GNU General Public License requirements will
+** be met: https://www.gnu.org/licenses/gpl-3.0.html.
+**
+** $QT_END_LICENSE$
+**
+****************************************************************************/
+
+import QtQuick 2.3
+import QtTest 1.1
+
+TestCase {
+ name: "Second"
+
+ function test_dupfoo() { }
+ function test_dupbar() { }
+ function test_dupbaz() { }
+}
diff --git a/tests/auto/quicktest/testfiltering/test/test.pro b/tests/auto/quicktest/testfiltering/test/test.pro
new file mode 100644
index 0000000000..cecbdca725
--- /dev/null
+++ b/tests/auto/quicktest/testfiltering/test/test.pro
@@ -0,0 +1,5 @@
+CONFIG += testcase
+QT += testlib
+TARGET = ../tst_testfiltering
+
+SOURCES = ../tst_testfiltering.cpp
diff --git a/tests/auto/quicktest/testfiltering/testfiltering.pro b/tests/auto/quicktest/testfiltering/testfiltering.pro
new file mode 100644
index 0000000000..ae7a039b8b
--- /dev/null
+++ b/tests/auto/quicktest/testfiltering/testfiltering.pro
@@ -0,0 +1,4 @@
+TEMPLATE = subdirs
+SUBDIRS = \
+ test \
+ quicktestmain
diff --git a/tests/auto/quicktest/testfiltering/tst_testfiltering.cpp b/tests/auto/quicktest/testfiltering/tst_testfiltering.cpp
new file mode 100644
index 0000000000..72bb8f02b7
--- /dev/null
+++ b/tests/auto/quicktest/testfiltering/tst_testfiltering.cpp
@@ -0,0 +1,135 @@
+/****************************************************************************
+**
+** Copyright (C) 2018 The Qt Company Ltd.
+** Contact: https://www.qt.io/licensing/
+**
+** This file is part of the test suite of the Qt Toolkit.
+**
+** $QT_BEGIN_LICENSE:GPL-EXCEPT$
+** Commercial License Usage
+** Licensees holding valid commercial Qt licenses may use this file in
+** accordance with the commercial license agreement provided with the
+** Software or, alternatively, in accordance with the terms contained in
+** a written agreement between you and The Qt Company. For licensing terms
+** and conditions see https://www.qt.io/terms-conditions. For further
+** information use the contact form at https://www.qt.io/contact-us.
+**
+** GNU General Public License Usage
+** Alternatively, this file may be used under the terms of the GNU
+** General Public License version 3 as published by the Free Software
+** Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT
+** included in the packaging of this file. Please review the following
+** information to ensure the GNU General Public License requirements will
+** be met: https://www.gnu.org/licenses/gpl-3.0.html.
+**
+** $QT_END_LICENSE$
+**
+****************************************************************************/
+#include <QProcess>
+#include <QtTest>
+
+class tst_TestFiltering : public QObject
+{
+ Q_OBJECT
+private slots:
+ void noFilters();
+ void oneMatchingFilter();
+ void filterThatDoesntMatch();
+ void twoFilters();
+ void twoFiltersWithOneMatch();
+ void manyFilters();
+};
+
+
+const QString testExe =
+#if defined(Q_OS_WIN)
+ QFINDTESTDATA("quicktestmain/quicktestmain.exe");
+#else
+ QFINDTESTDATA("quicktestmain/quicktestmain");
+#endif
+
+void tst_TestFiltering::noFilters()
+{
+ QProcess process;
+ process.start(testExe);
+
+ QVERIFY(process.waitForFinished());
+
+ const QString output = process.readAll();
+ QVERIFY(output.contains(QLatin1String("Totals: 10 passed")));
+ QCOMPARE(process.exitStatus(), QProcess::NormalExit);
+ QCOMPARE(process.exitCode(), 0);
+}
+
+void tst_TestFiltering::oneMatchingFilter()
+{
+ QProcess process;
+ process.start(testExe, {QLatin1String("First::test_bar")});
+
+ QVERIFY(process.waitForFinished());
+
+ const QString output = process.readAll();
+ QVERIFY(output.contains(QLatin1String("Totals: 3 passed")));
+ QCOMPARE(process.exitStatus(), QProcess::NormalExit);
+ QCOMPARE(process.exitCode(), 0);
+}
+
+void tst_TestFiltering::filterThatDoesntMatch()
+{
+ QProcess process;
+ process.start(testExe, {QLatin1String("First::test_nonexisting")});
+
+ QVERIFY(process.waitForFinished());
+
+ QCOMPARE(process.exitStatus(), QProcess::NormalExit);
+ QCOMPARE(process.exitCode(), 1);
+}
+
+void tst_TestFiltering::twoFilters()
+{
+ QProcess process;
+ process.start(testExe,
+ {QLatin1String("Second::test_dupfoo"), QLatin1String("Second::test_dupbaz")});
+
+ QVERIFY(process.waitForFinished());
+
+ const QString output = process.readAll();
+ QVERIFY(output.contains(QLatin1String("Totals: 4 passed")));
+ QCOMPARE(process.exitStatus(), QProcess::NormalExit);
+ QCOMPARE(process.exitCode(), 0);
+}
+
+void tst_TestFiltering::twoFiltersWithOneMatch()
+{
+ QProcess process;
+ process.start(testExe,
+ {QLatin1String("First::test_foo"), QLatin1String("Second::test_nonexisting")});
+
+ QVERIFY(process.waitForFinished());
+
+ const QString output = process.readAll();
+ QVERIFY(output.contains(QLatin1String("Totals: 3 passed")));
+ QCOMPARE(process.exitStatus(), QProcess::NormalExit);
+ QCOMPARE(process.exitCode(), 1);
+}
+
+void tst_TestFiltering::manyFilters()
+{
+ QProcess process;
+ process.start(testExe,
+ {QLatin1String("First::test_foo"),
+ QLatin1String("First::test_baz"),
+ QLatin1String("Second::test_dupfoo"),
+ QLatin1String("Second::test_dupbaz")});
+
+ QVERIFY(process.waitForFinished());
+
+ const QString output = process.readAll();
+ QVERIFY(output.contains(QLatin1String("Totals: 8 passed")));
+ QCOMPARE(process.exitStatus(), QProcess::NormalExit);
+ QCOMPARE(process.exitCode(), 0);
+}
+
+QTEST_MAIN(tst_TestFiltering);
+
+#include "tst_testfiltering.moc"
diff --git a/tests/manual/pointer/pinchDragFlingMPTA.qml b/tests/manual/pointer/pinchDragFlingMPTA.qml
index 2578d62466..0362832662 100644
--- a/tests/manual/pointer/pinchDragFlingMPTA.qml
+++ b/tests/manual/pointer/pinchDragFlingMPTA.qml
@@ -66,7 +66,7 @@ Rectangle {
minimumPointCount: 3
minimumScale: 0.1
maximumScale: 10
- onActiveChanged: if (!active) fling.restart(centroidVelocity)
+ onActiveChanged: if (!active) fling.restart(centroid.velocity)
}
DragHandler {
id: dragHandler
diff --git a/tests/manual/pointer/pinchHandler.qml b/tests/manual/pointer/pinchHandler.qml
index 409b852b55..36af1f53bd 100644
--- a/tests/manual/pointer/pinchHandler.qml
+++ b/tests/manual/pointer/pinchHandler.qml
@@ -153,7 +153,7 @@ Rectangle {
maximumScale: 10
onActiveChanged: {
if (!active)
- anim.restart(centroidVelocity)
+ anim.restart(centroid.velocity)
}
}
TapHandler { gesturePolicy: TapHandler.DragThreshold; onTapped: rect3.z = rect2.z + 1 }
@@ -164,8 +164,8 @@ Rectangle {
Rectangle {
id: centroidIndicator
property QtObject pincher: activePincher()
- x: pincher.centroid.x - radius
- y: pincher.centroid.y - radius
+ x: pincher.centroid.scenePosition.x - radius
+ y: pincher.centroid.scenePosition.y - radius
z: 1
visible: pincher.active
radius: width / 2
diff --git a/tests/manual/pointer/singlePointHandlerProperties.qml b/tests/manual/pointer/singlePointHandlerProperties.qml
index c11042cf14..1c044f8167 100644
--- a/tests/manual/pointer/singlePointHandlerProperties.qml
+++ b/tests/manual/pointer/singlePointHandlerProperties.qml
@@ -63,7 +63,7 @@ Rectangle {
anchors.centerIn: parent
antialiasing: true
Rectangle {
- y: -40
+ y: -56
anchors.horizontalCenter: parent.horizontalCenter
color: "lightsteelblue"
implicitWidth: label.implicitWidth
@@ -71,7 +71,8 @@ Rectangle {
Text {
id: label
text: 'id: ' + dragHandler.point.id.toString(16) + " uid: " + dragHandler.point.uniqueId.numericId +
- '\npos: (' + dragHandler.point.position.x.toFixed(2) + ', ' + dragHandler.point.position.y.toFixed(2) + ')'
+ '\npos: (' + dragHandler.point.position.x.toFixed(2) + ', ' + dragHandler.point.position.y.toFixed(2) + ')' +
+ '\nmodifiers: ' + dragHandler.point.modifiers.toString(16)
}
}
}
diff --git a/tests/manual/tableview/abstracttablemodel/abstracttablemodel.pro b/tests/manual/tableview/abstracttablemodel/abstracttablemodel.pro
new file mode 100644
index 0000000000..ade49c33a2
--- /dev/null
+++ b/tests/manual/tableview/abstracttablemodel/abstracttablemodel.pro
@@ -0,0 +1,10 @@
+TEMPLATE = app
+TARGET = tableview_abstracttablemodel
+QT += qml quick
+SOURCES += main.cpp
+RESOURCES += main.qml
+
+# Default rules for deployment.
+qnx: target.path = /tmp/$${TARGET}/bin
+else: unix:!android: target.path = /opt/$${TARGET}/bin
+!isEmpty(target.path): INSTALLS += target
diff --git a/tests/manual/tableview/abstracttablemodel/main.cpp b/tests/manual/tableview/abstracttablemodel/main.cpp
new file mode 100644
index 0000000000..22dda5ca4a
--- /dev/null
+++ b/tests/manual/tableview/abstracttablemodel/main.cpp
@@ -0,0 +1,100 @@
+/****************************************************************************
+**
+** Copyright (C) 2018 The Qt Company Ltd.
+** Contact: https://www.qt.io/licensing/
+**
+** This file is part of the QtQuick module of the Qt Toolkit.
+**
+** $QT_BEGIN_LICENSE:LGPL$
+** Commercial License Usage
+** Licensees holding valid commercial Qt licenses may use this file in
+** accordance with the commercial license agreement provided with the
+** Software or, alternatively, in accordance with the terms contained in
+** a written agreement between you and The Qt Company. For licensing terms
+** and conditions see https://www.qt.io/terms-conditions. For further
+** information use the contact form at https://www.qt.io/contact-us.
+**
+** GNU Lesser General Public License Usage
+** Alternatively, this file may be used under the terms of the GNU Lesser
+** General Public License version 3 as published by the Free Software
+** Foundation and appearing in the file LICENSE.LGPL3 included in the
+** packaging of this file. Please review the following information to
+** ensure the GNU Lesser General Public License version 3 requirements
+** will be met: https://www.gnu.org/licenses/lgpl-3.0.html.
+**
+** GNU General Public License Usage
+** Alternatively, this file may be used under the terms of the GNU
+** General Public License version 2.0 or (at your option) the GNU General
+** Public license version 3 or any later version approved by the KDE Free
+** Qt Foundation. The licenses are as published by the Free Software
+** Foundation and appearing in the file LICENSE.GPL2 and LICENSE.GPL3
+** included in the packaging of this file. Please review the following
+** information to ensure the GNU General Public License requirements will
+** be met: https://www.gnu.org/licenses/gpl-2.0.html and
+** https://www.gnu.org/licenses/gpl-3.0.html.
+**
+** $QT_END_LICENSE$
+**
+****************************************************************************/
+
+#include <QGuiApplication>
+#include <QQmlApplicationEngine>
+#include <QAbstractTableModel>
+
+class TestTableModel : public QAbstractTableModel
+{
+ Q_OBJECT
+ Q_PROPERTY(int rowCount READ rowCount WRITE setRowCount NOTIFY rowCountChanged)
+ Q_PROPERTY(int columnCount READ columnCount WRITE setColumnCount NOTIFY columnCountChanged)
+
+public:
+ TestTableModel(QObject *parent = nullptr) : QAbstractTableModel(parent) { }
+
+ int rowCount(const QModelIndex & = QModelIndex()) const override { return m_rows; }
+ void setRowCount(int count) { beginResetModel(); m_rows = count; emit rowCountChanged(); endResetModel(); }
+
+ int columnCount(const QModelIndex & = QModelIndex()) const override { return m_cols; }
+ void setColumnCount(int count) { beginResetModel(); m_cols = count; emit columnCountChanged(); endResetModel(); }
+
+ QVariant headerData(int section, Qt::Orientation orientation, int role) const
+ {
+ Q_UNUSED(orientation);
+ Q_UNUSED(role);
+ return QStringLiteral("Column header");
+ }
+
+ QVariant data(const QModelIndex &index, int role) const override
+ {
+ if (!index.isValid() || role != Qt::DisplayRole)
+ return QVariant();
+ return QString("[%1-%2]").arg(index.column()).arg(index.row());
+ }
+
+ QHash<int, QByteArray> roleNames() const override
+ {
+ return { {Qt::DisplayRole, "display"} };
+ }
+
+signals:
+ void rowCountChanged();
+ void columnCountChanged();
+
+private:
+ int m_rows = 0;
+ int m_cols = 0;
+};
+
+int main(int argc, char *argv[])
+{
+ QCoreApplication::setAttribute(Qt::AA_EnableHighDpiScaling);
+ QGuiApplication app(argc, argv);
+
+ qmlRegisterType<TestTableModel>("TestTableModel", 0, 1, "TestTableModel");
+
+ QQmlApplicationEngine engine;
+ engine.load(QUrl(QStringLiteral("qrc:/main.qml")));
+
+ return app.exec();
+}
+
+#include "main.moc"
diff --git a/tests/manual/tableview/abstracttablemodel/main.qml b/tests/manual/tableview/abstracttablemodel/main.qml
new file mode 100644
index 0000000000..c448815a7c
--- /dev/null
+++ b/tests/manual/tableview/abstracttablemodel/main.qml
@@ -0,0 +1,91 @@
+/****************************************************************************
+**
+** Copyright (C) 2018 The Qt Company Ltd.
+** Contact: https://www.qt.io/licensing/
+**
+** This file is part of the QtQuick module of the Qt Toolkit.
+**
+** $QT_BEGIN_LICENSE:LGPL$
+** Commercial License Usage
+** Licensees holding valid commercial Qt licenses may use this file in
+** accordance with the commercial license agreement provided with the
+** Software or, alternatively, in accordance with the terms contained in
+** a written agreement between you and The Qt Company. For licensing terms
+** and conditions see https://www.qt.io/terms-conditions. For further
+** information use the contact form at https://www.qt.io/contact-us.
+**
+** GNU Lesser General Public License Usage
+** Alternatively, this file may be used under the terms of the GNU Lesser
+** General Public License version 3 as published by the Free Software
+** Foundation and appearing in the file LICENSE.LGPL3 included in the
+** packaging of this file. Please review the following information to
+** ensure the GNU Lesser General Public License version 3 requirements
+** will be met: https://www.gnu.org/licenses/lgpl-3.0.html.
+**
+** GNU General Public License Usage
+** Alternatively, this file may be used under the terms of the GNU
+** General Public License version 2.0 or (at your option) the GNU General
+** Public license version 3 or any later version approved by the KDE Free
+** Qt Foundation. The licenses are as published by the Free Software
+** Foundation and appearing in the file LICENSE.GPL2 and LICENSE.GPL3
+** included in the packaging of this file. Please review the following
+** information to ensure the GNU General Public License requirements will
+** be met: https://www.gnu.org/licenses/gpl-2.0.html and
+** https://www.gnu.org/licenses/gpl-3.0.html.
+**
+** $QT_END_LICENSE$
+**
+****************************************************************************/
+
+import QtQuick 2.12
+import QtQuick.Window 2.3
+import QtQml.Models 2.2
+import Qt.labs.tableview 1.0
+import TestTableModel 0.1
+
+Window {
+ id: window
+ width: 640
+ height: 480
+ visible: true
+
+ TestTableModel {
+ id: tableModel
+ rowCount: 200
+ columnCount: 200
+ }
+
+ Rectangle {
+ anchors.fill: parent
+ anchors.margins: 10
+ color: "darkgray"
+
+ TableView {
+ id: tableView
+ anchors.fill: parent
+ anchors.margins: 1
+ clip: true
+
+ model: tableModel
+ delegate: tableViewDelegate
+ cacheBuffer: 500
+ columnSpacing: 1
+ rowSpacing: 1
+ }
+
+ Component {
+ id: tableViewDelegate
+ Rectangle {
+ TableView.cellWidth: TableView.column % 3 ? 80 : 50
+ TableView.cellHeight: TableView.row % 3 ? 80 : 50
+
+ Text {
+ anchors.centerIn: parent
+ text: modelData
+ }
+ }
+ }
+
+ }
+
+}
diff --git a/tests/manual/tableview/listmodel/listmodel.pro b/tests/manual/tableview/listmodel/listmodel.pro
new file mode 100644
index 0000000000..dbae0db2b1
--- /dev/null
+++ b/tests/manual/tableview/listmodel/listmodel.pro
@@ -0,0 +1,10 @@
+TEMPLATE = app
+TARGET = tableview_listmodel
+QT += qml quick
+SOURCES += main.cpp
+RESOURCES += main.qml
+
+# Default rules for deployment.
+qnx: target.path = /tmp/$${TARGET}/bin
+else: unix:!android: target.path = /opt/$${TARGET}/bin
+!isEmpty(target.path): INSTALLS += target
diff --git a/tests/manual/tableview/listmodel/main.cpp b/tests/manual/tableview/listmodel/main.cpp
new file mode 100644
index 0000000000..2a3b90d392
--- /dev/null
+++ b/tests/manual/tableview/listmodel/main.cpp
@@ -0,0 +1,52 @@
+/****************************************************************************
+**
+** Copyright (C) 2018 The Qt Company Ltd.
+** Contact: https://www.qt.io/licensing/
+**
+** This file is part of the QtQuick module of the Qt Toolkit.
+**
+** $QT_BEGIN_LICENSE:LGPL$
+** Commercial License Usage
+** Licensees holding valid commercial Qt licenses may use this file in
+** accordance with the commercial license agreement provided with the
+** Software or, alternatively, in accordance with the terms contained in
+** a written agreement between you and The Qt Company. For licensing terms
+** and conditions see https://www.qt.io/terms-conditions. For further
+** information use the contact form at https://www.qt.io/contact-us.
+**
+** GNU Lesser General Public License Usage
+** Alternatively, this file may be used under the terms of the GNU Lesser
+** General Public License version 3 as published by the Free Software
+** Foundation and appearing in the file LICENSE.LGPL3 included in the
+** packaging of this file. Please review the following information to
+** ensure the GNU Lesser General Public License version 3 requirements
+** will be met: https://www.gnu.org/licenses/lgpl-3.0.html.
+**
+** GNU General Public License Usage
+** Alternatively, this file may be used under the terms of the GNU
+** General Public License version 2.0 or (at your option) the GNU General
+** Public license version 3 or any later version approved by the KDE Free
+** Qt Foundation. The licenses are as published by the Free Software
+** Foundation and appearing in the file LICENSE.GPL2 and LICENSE.GPL3
+** included in the packaging of this file. Please review the following
+** information to ensure the GNU General Public License requirements will
+** be met: https://www.gnu.org/licenses/gpl-2.0.html and
+** https://www.gnu.org/licenses/gpl-3.0.html.
+**
+** $QT_END_LICENSE$
+**
+****************************************************************************/
+
+#include <QGuiApplication>
+#include <QQmlApplicationEngine>
+
+int main(int argc, char *argv[])
+{
+ QCoreApplication::setAttribute(Qt::AA_EnableHighDpiScaling);
+ QGuiApplication app(argc, argv);
+
+ QQmlApplicationEngine engine;
+ engine.load(QUrl(QStringLiteral("qrc:/main.qml")));
+
+ return app.exec();
+}
diff --git a/tests/manual/tableview/listmodel/main.qml b/tests/manual/tableview/listmodel/main.qml
new file mode 100644
index 0000000000..b5a1ab8379
--- /dev/null
+++ b/tests/manual/tableview/listmodel/main.qml
@@ -0,0 +1,86 @@
+/****************************************************************************
+**
+** Copyright (C) 2018 The Qt Company Ltd.
+** Contact: https://www.qt.io/licensing/
+**
+** This file is part of the QtQuick module of the Qt Toolkit.
+**
+** $QT_BEGIN_LICENSE:LGPL$
+** Commercial License Usage
+** Licensees holding valid commercial Qt licenses may use this file in
+** accordance with the commercial license agreement provided with the
+** Software or, alternatively, in accordance with the terms contained in
+** a written agreement between you and The Qt Company. For licensing terms
+** and conditions see https://www.qt.io/terms-conditions. For further
+** information use the contact form at https://www.qt.io/contact-us.
+**
+** GNU Lesser General Public License Usage
+** Alternatively, this file may be used under the terms of the GNU Lesser
+** General Public License version 3 as published by the Free Software
+** Foundation and appearing in the file LICENSE.LGPL3 included in the
+** packaging of this file. Please review the following information to
+** ensure the GNU Lesser General Public License version 3 requirements
+** will be met: https://www.gnu.org/licenses/lgpl-3.0.html.
+**
+** GNU General Public License Usage
+** Alternatively, this file may be used under the terms of the GNU
+** General Public License version 2.0 or (at your option) the GNU General
+** Public license version 3 or any later version approved by the KDE Free
+** Qt Foundation. The licenses are as published by the Free Software
+** Foundation and appearing in the file LICENSE.GPL2 and LICENSE.GPL3
+** included in the packaging of this file. Please review the following
+** information to ensure the GNU General Public License requirements will
+** be met: https://www.gnu.org/licenses/gpl-2.0.html and
+** https://www.gnu.org/licenses/gpl-3.0.html.
+**
+** $QT_END_LICENSE$
+**
+****************************************************************************/
+
+import QtQuick 2.12
+import QtQuick.Window 2.3
+import Qt.labs.tableview 1.0
+import QtQml.Models 2.2
+
+Window {
+ id: window
+ width: 640
+ height: 480
+ visible: true
+
+ ListModel {
+ id: listModel
+ Component.onCompleted: {
+ for (var i = 0; i < 30; ++i)
+ listModel.append({"name" : i})
+ }
+ }
+
+ Rectangle {
+ anchors.fill: parent
+ anchors.margins: 10
+ color: "darkgray"
+
+ TableView {
+ id: tableView
+ anchors.fill: parent
+ anchors.margins: 1
+ clip: true
+ columnSpacing: 1
+ rowSpacing: 1
+ model: listModel
+ delegate: Component {
+ Rectangle {
+ id: tableDelegate
+ TableView.cellWidth: 100
+ TableView.cellHeight: 50
+
+ Text {
+ anchors.centerIn: parent
+ text: name + "\n[" + tableDelegate.TableView.column + ", " + tableDelegate.TableView.row + "]"
+ }
+ }
+ }
+ }
+ }
+}
diff --git a/tests/manual/tableview/storagemodel/main.cpp b/tests/manual/tableview/storagemodel/main.cpp
new file mode 100644
index 0000000000..97ae619ce4
--- /dev/null
+++ b/tests/manual/tableview/storagemodel/main.cpp
@@ -0,0 +1,56 @@
+/****************************************************************************
+**
+** Copyright (C) 2018 The Qt Company Ltd.
+** Contact: https://www.qt.io/licensing/
+**
+** This file is part of the QtQuick module of the Qt Toolkit.
+**
+** $QT_BEGIN_LICENSE:LGPL$
+** Commercial License Usage
+** Licensees holding valid commercial Qt licenses may use this file in
+** accordance with the commercial license agreement provided with the
+** Software or, alternatively, in accordance with the terms contained in
+** a written agreement between you and The Qt Company. For licensing terms
+** and conditions see https://www.qt.io/terms-conditions. For further
+** information use the contact form at https://www.qt.io/contact-us.
+**
+** GNU Lesser General Public License Usage
+** Alternatively, this file may be used under the terms of the GNU Lesser
+** General Public License version 3 as published by the Free Software
+** Foundation and appearing in the file LICENSE.LGPL3 included in the
+** packaging of this file. Please review the following information to
+** ensure the GNU Lesser General Public License version 3 requirements
+** will be met: https://www.gnu.org/licenses/lgpl-3.0.html.
+**
+** GNU General Public License Usage
+** Alternatively, this file may be used under the terms of the GNU
+** General Public License version 2.0 or (at your option) the GNU General
+** Public license version 3 or any later version approved by the KDE Free
+** Qt Foundation. The licenses are as published by the Free Software
+** Foundation and appearing in the file LICENSE.GPL2 and LICENSE.GPL3
+** included in the packaging of this file. Please review the following
+** information to ensure the GNU General Public License requirements will
+** be met: https://www.gnu.org/licenses/gpl-2.0.html and
+** https://www.gnu.org/licenses/gpl-3.0.html.
+**
+** $QT_END_LICENSE$
+**
+****************************************************************************/
+
+#include <QGuiApplication>
+#include <QQmlApplicationEngine>
+#include "storagemodel.h"
+
+int main(int argc, char *argv[])
+{
+ QCoreApplication::setAttribute(Qt::AA_EnableHighDpiScaling);
+ QGuiApplication app(argc, argv);
+
+ qmlRegisterType<StorageModel>("StorageModel", 0, 1, "StorageModel");
+
+ QQmlApplicationEngine engine;
+ engine.load(QUrl(QStringLiteral("qrc:/main.qml")));
+
+ return app.exec();
+}
+
diff --git a/tests/manual/tableview/storagemodel/main.qml b/tests/manual/tableview/storagemodel/main.qml
new file mode 100644
index 0000000000..f76da374e3
--- /dev/null
+++ b/tests/manual/tableview/storagemodel/main.qml
@@ -0,0 +1,75 @@
+/****************************************************************************
+**
+** Copyright (C) 2018 The Qt Company Ltd.
+** Contact: https://www.qt.io/licensing/
+**
+** This file is part of the QtQuick module of the Qt Toolkit.
+**
+** $QT_BEGIN_LICENSE:LGPL$
+** Commercial License Usage
+** Licensees holding valid commercial Qt licenses may use this file in
+** accordance with the commercial license agreement provided with the
+** Software or, alternatively, in accordance with the terms contained in
+** a written agreement between you and The Qt Company. For licensing terms
+** and conditions see https://www.qt.io/terms-conditions. For further
+** information use the contact form at https://www.qt.io/contact-us.
+**
+** GNU Lesser General Public License Usage
+** Alternatively, this file may be used under the terms of the GNU Lesser
+** General Public License version 3 as published by the Free Software
+** Foundation and appearing in the file LICENSE.LGPL3 included in the
+** packaging of this file. Please review the following information to
+** ensure the GNU Lesser General Public License version 3 requirements
+** will be met: https://www.gnu.org/licenses/lgpl-3.0.html.
+**
+** GNU General Public License Usage
+** Alternatively, this file may be used under the terms of the GNU
+** General Public License version 2.0 or (at your option) the GNU General
+** Public license version 3 or any later version approved by the KDE Free
+** Qt Foundation. The licenses are as published by the Free Software
+** Foundation and appearing in the file LICENSE.GPL2 and LICENSE.GPL3
+** included in the packaging of this file. Please review the following
+** information to ensure the GNU General Public License requirements will
+** be met: https://www.gnu.org/licenses/gpl-2.0.html and
+** https://www.gnu.org/licenses/gpl-3.0.html.
+**
+** $QT_END_LICENSE$
+**
+****************************************************************************/
+
+import QtQuick 2.12
+import QtQuick.Window 2.3
+import Qt.labs.tableview 1.0
+import StorageModel 0.1
+
+Window {
+ id: window
+ width: 640
+ height: 480
+ visible: true
+ color: "darkgray"
+ title: "Storage Volumes"
+
+ TableView {
+ id: table
+ anchors.fill: parent
+ anchors.margins: 10
+ clip: true
+ model: StorageModel { }
+ columnSpacing: 1
+ rowSpacing: 1
+ delegate: Rectangle {
+ id: tableDelegate
+ TableView.cellWidth: displayText.implicitWidth + 8
+ TableView.cellHeight: displayText.implicitHeight + 14
+
+ Text {
+ id: displayText
+ anchors.bottom: parent.bottom
+ anchors.left: parent.left
+ anchors.leftMargin: 4
+ text: display
+ }
+ }
+ }
+}
diff --git a/tests/manual/tableview/storagemodel/storagemodel.cpp b/tests/manual/tableview/storagemodel/storagemodel.cpp
new file mode 100644
index 0000000000..345d1cc63f
--- /dev/null
+++ b/tests/manual/tableview/storagemodel/storagemodel.cpp
@@ -0,0 +1,226 @@
+/****************************************************************************
+**
+** Copyright (C) 2016 The Qt Company Ltd.
+** Copyright (C) 2016 Ivan Komissarov
+** Contact: https://www.qt.io/licensing/
+**
+** This file is part of the examples of the Qt Toolkit.
+**
+** $QT_BEGIN_LICENSE:BSD$
+** Commercial License Usage
+** Licensees holding valid commercial Qt licenses may use this file in
+** accordance with the commercial license agreement provided with the
+** Software or, alternatively, in accordance with the terms contained in
+** a written agreement between you and The Qt Company. For licensing terms
+** and conditions see https://www.qt.io/terms-conditions. For further
+** information use the contact form at https://www.qt.io/contact-us.
+**
+** BSD License Usage
+** Alternatively, you may use this file under the terms of the BSD license
+** as follows:
+**
+** "Redistribution and use in source and binary forms, with or without
+** modification, are permitted provided that the following conditions are
+** met:
+** * Redistributions of source code must retain the above copyright
+** notice, this list of conditions and the following disclaimer.
+** * Redistributions in binary form must reproduce the above copyright
+** notice, this list of conditions and the following disclaimer in
+** the documentation and/or other materials provided with the
+** distribution.
+** * Neither the name of The Qt Company Ltd nor the names of its
+** contributors may be used to endorse or promote products derived
+** from this software without specific prior written permission.
+**
+**
+** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE."
+**
+** $QT_END_LICENSE$
+**
+****************************************************************************/
+
+#include "storagemodel.h"
+
+#include <QDir>
+#include <QLocale>
+#include <qmath.h>
+#include <algorithm>
+#include <cmath>
+
+StorageModel::StorageModel(QObject *parent) :
+ QAbstractTableModel(parent)
+{
+ refresh();
+}
+
+void StorageModel::refresh()
+{
+ beginResetModel();
+ m_volumes = QStorageInfo::mountedVolumes();
+ std::sort(m_volumes.begin(), m_volumes.end(),
+ [](const QStorageInfo &st1, const QStorageInfo &st2) {
+ static const QString rootSortString = QStringLiteral(" ");
+ return (st1.isRoot() ? rootSortString : st1.rootPath())
+ < (st2.isRoot() ? rootSortString : st2.rootPath());
+ });
+ endResetModel();
+}
+
+int StorageModel::columnCount(const QModelIndex &/*parent*/) const
+{
+ return ColumnCount;
+}
+
+int StorageModel::rowCount(const QModelIndex &parent) const
+{
+ if (parent.isValid())
+ return 0;
+ return m_volumes.count();
+}
+
+Qt::ItemFlags StorageModel::flags(const QModelIndex &index) const
+{
+ Qt::ItemFlags result = QAbstractTableModel::flags(index);
+ switch (index.column()) {
+ case ColumnAvailable:
+ case ColumnIsReady:
+ case ColumnIsReadOnly:
+ case ColumnIsValid:
+ result |= Qt::ItemIsUserCheckable;
+ break;
+ default:
+ break;
+ }
+ return result;
+}
+
+QVariant StorageModel::data(const QModelIndex &index, int role) const
+{
+ if (!index.isValid())
+ return QVariant();
+
+ if (role == Qt::DisplayRole) {
+ const QStorageInfo &volume = m_volumes.at(index.row());
+ switch (index.column()) {
+ case ColumnRootPath:
+ return QDir::toNativeSeparators(volume.rootPath());
+ case ColumnName:
+ return volume.name();
+ case ColumnDevice:
+ return volume.device();
+ case ColumnFileSystemName:
+ return volume.fileSystemType();
+ case ColumnTotal:
+ return QLocale().formattedDataSize(volume.bytesTotal());
+ case ColumnFree:
+ return QLocale().formattedDataSize(volume.bytesFree());
+ case ColumnAvailable:
+ return QLocale().formattedDataSize(volume.bytesAvailable());
+ case ColumnIsReady:
+ return volume.isReady();
+ case ColumnIsReadOnly:
+ return volume.isReadOnly();
+ case ColumnIsValid:
+ return volume.isValid();
+ default:
+ break;
+ }
+ } else if (role == Qt::CheckStateRole) {
+ const QStorageInfo &volume = m_volumes.at(index.row());
+ switch (index.column()) {
+ case ColumnIsReady:
+ return volume.isReady();
+ case ColumnIsReadOnly:
+ return volume.isReadOnly();
+ case ColumnIsValid:
+ return volume.isValid();
+ default:
+ break;
+ }
+ } else if (role == Qt::TextAlignmentRole) {
+ switch (index.column()) {
+ case ColumnTotal:
+ case ColumnFree:
+ case ColumnAvailable:
+ return Qt::AlignTrailing;
+ default:
+ break;
+ }
+ return Qt::AlignLeading;
+ } else if (role == Qt::ToolTipRole) {
+ QLocale locale;
+ const QStorageInfo &volume = m_volumes.at(index.row());
+ return tr("Root path : %1\n"
+ "Name: %2\n"
+ "Display Name: %3\n"
+ "Device: %4\n"
+ "FileSystem: %5\n"
+ "Total size: %6\n"
+ "Free size: %7\n"
+ "Available size: %8\n"
+ "Is Ready: %9\n"
+ "Is Read-only: %10\n"
+ "Is Valid: %11\n"
+ "Is Root: %12"
+ ).
+ arg(QDir::toNativeSeparators(volume.rootPath())).
+ arg(volume.name()).
+ arg(volume.displayName()).
+ arg(QString::fromUtf8(volume.device())).
+ arg(QString::fromUtf8(volume.fileSystemType())).
+ arg(locale.formattedDataSize(volume.bytesTotal())).
+ arg(locale.formattedDataSize(volume.bytesFree())).
+ arg(locale.formattedDataSize(volume.bytesAvailable())).
+ arg(volume.isReady() ? tr("true") : tr("false")).
+ arg(volume.isReadOnly() ? tr("true") : tr("false")).
+ arg(volume.isValid() ? tr("true") : tr("false")).
+ arg(volume.isRoot() ? tr("true") : tr("false"));
+ }
+ return QVariant();
+}
+
+QVariant StorageModel::headerData(int section, Qt::Orientation orientation, int role) const
+{
+ if (orientation != Qt::Horizontal)
+ return QVariant();
+
+ if (role != Qt::DisplayRole)
+ return QVariant();
+
+ switch (section) {
+ case ColumnRootPath:
+ return tr("Root Path");
+ case ColumnName:
+ return tr("Volume Name");
+ case ColumnDevice:
+ return tr("Device");
+ case ColumnFileSystemName:
+ return tr("File System");
+ case ColumnTotal:
+ return tr("Total");
+ case ColumnFree:
+ return tr("Free");
+ case ColumnAvailable:
+ return tr("Available");
+ case ColumnIsReady:
+ return tr("Ready");
+ case ColumnIsReadOnly:
+ return tr("Read-only");
+ case ColumnIsValid:
+ return tr("Valid");
+ default:
+ break;
+ }
+
+ return QVariant();
+}
diff --git a/tests/manual/tableview/storagemodel/storagemodel.h b/tests/manual/tableview/storagemodel/storagemodel.h
new file mode 100644
index 0000000000..787b2f04de
--- /dev/null
+++ b/tests/manual/tableview/storagemodel/storagemodel.h
@@ -0,0 +1,93 @@
+/****************************************************************************
+**
+** Copyright (C) 2016 The Qt Company Ltd.
+** Copyright (C) 2016 Ivan Komissarov
+** Contact: https://www.qt.io/licensing/
+**
+** This file is part of the examples of the Qt Toolkit.
+**
+** $QT_BEGIN_LICENSE:BSD$
+** Commercial License Usage
+** Licensees holding valid commercial Qt licenses may use this file in
+** accordance with the commercial license agreement provided with the
+** Software or, alternatively, in accordance with the terms contained in
+** a written agreement between you and The Qt Company. For licensing terms
+** and conditions see https://www.qt.io/terms-conditions. For further
+** information use the contact form at https://www.qt.io/contact-us.
+**
+** BSD License Usage
+** Alternatively, you may use this file under the terms of the BSD license
+** as follows:
+**
+** "Redistribution and use in source and binary forms, with or without
+** modification, are permitted provided that the following conditions are
+** met:
+** * Redistributions of source code must retain the above copyright
+** notice, this list of conditions and the following disclaimer.
+** * Redistributions in binary form must reproduce the above copyright
+** notice, this list of conditions and the following disclaimer in
+** the documentation and/or other materials provided with the
+** distribution.
+** * Neither the name of The Qt Company Ltd nor the names of its
+** contributors may be used to endorse or promote products derived
+** from this software without specific prior written permission.
+**
+**
+** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE."
+**
+** $QT_END_LICENSE$
+**
+****************************************************************************/
+
+#ifndef STORAGEMODEL_H
+#define STORAGEMODEL_H
+
+#include <QAbstractTableModel>
+#include <QStorageInfo>
+
+class StorageModel : public QAbstractTableModel
+{
+ Q_OBJECT
+ Q_DISABLE_COPY(StorageModel)
+public:
+ enum Column {
+ ColumnRootPath = 0,
+ ColumnName,
+ ColumnDevice,
+ ColumnFileSystemName,
+ ColumnTotal,
+ ColumnFree,
+ ColumnAvailable,
+ ColumnIsReady,
+ ColumnIsReadOnly,
+ ColumnIsValid,
+ ColumnCount
+ };
+
+ explicit StorageModel(QObject *parent = nullptr);
+
+ int columnCount(const QModelIndex &parent) const override;
+ int rowCount(const QModelIndex &parent) const override;
+
+ QVariant data(const QModelIndex &index, int role) const override;
+ Qt::ItemFlags flags(const QModelIndex &index) const override;
+ QVariant headerData(int section, Qt::Orientation orientation, int role) const override;
+
+public slots:
+ void refresh();
+
+private:
+ QList<QStorageInfo> m_volumes;
+};
+
+#endif // STORAGEMODEL_H
diff --git a/tests/manual/tableview/storagemodel/storagemodel.pro b/tests/manual/tableview/storagemodel/storagemodel.pro
new file mode 100644
index 0000000000..c6a018239e
--- /dev/null
+++ b/tests/manual/tableview/storagemodel/storagemodel.pro
@@ -0,0 +1,11 @@
+TEMPLATE = app
+TARGET = tableview_storage
+QT += qml quick
+SOURCES += main.cpp storagemodel.cpp
+HEADERS += storagemodel.h
+RESOURCES += main.qml
+
+# Default rules for deployment.
+qnx: target.path = /tmp/$${TARGET}/bin
+else: unix:!android: target.path = /opt/$${TARGET}/bin
+!isEmpty(target.path): INSTALLS += target
diff --git a/tests/manual/tableview/tableview.pro b/tests/manual/tableview/tableview.pro
new file mode 100644
index 0000000000..5040f0e747
--- /dev/null
+++ b/tests/manual/tableview/tableview.pro
@@ -0,0 +1,4 @@
+TEMPLATE = subdirs
+SUBDIRS += abstracttablemodel \
+ listmodel \
+ storagemodel