Skip to content

Commit 508db2e

Browse files
committed
Add TimeDelta and DateTime tests
1 parent 56a4bcf commit 508db2e

File tree

3 files changed

+65
-0
lines changed

3 files changed

+65
-0
lines changed

src/embed_tests/TestConverter.cs

Lines changed: 26 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -58,6 +58,32 @@ public void ConvertPyListToArray()
5858
Assert.AreEqual(result, array);
5959
}
6060

61+
[Test]
62+
public void ConvertTimeSpanRoundTrip()
63+
{
64+
var timespan = new TimeSpan(0, 1, 0, 0);
65+
var pyTimedelta = timespan.ToPython();
66+
67+
object result;
68+
var converted = Converter.ToManaged(pyTimedelta.Handle, typeof(TimeSpan), out result, false);
69+
70+
Assert.IsTrue(converted);
71+
Assert.AreEqual(result, timespan);
72+
}
73+
74+
[Test]
75+
public void ConvertDateTimeRoundTrip()
76+
{
77+
var datetime = new DateTime(2000, 1, 1);
78+
var pyDatetime = datetime.ToPython();
79+
80+
object result;
81+
var converted = Converter.ToManaged(pyDatetime.Handle, typeof(DateTime), out result, false);
82+
83+
Assert.IsTrue(converted);
84+
Assert.AreEqual(result, datetime);
85+
}
86+
6187
[Test]
6288
public void TestConvertSingleToManaged(
6389
[Values(float.PositiveInfinity, float.NegativeInfinity, float.MinValue, float.MaxValue, float.NaN,

src/testing/conversiontest.cs

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,5 @@
1+
using System;
2+
13
namespace Python.Test
24
{
35
using System.Collections.Generic;
@@ -31,6 +33,8 @@ public ConversionTest()
3133
public ShortEnum EnumField;
3234
public object ObjectField = null;
3335
public ISpam SpamField;
36+
public DateTime DateTimeField;
37+
public TimeSpan TimeSpanField;
3438

3539
public byte[] ByteArrayField;
3640
public sbyte[] SByteArrayField;

tests/test_conversion.py

Lines changed: 35 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -507,6 +507,39 @@ def test_decimal_conversion():
507507
with pytest.raises(TypeError):
508508
ConversionTest().DecimalField = 1
509509

510+
def test_timedelta_conversion():
511+
import datetime
512+
513+
ob = ConversionTest()
514+
assert type(ob.TimeSpanField) is type(datetime.timedelta(0))
515+
assert ob.TimeSpanField.days == 0
516+
517+
ob.TimeSpanField = datetime.timedelta(days=1)
518+
assert ob.TimeSpanField.days == 1
519+
520+
with pytest.raises(TypeError):
521+
ConversionTest().TimeSpanField = None
522+
523+
with pytest.raises(TypeError):
524+
ConversionTest().TimeSpanField = "spam"
525+
526+
def test_datetime_conversion():
527+
from datetime import datetime
528+
529+
ob = ConversionTest()
530+
assert type(ob.DateTimeField) is type(datetime(1,1,1))
531+
assert ob.DateTimeField.day == 1
532+
533+
ob.DateTimeField = datetime(2000,1,2)
534+
assert ob.DateTimeField.day == 2
535+
assert ob.DateTimeField.month == 1
536+
assert ob.DateTimeField.year == 2000
537+
538+
with pytest.raises(TypeError):
539+
ConversionTest().DateTimeField = None
540+
541+
with pytest.raises(TypeError):
542+
ConversionTest().DateTimeField = "spam"
510543

511544
def test_string_conversion():
512545
"""Test string / unicode conversion."""
@@ -716,3 +749,5 @@ def CanEncode(self, clr_type):
716749
l = ob.ListField
717750
l.Add(42)
718751
assert ob.ListField.Count == 1
752+
753+

0 commit comments

Comments
 (0)