diff options
author | Alessandro Portale <alessandro.portale@qt.io> | 2023-02-14 12:53:28 +0100 |
---|---|---|
committer | Alessandro Portale <alessandro.portale@qt.io> | 2023-02-15 11:00:49 +0000 |
commit | aa72b039dabd2917c41569782693635856d6e2cb (patch) | |
tree | a86c7de380f2e560449614363ddbe3b2aef6bb76 /src/plugins/webassembly | |
parent | 3ac0822854e7056a8b4e5e07be0ec9d1b6024bff (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.txt | 7 | ||||
-rw-r--r-- | src/plugins/webassembly/webassembly.qbs | 9 | ||||
-rw-r--r-- | src/plugins/webassembly/webassembly_test.cpp | 120 | ||||
-rw-r--r-- | src/plugins/webassembly/webassembly_test.h | 21 | ||||
-rw-r--r-- | src/plugins/webassembly/webassemblyemsdk.cpp | 95 | ||||
-rw-r--r-- | src/plugins/webassembly/webassemblyemsdk.h | 24 | ||||
-rw-r--r-- | src/plugins/webassembly/webassemblyplugin.cpp | 10 | ||||
-rw-r--r-- | src/plugins/webassembly/webassemblyplugin.h | 10 | ||||
-rw-r--r-- | src/plugins/webassembly/webassemblyrunconfigurationaspects.cpp | 84 | ||||
-rw-r--r-- | src/plugins/webassembly/webassemblyrunconfigurationaspects.h | 2 |
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; |