From d76ba333816abfb73833582feff324b44f25e0a0 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Piotr=20Mu=C4=87ko?= Date: Thu, 25 Aug 2022 15:40:26 +0200 Subject: [PATCH] McuSupport: unittests for legacy 3rd party package creation MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Change-Id: I83e3daf1f718066b20798aae2cf19836529b1f56 Reviewed-by: Dawid Śliwa Reviewed-by: Reviewed-by: Alessandro Portale --- src/plugins/mcusupport/mcusupportsdk.cpp | 11 ++-- src/plugins/mcusupport/mcusupportsdk.h | 5 ++ src/plugins/mcusupport/test/unittest.cpp | 74 ++++++++++++++++++++++++ src/plugins/mcusupport/test/unittest.h | 7 +++ 4 files changed, 91 insertions(+), 6 deletions(-) diff --git a/src/plugins/mcusupport/mcusupportsdk.cpp b/src/plugins/mcusupport/mcusupportsdk.cpp index abd80e80a02..0e5dc1d42b3 100644 --- a/src/plugins/mcusupport/mcusupportsdk.cpp +++ b/src/plugins/mcusupport/mcusupportsdk.cpp @@ -358,7 +358,7 @@ McuToolChainPackagePtr createIarToolChainPackage(const SettingsHandler::Ptr &set versionDetector)}; } -static McuPackagePtr createStm32CubeProgrammerPackage(const SettingsHandler::Ptr &settingsHandler) +McuPackagePtr createStm32CubeProgrammerPackage(const SettingsHandler::Ptr &settingsHandler) { FilePath defaultPath; const QString cubePath = "STMicroelectronics/STM32Cube/STM32CubeProgrammer"; @@ -392,7 +392,7 @@ static McuPackagePtr createStm32CubeProgrammerPackage(const SettingsHandler::Ptr )}; } -static McuPackagePtr createMcuXpressoIdePackage(const SettingsHandler::Ptr &settingsHandler) +McuPackagePtr createMcuXpressoIdePackage(const SettingsHandler::Ptr &settingsHandler) { const char envVar[] = "MCUXpressoIDE_PATH"; @@ -427,7 +427,7 @@ static McuPackagePtr createMcuXpressoIdePackage(const SettingsHandler::Ptr &sett "https://www.nxp.com/mcuxpresso/ide")}; // download url } -static McuPackagePtr createCypressProgrammerPackage(const SettingsHandler::Ptr &settingsHandler) +McuPackagePtr createCypressProgrammerPackage(const SettingsHandler::Ptr &settingsHandler) { const char envVar[] = "CYPRESS_AUTO_FLASH_UTILITY_DIR"; @@ -455,7 +455,7 @@ static McuPackagePtr createCypressProgrammerPackage(const SettingsHandler::Ptr & envVar)}; // env var } -static McuPackagePtr createRenesasProgrammerPackage(const SettingsHandler::Ptr &settingsHandler) +McuPackagePtr createRenesasProgrammerPackage(const SettingsHandler::Ptr &settingsHandler) { const char envVar[] = "RENESAS_FLASH_PROGRAMMER_PATH"; @@ -704,8 +704,7 @@ McuTargetDescription parseDescriptionJson(const QByteArray &data) toolchainPackage, toolchainFilePackage}, boardSdkPackage, - {freeRTOS.value("envVar").toString(), - freeRtosPackage}}; + {freeRTOS.value("envVar").toString(), freeRtosPackage}}; } // https://doc.qt.io/qtcreator/creator-developing-mcu.html#supported-qt-for-mcus-sdks diff --git a/src/plugins/mcusupport/mcusupportsdk.h b/src/plugins/mcusupport/mcusupportsdk.h index c45e000ec4a..34f3bf06c03 100644 --- a/src/plugins/mcusupport/mcusupportsdk.h +++ b/src/plugins/mcusupport/mcusupportsdk.h @@ -54,5 +54,10 @@ McuPackagePtr createFreeRTOSSourcesPackage(const SettingsHandler::Ptr &settingsH const QString &envVar, const Utils::FilePath &boardSdkDir); +McuPackagePtr createStm32CubeProgrammerPackage(const SettingsHandler::Ptr &); +McuPackagePtr createRenesasProgrammerPackage(const SettingsHandler::Ptr &); +McuPackagePtr createCypressProgrammerPackage(const SettingsHandler::Ptr &); +McuPackagePtr createMcuXpressoIdePackage(const SettingsHandler::Ptr &); + } // namespace Legacy } // namespace McuSupport::Internal diff --git a/src/plugins/mcusupport/test/unittest.cpp b/src/plugins/mcusupport/test/unittest.cpp index cb641b04d49..c42bef3c380 100644 --- a/src/plugins/mcusupport/test/unittest.cpp +++ b/src/plugins/mcusupport/test/unittest.cpp @@ -1284,4 +1284,78 @@ void McuSupportTest::test_resolveCmakeVariablesInDefaultPath() QCOMPARE(toolchainFilePkg->defaultPath().toString(), expectedPkgPath); } +void McuSupportTest::test_legacy_createThirdPartyPackage_data() +{ + const QString defaultToolPath{"/opt/biz/foo"}; + + const char xpressoIdeSetting[]{"MCUXpressoIDE"}; + const char xpressoIdeCmakeVar[]{"MCUXPRESSO_IDE_PATH"}; + const char xpressoIdeEnvVar[]{"MCUXpressoIDE_PATH"}; + + const char stmCubeProgrammerSetting[]{"Stm32CubeProgrammer"}; + const QString stmCubeProgrammerPath{defaultToolPath + "/bin"}; + + const char renesasProgrammerSetting[]{"RenesasFlashProgrammer"}; + const char renesasProgrammerCmakeVar[]{"RENESAS_FLASH_PROGRAMMER_PATH"}; + const QString renesasProgrammerEnvVar{renesasProgrammerCmakeVar}; + + const char cypressProgrammerSetting[]{"CypressAutoFlashUtil"}; + const char cypressProgrammerCmakeVar[]{"INFINEON_AUTO_FLASH_UTILITY_DIR"}; + const char cypressProgrammerEnvVar[]{"CYPRESS_AUTO_FLASH_UTILITY_DIR"}; + + QTest::addColumn("creator"); + QTest::addColumn("path"); + QTest::addColumn("defaultPath"); + QTest::addColumn("setting"); + QTest::addColumn("cmakeVar"); + QTest::addColumn("envVar"); + + QTest::newRow("mcuXpresso") << PackageCreator{[this]() { + return Legacy::createMcuXpressoIdePackage(settingsMockPtr); + }} << defaultToolPath << defaultToolPath + << xpressoIdeSetting << xpressoIdeCmakeVar << xpressoIdeEnvVar; + QTest::newRow("stmCubeProgrammer") << PackageCreator{[this]() { + return Legacy::createStm32CubeProgrammerPackage(settingsMockPtr); + }} << stmCubeProgrammerPath << defaultToolPath + << stmCubeProgrammerSetting << empty << empty; + + QTest::newRow("renesasProgrammer") << PackageCreator{[this]() { + return Legacy::createRenesasProgrammerPackage(settingsMockPtr); + }} << defaultToolPath << defaultToolPath + << renesasProgrammerSetting << renesasProgrammerCmakeVar + << renesasProgrammerEnvVar; + + QTest::newRow("cypressProgrammer") << PackageCreator{[this]() { + return Legacy::createCypressProgrammerPackage(settingsMockPtr); + }} << defaultToolPath << defaultToolPath + << cypressProgrammerSetting << cypressProgrammerCmakeVar + << cypressProgrammerEnvVar; +} + +void McuSupportTest::test_legacy_createThirdPartyPackage() +{ + QFETCH(PackageCreator, creator); + QFETCH(QString, path); + QFETCH(QString, defaultPath); + QFETCH(QString, setting); + QFETCH(QString, cmakeVar); + QFETCH(QString, envVar); + + if (!envVar.isEmpty()) + QVERIFY(qputenv(envVar.toLocal8Bit(), defaultPath.toLocal8Bit())); + + EXPECT_CALL(*settingsMockPtr, getPath(QString{setting}, _, _)) + .Times(2) + .WillRepeatedly(Return(FilePath::fromUserInput(defaultPath))); + + McuPackagePtr thirdPartyPacakge{creator()}; + QVERIFY(thirdPartyPacakge); + QCOMPARE(thirdPartyPacakge->settingsKey(), setting); + QCOMPARE(thirdPartyPacakge->environmentVariableName(), envVar); + QCOMPARE(thirdPartyPacakge->path().toString(), path); + + if (!envVar.isEmpty()) + QVERIFY(qunsetenv(envVar.toLocal8Bit())); +} + } // namespace McuSupport::Internal::Test diff --git a/src/plugins/mcusupport/test/unittest.h b/src/plugins/mcusupport/test/unittest.h index dc81e297f06..36b835c6e7d 100644 --- a/src/plugins/mcusupport/test/unittest.h +++ b/src/plugins/mcusupport/test/unittest.h @@ -92,6 +92,9 @@ private slots: void test_resolveEnvironmentVariablesInDefaultPath(); void test_resolveCmakeVariablesInDefaultPath(); + void test_legacy_createThirdPartyPackage_data(); + void test_legacy_createThirdPartyPackage(); + private: QVersionNumber currentQulVersion{2, 0}; PackageMock *freeRtosPackage{new PackageMock}; @@ -112,6 +115,10 @@ private: McuTarget::Platform platform; McuTarget mcuTarget; ProjectExplorer::Kit kit; + }; // class McuSupportTest +using PackageCreator = std::function; } // namespace McuSupport::Internal::Test + +Q_DECLARE_METATYPE(McuSupport::Internal::Test::PackageCreator);