v8::HandleScope handleScope;
QString result;
+ QV8Engine *engine = V8ENGINE();
for (int i = 0; i < args.Length(); ++i) {
if (i != 0)
result.append(QLatin1Char(' '));
v8::Local<v8::Value> value = args[i];
- //Check for Object Type
- if (value->IsObject() && !value->IsFunction()
- && !value->IsArray() && !value->IsDate()
- && !value->IsRegExp()) {
- result.append(QLatin1String("Object"));
- } else {
- v8::Local<v8::String> jsstr = value->ToString();
- QString tmp = V8ENGINE()->toString(jsstr);
- if (value->IsArray())
- result.append(QString::fromLatin1("[%1]").arg(tmp));
- else
- result.append(tmp);
+
+ v8::TryCatch tryCatch;
+ v8::Local<v8::String> toString = value->ToString();
+ if (tryCatch.HasCaught()) {
+ // toString() threw Exception
+ // Is it possible for value to be anything other than Object?
+ QString str;
+ if (value->IsObject()) {
+ str = QStringLiteral("[object Object]");
+ } else {
+ toString = tryCatch.Exception()->ToString();
+ str = QStringLiteral("toString() threw exception: %1")
+ .arg(engine->toString(toString));
+ }
+ result.append(str);
+ continue;
}
+
+ QString tmp = engine->toString(toString);
+ if (value->IsArray())
+ result.append(QStringLiteral("[%1]").arg(tmp));
+ else
+ result.append(tmp);
}
if (printStack) {
QTest::ignoreMessage(QtDebugMsg, ": 2");
QTest::ignoreMessage(QtDebugMsg, "[1,2]");
- QTest::ignoreMessage(QtDebugMsg, "Object");
+ QTest::ignoreMessage(QtDebugMsg, "{\"a\":\"hello\",\"d\":1}");
QTest::ignoreMessage(QtDebugMsg, "undefined");
QTest::ignoreMessage(QtDebugMsg, "12");
QTest::ignoreMessage(QtDebugMsg, "function () { return 5;}");
QTest::ignoreMessage(QtDebugMsg, "true");
- QTest::ignoreMessage(QtDebugMsg, "Object");
- QTest::ignoreMessage(QtDebugMsg, "Object");
- QTest::ignoreMessage(QtDebugMsg, "1 pong! Object");
- QTest::ignoreMessage(QtDebugMsg, "1 [ping,pong] Object 2");
+ // Printing QML object prints out the class/type of QML object with the memory address
+// QTest::ignoreMessage(QtDebugMsg, "QtObject_QML_0(0xABCD..)");
+ QTest::ignoreMessage(QtDebugMsg, "[object Object]");
+ QTest::ignoreMessage(QtDebugMsg, "1 pong! [object Object]");
+ QTest::ignoreMessage(QtDebugMsg, "1 [ping,pong] [object Object] 2");
QQmlComponent component(&engine, testUrl);
QObject *object = component.create();