summaryrefslogtreecommitdiffstats
path: root/lib/libUPnP/Neptune/Source/Tests/Time1/TimeTest1.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'lib/libUPnP/Neptune/Source/Tests/Time1/TimeTest1.cpp')
-rw-r--r--lib/libUPnP/Neptune/Source/Tests/Time1/TimeTest1.cpp559
1 files changed, 559 insertions, 0 deletions
diff --git a/lib/libUPnP/Neptune/Source/Tests/Time1/TimeTest1.cpp b/lib/libUPnP/Neptune/Source/Tests/Time1/TimeTest1.cpp
new file mode 100644
index 0000000..e39edc5
--- /dev/null
+++ b/lib/libUPnP/Neptune/Source/Tests/Time1/TimeTest1.cpp
@@ -0,0 +1,559 @@
+/*****************************************************************
+|
+| Time Test Program 1
+|
+| (c) 2005-2006 Gilles Boccon-Gibod
+| Author: Gilles Boccon-Gibod (bok@bok.net)
+|
+****************************************************************/
+
+/*----------------------------------------------------------------------
+| includes
++---------------------------------------------------------------------*/
+#include <stdlib.h>
+#include <stdio.h>
+#include "Neptune.h"
+#include "NptResults.h"
+
+/*----------------------------------------------------------------------
+| macros
++---------------------------------------------------------------------*/
+#define SHOULD_SUCCEED(r) \
+ do { \
+ if (NPT_FAILED(r)) { \
+ fprintf(stderr, "FAILED: line %d\n", __LINE__); \
+ NPT_ASSERT(0); \
+ } \
+ } while(0)
+
+#define SHOULD_FAIL(r) \
+ do { \
+ if (NPT_SUCCEEDED(r)) { \
+ fprintf(stderr, "should have failed line %d (%d)\n", \
+ __LINE__, r); \
+ NPT_ASSERT(0); \
+ } \
+ } while(0)
+
+#define SHOULD_EQUAL(a, b) \
+ do { \
+ if ((a) != (b)) { \
+ fprintf(stderr, "not equal, line %d\n", __LINE__); \
+ NPT_ASSERT(0); \
+ } \
+ } while(0)
+
+#define SHOULD_EQUAL_I(a, b) \
+ do { \
+ if ((a) != (b)) { \
+ fprintf(stderr, "got %d, expected %d line %d\n", \
+ a, b, __LINE__); \
+ NPT_ASSERT(0); \
+ } \
+ } while(0)
+
+#define SHOULD_EQUAL_F(a, b) \
+ do { \
+ if ((a) != (b)) { \
+ fprintf(stderr, "got %f, expected %f line %d\n", \
+ (float)a, (float)b, __LINE__); \
+ NPT_ASSERT(0); \
+ } \
+ } while(0)
+
+#define SHOULD_EQUAL_S(a, b) \
+ do { \
+ if (!NPT_StringsEqual(a,b)) { \
+ fprintf(stderr, "got %s, expected %s line %d\n", \
+ a, b, __LINE__); \
+ NPT_ASSERT(0); \
+ } \
+ } while(0)
+
+/*----------------------------------------------------------------------
+| TestMisc
++---------------------------------------------------------------------*/
+static void
+TestMisc()
+{
+ NPT_DateTime date;
+ NPT_TimeStamp ts;
+ NPT_String s;
+
+ NPT_System::GetCurrentTimeStamp(ts);
+ SHOULD_SUCCEED(date.FromTimeStamp(ts, false));
+ s = date.ToString(NPT_DateTime::FORMAT_W3C);
+ NPT_Console::OutputF("%s\n", s.GetChars());
+ s = date.ToString(NPT_DateTime::FORMAT_ANSI);
+ NPT_Console::OutputF("%s\n", s.GetChars());
+ s = date.ToString(NPT_DateTime::FORMAT_RFC_1036);
+ NPT_Console::OutputF("%s\n", s.GetChars());
+ s = date.ToString(NPT_DateTime::FORMAT_RFC_1123);
+ NPT_Console::OutputF("%s\n", s.GetChars());
+ SHOULD_SUCCEED(date.FromTimeStamp(ts, true));
+ s = date.ToString(NPT_DateTime::FORMAT_W3C);
+ NPT_Console::OutputF("%s\n", s.GetChars());
+ s = date.ToString(NPT_DateTime::FORMAT_ANSI);
+ NPT_Console::OutputF("%s\n", s.GetChars());
+ s = date.ToString(NPT_DateTime::FORMAT_RFC_1036);
+ NPT_Console::OutputF("%s\n", s.GetChars());
+ s = date.ToString(NPT_DateTime::FORMAT_RFC_1123);
+ NPT_Console::OutputF("%s\n", s.GetChars());
+
+ ts = 0.0;
+ SHOULD_SUCCEED(date.FromTimeStamp(ts, false));
+ s = date.ToString(NPT_DateTime::FORMAT_W3C);
+ SHOULD_EQUAL_S(s.GetChars(), "1970-01-01T00:00:00Z");
+ s = date.ToString(NPT_DateTime::FORMAT_ANSI);
+ SHOULD_EQUAL_S(s.GetChars(), "Thu Jan 1 00:00:00 1970");
+ s = date.ToString(NPT_DateTime::FORMAT_RFC_1036);
+ SHOULD_EQUAL_S(s.GetChars(), "Thursday, 01-Jan-70 00:00:00 GMT");
+ s = date.ToString(NPT_DateTime::FORMAT_RFC_1123);
+ SHOULD_EQUAL_S(s.GetChars(), "Thu, 01 Jan 1970 00:00:00 GMT");
+
+ ts.SetSeconds(0xFFFFFFFF);
+ SHOULD_SUCCEED(date.FromTimeStamp(ts, false));
+ s = date.ToString(NPT_DateTime::FORMAT_W3C, false);
+ SHOULD_EQUAL_S(s.GetChars(), "2106-02-07T06:28:15Z");
+
+ NPT_TimeStamp now;
+ NPT_System::GetCurrentTimeStamp(now);
+ NPT_DateTime now_local(now, true);
+ NPT_DateTime now_utc(now, false);
+ SHOULD_EQUAL_I(now_utc.m_TimeZone, 0);
+ NPT_TimeStamp ts1, ts2;
+ now_local.ToTimeStamp(ts1);
+ now_utc.ToTimeStamp(ts2);
+ SHOULD_EQUAL_I((int)ts1.ToSeconds(), (int)ts2.ToSeconds());
+
+ ts.SetSeconds(0);
+ NPT_DateTime d1(ts);
+ ts.SetSeconds(ts.ToSeconds()-3600);
+ NPT_DateTime d2(ts);
+ d1.ToTimeStamp(ts1);
+ d2.ToTimeStamp(ts2);
+ SHOULD_EQUAL_I((int)ts1.ToSeconds(), (int)ts2.ToSeconds()+3600);
+}
+
+/*----------------------------------------------------------------------
+| TestDateFromTimeStringW3C
++---------------------------------------------------------------------*/
+static void
+TestDateFromTimeStringW3C()
+{
+ NPT_DateTime date;
+
+ /* Valid date */
+ SHOULD_SUCCEED(date.FromString("2006-04-14T12:01:10.003Z", NPT_DateTime::FORMAT_W3C));
+ SHOULD_EQUAL_I(date.m_Year , 2006);
+ SHOULD_EQUAL_I(date.m_Month , 4);
+ SHOULD_EQUAL_I(date.m_Day , 14);
+ SHOULD_EQUAL_I(date.m_Hours , 12);
+ SHOULD_EQUAL_I(date.m_Minutes , 1);
+ SHOULD_EQUAL_I(date.m_Seconds , 10);
+ SHOULD_EQUAL_I(date.m_NanoSeconds , 3000000);
+ SHOULD_EQUAL_I(date.m_TimeZone , 0);
+
+ /* Valid date, 2 characters milliseconds */
+ SHOULD_SUCCEED(date.FromString("2006-04-14T12:01:10.02Z", NPT_DateTime::FORMAT_W3C));
+ SHOULD_EQUAL_I(date.m_Year , 2006);
+ SHOULD_EQUAL_I(date.m_Month , 4);
+ SHOULD_EQUAL_I(date.m_Day , 14);
+ SHOULD_EQUAL_I(date.m_Hours , 12);
+ SHOULD_EQUAL_I(date.m_Minutes , 1);
+ SHOULD_EQUAL_I(date.m_Seconds , 10);
+ SHOULD_EQUAL_I(date.m_NanoSeconds , 20000000);
+ SHOULD_EQUAL_I(date.m_TimeZone , 0);
+
+ /* Valid date, 1 character milliseconds */
+ SHOULD_SUCCEED(date.FromString("2006-04-14T12:01:10.9Z", NPT_DateTime::FORMAT_W3C));
+ SHOULD_EQUAL_I(date.m_Year , 2006);
+ SHOULD_EQUAL_I(date.m_Month , 4);
+ SHOULD_EQUAL_I(date.m_Day , 14);
+ SHOULD_EQUAL_I(date.m_Hours , 12);
+ SHOULD_EQUAL_I(date.m_Minutes , 1);
+ SHOULD_EQUAL_I(date.m_Seconds , 10);
+ SHOULD_EQUAL_I(date.m_NanoSeconds , 900000000);
+ SHOULD_EQUAL_I(date.m_TimeZone , 0);
+
+ /* Valid date, no seconds, Z */
+ SHOULD_SUCCEED(date.FromString("2006-04-14T12:01Z", NPT_DateTime::FORMAT_W3C));
+ SHOULD_EQUAL_I(date.m_Year , 2006);
+ SHOULD_EQUAL_I(date.m_Month , 4);
+ SHOULD_EQUAL_I(date.m_Day , 14);
+ SHOULD_EQUAL_I(date.m_Hours , 12);
+ SHOULD_EQUAL_I(date.m_Minutes , 1);
+ SHOULD_EQUAL_I(date.m_Seconds , 0);
+ SHOULD_EQUAL_I(date.m_NanoSeconds , 0);
+ SHOULD_EQUAL_I(date.m_TimeZone , 0);
+
+ /* Valid date, no seconds, timezone */
+ SHOULD_SUCCEED(date.FromString("2006-04-14T12:01+03:00", NPT_DateTime::FORMAT_W3C));
+ SHOULD_EQUAL_I(date.m_Year , 2006);
+ SHOULD_EQUAL_I(date.m_Month , 4);
+ SHOULD_EQUAL_I(date.m_Day , 14);
+ SHOULD_EQUAL_I(date.m_Hours , 12);
+ SHOULD_EQUAL_I(date.m_Minutes , 1);
+ SHOULD_EQUAL_I(date.m_Seconds , 0);
+ SHOULD_EQUAL_I(date.m_NanoSeconds , 0);
+ SHOULD_EQUAL_I(date.m_TimeZone , 180);
+
+ /* Valid date, no millimseconds */
+ SHOULD_SUCCEED(date.FromString("2006-04-14T12:01:10Z", NPT_DateTime::FORMAT_W3C));
+ SHOULD_EQUAL_I(date.m_Year , 2006);
+ SHOULD_EQUAL_I(date.m_Month , 4);
+ SHOULD_EQUAL_I(date.m_Day , 14);
+ SHOULD_EQUAL_I(date.m_Hours , 12);
+ SHOULD_EQUAL_I(date.m_Minutes , 1);
+ SHOULD_EQUAL_I(date.m_Seconds , 10);
+ SHOULD_EQUAL_I(date.m_NanoSeconds , 0);
+ SHOULD_EQUAL_I(date.m_TimeZone , 0);
+
+ /* Valid date with microseconds, 'Z' */
+ SHOULD_SUCCEED(date.FromString("2005-09-06T17:16:10.003498Z", NPT_DateTime::FORMAT_W3C));
+ SHOULD_EQUAL_I(date.m_Year , 2005);
+ SHOULD_EQUAL_I(date.m_Month , 9);
+ SHOULD_EQUAL_I(date.m_Day , 6);
+ SHOULD_EQUAL_I(date.m_Hours , 17);
+ SHOULD_EQUAL_I(date.m_Minutes , 16);
+ SHOULD_EQUAL_I(date.m_Seconds , 10);
+ SHOULD_EQUAL_I(date.m_NanoSeconds , 3498000);
+ SHOULD_EQUAL_I(date.m_TimeZone , 0);
+
+ /* Valid date, no milliseconds, with timezone offset */
+ SHOULD_SUCCEED(date.FromString("2006-04-14T12:01:10+03:00", NPT_DateTime::FORMAT_W3C));
+ SHOULD_EQUAL_I(date.m_Year , 2006);
+ SHOULD_EQUAL_I(date.m_Month , 4);
+ SHOULD_EQUAL_I(date.m_Day , 14);
+ SHOULD_EQUAL_I(date.m_Hours , 12);
+ SHOULD_EQUAL_I(date.m_Minutes , 1);
+ SHOULD_EQUAL_I(date.m_Seconds , 10);
+ SHOULD_EQUAL_I(date.m_NanoSeconds , 0);
+ SHOULD_EQUAL_I(date.m_TimeZone , 180);
+
+ /* Valid date, no milliseconds, with negative m_TimeZone offset */
+ SHOULD_SUCCEED(date.FromString("2006-04-14T12:01:10-05:00", NPT_DateTime::FORMAT_W3C));
+ SHOULD_EQUAL_I(date.m_Year , 2006);
+ SHOULD_EQUAL_I(date.m_Month , 4);
+ SHOULD_EQUAL_I(date.m_Day , 14);
+ SHOULD_EQUAL_I(date.m_Hours , 12);
+ SHOULD_EQUAL_I(date.m_Minutes , 1);
+ SHOULD_EQUAL_I(date.m_Seconds , 10);
+ SHOULD_EQUAL_I(date.m_NanoSeconds , 0);
+ SHOULD_EQUAL_I(date.m_TimeZone , -300);
+
+ /* Valid date, with milliseconds, with positive m_TimeZone offset */
+ SHOULD_SUCCEED(date.FromString("2006-04-14T12:01:10.200+03:00", NPT_DateTime::FORMAT_W3C));
+ SHOULD_EQUAL_I(date.m_Year , 2006);
+ SHOULD_EQUAL_I(date.m_Month , 4);
+ SHOULD_EQUAL_I(date.m_Day , 14);
+ SHOULD_EQUAL_I(date.m_Hours , 12);
+ SHOULD_EQUAL_I(date.m_Minutes , 1);
+ SHOULD_EQUAL_I(date.m_Seconds , 10);
+ SHOULD_EQUAL_I(date.m_NanoSeconds , 200000000);
+ SHOULD_EQUAL_I(date.m_TimeZone , 180);
+
+ /* Valid date, with milliseconds, with negative m_TimeZone offset */
+ SHOULD_SUCCEED(date.FromString("2006-04-14T12:01:10.030-05:00", NPT_DateTime::FORMAT_W3C));
+ SHOULD_EQUAL_I(date.m_Year , 2006);
+ SHOULD_EQUAL_I(date.m_Month , 4);
+ SHOULD_EQUAL_I(date.m_Day , 14);
+ SHOULD_EQUAL_I(date.m_Hours , 12);
+ SHOULD_EQUAL_I(date.m_Minutes , 1);
+ SHOULD_EQUAL_I(date.m_Seconds , 10);
+ SHOULD_EQUAL_I(date.m_NanoSeconds , 30000000);
+ SHOULD_EQUAL_I(date.m_TimeZone , -300);
+
+ /* Valid date with microseconds and negative m_TimeZone offset */
+ SHOULD_SUCCEED(date.FromString("2005-09-06T17:16:10.001822-05:00", NPT_DateTime::FORMAT_W3C));
+ SHOULD_EQUAL_I(date.m_Year , 2005);
+ SHOULD_EQUAL_I(date.m_Month , 9);
+ SHOULD_EQUAL_I(date.m_Day , 6);
+ SHOULD_EQUAL_I(date.m_Hours , 17);
+ SHOULD_EQUAL_I(date.m_Minutes , 16);
+ SHOULD_EQUAL_I(date.m_Seconds , 10);
+ SHOULD_EQUAL_I(date.m_NanoSeconds , 1822000);
+ SHOULD_EQUAL_I(date.m_TimeZone , -300);
+
+ /* Valid date with microseconds and positive m_TimeZone offset */
+ SHOULD_SUCCEED(date.FromString("2005-09-06T17:16:10.001822+05:00", NPT_DateTime::FORMAT_W3C));
+ SHOULD_EQUAL_I(date.m_Year , 2005);
+ SHOULD_EQUAL_I(date.m_Month , 9);
+ SHOULD_EQUAL_I(date.m_Day , 6);
+ SHOULD_EQUAL_I(date.m_Hours , 17);
+ SHOULD_EQUAL_I(date.m_Minutes , 16);
+ SHOULD_EQUAL_I(date.m_Seconds , 10);
+ SHOULD_EQUAL_I(date.m_NanoSeconds , 1822000);
+ SHOULD_EQUAL_I(date.m_TimeZone , 300);
+
+ /* Valid date with no time and m_TimeZone offset */
+ SHOULD_SUCCEED(date.FromString("2006-10-05", NPT_DateTime::FORMAT_W3C));
+ SHOULD_EQUAL_I(date.m_Year , 2006);
+ SHOULD_EQUAL_I(date.m_Month , 10);
+ SHOULD_EQUAL_I(date.m_Day , 5);
+
+ /* Invalid date with 3 digit year */
+ SHOULD_FAIL(date.FromString("206-04-14T12:01:10.003Z", NPT_DateTime::FORMAT_W3C));
+
+ /* Invalid date with 5 digit year */
+ SHOULD_FAIL(date.FromString("20076-04-14T12:01:10.003Z", NPT_DateTime::FORMAT_W3C));
+
+ /* Invalid date with 5 digit year */
+ SHOULD_FAIL(date.FromString("20076-04-14T12:01:10.003Z", NPT_DateTime::FORMAT_W3C));
+
+ /* Invalid date with garbage in the end */
+ SHOULD_FAIL(date.FromString("2006-04-14T12:01:10.003+69:696", NPT_DateTime::FORMAT_W3C));
+
+ /* Invalid date with bad month */
+ SHOULD_FAIL(date.FromString("2006-010-14T12:01:10.003", NPT_DateTime::FORMAT_W3C));
+
+ /* Invalid date with bad month, right overall length */
+ SHOULD_FAIL(date.FromString("2063-0--14T12:01:10.003", NPT_DateTime::FORMAT_W3C));
+
+ /* Invalid date with bad year-month separator */
+ SHOULD_FAIL(date.FromString("2063Y08-14T12:01:10.003", NPT_DateTime::FORMAT_W3C));
+
+ /* Invalid date with bad time separator */
+ SHOULD_FAIL(date.FromString("2063-08-14t12:01:10.003", NPT_DateTime::FORMAT_W3C));
+
+ /* Invalid date with bad hour */
+ SHOULD_FAIL(date.FromString("2063-08-14T012:01:10.003", NPT_DateTime::FORMAT_W3C));
+
+ /* Invalid date with bad GMT indicator */
+ SHOULD_FAIL(date.FromString("2063-08-14T12:01:10.003z", NPT_DateTime::FORMAT_W3C));
+
+ /* Invalid date with bad GMT indicator */
+ SHOULD_FAIL(date.FromString("2063-08-14T12:01:10.003g", NPT_DateTime::FORMAT_W3C));
+
+ /* Invalid date with millisecond separator but no digits */
+ SHOULD_FAIL(date.FromString("2063-08-14T12:01:10.", NPT_DateTime::FORMAT_W3C));
+
+ /* Invalid date with millisecond separator but no digits */
+ SHOULD_FAIL(date.FromString("2063-08-14T12:01:10.Z", NPT_DateTime::FORMAT_W3C));
+
+ /* Invalid date with millisecond separator but no digits */
+ SHOULD_FAIL(date.FromString("2063-08-14T12:01:10.+10:38", NPT_DateTime::FORMAT_W3C));
+
+ /* Invalid date with bad m_TimeZone offset */
+ SHOULD_FAIL(date.FromString("2063-08-14T12:01:10+10:338", NPT_DateTime::FORMAT_W3C));
+
+ /* Invalid date with bad m_TimeZone offset */
+ SHOULD_FAIL(date.FromString("2063-08-14T12:01:10+001:38", NPT_DateTime::FORMAT_W3C));
+
+ /* Invalid date with bad m_TimeZone offset */
+ SHOULD_FAIL(date.FromString("2063-08-14T12:01:10+10:33Z", NPT_DateTime::FORMAT_W3C));
+
+ /* Invalid date with bad m_TimeZone offset */
+ SHOULD_FAIL(date.FromString("2063-08-14T12:01:10.08+10:33Z", NPT_DateTime::FORMAT_W3C));
+
+ /* Invalid date with bad m_TimeZone offset with m_Seconds*/
+ SHOULD_FAIL(date.FromString("2063-08-14T12:01:10.08+10:33:30", NPT_DateTime::FORMAT_W3C));
+
+ /* Invalid date with m_TimeZone offset too big*/
+ SHOULD_FAIL(date.FromString("2063-08-14T12:01:10.08+14:33", NPT_DateTime::FORMAT_W3C));
+}
+
+/*----------------------------------------------------------------------
+| TestDateFromTimeStringANSI
++---------------------------------------------------------------------*/
+static void
+TestDateFromTimeStringANSI()
+{
+ NPT_DateTime date;
+
+ /* Valid date */
+ SHOULD_SUCCEED(date.FromString("Fri Apr 14 12:01:10 2006", NPT_DateTime::FORMAT_ANSI));
+ SHOULD_EQUAL_I(date.m_Year , 2006);
+ SHOULD_EQUAL_I(date.m_Month , 4);
+ SHOULD_EQUAL_I(date.m_Day , 14);
+ SHOULD_EQUAL_I(date.m_Hours , 12);
+ SHOULD_EQUAL_I(date.m_Minutes , 1);
+ SHOULD_EQUAL_I(date.m_Seconds , 10);
+ SHOULD_EQUAL_I(date.m_NanoSeconds , 0);
+ SHOULD_EQUAL_I(date.m_TimeZone , 0);
+
+ /* Valid date with space in the days */
+ SHOULD_SUCCEED(date.FromString("Fri Apr 7 12:01:10 2006", NPT_DateTime::FORMAT_ANSI));
+ SHOULD_EQUAL_I(date.m_Year , 2006);
+ SHOULD_EQUAL_I(date.m_Month , 4);
+ SHOULD_EQUAL_I(date.m_Day , 7);
+ SHOULD_EQUAL_I(date.m_Hours , 12);
+ SHOULD_EQUAL_I(date.m_Minutes , 1);
+ SHOULD_EQUAL_I(date.m_Seconds , 10);
+ SHOULD_EQUAL_I(date.m_NanoSeconds , 0);
+ SHOULD_EQUAL_I(date.m_TimeZone , 0);
+
+ /* Wrong weekday */
+ SHOULD_FAIL(date.FromString("Wed Apr 14 12:01:10 2006", NPT_DateTime::FORMAT_ANSI));
+
+ /* Wrong year length */
+ SHOULD_FAIL(date.FromString("Mon Apr 14 12:01:10 95", NPT_DateTime::FORMAT_ANSI));
+}
+
+/*----------------------------------------------------------------------
+| TestDateFromTimeStringRFC_1036
++---------------------------------------------------------------------*/
+static void
+TestDateFromTimeStringRFC_1036()
+{
+ NPT_DateTime date;
+
+ /* Valid date */
+ SHOULD_SUCCEED(date.FromString("Friday, 14-Apr-2006 12:01:10 UT", NPT_DateTime::FORMAT_RFC_1036));
+ SHOULD_EQUAL_I(date.m_Year , 2006);
+ SHOULD_EQUAL_I(date.m_Month , 4);
+ SHOULD_EQUAL_I(date.m_Day , 14);
+ SHOULD_EQUAL_I(date.m_Hours , 12);
+ SHOULD_EQUAL_I(date.m_Minutes , 1);
+ SHOULD_EQUAL_I(date.m_Seconds , 10);
+ SHOULD_EQUAL_I(date.m_NanoSeconds , 0);
+ SHOULD_EQUAL_I(date.m_TimeZone , 0);
+
+ /* Valid date with timezone */
+ SHOULD_SUCCEED(date.FromString("Friday, 14-Apr-95 12:01:10 GMT", NPT_DateTime::FORMAT_RFC_1036));
+ SHOULD_EQUAL_I(date.m_Year , 1995);
+ SHOULD_EQUAL_I(date.m_Month , 4);
+ SHOULD_EQUAL_I(date.m_Day , 14);
+ SHOULD_EQUAL_I(date.m_Hours , 12);
+ SHOULD_EQUAL_I(date.m_Minutes , 1);
+ SHOULD_EQUAL_I(date.m_Seconds , 10);
+ SHOULD_EQUAL_I(date.m_NanoSeconds , 0);
+ SHOULD_EQUAL_I(date.m_TimeZone , 0);
+
+ /* Valid date with timezone */
+ SHOULD_SUCCEED(date.FromString("Friday, 14-Apr-95 12:01:10 -0800", NPT_DateTime::FORMAT_RFC_1036));
+ SHOULD_EQUAL_I(date.m_Year , 1995);
+ SHOULD_EQUAL_I(date.m_Month , 4);
+ SHOULD_EQUAL_I(date.m_Day , 14);
+ SHOULD_EQUAL_I(date.m_Hours , 12);
+ SHOULD_EQUAL_I(date.m_Minutes , 1);
+ SHOULD_EQUAL_I(date.m_Seconds , 10);
+ SHOULD_EQUAL_I(date.m_NanoSeconds , 0);
+ SHOULD_EQUAL_I(date.m_TimeZone , -8*60);
+
+ /* Wrong day name */
+ SHOULD_FAIL(date.FromString("Fri, 14-Apr-95 12:01:10 -0800", NPT_DateTime::FORMAT_RFC_1036));
+
+ /* Wrong weekday */
+ SHOULD_FAIL(date.FromString("Wednesday, 14-Apr-95 12:01:10 GMT", NPT_DateTime::FORMAT_RFC_1036));
+
+ /* Wrong year length */
+ SHOULD_FAIL(date.FromString("Monday, 14-Apr-1995 12:01:10 GMT", NPT_DateTime::FORMAT_RFC_1036));
+}
+
+/*----------------------------------------------------------------------
+| TestDateFromTimeStringRFC_1123
++---------------------------------------------------------------------*/
+static void
+TestDateFromTimeStringRFC_1123()
+{
+ NPT_DateTime date;
+
+ /* Valid date */
+ SHOULD_SUCCEED(date.FromString("Fri, 14 Apr 2006 12:01:10 UT", NPT_DateTime::FORMAT_RFC_1123));
+ SHOULD_EQUAL_I(date.m_Year , 2006);
+ SHOULD_EQUAL_I(date.m_Month , 4);
+ SHOULD_EQUAL_I(date.m_Day , 14);
+ SHOULD_EQUAL_I(date.m_Hours , 12);
+ SHOULD_EQUAL_I(date.m_Minutes , 1);
+ SHOULD_EQUAL_I(date.m_Seconds , 10);
+ SHOULD_EQUAL_I(date.m_NanoSeconds , 0);
+ SHOULD_EQUAL_I(date.m_TimeZone , 0);
+
+ /* Valid date with timezone*/
+ SHOULD_SUCCEED(date.FromString("Fri, 14 Apr 2006 12:01:10 GMT", NPT_DateTime::FORMAT_RFC_1123));
+ SHOULD_EQUAL_I(date.m_Year , 2006);
+ SHOULD_EQUAL_I(date.m_Month , 4);
+ SHOULD_EQUAL_I(date.m_Day , 14);
+ SHOULD_EQUAL_I(date.m_Hours , 12);
+ SHOULD_EQUAL_I(date.m_Minutes , 1);
+ SHOULD_EQUAL_I(date.m_Seconds , 10);
+ SHOULD_EQUAL_I(date.m_NanoSeconds , 0);
+ SHOULD_EQUAL_I(date.m_TimeZone , 0);
+
+ /* Valid date with timezone*/
+ SHOULD_SUCCEED(date.FromString("Fri, 14 Apr 2006 12:01:10 +0800", NPT_DateTime::FORMAT_RFC_1123));
+ SHOULD_EQUAL_I(date.m_Year , 2006);
+ SHOULD_EQUAL_I(date.m_Month , 4);
+ SHOULD_EQUAL_I(date.m_Day , 14);
+ SHOULD_EQUAL_I(date.m_Hours , 12);
+ SHOULD_EQUAL_I(date.m_Minutes , 1);
+ SHOULD_EQUAL_I(date.m_Seconds , 10);
+ SHOULD_EQUAL_I(date.m_NanoSeconds , 0);
+ SHOULD_EQUAL_I(date.m_TimeZone , 8*60);
+
+ /* Valid date, short year */
+ SHOULD_SUCCEED(date.FromString("Fri, 14 Apr 95 12:01:10 GMT", NPT_DateTime::FORMAT_RFC_1123));
+ SHOULD_EQUAL_I(date.m_Year , 1995);
+ SHOULD_EQUAL_I(date.m_Month , 4);
+ SHOULD_EQUAL_I(date.m_Day , 14);
+ SHOULD_EQUAL_I(date.m_Hours , 12);
+ SHOULD_EQUAL_I(date.m_Minutes , 1);
+ SHOULD_EQUAL_I(date.m_Seconds , 10);
+ SHOULD_EQUAL_I(date.m_NanoSeconds , 0);
+ SHOULD_EQUAL_I(date.m_TimeZone , 0);
+
+ /* Wrong day name */
+ SHOULD_FAIL(date.FromString("Friday, 14 Apr 95 12:01:10 GMT", NPT_DateTime::FORMAT_RFC_1123));
+
+ /* Wrong weekday */
+ SHOULD_FAIL(date.FromString("Wed, 14 Apr 2006 12:01:10 GMT", NPT_DateTime::FORMAT_RFC_1123));
+
+ /* Wrong year length */
+ SHOULD_FAIL(date.FromString("Mon, 14 Apr 95 12:01:10 GMT", NPT_DateTime::FORMAT_RFC_1123));
+}
+
+/*----------------------------------------------------------------------
+| TestRandom
++---------------------------------------------------------------------*/
+static void
+TestRandom()
+{
+ for (unsigned int i=0; i<10000; i++) {
+ NPT_TimeStamp ts((double)NPT_System::GetRandomInteger());
+ NPT_TimeStamp ts2;
+ NPT_DateTime date;
+ SHOULD_SUCCEED(date.FromTimeStamp(ts, false));
+ SHOULD_SUCCEED(date.ToTimeStamp(ts2));
+ NPT_String ds;
+ NPT_DateTime ndate;
+ ds = date.ToString(NPT_DateTime::FORMAT_ANSI);
+ ndate.FromString(ds);
+ //SHOULD_EQUAL(date, ndate);
+ SHOULD_SUCCEED(ndate.ToTimeStamp(ts2));
+ SHOULD_EQUAL_F((double)ts2.ToSeconds(), (double)ts.ToSeconds());
+
+ ds = date.ToString(NPT_DateTime::FORMAT_W3C);
+ ndate.FromString(ds);
+ //SHOULD_EQUAL(date, ndate);
+ SHOULD_SUCCEED(ndate.ToTimeStamp(ts2));
+ SHOULD_EQUAL_F((double)ts2.ToSeconds(), (double)ts.ToSeconds());
+
+ ds = date.ToString(NPT_DateTime::FORMAT_RFC_1123);
+ ndate.FromString(ds);
+ //SHOULD_EQUAL(date, ndate);
+ SHOULD_SUCCEED(ndate.ToTimeStamp(ts2));
+ SHOULD_EQUAL_F((double)ts2.ToSeconds(), (double)ts.ToSeconds());
+
+ ds = date.ToString(NPT_DateTime::FORMAT_RFC_1036);
+ ndate.FromString(ds);
+ //SHOULD_EQUAL(date, ndate);
+ SHOULD_SUCCEED(ndate.ToTimeStamp(ts2));
+ SHOULD_EQUAL_F((double)ts2.ToSeconds(), (double)ts.ToSeconds());
+ }
+}
+
+/*----------------------------------------------------------------------
+| main
++---------------------------------------------------------------------*/
+int
+main(int /*argc*/, char** /*argv*/)
+{
+ TestMisc();
+ TestDateFromTimeStringW3C();
+ TestDateFromTimeStringANSI();
+ TestDateFromTimeStringRFC_1036();
+ TestDateFromTimeStringRFC_1123();
+ TestRandom();
+ return 0;
+}