summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--src/script/api/qscriptcontextinfo.cpp9
-rw-r--r--tests/auto/qscriptcontextinfo/tst_qscriptcontextinfo.cpp25
2 files changed, 25 insertions, 9 deletions
diff --git a/src/script/api/qscriptcontextinfo.cpp b/src/script/api/qscriptcontextinfo.cpp
index eb9daf0..2e2d346 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;
diff --git a/tests/auto/qscriptcontextinfo/tst_qscriptcontextinfo.cpp b/tests/auto/qscriptcontextinfo/tst_qscriptcontextinfo.cpp
index eb5810c..1adef98 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);
@@ -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);
}
@@ -574,6 +580,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;