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 | 18 | #include "ConsoleScriptingInterface.h" |
| 19 | 19 | #include "ScriptEngine.h" |
| 20 | 20 | |
| 21 | −#define INDENTATION 4 | |
| 21 | +#define INDENTATION 4 // 1 Tab - 4 spaces | |
| 22 | 22 | const QString LINE_SEPARATOR = "\n "; |
| 23 | +const QString SPACE_SEPARATOR = " "; | |
| 23 | 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) { | |
| 26 | − if (ScriptEngine* scriptEngine = qobject_cast<ScriptEngine*>(engine())) { | |
| 27 | − scriptEngine->scriptInfoMessage(message); | |
| 27 | +QScriptValue ConsoleScriptingInterface::info(QScriptContext* context, QScriptEngine* engine) { | |
| 28 | + if (ScriptEngine* scriptEngine = qobject_cast<ScriptEngine*>(engine)) { | |
| 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 | 36 | if (_groupDetails.count() == 0) { |
| 33 | − if (ScriptEngine* scriptEngine = qobject_cast<ScriptEngine*>(engine())) { | |
| 37 | + if (ScriptEngine* scriptEngine = qobject_cast<ScriptEngine*>(engine)) { | |
| 34 | 38 | scriptEngine->scriptPrintedMessage(message); |
| 35 | 39 | } |
| 36 | 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) { | |
| 42 | − if (ScriptEngine* scriptEngine = qobject_cast<ScriptEngine*>(engine())) { | |
| 43 | − scriptEngine->scriptPrintedMessage(message); | |
| 46 | +QScriptValue ConsoleScriptingInterface::debug(QScriptContext* context, QScriptEngine* engine) { | |
| 47 | + if (ScriptEngine* scriptEngine = qobject_cast<ScriptEngine*>(engine)) { | |
| 48 | + scriptEngine->scriptPrintedMessage(appendArguments(context)); | |
| 44 | 49 | } |
| 50 | + return QScriptValue::NullValue; | |
| 45 | 51 | } |
| 46 | 52 | |
| 47 | −void ConsoleScriptingInterface::warn(QString message) { | |
| 48 | − if (ScriptEngine* scriptEngine = qobject_cast<ScriptEngine*>(engine())) { | |
| 49 | − scriptEngine->scriptWarningMessage(message); | |
| 53 | +QScriptValue ConsoleScriptingInterface::warn(QScriptContext* context, QScriptEngine* engine) { | |
| 54 | + if (ScriptEngine* scriptEngine = qobject_cast<ScriptEngine*>(engine)) { | |
| 55 | + scriptEngine->scriptWarningMessage(appendArguments(context)); | |
| 50 | 56 | } |
| 57 | + return QScriptValue::NullValue; | |
| 51 | 58 | } |
| 52 | 59 | |
| 53 | −void ConsoleScriptingInterface::error(QString message) { | |
| 54 | − if (ScriptEngine* scriptEngine = qobject_cast<ScriptEngine*>(engine())) { | |
| 55 | − scriptEngine->scriptErrorMessage(message); | |
| 60 | +QScriptValue ConsoleScriptingInterface::error(QScriptContext* context, QScriptEngine* engine) { | |
| 61 | + if (ScriptEngine* scriptEngine = qobject_cast<ScriptEngine*>(engine)) { | |
| 62 | + scriptEngine->scriptErrorMessage(appendArguments(context)); | |
| 56 | 63 | } |
| 64 | + return QScriptValue::NullValue; | |
| 57 | 65 | } |
| 58 | 66 | |
| 59 | −void ConsoleScriptingInterface::exception(QString message) { | |
| 60 | − if (ScriptEngine* scriptEngine = qobject_cast<ScriptEngine*>(engine())) { | |
| 61 | − scriptEngine->scriptErrorMessage(message); | |
| 67 | +QScriptValue ConsoleScriptingInterface::exception(QScriptContext* context, QScriptEngine* engine) { | |
| 68 | + if (ScriptEngine* scriptEngine = qobject_cast<ScriptEngine*>(engine)) { | |
| 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 | 75 | _timerDetails.insert(labelName, QDateTime::currentDateTime().toUTC()); |
| 67 | − QString message = QString("%1: timer started").arg(labelName); | |
| 68 | − this->log(message); | |
| 76 | + QString message = QString("%1: Timer started").arg(labelName); | |
| 77 | + if (ScriptEngine* scriptEngine = qobject_cast<ScriptEngine*>(engine())) { | |
| 78 | + scriptEngine->scriptPrintedMessage(message); | |
| 79 | + } | |
| 69 | 80 | } |
| 70 | 81 | |
| 71 | 82 | void ConsoleScriptingInterface::timeEnd(QString labelName) { |
| 72 | − if (!_timerDetails.contains(labelName)) { | |
| 73 | − this->error("No such label found " + labelName); | |
| 74 | − return; | |
| 75 | − } | |
| 83 | + if (ScriptEngine* scriptEngine = qobject_cast<ScriptEngine*>(engine())) { | |
| 84 | + if (!_timerDetails.contains(labelName)) { | |
| 85 | + scriptEngine->scriptErrorMessage("No such label found " + labelName); | |
| 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 | 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 | 117 | if (!condition) { |
| 95 | − QString assertionResult; | |
| 96 | 118 | if (message.isEmpty()) { |
| 97 | 119 | assertionResult = "Assertion failed"; |
| 98 | 120 | } else { |
| 99 | 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() { | |
| 106 | − if (ScriptEngine* scriptEngine = qobject_cast<ScriptEngine*>(engine())) { | |
| 130 | +void ConsoleScriptingInterface::trace() { | |
| 131 | + if (ScriptEngine* scriptEngine = qobject_cast<ScriptEngine*>(engine())) { | |
| 107 | 132 | scriptEngine->scriptPrintedMessage |
| 108 | 133 | (QString(STACK_TRACE_FORMAT).arg(LINE_SEPARATOR, |
| 109 | 134 | scriptEngine->currentContext()->backtrace().join(LINE_SEPARATOR))); |
| 110 | 135 | } |
| 111 | 136 | } |
| 112 | 137 | |
| 113 | −void ConsoleScriptingInterface::clear() { | |
| 138 | +void ConsoleScriptingInterface::clear() { | |
| 114 | 139 | if (ScriptEngine* scriptEngine = qobject_cast<ScriptEngine*>(engine())) { |
| 115 | 140 | scriptEngine->clearDebugLogWindow(); |
| 116 | 141 | } |
| 117 | 142 | } |
| 118 | 143 | |
| 119 | −void ConsoleScriptingInterface::group(QString groupName) { | |
| 120 | − this->logGroupMessage(groupName); | |
| 121 | − _groupDetails.push_back(groupName); | |
| 144 | +QScriptValue ConsoleScriptingInterface::group(QScriptContext* context, QScriptEngine* engine) { | |
| 145 | + logGroupMessage(context->argument(0).toString(), engine); // accept first parameter as label | |
| 146 | + _groupDetails.push_back(context->argument(0).toString()); | |
| 147 | + return QScriptValue::NullValue; | |
| 122 | 148 | } |
| 123 | 149 | |
| 124 | −void ConsoleScriptingInterface::groupCollapsed(QString groupName) { | |
| 125 | − this->logGroupMessage(groupName); | |
| 126 | − _groupDetails.push_back(groupName); | |
| 150 | +QScriptValue ConsoleScriptingInterface::groupCollapsed(QScriptContext* context, QScriptEngine* engine) { | |
| 151 | + logGroupMessage(context->argument(0).toString(), engine); // accept first parameter as label | |
| 152 | + _groupDetails.push_back(context->argument(0).toString()); | |
| 153 | + return QScriptValue::NullValue; | |
| 127 | 154 | } |
| 128 | 155 | |
| 129 | −void ConsoleScriptingInterface::groupEnd() { | |
| 130 | − _groupDetails.removeLast(); | |
| 156 | +QScriptValue ConsoleScriptingInterface::groupEnd(QScriptContext* context, QScriptEngine* engine) { | |
| 157 | + ConsoleScriptingInterface::_groupDetails.removeLast(); | |
| 158 | + return QScriptValue::NullValue; | |
| 131 | 159 | } |
| 132 | 160 | |
| 133 | −void ConsoleScriptingInterface::logGroupMessage(QString message) { | |
| 134 | − int _appendIndentation = _groupDetails.count() * INDENTATION; | |
| 161 | +QString ConsoleScriptingInterface::appendArguments(QScriptContext* context) { | |
| 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 | 174 | QString logMessage; |
| 136 | − for (int count = 0; count < _appendIndentation; count++) { | |
| 137 | − logMessage.append(" "); | |
| 175 | + for (int i = 0; i < _addSpaces; i++) { | |
| 176 | + logMessage.append(SPACE_SEPARATOR); | |
| 138 | 177 | } |
| 139 | 178 | logMessage.append(message); |
| 140 | − this->debug(logMessage); | |
| 179 | + if (ScriptEngine* scriptEngine = qobject_cast<ScriptEngine*>(engine)) { | |
| 180 | + scriptEngine->scriptPrintedMessage(logMessage); | |
| 181 | + } | |
| 141 | 182 | } |