Msg: C++11

This commit is contained in:
Paul Beckingham 2016-02-03 19:47:34 -05:00
parent 1579705fec
commit 9720e7dab4
3 changed files with 34 additions and 45 deletions

View file

@ -29,32 +29,12 @@
#include <Lexer.h> #include <Lexer.h>
#include <text.h> #include <text.h>
////////////////////////////////////////////////////////////////////////////////
Msg::Msg ()
: _payload ("")
{
// All messages are marked with the version number, so that the messages may
// be properly evaluated in context.
_header["client"] = PACKAGE_STRING;
}
////////////////////////////////////////////////////////////////////////////////
Msg::~Msg ()
{
}
//////////////////////////////////////////////////////////////////////////////// ////////////////////////////////////////////////////////////////////////////////
void Msg::set (const std::string& name, const std::string& value) void Msg::set (const std::string& name, const std::string& value)
{ {
_header[name] = value; _header[name] = value;
} }
////////////////////////////////////////////////////////////////////////////////
void Msg::setPayload (const std::string& payload)
{
_payload = payload;
}
//////////////////////////////////////////////////////////////////////////////// ////////////////////////////////////////////////////////////////////////////////
std::string Msg::get (const std::string& name) const std::string Msg::get (const std::string& name) const
{ {
@ -65,6 +45,12 @@ std::string Msg::get (const std::string& name) const
return ""; return "";
} }
////////////////////////////////////////////////////////////////////////////////
void Msg::setPayload (const std::string& payload)
{
_payload = payload;
}
//////////////////////////////////////////////////////////////////////////////// ////////////////////////////////////////////////////////////////////////////////
std::string Msg::getPayload () const std::string Msg::getPayload () const
{ {
@ -72,17 +58,19 @@ std::string Msg::getPayload () const
} }
//////////////////////////////////////////////////////////////////////////////// ////////////////////////////////////////////////////////////////////////////////
void Msg::all (std::vector <std::string>& names) const std::vector <std::string> Msg::all () const
{ {
std::vector <std::string> names;
for (auto& i : _header) for (auto& i : _header)
names.push_back (i.first); names.push_back (i.first);
return names;
} }
//////////////////////////////////////////////////////////////////////////////// ////////////////////////////////////////////////////////////////////////////////
std::string Msg::serialize () const std::string Msg::serialize () const
{ {
std::string output; std::string output;
for (auto& i : _header) for (auto& i : _header)
output += i.first + ": " + i.second + "\n"; output += i.first + ": " + i.second + "\n";

View file

@ -34,21 +34,19 @@
class Msg class Msg
{ {
public: public:
Msg ();
~Msg ();
void set (const std::string&, const std::string&); void set (const std::string&, const std::string&);
void setPayload (const std::string&);
std::string get (const std::string&) const; std::string get (const std::string&) const;
void setPayload (const std::string&);
std::string getPayload () const; std::string getPayload () const;
void all (std::vector <std::string>&) const; std::vector <std::string> all () const;
std::string serialize () const; std::string serialize () const;
bool parse (const std::string&); bool parse (const std::string&);
private: private:
std::map <std::string, std::string> _header; std::map <std::string, std::string> _header {};
std::string _payload; std::string _payload {""};
}; };
#endif #endif

View file

@ -37,32 +37,35 @@ int main (int, char**)
UnitTest t (13); UnitTest t (13);
Msg m; Msg m;
t.is (m.serialize (), std::string ("client: ") + PACKAGE_STRING + "\n\n\n", "Msg::serialize '' --> '\\n\\n'"); t.is (m.serialize (), "\n\n", "Msg::serialize '' --> '\\n\\n'");
m.set ("name", "value"); m.set ("name", "value");
t.is (m.serialize (), std::string ("client: ") + PACKAGE_STRING + "\nname: value\n\n\n", "Msg::serialize 1 var"); t.is (m.serialize (), "name: value\n\n\n",
"Msg::serialize 1 var");
m.set ("foo", "bar"); m.set ("foo", "bar");
t.is (m.serialize (), std::string ("client: ") + PACKAGE_STRING + "\nfoo: bar\nname: value\n\n\n", "Msg::serialize 2 vars"); t.is (m.serialize (), "foo: bar\nname: value\n\n\n",
"Msg::serialize 2 vars");
m.setPayload ("payload"); m.setPayload ("payload");
t.is (m.serialize (), std::string ("client: ") + PACKAGE_STRING + "\nfoo: bar\nname: value\n\npayload\n", "Msg::serialize 2 vars + payload"); t.is (m.serialize (), "foo: bar\nname: value\n\npayload\n",
"Msg::serialize 2 vars + payload");
Msg m2; Msg m2;
t.ok (m2.parse ("foo: bar\nname: value\n\npayload\n"), "Msg::parse ok"); t.ok (m2.parse ("foo: bar\nname: value\n\npayload\n"),
t.is (m2.get ("foo"), "bar", "Msg::get"); "Msg::parse ok");
t.is (m2.get ("name"), "value", "Msg::get"); t.is (m2.get ("foo"), "bar", "Msg::get");
t.is (m2.getPayload (), "payload\n", "Msg::getPayload"); t.is (m2.get ("name"), "value", "Msg::get");
t.is (m2.getPayload (), "payload\n", "Msg::getPayload");
Msg m3; Msg m3;
t.ok (m3.parse ("foo:bar\nname: value\n\npayload\n"), "Msg::parse ok"); t.ok (m3.parse ("foo:bar\nname: value\n\npayload\n"),
t.is (m3.get ("foo"), "bar", "Msg::get"); "Msg::parse ok");
t.is (m3.get ("name"), "value", "Msg::get"); t.is (m3.get ("foo"), "bar", "Msg::get");
t.is (m3.getPayload (), "payload\n", "Msg::getPayload"); t.is (m3.get ("name"), "value", "Msg::get");
t.is (m3.getPayload (), "payload\n", "Msg::getPayload");
std::vector <std::string> vars; t.ok (m3.all () == std::vector <std::string> {"foo", "name"},
m3.all (vars); "Msg::all --> {'foo', 'name'}");
t.ok (vars.size () == 2, "Msg::all --> 2 vars");
return 0; return 0;
} }