aboutsummaryrefslogtreecommitdiffstats
path: root/src/plugins/webassembly
diff options
context:
space:
mode:
authorAlessandro Portale <alessandro.portale@qt.io>2023-02-14 12:53:28 +0100
committerAlessandro Portale <alessandro.portale@qt.io>2023-02-15 11:00:49 +0000
commitaa72b039dabd2917c41569782693635856d6e2cb (patch)
treea86c7de380f2e560449614363ddbe3b2aef6bb76 /src/plugins/webassembly
parent3ac0822854e7056a8b4e5e07be0ec9d1b6024bff (diff)
WebAssembly: Reorganize plugin tests
Change-Id: I1e2be15877ef4d1adc8355b820c1b8fc333d6409 Reviewed-by: Christian Stenger <christian.stenger@qt.io>
Diffstat (limited to 'src/plugins/webassembly')
-rw-r--r--src/plugins/webassembly/CMakeLists.txt7
-rw-r--r--src/plugins/webassembly/webassembly.qbs9
-rw-r--r--src/plugins/webassembly/webassembly_test.cpp120
-rw-r--r--src/plugins/webassembly/webassembly_test.h21
-rw-r--r--src/plugins/webassembly/webassemblyemsdk.cpp95
-rw-r--r--src/plugins/webassembly/webassemblyemsdk.h24
-rw-r--r--src/plugins/webassembly/webassemblyplugin.cpp10
-rw-r--r--src/plugins/webassembly/webassemblyplugin.h10
-rw-r--r--src/plugins/webassembly/webassemblyrunconfigurationaspects.cpp84
-rw-r--r--src/plugins/webassembly/webassemblyrunconfigurationaspects.h2
10 files changed, 205 insertions, 177 deletions
diff --git a/src/plugins/webassembly/CMakeLists.txt b/src/plugins/webassembly/CMakeLists.txt
index 7bbca8877a..3ee300b09f 100644
--- a/src/plugins/webassembly/CMakeLists.txt
+++ b/src/plugins/webassembly/CMakeLists.txt
@@ -15,3 +15,10 @@ add_qtc_plugin(WebAssembly
webassemblyrunconfiguration.cpp webassemblyrunconfiguration.h
webassemblytoolchain.cpp webassemblytoolchain.h
)
+
+extend_qtc_plugin(WebAssembly
+ CONDITION WITH_TESTS
+ SOURCES
+ webassembly_test.cpp
+ webassembly_test.h
+)
diff --git a/src/plugins/webassembly/webassembly.qbs b/src/plugins/webassembly/webassembly.qbs
index e13b329aa5..9c6e95f99f 100644
--- a/src/plugins/webassembly/webassembly.qbs
+++ b/src/plugins/webassembly/webassembly.qbs
@@ -32,4 +32,13 @@ QtcPlugin {
"webassemblytoolchain.cpp",
"webassemblytoolchain.h",
]
+
+ Group {
+ name: "Unit tests"
+ condition: qtc.testsEnabled
+ files: [
+ "webassembly_test.cpp",
+ "webassembly_test.h",
+ ]
+ }
}
diff --git a/src/plugins/webassembly/webassembly_test.cpp b/src/plugins/webassembly/webassembly_test.cpp
new file mode 100644
index 0000000000..6292cd9942
--- /dev/null
+++ b/src/plugins/webassembly/webassembly_test.cpp
@@ -0,0 +1,120 @@
+// Copyright (C) 2023 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only WITH Qt-GPL-exception-1.0
+
+#include "webassembly_test.h"
+
+#include "webassemblyemsdk.h"
+#include "webassemblyrunconfigurationaspects.h"
+
+#include <utils/environment.h>
+
+#include <QTest>
+
+using namespace Utils;
+
+namespace WebAssembly::Internal {
+
+void WebAssemblyTest::testEmSdkEnvParsing()
+{
+ QFETCH(QString, emSdkEnvOutput);
+ QFETCH(int, osType);
+ QFETCH(int, pathCount);
+ QFETCH(QString, emsdk);
+ QFETCH(QString, em_config);
+
+ Environment env{OsType(osType)};
+ WebAssemblyEmSdk::parseEmSdkEnvOutputAndAddToEnv(emSdkEnvOutput, env);
+
+ QVERIFY(env.path().count() == pathCount);
+ QCOMPARE(env.value("EMSDK"), emsdk);
+ QCOMPARE(env.value("EM_CONFIG"), em_config);
+}
+
+void WebAssemblyTest::testEmSdkEnvParsing_data()
+{
+ // Output of "emsdk_env"
+ QTest::addColumn<QString>("emSdkEnvOutput");
+ QTest::addColumn<int>("osType");
+ QTest::addColumn<int>("pathCount");
+ QTest::addColumn<QString>("emsdk");
+ QTest::addColumn<QString>("em_config");
+
+ QTest::newRow("windows") << R"(
+Adding directories to PATH:
+PATH += C:\Users\user\dev\emsdk
+PATH += C:\Users\user\dev\emsdk\upstream\emscripten
+PATH += C:\Users\user\dev\emsdk\node\12.18.1_64bit\bin
+PATH += C:\Users\user\dev\emsdk\python\3.7.4-pywin32_64bit
+PATH += C:\Users\user\dev\emsdk\java\8.152_64bit\bin
+
+Setting environment variables:
+PATH = C:\Users\user\dev\emsdk;C:\Users\user\dev\emsdk\upstream\emscripten;C:\Users\user\dev\emsdk\node\12.18.1_64bit\bin;C:\Users\user\dev\emsdk\python\3.7.4-pywin32_64bit;C:\Users\user\dev\emsdk\java\8.152_64bit\bin;...other_stuff...
+EMSDK = C:/Users/user/dev/emsdk
+EM_CONFIG = C:\Users\user\dev\emsdk\.emscripten
+EM_CACHE = C:/Users/user/dev/emsdk/upstream/emscripten\cache
+EMSDK_NODE = C:\Users\user\dev\emsdk\node\12.18.1_64bit\bin\node.exe
+EMSDK_PYTHON = C:\Users\user\dev\emsdk\python\3.7.4-pywin32_64bit\python.exe
+JAVA_HOME = C:\Users\user\dev\emsdk\java\8.152_64bit
+ )" << int(OsTypeWindows) << 6 << "C:/Users/user/dev/emsdk" << "C:\\Users\\user\\dev\\emsdk\\.emscripten";
+
+ QTest::newRow("linux") << R"(
+Adding directories to PATH:
+PATH += /home/user/dev/emsdk
+PATH += /home/user/dev/emsdk/upstream/emscripten
+PATH += /home/user/dev/emsdk/node/12.18.1_64bit/bin
+
+Setting environment variables:
+PATH = /home/user/dev/emsdk:/home/user/dev/emsdk/upstream/emscripten:/home/user/dev/emsdk/node/12.18.1_64bit/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/usr/local/games:/snap/bin
+EMSDK = /home/user/dev/emsdk
+EM_CONFIG = /home/user/dev/emsdk/.emscripten
+EM_CACHE = /home/user/dev/emsdk/upstream/emscripten/cache
+EMSDK_NODE = /home/user/dev/emsdk/node/12.18.1_64bit/bin/node
+ )" << int(OsTypeLinux) << 3 << "/home/user/dev/emsdk" << "/home/user/dev/emsdk/.emscripten";
+}
+
+void WebAssemblyTest::testEmrunBrowserListParsing()
+{
+ QFETCH(QByteArray, emrunOutput);
+ QFETCH(WebBrowserEntries, expectedBrowsers);
+
+ QCOMPARE(WebBrowserSelectionAspect::parseEmrunOutput(emrunOutput), expectedBrowsers);
+}
+
+void WebAssemblyTest::testEmrunBrowserListParsing_data()
+{
+ QTest::addColumn<QByteArray>("emrunOutput");
+ QTest::addColumn<WebBrowserEntries>("expectedBrowsers");
+
+ QTest::newRow("emsdk 1.39.8")
+// Output of "emrun --list_browsers"
+ << QByteArray(
+R"(emrun has automatically found the following browsers in the default install locations on the system:
+
+ - firefox: Mozilla Firefox
+ - chrome: Google Chrome
+
+You can pass the --browser <id> option to launch with the given browser above.
+Even if your browser was not detected, you can use --browser /path/to/browser/executable to launch with that browser.
+
+)")
+ << WebBrowserEntries({
+ {QLatin1String("firefox"), QLatin1String("Mozilla Firefox")},
+ {QLatin1String("chrome"), QLatin1String("Google Chrome")}});
+
+ QTest::newRow("emsdk 2.0.14")
+ << QByteArray(
+R"(emrun has automatically found the following browsers in the default install locations on the system:
+
+ - firefox: Mozilla Firefox 96.0.0.8041
+ - chrome: Google Chrome 97.0.4692.71
+
+You can pass the --browser <id> option to launch with the given browser above.
+Even if your browser was not detected, you can use --browser /path/to/browser/executable to launch with that browser.
+
+)")
+ << WebBrowserEntries({
+ {QLatin1String("firefox"), QLatin1String("Mozilla Firefox 96.0.0.8041")},
+ {QLatin1String("chrome"), QLatin1String("Google Chrome 97.0.4692.71")}});
+}
+
+} // namespace WebAssembly::Internal
diff --git a/src/plugins/webassembly/webassembly_test.h b/src/plugins/webassembly/webassembly_test.h
new file mode 100644
index 0000000000..252d8f8038
--- /dev/null
+++ b/src/plugins/webassembly/webassembly_test.h
@@ -0,0 +1,21 @@
+// Copyright (C) 2023 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only WITH Qt-GPL-exception-1.0
+
+#pragma once
+
+#include <qobject.h>
+
+namespace WebAssembly::Internal {
+
+class WebAssemblyTest : public QObject
+{
+ Q_OBJECT
+
+private slots:
+ void testEmSdkEnvParsing();
+ void testEmSdkEnvParsing_data();
+ void testEmrunBrowserListParsing();
+ void testEmrunBrowserListParsing_data();
+};
+
+} // WebAssembly::Internal
diff --git a/src/plugins/webassembly/webassemblyemsdk.cpp b/src/plugins/webassembly/webassemblyemsdk.cpp
index e3fa174a77..4acf6589c4 100644
--- a/src/plugins/webassembly/webassemblyemsdk.cpp
+++ b/src/plugins/webassembly/webassemblyemsdk.cpp
@@ -1,25 +1,21 @@
// Copyright (C) 2020 The Qt Company Ltd.
// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only WITH Qt-GPL-exception-1.0
-#include "webassemblyconstants.h"
#include "webassemblyemsdk.h"
+#include "webassemblyconstants.h"
+
#include <coreplugin/icore.h>
#include <utils/environment.h>
#include <utils/qtcprocess.h>
#include <utils/hostosinfo.h>
+#include <QCache>
#include <QSettings>
-#ifdef WITH_TESTS
-# include <QTest>
-# include "webassemblyplugin.h"
-#endif // WITH_TESTS
-
using namespace Utils;
-namespace WebAssembly {
-namespace Internal {
+namespace WebAssembly::Internal::WebAssemblyEmSdk {
using EmSdkEnvCache = QCache<QString, QString>;
Q_GLOBAL_STATIC_WITH_ARGS(EmSdkEnvCache, emSdkEnvCache, (10))
@@ -47,7 +43,7 @@ static QString emSdkEnvOutput(const FilePath &sdkRoot)
return *emSdkEnvCache()->object(cacheKey);
}
-static void parseEmSdkEnvOutputAndAddToEnv(const QString &output, Environment &env)
+void parseEmSdkEnvOutputAndAddToEnv(const QString &output, Environment &env)
{
const QStringList lines = output.split('\n');
@@ -70,25 +66,25 @@ static void parseEmSdkEnvOutputAndAddToEnv(const QString &output, Environment &e
env.appendOrSetPath(FilePath::fromUserInput(emsdkPython).parentDir());
}
-bool WebAssemblyEmSdk::isValid(const FilePath &sdkRoot)
+bool isValid(const FilePath &sdkRoot)
{
return !version(sdkRoot).isNull();
}
-void WebAssemblyEmSdk::addToEnvironment(const FilePath &sdkRoot, Environment &env)
+void addToEnvironment(const FilePath &sdkRoot, Environment &env)
{
if (sdkRoot.exists())
parseEmSdkEnvOutputAndAddToEnv(emSdkEnvOutput(sdkRoot), env);
}
-QVersionNumber WebAssemblyEmSdk::version(const FilePath &sdkRoot)
+QVersionNumber version(const FilePath &sdkRoot)
{
if (!sdkRoot.exists())
return {};
const QString cacheKey = sdkRoot.toString();
if (!emSdkVersionCache()->contains(cacheKey)) {
Environment env = sdkRoot.deviceEnvironment();
- WebAssemblyEmSdk::addToEnvironment(sdkRoot, env);
+ addToEnvironment(sdkRoot, env);
QLatin1String scriptFile{sdkRoot.osType() == OsType::OsTypeWindows ? "emcc.bat" : "emcc"};
FilePath script = sdkRoot.withNewPath(scriptFile).searchInDirectories(env.path());
const CommandLine command(script, {"-dumpversion"});
@@ -103,88 +99,25 @@ QVersionNumber WebAssemblyEmSdk::version(const FilePath &sdkRoot)
return *emSdkVersionCache()->object(cacheKey);
}
-void WebAssemblyEmSdk::registerEmSdk(const FilePath &sdkRoot)
+void registerEmSdk(const FilePath &sdkRoot)
{
QSettings *s = Core::ICore::settings();
s->setValue(QLatin1String(Constants::SETTINGS_GROUP) + '/'
+ QLatin1String(Constants::SETTINGS_KEY_EMSDK), sdkRoot.toString());
}
-FilePath WebAssemblyEmSdk::registeredEmSdk()
+FilePath registeredEmSdk()
{
QSettings *s = Core::ICore::settings();
const QString path = s->value(QLatin1String(Constants::SETTINGS_GROUP) + '/'
- + QLatin1String(Constants::SETTINGS_KEY_EMSDK)).toString();
+ + QLatin1String(Constants::SETTINGS_KEY_EMSDK)).toString();
return FilePath::fromUserInput(path);
}
-void WebAssemblyEmSdk::clearCaches()
+void clearCaches()
{
emSdkEnvCache()->clear();
emSdkVersionCache()->clear();
}
-// Unit tests:
-#ifdef WITH_TESTS
-void WebAssemblyPlugin::testEmSdkEnvParsing()
-{
- QFETCH(QString, emSdkEnvOutput);
- QFETCH(int, osType);
- QFETCH(int, pathCount);
- QFETCH(QString, emsdk);
- QFETCH(QString, em_config);
-
- Environment env{OsType(osType)};
- parseEmSdkEnvOutputAndAddToEnv(emSdkEnvOutput, env);
-
- QVERIFY(env.path().count() == pathCount);
- QCOMPARE(env.value("EMSDK"), emsdk);
- QCOMPARE(env.value("EM_CONFIG"), em_config);
-}
-
-void WebAssemblyPlugin::testEmSdkEnvParsing_data()
-{
- // Output of "emsdk_env"
- QTest::addColumn<QString>("emSdkEnvOutput");
- QTest::addColumn<int>("osType");
- QTest::addColumn<int>("pathCount");
- QTest::addColumn<QString>("emsdk");
- QTest::addColumn<QString>("em_config");
-
- QTest::newRow("windows") << R"(
-Adding directories to PATH:
-PATH += C:\Users\user\dev\emsdk
-PATH += C:\Users\user\dev\emsdk\upstream\emscripten
-PATH += C:\Users\user\dev\emsdk\node\12.18.1_64bit\bin
-PATH += C:\Users\user\dev\emsdk\python\3.7.4-pywin32_64bit
-PATH += C:\Users\user\dev\emsdk\java\8.152_64bit\bin
-
-Setting environment variables:
-PATH = C:\Users\user\dev\emsdk;C:\Users\user\dev\emsdk\upstream\emscripten;C:\Users\user\dev\emsdk\node\12.18.1_64bit\bin;C:\Users\user\dev\emsdk\python\3.7.4-pywin32_64bit;C:\Users\user\dev\emsdk\java\8.152_64bit\bin;...other_stuff...
-EMSDK = C:/Users/user/dev/emsdk
-EM_CONFIG = C:\Users\user\dev\emsdk\.emscripten
-EM_CACHE = C:/Users/user/dev/emsdk/upstream/emscripten\cache
-EMSDK_NODE = C:\Users\user\dev\emsdk\node\12.18.1_64bit\bin\node.exe
-EMSDK_PYTHON = C:\Users\user\dev\emsdk\python\3.7.4-pywin32_64bit\python.exe
-JAVA_HOME = C:\Users\user\dev\emsdk\java\8.152_64bit
- )" << int(OsTypeWindows) << 6 << "C:/Users/user/dev/emsdk" << "C:\\Users\\user\\dev\\emsdk\\.emscripten";
-
- QTest::newRow("linux") << R"(
-Adding directories to PATH:
-PATH += /home/user/dev/emsdk
-PATH += /home/user/dev/emsdk/upstream/emscripten
-PATH += /home/user/dev/emsdk/node/12.18.1_64bit/bin
-
-Setting environment variables:
-PATH = /home/user/dev/emsdk:/home/user/dev/emsdk/upstream/emscripten:/home/user/dev/emsdk/node/12.18.1_64bit/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/usr/local/games:/snap/bin
-EMSDK = /home/user/dev/emsdk
-EM_CONFIG = /home/user/dev/emsdk/.emscripten
-EM_CACHE = /home/user/dev/emsdk/upstream/emscripten/cache
-EMSDK_NODE = /home/user/dev/emsdk/node/12.18.1_64bit/bin/node
- )" << int(OsTypeLinux) << 3 << "/home/user/dev/emsdk" << "/home/user/dev/emsdk/.emscripten";
-}
-
-#endif // WITH_TESTS
-
-} // namespace Internal
-} // namespace WebAssembly
+} // namespace WebAssembly::Internal::WebAssemblyEmSdk
diff --git a/src/plugins/webassembly/webassemblyemsdk.h b/src/plugins/webassembly/webassemblyemsdk.h
index beadc32f40..8310e0320f 100644
--- a/src/plugins/webassembly/webassemblyemsdk.h
+++ b/src/plugins/webassembly/webassemblyemsdk.h
@@ -3,7 +3,6 @@
#pragma once
-#include <QCache>
#include <QVersionNumber>
namespace Utils {
@@ -11,19 +10,14 @@ class Environment;
class FilePath;
}
-namespace WebAssembly {
-namespace Internal {
+namespace WebAssembly::Internal::WebAssemblyEmSdk {
-class WebAssemblyEmSdk
-{
-public:
- static bool isValid(const Utils::FilePath &sdkRoot);
- static void addToEnvironment(const Utils::FilePath &sdkRoot, Utils::Environment &env);
- static QVersionNumber version(const Utils::FilePath &sdkRoot);
- static void registerEmSdk(const Utils::FilePath &sdkRoot);
- static Utils::FilePath registeredEmSdk();
- static void clearCaches();
-};
+bool isValid(const Utils::FilePath &sdkRoot);
+void parseEmSdkEnvOutputAndAddToEnv(const QString &output, Utils::Environment &env);
+void addToEnvironment(const Utils::FilePath &sdkRoot, Utils::Environment &env);
+QVersionNumber version(const Utils::FilePath &sdkRoot);
+void registerEmSdk(const Utils::FilePath &sdkRoot);
+Utils::FilePath registeredEmSdk();
+void clearCaches();
-} // namespace Internal
-} // namespace WebAssembly
+} // WebAssembly::Internal::WebAssemblyEmSdk
diff --git a/src/plugins/webassembly/webassemblyplugin.cpp b/src/plugins/webassembly/webassemblyplugin.cpp
index 2d342030d5..0857e43f2f 100644
--- a/src/plugins/webassembly/webassemblyplugin.cpp
+++ b/src/plugins/webassembly/webassemblyplugin.cpp
@@ -1,10 +1,14 @@
// Copyright (C) 2020 The Qt Company Ltd.
// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only WITH Qt-GPL-exception-1.0
+#include "webassemblyplugin.h"
+
+#ifdef WITH_TESTS
+#include "webassembly_test.h"
+#endif // WITH_TESTS
#include "webassemblyconstants.h"
#include "webassemblydevice.h"
#include "webassemblyoptionspage.h"
-#include "webassemblyplugin.h"
#include "webassemblyqtversion.h"
#include "webassemblyrunconfiguration.h"
#include "webassemblytoolchain.h"
@@ -54,6 +58,10 @@ WebAssemblyPlugin::~WebAssemblyPlugin()
void WebAssemblyPlugin::initialize()
{
dd = new WebAssemblyPluginPrivate;
+
+#ifdef WITH_TESTS
+ addTest<WebAssemblyTest>();
+#endif // WITH_TESTS
}
void WebAssemblyPlugin::extensionsInitialized()
diff --git a/src/plugins/webassembly/webassemblyplugin.h b/src/plugins/webassembly/webassemblyplugin.h
index 20c9e3e085..5cdd706ccd 100644
--- a/src/plugins/webassembly/webassemblyplugin.h
+++ b/src/plugins/webassembly/webassemblyplugin.h
@@ -3,8 +3,6 @@
#pragma once
-#include "webassembly_global.h"
-
#include <extensionsystem/iplugin.h>
namespace WebAssembly::Internal {
@@ -21,14 +19,6 @@ public:
void initialize() override;
void extensionsInitialized() override;
static void askUserAboutEmSdkSetup();
-
-#ifdef WITH_TESTS
-private slots:
- void testEmSdkEnvParsing();
- void testEmSdkEnvParsing_data();
- void testEmrunBrowserListParsing();
- void testEmrunBrowserListParsing_data();
-#endif // WITH_TESTS
};
} // WebAssembly::Internal
diff --git a/src/plugins/webassembly/webassemblyrunconfigurationaspects.cpp b/src/plugins/webassembly/webassemblyrunconfigurationaspects.cpp
index e82a5f268e..c1eb243e49 100644
--- a/src/plugins/webassembly/webassemblyrunconfigurationaspects.cpp
+++ b/src/plugins/webassembly/webassemblyrunconfigurationaspects.cpp
@@ -14,11 +14,6 @@
#include <QComboBox>
#include <QTextStream>
-#ifdef WITH_TESTS
-# include <QTest>
-# include "webassemblyplugin.h"
-#endif // WITH_TESTS
-
using namespace Utils;
namespace WebAssembly {
@@ -26,20 +21,6 @@ namespace Internal {
static const char BROWSER_KEY[] = "WASM.WebBrowserSelectionAspect.Browser";
-static WebBrowserEntries parseEmrunOutput(const QByteArray &output)
-{
- WebBrowserEntries result;
- QTextStream ts(output);
- QString line;
- const QRegularExpression regExp(" - (.*):(.*)");
- while (ts.readLineInto(&line)) {
- const QRegularExpressionMatch match = regExp.match(line);
- if (match.hasMatch())
- result.push_back({match.captured(1), match.captured(2).trimmed()});
- }
- return result;
-}
-
static WebBrowserEntries emrunBrowsers(ProjectExplorer::Target *target)
{
WebBrowserEntries result;
@@ -54,7 +35,8 @@ static WebBrowserEntries emrunBrowsers(ProjectExplorer::Target *target)
browserLister.start();
if (browserLister.waitForFinished())
- result.append(parseEmrunOutput(browserLister.readAllRawStandardOutput()));
+ result.append(WebBrowserSelectionAspect::parseEmrunOutput(
+ browserLister.readAllRawStandardOutput()));
}
return result;
}
@@ -103,58 +85,20 @@ QString WebBrowserSelectionAspect::currentBrowser() const
return m_currentBrowser;
}
-// Unit tests:
-#ifdef WITH_TESTS
-
-void testEmrunBrowserListParsing();
-void testEmrunBrowserListParsing_data();
-
-void WebAssemblyPlugin::testEmrunBrowserListParsing()
-{
- QFETCH(QByteArray, emrunOutput);
- QFETCH(WebBrowserEntries, expectedBrowsers);
-
- QCOMPARE(parseEmrunOutput(emrunOutput), expectedBrowsers);
-}
-
-void WebAssemblyPlugin::testEmrunBrowserListParsing_data()
+WebBrowserEntries WebBrowserSelectionAspect::parseEmrunOutput(const QByteArray &output)
{
- QTest::addColumn<QByteArray>("emrunOutput");
- QTest::addColumn<WebBrowserEntries>("expectedBrowsers");
-
- QTest::newRow("emsdk 1.39.8")
-// Output of "emrun --list_browsers"
- << QByteArray(
-R"(emrun has automatically found the following browsers in the default install locations on the system:
-
- - firefox: Mozilla Firefox
- - chrome: Google Chrome
-
-You can pass the --browser <id> option to launch with the given browser above.
-Even if your browser was not detected, you can use --browser /path/to/browser/executable to launch with that browser.
-
-)")
- << WebBrowserEntries({
- {QLatin1String("firefox"), QLatin1String("Mozilla Firefox")},
- {QLatin1String("chrome"), QLatin1String("Google Chrome")}});
-
- QTest::newRow("emsdk 2.0.14")
- << QByteArray(
-R"(emrun has automatically found the following browsers in the default install locations on the system:
-
- - firefox: Mozilla Firefox 96.0.0.8041
- - chrome: Google Chrome 97.0.4692.71
-
-You can pass the --browser <id> option to launch with the given browser above.
-Even if your browser was not detected, you can use --browser /path/to/browser/executable to launch with that browser.
-
-)")
- << WebBrowserEntries({
- {QLatin1String("firefox"), QLatin1String("Mozilla Firefox 96.0.0.8041")},
- {QLatin1String("chrome"), QLatin1String("Google Chrome 97.0.4692.71")}});
+ WebBrowserEntries result;
+ QTextStream ts(output);
+ QString line;
+ static const QRegularExpression regExp(R"( - (.*):\s*(.*))"); // ' - firefox: Mozilla Firefox'
+ // ^__1__^ ^______2______^
+ while (ts.readLineInto(&line)) {
+ const QRegularExpressionMatch match = regExp.match(line);
+ if (match.hasMatch())
+ result.push_back({match.captured(1), match.captured(2)});
+ }
+ return result;
}
-#endif // WITH_TESTS
-
} // namespace Internal
} // namespace Webassembly
diff --git a/src/plugins/webassembly/webassemblyrunconfigurationaspects.h b/src/plugins/webassembly/webassemblyrunconfigurationaspects.h
index ee8329a581..1d713274ed 100644
--- a/src/plugins/webassembly/webassemblyrunconfigurationaspects.h
+++ b/src/plugins/webassembly/webassemblyrunconfigurationaspects.h
@@ -27,6 +27,8 @@ public:
QString currentBrowser() const;
+ static WebBrowserEntries parseEmrunOutput(const QByteArray &output);
+
struct Data : BaseAspect::Data
{
QString currentBrowser;