Skip to content

Commit 81ddbfe

Browse files
committed
Implement ForeignTime methods
1 parent f3bc2ad commit 81ddbfe

File tree

4 files changed

+429
-1
lines changed

4 files changed

+429
-1
lines changed

graalpython/com.oracle.graal.python.test/src/tests/test_interop.py

Lines changed: 25 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -242,6 +242,31 @@ def test_foreign_date_behavior(self):
242242
self.assertEqual(d - datetime.date(2025, 3, 20), datetime.timedelta(days=3))
243243
self.assertEqual(d - LocalDate.of(2025, 3, 20), datetime.timedelta(days=3))
244244

245+
def test_foreign_time_behavior(self):
246+
import datetime
247+
import java
248+
249+
LocalTime = java.type("java.time.LocalTime")
250+
251+
t = LocalTime.of(7, 8, 9)
252+
self.assertEqual(t.hour, 7)
253+
self.assertEqual(t.minute, 8)
254+
self.assertEqual(t.second, 9)
255+
self.assertEqual(t.microsecond, 0)
256+
self.assertEqual(str(t), "07:08:09")
257+
self.assertEqual(t.isoformat(), "07:08:09")
258+
self.assertEqual(t.strftime("%H:%M:%S"), "07:08:09")
259+
self.assertEqual(format(t, "%H:%M:%S"), "07:08:09")
260+
self.assertEqual(hash(t), hash(datetime.time(7, 8, 9)))
261+
self.assertEqual(t, datetime.time(7, 8, 9))
262+
self.assertEqual(t, LocalTime.of(7, 8, 9))
263+
self.assertEqual(t.replace(second=10), datetime.time(7, 8, 10))
264+
self.assertLess(t, datetime.time(7, 8, 10))
265+
self.assertIsNone(t.tzinfo)
266+
self.assertIsNone(t.utcoffset())
267+
self.assertIsNone(t.dst())
268+
self.assertIsNone(t.tzname())
269+
245270
def test_read(self):
246271
o = CustomObject()
247272
assert polyglot.__read__(o, "field") == o.field

graalpython/com.oracle.graal.python/src/com/oracle/graal/python/builtins/Python3Core.java

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -269,6 +269,7 @@
269269
import com.oracle.graal.python.builtins.objects.foreign.ForeignIterableBuiltins;
270270
import com.oracle.graal.python.builtins.objects.foreign.ForeignNumberBuiltins;
271271
import com.oracle.graal.python.builtins.objects.foreign.ForeignObjectBuiltins;
272+
import com.oracle.graal.python.builtins.objects.foreign.ForeignTimeBuiltins;
272273
import com.oracle.graal.python.builtins.objects.frame.FrameBuiltins;
273274
import com.oracle.graal.python.builtins.objects.function.AbstractFunctionBuiltins;
274275
import com.oracle.graal.python.builtins.objects.function.BuiltinFunctionBuiltins;
@@ -502,6 +503,7 @@ private static PythonBuiltins[] initializeBuiltins(TruffleLanguage.Env env) {
502503
new ForeignNumberBuiltins(),
503504
new ForeignBooleanBuiltins(),
504505
new ForeignDateBuiltins(),
506+
new ForeignTimeBuiltins(),
505507
new ForeignAbstractClassBuiltins(),
506508
new ForeignExecutableBuiltins(),
507509
new ForeignInstantiableBuiltins(),

graalpython/com.oracle.graal.python/src/com/oracle/graal/python/builtins/PythonBuiltinClassType.java

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -187,6 +187,7 @@
187187
import com.oracle.graal.python.builtins.objects.foreign.ForeignIterableBuiltins;
188188
import com.oracle.graal.python.builtins.objects.foreign.ForeignNumberBuiltins;
189189
import com.oracle.graal.python.builtins.objects.foreign.ForeignObjectBuiltins;
190+
import com.oracle.graal.python.builtins.objects.foreign.ForeignTimeBuiltins;
190191
import com.oracle.graal.python.builtins.objects.frame.FrameBuiltins;
191192
import com.oracle.graal.python.builtins.objects.function.AbstractFunctionBuiltins;
192193
import com.oracle.graal.python.builtins.objects.function.FunctionBuiltins;
@@ -844,7 +845,7 @@ It can be called either on the class (e.g. C.f()) or on an instance
844845
ForeignInstantiable("ForeignInstantiable", ForeignObject, newBuilder().publishInModule(J_POLYGLOT).basetype().addDict().slots(ForeignInstantiableBuiltins.SLOTS)),
845846
ForeignIterable("ForeignIterable", ForeignObject, newBuilder().publishInModule(J_POLYGLOT).basetype().addDict().disallowInstantiation().slots(ForeignIterableBuiltins.SLOTS)),
846847
ForeignDate("ForeignDate", PDate, newBuilder().publishInModule(J_POLYGLOT).basetype().addDict().disallowInstantiation().slots(ForeignDateBuiltins.SLOTS)),
847-
ForeignTime("ForeignTime", PTime, newBuilder().publishInModule(J_POLYGLOT).basetype().addDict().disallowInstantiation()),
848+
ForeignTime("ForeignTime", PTime, newBuilder().publishInModule(J_POLYGLOT).basetype().addDict().disallowInstantiation().slots(ForeignTimeBuiltins.SLOTS)),
848849
ForeignDateTime("ForeignDateTime", PDateTime, newBuilder().publishInModule(J_POLYGLOT).basetype().addDict().disallowInstantiation()),
849850
ForeignTimeZone("ForeignTimeZone", PTzInfo, newBuilder().publishInModule(J_POLYGLOT).basetype().addDict().disallowInstantiation()),
850851

0 commit comments

Comments
 (0)