void tst_QScriptExtensionPlugin::importStaticPlugin() { Q_INIT_RESOURCE(staticplugin); QScriptEngine eng; QVERIFY(eng.availableExtensions().contains("static")); QVERIFY(eng.importExtension("static").isUndefined()); QCOMPARE(eng.importedExtensions().size(), 1); QCOMPARE(eng.importedExtensions().at(0), QString::fromLatin1("static")); QVERIFY(eng.availableExtensions().contains("static")); QVERIFY(eng.globalObject().property("pluginKey").equals("static")); // Verify that :/qtscriptextension/static/__init__.js was evaluated. QVERIFY(eng.evaluate("spy").isObject()); QVERIFY(eng.evaluate("spy.extension").equals("static")); QVERIFY(eng.evaluate("spy.setupPackage").isFunction()); QVERIFY(eng.evaluate("spy.postInit").isUndefined()); QVERIFY(eng.evaluate("postInitWasCalled").isBool()); QVERIFY(eng.evaluate("postInitWasCalled").toBool()); // Extensions can't be imported multiple times. eng.globalObject().setProperty("pluginKey", QScriptValue()); QVERIFY(eng.importExtension("static").isUndefined()); QCOMPARE(eng.importedExtensions().size(), 1); QVERIFY(!eng.globalObject().property("pluginKey").isValid()); }
bool init() { if( m_script->action()->hadError() ) m_script->action()->clearError(); delete m_engine; m_engine = new QScriptEngine(); // load the Qross QScriptExtensionPlugin plugin that provides // us a bridge between Qross and QtScript. See here plugin.h m_engine->importExtension("qross"); if( m_engine->hasUncaughtException() ) { handleException(); delete m_engine; m_engine = 0; return false; } // the Qross QScriptExtensionPlugin exports the "Qross" property. QScriptValue global = m_engine->globalObject(); m_qross = global.property("Qross"); Q_ASSERT( m_qross.isQObject() ); Q_ASSERT( ! m_engine->hasUncaughtException() ); // Attach our Qross::Action instance to be able to access it in // scripts. Just like at the Kjs-backend we publish our own // action as "self". m_self = m_engine->newQObject( m_script->action() ); global.setProperty("self", m_self, QScriptValue::ReadOnly|QScriptValue::Undeletable); { // publish the global objects. QHash< QString, QObject* > objects = Manager::self().objects(); QHash< QString, QObject* >::Iterator it(objects.begin()), end(objects.end()); for(; it != end; ++it) global.setProperty(it.key(), m_engine->newQObject( it.value() ) ); } { // publish the local objects. QHash< QString, QObject* > objects = m_script->action()->objects(); QHash< QString, QObject* >::Iterator it(objects.begin()), end(objects.end()); for(; it != end; ++it) { copyEnumsToProperties( it.value() ); global.setProperty(it.key(), m_engine->newQObject( it.value() ) ); } } return ! m_engine->hasUncaughtException(); }
int main(int argc, char **argv) { QApplication *app = new QApplication(argc, argv); app->setApplicationName("kross"); app->setApplicationVersion("0.1"); app->setOrganizationDomain("dipe.org"); QScriptEngine *engine = new QScriptEngine(); engine->installTranslatorFunctions(); /*K4AboutData about("kross",0,ki18n("Kross"),"0.1", ki18n("KDE application to run Kross scripts."), K4AboutData::License_LGPL, ki18n("(C) 2006 Sebastian Sauer"), ki18n("Run Kross scripts."), "http://kross.dipe.org","*****@*****.**");*/ //about.addAuthor(ki18n("Sebastian Sauer"), ki18n("Author"), "*****@*****.**"); // Initialize command line args // Tell which options are supported and parse them. QCommandLineParser parser; parser.setApplicationDescription(QCoreApplication::translate("main", "KDE application to run Kross scripts.")); parser.addHelpOption(); parser.addOption(QCommandLineOption(QStringList() << "+file", QCoreApplication::translate("main", "Scriptfile"))); parser.process(*app); const QStringList args = parser.positionalArguments(); // If no options are defined. if (args.count() < 1) { parser.showHelp(); //std::cout << "Syntax: " << "kross" << " scriptfile1 [scriptfile2] [scriptfile3] ..." << std::endl; return -1; } QScriptValue global = engine->globalObject(); //qDebug()<<"QLibraryInfo::PluginsPath="<<QLibraryInfo::location(QLibraryInfo::PluginsPath); engine->importExtension("kross").toString(); foreach (const QString &file, args) { runScriptFile(engine, file); }
int main(int argc, char **argv) { QCoreApplication app( argc, argv ); QStringList allowedBindings; allowedBindings << "qt.core" << "qt.gui" << "qt.sql" << "qt.xml" << "qt.uitools" << "qt.network" << "qt.webkit"; QScriptEngine engine; foreach( QString binding, allowedBindings ) { QScriptValue error = engine.importExtension( binding ); if( error.isUndefined() ) { // undefined indiciates success continue; } qDebug() << "Extension" << binding << "not found:" << error.toString(); qDebug() << "Available extensions:" << engine.availableExtensions(); return FAIL; }
void tst_QScriptExtensionPlugin::importSimplePlugin() { QScriptEngine eng; QCoreApplication::addLibraryPath("plugins"); QVERIFY(eng.importedExtensions().isEmpty()); QStringList available = eng.availableExtensions(); QVERIFY(available.contains("simple")); QVERIFY(available.contains("simple.foo")); QVERIFY(available.contains("simple.foo.bar")); QScriptValue extensionObject; { QVERIFY(eng.importExtension("simple").isUndefined()); QCOMPARE(eng.importedExtensions().size(), 1); QCOMPARE(eng.importedExtensions().at(0), QString::fromLatin1("simple")); QVERIFY(eng.availableExtensions().contains("simple")); QVERIFY(eng.globalObject().property("pluginKey").equals("simple")); QVERIFY(eng.globalObject().property("package").isObject()); extensionObject = eng.globalObject().property("simple"); QVERIFY(extensionObject.isObject()); QVERIFY(extensionObject.equals(eng.globalObject().property("package"))); } { QVERIFY(eng.importExtension("simple.foo").isUndefined()); QCOMPARE(eng.importedExtensions().size(), 2); QCOMPARE(eng.importedExtensions().at(1), QString::fromLatin1("simple.foo")); QVERIFY(eng.availableExtensions().contains("simple.foo")); QVERIFY(eng.globalObject().property("pluginKey").equals("simple.foo")); QVERIFY(eng.globalObject().property("package").isObject()); QVERIFY(!extensionObject.equals(eng.globalObject().property("package"))); QVERIFY(extensionObject.equals(eng.globalObject().property("simple"))); QVERIFY(extensionObject.property("foo").isObject()); QVERIFY(extensionObject.property("foo").equals(eng.globalObject().property("package"))); } { QVERIFY(eng.importExtension("simple.foo.bar").isUndefined()); QCOMPARE(eng.importedExtensions().size(), 3); QCOMPARE(eng.importedExtensions().at(2), QString::fromLatin1("simple.foo.bar")); QVERIFY(eng.availableExtensions().contains("simple.foo.bar")); QVERIFY(eng.globalObject().property("pluginKey").equals("simple.foo.bar")); QVERIFY(eng.globalObject().property("package").isObject()); QVERIFY(!extensionObject.equals(eng.globalObject().property("package"))); QVERIFY(extensionObject.equals(eng.globalObject().property("simple"))); QVERIFY(extensionObject.property("foo").property("bar").isObject()); QVERIFY(extensionObject.property("foo").property("bar").equals(eng.globalObject().property("package"))); } // Extensions can't be imported multiple times. eng.globalObject().setProperty("pluginKey", QScriptValue()); QVERIFY(eng.importExtension("simple").isUndefined()); QCOMPARE(eng.importedExtensions().size(), 3); QVERIFY(!eng.globalObject().property("pluginKey").isValid()); QVERIFY(eng.importExtension("simple.foo").isUndefined()); QCOMPARE(eng.importedExtensions().size(), 3); QVERIFY(!eng.globalObject().property("pluginKey").isValid()); QVERIFY(eng.importExtension("simple.foo.bar").isUndefined()); QCOMPARE(eng.importedExtensions().size(), 3); QVERIFY(!eng.globalObject().property("pluginKey").isValid()); }