mirror of
https://github.com/overte-org/overte.git
synced 2025-04-08 21:33:00 +02:00
Resolve comments of @zappoman.
-- Rename "asserts" to "assert" -- Log printing methods will accept lists of objects or strings.
This commit is contained in:
parent
a6b1b17d45
commit
2909aa9ac8
4 changed files with 151 additions and 91 deletions
|
@ -18,124 +18,165 @@
|
|||
#include "ConsoleScriptingInterface.h"
|
||||
#include "ScriptEngine.h"
|
||||
|
||||
#define INDENTATION 4
|
||||
#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>();
|
||||
|
||||
void ConsoleScriptingInterface::info(QString message) {
|
||||
if (ScriptEngine* scriptEngine = qobject_cast<ScriptEngine*>(engine())) {
|
||||
scriptEngine->scriptInfoMessage(message);
|
||||
QScriptValue ConsoleScriptingInterface::info(QScriptContext* context, QScriptEngine* engine) {
|
||||
if (ScriptEngine* scriptEngine = qobject_cast<ScriptEngine*>(engine)) {
|
||||
scriptEngine->scriptInfoMessage(appendArguments(context));
|
||||
}
|
||||
return QScriptValue::NullValue;
|
||||
}
|
||||
|
||||
void ConsoleScriptingInterface::log(QString message) {
|
||||
QScriptValue ConsoleScriptingInterface::log(QScriptContext* context, QScriptEngine* engine) {
|
||||
QString message = appendArguments(context);
|
||||
if (_groupDetails.count() == 0) {
|
||||
if (ScriptEngine* scriptEngine = qobject_cast<ScriptEngine*>(engine())) {
|
||||
if (ScriptEngine* scriptEngine = qobject_cast<ScriptEngine*>(engine)) {
|
||||
scriptEngine->scriptPrintedMessage(message);
|
||||
}
|
||||
} else {
|
||||
this->logGroupMessage(message);
|
||||
logGroupMessage(message, engine);
|
||||
}
|
||||
return QScriptValue::NullValue;
|
||||
}
|
||||
|
||||
void ConsoleScriptingInterface::debug(QString message) {
|
||||
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::warn(QString message) {
|
||||
if (ScriptEngine* scriptEngine = qobject_cast<ScriptEngine*>(engine())) {
|
||||
scriptEngine->scriptWarningMessage(message);
|
||||
}
|
||||
}
|
||||
|
||||
void ConsoleScriptingInterface::error(QString message) {
|
||||
if (ScriptEngine* scriptEngine = qobject_cast<ScriptEngine*>(engine())) {
|
||||
scriptEngine->scriptErrorMessage(message);
|
||||
}
|
||||
}
|
||||
|
||||
void ConsoleScriptingInterface::exception(QString message) {
|
||||
if (ScriptEngine* scriptEngine = qobject_cast<ScriptEngine*>(engine())) {
|
||||
scriptEngine->scriptErrorMessage(message);
|
||||
}
|
||||
}
|
||||
|
||||
void ConsoleScriptingInterface::time(QString labelName) {
|
||||
_timerDetails.insert(labelName, QDateTime::currentDateTime().toUTC());
|
||||
QString message = QString("%1: timer started").arg(labelName);
|
||||
this->log(message);
|
||||
}
|
||||
|
||||
void ConsoleScriptingInterface::timeEnd(QString labelName) {
|
||||
if (!_timerDetails.contains(labelName)) {
|
||||
this->error("No such label found " + labelName);
|
||||
return;
|
||||
}
|
||||
if (ScriptEngine* scriptEngine = qobject_cast<ScriptEngine*>(engine())) {
|
||||
if (!_timerDetails.contains(labelName)) {
|
||||
scriptEngine->scriptErrorMessage("No such label found " + labelName);
|
||||
return;
|
||||
}
|
||||
|
||||
if (_timerDetails.value(labelName).isNull()) {
|
||||
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);
|
||||
this->error("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);
|
||||
|
||||
this->log(message);
|
||||
scriptEngine->scriptPrintedMessage(message);
|
||||
}
|
||||
}
|
||||
|
||||
void ConsoleScriptingInterface::asserts(bool condition, QString 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) {
|
||||
QString assertionResult;
|
||||
if (message.isEmpty()) {
|
||||
assertionResult = "Assertion failed";
|
||||
} else {
|
||||
assertionResult = QString("Assertion failed : %1").arg(message);
|
||||
}
|
||||
this->error(assertionResult);
|
||||
if (ScriptEngine* scriptEngine = qobject_cast<ScriptEngine*>(engine)) {
|
||||
scriptEngine->scriptErrorMessage(assertionResult);
|
||||
}
|
||||
}
|
||||
return QScriptValue::NullValue;
|
||||
}
|
||||
|
||||
void ConsoleScriptingInterface::trace() {
|
||||
if (ScriptEngine* scriptEngine = qobject_cast<ScriptEngine*>(engine())) {
|
||||
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() {
|
||||
void ConsoleScriptingInterface::clear() {
|
||||
if (ScriptEngine* scriptEngine = qobject_cast<ScriptEngine*>(engine())) {
|
||||
scriptEngine->clearDebugLogWindow();
|
||||
}
|
||||
}
|
||||
|
||||
void ConsoleScriptingInterface::group(QString groupName) {
|
||||
this->logGroupMessage(groupName);
|
||||
_groupDetails.push_back(groupName);
|
||||
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;
|
||||
}
|
||||
|
||||
void ConsoleScriptingInterface::groupCollapsed(QString groupName) {
|
||||
this->logGroupMessage(groupName);
|
||||
_groupDetails.push_back(groupName);
|
||||
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;
|
||||
}
|
||||
|
||||
void ConsoleScriptingInterface::groupEnd() {
|
||||
_groupDetails.removeLast();
|
||||
QScriptValue ConsoleScriptingInterface::groupEnd(QScriptContext* context, QScriptEngine* engine) {
|
||||
ConsoleScriptingInterface::_groupDetails.removeLast();
|
||||
return QScriptValue::NullValue;
|
||||
}
|
||||
|
||||
void ConsoleScriptingInterface::logGroupMessage(QString message) {
|
||||
int _appendIndentation = _groupDetails.count() * INDENTATION;
|
||||
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 count = 0; count < _appendIndentation; count++) {
|
||||
logMessage.append(" ");
|
||||
for (int i = 0; i < _addSpaces; i++) {
|
||||
logMessage.append(SPACE_SEPARATOR);
|
||||
}
|
||||
logMessage.append(message);
|
||||
this->debug(logMessage);
|
||||
if (ScriptEngine* scriptEngine = qobject_cast<ScriptEngine*>(engine)) {
|
||||
scriptEngine->scriptPrintedMessage(logMessage);
|
||||
}
|
||||
}
|
||||
|
|
|
@ -28,25 +28,29 @@
|
|||
// 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 info(QString message);
|
||||
void log(QString message);
|
||||
void debug(QString message);
|
||||
void warn(QString message);
|
||||
void error(QString message);
|
||||
void exception(QString message);
|
||||
void time(QString labelName);
|
||||
void timeEnd(QString labelName);
|
||||
void asserts(bool condition, QString message = "");
|
||||
void trace();
|
||||
void clear();
|
||||
void group(QString groupName);
|
||||
void groupCollapsed(QString groupName);
|
||||
void groupEnd();
|
||||
private:
|
||||
|
||||
private:
|
||||
QHash<QString, QDateTime> _timerDetails;
|
||||
QList<QString> _groupDetails;
|
||||
void logGroupMessage(QString msg);
|
||||
static QList<QString> _groupDetails;
|
||||
static void logGroupMessage(QString message, QScriptEngine* engine);
|
||||
static QString appendArguments(QScriptContext* context);
|
||||
};
|
||||
|
||||
#endif // hifi_ConsoleScriptingInterface_h
|
||||
|
|
|
@ -672,8 +672,18 @@ void ScriptEngine::init() {
|
|||
registerGlobalObject("Mat4", &_mat4Library);
|
||||
registerGlobalObject("Uuid", &_uuidLibrary);
|
||||
registerGlobalObject("Messages", DependencyManager::get<MessagesClient>().data());
|
||||
registerGlobalObject("console", &_consoleScriptingInterface);
|
||||
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, resultHandlerToScriptValue, resultHandlerFromScriptValue);
|
||||
|
|
|
@ -17,6 +17,7 @@ function main() {
|
|||
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");
|
||||
|
@ -25,6 +26,7 @@ function main() {
|
|||
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.");
|
||||
|
@ -33,6 +35,7 @@ function main() {
|
|||
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.");
|
||||
|
@ -41,6 +44,7 @@ function main() {
|
|||
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!');
|
||||
|
@ -64,15 +68,16 @@ function main() {
|
|||
}
|
||||
fooA();
|
||||
|
||||
//console.asserts() examples
|
||||
// console.assert() examples
|
||||
var valA = 1, valB = "1";
|
||||
console.asserts(valA === valB, "Value A doesn't equal to B");
|
||||
console.asserts(valA === valB);
|
||||
console.asserts(5 === 5, "5 equals to 5");
|
||||
console.asserts(5 === 5);
|
||||
console.asserts(5 > 6, "5 is not greater than 6");
|
||||
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() examples.
|
||||
console.group("Group 1");
|
||||
console.log("Sentence 1");
|
||||
console.log("Sentence 2");
|
||||
|
@ -89,11 +94,11 @@ function main() {
|
|||
console.groupEnd();
|
||||
console.log("Sentence 9");
|
||||
|
||||
//console.time(),console.timeEnd() examples
|
||||
console.time('Timer1');
|
||||
// console.time(),console.timeEnd() examples
|
||||
console.time('MyTimer');
|
||||
// Do some process
|
||||
sleep(1000);
|
||||
console.timeEnd('Timer1');
|
||||
console.timeEnd('MyTimer');
|
||||
|
||||
// use console.clear() to clean Debug Window logs
|
||||
// console.clear();
|
||||
|
|
Loading…
Reference in a new issue