void SVGScriptElement::executeScript(Document *document, StringImpl *jsCode) { if(!document || !jsCode) return; #if 0 Ecma *ecmaEngine = document->ecmaEngine(); if(!ecmaEngine) return; KJS::Interpreter::lock(); // Run script KJS::Completion comp = ecmaEngine->evaluate(jsCode.deprecatedString(), ecmaEngine->globalObject()); if(comp.complType() == KJS::Throw) { KJS::ExecState *exec = ecmaEngine->globalExec(); KJS::JSValue *exVal = comp.value(); int lineno = -1; if(exVal->isObject()) { KJS::JSValue *lineVal = static_cast<KJS::JSObject *>(exVal)->get(exec, "line"); if(lineVal->type() == KJS::NumberType) lineno = int(lineVal->toNumber(exec)); } // Fire ERROR_EVENT upon errors... SVGDocument *svgDocument = static_cast<SVGDocument *>(document); if(svgDocument && document->hasListenerType(ERROR_EVENT)) { RefPtr<Event> event = svgDocument->createEvent("SVGEvents"); event->initEvent(EventNames::errorEvent, false, false); svgDocument->dispatchRecursiveEvent(event.get(), svgDocument->lastChild()); } kdDebug() << "[SVGScriptElement] Evaluation error, line " << (lineno != -1 ? DeprecatedString::number(lineno) : DeprecatedString::fromLatin1("N/A")) << " " << exVal->toString(exec).deprecatedString() << endl; } else if(comp.complType() == KJS::ReturnValue) kdDebug() << "[SVGScriptElement] Return value: " << comp.value()->toString(ecmaEngine->globalExec()).deprecatedString() << endl; else if(comp.complType() == KJS::Normal) kdDebug() << "[SVGScriptElement] Evaluated ecma script!" << endl; KJS::Interpreter::unlock(); #else if (jsCode) // Hack to close memory leak due to #if 0 String(jsCode); #endif }
bool JSConsoleWidget::execute( const QString &cmd, const KJS::Value &self ) { KJS::Completion jsres; bool ok = js->execute( jsres, cmd, self ); // Executed ok if ( ok ) { // No return value if ( !jsres.isValueCompletion() ) return ok; // Return value KJS::Value ret = jsres.value(); KJS::UString s = ret.toString( js->globalExec() ); if ( s.isNull() ) { warn( i18n("Success, but return value cannot be displayed") ); return ok; } QString txt = s.qstring(); txt = txt.replace( QChar('\n'), "<br>" ); println( txt ); return ok; } // Handle errors KJS::ComplType ct = jsres.complType(); if ( (ct == KJS::Throw) || (ct == KJS::Break) || ct == KJS::Continue ) { KJS::UString s = jsres.value().toString( js->globalExec() ); if ( !s.isNull() ) warn( s.qstring() ); else warn( i18n("Unspecified error") ); } else { kdDebug(80001) << "jsconsolewidget: Unknown completion error, " << ct << endl; warn( i18n("Unknown error returned, completion type %1").arg(ct) ); } return ok; }
void ECMAscriptTest::runAllTests() { static const QByteArray include = "$INCLUDE(\""; QFETCH(QString, filename); QByteArray expectedError; QFile input( filename ); foreach ( const QByteArray &skip, skips.keys() ) { if ( skip == QTest::currentDataTag() ) QSKIP( skips[ skip ], SkipSingle ); } QVERIFY( input.open( QIODevice::ReadOnly ) ); const QByteArray testdata = input.readAll(); QVERIFY( ! testdata.isEmpty() ); RefPtr<KJS::Interpreter> interp = new KJS::Interpreter(global); KJS::Interpreter::setShouldPrintExceptions(true); QByteArray testscript; // test is expected to fail if ( testdata.indexOf( "@negative" ) >= 0 ) { expectedError = getTextProperty( "@negative", testdata ); if ( expectedError.isEmpty() ) expectedError = "."; } int from = 0; while ( ( from = testdata.indexOf( include, from ) ) >= 0 ) { int endq = testdata.indexOf( "\"", from + include.length() ); QVERIFY( endq >= 0 ); const QByteArray includeFile = testdata.mid( from + include.length(), endq - from - include.length() ); if ( ! includes.contains( includeFile ) ) QVERIFY( loadInclude( includeFile ) ); testscript += includes[ includeFile ]; from = endq; } testscript += testrunner; testscript += testdata; const QFileInfo info( input ); const QString scriptutf = QString::fromUtf8( testscript.constData() ); KJS::Completion completion = interp->evaluate(info.fileName().toAscii().constData(), 0, scriptutf); const bool knownBroken = expectedBroken.contains( QString::fromAscii( QTest::currentDataTag() ) ); if ( expectedError.isEmpty() ) { ECMATEST_VERIFY( completion.complType() != KJS::Throw ); } else { if ( knownBroken && completion.complType() != KJS::Throw ) { QEXPECT_FAIL(QTest::currentDataTag(), "It is known that KJS doesn't pass this test", Abort); m_failed++; } QCOMPARE( completion.complType(), KJS::Throw ); QVERIFY( completion.value() != NULL ); const QString eMsg = exceptionToString( interp->execState(), completion.value() ); if ( expectedError == "^((?!NotEarlyError).)*$" ) { ECMATEST_VERIFY( eMsg.indexOf( "NotEarlyError" ) == -1 ); } else if ( expectedError == "." ) { // means "every exception passes } else { ECMATEST_VERIFY( eMsg.indexOf( expectedError ) >= 0 ); } } }
bool KJSEmbedPart::execute( KJS::Completion &result, const QString &script, const KJS::Value &self ) { KJS::Value val( self ); result = js->evaluate( script, self.isNull() ? partobj : val ); return (result.complType() == KJS::Normal) || (result.complType() == KJS::ReturnValue); }