Date_test.cc 2.2 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556
  1. #include "catch.hpp"
  2. #include "Date.hh"
  3. #include <cstring>
  4. using namespace openmsx;
  5. static void test(time_t t, const char* s)
  6. {
  7. REQUIRE(strlen(s) >= 24); // precondition
  8. CHECK(Date::fromString(s) == t);
  9. CHECK(Date::toString(t) == s);
  10. }
  11. TEST_CASE("Date")
  12. {
  13. putenv(const_cast<char*>("TZ=UTC")); tzset();
  14. test( 0, "Thu Jan 01 00:00:00 1970");
  15. test( 1, "Thu Jan 01 00:00:01 1970");
  16. test( 60, "Thu Jan 01 00:01:00 1970");
  17. test( 3600, "Thu Jan 01 01:00:00 1970");
  18. test(1318850077, "Mon Oct 17 11:14:37 2011");
  19. test(1403092862, "Wed Jun 18 12:01:02 2014");
  20. // Check invalid formats
  21. // - invalid separator characters
  22. CHECK(Date::fromString("WedXJun 18 12:01:02 2014") == time_t(-1));
  23. CHECK(Date::fromString("Wed JunX18 12:01:02 2014") == time_t(-1));
  24. CHECK(Date::fromString("Wed Jun 18X12:01:02 2014") == time_t(-1));
  25. CHECK(Date::fromString("Wed Jun 18 12X01:02 2014") == time_t(-1));
  26. CHECK(Date::fromString("Wed Jun 18 12:01X02 2014") == time_t(-1));
  27. CHECK(Date::fromString("Wed Jun 18 12:01:02X2014") == time_t(-1));
  28. // - weekday is not verified
  29. // - invalid month (must also have correct case)
  30. CHECK(Date::fromString("Wed Foo 18 12:01:02 2014") == time_t(-1));
  31. CHECK(Date::fromString("Wed jun 18 12:01:02 2014") == time_t(-1));
  32. // - invalid day
  33. CHECK(Date::fromString("Wed Jun 00 12:01:02 2014") == time_t(-1));
  34. CHECK(Date::fromString("Wed Jun 32 12:01:02 2014") == time_t(-1));
  35. // - invalid hour
  36. CHECK(Date::fromString("Wed Jun 18 24:01:02 2014") == time_t(-1));
  37. CHECK(Date::fromString("Wed Jun 18 xx:01:02 2014") == time_t(-1));
  38. // - invalid minute
  39. CHECK(Date::fromString("Wed Jun 18 12:60:02 2014") == time_t(-1));
  40. CHECK(Date::fromString("Wed Jun 18 12:-1:02 2014") == time_t(-1));
  41. // - invalid second
  42. CHECK(Date::fromString("Wed Jun 18 12:01:60 2014") == time_t(-1));
  43. CHECK(Date::fromString("Wed Jun 18 12:01:0 2014 ") == time_t(-1));
  44. // - invalid year
  45. CHECK(Date::fromString("Wed Jun 18 12:01:02 1800") == time_t(-1));
  46. CHECK(Date::fromString("Wed Jun 18 12:01:02 X800") == time_t(-1));
  47. // extra characters at the end are ignored, even digits
  48. CHECK(Date::fromString("Wed Jun 18 12:01:02 2014x") == 1403092862);
  49. CHECK(Date::fromString("Wed Jun 18 12:01:02 20140") == 1403092862);
  50. }