Skip to content

Commit 93e18f8

Browse files
authored
[projmgr] Handle --filter option case insensitive
1 parent fed3161 commit 93e18f8

File tree

6 files changed

+59
-26
lines changed

6 files changed

+59
-26
lines changed

libs/rteutils/include/RteUtils.h

Lines changed: 9 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,7 @@
88
*/
99
/******************************************************************************/
1010
/*
11-
* Copyright (c) 2020-2024 Arm Limited. All rights reserved.
11+
* Copyright (c) 2020-2025 Arm Limited. All rights reserved.
1212
*
1313
* SPDX-License-Identifier: Apache-2.0
1414
*/
@@ -397,6 +397,14 @@ class RteUtils
397397
* @return trimmed string without whitespace characters after newline character
398398
*/
399399
static std::string RemoveLeadingSpaces(const std::string& input);
400+
401+
/**
402+
* @brief convert string characters to lower case
403+
* @param input string
404+
* @return string with lower case characters
405+
*/
406+
static std::string ToLower(const std::string& input);
407+
400408
// static constants
401409
public:
402410
static const std::string EMPTY_STRING;

libs/rteutils/src/RteUtils.cpp

Lines changed: 9 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,7 @@
66
*/
77
/******************************************************************************/
88
/*
9-
* Copyright (c) 2020-2024 Arm Limited. All rights reserved.
9+
* Copyright (c) 2020-2025 Arm Limited. All rights reserved.
1010
*
1111
* SPDX-License-Identifier: Apache-2.0
1212
*/
@@ -621,7 +621,7 @@ void RteUtils::ApplyFilter(const vector<string>& origin, const set<string>& filt
621621
if (word.empty()) {
622622
continue;
623623
}
624-
if (item.find(word) == string::npos) {
624+
if (RteUtils::ToLower(item).find(RteUtils::ToLower(word)) == string::npos) {
625625
match = false;
626626
break;
627627
}
@@ -642,4 +642,11 @@ string RteUtils::RemoveLeadingSpaces(const string& input) {
642642
return result;
643643
}
644644

645+
string RteUtils::ToLower(const string& input) {
646+
string output = input;
647+
std::transform(output.begin(), output.end(), output.begin(),
648+
[](unsigned char c) { return std::tolower(c); });
649+
return output;
650+
}
651+
645652
// End of RteUtils.cpp

libs/rteutils/test/src/RteUtilsTest.cpp

Lines changed: 9 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
/*
2-
* Copyright (c) 2020-2024 Arm Limited. All rights reserved.
2+
* Copyright (c) 2020-2025 Arm Limited. All rights reserved.
33
*
44
* SPDX-License-Identifier: Apache-2.0
55
*/
@@ -613,4 +613,12 @@ TEST(RteUtilsTest, RemoveLeadingSpaces) {
613613
EXPECT_EQ(RteUtils::RemoveLeadingSpaces("Start\n"), "Start\n");
614614
EXPECT_EQ(RteUtils::RemoveLeadingSpaces("Full"), "Full");
615615
}
616+
617+
TEST(RteUtilsTest, ToLower) {
618+
EXPECT_EQ(RteUtils::ToLower("ALL UPPER CASE"), "all upper case");
619+
EXPECT_EQ(RteUtils::ToLower("all lower case"), "all lower case");
620+
EXPECT_EQ(RteUtils::ToLower("Mixed Case"), "mixed case");
621+
EXPECT_EQ(RteUtils::ToLower("Mixed Case And @$% Symbols_0H12AB"), "mixed case and @$% symbols_0h12ab");
622+
}
623+
616624
// end of RteUtilsTest.cpp

tools/projmgr/src/ProjMgr.cpp

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1030,7 +1030,8 @@ bool ProjMgr::RunListDebuggers(void) {
10301030
debugger += "\n " + alias;
10311031
}
10321032
}
1033-
if (!m_filter.empty() && debugger.find(m_filter) == string::npos) {
1033+
if (!m_filter.empty() &&
1034+
RteUtils::ToLower(debugger).find(RteUtils::ToLower(m_filter)) == string::npos) {
10341035
continue;
10351036
}
10361037
debuggers.push_back(debugger);

tools/projmgr/src/ProjMgrWorker.cpp

Lines changed: 7 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -4383,15 +4383,16 @@ std::vector<ExampleItem> ProjMgrWorker::CollectExamples(const ContextItem& conte
43834383
}
43844384

43854385
template<class T> bool ProjMgrWorker::CheckFilter(const std::string& filter, const T& item) {
4386-
const bool nameFound = item.name.find(filter) != string::npos;
4387-
const bool packFound = item.pack.find(filter) != string::npos;
4388-
const bool descriptionFound = m_verbose ? item.description.find(filter) != string::npos : false;
4386+
const string filterNoCase = RteUtils::ToLower(filter);
4387+
const bool nameFound = RteUtils::ToLower(item.name).find(filterNoCase) != string::npos;
4388+
const bool packFound = RteUtils::ToLower(item.pack).find(filterNoCase) != string::npos;
4389+
const bool descriptionFound = m_verbose ? RteUtils::ToLower(item.description).find(filterNoCase) != string::npos : false;
43894390
bool boardFound = false;
43904391
if (m_verbose) {
43914392
for (const auto& board : item.boards) {
4392-
if (board.vendor.find(filter) != std::string::npos ||
4393-
board.name.find(filter) != std::string::npos ||
4394-
board.revision.find(filter) != std::string::npos) {
4393+
if (RteUtils::ToLower(board.vendor).find(filterNoCase) != std::string::npos ||
4394+
RteUtils::ToLower(board.name).find(filterNoCase) != std::string::npos ||
4395+
RteUtils::ToLower(board.revision).find(filterNoCase) != std::string::npos) {
43954396
boardFound = true;
43964397
break;
43974398
}

tools/projmgr/test/src/ProjMgrUnitTests.cpp

Lines changed: 23 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -488,7 +488,7 @@ TEST_F(ProjMgrUnitTests, RunProjMgr_ListBoards) {
488488
argv[1] = (char*)"list";
489489
argv[2] = (char*)"boards";
490490
argv[3] = (char*)"--filter";
491-
argv[4] = (char*)"Dummy";
491+
argv[4] = (char*)"DUMMY";
492492
EXPECT_EQ(0, RunProjMgr(5, argv, 0));
493493

494494
auto outStr = streamRedirect.GetOutString();
@@ -527,7 +527,7 @@ TEST_F(ProjMgrUnitTests, RunProjMgr_ListDevices) {
527527
argv[1] = (char*)"list";
528528
argv[2] = (char*)"devices";
529529
argv[3] = (char*)"--filter";
530-
argv[4] = (char*)"RteTest_ARMCM4";
530+
argv[4] = (char*)"RTETest_ARMCM4";
531531
EXPECT_EQ(0, RunProjMgr(5, argv, 0));
532532

533533
auto outStr = streamRedirect.GetOutString();
@@ -683,7 +683,7 @@ TEST_F(ProjMgrUnitTests, RunProjMgrContextSolution) {
683683
argv[3] = (char*)"--solution";
684684
argv[4] = (char*)csolution.c_str();
685685
argv[5] = (char*)"--filter";
686-
argv[6] = (char*)"test1";
686+
argv[6] = (char*)"TEST1";
687687
EXPECT_EQ(0, RunProjMgr(7, argv, 0));
688688

689689
auto outStr = streamRedirect.GetOutString();
@@ -2600,7 +2600,7 @@ TEST_F(ProjMgrUnitTests, ListPacks) {
26002600
vector<string> packs;
26012601
EXPECT_TRUE(m_worker.ParseContextSelection({}));
26022602
m_worker.SetLoadPacksPolicy(LoadPacksPolicy::ALL);
2603-
EXPECT_TRUE(m_worker.ListPacks(packs, false, "RteTest"));
2603+
EXPECT_TRUE(m_worker.ListPacks(packs, false, "RTETest"));
26042604
string allPacks;
26052605
for (auto& pack : packs) {
26062606
allPacks += pack + "\n";
@@ -2615,7 +2615,7 @@ TEST_F(ProjMgrUnitTests, ListPacksLatest) {
26152615
vector<string> packs;
26162616
EXPECT_TRUE(m_worker.ParseContextSelection({}));
26172617
m_worker.SetLoadPacksPolicy(LoadPacksPolicy::LATEST);
2618-
EXPECT_TRUE(m_worker.ListPacks(packs, false, "RteTest"));
2618+
EXPECT_TRUE(m_worker.ListPacks(packs, false, "RTETest"));
26192619
string latestPacks;
26202620
for (auto& pack : packs) {
26212621
latestPacks += pack + "\n";
@@ -2631,7 +2631,7 @@ TEST_F(ProjMgrUnitTests, ListBoards) {
26312631
};
26322632
vector<string> devices;
26332633
EXPECT_TRUE(m_worker.ParseContextSelection({}));
2634-
EXPECT_TRUE(m_worker.ListBoards(devices, "Dummy"));
2634+
EXPECT_TRUE(m_worker.ListBoards(devices, "DUMMY"));
26352635
EXPECT_EQ(expected, set<string>(devices.begin(), devices.end()));
26362636
}
26372637

@@ -2646,7 +2646,7 @@ TEST_F(ProjMgrUnitTests, ListDevices) {
26462646
};
26472647
vector<string> devices;
26482648
EXPECT_TRUE(m_worker.ParseContextSelection({}));
2649-
EXPECT_TRUE(m_worker.ListDevices(devices, "CM0"));
2649+
EXPECT_TRUE(m_worker.ListDevices(devices, "cm0"));
26502650
EXPECT_EQ(expected, set<string>(devices.begin(), devices.end()));
26512651
}
26522652

@@ -2660,7 +2660,7 @@ TEST_F(ProjMgrUnitTests, ListDevicesPackageFiltered) {
26602660
EXPECT_TRUE(m_parser.ParseCproject(filenameInput, false, true));
26612661
EXPECT_TRUE(m_worker.AddContexts(m_parser, descriptor, filenameInput));
26622662
EXPECT_TRUE(m_worker.ParseContextSelection({ "test" }));
2663-
EXPECT_TRUE(m_worker.ListDevices(devices, "CM3"));
2663+
EXPECT_TRUE(m_worker.ListDevices(devices, "cm3"));
26642664
EXPECT_EQ(expected, set<string>(devices.begin(), devices.end()));
26652665
}
26662666

@@ -2670,7 +2670,7 @@ TEST_F(ProjMgrUnitTests, ListComponents) {
26702670
};
26712671
vector<string> components;
26722672
EXPECT_TRUE(m_worker.ParseContextSelection({}));
2673-
EXPECT_TRUE(m_worker.ListComponents(components, "Device:Startup"));
2673+
EXPECT_TRUE(m_worker.ListComponents(components, "DEVICE:STARTUP"));
26742674
EXPECT_EQ(expected, set<string>(components.begin(), components.end()));
26752675
}
26762676

@@ -2698,7 +2698,7 @@ TEST_F(ProjMgrUnitTests, ListDependencies) {
26982698
EXPECT_TRUE(m_parser.ParseCproject(filenameInput, false, true));
26992699
EXPECT_TRUE(m_worker.AddContexts(m_parser, descriptor, filenameInput));
27002700
EXPECT_TRUE(m_worker.ParseContextSelection({ "test-dependency" }));
2701-
EXPECT_TRUE(m_worker.ListDependencies(dependencies, "CORE"));
2701+
EXPECT_TRUE(m_worker.ListDependencies(dependencies, "Core"));
27022702
EXPECT_EQ(expected, set<string>(dependencies.begin(), dependencies.end()));
27032703
}
27042704

@@ -4790,7 +4790,7 @@ TEST_F(ProjMgrUnitTests, RunProjMgr_UpdateRte) {
47904790
string csolutionFile = testinput_folder + "/TestSolution/test.csolution.yml";
47914791
RemoveCbuildSetFile(csolutionFile);
47924792

4793-
char* argv[9];
4793+
char* argv[11];
47944794
argv[0] = (char*)"";
47954795
argv[1] = (char*)"update-rte";
47964796
argv[2] = (char*)csolutionFile.c_str();
@@ -4835,6 +4835,14 @@ info csolution: config files for each component:\n\
48354835
"../TestProject1/RTE/Device/RteTest_ARMCM0/[email protected] ([email protected]) from ARM::Device:Startup&RteTest [email protected]\n"\
48364836
"../TestProject1/RTE/Device/RteTest_ARMCM0/[email protected] (up to date) from ARM::Device:Startup&RteTest [email protected]\n";
48374837
EXPECT_EQ(outStr, expected1);
4838+
4839+
streamRedirect.ClearStringStreams();
4840+
argv[9] = (char*)"-f";
4841+
argv[10] = (char*)"DBGCONF";
4842+
EXPECT_EQ(0, RunProjMgr(11, argv, m_envp));
4843+
outStr = streamRedirect.GetOutString();
4844+
const string expected2 = "../.cmsis/[email protected] (up to date)\n";
4845+
EXPECT_EQ(outStr, expected2);
48384846
}
48394847

48404848
TEST_F(ProjMgrUnitTests, RunProjMgr_ListConfigsWithoutInput) {
@@ -6857,7 +6865,7 @@ TEST_F(ProjMgrUnitTests, ListTargetSets) {
68576865

68586866
streamRedirect.ClearStringStreams();
68596867
argv[4] = (char*)"--filter";
6860-
argv[5] = (char*)"Type2";
6868+
argv[5] = (char*)"TYPE2";
68616869
EXPECT_EQ(0, RunProjMgr(6, argv, 0));
68626870

68636871
outStr = streamRedirect.GetOutString();
@@ -6940,7 +6948,7 @@ [email protected] (ARM::[email protected])\n\
69406948
// test with filter option
69416949
streamRedirect.ClearStringStreams();
69426950
argv[6] = (char*)"--filter";
6943-
argv[7] = (char*)"EnvFolder";
6951+
argv[7] = (char*)"ENVFOLDER";
69446952
EXPECT_EQ(0, RunProjMgr(8, argv, 0));
69456953
outStr = streamRedirect.GetOutString();
69466954
EXPECT_STREQ(outStr.c_str(), "\
@@ -6984,7 +6992,7 @@ Board3 (ARM::[email protected])\n\
69846992

69856993
// test filter
69866994
argv[3] = (char*)"--filter";
6987-
argv[4] = (char*)"Board1";
6995+
argv[4] = (char*)"BOARD1";
69886996
streamRedirect.ClearStringStreams();
69896997
EXPECT_EQ(0, RunProjMgr(5, argv, 0));
69906998
outStr = streamRedirect.GetOutString();
@@ -7146,7 +7154,7 @@ Keil uVision\n\
71467154
streamRedirect.ClearStringStreams();
71477155
argv[3] = (char*)"--verbose";
71487156
argv[4] = (char*)"--filter";
7149-
argv[5] = (char*)"CMSIS-DAP";
7157+
argv[5] = (char*)"Cmsis-Dap";
71507158
EXPECT_EQ(0, RunProjMgr(6, argv, m_envp));
71517159
outStr = streamRedirect.GetOutString();
71527160
EXPECT_TRUE(regex_search(outStr, regex("\

0 commit comments

Comments
 (0)