Fix avdmanageroutputparser test

- There is no PLUGIN_DEPENDS for tests, and it wouldn't work anyhow
  because of duplicated symbols. It was interpreted as a dependency and
  the test disabled because no such target exists.
- Move the platformNameToApiLevel(...) function to
  avdmanageroutputparser.h to break the dependency to a lot of Android
  support code.

Amends 78da7e2922

Change-Id: I6933684a76e5291d415c72388caa3df2bee7cbfb
Reviewed-by: <github-actions-qt-creator@cristianadam.eu>
Reviewed-by: Alessandro Portale <alessandro.portale@qt.io>
This commit is contained in:
Eike Ziller
2022-02-02 16:32:24 +01:00
committed by Alessandro Portale
parent 1e34d6ee22
commit 9bc9fb5a0d
6 changed files with 28 additions and 29 deletions

View File

@@ -473,28 +473,6 @@ QString AndroidConfig::apiLevelNameFor(const SdkPlatform *platform)
QString("android-%1").arg(platform->apiLevel()) : "";
}
int AndroidConfig::platformNameToApiLevel(const QString &platformName)
{
int apiLevel = -1;
static const QRegularExpression re("(android-)(?<apiLevel>[0-9A-Z]{1,})",
QRegularExpression::CaseInsensitiveOption);
QRegularExpressionMatch match = re.match(platformName);
if (match.hasMatch()) {
QString apiLevelStr = match.captured("apiLevel");
bool isUInt;
apiLevel = apiLevelStr.toUInt(&isUInt);
if (!isUInt) {
if (apiLevelStr == 'Q')
apiLevel = 29;
else if (apiLevelStr == 'R')
apiLevel = 30;
else if (apiLevelStr == 'S')
apiLevel = 31;
}
}
return apiLevel;
}
bool AndroidConfig::isCmdlineSdkToolsInstalled() const
{
QString toolPath("cmdline-tools/latest/bin/sdkmanager");

View File

@@ -91,7 +91,6 @@ public:
static QStringList apiLevelNamesFor(const SdkPlatformList &platforms);
static QString apiLevelNameFor(const SdkPlatform *platform);
static int platformNameToApiLevel(const QString &platformName);
Utils::FilePath sdkLocation() const;
void setSdkLocation(const Utils::FilePath &sdkLocation);

View File

@@ -28,6 +28,7 @@
#include "androidconfigurations.h"
#include "androidconstants.h"
#include "androidmanager.h"
#include "avdmanageroutputparser.h"
#include <utils/algorithm.h>
#include <utils/qtcassert.h>
@@ -691,7 +692,7 @@ AndroidSdkPackage *SdkManagerOutputParser::parsePlatform(const QStringList &data
SdkPlatform *platform = nullptr;
GenericPackageData packageData;
if (parseAbstractData(packageData, data, 2, "Platform")) {
const int apiLevel = AndroidConfig::platformNameToApiLevel(packageData.headerParts.at(1));
const int apiLevel = platformNameToApiLevel(packageData.headerParts.at(1));
if (apiLevel == -1) {
qCDebug(sdkManagerLog) << "Platform: Cannot parse api level:"<< data;
return nullptr;
@@ -711,7 +712,7 @@ QPair<SystemImage *, int> SdkManagerOutputParser::parseSystemImage(const QString
QPair <SystemImage *, int> result(nullptr, -1);
GenericPackageData packageData;
if (parseAbstractData(packageData, data, 4, "System-image")) {
const int apiLevel = AndroidConfig::platformNameToApiLevel(packageData.headerParts.at(1));
const int apiLevel = platformNameToApiLevel(packageData.headerParts.at(1));
if (apiLevel == -1) {
qCDebug(sdkManagerLog) << "System-image: Cannot parse api level:"<< data;
return result;

View File

@@ -34,6 +34,7 @@
#include <utils/variant.h>
#include <QLoggingCategory>
#include <QRegularExpression>
#include <QSettings>
namespace {
@@ -98,7 +99,7 @@ static Utils::optional<AndroidDeviceInfo> parseAvd(const QStringList &deviceInfo
QSettings avdInfo(avdInfoFile.toString(), QSettings::IniFormat);
value = avdInfo.value(avdInfoTargetKey).toString();
if (!value.isEmpty())
avd.sdk = AndroidConfig::platformNameToApiLevel(value);
avd.sdk = platformNameToApiLevel(value);
else
qCDebug(avdOutputParserLog)
<< "Avd Parsing: Cannot find sdk API:" << avdInfoFile.toString();
@@ -164,5 +165,27 @@ AndroidDeviceInfoList parseAvdList(const QString &output, QStringList *avdErrorP
return avdList;
}
int platformNameToApiLevel(const QString &platformName)
{
int apiLevel = -1;
static const QRegularExpression re("(android-)(?<apiLevel>[0-9A-Z]{1,})",
QRegularExpression::CaseInsensitiveOption);
QRegularExpressionMatch match = re.match(platformName);
if (match.hasMatch()) {
QString apiLevelStr = match.captured("apiLevel");
bool isUInt;
apiLevel = apiLevelStr.toUInt(&isUInt);
if (!isUInt) {
if (apiLevelStr == 'Q')
apiLevel = 29;
else if (apiLevelStr == 'R')
apiLevel = 30;
else if (apiLevelStr == 'S')
apiLevel = 31;
}
}
return apiLevel;
}
} // namespace Internal
} // namespace Android

View File

@@ -31,6 +31,7 @@ namespace Internal {
const char avdManufacturerError[] = "no longer exists as a device";
AndroidDeviceInfoList parseAvdList(const QString &output, QStringList *avdErrorPaths);
int platformNameToApiLevel(const QString &platformName);
} // namespace Internal
} // namespace Android

View File

@@ -1,6 +1,5 @@
add_qtc_test(tst_avdmanageroutputparser
DEPENDS Utils
PLUGIN_DEPENDS Android
INCLUDES
"${PROJECT_SOURCE_DIR}/src/plugins"
"${PROJECT_SOURCE_DIR}/src/plugins/android"
@@ -10,8 +9,6 @@ add_qtc_test(tst_avdmanageroutputparser
"${PROJECT_SOURCE_DIR}/src/plugins/android/avdmanageroutputparser.h"
"${PROJECT_SOURCE_DIR}/src/plugins/android/androiddeviceinfo.cpp"
"${PROJECT_SOURCE_DIR}/src/plugins/android/androiddeviceinfo.h"
"${PROJECT_SOURCE_DIR}/src/plugins/android/androidmanager.cpp"
"${PROJECT_SOURCE_DIR}/src/plugins/android/androidmanager.h"
)
qtc_add_resources(tst_avdmanageroutputparser tst_avdmanageroutputparser_rcc