From f6304c909b074a951dc33c39bc2b9d75536b1c22 Mon Sep 17 00:00:00 2001 From: Jedrzej Nowacki Date: Fri, 10 Jul 2009 17:09:58 +0200 Subject: fix checkSyntax autotest. --- src/script/api/qscriptengine.cpp | 55 ++++++++++++++++++-------- src/script/api/qscriptengine.h | 1 + src/script/api/qscriptengine_p.h | 3 ++ tests/auto/qscriptengine/tst_qscriptengine.cpp | 1 - 4 files changed, 42 insertions(+), 18 deletions(-) diff --git a/src/script/api/qscriptengine.cpp b/src/script/api/qscriptengine.cpp index b64844e..97a1c61 100644 --- a/src/script/api/qscriptengine.cpp +++ b/src/script/api/qscriptengine.cpp @@ -282,6 +282,19 @@ QT_BEGIN_NAMESPACE \value SkipMethodsInEnumeration Don't include methods (signals and slots) when enumerating the object's properties. */ +class QScriptSyntaxCheckResultPrivate +{ +public: + QScriptSyntaxCheckResultPrivate() { ref = 0; } + ~QScriptSyntaxCheckResultPrivate() {} + + QScriptSyntaxCheckResult::State state; + int errorColumnNumber; + int errorLineNumber; + QString errorMessage; + QBasicAtomicInt ref; +}; + class QScriptTypeInfo { public: @@ -1961,12 +1974,33 @@ bool QScriptEnginePrivate::canEvaluate(const QString &program) */ QScriptSyntaxCheckResult QScriptEngine::checkSyntax(const QString &program) { - qWarning("QScriptEngine::checkSyntax() not implemented"); - // use our own parser or JSC::Interpreter::checkSyntax() - Q_UNUSED(program); - return QScriptSyntaxCheckResult(); + return QScriptEnginePrivate::checkSyntax(program); +} + +QScriptSyntaxCheckResult QScriptEnginePrivate::checkSyntax(const QString &program) +{ + QScript::SyntaxChecker checker; + QScript::SyntaxChecker::Result result = checker.checkSyntax(program); + QScriptSyntaxCheckResultPrivate *p = new QScriptSyntaxCheckResultPrivate(); + switch (result.state) { + case QScript::SyntaxChecker::Error: + p->state = QScriptSyntaxCheckResult::Error; + break; + case QScript::SyntaxChecker::Intermediate: + p->state = QScriptSyntaxCheckResult::Intermediate; + break; + case QScript::SyntaxChecker::Valid: + p->state = QScriptSyntaxCheckResult::Valid; + break; + } + p->errorLineNumber = result.errorLineNumber; + p->errorColumnNumber = result.errorColumnNumber; + p->errorMessage = result.errorMessage; + return QScriptSyntaxCheckResult(p); } + + /*! Evaluates \a program, using \a lineNumber as the base line number, and returns the result of the evaluation. @@ -3444,19 +3478,6 @@ QScriptValue QScriptEngine::objectById(qint64 id) const \value Valid The program is a syntactically correct Qt Script program. */ -class QScriptSyntaxCheckResultPrivate -{ -public: - QScriptSyntaxCheckResultPrivate() { ref = 0; } - ~QScriptSyntaxCheckResultPrivate() {} - - QScriptSyntaxCheckResult::State state; - int errorColumnNumber; - int errorLineNumber; - QString errorMessage; - QBasicAtomicInt ref; -}; - /*! Constructs a new QScriptSyntaxCheckResult from the \a other result. */ diff --git a/src/script/api/qscriptengine.h b/src/script/api/qscriptengine.h index 3b6ed33..da443c0 100644 --- a/src/script/api/qscriptengine.h +++ b/src/script/api/qscriptengine.h @@ -118,6 +118,7 @@ private: Q_DECLARE_PRIVATE(QScriptSyntaxCheckResult) friend class QScriptEngine; + friend class QScriptEnginePrivate; }; class Q_SCRIPT_EXPORT QScriptEngine diff --git a/src/script/api/qscriptengine_p.h b/src/script/api/qscriptengine_p.h index 6062e76..545a8c8 100644 --- a/src/script/api/qscriptengine_p.h +++ b/src/script/api/qscriptengine_p.h @@ -64,6 +64,8 @@ class QScriptValuePrivate; class QScriptTypeInfo; class QScriptEngineAgent; +class QScriptSyntaxCheckResult; + class QScriptEngine; class QScriptEnginePrivate #ifndef QT_NO_QOBJECT @@ -116,6 +118,7 @@ public: JSC::JSValue newQMetaObject(const QMetaObject *metaObject, JSC::JSValue ctor); + static QScriptSyntaxCheckResult checkSyntax(const QString &program); static bool canEvaluate(const QString &program); static bool convertToNativeQObject(const QScriptValue &value, const QByteArray &targetType, diff --git a/tests/auto/qscriptengine/tst_qscriptengine.cpp b/tests/auto/qscriptengine/tst_qscriptengine.cpp index 8152732..65da950 100644 --- a/tests/auto/qscriptengine/tst_qscriptengine.cpp +++ b/tests/auto/qscriptengine/tst_qscriptengine.cpp @@ -963,7 +963,6 @@ void tst_QScriptEngine::checkSyntax_data() void tst_QScriptEngine::checkSyntax() { - QSKIP("Not implemented", SkipAll); QFETCH(QString, code); QFETCH(int, expectedState); QFETCH(int, errorLineNumber); -- cgit v0.12