mirror of https://github.com/Icinga/icinga2.git
Allow to disable brackets for the Url class and Format()
This commit also adds unit tests. refs #5706
This commit is contained in:
parent
24752f3733
commit
194c99a86e
|
@ -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);
|
||||||
|
|
|
@ -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);
|
||||||
|
|
|
@ -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)
|
||||||
|
|
Loading…
Reference in New Issue