Skip to content

Commit 33658a8

Browse files
committed
convert Temporal.PlainDateTime asTime() and asDate(), and test
1 parent 6d03e02 commit 33658a8

File tree

2 files changed

+55
-4
lines changed

2 files changed

+55
-4
lines changed

graal-js/src/com.oracle.truffle.js.test/src/com/oracle/truffle/js/test/interop/TemporalInteropToJavaTest.java

Lines changed: 21 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -125,13 +125,30 @@ public void testPlainTime() {
125125
Assert.assertEquals(34, lt.getMinute());
126126
Assert.assertEquals(56, lt.getSecond());
127127
Assert.assertEquals(987_654_321L, lt.getNano());
128+
129+
Assert.assertFalse(val.isDate());
130+
Assert.assertFalse(val.isTimeZone());
128131
}
129132
}
130133

131-
// TODO
132-
// @Test
133-
// public void testPlainDateTime() {
134-
// }
134+
@Test
135+
public void testPlainDateTime() {
136+
try (Context ctx = getJSContext()) {
137+
Value val = ctx.eval(ID, "new Temporal.PlainDateTime(1982, 11, 26, 12, 34, 56, 987, 654, 321);");
138+
LocalDate ld = val.asDate();
139+
Assert.assertEquals(1982, ld.getYear());
140+
Assert.assertEquals(Month.NOVEMBER, ld.getMonth());
141+
Assert.assertEquals(26, ld.getDayOfMonth());
142+
143+
LocalTime lt = val.asTime();
144+
Assert.assertEquals(12, lt.getHour());
145+
Assert.assertEquals(34, lt.getMinute());
146+
Assert.assertEquals(56, lt.getSecond());
147+
Assert.assertEquals(987_654_321L, lt.getNano());
148+
149+
Assert.assertFalse(val.isTimeZone());
150+
}
151+
}
135152

136153
// TODO
137154
// @Test

graal-js/src/com.oracle.truffle.js/src/com/oracle/truffle/js/runtime/builtins/temporal/JSTemporalPlainDateTimeObject.java

Lines changed: 34 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -40,10 +40,18 @@
4040
*/
4141
package com.oracle.truffle.js.runtime.builtins.temporal;
4242

43+
import com.oracle.truffle.api.CompilerDirectives.TruffleBoundary;
44+
import com.oracle.truffle.api.interop.InteropLibrary;
45+
import com.oracle.truffle.api.library.ExportLibrary;
46+
import com.oracle.truffle.api.library.ExportMessage;
4347
import com.oracle.truffle.api.object.Shape;
4448
import com.oracle.truffle.js.runtime.objects.JSDynamicObject;
4549
import com.oracle.truffle.js.runtime.objects.JSNonProxyObject;
4650

51+
import java.time.LocalDate;
52+
import java.time.LocalTime;
53+
54+
@ExportLibrary(InteropLibrary.class)
4755
public class JSTemporalPlainDateTimeObject extends JSNonProxyObject implements TemporalMonth, TemporalYear, TemporalDay, TemporalCalendar {
4856

4957
// from time
@@ -118,4 +126,30 @@ public int getDay() {
118126
public JSDynamicObject getCalendar() {
119127
return calendar;
120128
}
129+
130+
@ExportMessage
131+
@SuppressWarnings("static-method")
132+
final boolean isTime() {
133+
return true;
134+
}
135+
136+
@ExportMessage
137+
@TruffleBoundary
138+
final LocalTime asTime() {
139+
int ns = milliseconds * 1_000_000 + microseconds * 1_000 + nanoseconds;
140+
LocalTime lt = LocalTime.of(hours, minutes, seconds, ns);
141+
return lt;
142+
}
143+
144+
@ExportMessage
145+
@SuppressWarnings("static-method")
146+
final boolean isDate() {
147+
return true;
148+
}
149+
150+
@ExportMessage
151+
final LocalDate asDate() {
152+
LocalDate ld = LocalDate.of(year, month, day);
153+
return ld;
154+
}
121155
}

0 commit comments

Comments
 (0)