Handle connect function being called with an empty string

0.8
Bruno Van de Velde 2015-12-13 18:44:05 +01:00
parent 7897cda906
commit 52159eccdd
2 changed files with 14 additions and 4 deletions

View File

@ -342,9 +342,11 @@ namespace tgui
template <typename Func, typename... Args>
unsigned int connect(const std::string& signalNames, Func func, Args... args)
{
assert(!m_signals.empty());
auto signalNameList = extractSignalNames(signalNames);
if (signalNameList.empty())
throw Exception{"connect function called with empty string"};
for (auto& signalName : extractSignalNames(signalNames))
for (auto& signalName : signalNameList)
{
if (m_signals.find(toLower(signalName)) != m_signals.end())
{
@ -362,6 +364,8 @@ namespace tgui
throw Exception{"Cannot connect to unknown signal '" + signalName + "'."};
else
{
assert(!m_signals.empty());
for (auto& signal : m_signals)
{
try {
@ -395,9 +399,11 @@ namespace tgui
template <typename Func, typename... Args>
unsigned int connectEx(const std::string& signalName, Func func, Args... args)
{
assert(!m_signals.empty());
auto signalNameList = extractSignalNames(signalName);
if (signalNameList.empty())
throw Exception{"connect function called with empty string"};
for (auto& name : extractSignalNames(signalName))
for (auto& name : signalNameList)
{
if (m_signals.find(toLower(name)) != m_signals.end())
{
@ -415,6 +421,8 @@ namespace tgui
throw Exception{"Cannot connect to unknown signal '" + name + "'."};
else
{
assert(!m_signals.empty());
for (auto& signal : m_signals)
{
try {

View File

@ -43,6 +43,8 @@ TEST_CASE("[Signal]") {
REQUIRE(widget->connect("PositionChanged", [](sf::Vector2f, sf::Vector2f){}, widget2->getPosition()) == id+8);
REQUIRE(widget->connect("SizeChanged", [](sf::Vector2f, sf::Vector2f){}, std::bind(&tgui::Widget::getSize, widget2)) == id+9);
REQUIRE_THROWS_AS(widget->connect("", [](){}), tgui::Exception);
REQUIRE_THROWS_AS(widget->connect(" ", [](){}), tgui::Exception);
REQUIRE_THROWS_AS(widget->connect("SomeWrongSignal", [](){}), tgui::Exception);
REQUIRE_THROWS_AS(widget->connect("PositionChanged", [](bool){}), tgui::Exception);