-module(herd_simple_formats_test).

-include_lib("eunit/include/eunit.hrl").

%% eunit tests

get_date_test() ->
    ?assertEqual({2014, 5, 20}, herd_simple_formats:get_date("2014-05-20")),
    ?assertEqual({2014, 5, 20}, herd_simple_formats:get_date("2014-5-20")),
    ?assertEqual({1970, 1, 1}, herd_simple_formats:get_date("1970-1-1")),
    ?assertEqual({1970, 1, 1}, herd_simple_formats:get_date("1970-01-01")),
    ?assertEqual({1970, 12, 31}, herd_simple_formats:get_date("1970-12-31")),
    ?assertEqual({1970, 1, 1}, herd_simple_formats:get_date("1970-1-1-bla")),
    ?assertEqual(error, herd_simple_formats:get_date("2000-13-31")),
    ?assertEqual(error, herd_simple_formats:get_date("2000-10-32")),
    ?assertEqual(error, herd_simple_formats:get_date("bla-bla-bla")),
    ?assertEqual(error, herd_simple_formats:get_date("1970-10-bla")),
    ok.


get_time_test() ->
    ?assertEqual({23, 15, 34}, herd_simple_formats:get_time("23:15:34")),
    ?assertEqual({12, 0, 11}, herd_simple_formats:get_time("12:00:11")),
    ?assertEqual({0, 0, 0}, herd_simple_formats:get_time("00:00:00")),
    ?assertEqual({1, 0, 0}, herd_simple_formats:get_time("01:00:00")),
    ?assertEqual({0, 1, 0}, herd_simple_formats:get_time("00:01:00")),
    ?assertEqual({0, 0, 1}, herd_simple_formats:get_time("00:00:01")),
    ?assertEqual({1, 1, 1}, herd_simple_formats:get_time("01:01:01")),
    ?assertEqual({23, 59, 59}, herd_simple_formats:get_time("23:59:59")),
    ?assertEqual(error, herd_simple_formats:get_time("01:01:01:01")),
    ?assertEqual(error, herd_simple_formats:get_time("01:01:ab")),
    ?assertEqual(error, herd_simple_formats:get_time("01:01")),
    ?assertEqual(error, herd_simple_formats:get_time("25:10:10")),
    ?assertEqual(error, herd_simple_formats:get_time("24:60:10")),
    ?assertEqual(error, herd_simple_formats:get_time("24:30:60")),
    ok.


get_datetime_test() ->
    ?assertEqual(error, herd_simple_formats:get_datetime("")),
    ?assertEqual(error, herd_simple_formats:get_datetime("bla-bla-bla")),
    ?assertEqual(error, herd_simple_formats:get_datetime("bla-bla-bla bla:bla:bla")),
    ?assertEqual(error, herd_simple_formats:get_datetime("2014-05-20")),
    ?assertEqual(error, herd_simple_formats:get_datetime("2014-05-20 bla-bla-bla")),
    ?assertEqual(error, herd_simple_formats:get_datetime("2014-05-20 bla bla bla")),
    ?assertEqual(error, herd_simple_formats:get_datetime("blablabla 23:15:34")),
    ?assertEqual({{2014, 5, 20}, {23, 15, 34}},
                 herd_simple_formats:get_datetime("2014-05-20 23:15:34")),
    ?assertEqual({{2014, 5, 20}, {12, 0, 11}},
                 herd_simple_formats:get_datetime("2014-5-20 12:00:11")),
    ?assertEqual({{1970, 1, 1}, {0, 0, 0}},
                 herd_simple_formats:get_datetime("1970-1-1 00:00:00")),
    ?assertEqual({{1970, 1, 1}, {23, 5, 9}},
                 herd_simple_formats:get_datetime("1970-01-01 23:05:09")),
    ?assertEqual({{1970, 12, 31}, {23, 59, 59}},
                 herd_simple_formats:get_datetime("1970-12-31 23:59:59")),
    ?assertEqual({{2014, 9, 19}, {12, 59, 30}},
                 herd_simple_formats:get_datetime("2014-09-19 12:59:30 UTC")),
    ok.


get_ip_test() ->
    ?assertEqual({0, 0, 0, 0}, herd_simple_formats:get_ip("0.0.0.0")),
    ?assertEqual({1, 2, 3, 4}, herd_simple_formats:get_ip("1.2.3.4")),
    ?assertEqual({127, 0, 0, 1}, herd_simple_formats:get_ip("127.0.0.1")),
    ?assertEqual({255, 255, 255, 255}, herd_simple_formats:get_ip("255.255.255.255")),
    ?assertEqual({10, 1, 0, 20}, herd_simple_formats:get_ip("10.1.0.20")),
    ?assertEqual({173, 194, 112, 238}, herd_simple_formats:get_ip("173.194.112.238")),
    ?assertEqual({93, 158, 134, 3}, herd_simple_formats:get_ip("93.158.134.3")),
    ?assertEqual(error, herd_simple_formats:get_ip("255.255.255.256")),
    ?assertEqual(error, herd_simple_formats:get_ip("255.255.255.500")),
    ?assertEqual(error, herd_simple_formats:get_ip("1.2.3")),
    ?assertEqual(error, herd_simple_formats:get_ip("-1.2.3.4")),
    ?assertEqual(error, herd_simple_formats:get_ip("1.2.3.4.5")),
    ?assertEqual(error, herd_simple_formats:get_ip("a.b.c.d")),
    ?assertEqual(error, herd_simple_formats:get_ip("hellothere")),
    ?assertEqual(error, herd_simple_formats:get_ip("127.hello.there.again")),
    ok.