diff --git a/src/Message.cpp b/src/Message.cpp index 56a616fe..5538d7fb 100644 --- a/src/Message.cpp +++ b/src/Message.cpp @@ -38,13 +38,17 @@ void CMessage::Clone(const CMessage& Message) CString CMessage::GetParams(unsigned int uIdx, unsigned int uLen) const { - VCString vsParams; - if (uLen > m_vsParams.size() - uIdx - 1) { - uLen = m_vsParams.size() - uIdx - 1; + if (m_vsParams.empty() || uLen == 0) { + return ""; } - for (unsigned int i = uIdx; i <= uIdx + uLen; ++i) { + if (uLen > m_vsParams.size() - uIdx - 1) { + uLen = m_vsParams.size() - uIdx; + } + VCString vsParams; + unsigned uParams = m_vsParams.size(); + for (unsigned int i = uIdx; i < uIdx + uLen; ++i) { CString sParam = m_vsParams[i]; - if (sParam.Contains(" ")) { + if (i > uIdx && i == uParams - 1 && (sParam.empty() || sParam.StartsWith(":") || sParam.Contains(" "))) { sParam = ":" + sParam; } vsParams.push_back(sParam); diff --git a/test/MessageTest.cpp b/test/MessageTest.cpp index 193a9fca..994b760e 100644 --- a/test/MessageTest.cpp +++ b/test/MessageTest.cpp @@ -33,6 +33,40 @@ TEST(MessageTest, SetParam) { EXPECT_EQ(params, msg.GetParams()); } +TEST(MessageTest, GetParams) { + EXPECT_EQ("", CMessage("CMD").GetParams(0)); + EXPECT_EQ("", CMessage("CMD").GetParams(1)); + EXPECT_EQ("", CMessage("CMD").GetParams(-1)); + + EXPECT_EQ("", CMessage("CMD").GetParams(0, 0)); + EXPECT_EQ("", CMessage("CMD").GetParams(1, 0)); + EXPECT_EQ("", CMessage("CMD").GetParams(-1, 0)); + + EXPECT_EQ("", CMessage("CMD").GetParams(0, 1)); + EXPECT_EQ("", CMessage("CMD").GetParams(1, 1)); + EXPECT_EQ("", CMessage("CMD").GetParams(-1, 1)); + + EXPECT_EQ("", CMessage("CMD").GetParams(0, 10)); + EXPECT_EQ("", CMessage("CMD").GetParams(1, 10)); + EXPECT_EQ("", CMessage("CMD").GetParams(-1, 10)); + + EXPECT_EQ("p1 :p2 p3", CMessage("CMD p1 :p2 p3").GetParams(0)); + EXPECT_EQ("p2 p3", CMessage("CMD p1 :p2 p3").GetParams(1)); + EXPECT_EQ("", CMessage("CMD p1 :p2 p3").GetParams(-1)); + + EXPECT_EQ("", CMessage("CMD p1 :p2 p3").GetParams(0, 0)); + EXPECT_EQ("", CMessage("CMD p1 :p2 p3").GetParams(1, 0)); + EXPECT_EQ("", CMessage("CMD p1 :p2 p3").GetParams(-1, 0)); + + EXPECT_EQ("p1", CMessage("CMD p1 :p2 p3").GetParams(0, 1)); + EXPECT_EQ("p2 p3", CMessage("CMD p1 :p2 p3").GetParams(1, 1)); + EXPECT_EQ("", CMessage("CMD p1 :p2 p3").GetParams(-1, 1)); + + EXPECT_EQ("p1 :p2 p3", CMessage("CMD p1 :p2 p3").GetParams(0, 10)); + EXPECT_EQ("p2 p3", CMessage("CMD p1 :p2 p3").GetParams(1, 10)); + EXPECT_EQ("", CMessage("CMD p1 :p2 p3").GetParams(-1, 10)); +} + TEST(MessageTest, ToString) { EXPECT_EQ("CMD", CMessage("CMD").ToString()); EXPECT_EQ("CMD p1", CMessage("CMD p1").ToString());