//Example from http://ircv3.net/specs/core/message-tags-3.2.html
{
immutable tags = parseTagString("");
assert(tags.length == 0);
}
//ditto
{
immutable tags = parseTagString("aaa=bbb;ccc;example.com/ddd=eee");
assert(tags.length == 3);
assert(tags["aaa"] == "bbb");
assert(tags["ccc"] == "");
assert(tags["example.com/ddd"] == "eee");
}
//escape test
{
immutable tags = parseTagString(`whatevs=\\s`);
assert(tags.length == 1);
assert("whatevs" in tags);
assert(tags["whatevs"] == `\s`);
}
//Example from http://ircv3.net/specs/extensions/batch-3.2.html
{
immutable tags = parseTagString(`batch=yXNAbvnRHTRBv`);
assert(tags.length == 1);
assert("batch" in tags);
assert(tags["batch"] == "yXNAbvnRHTRBv");
}
//Example from http://ircv3.net/specs/extensions/account-tag-3.2.html
{
immutable tags = parseTagString(`account=hax0r`);
assert(tags.length == 1);
assert("account" in tags);
assert(tags["account"] == "hax0r");
}
{
immutable tags = parseTagString(`testk=test\`);
assert("testk" in tags);
assert(tags["testk"] == "test");
}
import std.datetime : DateTime, msecs, SysTime, UTC;
//Example from http://ircv3.net/specs/extensions/server-time-3.2.html
{
auto tags = parseTagString("time=2011-10-19T16:40:51.620Z");
assert(tags.length == 1);
assert("time" in tags);
assert(tags["time"] == "2011-10-19T16:40:51.620Z");
immutable testTime = SysTime(DateTime(2011,10,19,16,40,51), 620.msecs, UTC());
assert(parseTime(tags) == testTime);
}
//ditto
{
immutable tags = parseTagString("time=2012-06-30T23:59:60.419Z");
assert(tags.length == 1);
assert("time" in tags);
assert(tags["time"] == "2012-06-30T23:59:60.419Z");
//leap seconds not currently representable
//assert(parseTime(splitStr.tags) == SysTime(DateTime(2012,06,30,23,59,60), 419.msecs, UTC()));
}