diff options
Diffstat (limited to 'tests')
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 |