feat(clock): add java.time.Instant overloads to the Clock API by yury-s · Pull Request #1937 · microsoft/playwright-java · GitHub
Skip to content
Closed
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
74 changes: 74 additions & 0 deletions playwright/src/main/java/com/microsoft/playwright/Clock.java
Original file line number Diff line number Diff line change
Expand Up @@ -3,6 +3,7 @@
import com.google.gson.JsonObject;
import com.microsoft.playwright.Clock;

import java.time.Instant;
import java.util.Date;

import static com.microsoft.playwright.impl.ChannelOwner.NO_TIMEOUT;
Expand Down Expand Up @@ -72,9 +73,12 @@ public void pauseAt(String time) {

@Override
public void pauseAt(Date time) {
JsonObject params = new JsonObject();
params.addProperty("timeNumber", time.getTime());
sendMessageWithLogging("pauseAt", params);
pauseAt(time.getTime());
}

@Override
public void pauseAt(Instant time) {
pauseAt(time.toEpochMilli());
}

@Override
Expand All @@ -98,9 +102,12 @@ public void setFixedTime(String time) {

@Override
public void setFixedTime(Date time) {
JsonObject params = new JsonObject();
params.addProperty("timeNumber", time.getTime());
sendMessageWithLogging("setFixedTime", params);
setFixedTime(time.getTime());
}

@Override
public void setFixedTime(Instant time) {
setFixedTime(time.toEpochMilli());
}

@Override
Expand All @@ -119,16 +126,21 @@ public void setSystemTime(String time) {

@Override
public void setSystemTime(Date time) {
JsonObject params = new JsonObject();
params.addProperty("timeNumber", time.getTime());
sendMessageWithLogging("setSystemTime", params);
setSystemTime(time.getTime());
}

@Override
public void setSystemTime(Instant time) {
setSystemTime(time.toEpochMilli());
}

private static void parseTime(Object time, JsonObject params) {
if (time instanceof Long) {
params.addProperty("timeNumber", (Long) time);
} else if (time instanceof Date) {
params.addProperty("timeNumber", ((Date) time).getTime());
} else if (time instanceof Instant) {
params.addProperty("timeNumber", ((Instant) time).toEpochMilli());
} else if (time instanceof String) {
params.addProperty("timeString", (String) time);
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -9,6 +9,9 @@
import java.io.Writer;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.time.Instant;
import java.time.LocalDateTime;
import java.time.ZoneOffset;
import java.util.ArrayList;
import java.util.Date;

Expand Down Expand Up @@ -350,6 +353,25 @@ void setFixedTimeAllowsInstallingFakeTimersAfterSettingTime(Page page) {
assertEquals(200, ((Object[]) calls.get(0))[0]);
}

@Test
void acceptsInstant(Page page) {
// A LocalDateTime has no time zone, so convert it to an Instant at an explicit offset.
page.clock().install(new Clock.InstallOptions().setTime(
LocalDateTime.of(2024, 12, 10, 8, 0, 0).toInstant(ZoneOffset.UTC)));

Instant paused = LocalDateTime.of(2024, 12, 10, 10, 0, 0).toInstant(ZoneOffset.UTC);
page.clock().pauseAt(paused);
assertEquals(paused.toEpochMilli(), ((Number) page.evaluate("() => Date.now()")).longValue());

Instant system = LocalDateTime.of(2024, 12, 10, 12, 0, 0).toInstant(ZoneOffset.UTC);
page.clock().setSystemTime(system);
assertEquals(system.toEpochMilli(), ((Number) page.evaluate("() => Date.now()")).longValue());

Instant fixed = LocalDateTime.of(2024, 12, 10, 14, 0, 0).toInstant(ZoneOffset.UTC);
page.clock().setFixedTime(fixed);
assertEquals(fixed.toEpochMilli(), ((Number) page.evaluate("() => Date.now()")).longValue());
}

@Test
void whileRunningShouldProgressTime(Page page) {
page.clock().install(new Clock.InstallOptions().setTime(0));
Expand Down
Loading