diff --git a/xfa/fwl/BUILD.gn b/xfa/fwl/BUILD.gn
index 8b094ad..7529f9c 100644
--- a/xfa/fwl/BUILD.gn
+++ b/xfa/fwl/BUILD.gn
@@ -125,6 +125,9 @@
 
 pdfium_embeddertest_source_set("embeddertests") {
   sources = [ "cfwl_edit_embeddertest.cpp" ]
-  deps = [ "../../fxjs:gc" ]
+  deps = [
+    ":fwl",
+    "../../fxjs:gc",
+  ]
   pdfium_root_dir = "../../"
 }
diff --git a/xfa/fwl/cfwl_edit_embeddertest.cpp b/xfa/fwl/cfwl_edit_embeddertest.cpp
index 59254c4..a409610 100644
--- a/xfa/fwl/cfwl_edit_embeddertest.cpp
+++ b/xfa/fwl/cfwl_edit_embeddertest.cpp
@@ -2,10 +2,16 @@
 // Use of this source code is governed by a BSD-style license that can be
 // found in the LICENSE file.
 
+#include "xfa/fwl/cfwl_edit.h"
+
+#include <memory>
+
 #include "core/fxcrt/widestring.h"
+#include "public/fpdf_ext.h"
 #include "public/fpdf_formfill.h"
 #include "public/fpdf_fwlevent.h"
 #include "testing/embedder_test.h"
+#include "testing/embedder_test_environment.h"
 #include "testing/embedder_test_timer_handling_delegate.h"
 #include "testing/gtest/include/gtest/gtest.h"
 #include "testing/xfa_js_embedder_test.h"
@@ -22,9 +28,15 @@
   void SetUp() override {
     EmbedderTest::SetUp();
     SetDelegate(&delegate_);
+
+    // Arbitrary, picked nice even number, 2020-09-13 12:26:40.
+    FSDK_SetTimeFunction([]() -> time_t { return 1600000000; });
+    FSDK_SetLocaltimeFunction([](const time_t* t) { return gmtime(t); });
   }
 
   void TearDown() override {
+    FSDK_SetTimeFunction(nullptr);
+    FSDK_SetLocaltimeFunction(nullptr);
     UnloadPage(page());
     EmbedderTest::TearDown();
   }
@@ -206,13 +218,39 @@
 #endif
 TEST_F(CFWLEditEmbedderTest, MAYBE_DateTimePickerTest) {
   CreateAndInitializeFormPDF("xfa/xfa_date_time_edit.pdf");
-  FORM_OnLButtonDown(form_handle(), page(), 0, 115, 58);
 
-  const char kFilledMD5[] = "1036b8837a9dba75c6bd8f9347ae2eb2";
+  // Give focus to date time widget, creating down-arrow button.
+  FORM_OnLButtonDown(form_handle(), page(), 0, 115, 58);
+  FORM_OnLButtonUp(form_handle(), page(), 0, 115, 58);
+  const char kSelectedMD5[] = "1036b8837a9dba75c6bd8f9347ae2eb2";
   {
     ScopedFPDFBitmap page_bitmap =
         RenderLoadedPageWithFlags(page(), FPDF_ANNOT);
-    CompareBitmap(page_bitmap.get(), 612, 792, kFilledMD5);
+    CompareBitmap(page_bitmap.get(), 612, 792, kSelectedMD5);
+  }
+
+  // Click down-arrow button, bringing up calendar widget.
+  FORM_OnLButtonDown(form_handle(), page(), 0, 446, 54);
+  FORM_OnLButtonUp(form_handle(), page(), 0, 446, 54);
+  {
+    ScopedFPDFBitmap page_bitmap =
+        RenderLoadedPageWithFlags(page(), FPDF_ANNOT);
+
+    // TODO(tsepez): hermetic fonts.
+    // const char kCalendarOpenMD5[] = "02de64e7e83c82c1ef0ae484d671a51d";
+    // CompareBitmap(page_bitmap.get(), 612, 792, kCalendarOpenMD5);
+  }
+
+  // Click on date on calendar, putting result into field as text.
+  FORM_OnLButtonDown(form_handle(), page(), 0, 100, 162);
+  FORM_OnLButtonUp(form_handle(), page(), 0, 100, 162);
+  {
+    ScopedFPDFBitmap page_bitmap =
+        RenderLoadedPageWithFlags(page(), FPDF_ANNOT);
+
+    // TODO(tsepez): hermetic fonts.
+    // const char kFilledMD5[] = "1bce66c11f1c87b8d639ce0076ac36d3";
+    // CompareBitmap(page_bitmap.get(), 612, 792, kFilledMD5);
   }
 }
 
