Skip to content

Commit 1b92c19

Browse files
committed
ScratchConfiguration: Lookup graphic effects case insensitive
1 parent 9d3787b commit 1b92c19

File tree

2 files changed

+33
-6
lines changed

2 files changed

+33
-6
lines changed

src/scratchconfiguration.cpp

Lines changed: 15 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@
22

33
#include <scratchcpp/scratchconfiguration.h>
44
#include <scratchcpp/igraphicseffect.h>
5-
#include <iostream>
5+
#include <algorithm>
66

77
#include "scratchconfiguration_p.h"
88

@@ -44,12 +44,21 @@ void ScratchConfiguration::removeGraphicsEffect(const std::string &name)
4444
/*! Returns the graphics effect with the given name, or nullptr if it isn't registered. */
4545
IGraphicsEffect *ScratchConfiguration::getGraphicsEffect(const std::string &name)
4646
{
47-
auto it = getImpl()->graphicsEffects.find(name);
47+
// Effect names are case insensitive
48+
std::string lower = name;
49+
std::transform(lower.begin(), lower.end(), lower.begin(), [](char c) { return std::tolower(c); });
4850

49-
if (it == getImpl()->graphicsEffects.cend())
50-
return nullptr;
51-
else
52-
return it->second.get();
51+
const auto &effects = getImpl()->graphicsEffects;
52+
53+
for (const auto &[currentName, effect] : effects) {
54+
std::string current = currentName;
55+
std::transform(current.begin(), current.end(), current.begin(), [](char c) { return std::tolower(c); });
56+
57+
if (current == lower)
58+
return effect.get();
59+
}
60+
61+
return nullptr;
5362
}
5463

5564
/*! Returns the version string of the library. */

test/scratchconfiguration/scratchconfiguration_test.cpp

Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -68,3 +68,21 @@ TEST_F(ScratchConfigurationTest, GraphicsEffects)
6868
ScratchConfiguration::removeGraphicsEffect("effect1");
6969
ASSERT_EQ(ScratchConfiguration::getGraphicsEffect("effect1"), nullptr);
7070
}
71+
72+
TEST_F(ScratchConfigurationTest, GraphicsEffects_CaseInsensitive)
73+
{
74+
auto effect1 = std::make_shared<GraphicsEffectMock>();
75+
auto effect2 = std::make_shared<GraphicsEffectMock>();
76+
77+
EXPECT_CALL(*effect1, name()).WillOnce(Return("eFfEct1"));
78+
EXPECT_CALL(*effect2, name()).WillOnce(Return("eFFeCT2"));
79+
ScratchConfiguration::registerGraphicsEffect(effect1);
80+
ScratchConfiguration::registerGraphicsEffect(effect2);
81+
82+
ASSERT_EQ(ScratchConfiguration::getGraphicsEffect("EFFECT1"), effect1.get());
83+
ASSERT_EQ(ScratchConfiguration::getGraphicsEffect("effEct2"), effect2.get());
84+
ASSERT_EQ(ScratchConfiguration::getGraphicsEffect("effect3"), nullptr);
85+
86+
ScratchConfiguration::removeGraphicsEffect("effect1");
87+
ScratchConfiguration::removeGraphicsEffect("effect2");
88+
}

0 commit comments

Comments
 (0)