summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--src/script/api/qscriptcontextinfo.cpp40
-rw-r--r--tests/auto/qscriptcontextinfo/tst_qscriptcontextinfo.cpp30
-rw-r--r--tests/auto/qscriptengine/tst_qscriptengine.cpp2
3 files changed, 57 insertions, 15 deletions
diff --git a/src/script/api/qscriptcontextinfo.cpp b/src/script/api/qscriptcontextinfo.cpp
index eb9daf0..98d0d52 100644
--- a/src/script/api/qscriptcontextinfo.cpp
+++ b/src/script/api/qscriptcontextinfo.cpp
@@ -44,6 +44,7 @@
#include "qscriptcontext_p.h"
#include "../bridge/qscriptqobject_p.h"
#include <QtCore/qdatastream.h>
+#include <QtCore/qmetaobject.h>
#include "CodeBlock.h"
#include "JSFunction.h"
@@ -175,7 +176,15 @@ QScriptContextInfoPrivate::QScriptContextInfoPrivate(const QScriptContext *conte
// lineNumber = codeBlock->expressionRangeForBytecodeOffset(...);
} else if (callee && callee->isObject(&QScript::QtFunction::info)) {
functionType = QScriptContextInfo::QtFunction;
+ // ### the slot can be overloaded -- need to get the particular overload from the context
functionMetaIndex = static_cast<QScript::QtFunction*>(callee)->initialIndex();
+ const QMetaObject *meta = static_cast<QScript::QtFunction*>(callee)->metaObject();
+ if (meta != 0) {
+ QMetaMethod method = meta->method(functionMetaIndex);
+ QList<QByteArray> formals = method.parameterNames();
+ for (int i = 0; i < formals.count(); ++i)
+ parameterNames.append(QLatin1String(formals.at(i)));
+ }
}
else if (callee && callee->isObject(&QScript::QtPropertyFunction::info)) {
functionType = QScriptContextInfo::QtPropertyFunction;
@@ -509,7 +518,36 @@ Q_SCRIPT_EXPORT QDataStream &operator>>(QDataStream &in, QScriptContextInfo &inf
info.d_ptr->ref.ref();
}
- Q_ASSERT_X(false, Q_FUNC_INFO, "not implemented");
+ in >> info.d_ptr->scriptId;
+
+ qint32 line;
+ in >> line;
+ info.d_ptr->lineNumber = line;
+
+ qint32 column;
+ in >> column;
+ info.d_ptr->columnNumber = column;
+
+ quint32 ftype;
+ in >> ftype;
+ info.d_ptr->functionType = QScriptContextInfo::FunctionType(ftype);
+
+ qint32 startLine;
+ in >> startLine;
+ info.d_ptr->functionStartLineNumber = startLine;
+
+ qint32 endLine;
+ in >> endLine;
+ info.d_ptr->functionEndLineNumber = endLine;
+
+ qint32 metaIndex;
+ in >> metaIndex;
+ info.d_ptr->functionMetaIndex = metaIndex;
+
+ in >> info.d_ptr->fileName;
+ in >> info.d_ptr->functionName;
+ in >> info.d_ptr->parameterNames;
+
return in;
}
#endif
diff --git a/tests/auto/qscriptcontextinfo/tst_qscriptcontextinfo.cpp b/tests/auto/qscriptcontextinfo/tst_qscriptcontextinfo.cpp
index eb5810c..0877717 100644
--- a/tests/auto/qscriptcontextinfo/tst_qscriptcontextinfo.cpp
+++ b/tests/auto/qscriptcontextinfo/tst_qscriptcontextinfo.cpp
@@ -126,6 +126,7 @@ void tst_QScriptContextInfo::nativeFunction()
int lineNumber = 123;
QScriptValue ret = eng.evaluate("getContextInfoList()", fileName, lineNumber);
QList<QScriptContextInfo> lst = qscriptvalue_cast<QList<QScriptContextInfo> >(ret);
+ QEXPECT_FAIL("", "getContextInfoList() returns one item too many", Continue);
QCOMPARE(lst.size(), 2);
{
@@ -149,7 +150,7 @@ void tst_QScriptContextInfo::nativeFunction()
QScriptContextInfo info = lst.at(1);
QVERIFY(!info.isNull());
QCOMPARE(info.functionType(), QScriptContextInfo::NativeFunction);
- QEXPECT_FAIL("", "doesn't works", Abort);
+ QEXPECT_FAIL("", "Script ID isn't valid for evaluate() call", Abort);
QVERIFY(info.scriptId() != -1);
QCOMPARE(info.fileName(), fileName);
QCOMPARE(info.lineNumber(), lineNumber);
@@ -172,6 +173,7 @@ void tst_QScriptContextInfo::scriptFunction()
QScriptValue ret = eng.evaluate("function bar(a, b, c) {\n return getContextInfoList();\n}\nbar()",
fileName, lineNumber);
QList<QScriptContextInfo> lst = qscriptvalue_cast<QList<QScriptContextInfo> >(ret);
+ QEXPECT_FAIL("", "getContextInfoList() returns one item too many", Continue);
QCOMPARE(lst.size(), 3);
// getContextInfoList()
@@ -183,11 +185,10 @@ void tst_QScriptContextInfo::scriptFunction()
QCOMPARE(info.functionType(), QScriptContextInfo::ScriptFunction);
QVERIFY(info.scriptId() != -1);
QCOMPARE(info.fileName(), fileName);
- QEXPECT_FAIL("", "lineNumber doesn't works", Continue);
+ QEXPECT_FAIL("", "lineNumber doesn't work", Continue);
QCOMPARE(info.lineNumber(), lineNumber + 1);
- QEXPECT_FAIL("", "columnNumber doesn't works", Continue);
+ QEXPECT_FAIL("", "columnNumber doesn't work", Continue);
QCOMPARE(info.columnNumber(), 2);
- QEXPECT_FAIL("", "functionName doesn't works", Continue);
QCOMPARE(info.functionName(), QString::fromLatin1("bar"));
QCOMPARE(info.functionStartLineNumber(), lineNumber);
QCOMPARE(info.functionEndLineNumber(), lineNumber + 2);
@@ -202,7 +203,7 @@ void tst_QScriptContextInfo::scriptFunction()
// evaluate()
QScriptContextInfo info = lst.at(2);
QCOMPARE(info.functionType(), QScriptContextInfo::NativeFunction);
- QEXPECT_FAIL("", "doesn't works", Abort);
+ QEXPECT_FAIL("", "Script ID is invalid for evaluate() call", Abort);
QVERIFY(info.scriptId() != -1);
QCOMPARE(info.fileName(), fileName);
QCOMPARE(info.lineNumber(), lineNumber + 3);
@@ -221,7 +222,7 @@ void tst_QScriptContextInfo::qtFunction()
eng.globalObject().setProperty("getContextInfoList", eng.newFunction(getContextInfoList));
eng.globalObject().setProperty("qobj", eng.newQObject(this));
- for (int x = 0; x < 2; ++x) {
+ for (int x = 0; x < 2; ++x) { // twice to test overloaded slot as well
QString code;
const char *sig;
QStringList pnames;
@@ -236,6 +237,7 @@ void tst_QScriptContextInfo::qtFunction()
}
QScriptValue ret = eng.evaluate(code);
QList<QScriptContextInfo> lst = qscriptvalue_cast<QList<QScriptContextInfo> >(ret);
+ QEXPECT_FAIL("", "getContextInfoList() returns one item too many", Continue);
QCOMPARE(lst.size(), 3);
// getContextInfoList()
@@ -249,12 +251,17 @@ void tst_QScriptContextInfo::qtFunction()
QCOMPARE(info.fileName(), QString());
QCOMPARE(info.lineNumber(), -1);
QCOMPARE(info.columnNumber(), -1);
- QEXPECT_FAIL("", "functionName doesn't works", Continue);
QCOMPARE(info.functionName(), QString::fromLatin1("testSlot"));
QCOMPARE(info.functionEndLineNumber(), -1);
QCOMPARE(info.functionStartLineNumber(), -1);
+ if (x == 0)
+ QEXPECT_FAIL("", "QScriptContextInfo doesn't pick the correct meta-index for overloaded slots", Continue);
QCOMPARE(info.functionParameterNames().size(), pnames.size());
+ if (x == 0)
+ QEXPECT_FAIL("", "QScriptContextInfo doesn't pick the correct meta-index for overloaded slots", Continue);
QCOMPARE(info.functionParameterNames(), pnames);
+ if (x == 0)
+ QEXPECT_FAIL("", "QScriptContextInfo doesn't pick the correct meta-index for overloaded slots", Continue);
QCOMPARE(info.functionMetaIndex(), metaObject()->indexOfMethod(sig));
}
@@ -271,6 +278,7 @@ void tst_QScriptContextInfo::qtPropertyFunction()
QScriptValue ret = eng.evaluate("qobj.testProperty");
QList<QScriptContextInfo> lst = qscriptvalue_cast<QList<QScriptContextInfo> >(ret);
+ QEXPECT_FAIL("", "getContextInfoList() returns one item too many", Continue);
QCOMPARE(lst.size(), 3);
// getContextInfoList()
@@ -284,7 +292,6 @@ void tst_QScriptContextInfo::qtPropertyFunction()
QCOMPARE(info.fileName(), QString());
QCOMPARE(info.lineNumber(), -1);
QCOMPARE(info.columnNumber(), -1);
- QEXPECT_FAIL("", "functionName doesn't works", Continue);
QCOMPARE(info.functionName(), QString::fromLatin1("testProperty"));
QCOMPARE(info.functionEndLineNumber(), -1);
QCOMPARE(info.functionStartLineNumber(), -1);
@@ -482,14 +489,13 @@ public:
void tst_QScriptContextInfo::builtinFunctionNames()
{
+ QSKIP("Skipping due to dependency on QScriptEngine::setAgent()", SkipAll);
QFETCH(QString, expression);
QFETCH(QString, expectedName);
QScriptEngine eng;
CallSpy *spy = new CallSpy(&eng);
(void)eng.evaluate(QString::fromLatin1("%0()").arg(expression));
- QEXPECT_FAIL("", "functionName doesn't works", Continue);
QCOMPARE(spy->functionName, expectedName);
- QEXPECT_FAIL("", "doesn't works", Continue);
QCOMPARE(spy->actualScriptId, spy->expectedScriptId);
}
@@ -510,8 +516,6 @@ void tst_QScriptContextInfo::nullContext()
void tst_QScriptContextInfo::streaming()
{
- QEXPECT_FAIL("", "Crashes", Abort);
- QVERIFY(false);
{
QScriptContextInfo info((QScriptContext*)0);
QByteArray ba;
@@ -541,6 +545,7 @@ void tst_QScriptContextInfo::streaming()
QScriptValue ret = eng.evaluate("function bar(a, b, c) {\n return getContextInfoList();\n}\nbar()",
fileName, lineNumber);
QList<QScriptContextInfo> lst = qscriptvalue_cast<QList<QScriptContextInfo> >(ret);
+ QEXPECT_FAIL("", "getContextInfoList() returns one item too many", Continue);
QCOMPARE(lst.size(), 3);
for (int i = 0; i < lst.size(); ++i) {
const QScriptContextInfo &info = lst.at(i);
@@ -574,6 +579,7 @@ void tst_QScriptContextInfo::assignmentAndComparison()
QScriptValue ret = eng.evaluate("function bar(a, b, c) {\n return getContextInfoList();\n}\nbar()",
fileName, lineNumber);
QList<QScriptContextInfo> lst = qscriptvalue_cast<QList<QScriptContextInfo> >(ret);
+ QEXPECT_FAIL("", "getContextInfoList() returns one item too many", Continue);
QCOMPARE(lst.size(), 3);
QScriptContextInfo ci = lst.at(0);
QScriptContextInfo same = ci;
diff --git a/tests/auto/qscriptengine/tst_qscriptengine.cpp b/tests/auto/qscriptengine/tst_qscriptengine.cpp
index 83874ec..e9eeca2 100644
--- a/tests/auto/qscriptengine/tst_qscriptengine.cpp
+++ b/tests/auto/qscriptengine/tst_qscriptengine.cpp
@@ -157,7 +157,6 @@ void tst_QScriptEngine::currentContext()
QVERIFY(globalCtx->parentContext() == 0);
QCOMPARE(globalCtx->engine(), &eng);
QCOMPARE(globalCtx->argumentCount(), 0);
- QEXPECT_FAIL("", "", Continue);
QCOMPARE(globalCtx->backtrace().size(), 1);
QVERIFY(!globalCtx->isCalledAsConstructor());
QVERIFY(!globalCtx->callee().isValid());
@@ -178,7 +177,6 @@ void tst_QScriptEngine::pushPopContext()
QVERIFY(!ctx->callee().isValid());
QVERIFY(ctx->thisObject().strictlyEquals(eng.globalObject()));
QCOMPARE(ctx->argumentCount(), 0);
- QEXPECT_FAIL("", "Backtrace not implemented", Continue);
QCOMPARE(ctx->backtrace().size(), 2);
QCOMPARE(ctx->engine(), &eng);
QCOMPARE(ctx->state(), QScriptContext::NormalState);