diff --git a/test-app/runtime/src/main/cpp/console/Console.cpp b/test-app/runtime/src/main/cpp/console/Console.cpp index 9886b41ed..4c2c18a0e 100644 --- a/test-app/runtime/src/main/cpp/console/Console.cpp +++ b/test-app/runtime/src/main/cpp/console/Console.cpp @@ -72,6 +72,21 @@ void Console::sendToDevToolsFrontEnd(v8::Isolate* isolate, const std::string& me v8_inspector::V8LogAgentImpl::EntryAdded(message, logLevel, ArgConverter::ConvertToString(frame->GetScriptNameOrSourceURL()), frame->GetLineNumber()); } +const v8::Local transformJSObject(v8::Isolate* isolate, v8::Local object) { + auto objToString = object->ToString(isolate); + v8::Local resultString; + + auto hasCustomToStringImplementation = !objToString->SameValue(ArgConverter::ConvertToV8String(isolate, "[object Object]")); + + if (hasCustomToStringImplementation) { + resultString = objToString; + } else { + resultString = JsonStringifyObject(isolate, object); + } + + return resultString; +} + const std::string buildLogString(const v8::FunctionCallbackInfo& info, int startingIndex = 0) { auto isolate = info.GetIsolate(); @@ -87,7 +102,8 @@ const std::string buildLogString(const v8::FunctionCallbackInfo& info info[i]->ToDetailString(isolate->GetCurrentContext()).ToLocal(&argString); } else if (info[i]->IsObject()) { v8::Local obj = info[i].As(); - argString = JsonStringifyObject(isolate, obj); + + argString = transformJSObject(isolate, obj); } else { info[i]->ToDetailString(isolate->GetCurrentContext()).ToLocal(&argString); } @@ -188,7 +204,9 @@ void Console::dirCallback(const v8::FunctionCallbackInfo& info) { if (propIsFunction) { ss << "()"; } else if (propertyValue->IsObject()) { - std::string jsonStringifiedObject = ArgConverter::ConvertToString(JsonStringifyObject(isolate, propertyValue)); + auto obj = propertyValue->ToObject(isolate); + auto objString = transformJSObject(isolate, obj); + std::string jsonStringifiedObject = ArgConverter::ConvertToString(objString); // if object prints out as the error string for circular references, replace with #CR instead for brevity if (jsonStringifiedObject.find("circular structure") != std::string::npos) { jsonStringifiedObject = "#CR";