--- 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 <faw217@gmail.com>
-
- 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 <QtTest/QtTest>
-
-#include <qdir.h>
-#include <qwebframe.h>
-#include <qwebpage.h>
-#include <qwebplugindatabase.h>
-#include <qwebsettings.h>
-#include <qvariant.h>
-
-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<QWebPluginInfo> 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<MimeType> 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<QWebPluginInfo> 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<QWebPluginInfo>("plugin");
- QTest::addColumn<bool>("null");
-
- QTest::newRow("null") << QWebPluginInfo() << true;
- QTest::newRow("foo") << QWebSettings::pluginDatabase()->pluginForMimeType("foobarbaz") << true;
-
- QList<QWebPluginInfo> 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<QString, QWebPluginInfo> pluginsMap;
- QWebPluginDatabase* database = QWebSettings::pluginDatabase();
- QList<QWebPluginInfo> plugins = database->plugins();
-
- for (int i = 0; i < plugins.count(); ++i) {
- QWebPluginInfo plugin = plugins.at(i);
-
- QList<MimeType> 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<MimeType> 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<QString, QWebPluginInfo> pluginsMap;
- QWebPluginDatabase* database = QWebSettings::pluginDatabase();
- QList<QWebPluginInfo> plugins = database->plugins();
-
- for (int i = 0; i < plugins.count(); ++i) {
- QWebPluginInfo plugin = plugins.at(i);
-
- QList<MimeType> 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<QString, QWebPluginInfo>::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<QWebPluginInfo>("first");
- QTest::addColumn<QWebPluginInfo>("second");
- QTest::addColumn<bool>("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<QWebPluginInfo> 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<QString, QWebPluginInfo> pluginsMap;
- QWebPluginDatabase* database = QWebSettings::pluginDatabase();
- QList<QWebPluginInfo> plugins = database->plugins();
-
- for (int i = 0; i < plugins.count(); ++i) {
- QWebPluginInfo plugin = plugins.at(i);
-
- QList<MimeType> mimeTypes = plugin.mimeTypes();
- for (int j = 0; j < mimeTypes.count(); ++j) {
- QString mimeType = mimeTypes.at(j).name;
- pluginsMap.insert(mimeType, plugin);
- }
- }
-
- QMultiMap<QString, QWebPluginInfo>::iterator it = pluginsMap.begin();
- while (it != pluginsMap.end()) {
- QString mimeType = it.key();
-
- if (pluginsMap.count(mimeType) > 1) {
- QList<QWebPluginInfo> 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<QWebPluginInfo>("first");
- QTest::addColumn<QWebPluginInfo>("second");
-
- QWebPluginDatabase* database = QWebSettings::pluginDatabase();
- QTest::newRow("null") << QWebPluginInfo() << QWebPluginInfo();
-
- QList<QWebPluginInfo> 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<MimeType>());
- 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<MimeType>());
-}
-
-QTEST_MAIN(tst_QWebPluginDatabase)
-
-#include "tst_qwebplugindatabase.moc"