#include "test.h"
#define TEST(name) TEST_CASE("header: " name, "[header]")
TEST("case insensitive") {
Headers h;
h.add("Aa", "value");
CHECK(h.get("AA") == "value");
}
TEST("basic") {
Headers h;
CHECK(h.length() == 0);
CHECK(h.get("Content-Length", "default") == "default");
h.add("field1", "value1");
CHECK(h.get("field1", "default") == "value1");
h.set("field1", "value2");
CHECK(h.get("field1", "default") == "value2");
h.set("field2", "value2");
CHECK(h.get("field2", "default") == "value2");
}
TEST("multi") {
Headers h;
h.add("key", "hello");
h.add("Key", "world");
CHECK(h.get("key") == "world");
auto r = h.get_multi("key");
auto it = r.begin();
CHECK(*it++ == "hello");
CHECK(*it++ == "world");
CHECK(it == r.end());
}
TEST("ctor from ilist") {
auto h = Headers({
{"key", "val"},
{"a", "b"},
});
CHECK(h.get("key") == "val");
CHECK(h.get("a") == "b");
}
TEST("operator==") {
Headers h1, h2;
for (auto p : {&h1, &h2}) {
p->add("key", "hello");
p->add("Key", "world");
p->add("hi", "there");
}
CHECK(h1 == h2);
CHECK(h1 == Headers{{"key", "hello"}, {"key", "world"}, {"hi", "there"}});
CHECK(h1 != Headers{{"key1", "hello"}, {"key", "world"}, {"hi", "there"}});
}
TEST("iequals") {
CHECK(iequals("a", "A"));
CHECK(iequals("aa", "aA"));
CHECK(iequals("Aaa", "aaA"));
CHECK(iequals("AaaA", "aAAa"));
CHECK(iequals("Aaaaa", "aaaaA"));
CHECK(iequals("Aaaaaa", "aaaaaA"));
CHECK(iequals("Aaaaaaa", "aaaaaaA"));
CHECK(iequals("Aaaaaaaa", "aaaaaaaA"));
CHECK(iequals("Aaaaaaaaa", "aaaaaaaaA"));
CHECK_FALSE(iequals("a", "Transfer-Encoding"));
CHECK_FALSE(iequals("a", "transfer-encoding"));
}
TEST("builder") {
auto h = Headers().add("key", "val").add("k", "v");
CHECK(h == Headers{{"key", "val"}, {"k", "v"}});
}