Showing the changes to libraries/script-engine/src/ConsoleScriptingInterface.cpp (1 of 4 files). Show all
Unified · Split
| @@ -18,124 +18,165 @@ · 17 unmodified lines | |||
| 18 | #include "ConsoleScriptingInterface.h" | 18 | #include "ConsoleScriptingInterface.h" |
| 19 | #include "ScriptEngine.h" | 19 | #include "ScriptEngine.h" |
| 20 | 20 | ||
| 21 | #define INDENTATION 4 | 21 | #define INDENTATION 4 // 1 Tab - 4 spaces |
| 22 | const QString LINE_SEPARATOR = "\n "; | 22 | const QString LINE_SEPARATOR = "\n "; |
| 23 | const QString SPACE_SEPARATOR = " "; | ||
| 23 | const QString STACK_TRACE_FORMAT = "\n[Stacktrace]%1%2"; | 24 | const QString STACK_TRACE_FORMAT = "\n[Stacktrace]%1%2"; |
| 25 | QList<QString> ConsoleScriptingInterface::_groupDetails = QList<QString>(); | ||
| 24 | 26 | ||
| 25 | void ConsoleScriptingInterface::info(QString message) { | 27 | QScriptValue ConsoleScriptingInterface::info(QScriptContext* context, QScriptEngine* engine) { |
| 26 | if (ScriptEngine* scriptEngine = qobject_cast<ScriptEngine*>(engine())) { | 28 | if (ScriptEngine* scriptEngine = qobject_cast<ScriptEngine*>(engine)) { |
| 27 | scriptEngine->scriptInfoMessage(message); | 29 | scriptEngine->scriptInfoMessage(appendArguments(context)); |
| 28 | } | 30 | } |
| 31 | return QScriptValue::NullValue; | ||
| 29 | } | 32 | } |
| 30 | 33 | ||
| 31 | void ConsoleScriptingInterface::log(QString message) { | 34 | QScriptValue ConsoleScriptingInterface::log(QScriptContext* context, QScriptEngine* engine) { |
| 35 | QString message = appendArguments(context); | ||
| 32 | if (_groupDetails.count() == 0) { | 36 | if (_groupDetails.count() == 0) { |
| 33 | if (ScriptEngine* scriptEngine = qobject_cast<ScriptEngine*>(engine())) { | 37 | if (ScriptEngine* scriptEngine = qobject_cast<ScriptEngine*>(engine)) { |
| 34 | scriptEngine->scriptPrintedMessage(message); | 38 | scriptEngine->scriptPrintedMessage(message); |
| 35 | } | 39 | } |
| 36 | } else { | 40 | } else { |
| 37 | this->logGroupMessage(message); | 41 | logGroupMessage(message, engine); |
| 38 | } | 42 | } |
| 43 | return QScriptValue::NullValue; | ||
| 39 | } | 44 | } |
| 40 | 45 | ||
| 41 | void ConsoleScriptingInterface::debug(QString message) { | 46 | QScriptValue ConsoleScriptingInterface::debug(QScriptContext* context, QScriptEngine* engine) { |
| 42 | if (ScriptEngine* scriptEngine = qobject_cast<ScriptEngine*>(engine())) { | 47 | if (ScriptEngine* scriptEngine = qobject_cast<ScriptEngine*>(engine)) { |
| 43 | scriptEngine->scriptPrintedMessage(message); | 48 | scriptEngine->scriptPrintedMessage(appendArguments(context)); |
| 44 | } | 49 | } |
| 50 | return QScriptValue::NullValue; | ||
| 45 | } | 51 | } |
| 46 | 52 | ||
| 47 | void ConsoleScriptingInterface::warn(QString message) { | 53 | QScriptValue ConsoleScriptingInterface::warn(QScriptContext* context, QScriptEngine* engine) { |
| 48 | if (ScriptEngine* scriptEngine = qobject_cast<ScriptEngine*>(engine())) { | 54 | if (ScriptEngine* scriptEngine = qobject_cast<ScriptEngine*>(engine)) { |
| 49 | scriptEngine->scriptWarningMessage(message); | 55 | scriptEngine->scriptWarningMessage(appendArguments(context)); |
| 50 | } | 56 | } |
| 57 | return QScriptValue::NullValue; | ||
| 51 | } | 58 | } |
| 52 | 59 | ||
| 53 | void ConsoleScriptingInterface::error(QString message) { | 60 | QScriptValue ConsoleScriptingInterface::error(QScriptContext* context, QScriptEngine* engine) { |
| 54 | if (ScriptEngine* scriptEngine = qobject_cast<ScriptEngine*>(engine())) { | 61 | if (ScriptEngine* scriptEngine = qobject_cast<ScriptEngine*>(engine)) { |
| 55 | scriptEngine->scriptErrorMessage(message); | 62 | scriptEngine->scriptErrorMessage(appendArguments(context)); |
| 56 | } | 63 | } |
| 64 | return QScriptValue::NullValue; | ||
| 57 | } | 65 | } |
| 58 | 66 | ||
| 59 | void ConsoleScriptingInterface::exception(QString message) { | 67 | QScriptValue ConsoleScriptingInterface::exception(QScriptContext* context, QScriptEngine* engine) { |
| 60 | if (ScriptEngine* scriptEngine = qobject_cast<ScriptEngine*>(engine())) { | 68 | if (ScriptEngine* scriptEngine = qobject_cast<ScriptEngine*>(engine)) { |
| 61 | scriptEngine->scriptErrorMessage(message); | 69 | scriptEngine->scriptErrorMessage(appendArguments(context)); |
| 62 | } | 70 | } |
| 71 | return QScriptValue::NullValue; | ||
| 63 | } | 72 | } |
| 64 | 73 | ||
| 65 | void ConsoleScriptingInterface::time(QString labelName) { | 74 | void ConsoleScriptingInterface::time(QString labelName) { |
| 66 | _timerDetails.insert(labelName, QDateTime::currentDateTime().toUTC()); | 75 | _timerDetails.insert(labelName, QDateTime::currentDateTime().toUTC()); |
| 67 | QString message = QString("%1: timer started").arg(labelName); | 76 | QString message = QString("%1: Timer started").arg(labelName); |
| 68 | this->log(message); | 77 | if (ScriptEngine* scriptEngine = qobject_cast<ScriptEngine*>(engine())) { |
| 78 | scriptEngine->scriptPrintedMessage(message); | ||
| 79 | } | ||
| 69 | } | 80 | } |
| 70 | 81 | ||
| 71 | void ConsoleScriptingInterface::timeEnd(QString labelName) { | 82 | void ConsoleScriptingInterface::timeEnd(QString labelName) { |
| 72 | if (!_timerDetails.contains(labelName)) { | 83 | if (ScriptEngine* scriptEngine = qobject_cast<ScriptEngine*>(engine())) { |
| 73 | this->error("No such label found " + labelName); | 84 | if (!_timerDetails.contains(labelName)) { |
| 74 | return; | 85 | scriptEngine->scriptErrorMessage("No such label found " + labelName); |
| 75 | } | 86 | return; |
| 87 | } | ||
| 88 | |||
| 89 | if (_timerDetails.value(labelName).isNull()) { | ||
| 90 | _timerDetails.remove(labelName); | ||
| 91 | scriptEngine->scriptErrorMessage("Invalid start time for " + labelName); | ||
| 92 | return; | ||
| 93 | } | ||
| 94 | QDateTime _startTime = _timerDetails.value(labelName); | ||
| 95 | QDateTime _endTime = QDateTime::currentDateTime().toUTC(); | ||
| 96 | qint64 diffInMS = _startTime.msecsTo(_endTime); | ||
| 76 | 97 | ||
| 77 | if (_timerDetails.value(labelName).isNull()) { | 98 | QString message = QString("%1: %2ms").arg(labelName).arg(QString::number(diffInMS)); |
| 78 | _timerDetails.remove(labelName); | 99 | _timerDetails.remove(labelName); |
| 79 | this->error("Invalid start time for " + labelName); | ||
| 80 | return; | ||
| 81 | } | ||
| 82 | |||
| 83 | QDateTime _startTime = _timerDetails.value(labelName); | ||
| 84 | QDateTime _endTime = QDateTime::currentDateTime().toUTC(); | ||
| 85 | qint64 diffInMS = _startTime.msecsTo(_endTime); | ||
| 86 | |||
| 87 | QString message = QString("%1: %2ms").arg(labelName).arg(QString::number(diffInMS)); | ||
| 88 | _timerDetails.remove(labelName); | ||
| 89 | 100 | ||
| 90 | this->log(message); | 101 | scriptEngine->scriptPrintedMessage(message); |
| 102 | } | ||
| 91 | } | 103 | } |
| 92 | 104 | ||
| 93 | void ConsoleScriptingInterface::asserts(bool condition, QString message) { | 105 | QScriptValue ConsoleScriptingInterface::assertion(QScriptContext* context, QScriptEngine* engine) { |
| 106 | QString message; | ||
| 107 | bool condition = false; | ||
| 108 | for (int i = 0; i < context->argumentCount(); i++) { | ||
| 109 | if (i == 0) { | ||
| 110 | condition = context->argument(i).toBool(); // accept first value as condition | ||
| 111 | } else { | ||
| 112 | message += SPACE_SEPARATOR + context->argument(i).toString(); // accept other parameters as message | ||
| 113 | } | ||
| 114 | } | ||
| 115 | |||
| 116 | QString assertionResult; | ||
| 94 | if (!condition) { | 117 | if (!condition) { |
| 95 | QString assertionResult; | ||
| 96 | if (message.isEmpty()) { | 118 | if (message.isEmpty()) { |
| 97 | assertionResult = "Assertion failed"; | 119 | assertionResult = "Assertion failed"; |
| 98 | } else { | 120 | } else { |
| 99 | assertionResult = QString("Assertion failed : %1").arg(message); | 121 | assertionResult = QString("Assertion failed : %1").arg(message); |
| 100 | } | 122 | } |
| 101 | this->error(assertionResult); | 123 | if (ScriptEngine* scriptEngine = qobject_cast<ScriptEngine*>(engine)) { |
| 124 | scriptEngine->scriptErrorMessage(assertionResult); | ||
| 125 | } | ||
| 102 | } | 126 | } |
| 127 | return QScriptValue::NullValue; | ||
| 103 | } | 128 | } |
| 104 | 129 | ||
| 105 | void ConsoleScriptingInterface::trace() { | 130 | void ConsoleScriptingInterface::trace() { |
| 106 | if (ScriptEngine* scriptEngine = qobject_cast<ScriptEngine*>(engine())) { | 131 | if (ScriptEngine* scriptEngine = qobject_cast<ScriptEngine*>(engine())) { |
| 107 | scriptEngine->scriptPrintedMessage | 132 | scriptEngine->scriptPrintedMessage |
| 108 | (QString(STACK_TRACE_FORMAT).arg(LINE_SEPARATOR, | 133 | (QString(STACK_TRACE_FORMAT).arg(LINE_SEPARATOR, |
| 109 | scriptEngine->currentContext()->backtrace().join(LINE_SEPARATOR))); | 134 | scriptEngine->currentContext()->backtrace().join(LINE_SEPARATOR))); |
| 110 | } | 135 | } |
| 111 | } | 136 | } |
| 112 | 137 | ||
| 113 | void ConsoleScriptingInterface::clear() { | 138 | void ConsoleScriptingInterface::clear() { |
| 114 | if (ScriptEngine* scriptEngine = qobject_cast<ScriptEngine*>(engine())) { | 139 | if (ScriptEngine* scriptEngine = qobject_cast<ScriptEngine*>(engine())) { |
| 115 | scriptEngine->clearDebugLogWindow(); | 140 | scriptEngine->clearDebugLogWindow(); |
| 116 | } | 141 | } |
| 117 | } | 142 | } |
| 118 | 143 | ||
| 119 | void ConsoleScriptingInterface::group(QString groupName) { | 144 | QScriptValue ConsoleScriptingInterface::group(QScriptContext* context, QScriptEngine* engine) { |
| 120 | this->logGroupMessage(groupName); | 145 | logGroupMessage(context->argument(0).toString(), engine); // accept first parameter as label |
| 121 | _groupDetails.push_back(groupName); | 146 | _groupDetails.push_back(context->argument(0).toString()); |
| 147 | return QScriptValue::NullValue; | ||
| 122 | } | 148 | } |
| 123 | 149 | ||
| 124 | void ConsoleScriptingInterface::groupCollapsed(QString groupName) { | 150 | QScriptValue ConsoleScriptingInterface::groupCollapsed(QScriptContext* context, QScriptEngine* engine) { |
| 125 | this->logGroupMessage(groupName); | 151 | logGroupMessage(context->argument(0).toString(), engine); // accept first parameter as label |
| 126 | _groupDetails.push_back(groupName); | 152 | _groupDetails.push_back(context->argument(0).toString()); |
| 153 | return QScriptValue::NullValue; | ||
| 127 | } | 154 | } |
| 128 | 155 | ||
| 129 | void ConsoleScriptingInterface::groupEnd() { | 156 | QScriptValue ConsoleScriptingInterface::groupEnd(QScriptContext* context, QScriptEngine* engine) { |
| 130 | _groupDetails.removeLast(); | 157 | ConsoleScriptingInterface::_groupDetails.removeLast(); |
| 158 | return QScriptValue::NullValue; | ||
| 131 | } | 159 | } |
| 132 | 160 | ||
| 133 | void ConsoleScriptingInterface::logGroupMessage(QString message) { | 161 | QString ConsoleScriptingInterface::appendArguments(QScriptContext* context) { |
| 134 | int _appendIndentation = _groupDetails.count() * INDENTATION; | 162 | QString message; |
| 163 | for (int i = 0; i < context->argumentCount(); i++) { | ||
| 164 | if (i > 0) { | ||
| 165 | message += SPACE_SEPARATOR; | ||
| 166 | } | ||
| 167 | message += context->argument(i).toString(); | ||
| 168 | } | ||
| 169 | return message; | ||
| 170 | } | ||
| 171 | |||
| 172 | void ConsoleScriptingInterface::logGroupMessage(QString message, QScriptEngine* engine) { | ||
| 173 | int _addSpaces = _groupDetails.count() * INDENTATION; | ||
| 135 | QString logMessage; | 174 | QString logMessage; |
| 136 | for (int count = 0; count < _appendIndentation; count++) { | 175 | for (int i = 0; i < _addSpaces; i++) { |
| 137 | logMessage.append(" "); | 176 | logMessage.append(SPACE_SEPARATOR); |
| 138 | } | 177 | } |
| 139 | logMessage.append(message); | 178 | logMessage.append(message); |
| 140 | this->debug(logMessage); | 179 | if (ScriptEngine* scriptEngine = qobject_cast<ScriptEngine*>(engine)) { |
| 180 | scriptEngine->scriptPrintedMessage(logMessage); | ||
| 181 | } | ||
| 141 | } | 182 | } |