152 строки
5.3 KiB
C++
152 строки
5.3 KiB
C++
///////////////////////////////////////////////////////////////////////////////
|
|
//
|
|
// Project: C++ Test Suite for GDAL/OGR
|
|
// Purpose: Test general OGR features.
|
|
// Author: Simon South
|
|
//
|
|
// Note the LGPL license of that file. See
|
|
// https://github.com/OSGeo/gdal/issues/5198
|
|
//
|
|
///////////////////////////////////////////////////////////////////////////////
|
|
// Copyright (c) 2019, Simon South
|
|
//
|
|
// This library is free software; you can redistribute it and/or
|
|
// modify it under the terms of the GNU Library General Public
|
|
// License as published by the Free Software Foundation; either
|
|
// version 2 of the License, or (at your option) any later version.
|
|
//
|
|
// This library is distributed in the hope that it will be useful,
|
|
// but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
|
// Library General Public License for more details.
|
|
//
|
|
// You should have received a copy of the GNU Library General Public
|
|
// License along with this library; if not, write to the
|
|
// Free Software Foundation, Inc., 59 Temple Place - Suite 330,
|
|
// Boston, MA 02111-1307, USA.
|
|
///////////////////////////////////////////////////////////////////////////////
|
|
|
|
#include "ogr_p.h"
|
|
#include "ogrsf_frmts.h"
|
|
|
|
#include <string>
|
|
|
|
#include "gtest_include.h"
|
|
|
|
namespace
|
|
{
|
|
|
|
TEST(test_ogr_lgpl, OGRGetXMLDateTime)
|
|
{
|
|
OGRField sField;
|
|
char *pszDateTime;
|
|
|
|
sField.Date.Year = 2001;
|
|
sField.Date.Month = 2;
|
|
sField.Date.Day = 3;
|
|
sField.Date.Hour = 4;
|
|
sField.Date.Minute = 5;
|
|
|
|
// Unknown time zone (TZFlag = 0), no millisecond count
|
|
sField.Date.TZFlag = 0;
|
|
sField.Date.Second = 6.0f;
|
|
pszDateTime = OGRGetXMLDateTime(&sField);
|
|
ASSERT_TRUE(nullptr != pszDateTime);
|
|
// OGRGetXMLDateTime formats date/time field with
|
|
// unknown time zone, no millisecond count
|
|
EXPECT_STREQ("2001-02-03T04:05:06", pszDateTime);
|
|
CPLFree(pszDateTime);
|
|
|
|
// Unknown time zone (TZFlag = 0), millisecond count
|
|
sField.Date.TZFlag = 0;
|
|
sField.Date.Second = 6.789f;
|
|
pszDateTime = OGRGetXMLDateTime(&sField);
|
|
ASSERT_TRUE(nullptr != pszDateTime);
|
|
// OGRGetXMLDateTime formats date/time field with
|
|
// unknown time zone, millisecond count
|
|
EXPECT_STREQ("2001-02-03T04:05:06.789", pszDateTime);
|
|
CPLFree(pszDateTime);
|
|
|
|
// Local time zone (TZFlag = 1), no millisecond count
|
|
sField.Date.TZFlag = 1;
|
|
sField.Date.Second = 6.0f;
|
|
pszDateTime = OGRGetXMLDateTime(&sField);
|
|
ASSERT_TRUE(nullptr != pszDateTime);
|
|
// OGRGetXMLDateTime formats date/time field with
|
|
// local time zone, no millisecond count
|
|
EXPECT_STREQ("2001-02-03T04:05:06", pszDateTime);
|
|
CPLFree(pszDateTime);
|
|
|
|
// Local time zone (TZFlag = 1), millisecond count
|
|
sField.Date.TZFlag = 1;
|
|
sField.Date.Second = 6.789f;
|
|
pszDateTime = OGRGetXMLDateTime(&sField);
|
|
ASSERT_TRUE(nullptr != pszDateTime);
|
|
// OGRGetXMLDateTime formats date/time field with
|
|
// local time zone, millisecond count
|
|
EXPECT_STREQ("2001-02-03T04:05:06.789", pszDateTime);
|
|
CPLFree(pszDateTime);
|
|
|
|
// GMT time zone (TZFlag = 100), no millisecond count
|
|
sField.Date.TZFlag = 100;
|
|
sField.Date.Second = 6.0f;
|
|
pszDateTime = OGRGetXMLDateTime(&sField);
|
|
ASSERT_TRUE(nullptr != pszDateTime);
|
|
// OGRGetXMLDateTime formats date/time field with
|
|
// GMT time zone, no millisecond count
|
|
EXPECT_STREQ("2001-02-03T04:05:06Z", pszDateTime);
|
|
CPLFree(pszDateTime);
|
|
|
|
// GMT time zone (TZFlag = 100), millisecond count
|
|
sField.Date.TZFlag = 100;
|
|
sField.Date.Second = 6.789f;
|
|
pszDateTime = OGRGetXMLDateTime(&sField);
|
|
ASSERT_TRUE(nullptr != pszDateTime);
|
|
// OGRGetXMLDateTime formats date/time field with
|
|
// GMT time zone, millisecond count
|
|
EXPECT_STREQ("2001-02-03T04:05:06.789Z", pszDateTime);
|
|
CPLFree(pszDateTime);
|
|
|
|
// Positive time-zone offset, no millisecond count
|
|
sField.Date.TZFlag = 111;
|
|
sField.Date.Second = 6.0f;
|
|
pszDateTime = OGRGetXMLDateTime(&sField);
|
|
ASSERT_TRUE(nullptr != pszDateTime);
|
|
// OGRGetXMLDateTime formats date/time field with
|
|
// positive time-zone offset, no millisecond count
|
|
EXPECT_STREQ("2001-02-03T04:05:06+02:45", pszDateTime);
|
|
CPLFree(pszDateTime);
|
|
|
|
// Positive time-zone offset, millisecond count
|
|
sField.Date.TZFlag = 111;
|
|
sField.Date.Second = 6.789f;
|
|
pszDateTime = OGRGetXMLDateTime(&sField);
|
|
ASSERT_TRUE(nullptr != pszDateTime);
|
|
// OGRGetXMLDateTime formats date/time field with
|
|
// positive time-zone offset, millisecond count
|
|
EXPECT_STREQ("2001-02-03T04:05:06.789+02:45", pszDateTime);
|
|
CPLFree(pszDateTime);
|
|
|
|
// Negative time-zone offset, no millisecond count
|
|
sField.Date.TZFlag = 88;
|
|
sField.Date.Second = 6.0f;
|
|
pszDateTime = OGRGetXMLDateTime(&sField);
|
|
ASSERT_TRUE(nullptr != pszDateTime);
|
|
// OGRGetXMLDateTime formats date/time field with
|
|
// negative time-zone offset, no millisecond count
|
|
EXPECT_STREQ("2001-02-03T04:05:06-03:00", pszDateTime);
|
|
CPLFree(pszDateTime);
|
|
|
|
// Negative time-zone offset, millisecond count
|
|
sField.Date.TZFlag = 88;
|
|
sField.Date.Second = 6.789f;
|
|
pszDateTime = OGRGetXMLDateTime(&sField);
|
|
ASSERT_TRUE(nullptr != pszDateTime);
|
|
// OGRGetXMLDateTime formats date/time field with
|
|
// negative time-zone offset, millisecond count
|
|
EXPECT_STREQ("2001-02-03T04:05:06.789-03:00", pszDateTime);
|
|
CPLFree(pszDateTime);
|
|
}
|
|
|
|
} // namespace
|