- wxWCharBuffer wchBuf = testString.wc_str(wxConvUTF8);
- const wchar_t *pwz = (const wchar_t *)wchBuf;
- wxString testString2(pwz, wxConvLocal);
-
- printf("Decoding '%s' => '%s'\n", testString.c_str(), testString2.c_str());
-
- char *psz = "fran" "\xe7" "ais";
- size_t len = strlen(psz);
- wchar_t *pwz2 = new wchar_t[len + 1];
- for ( size_t n = 0; n <= len; n++ )
- {
- pwz2[n] = (wchar_t)(unsigned char)psz[n];
- }
-
- wxString testString3(pwz2, wxConvUTF8);
- delete [] pwz2;
-
- printf("Encoding '%s' -> '%s'\n", psz, testString3.c_str());
-}
-
-#endif // TEST_WCHAR
-
-// ----------------------------------------------------------------------------
-// ZIP stream
-// ----------------------------------------------------------------------------
-
-#ifdef TEST_ZIP
-
-#include "wx/zipstrm.h"
-
-static void TestZipStreamRead()
-{
- puts("*** Testing ZIP reading ***\n");
-
- wxZipInputStream istr(_T("idx.zip"), _T("IDX.txt"));
- printf("Archive size: %u\n", istr.GetSize());
-
- puts("Dumping the file:");
- while ( !istr.Eof() )
- {
- putchar(istr.GetC());
- fflush(stdout);
- }
-
- puts("\n----- done ------");
-}
-
-#endif // TEST_ZIP
-
-// ----------------------------------------------------------------------------
-// ZLIB stream
-// ----------------------------------------------------------------------------
-
-#ifdef TEST_ZLIB
-
-#include <wx/zstream.h>
-#include <wx/wfstream.h>
-
-static const wxChar *FILENAME_GZ = _T("test.gz");
-static const char *TEST_DATA = "hello and hello again";
-
-static void TestZlibStreamWrite()
-{
- puts("*** Testing Zlib stream reading ***\n");
-
- wxFileOutputStream fileOutStream(FILENAME_GZ);
- wxZlibOutputStream ostr(fileOutStream, 0);
- printf("Compressing the test string... ");
- ostr.Write(TEST_DATA, sizeof(TEST_DATA));
- if ( !ostr )
- {
- puts("(ERROR: failed)");
- }
- else
- {
- puts("(ok)");
- }
-
- puts("\n----- done ------");
-}
-
-static void TestZlibStreamRead()
-{
- puts("*** Testing Zlib stream reading ***\n");
-
- wxFileInputStream fileInStream(FILENAME_GZ);
- wxZlibInputStream istr(fileInStream);
- printf("Archive size: %u\n", istr.GetSize());
-
- puts("Dumping the file:");
- while ( !istr.Eof() )
- {
- putchar(istr.GetC());
- fflush(stdout);
- }
-
- puts("\n----- done ------");
-}
-
-#endif // TEST_ZLIB
-
-// ----------------------------------------------------------------------------
-// date time
-// ----------------------------------------------------------------------------
-
-#ifdef TEST_DATETIME
-
-#include <wx/date.h>
-
-#include <wx/datetime.h>
-
-// the test data
-struct Date
-{
- wxDateTime::wxDateTime_t day;
- wxDateTime::Month month;
- int year;
- wxDateTime::wxDateTime_t hour, min, sec;
- double jdn;
- wxDateTime::WeekDay wday;
- time_t gmticks, ticks;
-
- void Init(const wxDateTime::Tm& tm)
- {
- day = tm.mday;
- month = tm.mon;
- year = tm.year;
- hour = tm.hour;
- min = tm.min;
- sec = tm.sec;
- jdn = 0.0;
- gmticks = ticks = -1;
- }
-
- wxDateTime DT() const
- { return wxDateTime(day, month, year, hour, min, sec); }
-
- bool SameDay(const wxDateTime::Tm& tm) const
- {
- return day == tm.mday && month == tm.mon && year == tm.year;
- }
-
- wxString Format() const
- {
- wxString s;
- s.Printf("%02d:%02d:%02d %10s %02d, %4d%s",
- hour, min, sec,
- wxDateTime::GetMonthName(month).c_str(),
- day,
- abs(wxDateTime::ConvertYearToBC(year)),
- year > 0 ? "AD" : "BC");
- return s;
- }
-
- wxString FormatDate() const
- {
- wxString s;
- s.Printf("%02d-%s-%4d%s",
- day,
- wxDateTime::GetMonthName(month, wxDateTime::Name_Abbr).c_str(),
- abs(wxDateTime::ConvertYearToBC(year)),
- year > 0 ? "AD" : "BC");
- return s;
- }
-};
-
-static const Date testDates[] =
-{
- { 1, wxDateTime::Jan, 1970, 00, 00, 00, 2440587.5, wxDateTime::Thu, 0, -3600 },
- { 21, wxDateTime::Jan, 2222, 00, 00, 00, 2532648.5, wxDateTime::Mon, -1, -1 },
- { 29, wxDateTime::May, 1976, 12, 00, 00, 2442928.0, wxDateTime::Sat, 202219200, 202212000 },
- { 29, wxDateTime::Feb, 1976, 00, 00, 00, 2442837.5, wxDateTime::Sun, 194400000, 194396400 },
- { 1, wxDateTime::Jan, 1900, 12, 00, 00, 2415021.0, wxDateTime::Mon, -1, -1 },
- { 1, wxDateTime::Jan, 1900, 00, 00, 00, 2415020.5, wxDateTime::Mon, -1, -1 },
- { 15, wxDateTime::Oct, 1582, 00, 00, 00, 2299160.5, wxDateTime::Fri, -1, -1 },
- { 4, wxDateTime::Oct, 1582, 00, 00, 00, 2299149.5, wxDateTime::Mon, -1, -1 },
- { 1, wxDateTime::Mar, 1, 00, 00, 00, 1721484.5, wxDateTime::Thu, -1, -1 },
- { 1, wxDateTime::Jan, 1, 00, 00, 00, 1721425.5, wxDateTime::Mon, -1, -1 },
- { 31, wxDateTime::Dec, 0, 00, 00, 00, 1721424.5, wxDateTime::Sun, -1, -1 },
- { 1, wxDateTime::Jan, 0, 00, 00, 00, 1721059.5, wxDateTime::Sat, -1, -1 },
- { 12, wxDateTime::Aug, -1234, 00, 00, 00, 1270573.5, wxDateTime::Fri, -1, -1 },
- { 12, wxDateTime::Aug, -4000, 00, 00, 00, 260313.5, wxDateTime::Sat, -1, -1 },
- { 24, wxDateTime::Nov, -4713, 00, 00, 00, -0.5, wxDateTime::Mon, -1, -1 },
-};
-
-// this test miscellaneous static wxDateTime functions
-static void TestTimeStatic()
-{
- puts("\n*** wxDateTime static methods test ***");
-
- // some info about the current date
- int year = wxDateTime::GetCurrentYear();
- printf("Current year %d is %sa leap one and has %d days.\n",
- year,
- wxDateTime::IsLeapYear(year) ? "" : "not ",
- wxDateTime::GetNumberOfDays(year));
-
- wxDateTime::Month month = wxDateTime::GetCurrentMonth();
- printf("Current month is '%s' ('%s') and it has %d days\n",
- wxDateTime::GetMonthName(month, wxDateTime::Name_Abbr).c_str(),
- wxDateTime::GetMonthName(month).c_str(),
- wxDateTime::GetNumberOfDays(month));
-
- // leap year logic
- static const size_t nYears = 5;
- static const size_t years[2][nYears] =
- {
- // first line: the years to test
- { 1990, 1976, 2000, 2030, 1984, },
-
- // second line: TRUE if leap, FALSE otherwise
- { FALSE, TRUE, TRUE, FALSE, TRUE }
- };
-
- for ( size_t n = 0; n < nYears; n++ )
- {
- int year = years[0][n];
- bool should = years[1][n] != 0,
- is = wxDateTime::IsLeapYear(year);
-
- printf("Year %d is %sa leap year (%s)\n",
- year,
- is ? "" : "not ",
- should == is ? "ok" : "ERROR");
-
- wxASSERT( should == wxDateTime::IsLeapYear(year) );
- }
-}
-
-// test constructing wxDateTime objects
-static void TestTimeSet()
-{
- puts("\n*** wxDateTime construction test ***");
-
- for ( size_t n = 0; n < WXSIZEOF(testDates); n++ )
- {
- const Date& d1 = testDates[n];
- wxDateTime dt = d1.DT();
-
- Date d2;
- d2.Init(dt.GetTm());
-
- wxString s1 = d1.Format(),
- s2 = d2.Format();
-
- printf("Date: %s == %s (%s)\n",
- s1.c_str(), s2.c_str(),
- s1 == s2 ? "ok" : "ERROR");
- }
-}
-
-// test time zones stuff
-static void TestTimeZones()
-{
- puts("\n*** wxDateTime timezone test ***");
-
- wxDateTime now = wxDateTime::Now();
-
- printf("Current GMT time:\t%s\n", now.Format("%c", wxDateTime::GMT0).c_str());
- printf("Unix epoch (GMT):\t%s\n", wxDateTime((time_t)0).Format("%c", wxDateTime::GMT0).c_str());
- printf("Unix epoch (EST):\t%s\n", wxDateTime((time_t)0).Format("%c", wxDateTime::EST).c_str());
- printf("Current time in Paris:\t%s\n", now.Format("%c", wxDateTime::CET).c_str());
- printf(" Moscow:\t%s\n", now.Format("%c", wxDateTime::MSK).c_str());
- printf(" New York:\t%s\n", now.Format("%c", wxDateTime::EST).c_str());
-
- wxDateTime::Tm tm = now.GetTm();
- if ( wxDateTime(tm) != now )
- {
- printf("ERROR: got %s instead of %s\n",
- wxDateTime(tm).Format().c_str(), now.Format().c_str());
- }
-}
-
-// test some minimal support for the dates outside the standard range
-static void TestTimeRange()
-{
- puts("\n*** wxDateTime out-of-standard-range dates test ***");
-
- static const char *fmt = "%d-%b-%Y %H:%M:%S";
-
- printf("Unix epoch:\t%s\n",
- wxDateTime(2440587.5).Format(fmt).c_str());
- printf("Feb 29, 0: \t%s\n",
- wxDateTime(29, wxDateTime::Feb, 0).Format(fmt).c_str());
- printf("JDN 0: \t%s\n",
- wxDateTime(0.0).Format(fmt).c_str());
- printf("Jan 1, 1AD:\t%s\n",
- wxDateTime(1, wxDateTime::Jan, 1).Format(fmt).c_str());
- printf("May 29, 2099:\t%s\n",
- wxDateTime(29, wxDateTime::May, 2099).Format(fmt).c_str());
-}
-
-static void TestTimeTicks()
-{
- puts("\n*** wxDateTime ticks test ***");
-
- for ( size_t n = 0; n < WXSIZEOF(testDates); n++ )
- {
- const Date& d = testDates[n];
- if ( d.ticks == -1 )
- continue;
-
- wxDateTime dt = d.DT();
- long ticks = (dt.GetValue() / 1000).ToLong();
- printf("Ticks of %s:\t% 10ld", d.Format().c_str(), ticks);
- if ( ticks == d.ticks )
- {
- puts(" (ok)");
- }
- else
- {
- printf(" (ERROR: should be %ld, delta = %ld)\n",
- d.ticks, ticks - d.ticks);
- }
-
- dt = d.DT().ToTimezone(wxDateTime::GMT0);
- ticks = (dt.GetValue() / 1000).ToLong();
- printf("GMtks of %s:\t% 10ld", d.Format().c_str(), ticks);
- if ( ticks == d.gmticks )
- {
- puts(" (ok)");
- }
- else
- {
- printf(" (ERROR: should be %ld, delta = %ld)\n",
- d.gmticks, ticks - d.gmticks);
- }
- }
-
- puts("");
-}
-
-// test conversions to JDN &c
-static void TestTimeJDN()
-{
- puts("\n*** wxDateTime to JDN test ***");
-
- for ( size_t n = 0; n < WXSIZEOF(testDates); n++ )
- {
- const Date& d = testDates[n];
- wxDateTime dt(d.day, d.month, d.year, d.hour, d.min, d.sec);
- double jdn = dt.GetJulianDayNumber();
-
- printf("JDN of %s is:\t% 15.6f", d.Format().c_str(), jdn);
- if ( jdn == d.jdn )
- {
- puts(" (ok)");
- }
- else
- {
- printf(" (ERROR: should be %f, delta = %f)\n",
- d.jdn, jdn - d.jdn);
- }
- }
-}
-
-// test week days computation
-static void TestTimeWDays()
-{
- puts("\n*** wxDateTime weekday test ***");
-
- // test GetWeekDay()
- size_t n;
- for ( n = 0; n < WXSIZEOF(testDates); n++ )
- {
- const Date& d = testDates[n];
- wxDateTime dt(d.day, d.month, d.year, d.hour, d.min, d.sec);
-
- wxDateTime::WeekDay wday = dt.GetWeekDay();
- printf("%s is: %s",
- d.Format().c_str(),
- wxDateTime::GetWeekDayName(wday).c_str());
- if ( wday == d.wday )
- {
- puts(" (ok)");
- }
- else
- {
- printf(" (ERROR: should be %s)\n",
- wxDateTime::GetWeekDayName(d.wday).c_str());
- }
- }
-
- puts("");
-
- // test SetToWeekDay()
- struct WeekDateTestData
- {
- Date date; // the real date (precomputed)
- int nWeek; // its week index in the month
- wxDateTime::WeekDay wday; // the weekday
- wxDateTime::Month month; // the month
- int year; // and the year
-
- wxString Format() const
- {
- wxString s, which;
- switch ( nWeek < -1 ? -nWeek : nWeek )
- {
- case 1: which = "first"; break;
- case 2: which = "second"; break;
- case 3: which = "third"; break;
- case 4: which = "fourth"; break;
- case 5: which = "fifth"; break;