aboutsummaryrefslogtreecommitdiff
path: root/src/bun.js/bindings/JSMockFunction.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/bun.js/bindings/JSMockFunction.cpp')
-rw-r--r--src/bun.js/bindings/JSMockFunction.cpp24
1 files changed, 24 insertions, 0 deletions
diff --git a/src/bun.js/bindings/JSMockFunction.cpp b/src/bun.js/bindings/JSMockFunction.cpp
index 33922c2b7..0e24e761c 100644
--- a/src/bun.js/bindings/JSMockFunction.cpp
+++ b/src/bun.js/bindings/JSMockFunction.cpp
@@ -19,6 +19,7 @@
#include <JavaScriptCore/WeakMapImpl.h>
#include <JavaScriptCore/WeakMapImplInlines.h>
#include <JavaScriptCore/FunctionPrototype.h>
+#include <JavaScriptCore/DateInstance.h>
namespace Bun {
@@ -65,6 +66,29 @@ JSC_DECLARE_HOST_FUNCTION(jsMockFunctionMockRejectedValueOnce);
JSC_DECLARE_HOST_FUNCTION(jsMockFunctionWithImplementationCleanup);
JSC_DECLARE_HOST_FUNCTION(jsMockFunctionWithImplementation);
+extern "C" EncodedJSValue JSMock__jsNow(JSC::JSGlobalObject* globalObject, JSC::CallFrame* callFrame)
+{
+ return JSValue::encode(jsNumber(globalObject->jsDateNow()));
+}
+extern "C" EncodedJSValue JSMock__jsSetSystemTime(JSC::JSGlobalObject* globalObject, JSC::CallFrame* callFrame)
+{
+ JSValue argument0 = callFrame->argument(0);
+
+ if (auto* dateInstance = jsDynamicCast<DateInstance*>(argument0)) {
+ if (std::isnormal(dateInstance->internalNumber())) {
+ globalObject->overridenDateNow = dateInstance->internalNumber();
+ }
+ return JSValue::encode(callFrame->thisValue());
+ }
+
+ if (argument0.isNumber() && argument0.asNumber() > 0) {
+ globalObject->overridenDateNow = argument0.asNumber();
+ }
+
+ globalObject->overridenDateNow = -1;
+ return JSValue::encode(callFrame->thisValue());
+}
+
uint64_t JSMockModule::s_nextInvocationId = 0;
// This is taken from JSWeakSet