summaryrefslogtreecommitdiffstats
path: root/tests/auto/wasm/tst_qstdweb.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'tests/auto/wasm/tst_qstdweb.cpp')
-rw-r--r--tests/auto/wasm/tst_qstdweb.cpp629
1 files changed, 0 insertions, 629 deletions
diff --git a/tests/auto/wasm/tst_qstdweb.cpp b/tests/auto/wasm/tst_qstdweb.cpp
deleted file mode 100644
index f074866a3d..0000000000
--- a/tests/auto/wasm/tst_qstdweb.cpp
+++ /dev/null
@@ -1,629 +0,0 @@
-// Copyright (C) 2022 The Qt Company Ltd.
-// Copyright (C) 2016 Intel Corporation.
-// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only WITH Qt-GPL-exception-1.0
-
-#include <QtCore/qtimer.h>
-#include <QtCore/private/qstdweb_p.h>
-#include <QTest>
-#include <emscripten.h>
-#include <emscripten/bind.h>
-#include <emscripten/val.h>
-
-#if defined(QT_HAVE_EMSCRIPTEN_ASYNCIFY)
-#define SKIP_IF_NO_ASYNCIFY()
-#else
-#define SKIP_IF_NO_ASYNCIFY() QSKIP("Needs QT_HAVE_EMSCRIPTEN_ASYNCIFY")
-#endif
-
-using namespace emscripten;
-
-class tst_QStdWeb : public QObject
-{
- Q_OBJECT
-public:
- tst_QStdWeb() : m_window(val::global("window")), m_testSupport(val::object()) {
- instance = this;
-
- m_window.set("testSupport", m_testSupport);
- }
- ~tst_QStdWeb() noexcept {}
-
-private:
- static tst_QStdWeb* instance;
-
- void init() {
- EM_ASM({
- testSupport.resolve = {};
- testSupport.reject = {};
- testSupport.promises = {};
- testSupport.waitConditionPromise = new Promise((resolve, reject) => {
- testSupport.finishWaiting = resolve;
- });
-
- testSupport.makeTestPromise = (param) => {
- testSupport.promises[param] = new Promise((resolve, reject) => {
- testSupport.resolve[param] = resolve;
- testSupport.reject[param] = reject;
- });
-
- return testSupport.promises[param];
- };
- });
- }
-
- val m_window;
- val m_testSupport;
-
-private Q_SLOTS:
- void simpleResolve();
- void multipleResolve();
- void simpleReject();
- void multipleReject();
- void throwInThen();
- void bareFinally();
- void finallyWithThen();
- void finallyWithThrow();
- void finallyWithThrowInThen();
- void nested();
- void all();
- void allWithThrow();
- void allWithFinally();
- void allWithFinallyAndThrow();
-};
-
-tst_QStdWeb* tst_QStdWeb::instance = nullptr;
-
-EM_ASYNC_JS(void, awaitCondition, (), {
- await testSupport.waitConditionPromise;
-});
-
-void tst_QStdWeb::simpleResolve()
-{
- SKIP_IF_NO_ASYNCIFY();
-
- init();
-
- qstdweb::Promise::make(m_testSupport, "makeTestPromise", {
- .thenFunc = [](val result) {
- QVERIFY(result.isString());
- QCOMPARE("Some lovely data", result.as<std::string>());
- EM_ASM({
- testSupport.finishWaiting();
- });
- },
- .catchFunc = [](val error) {
- Q_UNUSED(error);
- QFAIL("Unexpected catch");
- }
- }, std::string("simpleResolve"));
-
- EM_ASM({
- testSupport.resolve["simpleResolve"]("Some lovely data");
- });
-
- awaitCondition();
-}
-
-void tst_QStdWeb::multipleResolve()
-{
- SKIP_IF_NO_ASYNCIFY();
-
- init();
-
- qstdweb::Promise::make(m_testSupport, "makeTestPromise", {
- .thenFunc = [](val result) {
- QVERIFY(result.isString());
- QCOMPARE("Data 1", result.as<std::string>());
-
- EM_ASM({
- if (!--testSupport.promisesLeft) {
- testSupport.finishWaiting();
- }
- });
- },
- .catchFunc = [](val error) {
- Q_UNUSED(error);
- QFAIL("Unexpected catch");
- }
- }, std::string("1"));
- qstdweb::Promise::make(m_testSupport, "makeTestPromise", {
- .thenFunc = [](val result) {
- QVERIFY(result.isString());
- QCOMPARE("Data 2", result.as<std::string>());
-
- EM_ASM({
- if (!--testSupport.promisesLeft) {
- testSupport.finishWaiting();
- }
- });
- },
- .catchFunc = [](val error) {
- Q_UNUSED(error);
- QFAIL("Unexpected catch");
- }
- }, std::string("2"));
- qstdweb::Promise::make(m_testSupport, "makeTestPromise", {
- .thenFunc = [](val result) {
- QVERIFY(result.isString());
- QCOMPARE("Data 3", result.as<std::string>());
-
- EM_ASM({
- if (!--testSupport.promisesLeft) {
- testSupport.finishWaiting();
- }
- });
- },
- .catchFunc = [](val error) {
- Q_UNUSED(error);
- QFAIL("Unexpected catch");
- }
- }, std::string("3"));
-
- EM_ASM({
- testSupport.resolve["3"]("Data 3");
- testSupport.resolve["1"]("Data 1");
- testSupport.resolve["2"]("Data 2");
- });
-
- awaitCondition();
-}
-
-void tst_QStdWeb::simpleReject()
-{
- SKIP_IF_NO_ASYNCIFY();
-
- init();
-
- qstdweb::Promise::make(m_testSupport, "makeTestPromise", {
- .thenFunc = [](val result) {
- Q_UNUSED(result);
- QFAIL("Unexpected then");
- },
- .catchFunc = [](val result) {
- QVERIFY(result.isString());
- QCOMPARE("Evil error", result.as<std::string>());
- EM_ASM({
- testSupport.finishWaiting();
- });
- }
- }, std::string("simpleReject"));
-
- EM_ASM({
- testSupport.reject["simpleReject"]("Evil error");
- });
-
- awaitCondition();
-}
-
-void tst_QStdWeb::multipleReject()
-{
- SKIP_IF_NO_ASYNCIFY();
-
- init();
-
- qstdweb::Promise::make(m_testSupport, "makeTestPromise", {
- .thenFunc = [](val result) {
- Q_UNUSED(result);
- QFAIL("Unexpected then");
- },
- .catchFunc = [](val error) {
- QVERIFY(error.isString());
- QCOMPARE("Error 1", error.as<std::string>());
-
- EM_ASM({
- if (!--testSupport.promisesLeft) {
- testSupport.finishWaiting();
- }
- });
- }
- }, std::string("1"));
- qstdweb::Promise::make(m_testSupport, "makeTestPromise", {
- .thenFunc = [](val result) {
- Q_UNUSED(result);
- QFAIL("Unexpected then");
- },
- .catchFunc = [](val error) {
- QVERIFY(error.isString());
- QCOMPARE("Error 2", error.as<std::string>());
-
- EM_ASM({
- if (!--testSupport.promisesLeft) {
- testSupport.finishWaiting();
- }
- });
- }
- }, std::string("2"));
- qstdweb::Promise::make(m_testSupport, "makeTestPromise", {
- .thenFunc = [](val result) {
- Q_UNUSED(result);
- QFAIL("Unexpected then");
- },
- .catchFunc = [](val error) {
- QVERIFY(error.isString());
- QCOMPARE("Error 3", error.as<std::string>());
-
- EM_ASM({
- if (!--testSupport.promisesLeft) {
- testSupport.finishWaiting();
- }
- });
- }
- }, std::string("3"));
-
- EM_ASM({
- testSupport.reject["3"]("Error 3");
- testSupport.reject["1"]("Error 1");
- testSupport.reject["2"]("Error 2");
- });
-
- awaitCondition();
-}
-
-void tst_QStdWeb::throwInThen()
-{
- SKIP_IF_NO_ASYNCIFY();
-
- init();
-
- qstdweb::Promise::make(m_testSupport, "makeTestPromise", {
- .thenFunc = [](val result) {
- Q_UNUSED(result);
- EM_ASM({
- throw "Expected error";
- });
- },
- .catchFunc = [](val error) {
- QCOMPARE("Expected error", error.as<std::string>());
- EM_ASM({
- testSupport.finishWaiting();
- });
- }
- }, std::string("throwInThen"));
-
- EM_ASM({
- testSupport.resolve["throwInThen"]();
- });
-
- awaitCondition();
-}
-
-void tst_QStdWeb::bareFinally()
-{
- SKIP_IF_NO_ASYNCIFY();
-
- init();
-
- qstdweb::Promise::make(m_testSupport, "makeTestPromise", {
- .finallyFunc = []() {
- EM_ASM({
- testSupport.finishWaiting();
- });
- }
- }, std::string("bareFinally"));
-
- EM_ASM({
- testSupport.resolve["bareFinally"]();
- });
-
- awaitCondition();
-}
-
-void tst_QStdWeb::finallyWithThen()
-{
- SKIP_IF_NO_ASYNCIFY();
-
- init();
-
- qstdweb::Promise::make(m_testSupport, "makeTestPromise", {
- .thenFunc = [] (val result) {
- Q_UNUSED(result);
- },
- .finallyFunc = []() {
- EM_ASM({
- testSupport.finishWaiting();
- });
- }
- }, std::string("finallyWithThen"));
-
- EM_ASM({
- testSupport.resolve["finallyWithThen"]();
- });
-
- awaitCondition();
-}
-
-void tst_QStdWeb::finallyWithThrow()
-{
- SKIP_IF_NO_ASYNCIFY();
-
- init();
-
- qstdweb::Promise::make(m_testSupport, "makeTestPromise", {
- .catchFunc = [](val error) {
- Q_UNUSED(error);
- },
- .finallyFunc = []() {
- EM_ASM({
- testSupport.finishWaiting();
- });
- }
- }, std::string("finallyWithThrow"));
-
- EM_ASM({
- testSupport.reject["finallyWithThrow"]();
- });
-
- awaitCondition();
-}
-
-void tst_QStdWeb::finallyWithThrowInThen()
-{
- SKIP_IF_NO_ASYNCIFY();
-
- init();
-
- qstdweb::Promise::make(m_testSupport, "makeTestPromise", {
- .thenFunc = [](val result) {
- Q_UNUSED(result);
- EM_ASM({
- throw "Expected error";
- });
- },
- .catchFunc = [](val result) {
- QVERIFY(result.isString());
- QCOMPARE("Expected error", result.as<std::string>());
- },
- .finallyFunc = []() {
- EM_ASM({
- testSupport.finishWaiting();
- });
- }
- }, std::string("bareFinallyWithThen"));
-
- EM_ASM({
- testSupport.resolve["bareFinallyWithThen"]();
- });
-
- awaitCondition();
-}
-
-void tst_QStdWeb::nested()
-{
- SKIP_IF_NO_ASYNCIFY();
-
- init();
-
- qstdweb::Promise::make(m_testSupport, "makeTestPromise", {
- .thenFunc = [this](val result) {
- QVERIFY(result.isString());
- QCOMPARE("Outer data", result.as<std::string>());
-
- qstdweb::Promise::make(m_testSupport, "makeTestPromise", {
- .thenFunc = [this](val innerResult) {
- QVERIFY(innerResult.isString());
- QCOMPARE("Inner data", innerResult.as<std::string>());
-
- qstdweb::Promise::make(m_testSupport, "makeTestPromise", {
- .thenFunc = [](val innerResult) {
- QVERIFY(innerResult.isString());
- QCOMPARE("Innermost data", innerResult.as<std::string>());
-
- EM_ASM({
- testSupport.finishWaiting();
- });
- },
- .catchFunc = [](val error) {
- Q_UNUSED(error);
- QFAIL("Unexpected catch");
- }
- }, std::string("innermost"));
-
- EM_ASM({
- testSupport.finishWaiting();
- });
- },
- .catchFunc = [](val error) {
- Q_UNUSED(error);
- QFAIL("Unexpected catch");
- }
- }, std::string("inner"));
-
- EM_ASM({
- testSupport.finishWaiting();
- });
- },
- .catchFunc = [](val error) {
- Q_UNUSED(error);
- QFAIL("Unexpected catch");
- }
- }, std::string("outer"));
-
- EM_ASM({
- testSupport.resolve["outer"]("Outer data");
- });
-
- awaitCondition();
-
- EM_ASM({
- testSupport.waitConditionPromise = new Promise((resolve, reject) => {
- testSupport.finishWaiting = resolve;
- });
- });
-
- EM_ASM({
- testSupport.resolve["inner"]("Inner data");
- });
-
- awaitCondition();
-
- EM_ASM({
- testSupport.waitConditionPromise = new Promise((resolve, reject) => {
- testSupport.finishWaiting = resolve;
- });
- });
-
- EM_ASM({
- testSupport.resolve["innermost"]("Innermost data");
- });
-
- awaitCondition();
-}
-
-void tst_QStdWeb::all()
-{
- SKIP_IF_NO_ASYNCIFY();
-
- init();
-
- val promise1 = m_testSupport.call<val>("makeTestPromise", val("promise1"));
- val promise2 = m_testSupport.call<val>("makeTestPromise", val("promise2"));
- val promise3 = m_testSupport.call<val>("makeTestPromise", val("promise3"));
-
- auto thenCalledOnce = std::shared_ptr<bool>();
- *thenCalledOnce = true;
-
- qstdweb::Promise::all({promise1, promise2, promise3}, {
- .thenFunc = [thenCalledOnce](val result) {
- QVERIFY(*thenCalledOnce);
- *thenCalledOnce = false;
-
- QVERIFY(result.isArray());
- QCOMPARE(3, result["length"].as<int>());
- QCOMPARE("Data 1", result[0].as<std::string>());
- QCOMPARE("Data 2", result[1].as<std::string>());
- QCOMPARE("Data 3", result[2].as<std::string>());
-
- EM_ASM({
- testSupport.finishWaiting();
- });
- },
- .catchFunc = [](val result) {
- Q_UNUSED(result);
- EM_ASM({
- throw new Error("Unexpected error");
- });
- }
- });
-
- EM_ASM({
- testSupport.resolve["promise3"]("Data 3");
- testSupport.resolve["promise1"]("Data 1");
- testSupport.resolve["promise2"]("Data 2");
- });
-
- awaitCondition();
-}
-
-void tst_QStdWeb::allWithThrow()
-{
- SKIP_IF_NO_ASYNCIFY();
-
- init();
-
- val promise1 = m_testSupport.call<val>("makeTestPromise", val("promise1"));
- val promise2 = m_testSupport.call<val>("makeTestPromise", val("promise2"));
- val promise3 = m_testSupport.call<val>("makeTestPromise", val("promise3"));
-
- auto catchCalledOnce = std::shared_ptr<bool>();
- *catchCalledOnce = true;
-
- qstdweb::Promise::all({promise1, promise2, promise3}, {
- .thenFunc = [](val result) {
- Q_UNUSED(result);
- QFAIL("Unexpected then");
- },
- .catchFunc = [catchCalledOnce](val result) {
- QVERIFY(*catchCalledOnce);
- *catchCalledOnce = false;
- QVERIFY(result.isString());
- QCOMPARE("Error 2", result.as<std::string>());
- EM_ASM({
- testSupport.finishWaiting();
- });
- }
- });
-
- EM_ASM({
- testSupport.resolve["promise3"]("Data 3");
- testSupport.resolve["promise1"]("Data 1");
- testSupport.reject["promise2"]("Error 2");
- });
-
- awaitCondition();
-}
-
-void tst_QStdWeb::allWithFinally()
-{
- SKIP_IF_NO_ASYNCIFY();
-
- init();
-
- val promise1 = m_testSupport.call<val>("makeTestPromise", val("promise1"));
- val promise2 = m_testSupport.call<val>("makeTestPromise", val("promise2"));
- val promise3 = m_testSupport.call<val>("makeTestPromise", val("promise3"));
-
- auto finallyCalledOnce = std::shared_ptr<bool>();
- *finallyCalledOnce = true;
-
- qstdweb::Promise::all({promise1, promise2, promise3}, {
- .thenFunc = [](val result) {
- Q_UNUSED(result);
- },
- .finallyFunc = [finallyCalledOnce]() {
- QVERIFY(*finallyCalledOnce);
- *finallyCalledOnce = false;
- EM_ASM({
- testSupport.finishWaiting();
- });
- }
- });
-
- EM_ASM({
- testSupport.resolve["promise3"]("Data 3");
- testSupport.resolve["promise1"]("Data 1");
- testSupport.resolve["promise2"]("Data 2");
- });
-
- awaitCondition();
-}
-
-void tst_QStdWeb::allWithFinallyAndThrow()
-{
- SKIP_IF_NO_ASYNCIFY();
-
- init();
-
- val promise1 = m_testSupport.call<val>("makeTestPromise", val("promise1"));
- val promise2 = m_testSupport.call<val>("makeTestPromise", val("promise2"));
- val promise3 = m_testSupport.call<val>("makeTestPromise", val("promise3"));
-
- auto finallyCalledOnce = std::shared_ptr<bool>();
- *finallyCalledOnce = true;
-
- qstdweb::Promise::all({promise1, promise2, promise3}, {
- .thenFunc = [](val result) {
- Q_UNUSED(result);
- EM_ASM({
- throw "This breaks it all!!!";
- });
- },
- .finallyFunc = [finallyCalledOnce]() {
- QVERIFY(*finallyCalledOnce);
- *finallyCalledOnce = false;
- EM_ASM({
- testSupport.finishWaiting();
- });
- }
- });
-
- EM_ASM({
- testSupport.resolve["promise3"]("Data 3");
- testSupport.resolve["promise1"]("Data 1");
- testSupport.resolve["promise2"]("Data 2");
- });
-
- awaitCondition();
-}
-
-QTEST_APPLESS_MAIN(tst_QStdWeb)
-#include "tst_qstdweb.moc"