Remove odd assertion stopping TZ minutes being more than 30 or less than -30 (DoM...
[libdcp.git] / test / local_time_test.cc
index 63083947edff9310a0563eb5abe60f10beec33b7..8d6d997eec8852375ad9b739229e3bcbc123c092 100644 (file)
@@ -50,6 +50,18 @@ BOOST_AUTO_TEST_CASE (local_time_basic_test)
 
        /* Correctly-formatted */
 
+       {
+               dcp::LocalTime t("2013-01-05T18:06:59");
+               BOOST_CHECK_EQUAL(t._year, 2013);
+               BOOST_CHECK_EQUAL(t._month, 1);
+               BOOST_CHECK_EQUAL(t._day, 5);
+               BOOST_CHECK_EQUAL(t._hour, 18);
+               BOOST_CHECK_EQUAL(t._minute, 6);
+               BOOST_CHECK_EQUAL(t._second, 59);
+               BOOST_CHECK(t._offset == dcp::UTCOffset(0, 0));
+               BOOST_CHECK_EQUAL(t.as_string(), "2013-01-05T18:06:59+00:00");
+       }
+
        {
                dcp::LocalTime t ("2013-01-05T18:06:59+04:00");
                BOOST_CHECK_EQUAL (t._year, 2013);
@@ -87,6 +99,46 @@ BOOST_AUTO_TEST_CASE (local_time_basic_test)
                BOOST_CHECK_EQUAL (t.as_string(true), "2011-11-20T01:06:59.456-09:30");
        }
 
+       {
+               dcp::LocalTime t ("2011-11-20T01:06:59.456-09:30");
+               BOOST_CHECK_EQUAL (t._year, 2011);
+               BOOST_CHECK_EQUAL (t._month, 11);
+               BOOST_CHECK_EQUAL (t._day, 20);
+               BOOST_CHECK_EQUAL (t._hour, 1);
+               BOOST_CHECK_EQUAL (t._minute, 6);
+               BOOST_CHECK_EQUAL (t._second, 59);
+               BOOST_CHECK_EQUAL (t._millisecond, 456);
+               BOOST_CHECK(t._offset == dcp::UTCOffset(-9, -30));
+               BOOST_CHECK_EQUAL (t.as_string(true, false), "2011-11-20T01:06:59.456");
+       }
+
+       {
+               dcp::LocalTime t ("2011-11-20T01:06:59.456-09:30");
+               BOOST_CHECK_EQUAL (t._year, 2011);
+               BOOST_CHECK_EQUAL (t._month, 11);
+               BOOST_CHECK_EQUAL (t._day, 20);
+               BOOST_CHECK_EQUAL (t._hour, 1);
+               BOOST_CHECK_EQUAL (t._minute, 6);
+               BOOST_CHECK_EQUAL (t._second, 59);
+               BOOST_CHECK_EQUAL (t._millisecond, 456);
+               BOOST_CHECK(t._offset == dcp::UTCOffset(-9, -30));
+               BOOST_CHECK_EQUAL (t.as_string(false, false), "2011-11-20T01:06:59");
+       }
+
+       {
+               dcp::LocalTime t("2011-11-20T01:06:59.45678901-09:30");
+               BOOST_CHECK_EQUAL(t._year, 2011);
+               BOOST_CHECK_EQUAL(t._month, 11);
+               BOOST_CHECK_EQUAL(t._day, 20);
+               BOOST_CHECK_EQUAL(t._hour, 1);
+               BOOST_CHECK_EQUAL(t._minute, 6);
+               BOOST_CHECK_EQUAL(t._second, 59);
+               /* The fractional seconds here is truncated rather than rounded, for better or worse */
+               BOOST_CHECK_EQUAL(t._millisecond, 456);
+               BOOST_CHECK(t._offset == dcp::UTCOffset(-9, -30));
+               BOOST_CHECK_EQUAL(t.as_string(false, false), "2011-11-20T01:06:59");
+       }
+
        {
                /* Construction from boost::posix_time::ptime */
                dcp::LocalTime b (boost::posix_time::time_from_string ("2002-01-20 19:03:56"));
@@ -134,6 +186,22 @@ BOOST_AUTO_TEST_CASE (local_time_basic_test)
                BOOST_CHECK(t._offset == dcp::UTCOffset(-4, -30));
                BOOST_CHECK_EQUAL (t.as_string(), "2013-01-05T18:06:59-04:30");
        }
+
+       /* KDM seen with a TZ offset of -07:59, which we used to reject because
+        * we only accepted minutes between -30 and +30 (for some reason that I
+        * now can't find).
+        */
+       {
+               dcp::LocalTime t("2023-11-30T23:59:00-07:59");
+               BOOST_CHECK_EQUAL(t._year, 2023);
+               BOOST_CHECK_EQUAL(t._month, 11);
+               BOOST_CHECK_EQUAL(t._day, 30);
+               BOOST_CHECK_EQUAL(t._hour, 23);
+               BOOST_CHECK_EQUAL(t._minute, 59);
+               BOOST_CHECK_EQUAL(t._second, 00);
+               BOOST_CHECK(t._offset == dcp::UTCOffset(-7, -59));
+               BOOST_CHECK_EQUAL(t.as_string(), "2023-11-30T23:59:00-07:59");
+       }
 }