| e8555c89 Andy McCall |
1 |
#include "catch.hpp" |
| 2 |
#include "Date.hh" |
| 3 |
|
| 4 |
#include "ranges.hh" |
| 5 |
#include "setenv.hh" |
| 6 |
|
| 7 |
#include <array> |
| 8 |
#include <cstring> |
| 9 |
|
| 10 |
using namespace openmsx; |
| 11 |
|
| 12 |
static void test(time_t t, const char* s) |
| 13 |
{ |
| 14 |
REQUIRE(strlen(s) >= 24); |
| 15 |
CHECK(Date::fromString(std::span<const char, 24>{s, 24}) == t); |
| 16 |
CHECK(Date::toString(t) == s); |
| 17 |
|
| 18 |
|
| 19 |
std::array<char, 24> buf; |
| 20 |
auto result = Date::toString(t, buf); |
| 21 |
CHECK(result == s); |
| 22 |
} |
| 23 |
|
| 24 |
TEST_CASE("Date") |
| 25 |
{ |
| 26 |
setenv("TZ", "UTC", 1); |
| 27 |
tzset(); |
| 28 |
test( 0, "Thu Jan 01 00:00:00 1970"); |
| 29 |
test( 1, "Thu Jan 01 00:00:01 1970"); |
| 30 |
test( 60, "Thu Jan 01 00:01:00 1970"); |
| 31 |
test( 3600, "Thu Jan 01 01:00:00 1970"); |
| 32 |
test(1318850077, "Mon Oct 17 11:14:37 2011"); |
| 33 |
test(1403092862, "Wed Jun 18 12:01:02 2014"); |
| 34 |
|
| 35 |
|
| 36 |
|
| 37 |
CHECK(Date::fromString(subspan<24>("WedXJun 18 12:01:02 2014")) == Date::INVALID_TIME_T); |
| 38 |
CHECK(Date::fromString(subspan<24>("Wed JunX18 12:01:02 2014")) == Date::INVALID_TIME_T); |
| 39 |
CHECK(Date::fromString(subspan<24>("Wed Jun 18X12:01:02 2014")) == Date::INVALID_TIME_T); |
| 40 |
CHECK(Date::fromString(subspan<24>("Wed Jun 18 12X01:02 2014")) == Date::INVALID_TIME_T); |
| 41 |
CHECK(Date::fromString(subspan<24>("Wed Jun 18 12:01X02 2014")) == Date::INVALID_TIME_T); |
| 42 |
CHECK(Date::fromString(subspan<24>("Wed Jun 18 12:01:02X2014")) == Date::INVALID_TIME_T); |
| 43 |
|
| 44 |
|
| 45 |
CHECK(Date::fromString(subspan<24>("Wed Foo 18 12:01:02 2014")) == Date::INVALID_TIME_T); |
| 46 |
CHECK(Date::fromString(subspan<24>("Wed jun 18 12:01:02 2014")) == Date::INVALID_TIME_T); |
| 47 |
|
| 48 |
CHECK(Date::fromString(subspan<24>("Wed Jun 00 12:01:02 2014")) == Date::INVALID_TIME_T); |
| 49 |
CHECK(Date::fromString(subspan<24>("Wed Jun 32 12:01:02 2014")) == Date::INVALID_TIME_T); |
| 50 |
|
| 51 |
CHECK(Date::fromString(subspan<24>("Wed Jun 18 24:01:02 2014")) == Date::INVALID_TIME_T); |
| 52 |
CHECK(Date::fromString(subspan<24>("Wed Jun 18 xx:01:02 2014")) == Date::INVALID_TIME_T); |
| 53 |
|
| 54 |
CHECK(Date::fromString(subspan<24>("Wed Jun 18 12:60:02 2014")) == Date::INVALID_TIME_T); |
| 55 |
CHECK(Date::fromString(subspan<24>("Wed Jun 18 12:-1:02 2014")) == Date::INVALID_TIME_T); |
| 56 |
|
| 57 |
CHECK(Date::fromString(subspan<24>("Wed Jun 18 12:01:60 2014")) == Date::INVALID_TIME_T); |
| 58 |
CHECK(Date::fromString(subspan<24>("Wed Jun 18 12:01:0 2014 ")) == Date::INVALID_TIME_T); |
| 59 |
|
| 60 |
CHECK(Date::fromString(subspan<24>("Wed Jun 18 12:01:02 1800")) == Date::INVALID_TIME_T); |
| 61 |
CHECK(Date::fromString(subspan<24>("Wed Jun 18 12:01:02 X800")) == Date::INVALID_TIME_T); |
| 62 |
|
| 63 |
|
| 64 |
CHECK(Date::fromString(subspan<24>("Wed Jun 18 12:01:02 2014x")) == 1403092862); |
| 65 |
CHECK(Date::fromString(subspan<24>("Wed Jun 18 12:01:02 20140")) == 1403092862); |
| 66 |
} |