Allow to disable brackets for the Url class and Format()

This commit also adds unit tests.

refs #5706
This commit is contained in:
Michael Friedrich 2018-04-06 14:49:15 +02:00
parent 24752f3733
commit 194c99a86e
3 changed files with 20 additions and 2 deletions

View File

@ -205,6 +205,11 @@ void Url::SetQuery(const std::map<String, std::vector<String> >& query)
m_Query = query; m_Query = query;
} }
void Url::SetArrayFormatUseBrackets(bool useBrackets)
{
m_ArrayFormatUseBrackets = useBrackets;
}
void Url::AddQueryElement(const String& name, const String& value) void Url::AddQueryElement(const String& name, const String& value)
{ {
auto it = m_Query.find(name); auto it = m_Query.find(name);
@ -272,8 +277,11 @@ String Url::Format(bool onlyPathAndQuery, bool printCredentials) const
temp += "&"; temp += "&";
temp += key; temp += key;
if (m_ArrayFormatUseBrackets) {
if (kv.second.size() > 1) if (kv.second.size() > 1)
temp += "[]"; temp += "[]";
}
if (!s.IsEmpty()) if (!s.IsEmpty())
temp += "=" + Utility::EscapeString(s, ACQUERY_ENCODE, false); temp += "=" + Utility::EscapeString(s, ACQUERY_ENCODE, false);

View File

@ -65,6 +65,7 @@ public:
void SetPort(const String& port); void SetPort(const String& port);
void SetPath(const std::vector<String>& path); void SetPath(const std::vector<String>& path);
void SetQuery(const std::map<String, std::vector<String> >& query); void SetQuery(const std::map<String, std::vector<String> >& query);
void SetArrayFormatUseBrackets(bool useBrackets = true);
void AddQueryElement(const String& name, const String& query); void AddQueryElement(const String& name, const String& query);
void SetQueryElements(const String& name, const std::vector<String>& query); void SetQueryElements(const String& name, const std::vector<String>& query);
@ -78,6 +79,7 @@ private:
String m_Port; String m_Port;
std::vector<String> m_Path; std::vector<String> m_Path;
std::map<String, std::vector<String> > m_Query; std::map<String, std::vector<String> > m_Query;
bool m_ArrayFormatUseBrackets;
String m_Fragment; String m_Fragment;
bool ParseScheme(const String& scheme); bool ParseScheme(const String& scheme);

View File

@ -95,6 +95,14 @@ BOOST_AUTO_TEST_CASE(format)
url = new Url("/"); url = new Url("/");
BOOST_CHECK(url->Format(false, false) == "/"); BOOST_CHECK(url->Format(false, false) == "/");
url = new Url("https://nsclient:8443/query/check_cpu?time%5B%5D=1m&time=5m&time%5B%5D=15m");
url->SetArrayFormatUseBrackets(false);
BOOST_CHECK(url2 = new Url(url->Format(false, false)));
url = new Url("https://icinga2/query?a[]=1&a[]=2&a[]=3");
url->SetArrayFormatUseBrackets(true);
BOOST_CHECK(url2 = new Url(url->Format(false, false)));
} }
BOOST_AUTO_TEST_CASE(illegal_legal_strings) BOOST_AUTO_TEST_CASE(illegal_legal_strings)