mirror of
https://github.com/wxWidgets/Phoenix.git
synced 2026-01-09 05:20:08 +01:00
Change the wx.DateTime.Parse*() to be like they were in Classic, returning a -1 on failure, or the number of characters parsed otherwise.
Add some unit tests to exercise the new methods.
This commit is contained in:
@@ -159,48 +159,86 @@ def run():
|
||||
c.find('Subtract').findOverload('wxDateSpan', isConst=True).ignore()
|
||||
c.find('Subtract').findOverload('wxTimeSpan', isConst=True).ignore()
|
||||
|
||||
# Ignore the end parameter for the parse methods, and provide replacement
|
||||
# implementations that don't need them.
|
||||
c.find('ParseDate.end').ignore()
|
||||
c.find('ParseTime.end').ignore()
|
||||
c.find('ParseDateTime.end').ignore()
|
||||
c.find('ParseRfc822Date.end').ignore()
|
||||
for m in c.find('ParseFormat').all():
|
||||
|
||||
# Ignore the end parameter for the Parse*() methods, and provide
|
||||
# replacement implementations that don't need them. Change them to be
|
||||
# like they were in Classic, returning a -1 on failure, or the number of
|
||||
# characters parsed otherwise.
|
||||
def fixParseMethod(m, code):
|
||||
assert isinstance(m, etgtools.MethodDef)
|
||||
m.find('end').ignore()
|
||||
m.type = 'int'
|
||||
m.setCppCode(code)
|
||||
return m
|
||||
|
||||
c.find('ParseDate').setCppCode("""\
|
||||
|
||||
fixParseMethod(c.find('ParseDate'), """\
|
||||
wxString::const_iterator begin = date->begin();
|
||||
wxString::const_iterator end;
|
||||
return self->ParseDate(*date, &end);
|
||||
""")
|
||||
c.find('ParseTime').setCppCode("""\
|
||||
wxString::const_iterator end;
|
||||
return self->ParseTime(*time, &end);
|
||||
""")
|
||||
c.find('ParseDateTime').setCppCode("""\
|
||||
wxString::const_iterator end;
|
||||
return self->ParseDateTime(*datetime, &end);
|
||||
""")
|
||||
c.find('ParseRfc822Date').setCppCode("""\
|
||||
wxString::const_iterator end;
|
||||
return self->ParseRfc822Date(*date, &end);
|
||||
if (! self->ParseDate(*date, &end))
|
||||
return -1;
|
||||
return end - begin;
|
||||
""")
|
||||
|
||||
fixParseMethod(c.find('ParseDateTime'), """\
|
||||
wxString::const_iterator begin = datetime->begin();
|
||||
wxString::const_iterator end;
|
||||
if (! self->ParseDateTime(*datetime, &end))
|
||||
return -1;
|
||||
return end - begin;
|
||||
""")
|
||||
|
||||
fixParseMethod(c.find('ParseTime'), """\
|
||||
wxString::const_iterator begin = time->begin();
|
||||
wxString::const_iterator end;
|
||||
if (! self->ParseTime(*time, &end))
|
||||
return -1;
|
||||
return end - begin;
|
||||
""")
|
||||
|
||||
fixParseMethod(c.find('ParseRfc822Date'), """\
|
||||
wxString::const_iterator begin = date->begin();
|
||||
wxString::const_iterator end;
|
||||
if (! self->ParseRfc822Date(*date, &end))
|
||||
return -1;
|
||||
return end - begin;
|
||||
""")
|
||||
|
||||
|
||||
pf = c.find('ParseFormat')
|
||||
pf.findOverload('const wxString &date, const wxString &format, const wxDateTime &dateDef, wxString::').setCppCode(
|
||||
pf1 = fixParseMethod(
|
||||
pf.findOverload('const wxString &date, const wxString &format, const wxDateTime &dateDef, wxString::'),
|
||||
"""\
|
||||
wxString::const_iterator begin = date->begin();
|
||||
wxString::const_iterator end;
|
||||
return self->ParseFormat(*date, *format, *dateDef, &end);
|
||||
if (! self->ParseFormat(*date, *format, *dateDef, &end))
|
||||
return -1;
|
||||
return end - begin;
|
||||
""")
|
||||
pf.findOverload('const wxString &date, const wxString &format, wxString::').setCppCode(
|
||||
|
||||
pf2 = fixParseMethod(
|
||||
pf.findOverload('const wxString &date, const wxString &format, wxString::'),
|
||||
"""\
|
||||
wxString::const_iterator begin = date->begin();
|
||||
wxString::const_iterator end;
|
||||
return self->ParseFormat(*date, *format, &end);
|
||||
if (! self->ParseFormat(*date, *format, &end))
|
||||
return -1;
|
||||
return end - begin;
|
||||
""")
|
||||
pf.findOverload('const wxString &date, wxString::').setCppCode(
|
||||
|
||||
pf3 = fixParseMethod(
|
||||
pf.findOverload('const wxString &date, wxString::'),
|
||||
"""\
|
||||
wxString::const_iterator begin = date->begin();
|
||||
wxString::const_iterator end;
|
||||
return self->ParseFormat(*date, &end);
|
||||
if (! self->ParseFormat(*date, &end))
|
||||
return -1;
|
||||
return end - begin;
|
||||
""")
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
c.addPyMethod('__repr__', '(self)', """\
|
||||
|
||||
@@ -140,8 +140,93 @@ class datetime_Tests(wtc.WidgetTestCase):
|
||||
d2 = wx.pydate2wxdate(pd)
|
||||
self.assertTrue(isinstance(pd, datetime.datetime))
|
||||
self.assertEqual(d1, d2)
|
||||
|
||||
|
||||
|
||||
def test_datetimeParseDate1(self):
|
||||
d = wx.DateTime()
|
||||
val = d.ParseDate('bogus')
|
||||
self.assertEqual(val, -1)
|
||||
|
||||
def test_datetimeParseDate2(self):
|
||||
d = wx.DateTime()
|
||||
val = d.ParseDate('10/25/2015')
|
||||
self.assertEqual(val, 10)
|
||||
self.assertEqual(d.year, 2015)
|
||||
self.assertEqual(d.month, wx.DateTime.Oct)
|
||||
self.assertEqual(d.day, 25)
|
||||
|
||||
def test_datetimeParseDate3(self):
|
||||
d = wx.DateTime()
|
||||
val = d.ParseDate('10/25/2015 non-date text')
|
||||
self.assertEqual(val, 13)
|
||||
|
||||
|
||||
def test_datetimeParseDateTime1(self):
|
||||
d = wx.DateTime()
|
||||
val = d.ParseDateTime('bogus')
|
||||
self.assertEqual(val, -1)
|
||||
|
||||
def test_datetimeParseDateTime2(self):
|
||||
d = wx.DateTime()
|
||||
val = d.ParseDateTime('10/25/2015 12:25')
|
||||
self.assertEqual(val, 16)
|
||||
self.assertEqual(d.year, 2015)
|
||||
self.assertEqual(d.month, wx.DateTime.Oct)
|
||||
self.assertEqual(d.day, 25)
|
||||
self.assertEqual(d.hour, 12)
|
||||
self.assertEqual(d.minute, 25)
|
||||
|
||||
def test_datetimeParseDateTime3(self):
|
||||
d = wx.DateTime()
|
||||
val = d.ParseDateTime('10/25/2015 12:25 non-date text')
|
||||
self.assertEqual(val, 16)
|
||||
|
||||
|
||||
def test_datetimeParseTime1(self):
|
||||
d = wx.DateTime()
|
||||
val = d.ParseTime('12:25')
|
||||
self.assertEqual(val, 5)
|
||||
self.assertEqual(d.hour, 12)
|
||||
self.assertEqual(d.minute, 25)
|
||||
|
||||
|
||||
def test_datetimeParseRfc822Date(self):
|
||||
d = wx.DateTime()
|
||||
val = d.ParseRfc822Date('Wed, 25 Feb 2015 13:34:45 -0800')
|
||||
self.assertEqual(val, 31)
|
||||
self.assertEqual(d.hour, 13)
|
||||
self.assertEqual(d.minute, 34)
|
||||
|
||||
|
||||
|
||||
def test_datetimeParseFormat1(self):
|
||||
d = wx.DateTime()
|
||||
defDate = wx.DateTime.FromHMS(1,2,3,4)
|
||||
val = d.ParseFormat('2015-10-11', '%Y-%m-%d', defDate)
|
||||
self.assertEqual(val, 10)
|
||||
self.assertEqual(d.year, 2015)
|
||||
self.assertEqual(d.month, wx.DateTime.Oct)
|
||||
self.assertEqual(d.day, 11)
|
||||
self.assertEqual(d.hour, 1)
|
||||
self.assertEqual(d.minute, 2)
|
||||
self.assertEqual(d.second, 3)
|
||||
self.assertEqual(d.millisecond, 4)
|
||||
|
||||
|
||||
def test_datetimeParseFormat2(self):
|
||||
d = wx.DateTime()
|
||||
val = d.ParseFormat('2015-10-11', '%Y-%m-%d')
|
||||
self.assertEqual(val, 10)
|
||||
self.assertEqual(d.year, 2015)
|
||||
self.assertEqual(d.month, wx.DateTime.Oct)
|
||||
self.assertEqual(d.day, 11)
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
#---------------------------------------------------------------------------
|
||||
|
||||
|
||||
|
||||
Reference in New Issue
Block a user