From 992fa938951558f4515145c9b82af0123c979a29 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?louiz=E2=80=99?= Date: Sun, 21 Aug 2016 01:04:32 +0200 Subject: Add get_first_non_empty and use it into Database to simplify a little bit --- tests/utils.cpp | 11 +++++++++++ 1 file changed, 11 insertions(+) (limited to 'tests/utils.cpp') diff --git a/tests/utils.cpp b/tests/utils.cpp index 01d070e..e7ba415 100644 --- a/tests/utils.cpp +++ b/tests/utils.cpp @@ -6,6 +6,9 @@ #include #include #include +#include + +using namespace std::string_literals; TEST_CASE("String split") { @@ -100,3 +103,11 @@ TEST_CASE("string cut") CHECK(res[0] == "rhello, "); CHECK(res[1] == "♥"); } + +TEST_CASE("first non-empty string") +{ + CHECK(get_first_non_empty(""s, ""s, "hello"s, "world"s) == "hello"s); + CHECK(get_first_non_empty(""s, ""s, ""s, ""s) == ""s); + CHECK(get_first_non_empty("first"s) == "first"s); + CHECK(get_first_non_empty(0, 1, 2, 3) == 1); +} -- cgit v1.2.3 From 2a4905df0153c47656555a21f3d57bbad6f3ffe1 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?louiz=E2=80=99?= Date: Wed, 31 Aug 2016 01:17:45 +0200 Subject: Fix to_string(time_t) and write a unit test for it --- tests/utils.cpp | 10 ++++++++++ 1 file changed, 10 insertions(+) (limited to 'tests/utils.cpp') diff --git a/tests/utils.cpp b/tests/utils.cpp index e7ba415..abe7ef7 100644 --- a/tests/utils.cpp +++ b/tests/utils.cpp @@ -7,6 +7,7 @@ #include #include #include +#include using namespace std::string_literals; @@ -111,3 +112,12 @@ TEST_CASE("first non-empty string") CHECK(get_first_non_empty("first"s) == "first"s); CHECK(get_first_non_empty(0, 1, 2, 3) == 1); } + +TEST_CASE("time_to_string") +{ + const std::time_t stamp = 1472480968; + const std::string result = "2016-08-29T14:29:28Z"; + CHECK(utils::to_string(stamp) == result); + CHECK(utils::to_string(stamp).size() == result.size()); + CHECK(utils::to_string(0) == "1970-01-01T00:00:00Z"); +} -- cgit v1.2.3 From 1140db3b88bb70cbcab044efa729707bd5a442f6 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?louiz=E2=80=99?= Date: Wed, 31 Aug 2016 01:58:13 +0200 Subject: Add parse_datetime --- tests/utils.cpp | 8 ++++++++ 1 file changed, 8 insertions(+) (limited to 'tests/utils.cpp') diff --git a/tests/utils.cpp b/tests/utils.cpp index abe7ef7..084a048 100644 --- a/tests/utils.cpp +++ b/tests/utils.cpp @@ -121,3 +121,11 @@ TEST_CASE("time_to_string") CHECK(utils::to_string(stamp).size() == result.size()); CHECK(utils::to_string(0) == "1970-01-01T00:00:00Z"); } + +TEST_CASE("parse_datetime") +{ + const auto time = utils::parse_datetime("1970-01-01T00:00:00Z"); + CHECK(time == 0); + CHECK(utils::parse_datetime("2016-08-29T14:29:28Z") == 1472480968); + CHECK(utils::parse_datetime("blah") == -1); +} \ No newline at end of file -- cgit v1.2.3 From aaa2ca670ab5f19390e77a1f5ea88017b312ceaf Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?louiz=E2=80=99?= Date: Sat, 17 Sep 2016 00:34:28 +0200 Subject: Fix the parse_datetime by using %Z instead of %z If anybody knows why fedora accepts both, but it only works with %z on debian, please tell me. --- tests/utils.cpp | 2 ++ 1 file changed, 2 insertions(+) (limited to 'tests/utils.cpp') diff --git a/tests/utils.cpp b/tests/utils.cpp index 084a048..5913f8d 100644 --- a/tests/utils.cpp +++ b/tests/utils.cpp @@ -127,5 +127,7 @@ TEST_CASE("parse_datetime") const auto time = utils::parse_datetime("1970-01-01T00:00:00Z"); CHECK(time == 0); CHECK(utils::parse_datetime("2016-08-29T14:29:28Z") == 1472480968); + CHECK(utils::parse_datetime("2016-08-29T14:29:28UT") == 1472480968); + CHECK(utils::parse_datetime("2016-08-29T14:29:28GMT") == 1472480968); CHECK(utils::parse_datetime("blah") == -1); } \ No newline at end of file -- cgit v1.2.3 From e5b392ece8c90605b86d0d93f0ca6989048bc1c3 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?louiz=E2=80=99?= Date: Mon, 3 Oct 2016 23:30:20 +0200 Subject: Fix parse_datetime by always using a 'z' as the timezone MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Because some plateform accept Z and z, but some only accept z… --- tests/utils.cpp | 7 ++----- 1 file changed, 2 insertions(+), 5 deletions(-) (limited to 'tests/utils.cpp') diff --git a/tests/utils.cpp b/tests/utils.cpp index 5913f8d..a18fc81 100644 --- a/tests/utils.cpp +++ b/tests/utils.cpp @@ -124,10 +124,7 @@ TEST_CASE("time_to_string") TEST_CASE("parse_datetime") { - const auto time = utils::parse_datetime("1970-01-01T00:00:00Z"); - CHECK(time == 0); - CHECK(utils::parse_datetime("2016-08-29T14:29:28Z") == 1472480968); - CHECK(utils::parse_datetime("2016-08-29T14:29:28UT") == 1472480968); - CHECK(utils::parse_datetime("2016-08-29T14:29:28GMT") == 1472480968); + CHECK(utils::parse_datetime("1970-01-01T00:00:00z") == 0); + CHECK(utils::parse_datetime("2016-08-29T14:29:29Z") == 1472480969); CHECK(utils::parse_datetime("blah") == -1); } \ No newline at end of file -- cgit v1.2.3 From 548e4ad473e7be22f971184312cc5ce9b8fe56b7 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?louiz=E2=80=99?= Date: Tue, 11 Oct 2016 00:18:48 +0200 Subject: Parse the timezone myself, instead of using the broken strptime See https://lab.louiz.org/louiz/biboumi/issues/3215 https://github.com/andikleen/glibc/blob/master/time/strptime_l.c#L746-L747 for why strptime() sucks We use std::get_time now, to parse the date and time. And we parse the timezone by hand. fix #3215 --- tests/utils.cpp | 16 ++++++++++++++-- 1 file changed, 14 insertions(+), 2 deletions(-) (limited to 'tests/utils.cpp') diff --git a/tests/utils.cpp b/tests/utils.cpp index a18fc81..48951da 100644 --- a/tests/utils.cpp +++ b/tests/utils.cpp @@ -124,7 +124,19 @@ TEST_CASE("time_to_string") TEST_CASE("parse_datetime") { - CHECK(utils::parse_datetime("1970-01-01T00:00:00z") == 0); + CHECK(utils::parse_datetime("1970-01-01T00:00:00Z") == 0); + + const int twenty_three_hours = 82800; + CHECK(utils::parse_datetime("1970-01-01T23:00:12Z") == twenty_three_hours + 12); + CHECK(utils::parse_datetime("1970-01-01T23:00:12Z") == utils::parse_datetime("1970-01-01T23:00:12+00:00")); + CHECK(utils::parse_datetime("1970-01-01T23:00:12Z") == utils::parse_datetime("1970-01-01T23:00:12-00:00")); + CHECK(utils::parse_datetime("1970-01-02T00:00:12Z") == utils::parse_datetime("1970-01-01T23:00:12-01:00")); + CHECK(utils::parse_datetime("1970-01-02T00:00:12Z") == utils::parse_datetime("1970-01-02T01:00:12+01:00")); + CHECK(utils::parse_datetime("2016-08-29T14:29:29Z") == 1472480969); + CHECK(utils::parse_datetime("blah") == -1); -} \ No newline at end of file + CHECK(utils::parse_datetime("1970-01-02T00:00:12B") == -1); + CHECK(utils::parse_datetime("1970-01-02T00:00:12*00:00") == -1); + CHECK(utils::parse_datetime("1970-01-02T00:00:12+0000") == -1); +} -- cgit v1.2.3