diff -r 4f2f89ce4247 -r 303757a437d3 WebKit/qt/tests/qwebplugindatabase/tst_qwebplugindatabase.cpp --- a/WebKit/qt/tests/qwebplugindatabase/tst_qwebplugindatabase.cpp Fri Sep 17 09:02:29 2010 +0300 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,437 +0,0 @@ -/* - Copyright (C) 2009 Jakub Wieczorek - - This library is free software; you can redistribute it and/or - modify it under the terms of the GNU Library General Public - License as published by the Free Software Foundation; either - version 2 of the License, or (at your option) any later version. - - This library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Library General Public License for more details. - - You should have received a copy of the GNU Library General Public License - along with this library; see the file COPYING.LIB. If not, write to - the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, - Boston, MA 02110-1301, USA. -*/ - -#include - -#include -#include -#include -#include -#include -#include - -class tst_QWebPluginDatabase : public QObject -{ - Q_OBJECT - -private slots: - void installedPlugins(); - void searchPaths(); - void null_data(); - void null(); - void pluginForMimeType(); - void enabled(); - void operatorequal_data(); - void operatorequal(); - void preferredPlugin(); - void operatorassign_data(); - void operatorassign(); -}; - -typedef QWebPluginInfo::MimeType MimeType; - -void tst_QWebPluginDatabase::installedPlugins() -{ - QWebPage page; - page.settings()->setAttribute(QWebSettings::PluginsEnabled, true); - QWebFrame* frame = page.mainFrame(); - - QVariantMap jsPluginsMap = frame->evaluateJavaScript("window.navigator.plugins").toMap(); - QList plugins = QWebSettings::pluginDatabase()->plugins(); - QCOMPARE(plugins, QWebSettings::pluginDatabase()->plugins()); - - int length = jsPluginsMap["length"].toInt(); - QCOMPARE(length, plugins.count()); - - for (int i = 0; i < length; ++i) { - QWebPluginInfo plugin = plugins.at(i); - - QVariantMap jsPlugin = frame->evaluateJavaScript(QString("window.navigator.plugins[%1]").arg(i)).toMap(); - QString name = jsPlugin["name"].toString(); - QString description = jsPlugin["description"].toString(); - QString fileName = jsPlugin["filename"].toString(); - - QCOMPARE(plugin.name(), name); - QCOMPARE(plugin.description(), description); - QCOMPARE(QFileInfo(plugin.path()).fileName(), fileName); - - QList mimeTypes; - int mimeTypesCount = jsPlugin["length"].toInt(); - - for (int j = 0; j < mimeTypesCount; ++j) { - QVariantMap jsMimeType = frame->evaluateJavaScript(QString("window.navigator.plugins[%1][%2]").arg(i).arg(j)).toMap(); - - MimeType mimeType; - mimeType.name = jsMimeType["type"].toString(); - mimeType.description = jsMimeType["description"].toString(); - mimeType.fileExtensions = jsMimeType["suffixes"].toString().split(',', QString::SkipEmptyParts); - - mimeTypes.append(mimeType); - QVERIFY(plugin.supportsMimeType(mimeType.name)); - } - - QCOMPARE(plugin.mimeTypes(), mimeTypes); - - QVERIFY(!plugin.isNull()); - QVERIFY(plugin.isEnabled()); - } -} - -void tst_QWebPluginDatabase::searchPaths() -{ - QWebPluginDatabase* database = QWebSettings::pluginDatabase(); - QList plugins = database->plugins(); - QStringList directories = database->searchPaths(); - QCOMPARE(QWebPluginDatabase::defaultSearchPaths(), directories); - - database->setSearchPaths(directories); - QCOMPARE(QWebPluginDatabase::defaultSearchPaths(), directories); - QCOMPARE(database->searchPaths(), directories); - QCOMPARE(database->plugins(), plugins); - database->refresh(); - QCOMPARE(database->plugins(), plugins); - - database->setSearchPaths(QStringList()); - QCOMPARE(QWebPluginDatabase::defaultSearchPaths(), directories); - QCOMPARE(database->searchPaths(), QStringList()); - QCOMPARE(database->plugins().count(), 0); - - database->setSearchPaths(directories); - QCOMPARE(database->searchPaths(), directories); - database->addSearchPath(QDir::tempPath()); - QCOMPARE(database->searchPaths().count(), directories.count() + 1); - QVERIFY(database->searchPaths().contains(QDir::tempPath())); - directories.append(QDir::tempPath()); - QCOMPARE(database->searchPaths(), directories); - - // As an empty set of search paths has been set, the database has been rebuilt - // from scratch after bringing the old path set back. - // Because the QWebPlugins no longer point to the same PluginPackages, - // the list is also no longer equal to the older one, even though it contains - // the same information. - QCOMPARE(database->plugins().count(), plugins.count()); - plugins = database->plugins(); - QCOMPARE(database->plugins(), plugins); - - for (int i = (directories.count() - 1); i >= 0; --i) { - QDir directory(directories.at(i)); - if (!directory.exists() || !directory.count()) - directories.removeAt(i); - } - - database->setSearchPaths(directories); - QCOMPARE(database->plugins(), plugins); - database->refresh(); - QCOMPARE(database->plugins(), plugins); - - database->setSearchPaths(QWebPluginDatabase::defaultSearchPaths()); - directories = QWebPluginDatabase::defaultSearchPaths(); - QCOMPARE(QWebPluginDatabase::defaultSearchPaths(), directories); - QCOMPARE(database->searchPaths(), directories); - QCOMPARE(database->plugins(), plugins); -} - -Q_DECLARE_METATYPE(QWebPluginInfo) -void tst_QWebPluginDatabase::null_data() -{ - QTest::addColumn("plugin"); - QTest::addColumn("null"); - - QTest::newRow("null") << QWebPluginInfo() << true; - QTest::newRow("foo") << QWebSettings::pluginDatabase()->pluginForMimeType("foobarbaz") << true; - - QList plugins = QWebSettings::pluginDatabase()->plugins(); - for (int i = 0; i < plugins.count(); ++i) - QTest::newRow(QString::number(i).toUtf8().constData()) << plugins.at(i) << false; -} - -void tst_QWebPluginDatabase::null() -{ - QFETCH(QWebPluginInfo, plugin); - QFETCH(bool, null); - - QCOMPARE(plugin.isNull(), null); -} - -void tst_QWebPluginDatabase::pluginForMimeType() -{ - QMultiMap pluginsMap; - QWebPluginDatabase* database = QWebSettings::pluginDatabase(); - QList plugins = database->plugins(); - - for (int i = 0; i < plugins.count(); ++i) { - QWebPluginInfo plugin = plugins.at(i); - - QList mimeTypes = plugin.mimeTypes(); - for (int j = 0; j < mimeTypes.count(); ++j) { - QString mimeType = mimeTypes.at(j).name; - pluginsMap.insert(mimeType, plugin); - QVERIFY(plugin.supportsMimeType(mimeType)); - } - } - - for (int i = 0; i < plugins.count(); ++i) { - QWebPluginInfo plugin = plugins.at(i); - - QList mimeTypes = plugin.mimeTypes(); - for (int j = 0; j < mimeTypes.count(); ++j) { - QString mimeType = mimeTypes.at(j).name; - - QVERIFY(pluginsMap.count(mimeType) > 0); - if (pluginsMap.count(mimeType) > 1) - continue; - - QWebPluginInfo pluginForMimeType = database->pluginForMimeType(mimeType); - QCOMPARE(pluginForMimeType, plugin); - database->setSearchPaths(database->searchPaths()); - QCOMPARE(pluginForMimeType, plugin); - QCOMPARE(pluginForMimeType, database->pluginForMimeType(mimeType.toUpper())); - QCOMPARE(pluginForMimeType, database->pluginForMimeType(mimeType.toLower())); - QVERIFY(plugin.supportsMimeType(mimeType)); - QVERIFY(!pluginForMimeType.isNull()); - QVERIFY(!plugin.isNull()); - } - } -} - -void tst_QWebPluginDatabase::enabled() -{ - QMultiMap pluginsMap; - QWebPluginDatabase* database = QWebSettings::pluginDatabase(); - QList plugins = database->plugins(); - - for (int i = 0; i < plugins.count(); ++i) { - QWebPluginInfo plugin = plugins.at(i); - - QList mimeTypes = plugin.mimeTypes(); - for (int j = 0; j < mimeTypes.count(); ++j) { - QString mimeType = mimeTypes.at(j).name; - pluginsMap.insert(mimeType, plugin); - QVERIFY(plugin.supportsMimeType(mimeType)); - } - } - - QMultiMap::iterator it = pluginsMap.begin(); - while (it != pluginsMap.end()) { - QString mimeType = it.key(); - QWebPluginInfo plugin = it.value(); - QWebPluginInfo pluginForMimeType = database->pluginForMimeType(mimeType); - - QVERIFY(pluginsMap.count(mimeType) > 0); - - if (pluginsMap.count(mimeType) == 1) { - QCOMPARE(plugin, pluginForMimeType); - - QVERIFY(plugin.isEnabled()); - QVERIFY(pluginForMimeType.isEnabled()); - plugin.setEnabled(false); - QVERIFY(!plugin.isEnabled()); - QVERIFY(!pluginForMimeType.isEnabled()); - } else { - QVERIFY(plugin.isEnabled()); - QVERIFY(pluginForMimeType.isEnabled()); - plugin.setEnabled(false); - QVERIFY(!plugin.isEnabled()); - } - - QVERIFY(!plugin.isNull()); - QVERIFY(!pluginForMimeType.isNull()); - - QWebPluginInfo pluginForMimeType2 = database->pluginForMimeType(mimeType); - if (pluginsMap.count(mimeType) == 1) { - QVERIFY(pluginForMimeType2 != plugin); - QVERIFY(pluginForMimeType2.isNull()); - } else { - QVERIFY(pluginForMimeType2 != plugin); - QVERIFY(!pluginForMimeType2.isNull()); - } - - plugin.setEnabled(true); - - ++it; - } -} - -void tst_QWebPluginDatabase::operatorequal_data() -{ - QTest::addColumn("first"); - QTest::addColumn("second"); - QTest::addColumn("equal"); - - QWebPluginDatabase* database = QWebSettings::pluginDatabase(); - QTest::newRow("null") << QWebPluginInfo() << QWebPluginInfo() << true; - QTest::newRow("application/x-shockwave-flash") << database->pluginForMimeType("application/x-shockwave-flash") - << database->pluginForMimeType("application/x-shockwave-flash") << true; - QTest::newRow("foo/bar-baz") << database->pluginForMimeType("foo/bar-baz") - << database->pluginForMimeType("foo/bar-baz") << true; - - QList plugins = database->plugins(); - for (int i = 0; i < (plugins.count() - 1); ++i) { - QWebPluginInfo first = plugins.at(i); - QWebPluginInfo second = plugins.at(i + 1); - - QTest::newRow(QString("%1==%2").arg(first.name(), second.name()).toUtf8().constData()) - << first << second << false; - } -} - -void tst_QWebPluginDatabase::operatorequal() -{ - QFETCH(QWebPluginInfo, first); - QFETCH(QWebPluginInfo, second); - QFETCH(bool, equal); - - QCOMPARE(first == second, equal); -} - -void tst_QWebPluginDatabase::preferredPlugin() -{ - QMultiMap pluginsMap; - QWebPluginDatabase* database = QWebSettings::pluginDatabase(); - QList plugins = database->plugins(); - - for (int i = 0; i < plugins.count(); ++i) { - QWebPluginInfo plugin = plugins.at(i); - - QList mimeTypes = plugin.mimeTypes(); - for (int j = 0; j < mimeTypes.count(); ++j) { - QString mimeType = mimeTypes.at(j).name; - pluginsMap.insert(mimeType, plugin); - } - } - - QMultiMap::iterator it = pluginsMap.begin(); - while (it != pluginsMap.end()) { - QString mimeType = it.key(); - - if (pluginsMap.count(mimeType) > 1) { - QList pluginsForMimeType = pluginsMap.values(mimeType); - QWebPluginInfo plugin = database->pluginForMimeType(mimeType); - QVERIFY(plugin.supportsMimeType(mimeType)); - - pluginsForMimeType.removeAll(plugin); - for (int i = 0; i < pluginsForMimeType.count(); ++i) { - QWebPluginInfo anotherPlugin = pluginsForMimeType.at(i); - QVERIFY(plugin.supportsMimeType(mimeType)); - QVERIFY(plugin != anotherPlugin); - - QCOMPARE(database->pluginForMimeType(mimeType), plugin); - database->setPreferredPluginForMimeType(mimeType, anotherPlugin); - QCOMPARE(database->pluginForMimeType(mimeType), anotherPlugin); - - anotherPlugin.setEnabled(false); - QCOMPARE(database->pluginForMimeType(mimeType), plugin); - - anotherPlugin.setEnabled(true); - QCOMPARE(database->pluginForMimeType(mimeType), anotherPlugin); - database->setSearchPaths(database->searchPaths()); - QCOMPARE(database->pluginForMimeType(mimeType), anotherPlugin); - - database->setPreferredPluginForMimeType(mimeType, QWebPluginInfo()); - QCOMPARE(database->pluginForMimeType(mimeType), plugin); - } - } else { - QWebPluginInfo plugin = database->pluginForMimeType(mimeType); - QCOMPARE(pluginsMap.value(mimeType), plugin); - - database->setPreferredPluginForMimeType(mimeType, plugin); - QCOMPARE(database->pluginForMimeType(mimeType), plugin); - - plugin.setEnabled(false); - QCOMPARE(database->pluginForMimeType(mimeType), QWebPluginInfo()); - plugin.setEnabled(true); - - database->setPreferredPluginForMimeType(mimeType, QWebPluginInfo()); - QCOMPARE(database->pluginForMimeType(mimeType), plugin); - } - - ++it; - } - - if (pluginsMap.keys().count() >= 2) { - QStringList mimeTypes = pluginsMap.uniqueKeys(); - - QString mimeType1 = mimeTypes.at(0); - QString mimeType2 = mimeTypes.at(1); - QWebPluginInfo plugin1 = database->pluginForMimeType(mimeType1); - QWebPluginInfo plugin2 = database->pluginForMimeType(mimeType2); - - int i = 2; - while (plugin2.supportsMimeType(mimeType1) - && !mimeType2.isEmpty() - && i < mimeTypes.count()) { - mimeType2 = mimeTypes.at(i); - plugin2 = database->pluginForMimeType(mimeType2); - ++i; - } - - plugin1 = database->pluginForMimeType(mimeType1); - QVERIFY(plugin1.supportsMimeType(mimeType1)); - QVERIFY(!plugin1.isNull()); - plugin2 = database->pluginForMimeType(mimeType2); - QVERIFY(plugin2.supportsMimeType(mimeType2)); - QVERIFY(!plugin2.isNull()); - - database->setPreferredPluginForMimeType(mimeType2, plugin1); - QVERIFY(!plugin1.supportsMimeType(mimeType2)); - QCOMPARE(database->pluginForMimeType(mimeType2), plugin2); - - database->setPreferredPluginForMimeType(mimeType1, plugin1); - QVERIFY(!plugin2.supportsMimeType(mimeType1)); - QCOMPARE(database->pluginForMimeType(mimeType2), plugin2); - } -} - -void tst_QWebPluginDatabase::operatorassign_data() -{ - QTest::addColumn("first"); - QTest::addColumn("second"); - - QWebPluginDatabase* database = QWebSettings::pluginDatabase(); - QTest::newRow("null") << QWebPluginInfo() << QWebPluginInfo(); - - QList plugins = database->plugins(); - for (int i = 0; i < (plugins.count() - 1); ++i) { - QWebPluginInfo first = plugins.at(i); - QWebPluginInfo second = plugins.at(i + 1); - - QTest::newRow(QString("%1=%2").arg(first.name(), second.name()).toUtf8().constData()) << first << second; - } -} - -void tst_QWebPluginDatabase::operatorassign() -{ - QFETCH(QWebPluginInfo, first); - QFETCH(QWebPluginInfo, second); - - QWebPluginInfo info; - QCOMPARE(info.mimeTypes(), QList()); - QCOMPARE(info = first, first); - QCOMPARE(info, first); - QCOMPARE(info.mimeTypes(), first.mimeTypes()); - QCOMPARE(info = second, second); - QCOMPARE(info, second); - QCOMPARE(info.mimeTypes(), second.mimeTypes()); - QCOMPARE(info = QWebPluginInfo(), QWebPluginInfo()); - QCOMPARE(info.mimeTypes(), QList()); -} - -QTEST_MAIN(tst_QWebPluginDatabase) - -#include "tst_qwebplugindatabase.moc"