mirror of
https://github.com/HifiExperiments/overte.git
synced 2025-05-05 19:58:15 +02:00
Merge pull request #10676 from NeetBhagat/21369
WL 21369 - Implement parts of the JS "console" object
This commit is contained in:
commit
cbded766b1
13 changed files with 400 additions and 6 deletions
|
@ -66,6 +66,12 @@ Windows.Window {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
function clearDebugWindow() {
|
||||||
|
if (root.dynamicContent && root.dynamicContent.clearWindow) {
|
||||||
|
root.dynamicContent.clearWindow();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
// Handle message traffic from our loaded QML to the script that launched us
|
// Handle message traffic from our loaded QML to the script that launched us
|
||||||
signal sendToScript(var message);
|
signal sendToScript(var message);
|
||||||
onDynamicContentChanged: {
|
onDynamicContentChanged: {
|
||||||
|
|
|
@ -5569,6 +5569,7 @@ void Application::registerScriptEngineWithApplicationServices(ScriptEngine* scri
|
||||||
connect(scriptEngine, &ScriptEngine::errorMessage, DependencyManager::get<ScriptEngines>().data(), &ScriptEngines::onErrorMessage);
|
connect(scriptEngine, &ScriptEngine::errorMessage, DependencyManager::get<ScriptEngines>().data(), &ScriptEngines::onErrorMessage);
|
||||||
connect(scriptEngine, &ScriptEngine::warningMessage, DependencyManager::get<ScriptEngines>().data(), &ScriptEngines::onWarningMessage);
|
connect(scriptEngine, &ScriptEngine::warningMessage, DependencyManager::get<ScriptEngines>().data(), &ScriptEngines::onWarningMessage);
|
||||||
connect(scriptEngine, &ScriptEngine::infoMessage, DependencyManager::get<ScriptEngines>().data(), &ScriptEngines::onInfoMessage);
|
connect(scriptEngine, &ScriptEngine::infoMessage, DependencyManager::get<ScriptEngines>().data(), &ScriptEngines::onInfoMessage);
|
||||||
|
connect(scriptEngine, &ScriptEngine::clearDebugWindow, DependencyManager::get<ScriptEngines>().data(), &ScriptEngines::onClearDebugWindow);
|
||||||
}
|
}
|
||||||
|
|
||||||
bool Application::canAcceptURL(const QString& urlString) const {
|
bool Application::canAcceptURL(const QString& urlString) const {
|
||||||
|
|
182
libraries/script-engine/src/ConsoleScriptingInterface.cpp
Normal file
182
libraries/script-engine/src/ConsoleScriptingInterface.cpp
Normal file
|
@ -0,0 +1,182 @@
|
||||||
|
//
|
||||||
|
// ConsoleScriptingInterface.cpp
|
||||||
|
// libraries/script-engine/src
|
||||||
|
//
|
||||||
|
// Created by NeetBhagat on 6/1/17.
|
||||||
|
// Copyright 2014 High Fidelity, Inc.
|
||||||
|
//
|
||||||
|
// ConsoleScriptingInterface is responsible for following functionality
|
||||||
|
// Printing logs with various tags and grouping on debug Window and Logs/log file.
|
||||||
|
// Debugging functionalities like Timer start-end, assertion, trace.
|
||||||
|
// To use these functionalities, use "console" object in Javascript files.
|
||||||
|
// For examples please refer "scripts/developer/tests/consoleObjectTest.js"
|
||||||
|
//
|
||||||
|
// Distributed under the Apache License, Version 2.0.
|
||||||
|
// See the accompanying file LICENSE or http://www.apache.org/licenses/LICENSE-2.0.html
|
||||||
|
//
|
||||||
|
|
||||||
|
#include "ConsoleScriptingInterface.h"
|
||||||
|
#include "ScriptEngine.h"
|
||||||
|
|
||||||
|
#define INDENTATION 4 // 1 Tab - 4 spaces
|
||||||
|
const QString LINE_SEPARATOR = "\n ";
|
||||||
|
const QString SPACE_SEPARATOR = " ";
|
||||||
|
const QString STACK_TRACE_FORMAT = "\n[Stacktrace]%1%2";
|
||||||
|
QList<QString> ConsoleScriptingInterface::_groupDetails = QList<QString>();
|
||||||
|
|
||||||
|
QScriptValue ConsoleScriptingInterface::info(QScriptContext* context, QScriptEngine* engine) {
|
||||||
|
if (ScriptEngine* scriptEngine = qobject_cast<ScriptEngine*>(engine)) {
|
||||||
|
scriptEngine->scriptInfoMessage(appendArguments(context));
|
||||||
|
}
|
||||||
|
return QScriptValue::NullValue;
|
||||||
|
}
|
||||||
|
|
||||||
|
QScriptValue ConsoleScriptingInterface::log(QScriptContext* context, QScriptEngine* engine) {
|
||||||
|
QString message = appendArguments(context);
|
||||||
|
if (_groupDetails.count() == 0) {
|
||||||
|
if (ScriptEngine* scriptEngine = qobject_cast<ScriptEngine*>(engine)) {
|
||||||
|
scriptEngine->scriptPrintedMessage(message);
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
logGroupMessage(message, engine);
|
||||||
|
}
|
||||||
|
return QScriptValue::NullValue;
|
||||||
|
}
|
||||||
|
|
||||||
|
QScriptValue ConsoleScriptingInterface::debug(QScriptContext* context, QScriptEngine* engine) {
|
||||||
|
if (ScriptEngine* scriptEngine = qobject_cast<ScriptEngine*>(engine)) {
|
||||||
|
scriptEngine->scriptPrintedMessage(appendArguments(context));
|
||||||
|
}
|
||||||
|
return QScriptValue::NullValue;
|
||||||
|
}
|
||||||
|
|
||||||
|
QScriptValue ConsoleScriptingInterface::warn(QScriptContext* context, QScriptEngine* engine) {
|
||||||
|
if (ScriptEngine* scriptEngine = qobject_cast<ScriptEngine*>(engine)) {
|
||||||
|
scriptEngine->scriptWarningMessage(appendArguments(context));
|
||||||
|
}
|
||||||
|
return QScriptValue::NullValue;
|
||||||
|
}
|
||||||
|
|
||||||
|
QScriptValue ConsoleScriptingInterface::error(QScriptContext* context, QScriptEngine* engine) {
|
||||||
|
if (ScriptEngine* scriptEngine = qobject_cast<ScriptEngine*>(engine)) {
|
||||||
|
scriptEngine->scriptErrorMessage(appendArguments(context));
|
||||||
|
}
|
||||||
|
return QScriptValue::NullValue;
|
||||||
|
}
|
||||||
|
|
||||||
|
QScriptValue ConsoleScriptingInterface::exception(QScriptContext* context, QScriptEngine* engine) {
|
||||||
|
if (ScriptEngine* scriptEngine = qobject_cast<ScriptEngine*>(engine)) {
|
||||||
|
scriptEngine->scriptErrorMessage(appendArguments(context));
|
||||||
|
}
|
||||||
|
return QScriptValue::NullValue;
|
||||||
|
}
|
||||||
|
|
||||||
|
void ConsoleScriptingInterface::time(QString labelName) {
|
||||||
|
_timerDetails.insert(labelName, QDateTime::currentDateTime().toUTC());
|
||||||
|
QString message = QString("%1: Timer started").arg(labelName);
|
||||||
|
if (ScriptEngine* scriptEngine = qobject_cast<ScriptEngine*>(engine())) {
|
||||||
|
scriptEngine->scriptPrintedMessage(message);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
void ConsoleScriptingInterface::timeEnd(QString labelName) {
|
||||||
|
if (ScriptEngine* scriptEngine = qobject_cast<ScriptEngine*>(engine())) {
|
||||||
|
if (!_timerDetails.contains(labelName)) {
|
||||||
|
scriptEngine->scriptErrorMessage("No such label found " + labelName);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (_timerDetails.value(labelName).isNull()) {
|
||||||
|
_timerDetails.remove(labelName);
|
||||||
|
scriptEngine->scriptErrorMessage("Invalid start time for " + labelName);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
QDateTime _startTime = _timerDetails.value(labelName);
|
||||||
|
QDateTime _endTime = QDateTime::currentDateTime().toUTC();
|
||||||
|
qint64 diffInMS = _startTime.msecsTo(_endTime);
|
||||||
|
|
||||||
|
QString message = QString("%1: %2ms").arg(labelName).arg(QString::number(diffInMS));
|
||||||
|
_timerDetails.remove(labelName);
|
||||||
|
|
||||||
|
scriptEngine->scriptPrintedMessage(message);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
QScriptValue ConsoleScriptingInterface::assertion(QScriptContext* context, QScriptEngine* engine) {
|
||||||
|
QString message;
|
||||||
|
bool condition = false;
|
||||||
|
for (int i = 0; i < context->argumentCount(); i++) {
|
||||||
|
if (i == 0) {
|
||||||
|
condition = context->argument(i).toBool(); // accept first value as condition
|
||||||
|
} else {
|
||||||
|
message += SPACE_SEPARATOR + context->argument(i).toString(); // accept other parameters as message
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
QString assertionResult;
|
||||||
|
if (!condition) {
|
||||||
|
if (message.isEmpty()) {
|
||||||
|
assertionResult = "Assertion failed";
|
||||||
|
} else {
|
||||||
|
assertionResult = QString("Assertion failed : %1").arg(message);
|
||||||
|
}
|
||||||
|
if (ScriptEngine* scriptEngine = qobject_cast<ScriptEngine*>(engine)) {
|
||||||
|
scriptEngine->scriptErrorMessage(assertionResult);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return QScriptValue::NullValue;
|
||||||
|
}
|
||||||
|
|
||||||
|
void ConsoleScriptingInterface::trace() {
|
||||||
|
if (ScriptEngine* scriptEngine = qobject_cast<ScriptEngine*>(engine())) {
|
||||||
|
scriptEngine->scriptPrintedMessage
|
||||||
|
(QString(STACK_TRACE_FORMAT).arg(LINE_SEPARATOR,
|
||||||
|
scriptEngine->currentContext()->backtrace().join(LINE_SEPARATOR)));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
void ConsoleScriptingInterface::clear() {
|
||||||
|
if (ScriptEngine* scriptEngine = qobject_cast<ScriptEngine*>(engine())) {
|
||||||
|
scriptEngine->clearDebugLogWindow();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
QScriptValue ConsoleScriptingInterface::group(QScriptContext* context, QScriptEngine* engine) {
|
||||||
|
logGroupMessage(context->argument(0).toString(), engine); // accept first parameter as label
|
||||||
|
_groupDetails.push_back(context->argument(0).toString());
|
||||||
|
return QScriptValue::NullValue;
|
||||||
|
}
|
||||||
|
|
||||||
|
QScriptValue ConsoleScriptingInterface::groupCollapsed(QScriptContext* context, QScriptEngine* engine) {
|
||||||
|
logGroupMessage(context->argument(0).toString(), engine); // accept first parameter as label
|
||||||
|
_groupDetails.push_back(context->argument(0).toString());
|
||||||
|
return QScriptValue::NullValue;
|
||||||
|
}
|
||||||
|
|
||||||
|
QScriptValue ConsoleScriptingInterface::groupEnd(QScriptContext* context, QScriptEngine* engine) {
|
||||||
|
ConsoleScriptingInterface::_groupDetails.removeLast();
|
||||||
|
return QScriptValue::NullValue;
|
||||||
|
}
|
||||||
|
|
||||||
|
QString ConsoleScriptingInterface::appendArguments(QScriptContext* context) {
|
||||||
|
QString message;
|
||||||
|
for (int i = 0; i < context->argumentCount(); i++) {
|
||||||
|
if (i > 0) {
|
||||||
|
message += SPACE_SEPARATOR;
|
||||||
|
}
|
||||||
|
message += context->argument(i).toString();
|
||||||
|
}
|
||||||
|
return message;
|
||||||
|
}
|
||||||
|
|
||||||
|
void ConsoleScriptingInterface::logGroupMessage(QString message, QScriptEngine* engine) {
|
||||||
|
int _addSpaces = _groupDetails.count() * INDENTATION;
|
||||||
|
QString logMessage;
|
||||||
|
for (int i = 0; i < _addSpaces; i++) {
|
||||||
|
logMessage.append(SPACE_SEPARATOR);
|
||||||
|
}
|
||||||
|
logMessage.append(message);
|
||||||
|
if (ScriptEngine* scriptEngine = qobject_cast<ScriptEngine*>(engine)) {
|
||||||
|
scriptEngine->scriptPrintedMessage(logMessage);
|
||||||
|
}
|
||||||
|
}
|
56
libraries/script-engine/src/ConsoleScriptingInterface.h
Normal file
56
libraries/script-engine/src/ConsoleScriptingInterface.h
Normal file
|
@ -0,0 +1,56 @@
|
||||||
|
//
|
||||||
|
// ConsoleScriptingInterface.h
|
||||||
|
// libraries/script-engine/src
|
||||||
|
//
|
||||||
|
// Created by NeetBhagat on 6/1/17.
|
||||||
|
// Copyright 2014 High Fidelity, Inc.
|
||||||
|
//
|
||||||
|
// ConsoleScriptingInterface is responsible for following functionality
|
||||||
|
// Printing logs with various tags and grouping on debug Window and Logs/log file.
|
||||||
|
// Debugging functionalities like Timer start-end, assertion, trace.
|
||||||
|
// To use these functionalities, use "console" object in Javascript files.
|
||||||
|
// For examples please refer "scripts/developer/tests/consoleObjectTest.js"
|
||||||
|
//
|
||||||
|
// Distributed under the Apache License, Version 2.0.
|
||||||
|
// See the accompanying file LICENSE or http://www.apache.org/licenses/LICENSE-2.0.html
|
||||||
|
//
|
||||||
|
|
||||||
|
#pragma once
|
||||||
|
#ifndef hifi_ConsoleScriptingInterface_h
|
||||||
|
#define hifi_ConsoleScriptingInterface_h
|
||||||
|
|
||||||
|
#include <QtCore/QObject>
|
||||||
|
#include <QtCore/QString>
|
||||||
|
#include <QtScript/QScriptable>
|
||||||
|
#include <QList>
|
||||||
|
#include <QHash>
|
||||||
|
|
||||||
|
// Scriptable interface of "console" object. Used exclusively in the JavaScript API
|
||||||
|
class ConsoleScriptingInterface : public QObject, protected QScriptable {
|
||||||
|
Q_OBJECT
|
||||||
|
public:
|
||||||
|
static QScriptValue info(QScriptContext* context, QScriptEngine* engine);
|
||||||
|
static QScriptValue log(QScriptContext* context, QScriptEngine* engine);
|
||||||
|
static QScriptValue debug(QScriptContext* context, QScriptEngine* engine);
|
||||||
|
static QScriptValue warn(QScriptContext* context, QScriptEngine* engine);
|
||||||
|
static QScriptValue error(QScriptContext* context, QScriptEngine* engine);
|
||||||
|
static QScriptValue exception(QScriptContext* context, QScriptEngine* engine);
|
||||||
|
static QScriptValue assertion(QScriptContext* context, QScriptEngine* engine);
|
||||||
|
static QScriptValue group(QScriptContext* context, QScriptEngine* engine);
|
||||||
|
static QScriptValue groupCollapsed(QScriptContext* context, QScriptEngine* engine);
|
||||||
|
static QScriptValue groupEnd(QScriptContext* context, QScriptEngine* engine);
|
||||||
|
|
||||||
|
public slots:
|
||||||
|
void time(QString labelName);
|
||||||
|
void timeEnd(QString labelName);
|
||||||
|
void trace();
|
||||||
|
void clear();
|
||||||
|
|
||||||
|
private:
|
||||||
|
QHash<QString, QDateTime> _timerDetails;
|
||||||
|
static QList<QString> _groupDetails;
|
||||||
|
static void logGroupMessage(QString message, QScriptEngine* engine);
|
||||||
|
static QString appendArguments(QScriptContext* context);
|
||||||
|
};
|
||||||
|
|
||||||
|
#endif // hifi_ConsoleScriptingInterface_h
|
|
@ -472,20 +472,24 @@ void ScriptEngine::scriptErrorMessage(const QString& message) {
|
||||||
}
|
}
|
||||||
|
|
||||||
void ScriptEngine::scriptWarningMessage(const QString& message) {
|
void ScriptEngine::scriptWarningMessage(const QString& message) {
|
||||||
qCWarning(scriptengine) << message;
|
qCWarning(scriptengine) << qPrintable(message);
|
||||||
emit warningMessage(message, getFilename());
|
emit warningMessage(message, getFilename());
|
||||||
}
|
}
|
||||||
|
|
||||||
void ScriptEngine::scriptInfoMessage(const QString& message) {
|
void ScriptEngine::scriptInfoMessage(const QString& message) {
|
||||||
qCInfo(scriptengine) << message;
|
qCInfo(scriptengine) << qPrintable(message);
|
||||||
emit infoMessage(message, getFilename());
|
emit infoMessage(message, getFilename());
|
||||||
}
|
}
|
||||||
|
|
||||||
void ScriptEngine::scriptPrintedMessage(const QString& message) {
|
void ScriptEngine::scriptPrintedMessage(const QString& message) {
|
||||||
qCDebug(scriptengine) << message;
|
qCDebug(scriptengine) << qPrintable(message);
|
||||||
emit printedMessage(message, getFilename());
|
emit printedMessage(message, getFilename());
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void ScriptEngine::clearDebugLogWindow() {
|
||||||
|
emit clearDebugWindow();
|
||||||
|
}
|
||||||
|
|
||||||
// Even though we never pass AnimVariantMap directly to and from javascript, the queued invokeMethod of
|
// Even though we never pass AnimVariantMap directly to and from javascript, the queued invokeMethod of
|
||||||
// callAnimationStateHandler requires that the type be registered.
|
// callAnimationStateHandler requires that the type be registered.
|
||||||
// These two are meaningful, if we ever do want to use them...
|
// These two are meaningful, if we ever do want to use them...
|
||||||
|
@ -668,8 +672,18 @@ void ScriptEngine::init() {
|
||||||
registerGlobalObject("Mat4", &_mat4Library);
|
registerGlobalObject("Mat4", &_mat4Library);
|
||||||
registerGlobalObject("Uuid", &_uuidLibrary);
|
registerGlobalObject("Uuid", &_uuidLibrary);
|
||||||
registerGlobalObject("Messages", DependencyManager::get<MessagesClient>().data());
|
registerGlobalObject("Messages", DependencyManager::get<MessagesClient>().data());
|
||||||
|
|
||||||
registerGlobalObject("File", new FileScriptingInterface(this));
|
registerGlobalObject("File", new FileScriptingInterface(this));
|
||||||
|
registerGlobalObject("console", &_consoleScriptingInterface);
|
||||||
|
registerFunction("console", "info", ConsoleScriptingInterface::info, currentContext()->argumentCount());
|
||||||
|
registerFunction("console", "log", ConsoleScriptingInterface::log, currentContext()->argumentCount());
|
||||||
|
registerFunction("console", "debug", ConsoleScriptingInterface::debug, currentContext()->argumentCount());
|
||||||
|
registerFunction("console", "warn", ConsoleScriptingInterface::warn, currentContext()->argumentCount());
|
||||||
|
registerFunction("console", "error", ConsoleScriptingInterface::error, currentContext()->argumentCount());
|
||||||
|
registerFunction("console", "exception", ConsoleScriptingInterface::exception, currentContext()->argumentCount());
|
||||||
|
registerFunction("console", "assert", ConsoleScriptingInterface::assertion, currentContext()->argumentCount());
|
||||||
|
registerFunction("console", "group", ConsoleScriptingInterface::group, 1);
|
||||||
|
registerFunction("console", "groupCollapsed", ConsoleScriptingInterface::groupCollapsed, 1);
|
||||||
|
registerFunction("console", "groupEnd", ConsoleScriptingInterface::groupEnd, 0);
|
||||||
|
|
||||||
qScriptRegisterMetaType(this, animVarMapToScriptValue, animVarMapFromScriptValue);
|
qScriptRegisterMetaType(this, animVarMapToScriptValue, animVarMapFromScriptValue);
|
||||||
qScriptRegisterMetaType(this, resultHandlerToScriptValue, resultHandlerFromScriptValue);
|
qScriptRegisterMetaType(this, resultHandlerToScriptValue, resultHandlerFromScriptValue);
|
||||||
|
|
|
@ -41,6 +41,7 @@
|
||||||
#include "ScriptCache.h"
|
#include "ScriptCache.h"
|
||||||
#include "ScriptUUID.h"
|
#include "ScriptUUID.h"
|
||||||
#include "Vec3.h"
|
#include "Vec3.h"
|
||||||
|
#include "ConsoleScriptingInterface.h"
|
||||||
#include "SettingHandle.h"
|
#include "SettingHandle.h"
|
||||||
|
|
||||||
class QScriptEngineDebugger;
|
class QScriptEngineDebugger;
|
||||||
|
@ -225,7 +226,7 @@ public:
|
||||||
void scriptWarningMessage(const QString& message);
|
void scriptWarningMessage(const QString& message);
|
||||||
void scriptInfoMessage(const QString& message);
|
void scriptInfoMessage(const QString& message);
|
||||||
void scriptPrintedMessage(const QString& message);
|
void scriptPrintedMessage(const QString& message);
|
||||||
|
void clearDebugLogWindow();
|
||||||
int getNumRunningEntityScripts() const;
|
int getNumRunningEntityScripts() const;
|
||||||
bool getEntityScriptDetails(const EntityItemID& entityID, EntityScriptDetails &details) const;
|
bool getEntityScriptDetails(const EntityItemID& entityID, EntityScriptDetails &details) const;
|
||||||
|
|
||||||
|
@ -245,6 +246,7 @@ signals:
|
||||||
void warningMessage(const QString& message, const QString& scriptName);
|
void warningMessage(const QString& message, const QString& scriptName);
|
||||||
void infoMessage(const QString& message, const QString& scriptName);
|
void infoMessage(const QString& message, const QString& scriptName);
|
||||||
void runningStateChanged();
|
void runningStateChanged();
|
||||||
|
void clearDebugWindow();
|
||||||
void loadScript(const QString& scriptName, bool isUserLoaded);
|
void loadScript(const QString& scriptName, bool isUserLoaded);
|
||||||
void reloadScript(const QString& scriptName, bool isUserLoaded);
|
void reloadScript(const QString& scriptName, bool isUserLoaded);
|
||||||
void doneRunning();
|
void doneRunning();
|
||||||
|
@ -305,6 +307,7 @@ protected:
|
||||||
Vec3 _vec3Library;
|
Vec3 _vec3Library;
|
||||||
Mat4 _mat4Library;
|
Mat4 _mat4Library;
|
||||||
ScriptUUID _uuidLibrary;
|
ScriptUUID _uuidLibrary;
|
||||||
|
ConsoleScriptingInterface _consoleScriptingInterface;
|
||||||
std::atomic<bool> _isUserLoaded { false };
|
std::atomic<bool> _isUserLoaded { false };
|
||||||
bool _isReloading { false };
|
bool _isReloading { false };
|
||||||
|
|
||||||
|
|
|
@ -54,6 +54,10 @@ void ScriptEngines::onInfoMessage(const QString& message, const QString& scriptN
|
||||||
emit infoMessage(message, scriptName);
|
emit infoMessage(message, scriptName);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void ScriptEngines::onClearDebugWindow() {
|
||||||
|
emit clearDebugWindow();
|
||||||
|
}
|
||||||
|
|
||||||
void ScriptEngines::onErrorLoadingScript(const QString& url) {
|
void ScriptEngines::onErrorLoadingScript(const QString& url) {
|
||||||
emit errorLoadingScript(url);
|
emit errorLoadingScript(url);
|
||||||
}
|
}
|
||||||
|
|
|
@ -79,6 +79,7 @@ signals:
|
||||||
void warningMessage(const QString& message, const QString& engineName);
|
void warningMessage(const QString& message, const QString& engineName);
|
||||||
void infoMessage(const QString& message, const QString& engineName);
|
void infoMessage(const QString& message, const QString& engineName);
|
||||||
void errorLoadingScript(const QString& url);
|
void errorLoadingScript(const QString& url);
|
||||||
|
void clearDebugWindow();
|
||||||
|
|
||||||
public slots:
|
public slots:
|
||||||
void onPrintedMessage(const QString& message, const QString& scriptName);
|
void onPrintedMessage(const QString& message, const QString& scriptName);
|
||||||
|
@ -86,6 +87,7 @@ public slots:
|
||||||
void onWarningMessage(const QString& message, const QString& scriptName);
|
void onWarningMessage(const QString& message, const QString& scriptName);
|
||||||
void onInfoMessage(const QString& message, const QString& scriptName);
|
void onInfoMessage(const QString& message, const QString& scriptName);
|
||||||
void onErrorLoadingScript(const QString& url);
|
void onErrorLoadingScript(const QString& url);
|
||||||
|
void onClearDebugWindow();
|
||||||
|
|
||||||
protected slots:
|
protected slots:
|
||||||
void onScriptFinished(const QString& fileNameString, ScriptEngine* engine);
|
void onScriptFinished(const QString& fileNameString, ScriptEngine* engine);
|
||||||
|
|
|
@ -153,6 +153,9 @@ void QmlWindowClass::sendToQml(const QVariant& message) {
|
||||||
QMetaObject::invokeMethod(asQuickItem(), "fromScript", Qt::QueuedConnection, Q_ARG(QVariant, message));
|
QMetaObject::invokeMethod(asQuickItem(), "fromScript", Qt::QueuedConnection, Q_ARG(QVariant, message));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void QmlWindowClass::clearDebugWindow() {
|
||||||
|
QMetaObject::invokeMethod(asQuickItem(), "clearDebugWindow", Qt::QueuedConnection);
|
||||||
|
}
|
||||||
|
|
||||||
void QmlWindowClass::emitScriptEvent(const QVariant& scriptMessage) {
|
void QmlWindowClass::emitScriptEvent(const QVariant& scriptMessage) {
|
||||||
if (QThread::currentThread() != thread()) {
|
if (QThread::currentThread() != thread()) {
|
||||||
|
|
|
@ -53,6 +53,7 @@ public slots:
|
||||||
|
|
||||||
// Scripts can use this to send a message to the QML object
|
// Scripts can use this to send a message to the QML object
|
||||||
void sendToQml(const QVariant& message);
|
void sendToQml(const QVariant& message);
|
||||||
|
void clearDebugWindow();
|
||||||
|
|
||||||
// QmlWindow content may include WebView requiring EventBridge.
|
// QmlWindow content may include WebView requiring EventBridge.
|
||||||
void emitScriptEvent(const QVariant& scriptMessage);
|
void emitScriptEvent(const QVariant& scriptMessage);
|
||||||
|
|
|
@ -49,4 +49,8 @@ ScriptDiscoveryService.infoMessage.connect(function(message, scriptFileName) {
|
||||||
sendToLogWindow("INFO", message, scriptFileName);
|
sendToLogWindow("INFO", message, scriptFileName);
|
||||||
});
|
});
|
||||||
|
|
||||||
}()); // END LOCAL_SCOPE
|
ScriptDiscoveryService.clearDebugWindow.connect(function() {
|
||||||
|
window.clearDebugWindow();
|
||||||
|
});
|
||||||
|
|
||||||
|
}());
|
||||||
|
|
|
@ -40,6 +40,10 @@ Rectangle {
|
||||||
}
|
}
|
||||||
textArea.append(message);
|
textArea.append(message);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
function clearWindow() {
|
||||||
|
textArea.remove(0,textArea.length);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
114
scripts/developer/tests/consoleObjectTest.js
Normal file
114
scripts/developer/tests/consoleObjectTest.js
Normal file
|
@ -0,0 +1,114 @@
|
||||||
|
// Examples and understanding of console object. Include console methods like
|
||||||
|
// info, log, debug, warn, error, exception, trace, clear, asserts, group, groupCollapsed, groupEnd, time, timeEnd.
|
||||||
|
// Useful in debugging and exclusively made for JavaScript files.
|
||||||
|
// To view the logs click on Developer -> script logs [logs on debug window] and for text file logs go to Logs/log file.
|
||||||
|
|
||||||
|
main();
|
||||||
|
|
||||||
|
function main() {
|
||||||
|
|
||||||
|
var someObject = { str: "Some text", id: 5 };
|
||||||
|
var someValue = 5;
|
||||||
|
|
||||||
|
// console.info examples
|
||||||
|
console.info("[console.info] Hello World.");
|
||||||
|
console.info(5 + 6);
|
||||||
|
console.info(someObject.str);
|
||||||
|
console.info(a = 2 * 6);
|
||||||
|
console.info(someValue);
|
||||||
|
console.info('someObject id ' + someObject.id);
|
||||||
|
console.info('Hello World ', 'someObject.id = ', someObject.id, "a = 2 * 6 = ", a = 2 * 6);
|
||||||
|
|
||||||
|
// console.log examples
|
||||||
|
console.log("[console.log] Hello World");
|
||||||
|
console.log(5 + 6);
|
||||||
|
console.log(someObject.str);
|
||||||
|
console.log(a = 2 * 6);
|
||||||
|
console.log(someValue);
|
||||||
|
console.log('someObject id ' + someObject.id);
|
||||||
|
console.log('Hello World ', 'someObject.id = ', someObject.id, "a = 2 * 6 = ", a = 2 * 6);
|
||||||
|
|
||||||
|
// console.debug examples
|
||||||
|
console.debug("[console.debug] Hello World.");
|
||||||
|
console.debug(5 + 6);
|
||||||
|
console.debug(someObject.str);
|
||||||
|
console.debug(a = 2 * 6);
|
||||||
|
console.debug(someValue);
|
||||||
|
console.debug('someObject id ' + someObject.id);
|
||||||
|
console.debug('Hello World ', 'someObject.id = ', someObject.id, "a = 2 * 6 = ", a = 2 * 6);
|
||||||
|
|
||||||
|
// console.warn examples
|
||||||
|
console.warn("[console.warn] This is warning message.");
|
||||||
|
console.warn(5 + 6);
|
||||||
|
console.warn(someObject.str);
|
||||||
|
console.warn(a = 2 * 6);
|
||||||
|
console.warn(someValue);
|
||||||
|
console.warn('someObject id ' + someObject.id);
|
||||||
|
console.warn('Hello World ', 'someObject.id = ', someObject.id, "a = 2 * 6 = ", a = 2 * 6);
|
||||||
|
|
||||||
|
// console.error examples
|
||||||
|
console.error('An error occurred!');
|
||||||
|
console.error('An error occurred! ', 'Value = ', someValue);
|
||||||
|
console.error('An error occurred! ' + 'Value = ' + someValue);
|
||||||
|
|
||||||
|
// console.exception examples
|
||||||
|
console.exception('An exception occurred!');
|
||||||
|
console.exception('An exception occurred! ', 'Value = ', someValue);
|
||||||
|
console.exception('An exception occurred! ' + 'Value = ' + someValue);
|
||||||
|
|
||||||
|
// console.trace examples
|
||||||
|
function fooA() {
|
||||||
|
function fooB() {
|
||||||
|
function fooC() {
|
||||||
|
console.trace();
|
||||||
|
}
|
||||||
|
fooC();
|
||||||
|
}
|
||||||
|
fooB();
|
||||||
|
}
|
||||||
|
fooA();
|
||||||
|
|
||||||
|
// console.assert() examples
|
||||||
|
var valA = 1, valB = "1";
|
||||||
|
console.assert(valA === valB, "Value A doesn't equal to B");
|
||||||
|
console.assert(valA === valB);
|
||||||
|
console.assert(5 === 5, "5 equals to 5");
|
||||||
|
console.assert(5 === 5);
|
||||||
|
console.assert(5 > 6, "5 is not greater than 6");
|
||||||
|
console.assert(5 > 6, "5 is not greater than 6", "This assertion will fail");
|
||||||
|
|
||||||
|
// console.group() examples.
|
||||||
|
console.group("Group 1");
|
||||||
|
console.log("Sentence 1");
|
||||||
|
console.log("Sentence 2");
|
||||||
|
console.group("Group 2");
|
||||||
|
console.log("Sentence 3");
|
||||||
|
console.log("Sentence 4");
|
||||||
|
console.groupCollapsed("Group 3");
|
||||||
|
console.log("Sentence 5");
|
||||||
|
console.log("Sentence 6");
|
||||||
|
console.groupEnd();
|
||||||
|
console.log("Sentence 7");
|
||||||
|
console.groupEnd();
|
||||||
|
console.log("Sentence 8");
|
||||||
|
console.groupEnd();
|
||||||
|
console.log("Sentence 9");
|
||||||
|
|
||||||
|
// console.time(),console.timeEnd() examples
|
||||||
|
console.time('MyTimer');
|
||||||
|
// Do some process
|
||||||
|
sleep(1000);
|
||||||
|
console.timeEnd('MyTimer');
|
||||||
|
|
||||||
|
// use console.clear() to clean Debug Window logs
|
||||||
|
// console.clear();
|
||||||
|
}
|
||||||
|
|
||||||
|
function sleep(milliseconds) {
|
||||||
|
var start = new Date().getTime();
|
||||||
|
for (var i = 0; i < 1e7; i++) {
|
||||||
|
if ((new Date().getTime() - start) > milliseconds){
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
Loading…
Reference in a new issue