#include "test.h"

#define TEST(name) TEST_CASE("change: " name, "[change]")

TEST("scheme") {
    URI uri("http://ya.ru");

    uri.scheme("https");
    CHECK(uri.scheme() == "https");
    CHECK(uri.to_string() ==  "https://ya.ru");

    uri.scheme("");
    CHECK(uri.scheme() == "");
    CHECK(uri.to_string() ==  "//ya.ru");
}

TEST("host") {
    URI uri("http://norm.com/");

    uri.host("jopa.com");
    CHECK(uri.host() == "jopa.com");
    CHECK(uri.to_string() ==  "http://jopa.com/");
}

TEST("port") {
    URI uri("https://ya.ru/");

    uri.port(1000);
    CHECK(uri.explicit_port() == 1000);
    CHECK(uri.port() == 1000);
    CHECK(uri.to_string() == "https://ya.ru:1000/");

    uri.port(0);
    CHECK(uri.explicit_port() ==  0);
    CHECK(uri.port() == 443);
    CHECK(uri.to_string() == "https://ya.ru/");
}

TEST("path") {
    URI uri("http://ya.ru/o/l/d/path?a=b");

    uri.path("/new/path/nah/");
    CHECK(uri.path() == "/new/path/nah/");
    CHECK(uri.to_string() == "http://ya.ru/new/path/nah/?a=b");

    uri.path("");
    CHECK(uri.path() == "");
    CHECK(uri.to_string() == "http://ya.ru?a=b");
}

TEST("query string") {
    URI uri("http://ya.ru?a=b#myhash");

    uri.query_string("mama=papa&jopa=popa");
    CHECK(uri.query_string() == "mama=papa&jopa=popa");
    CHECK(uri.to_string() == "http://ya.ru?mama=papa&jopa=popa#myhash");

    uri.query_string("");
    CHECK(uri.query_string() == "");
    CHECK(uri.to_string() == "http://ya.ru#myhash");
}

TEST("fragment") {
    URI uri("https://ya.ru#hash");

    uri.fragment("suka-sosi-her");
    CHECK(uri.fragment() == "suka-sosi-her");
    CHECK(uri.to_string() ==  "https://ya.ru#suka-sosi-her");

    uri.fragment("");
    CHECK(uri.fragment() == "");
    CHECK(uri.to_string() == "https://ya.ru");
}

TEST("location") {
    URI uri("http://ya.ru/");

    uri.location("mail.ru:8000");
    CHECK(uri.to_string() == "http://mail.ru:8000/");
    CHECK(uri.host() == "mail.ru");
    CHECK(uri.explicit_port() == 8000);
    CHECK(uri.location() == "mail.ru:8000");

    uri.location("vk.com:");
    CHECK(uri.to_string() == "http://vk.com/");
    CHECK(uri.explicit_port() == 0);
    CHECK(uri.port() == 80);
}