From 1500f2202a8e0b3340c31c29a84bda7cffcbe234 Mon Sep 17 00:00:00 2001 From: l10n daemon script Date: Fri, 3 Aug 2018 05:36:42 +0200 Subject: [PATCH 1/3] SVN_SILENT made messages (.desktop file) - always resolve ours In case of conflict in i18n, keep the version of the branch "ours" To resolve a particular conflict, "git checkout --ours path/to/file.desktop" --- linux/applications/org.kde.falkon.desktop | 2 ++ 1 file changed, 2 insertions(+) diff --git a/linux/applications/org.kde.falkon.desktop b/linux/applications/org.kde.falkon.desktop index feed6f2da..2b73cb39d 100644 --- a/linux/applications/org.kde.falkon.desktop +++ b/linux/applications/org.kde.falkon.desktop @@ -46,6 +46,7 @@ Comment[nl]=Een snelle en veilige webbrowser Comment[nn]=Ein kjapp og sikker nettlesar Comment[pl]=Szybka i bezpieczna przeglądarka sieciowa Comment[pt]=Um navegador Web rápido e seguro +Comment[pt_BR]=Um navegar Web rápido e seguro Comment[sv]=En snabb och säker webbläsare Comment[uk]=Проста і безпечна програма для перегляду інтернету Comment[x-test]=xxA fast and secure web browserxx @@ -156,6 +157,7 @@ Name[nl]=Privébrowsing starten Name[nn]=Start privat nettlesing Name[pl]=Rozpocznij prywatne przeglądanie Name[pt]=Iniciar a navegação privada +Name[pt_BR]=Iniciar navegação privada Name[sv]=Starta privat webbläsning Name[uk]=Конфіденційний перегляд Name[x-test]=xxStart private browsingxx From d1400db7d6696c1936b3183b64c51fe2ec3be78c Mon Sep 17 00:00:00 2001 From: l10n daemon script Date: Sun, 5 Aug 2018 05:29:00 +0200 Subject: [PATCH 2/3] SVN_SILENT made messages (.desktop file) - always resolve ours In case of conflict in i18n, keep the version of the branch "ours" To resolve a particular conflict, "git checkout --ours path/to/file.desktop" --- src/lib/adblock/metadata.desktop | 2 ++ src/plugins/KDEFrameworksIntegration/metadata.desktop | 2 ++ src/scripts/hellopython/metadata.desktop | 2 ++ src/scripts/middleclickloader/metadata.desktop | 2 ++ src/scripts/runaction/actions/dictionary.desktop | 1 + src/scripts/runaction/actions/googleimagesearch.desktop | 2 ++ src/scripts/runaction/actions/mpv.desktop | 1 + src/scripts/runaction/actions/tineyeimagesearch.desktop | 2 ++ src/scripts/runaction/actions/translate.desktop | 1 + src/scripts/runaction/actions/w3.desktop | 1 + src/scripts/runaction/actions/yandeximagesearch.desktop | 2 ++ src/scripts/runaction/metadata.desktop | 2 ++ 12 files changed, 20 insertions(+) diff --git a/src/lib/adblock/metadata.desktop b/src/lib/adblock/metadata.desktop index 84c67539a..95dd3edd1 100644 --- a/src/lib/adblock/metadata.desktop +++ b/src/lib/adblock/metadata.desktop @@ -7,6 +7,7 @@ Name[da]=AdBlock Name[de]=AdBlock Name[en_GB]=AdBlock Name[es]=AdBlock +Name[fi]=Mainosesto Name[fr]=AdBlock Name[gl]=Bloqueador de publicidade Name[id]=AdBlock @@ -28,6 +29,7 @@ Comment[da]=Blokerer uønskede webindhold Comment[de]=Blockiert unerwünschte Web-Inhalte Comment[en_GB]=Blocks unwanted web content Comment[es]=Bloquea contenido web no deseado +Comment[fi]=Estää epätoivotun verkkosisällön Comment[fr]=Blocage des contenus Web indésirables Comment[gl]=Bloquea contenido web non desexado Comment[id]=Memblokir konten web yang tak diinginkan diff --git a/src/plugins/KDEFrameworksIntegration/metadata.desktop b/src/plugins/KDEFrameworksIntegration/metadata.desktop index feadea83a..037e235ad 100644 --- a/src/plugins/KDEFrameworksIntegration/metadata.desktop +++ b/src/plugins/KDEFrameworksIntegration/metadata.desktop @@ -6,6 +6,7 @@ Name[cs]=Integrace KDE Frameworks Name[da]=KDE Frameworks integration Name[en_GB]=KDE Frameworks Integration Name[es]=Integración con la infraestructura de KDE +Name[fi]=KDE Frameworks -integrointi Name[fr]=Intégration à KDE Frameworks Name[gl]=Integración coas infraestruturas de KDE Name[id]=KDE Frameworks Integration @@ -24,6 +25,7 @@ Comment[cs]=Poskytuje podporu pro KIO a ukládání hesel v Kwallet Comment[da]=Giver understøttelse af KIO og lagring af adgangskoder i KWallet Comment[en_GB]=Provides support for KIO and storing passwords in KWallet Comment[es]=Implementa KIO y almacenamiento de contraseñas en KWallet +Comment[fi]=Tarjoaa KIO-tuen sekä salasanojen tallentamisen KWalletiin Comment[fr]=Prise en charge de KIO et de l'enregistrement de mots de passe dans KWallet Comment[gl]=Fornece compatibilidade con KIO e permite almacenar contrasinais en KWallet Comment[id]=Menyediakan dukungan untuk KIO dan menyimpan sandi dalam KWallet diff --git a/src/scripts/hellopython/metadata.desktop b/src/scripts/hellopython/metadata.desktop index a1f2ccd45..3c8088354 100644 --- a/src/scripts/hellopython/metadata.desktop +++ b/src/scripts/hellopython/metadata.desktop @@ -7,6 +7,7 @@ Name[da]=Hallo Python Name[de]=Hallo-Python Name[en_GB]=Hello Python Name[es]=Hola Python +Name[fi]=Hei Python Name[fr]=Hello Python Name[gl]=Ola, Python! Name[id]=Hello Python @@ -27,6 +28,7 @@ Comment[da]=Eksempel Python-udvidelse Comment[de]=Beispiel eines Python-Moduls Comment[en_GB]=Example Python extension Comment[es]=Ejemplo de extensión de Python +Comment[fi]=Esimerkinomainen Python-laajennus Comment[fr]=Exemple d'extension Python Comment[gl]=Extensión de Python de exemplo Comment[id]=Contoh ekstensi Python diff --git a/src/scripts/middleclickloader/metadata.desktop b/src/scripts/middleclickloader/metadata.desktop index a98194050..eb5610ea0 100644 --- a/src/scripts/middleclickloader/metadata.desktop +++ b/src/scripts/middleclickloader/metadata.desktop @@ -4,6 +4,7 @@ Name[ca]=MiddleClickLoader Name[ca@valencia]=MiddleClickLoader Name[cs]=Načtení prostředním tlačítkem myši Name[es]=Cargador de clic central +Name[fi]=Keskipainikelatain Name[fr]=MiddleClickLoader Name[it]=Caricatore al clic centrale Name[nl]=MiddleClickLoader @@ -15,6 +16,7 @@ Comment=Load text in selection clipboard as URL Comment[ca]=Carrega text com a URL en una selecció del porta-retalls Comment[ca@valencia]=Carrega text com a URL en una selecció del porta-retalls Comment[cs]=Načíst text ve schránce výběru jako URL +Comment[fi]=Lataa leikepöytävalinnan tekstin verkko-osoitteeksi Comment[fr]=Charger l'URL sélectionnée dans le presse-papier Comment[it]=Carica come URL il testo negli appunti della selezione Comment[nl]=Tekst laden in selectieklembord als URL diff --git a/src/scripts/runaction/actions/dictionary.desktop b/src/scripts/runaction/actions/dictionary.desktop index d58fc92cc..87864425a 100644 --- a/src/scripts/runaction/actions/dictionary.desktop +++ b/src/scripts/runaction/actions/dictionary.desktop @@ -7,6 +7,7 @@ Name[da]=Ordbog Name[de]=Wörterbuch Name[en_GB]=Dictionary Name[es]=Diccionario +Name[fi]=Sanasto Name[fr]=Dictionnaire Name[gl]=Dicionario Name[id]=Kamus diff --git a/src/scripts/runaction/actions/googleimagesearch.desktop b/src/scripts/runaction/actions/googleimagesearch.desktop index 2e475d13d..f52b9b084 100644 --- a/src/scripts/runaction/actions/googleimagesearch.desktop +++ b/src/scripts/runaction/actions/googleimagesearch.desktop @@ -7,6 +7,7 @@ Name[da]=Google Name[de]=Google Name[en_GB]=Google Name[es]=Google +Name[fi]=Google Name[fr]=Google Name[gl]=Google Name[id]=Google @@ -26,6 +27,7 @@ Comment[da]=Søg med... Comment[de]=Suchen mit ... Comment[en_GB]=Search with... Comment[es]=Buscar con... +Comment[fi]=Etsi hakukoneella… Comment[fr]=Chercher avec… Comment[gl]=Buscar con… Comment[id]=Cari dengan... diff --git a/src/scripts/runaction/actions/mpv.desktop b/src/scripts/runaction/actions/mpv.desktop index 5b113fbbe..7677ed518 100644 --- a/src/scripts/runaction/actions/mpv.desktop +++ b/src/scripts/runaction/actions/mpv.desktop @@ -6,6 +6,7 @@ Name[cs]=Otevřít pomocí mpv Name[da]=Åbn med mpv Name[en_GB]=Open with mpv Name[es]=Abrir con mpv +Name[fi]=Avaa mpv:hen Name[fr]=Ouvrir avec mpv Name[gl]=Abrir con mpv Name[id]=Buka dengan mpv diff --git a/src/scripts/runaction/actions/tineyeimagesearch.desktop b/src/scripts/runaction/actions/tineyeimagesearch.desktop index 8ac9728ec..c71fff014 100644 --- a/src/scripts/runaction/actions/tineyeimagesearch.desktop +++ b/src/scripts/runaction/actions/tineyeimagesearch.desktop @@ -7,6 +7,7 @@ Name[da]=TinEye Name[de]=TinEye Name[en_GB]=TinEye Name[es]=TinEye +Name[fi]=TinEye Name[fr]=TinEye Name[gl]=TinEye Name[id]=TinEye @@ -26,6 +27,7 @@ Comment[da]=Søg med... Comment[de]=Suchen mit ... Comment[en_GB]=Search with... Comment[es]=Buscar con... +Comment[fi]=Etsi hakukoneella… Comment[fr]=Chercher avec… Comment[gl]=Buscar con… Comment[id]=Cari dengan... diff --git a/src/scripts/runaction/actions/translate.desktop b/src/scripts/runaction/actions/translate.desktop index 838b365f3..5bce94531 100644 --- a/src/scripts/runaction/actions/translate.desktop +++ b/src/scripts/runaction/actions/translate.desktop @@ -7,6 +7,7 @@ Name[da]=Oversæt side Name[de]=Seite übersetzen Name[en_GB]=Translate page Name[es]=Traducir página +Name[fi]=Käännä sivu Name[fr]=Traduire la page Web Name[gl]=Traducir a páxina Name[id]=Terjemahkan halaman diff --git a/src/scripts/runaction/actions/w3.desktop b/src/scripts/runaction/actions/w3.desktop index ee0fd0117..6b248c2be 100644 --- a/src/scripts/runaction/actions/w3.desktop +++ b/src/scripts/runaction/actions/w3.desktop @@ -7,6 +7,7 @@ Name[da]=Valider side Name[de]=Seite überprüfen Name[en_GB]=Validate page Name[es]=Validar página +Name[fi]=Tarkista sivu Name[fr]=Valider la page Name[gl]=Validar a páxina Name[id]=Validasi halaman diff --git a/src/scripts/runaction/actions/yandeximagesearch.desktop b/src/scripts/runaction/actions/yandeximagesearch.desktop index 49db7cac6..815cc94ac 100644 --- a/src/scripts/runaction/actions/yandeximagesearch.desktop +++ b/src/scripts/runaction/actions/yandeximagesearch.desktop @@ -7,6 +7,7 @@ Name[da]=Yandex Name[de]=Yandex Name[en_GB]=Yandex Name[es]=Yandex +Name[fi]=Yandex Name[fr]=Yandex Name[gl]=Yandex Name[id]=Yandex @@ -26,6 +27,7 @@ Comment[da]=Søg med... Comment[de]=Suchen mit ... Comment[en_GB]=Search with... Comment[es]=Buscar con... +Comment[fi]=Etsi hakukoneella… Comment[fr]=Chercher avec… Comment[gl]=Buscar con… Comment[id]=Cari dengan... diff --git a/src/scripts/runaction/metadata.desktop b/src/scripts/runaction/metadata.desktop index 59d1da76a..98be870c3 100644 --- a/src/scripts/runaction/metadata.desktop +++ b/src/scripts/runaction/metadata.desktop @@ -6,6 +6,7 @@ Name[cs]=Spustit činnost Name[da]=Kør handling Name[en_GB]=Run Action Name[es]=Ejecutar acción +Name[fi]=Suorita toiminto Name[fr]=Lancer une action Name[gl]=Executar a acción Name[id]=Run Action @@ -24,6 +25,7 @@ Comment[cs]=Spouštět různé činnosti na stránkách Comment[da]=Kør diverse handlinger på steder Comment[en_GB]=Run various actions on sites Comment[es]=Ejecutar varias acciones en sitios +Comment[fi]=Suorita eri toimintoja sivustoilla Comment[fr]=Lancement d'actions diverses sur des sites Web Comment[gl]=Executar varias accións en sitios Comment[id]=Jalankan beberapa aksi pada situs From 6589e6b58f785bd851139b5734ac820e406c2d8c Mon Sep 17 00:00:00 2001 From: Anmol Gautam Date: Sun, 12 Aug 2018 18:04:11 +0530 Subject: [PATCH 3/3] Added tests for QML Extension API Reviewers: drosca Subscribers: falkon Tags: #falkon Differential Revision: https://phabricator.kde.org/D14521 --- autotests/CMakeLists.txt | 26 +++ autotests/qml/qmlbookmarksapitest.cpp | 162 ++++++++++++++++++ autotests/qml/qmlbookmarksapitest.h | 43 +++++ autotests/qml/qmlclipboardapitest.cpp | 38 ++++ autotests/qml/qmlclipboardapitest.h | 33 ++++ autotests/qml/qmlcookiesapitest.cpp | 117 +++++++++++++ autotests/qml/qmlcookiesapitest.h | 34 ++++ autotests/qml/qmlhistoryapitest.cpp | 89 ++++++++++ autotests/qml/qmlhistoryapitest.h | 36 ++++ autotests/qml/qmltabsapitest.cpp | 114 ++++++++++++ autotests/qml/qmltabsapitest.h | 34 ++++ autotests/qml/qmltesthelper.cpp | 57 ++++++ autotests/qml/qmltesthelper.h | 31 ++++ autotests/qml/qmltestitem.cpp | 39 +++++ autotests/qml/qmltestitem.h | 36 ++++ autotests/qml/qmltopsitesapitest.cpp | 44 +++++ autotests/qml/qmltopsitesapitest.h | 33 ++++ autotests/qml/qmluserscriptapitest.cpp | 98 +++++++++++ autotests/qml/qmluserscriptapitest.h | 38 ++++ autotests/qml/qmlwindowsapitest.cpp | 67 ++++++++ autotests/qml/qmlwindowsapitest.h | 33 ++++ src/lib/adblock/metadata.desktop | 1 + src/lib/data/breeze-fallback/index.theme | 1 + src/plugins/AutoScroll/metadata.desktop | 2 + .../GnomeKeyringPasswords/metadata.desktop | 2 + src/plugins/GreaseMonkey/metadata.desktop | 2 + src/plugins/MouseGestures/metadata.desktop | 2 + src/plugins/PIM/metadata.desktop | 2 + src/plugins/StatusBarIcons/metadata.desktop | 2 + src/plugins/TabManager/metadata.desktop | 2 + src/plugins/TestPlugin/metadata.desktop | 2 + src/plugins/VerticalTabs/metadata.desktop | 2 + src/scripts/hellopython/metadata.desktop | 2 + themes/chrome/metadata.desktop | 2 + themes/linux/metadata.desktop | 2 + themes/mac/metadata.desktop | 2 + themes/windows/metadata.desktop | 2 + 37 files changed, 1232 insertions(+) create mode 100644 autotests/qml/qmlbookmarksapitest.cpp create mode 100644 autotests/qml/qmlbookmarksapitest.h create mode 100644 autotests/qml/qmlclipboardapitest.cpp create mode 100644 autotests/qml/qmlclipboardapitest.h create mode 100644 autotests/qml/qmlcookiesapitest.cpp create mode 100644 autotests/qml/qmlcookiesapitest.h create mode 100644 autotests/qml/qmlhistoryapitest.cpp create mode 100644 autotests/qml/qmlhistoryapitest.h create mode 100644 autotests/qml/qmltabsapitest.cpp create mode 100644 autotests/qml/qmltabsapitest.h create mode 100644 autotests/qml/qmltesthelper.cpp create mode 100644 autotests/qml/qmltesthelper.h create mode 100644 autotests/qml/qmltestitem.cpp create mode 100644 autotests/qml/qmltestitem.h create mode 100644 autotests/qml/qmltopsitesapitest.cpp create mode 100644 autotests/qml/qmltopsitesapitest.h create mode 100644 autotests/qml/qmluserscriptapitest.cpp create mode 100644 autotests/qml/qmluserscriptapitest.h create mode 100644 autotests/qml/qmlwindowsapitest.cpp create mode 100644 autotests/qml/qmlwindowsapitest.h diff --git a/autotests/CMakeLists.txt b/autotests/CMakeLists.txt index d2fad04b2..f1cde27b0 100644 --- a/autotests/CMakeLists.txt +++ b/autotests/CMakeLists.txt @@ -37,3 +37,29 @@ falkon_tests( databasepasswordbackendtest databaseencryptedpasswordbackendtest ) + +set(falkon_autotests_SRCS + qml/qmltestitem.cpp + qml/qmltesthelper.cpp +) + +macro(falkon_qml_tests) + foreach(_testname ${ARGN}) + add_executable(${_testname} qml/${_testname}.cpp ${falkon_autotests_SRCS}) + target_link_libraries(${_testname} Qt5::Test FalkonPrivate) + add_test(NAME falkon-qml-${_testname} COMMAND ${_testname}) + ecm_mark_as_test(${_testname}) + set_tests_properties(falkon-qml-${_testname} PROPERTIES RUN_SERIAL TRUE) + endforeach(_testname) +endmacro() + +falkon_qml_tests( + qmlbookmarksapitest + qmltopsitesapitest + qmlhistoryapitest + qmlcookiesapitest + qmlclipboardapitest + qmltabsapitest + qmlwindowsapitest + qmluserscriptapitest +) diff --git a/autotests/qml/qmlbookmarksapitest.cpp b/autotests/qml/qmlbookmarksapitest.cpp new file mode 100644 index 000000000..315555ded --- /dev/null +++ b/autotests/qml/qmlbookmarksapitest.cpp @@ -0,0 +1,162 @@ +/* ============================================================ +* Falkon - Qt web browser +* Copyright (C) 2018 Anmol Gautam +* +* This program is free software: you can redistribute it and/or modify +* it under the terms of the GNU General Public License as published by +* the Free Software Foundation, either version 3 of the License, or +* (at your option) any later version. +* +* This program 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 General Public License for more details. +* +* You should have received a copy of the GNU General Public License +* along with this program. If not, see . +* ============================================================ */ +#include "qmlbookmarksapitest.h" +#include "autotests.h" +#include "mainapplication.h" +#include "bookmarks.h" +#include "bookmarkitem.h" +#include "qml/api/bookmarks/qmlbookmarktreenode.h" + +void QmlBookmarksApiTest::initTestCase() +{ +} + +void QmlBookmarksApiTest::cleanupTestCase() +{ +} + +void QmlBookmarksApiTest::testBookmarkTreeNodeType() +{ + auto type = BookmarkItem::Type(m_testHelper.evaluate("Falkon.Bookmarks.rootItem().type").toInt()); + QCOMPARE(mApp->bookmarks()->rootItem()->type(), type); + + type = BookmarkItem::Type(m_testHelper.evaluate("Falkon.Bookmarks.toolbarFolder().type").toInt()); + QCOMPARE(mApp->bookmarks()->toolbarFolder()->type(), type); +} + +void QmlBookmarksApiTest::testBookmarkTreeNode() +{ + QObject *bookmark = m_testHelper.evaluateQObject("Falkon.Bookmarks.toolbarFolder()"); + QVERIFY(bookmark); + auto toolbarFolder = mApp->bookmarks()->toolbarFolder(); + + QCOMPARE(toolbarFolder->title(), bookmark->property("title").toString()); + QCOMPARE(toolbarFolder->urlString(), bookmark->property("url").toString()); + QCOMPARE(toolbarFolder->description(), bookmark->property("description").toString()); + QCOMPARE(!mApp->bookmarks()->canBeModified(toolbarFolder), bookmark->property("unmodifiable").toBool()); + QObject* parent = qvariant_cast(bookmark->property("parent")); + QVERIFY(parent); + QCOMPARE(mApp->bookmarks()->rootItem()->title(), parent->property("title").toString()); +} + +void QmlBookmarksApiTest::testBookmarksCreation() +{ + auto item = new BookmarkItem(BookmarkItem::Url); + item->setTitle("Example Domain"); + item->setUrl(QUrl("https://example.com/")); + item->setDescription("Testing bookmark description"); + + QObject *qmlBookmarks = m_testHelper.evaluateQObject("Falkon.Bookmarks"); + QVERIFY(qmlBookmarks); + + QSignalSpy qmlBookmarksSpy(qmlBookmarks, SIGNAL(created(QmlBookmarkTreeNode*))); + mApp->bookmarks()->addBookmark(mApp->bookmarks()->rootItem(), item); + + QCOMPARE(qmlBookmarksSpy.count(), 1); + + QObject *created = qvariant_cast(qmlBookmarksSpy.at(0).at(0)); + QVERIFY(created); + QCOMPARE(item->title(), created->property("title").toString()); + + qRegisterMetaType(); + QSignalSpy bookmarksSpy(mApp->bookmarks(), &Bookmarks::bookmarkAdded); + + auto out = m_testHelper.evaluate("Falkon.Bookmarks.create({" + " parent: Falkon.Bookmarks.toolbarFolder()," + " title: 'Example Plugin'," + " url: 'https://another-example.com'" + "});"); + QVERIFY(out.toBool()); + + QCOMPARE(bookmarksSpy.count(), 1); + BookmarkItem* createdItem = qvariant_cast(bookmarksSpy.at(0).at(0)); + QVERIFY(createdItem); + QCOMPARE(createdItem->title(), QString("Example Plugin")); +} + +void QmlBookmarksApiTest::testBookmarksExistence() +{ + // in continuation from testBookmarksCreation + + auto result = m_testHelper.evaluate("Falkon.Bookmarks.isBookmarked('https://example.com/')").toBool(); + QVERIFY(result); + QCOMPARE(mApp->bookmarks()->isBookmarked(QUrl("https://example.com/")), result); +} + +void QmlBookmarksApiTest::testBookmarksModification() +{ + // in continuation from testBookmarksExistence + + QObject *qmlBookmarks = m_testHelper.evaluateQObject("Falkon.Bookmarks"); + QVERIFY(qmlBookmarks); + + QSignalSpy qmlBookmarksSpy(qmlBookmarks, SIGNAL(changed(QmlBookmarkTreeNode*))); + BookmarkItem* item = mApp->bookmarks()->searchBookmarks("https://example.com/").at(0); + item->setTitle("Modified Example Domain"); + mApp->bookmarks()->changeBookmark(item); + + QCOMPARE(qmlBookmarksSpy.count(), 1); + + QObject *modified = qvariant_cast(qmlBookmarksSpy.at(0).at(0)); + QVERIFY(modified); + QCOMPARE(modified->property("title").toString(), QString("Modified Example Domain")); + + qRegisterMetaType(); + QSignalSpy bookmarksSpy(mApp->bookmarks(), &Bookmarks::bookmarkChanged); + + auto out = m_testHelper.evaluate("Falkon.Bookmarks.update(Falkon.Bookmarks.get('https://another-example.com'),{" + " title: 'Modified Example Plugin'" + "})"); + QVERIFY(out.toBool()); + + QCOMPARE(bookmarksSpy.count(), 1); + BookmarkItem* modifiedItem = qvariant_cast(bookmarksSpy.at(0).at(0)); + QVERIFY(modifiedItem); + QCOMPARE(modifiedItem->title(), QString("Modified Example Plugin")); +} + +void QmlBookmarksApiTest::testBookmarksRemoval() +{ + // in continuation from testBookmarksModification + + QObject *qmlBookmarks = m_testHelper.evaluateQObject("Falkon.Bookmarks"); + QVERIFY(qmlBookmarks); + + QSignalSpy qmlBookmarksSpy(qmlBookmarks, SIGNAL(removed(QmlBookmarkTreeNode*))); + BookmarkItem* item = mApp->bookmarks()->searchBookmarks("https://example.com/").at(0); + mApp->bookmarks()->removeBookmark(item); + + QCOMPARE(qmlBookmarksSpy.count(), 1); + + QObject *removed = qvariant_cast(qmlBookmarksSpy.at(0).at(0)); + QVERIFY(removed); + QCOMPARE(removed->property("title").toString(), QString("Modified Example Domain")); + + qRegisterMetaType(); + QSignalSpy bookmarksSpy(mApp->bookmarks(), &Bookmarks::bookmarkRemoved); + + auto out = m_testHelper.evaluate("Falkon.Bookmarks.remove(Falkon.Bookmarks.get('https://another-example.com'))"); + QVERIFY(out.toBool()); + + QCOMPARE(bookmarksSpy.count(), 1); + BookmarkItem* removedItem = qvariant_cast(bookmarksSpy.at(0).at(0)); + QVERIFY(removedItem); + QCOMPARE(removedItem->title(), QString("Modified Example Plugin")); +} + +FALKONTEST_MAIN(QmlBookmarksApiTest) diff --git a/autotests/qml/qmlbookmarksapitest.h b/autotests/qml/qmlbookmarksapitest.h new file mode 100644 index 000000000..17a902078 --- /dev/null +++ b/autotests/qml/qmlbookmarksapitest.h @@ -0,0 +1,43 @@ +/* ============================================================ +* Falkon - Qt web browser +* Copyright (C) 2018 Anmol Gautam +* +* This program is free software: you can redistribute it and/or modify +* it under the terms of the GNU General Public License as published by +* the Free Software Foundation, either version 3 of the License, or +* (at your option) any later version. +* +* This program 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 General Public License for more details. +* +* You should have received a copy of the GNU General Public License +* along with this program. If not, see . +* ============================================================ */ +#pragma once + +#include + +#include "bookmarkitem.h" +#include "qmltesthelper.h" + +class QmlBookmarksApiTest : public QObject +{ + Q_OBJECT + QmlTestHelper m_testHelper; + +private Q_SLOTS: + void initTestCase(); + void cleanupTestCase(); + + void testBookmarkTreeNodeType(); + void testBookmarkTreeNode(); + + void testBookmarksCreation(); + void testBookmarksExistence(); + void testBookmarksModification(); + void testBookmarksRemoval(); +}; + +Q_DECLARE_METATYPE(BookmarkItem *) diff --git a/autotests/qml/qmlclipboardapitest.cpp b/autotests/qml/qmlclipboardapitest.cpp new file mode 100644 index 000000000..88fb0a2ed --- /dev/null +++ b/autotests/qml/qmlclipboardapitest.cpp @@ -0,0 +1,38 @@ +/* ============================================================ +* Falkon - Qt web browser +* Copyright (C) 2018 Anmol Gautam +* +* This program is free software: you can redistribute it and/or modify +* it under the terms of the GNU General Public License as published by +* the Free Software Foundation, either version 3 of the License, or +* (at your option) any later version. +* +* This program 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 General Public License for more details. +* +* You should have received a copy of the GNU General Public License +* along with this program. If not, see . +* ============================================================ */ +#include "qmlclipboardapitest.h" +#include "autotests.h" +#include "qmltesthelper.h" +#include "mainapplication.h" +#include + +void QmlClipboardApiTest::initTestCase() +{ +} + +void QmlClipboardApiTest::cleanupTestCase() +{ +} + +void QmlClipboardApiTest::testClipboard() +{ + m_testHelper.evaluate("Falkon.Clipboard.copy('this text is copied')"); + QCOMPARE(mApp->clipboard()->text(), "this text is copied"); +} + +FALKONTEST_MAIN(QmlClipboardApiTest) diff --git a/autotests/qml/qmlclipboardapitest.h b/autotests/qml/qmlclipboardapitest.h new file mode 100644 index 000000000..f86e953e2 --- /dev/null +++ b/autotests/qml/qmlclipboardapitest.h @@ -0,0 +1,33 @@ +/* ============================================================ +* Falkon - Qt web browser +* Copyright (C) 2018 Anmol Gautam +* +* This program is free software: you can redistribute it and/or modify +* it under the terms of the GNU General Public License as published by +* the Free Software Foundation, either version 3 of the License, or +* (at your option) any later version. +* +* This program 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 General Public License for more details. +* +* You should have received a copy of the GNU General Public License +* along with this program. If not, see . +* ============================================================ */ +#pragma once + +#include +#include "qmltesthelper.h" + +class QmlClipboardApiTest : public QObject +{ + Q_OBJECT + QmlTestHelper m_testHelper; + +private Q_SLOTS: + void initTestCase(); + void cleanupTestCase(); + + void testClipboard(); +}; diff --git a/autotests/qml/qmlcookiesapitest.cpp b/autotests/qml/qmlcookiesapitest.cpp new file mode 100644 index 000000000..0270d0d49 --- /dev/null +++ b/autotests/qml/qmlcookiesapitest.cpp @@ -0,0 +1,117 @@ +/* ============================================================ +* Falkon - Qt web browser +* Copyright (C) 2018 Anmol Gautam +* +* This program is free software: you can redistribute it and/or modify +* it under the terms of the GNU General Public License as published by +* the Free Software Foundation, either version 3 of the License, or +* (at your option) any later version. +* +* This program 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 General Public License for more details. +* +* You should have received a copy of the GNU General Public License +* along with this program. If not, see . +* ============================================================ */ +#include "qmlcookiesapitest.h" +#include "autotests.h" +#include "qmltesthelper.h" +#include "mainapplication.h" +#include "cookiejar.h" +#include "qml/api/cookies/qmlcookie.h" +#include + +void QmlCookiesApiTest::initTestCase() +{ +} + +void QmlCookiesApiTest::cleanupTestCase() +{ +} + +void QmlCookiesApiTest::testCookieAdditionRemoval() +{ + QSignalSpy cookieAddSpy(mApp->cookieJar(), &CookieJar::cookieAdded); + m_testHelper.evaluate("Falkon.Cookies.set({" + " name: 'Example'," + " url: '.example.com'," + " expirationDate: Date.now() + 60*1000" + "})"); + QTRY_COMPARE(cookieAddSpy.count(), 1); + QNetworkCookie netCookie = qvariant_cast(cookieAddSpy.at(0).at(0)); + QCOMPARE(netCookie.name(), "Example"); + QObject *object = m_testHelper.evaluateQObject("Falkon.Cookies"); + QVERIFY(object); + QSignalSpy qmlCookieSpy(object, SIGNAL(changed(QVariantMap))); + QNetworkCookie anotherNetCookie; + anotherNetCookie.setName(QString("Hello").toLocal8Bit()); + anotherNetCookie.setDomain(".mydomain.com"); + anotherNetCookie.setExpirationDate(QDateTime::currentDateTime().addSecs(60)); + mApp->webProfile()->cookieStore()->setCookie(anotherNetCookie); + QTRY_COMPARE(qmlCookieSpy.count(), 1); + QVariantMap addedQmlCookieMap = QVariant(qmlCookieSpy.at(0).at(0)).toMap(); + QObject *addedQmlCookie = qvariant_cast(addedQmlCookieMap.value("cookie")); + bool removed = addedQmlCookieMap.value("removed").toBool(); + QCOMPARE(addedQmlCookie->property("name").toString(), "Hello"); + QCOMPARE(removed, false); + + mApp->webProfile()->cookieStore()->deleteCookie(netCookie); + QTRY_COMPARE(qmlCookieSpy.count(), 2); + QVariantMap removedQmlCookieMap = QVariant(qmlCookieSpy.at(1).at(0)).toMap(); + QObject *removedQmlCookie = qvariant_cast(removedQmlCookieMap.value("cookie")); + removed = removedQmlCookieMap.value("removed").toBool(); + QCOMPARE(removedQmlCookie->property("name").toString(), "Example"); + QCOMPARE(removed, true); + + QSignalSpy cookieRemoveSpy(mApp->cookieJar(), &CookieJar::cookieRemoved); + m_testHelper.evaluate("Falkon.Cookies.remove({" + " name: 'Hello'," + " url: '.mydomain.com'," + "})"); + QTRY_COMPARE(cookieRemoveSpy.count(), 1); + netCookie = qvariant_cast(cookieRemoveSpy.at(0).at(0)); + QCOMPARE(netCookie.name(), "Hello"); +} + +void QmlCookiesApiTest::testCookieGet() +{ + QDateTime current = QDateTime::currentDateTime(); + QSignalSpy cookieAddSpy(mApp->cookieJar(), &CookieJar::cookieAdded); + + QNetworkCookie netCookie_1; + netCookie_1.setName(QString("Apple").toLocal8Bit()); + netCookie_1.setDomain(".apple-domain.com"); + netCookie_1.setExpirationDate(current.addSecs(60)); + mApp->webProfile()->cookieStore()->setCookie(netCookie_1); + + QNetworkCookie netCookie_2; + netCookie_2.setName(QString("Mango").toLocal8Bit()); + netCookie_2.setDomain(".mango-domain.com"); + netCookie_2.setExpirationDate(current.addSecs(120)); + mApp->webProfile()->cookieStore()->setCookie(netCookie_2); + + QNetworkCookie netCookie_3; + netCookie_3.setName(QString("Mango").toLocal8Bit()); + netCookie_3.setDomain(".yet-another-mango-domain.com"); + netCookie_3.setExpirationDate(current.addSecs(180)); + mApp->webProfile()->cookieStore()->setCookie(netCookie_3); + + QTRY_COMPARE(cookieAddSpy.count(), 3); + + QObject *mangoCookie = m_testHelper.evaluateQObject("Falkon.Cookies.get({" + " name: 'Mango'," + " url: '.mango-domain.com'" + "})"); + QVERIFY(mangoCookie); + QCOMPARE(mangoCookie->property("name").toString(), "Mango"); + // FIXME: Here current.addSecs differes from expirationDate by some ms + // a solution is to convert both to string, but this is not the best solution + QCOMPARE(mangoCookie->property("expirationDate").toDateTime().toString(), current.addSecs(120).toString()); + + QList mangoCookies = m_testHelper.evaluate("Falkon.Cookies.getAll({name: 'Mango'})").toVariant().toList(); + QCOMPARE(mangoCookies.length(), 2); +} + +FALKONTEST_MAIN(QmlCookiesApiTest) diff --git a/autotests/qml/qmlcookiesapitest.h b/autotests/qml/qmlcookiesapitest.h new file mode 100644 index 000000000..9bf6e9855 --- /dev/null +++ b/autotests/qml/qmlcookiesapitest.h @@ -0,0 +1,34 @@ +/* ============================================================ +* Falkon - Qt web browser +* Copyright (C) 2018 Anmol Gautam +* +* This program is free software: you can redistribute it and/or modify +* it under the terms of the GNU General Public License as published by +* the Free Software Foundation, either version 3 of the License, or +* (at your option) any later version. +* +* This program 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 General Public License for more details. +* +* You should have received a copy of the GNU General Public License +* along with this program. If not, see . +* ============================================================ */ +#pragma once + +#include +#include "qmltesthelper.h" + +class QmlCookiesApiTest : public QObject +{ + Q_OBJECT + QmlTestHelper m_testHelper; + +private Q_SLOTS: + void initTestCase(); + void cleanupTestCase(); + + void testCookieAdditionRemoval(); + void testCookieGet(); +}; diff --git a/autotests/qml/qmlhistoryapitest.cpp b/autotests/qml/qmlhistoryapitest.cpp new file mode 100644 index 000000000..02c5d26a2 --- /dev/null +++ b/autotests/qml/qmlhistoryapitest.cpp @@ -0,0 +1,89 @@ +/* ============================================================ +* Falkon - Qt web browser +* Copyright (C) 2018 Anmol Gautam +* +* This program is free software: you can redistribute it and/or modify +* it under the terms of the GNU General Public License as published by +* the Free Software Foundation, either version 3 of the License, or +* (at your option) any later version. +* +* This program 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 General Public License for more details. +* +* You should have received a copy of the GNU General Public License +* along with this program. If not, see . +* ============================================================ */ +#include "qmlhistoryapitest.h" +#include "autotests.h" +#include "qmltesthelper.h" +#include "mainapplication.h" +#include "history.h" +#include "qml/api/history/qmlhistoryitem.h" +#include "qml/api/history/qmlhistory.h" + +Q_DECLARE_METATYPE(HistoryEntry) + +void QmlHistoryApiTest::initTestCase() +{ +} + +void QmlHistoryApiTest::cleanupTestCase() +{ +} + +void QmlHistoryApiTest::testAddition() +{ + qRegisterMetaType(); + QSignalSpy historySpy(mApp->history(), &History::historyEntryAdded); + m_testHelper.evaluate("Falkon.History.addUrl({" + " url: 'https://example.com'," + " title: 'Example Domain'" + "})"); + QTRY_COMPARE(historySpy.count(), 1); + HistoryEntry entry = qvariant_cast(historySpy.at(0).at(0)); + QCOMPARE(entry.title, "Example Domain"); + + auto object = m_testHelper.evaluateQObject("Falkon.History"); + QSignalSpy qmlHistorySpy(object, SIGNAL(visited(QmlHistoryItem*))); + mApp->history()->addHistoryEntry(QUrl("https://sample.com"), "Sample Domain"); + QTRY_COMPARE(qmlHistorySpy.count(), 1); + mApp->history()->clearHistory(); +} + +void QmlHistoryApiTest::testSearch() +{ + QSignalSpy historySpy(mApp->history(), &History::historyEntryAdded); + mApp->history()->addHistoryEntry(QUrl("https://example.com"), "Example Domain"); + mApp->history()->addHistoryEntry(QUrl("https://another-example.com"), "Another Example Domain"); + mApp->history()->addHistoryEntry(QUrl("https://sample.com"), "Sample Domain"); + QTRY_COMPARE(historySpy.count(), 3); + auto list = m_testHelper.evaluate("Falkon.History.search('example')").toVariant().toList(); + QCOMPARE(list.length(), 2); +} + +void QmlHistoryApiTest::testVisits() +{ + int visits = m_testHelper.evaluate("Falkon.History.getVisits('https://sample.com')").toInt(); + QCOMPARE(visits, 1); + QSignalSpy historySpy(mApp->history(), &History::historyEntryEdited); + mApp->history()->addHistoryEntry(QUrl("https://sample.com"), "Sample Domain"); + QTRY_COMPARE(historySpy.count(), 1); + visits = m_testHelper.evaluate("Falkon.History.getVisits('https://sample.com')").toInt(); + QCOMPARE(visits, 2); +} + +void QmlHistoryApiTest::testRemoval() +{ + QSignalSpy historySpy(mApp->history(), &History::historyEntryDeleted); + m_testHelper.evaluate("Falkon.History.deleteUrl('https://sample.com')"); + QTRY_COMPARE(historySpy.count(), 1); + + auto object = m_testHelper.evaluateQObject("Falkon.History"); + QSignalSpy qmlHistorySpy(object, SIGNAL(visitRemoved(QmlHistoryItem*))); + mApp->history()->deleteHistoryEntry("https://example.com", "Example Domain"); + QTRY_COMPARE(qmlHistorySpy.count(), 1); +} + +FALKONTEST_MAIN(QmlHistoryApiTest) diff --git a/autotests/qml/qmlhistoryapitest.h b/autotests/qml/qmlhistoryapitest.h new file mode 100644 index 000000000..da3e336e8 --- /dev/null +++ b/autotests/qml/qmlhistoryapitest.h @@ -0,0 +1,36 @@ +/* ============================================================ +* Falkon - Qt web browser +* Copyright (C) 2018 Anmol Gautam +* +* This program is free software: you can redistribute it and/or modify +* it under the terms of the GNU General Public License as published by +* the Free Software Foundation, either version 3 of the License, or +* (at your option) any later version. +* +* This program 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 General Public License for more details. +* +* You should have received a copy of the GNU General Public License +* along with this program. If not, see . +* ============================================================ */ +#pragma once + +#include +#include "qmltesthelper.h" + +class QmlHistoryApiTest : public QObject +{ + Q_OBJECT + QmlTestHelper m_testHelper; + +private Q_SLOTS: + void initTestCase(); + void cleanupTestCase(); + + void testAddition(); + void testSearch(); + void testVisits(); + void testRemoval(); +}; diff --git a/autotests/qml/qmltabsapitest.cpp b/autotests/qml/qmltabsapitest.cpp new file mode 100644 index 000000000..486c6b1b8 --- /dev/null +++ b/autotests/qml/qmltabsapitest.cpp @@ -0,0 +1,114 @@ +/* ============================================================ +* Falkon - Qt web browser +* Copyright (C) 2018 Anmol Gautam +* +* This program is free software: you can redistribute it and/or modify +* it under the terms of the GNU General Public License as published by +* the Free Software Foundation, either version 3 of the License, or +* (at your option) any later version. +* +* This program 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 General Public License for more details. +* +* You should have received a copy of the GNU General Public License +* along with this program. If not, see . +* ============================================================ */ +#include "qmltabsapitest.h" +#include "autotests.h" +#include "qmltesthelper.h" +#include "mainapplication.h" +#include "tabwidget.h" + +void QmlTabsApiTest::initTestCase() +{ +} + +void QmlTabsApiTest::cleanupTestCase() +{ +} + +void QmlTabsApiTest::testInitWindowCount() +{ + QCOMPARE(mApp->windowCount(), 1); + QCOMPARE(mApp->getWindow()->tabCount(), 0); +} + +void QmlTabsApiTest::testTabsAPI() +{ + // Tab Insertion + QObject *qmlTabsObject = m_testHelper.evaluateQObject("Falkon.Tabs"); + QVERIFY(qmlTabsObject); + QSignalSpy qmlTabsInsertedSpy(qmlTabsObject, SIGNAL(tabInserted(QVariantMap))); + m_testHelper.evaluate("Falkon.Tabs.addTab({" + " url: 'https://example.com/'" + "})"); + QCOMPARE(qmlTabsInsertedSpy.count(), 1); + QVariantMap retMap1 = QVariant(qmlTabsInsertedSpy.at(0).at(0)).toMap(); + int index1 = retMap1.value(QSL("index"), -1).toInt(); + int windowId1 = retMap1.value(QSL("windowId"), -1).toInt(); + QCOMPARE(index1, 0); + QCOMPARE(windowId1, 0); + + QObject *qmlTabObject1 = m_testHelper.evaluateQObject("Falkon.Tabs.get({index: 0})"); + QVERIFY(qmlTabObject1); + QCOMPARE(qmlTabObject1->property("url").toString(), "https://example.com/"); + QCOMPARE(qmlTabObject1->property("index").toInt(), 0); + QCOMPARE(qmlTabObject1->property("pinned").toBool(), false); + + m_testHelper.evaluate("Falkon.Tabs.addTab({" + " url: 'https://another-example.com/'," + "})"); + QCOMPARE(qmlTabsInsertedSpy.count(), 2); + QVariantMap retMap2 = QVariant(qmlTabsInsertedSpy.at(1).at(0)).toMap(); + int index2 = retMap2.value(QSL("index"), -1).toInt(); + int windowId2 = retMap2.value(QSL("windowId"), -1).toInt(); + QCOMPARE(index2, 1); + QCOMPARE(windowId2, 0); + + bool pinnedTab = m_testHelper.evaluate("Falkon.Tabs.pinTab({index: 1})").toBool(); + QVERIFY(pinnedTab); + QObject *qmlTabObject2 = m_testHelper.evaluateQObject("Falkon.Tabs.get({index: 0})"); + QVERIFY(qmlTabObject2); + QCOMPARE(qmlTabObject2->property("url").toString(), "https://another-example.com/"); + QCOMPARE(qmlTabObject2->property("index").toInt(), 0); + QCOMPARE(qmlTabObject2->property("pinned").toBool(), true); + + bool unpinnedTab = m_testHelper.evaluate("Falkon.Tabs.unpinTab({index: 0})").toBool(); + QVERIFY(unpinnedTab); + QObject *qmlTabObject3 = m_testHelper.evaluateQObject("Falkon.Tabs.get({index: 0})"); + QVERIFY(qmlTabObject3); + QCOMPARE(qmlTabObject3->property("url").toString(), "https://another-example.com/"); + QCOMPARE(qmlTabObject3->property("index").toInt(), 0); + QCOMPARE(qmlTabObject3->property("pinned").toBool(), false); + + // Next-Previous-Current + QCOMPARE(mApp->getWindow()->tabWidget()->currentIndex(), 0); + m_testHelper.evaluate("Falkon.Tabs.nextTab()"); + QCOMPARE(mApp->getWindow()->tabWidget()->currentIndex(), 1); + m_testHelper.evaluate("Falkon.Tabs.nextTab()"); + QCOMPARE(mApp->getWindow()->tabWidget()->currentIndex(), 0); + m_testHelper.evaluate("Falkon.Tabs.previousTab()"); + QCOMPARE(mApp->getWindow()->tabWidget()->currentIndex(), 1); + m_testHelper.evaluate("Falkon.Tabs.previousTab()"); + QCOMPARE(mApp->getWindow()->tabWidget()->currentIndex(), 0); + m_testHelper.evaluate("Falkon.Tabs.setCurrentIndex({index: 1})"); + QCOMPARE(mApp->getWindow()->tabWidget()->currentIndex(), 1); + m_testHelper.evaluate("Falkon.Tabs.setCurrentIndex({index: 0})"); + QCOMPARE(mApp->getWindow()->tabWidget()->currentIndex(), 0); + + // Move Tab + QSignalSpy qmlTabsMovedSpy(qmlTabsObject, SIGNAL(tabMoved(QVariantMap))); + m_testHelper.evaluate("Falkon.Tabs.moveTab({from: 0, to:1, windowId: 0})"); + QCOMPARE(qmlTabsMovedSpy.count(), 1); + + // Tab Removal + QCOMPARE(mApp->getWindow()->tabCount(), 2); + QSignalSpy qmlTabsRemovedSpy(qmlTabsObject, SIGNAL(tabRemoved(QVariantMap))); + m_testHelper.evaluate("Falkon.Tabs.closeTab({index: 0})"); + QCOMPARE(qmlTabsRemovedSpy.count(), 1); + QCOMPARE(mApp->getWindow()->tabCount(), 1); +} + +FALKONTEST_MAIN(QmlTabsApiTest) diff --git a/autotests/qml/qmltabsapitest.h b/autotests/qml/qmltabsapitest.h new file mode 100644 index 000000000..eba8c9150 --- /dev/null +++ b/autotests/qml/qmltabsapitest.h @@ -0,0 +1,34 @@ +/* ============================================================ +* Falkon - Qt web browser +* Copyright (C) 2018 Anmol Gautam +* +* This program is free software: you can redistribute it and/or modify +* it under the terms of the GNU General Public License as published by +* the Free Software Foundation, either version 3 of the License, or +* (at your option) any later version. +* +* This program 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 General Public License for more details. +* +* You should have received a copy of the GNU General Public License +* along with this program. If not, see . +* ============================================================ */ +#pragma once + +#include +#include "qmltesthelper.h" + +class QmlTabsApiTest : public QObject +{ + Q_OBJECT + QmlTestHelper m_testHelper; + +private Q_SLOTS: + void initTestCase(); + void cleanupTestCase(); + + void testInitWindowCount(); + void testTabsAPI(); +}; diff --git a/autotests/qml/qmltesthelper.cpp b/autotests/qml/qmltesthelper.cpp new file mode 100644 index 000000000..3fb9911b4 --- /dev/null +++ b/autotests/qml/qmltesthelper.cpp @@ -0,0 +1,57 @@ +/* ============================================================ +* Falkon - Qt web browser +* Copyright (C) 2018 Anmol Gautam +* +* This program is free software: you can redistribute it and/or modify +* it under the terms of the GNU General Public License as published by +* the Free Software Foundation, either version 3 of the License, or +* (at your option) any later version. +* +* This program 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 General Public License for more details. +* +* You should have received a copy of the GNU General Public License +* along with this program. If not, see . +* ============================================================ */ +#include "qmltesthelper.h" +#include "qml/qmlplugins.h" +#include +#include + +QmlTestHelper::QmlTestHelper() +{ + QmlPlugins::registerQmlTypes(); + qmlRegisterType("org.kde.falkon.test", 1, 0, "TestItem"); + QQmlComponent component(&engine); + component.setData("import org.kde.falkon 1.0 as Falkon\n" + "import org.kde.falkon.test 1.0 as FalkonTest\n" + "import QtQuick 2.7\n" + "FalkonTest.TestItem {" + " evalFunc: function(source) {" + " return eval(source);" + " }" + "}" + , QUrl()); + testItem = qobject_cast(component.create()); + Q_ASSERT(testItem); +} + +QJSValue QmlTestHelper::evaluate(const QString &source) +{ + auto out = testItem->evaluate(source); + if (out.isError()) { + qWarning() << "Error:" << out.toString(); + } + return out; +} + +QObject *QmlTestHelper::evaluateQObject(const QString &source) +{ + auto out = evaluate(source); + if (out.isQObject()) { + return out.toQObject(); + } + return out.toVariant().value(); +} diff --git a/autotests/qml/qmltesthelper.h b/autotests/qml/qmltesthelper.h new file mode 100644 index 000000000..ab2638858 --- /dev/null +++ b/autotests/qml/qmltesthelper.h @@ -0,0 +1,31 @@ +/* ============================================================ +* Falkon - Qt web browser +* Copyright (C) 2018 Anmol Gautam +* +* This program is free software: you can redistribute it and/or modify +* it under the terms of the GNU General Public License as published by +* the Free Software Foundation, either version 3 of the License, or +* (at your option) any later version. +* +* This program 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 General Public License for more details. +* +* You should have received a copy of the GNU General Public License +* along with this program. If not, see . +* ============================================================ */ +#pragma once + +#include "qmltestitem.h" +#include + +class QmlTestHelper +{ +public: + explicit QmlTestHelper(); + QJSValue evaluate(const QString &source); + QObject *evaluateQObject(const QString &source); + QQmlEngine engine; + QmlTestItem *testItem; +}; diff --git a/autotests/qml/qmltestitem.cpp b/autotests/qml/qmltestitem.cpp new file mode 100644 index 000000000..630af20f0 --- /dev/null +++ b/autotests/qml/qmltestitem.cpp @@ -0,0 +1,39 @@ +/* ============================================================ +* Falkon - Qt web browser +* Copyright (C) 2018 Anmol Gautam +* +* This program is free software: you can redistribute it and/or modify +* it under the terms of the GNU General Public License as published by +* the Free Software Foundation, either version 3 of the License, or +* (at your option) any later version. +* +* This program 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 General Public License for more details. +* +* You should have received a copy of the GNU General Public License +* along with this program. If not, see . +* ============================================================ */ +#include "qmltestitem.h" + +QmlTestItem::QmlTestItem(QObject *parent) : + QObject(parent) +{ +} + +QJSValue QmlTestItem::evalFunc() +{ + return m_evalFunc; +} + +void QmlTestItem::setEvalFunc(const QJSValue &func) +{ + m_evalFunc = func; +} + +QJSValue QmlTestItem::evaluate(const QString &source) +{ + Q_ASSERT(m_evalFunc.isCallable()); + return m_evalFunc.call({source}); +} diff --git a/autotests/qml/qmltestitem.h b/autotests/qml/qmltestitem.h new file mode 100644 index 000000000..daa1033b5 --- /dev/null +++ b/autotests/qml/qmltestitem.h @@ -0,0 +1,36 @@ +/* ============================================================ +* Falkon - Qt web browser +* Copyright (C) 2018 Anmol Gautam +* +* This program is free software: you can redistribute it and/or modify +* it under the terms of the GNU General Public License as published by +* the Free Software Foundation, either version 3 of the License, or +* (at your option) any later version. +* +* This program 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 General Public License for more details. +* +* You should have received a copy of the GNU General Public License +* along with this program. If not, see . +* ============================================================ */ +#pragma once + +#include +#include + +class QmlTestItem : public QObject +{ + Q_OBJECT + Q_PROPERTY(QJSValue evalFunc READ evalFunc WRITE setEvalFunc) + +public: + explicit QmlTestItem(QObject *parent = nullptr); + QJSValue evalFunc(); + void setEvalFunc(const QJSValue &func); + QJSValue evaluate(const QString &source); + +private: + QJSValue m_evalFunc; +}; diff --git a/autotests/qml/qmltopsitesapitest.cpp b/autotests/qml/qmltopsitesapitest.cpp new file mode 100644 index 000000000..8ca0c7500 --- /dev/null +++ b/autotests/qml/qmltopsitesapitest.cpp @@ -0,0 +1,44 @@ +/* ============================================================ +* Falkon - Qt web browser +* Copyright (C) 2018 Anmol Gautam +* +* This program is free software: you can redistribute it and/or modify +* it under the terms of the GNU General Public License as published by +* the Free Software Foundation, either version 3 of the License, or +* (at your option) any later version. +* +* This program 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 General Public License for more details. +* +* You should have received a copy of the GNU General Public License +* along with this program. If not, see . +* ============================================================ */ +#include "qmltopsitesapitest.h" +#include "autotests.h" +#include "qmltesthelper.h" +#include "mainapplication.h" +#include "pluginproxy.h" +#include "speeddial.h" + +void QmlTopSitesApiTest::initTestCase() +{ +} + +void QmlTopSitesApiTest::cleanupTestCase() +{ +} + +void QmlTopSitesApiTest::testTopSites() +{ + mApp->plugins()->speedDial()->addPage(QUrl("https://example.com"), "Example Domain"); + auto list = m_testHelper.evaluate("Falkon.TopSites.get()").toVariant().toList(); + QCOMPARE(list.length(), 1); + QObject* object = qvariant_cast(list.at(0)); + QVERIFY(object); + QCOMPARE(object->property("title").toString(), "Example Domain"); + QCOMPARE(object->property("url").toString(), "https://example.com"); +} + +FALKONTEST_MAIN(QmlTopSitesApiTest) diff --git a/autotests/qml/qmltopsitesapitest.h b/autotests/qml/qmltopsitesapitest.h new file mode 100644 index 000000000..1e5dbe87b --- /dev/null +++ b/autotests/qml/qmltopsitesapitest.h @@ -0,0 +1,33 @@ +/* ============================================================ +* Falkon - Qt web browser +* Copyright (C) 2018 Anmol Gautam +* +* This program is free software: you can redistribute it and/or modify +* it under the terms of the GNU General Public License as published by +* the Free Software Foundation, either version 3 of the License, or +* (at your option) any later version. +* +* This program 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 General Public License for more details. +* +* You should have received a copy of the GNU General Public License +* along with this program. If not, see . +* ============================================================ */ +#pragma once + +#include +#include "qmltesthelper.h" + +class QmlTopSitesApiTest : public QObject +{ + Q_OBJECT + QmlTestHelper m_testHelper; + +private Q_SLOTS: + void initTestCase(); + void cleanupTestCase(); + + void testTopSites(); +}; diff --git a/autotests/qml/qmluserscriptapitest.cpp b/autotests/qml/qmluserscriptapitest.cpp new file mode 100644 index 000000000..2f4c56d23 --- /dev/null +++ b/autotests/qml/qmluserscriptapitest.cpp @@ -0,0 +1,98 @@ +/* ============================================================ +* Falkon - Qt web browser +* Copyright (C) 2018 Anmol Gautam +* +* This program is free software: you can redistribute it and/or modify +* it under the terms of the GNU General Public License as published by +* the Free Software Foundation, either version 3 of the License, or +* (at your option) any later version. +* +* This program 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 General Public License for more details. +* +* You should have received a copy of the GNU General Public License +* along with this program. If not, see . +* ============================================================ */ +#include "qmluserscriptapitest.h" +#include "autotests.h" +#include "qmltesthelper.h" +#include "mainapplication.h" +#include +#include +#include +#include "qml/api/userscript/qmluserscript.h" +#include "qml/api/userscript/qmluserscripts.h" + +void QmlUserScriptApiTest::initTestCase() +{ +} + +void QmlUserScriptApiTest::cleanupTestCase() +{ +} + +void QmlUserScriptApiTest::testCount() +{ + int count = m_testHelper.evaluate("Falkon.UserScripts.count").toInt(); + QCOMPARE(count, mApp->webProfile()->scripts()->count()); +} + +void QmlUserScriptApiTest::testSize() +{ + int size = m_testHelper.evaluate("Falkon.UserScripts.size").toInt(); + QCOMPARE(size, mApp->webProfile()->scripts()->size()); +} + +void QmlUserScriptApiTest::testEmpty() +{ + bool empty = m_testHelper.evaluate("Falkon.UserScripts.empty").toBool(); + QCOMPARE(empty, mApp->webProfile()->scripts()->isEmpty()); +} + +void QmlUserScriptApiTest::testContains() +{ + QWebEngineScript script = mApp->webProfile()->scripts()->toList().at(0); + QObject *object = m_testHelper.evaluateQObject("Falkon.UserScripts"); + QmlUserScripts *userScripts = dynamic_cast(object); + QVERIFY(userScripts); + QmlUserScript *userScript = new QmlUserScript(); + userScript->setWebEngineScript(script); + bool contains = userScripts->contains(userScript); + QCOMPARE(contains, true); +} + +void QmlUserScriptApiTest::testFind() +{ + QWebEngineScript script = mApp->webProfile()->scripts()->toList().at(0); + QObject *object = m_testHelper.evaluateQObject("Falkon.UserScripts"); + QmlUserScripts *userScripts = dynamic_cast(object); + QVERIFY(userScripts); + QObject *scriptFound = userScripts->findScript(script.name()); + QVERIFY(scriptFound); + QCOMPARE(scriptFound->property("name").toString(), script.name()); +} + +void QmlUserScriptApiTest::testInsertRemove() +{ + int initialCount = m_testHelper.evaluate("Falkon.UserScripts.count").toInt(); + QObject *object = m_testHelper.evaluateQObject("Falkon.UserScripts"); + QmlUserScripts *userScripts = dynamic_cast(object); + QVERIFY(userScripts); + QmlUserScript *userScript = new QmlUserScript(); + userScript->setProperty("name", "Hello World"); + userScript->setProperty("sourceCode", "(function() {" + " alert('Hello World')" + "})()"); + userScripts->insert(userScript); + int finalCount = m_testHelper.evaluate("Falkon.UserScripts.count").toInt(); + QCOMPARE(finalCount, initialCount + 1); + + userScripts->remove(userScript); + + int ultimateCount = m_testHelper.evaluate("Falkon.UserScripts.count").toInt(); + QCOMPARE(ultimateCount, initialCount); +} + +FALKONTEST_MAIN(QmlUserScriptApiTest) diff --git a/autotests/qml/qmluserscriptapitest.h b/autotests/qml/qmluserscriptapitest.h new file mode 100644 index 000000000..b40b0761f --- /dev/null +++ b/autotests/qml/qmluserscriptapitest.h @@ -0,0 +1,38 @@ +/* ============================================================ +* Falkon - Qt web browser +* Copyright (C) 2018 Anmol Gautam +* +* This program is free software: you can redistribute it and/or modify +* it under the terms of the GNU General Public License as published by +* the Free Software Foundation, either version 3 of the License, or +* (at your option) any later version. +* +* This program 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 General Public License for more details. +* +* You should have received a copy of the GNU General Public License +* along with this program. If not, see . +* ============================================================ */ +#pragma once + +#include +#include "qmltesthelper.h" + +class QmlUserScriptApiTest : public QObject +{ + Q_OBJECT + QmlTestHelper m_testHelper; + +private Q_SLOTS: + void initTestCase(); + void cleanupTestCase(); + + void testCount(); + void testSize(); + void testEmpty(); + void testContains(); + void testFind(); + void testInsertRemove(); +}; diff --git a/autotests/qml/qmlwindowsapitest.cpp b/autotests/qml/qmlwindowsapitest.cpp new file mode 100644 index 000000000..1b39b7e7f --- /dev/null +++ b/autotests/qml/qmlwindowsapitest.cpp @@ -0,0 +1,67 @@ +/* ============================================================ +* Falkon - Qt web browser +* Copyright (C) 2018 Anmol Gautam +* +* This program is free software: you can redistribute it and/or modify +* it under the terms of the GNU General Public License as published by +* the Free Software Foundation, either version 3 of the License, or +* (at your option) any later version. +* +* This program 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 General Public License for more details. +* +* You should have received a copy of the GNU General Public License +* along with this program. If not, see . +* ============================================================ */ +#include "qmlwindowsapitest.h" +#include "autotests.h" +#include "qmltesthelper.h" +#include "mainapplication.h" +#include "qml/api/windows/qmlwindow.h" +#include "pluginproxy.h" +#include "browserwindow.h" + +void QmlWindowsApiTest::initTestCase() +{ +} + +void QmlWindowsApiTest::cleanupTestCase() +{ +} + +void QmlWindowsApiTest::testWindowsAPI() +{ + QObject *currentWindowObject = m_testHelper.evaluateQObject("Falkon.Windows.getCurrent()"); + QVERIFY(currentWindowObject); + QCOMPARE(currentWindowObject->property("title").toString(), mApp->getWindow()->windowTitle()); + QCOMPARE(currentWindowObject->property("type").toInt(), (int)mApp->getWindow()->windowType()); + QCOMPARE(currentWindowObject->property("tabs").toList().length(), mApp->getWindow()->tabCount()); + + QObject *windowObject = m_testHelper.evaluateQObject("Falkon.Windows"); + QVERIFY(windowObject); + QSignalSpy qmlWindowCreatedSignal(windowObject, SIGNAL(created(QmlWindow*))); + qRegisterMetaType(); + QSignalSpy windowCreatedSingal(mApp->plugins(), SIGNAL(mainWindowCreated(BrowserWindow*))); + QObject *newQmlWindow = m_testHelper.evaluateQObject("Falkon.Windows.create({})"); + QVERIFY(newQmlWindow); + QCOMPARE(mApp->windowCount(), 2); + // FIXME: signal is emitted 2 times here - + // 1st for the initial window, 2nd for the created window + QTRY_COMPARE(qmlWindowCreatedSignal.count(), 2); + QTRY_COMPARE(windowCreatedSingal.count(), 2); + QObject *newQmlSignalWindow = qvariant_cast(qmlWindowCreatedSignal.at(1).at(0)); + QVERIFY(newQmlSignalWindow); + QCOMPARE(newQmlWindow->property("id").toInt(), newQmlSignalWindow->property("id").toInt()); + + int qmlWindowCount = m_testHelper.evaluate("Falkon.Windows.getAll().length").toInt(); + QCOMPARE(qmlWindowCount, mApp->windowCount()); + + QSignalSpy qmlWindowRemovedSignal(windowObject, SIGNAL(removed(QmlWindow*))); + int newQmlWindowId = newQmlSignalWindow->property("id").toInt(); + m_testHelper.evaluate(QString("Falkon.Windows.remove(%1)").arg(newQmlWindowId)); + QTRY_COMPARE(qmlWindowRemovedSignal.count(), 1); +} + +FALKONTEST_MAIN(QmlWindowsApiTest) diff --git a/autotests/qml/qmlwindowsapitest.h b/autotests/qml/qmlwindowsapitest.h new file mode 100644 index 000000000..09ce244c2 --- /dev/null +++ b/autotests/qml/qmlwindowsapitest.h @@ -0,0 +1,33 @@ +/* ============================================================ +* Falkon - Qt web browser +* Copyright (C) 2018 Anmol Gautam +* +* This program is free software: you can redistribute it and/or modify +* it under the terms of the GNU General Public License as published by +* the Free Software Foundation, either version 3 of the License, or +* (at your option) any later version. +* +* This program 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 General Public License for more details. +* +* You should have received a copy of the GNU General Public License +* along with this program. If not, see . +* ============================================================ */ +#pragma once + +#include +#include "qmltesthelper.h" + +class QmlWindowsApiTest : public QObject +{ + Q_OBJECT + QmlTestHelper m_testHelper; + +private Q_SLOTS: + void initTestCase(); + void cleanupTestCase(); + + void testWindowsAPI(); +}; diff --git a/src/lib/adblock/metadata.desktop b/src/lib/adblock/metadata.desktop index 95dd3edd1..b0993da90 100644 --- a/src/lib/adblock/metadata.desktop +++ b/src/lib/adblock/metadata.desktop @@ -38,6 +38,7 @@ Comment[nl]=Blokkeert niet-gewilde webinhoud Comment[nn]=Blokkerer uønskt vevinnhald Comment[pl]=Blokuje niechciane treści z sieci Comment[pt]=Bloqueia o conteúdo Web indesejado +Comment[pt_BR]=Bloqueie conteúdos web indesejados Comment[sv]=Blockerar oönskat webbinnehåll Comment[uk]=Блокує небажані інтернет-дані Comment[x-test]=xxBlocks unwanted web contentxx diff --git a/src/lib/data/breeze-fallback/index.theme b/src/lib/data/breeze-fallback/index.theme index e6c6cb324..f8562f95a 100644 --- a/src/lib/data/breeze-fallback/index.theme +++ b/src/lib/data/breeze-fallback/index.theme @@ -43,6 +43,7 @@ Comment[nl]=Breeze-team Comment[nn]=Breeze-laget Comment[pl]=Zespół Bryzy Comment[pt]=Equipa do Brisa +Comment[pt_BR]=Equipe Breeze Comment[sv]=Breeze-gruppen Comment[uk]=Команда Breeze Comment[x-test]=xxBreeze Teamxx diff --git a/src/plugins/AutoScroll/metadata.desktop b/src/plugins/AutoScroll/metadata.desktop index 676ad7b97..dab0038cf 100644 --- a/src/plugins/AutoScroll/metadata.desktop +++ b/src/plugins/AutoScroll/metadata.desktop @@ -16,6 +16,7 @@ Name[nl]=Auto-schuiven Name[nn]=Autorulling Name[pl]=Samoprzewijanie Name[pt]=Deslocamento Automático +Name[pt_BR]=AutoScroll Name[sv]=Rulla automatiskt Name[uk]=Автогортання Name[x-test]=xxAutoScrollxx @@ -36,6 +37,7 @@ Comment[nl]=Bied ondersteuning voor auto-schuiven met middelste muisknop Comment[nn]=Gjev støtte for autorulling med midtknappen på musa Comment[pl]=Zapewnia obsługę samoprzewijania na środkowy przycisk myszy Comment[pt]=Oferece o suporte para o deslocamento automático com o botão do meio do rato +Comment[pt_BR]=Fornece suporte para rolagem automática com o botão do meio do mouse Comment[sv]=Tillhandahåller stöd för automatisk rullning med musens mittenknapp Comment[uk]=Забезпечує підтримку автогортання середньою кнопкою миші Comment[x-test]=xxProvides support for autoscroll with middle mouse buttonxx diff --git a/src/plugins/GnomeKeyringPasswords/metadata.desktop b/src/plugins/GnomeKeyringPasswords/metadata.desktop index ea30e0169..09001ab5f 100644 --- a/src/plugins/GnomeKeyringPasswords/metadata.desktop +++ b/src/plugins/GnomeKeyringPasswords/metadata.desktop @@ -15,6 +15,7 @@ Name[nl]=GNOME-sleutelbos wachtwoorden Name[nn]=Passord for Gnome-nøkkelring Name[pl]=Hasła pęku kluczy Gnome Name[pt]=Senhas no Porta-Chaves do Gnome +Name[pt_BR]=Senhas do chaveiro do Gnome Name[sv]=Gnome-nyckelring lösenord Name[uk]=Паролі сховища ключів Gnome Name[x-test]=xxGnome Keyring Passwordsxx @@ -35,6 +36,7 @@ Comment[nl]=Biedt ondersteuning voor opslaan van GNOME-sleutelbos wachtwoorden Comment[nn]=Gjev støtte for lagring av passord i Gnome-nøkkelringen Comment[pl]=Zapewnia obsługę przechowywania haseł w pęku kluczy gnome Comment[pt]=Oferece o suporte para gravar as senhas no 'gnome-keyring' +Comment[pt_BR]=Fornece suporte para armazenar senhas no gnome-keyring Comment[sv]=Tillhandahåller stöd för att lagra lösenord i Gnome-nyckelring Comment[uk]=Забезпечує підтримку зберігання паролів у gnome-keyring Comment[x-test]=xxProvides support for storing passwords in gnome-keyringxx diff --git a/src/plugins/GreaseMonkey/metadata.desktop b/src/plugins/GreaseMonkey/metadata.desktop index 5db920dd1..238d6c225 100644 --- a/src/plugins/GreaseMonkey/metadata.desktop +++ b/src/plugins/GreaseMonkey/metadata.desktop @@ -16,6 +16,7 @@ Name[nl]=GreaseMonkey Name[nn]=GreaseMonkey Name[pl]=GreaseMonkey Name[pt]=GreaseMonkey +Name[pt_BR]=GreaseMonkey Name[sv]=GreaseMonkey Name[uk]=GreaseMonkey Name[x-test]=xxGreaseMonkeyxx @@ -36,6 +37,7 @@ Comment[nl]=Biedt ondersteuning voor scripts van gebruikers Comment[nn]=Gjev støtte for brukarskript Comment[pl]=Zapewnia obsługę dla skryptów użytkownika Comment[pt]=Oferece o suporte para programas do utilizador +Comment[pt_BR]=Fornece suporte para scripts do usuário Comment[sv]=Tillhandahåller stöd för användarskript Comment[uk]=Забезпечує підтримку скриптів користувача Comment[x-test]=xxProvides support for userscriptsxx diff --git a/src/plugins/MouseGestures/metadata.desktop b/src/plugins/MouseGestures/metadata.desktop index 35de44daf..ab58be7a0 100644 --- a/src/plugins/MouseGestures/metadata.desktop +++ b/src/plugins/MouseGestures/metadata.desktop @@ -16,6 +16,7 @@ Name[nl]=Muisgebaren Name[nn]=Muserørsler Name[pl]=Gesty myszy Name[pt]=Gestos do Rato +Name[pt_BR]=Gestos do mouse Name[sv]=Musgester Name[uk]=Керування мишею Name[x-test]=xxMouse Gesturesxx @@ -37,6 +38,7 @@ Comment[nl]=Biedt ondersteuning voor navigeren in webpagina's door muisgebaren Comment[nn]=Gjev støtte for muserørsler for nettsidenavigering Comment[pl]=Zapewnia obsługę poruszania się po stronach przy użyciu gestów myszy Comment[pt]=Oferece o suporte para navegar nas páginas Web com gestos do rato +Comment[pt_BR]=Fornece suporte para navegação em sites usando gestos do mouse Comment[sv]=Tillhandahåller stöd för att navigera på webbsidor med musgester Comment[uk]=Забезпечує підтримку навігації сторінками за допомогою жестів вказівником миші Comment[x-test]=xxProvides support for navigating in webpages by mouse gesturesxx diff --git a/src/plugins/PIM/metadata.desktop b/src/plugins/PIM/metadata.desktop index 016988017..1df73f48e 100644 --- a/src/plugins/PIM/metadata.desktop +++ b/src/plugins/PIM/metadata.desktop @@ -16,6 +16,7 @@ Name[nl]=PIM Name[nn]=PIM Name[pl]=ZIO Name[pt]=PIM +Name[pt_BR]=PIM Name[sv]=Personlig information Name[uk]=Керування інформацією Name[x-test]=xxPIMxx @@ -36,6 +37,7 @@ Comment[nl]=Biedt mogelijkheid voor Falkon om enige persoonlijke gegevens op te Comment[nn]=Gjer det mogleg for Falkon å lagra nokre persondata Comment[pl]=Dodaje możliwość przechowywania pewnych danych osobistych Comment[pt]=Adiciona ao Falkon a capacidade de guardar alguns dados pessoais +Comment[pt_BR]=Adiciona a habilitade ao Falkon para armazenar alguns dados pessoais Comment[sv]=Lägger till möjlighet för Falkon att lagra viss personlig information Comment[uk]=Додає у Falkon можливість зберігати особисті дані Comment[x-test]=xxAdds ability for Falkon to store some personal dataxx diff --git a/src/plugins/StatusBarIcons/metadata.desktop b/src/plugins/StatusBarIcons/metadata.desktop index f94c077b8..5af58133a 100644 --- a/src/plugins/StatusBarIcons/metadata.desktop +++ b/src/plugins/StatusBarIcons/metadata.desktop @@ -16,6 +16,7 @@ Name[nl]=Pictogrammen op de statusbalk Name[nn]=Statuslinje-ikon Name[pl]=Ikony paska stanu Name[pt]=Ícones da Barra de Estado +Name[pt_BR]=Ícones da barra de status Name[sv]=Ikoner i statusraden Name[uk]=Піктограми смужки стану Name[x-test]=xxStatusBar Iconsxx @@ -36,6 +37,7 @@ Comment[nl]=Voegt extra pictogrammen en zoomwidget toe aan de statusbalk Comment[nn]=Leggjer til fleire ikon og sideforstørring via statuslinja Comment[pl]=Dodaje dodatkowe ikony i element do powiększania na pasku stanu Comment[pt]=Adiciona ícones extra e um item de ampliação à barra de estado +Comment[pt_BR]=Adiciona ícones adicionais e widget de zoom na barra de status Comment[sv]=Lägger till ytterligare ikoner och en zoomkomponent i statusraden Comment[uk]=Додає піктограми і віджет масштабування на смужку стану Comment[x-test]=xxAdds additional icons and zoom widget to statusbarxx diff --git a/src/plugins/TabManager/metadata.desktop b/src/plugins/TabManager/metadata.desktop index 00b8dddfc..fff4f0537 100644 --- a/src/plugins/TabManager/metadata.desktop +++ b/src/plugins/TabManager/metadata.desktop @@ -16,6 +16,7 @@ Name[nl]=Tabbladbeheerder Name[nn]=Fanehandsamar Name[pl]=Zarządzanie kartami Name[pt]=Gestor de Páginas +Name[pt_BR]=Gerenciador de abas Name[sv]=Flikhanterare Name[uk]=Керування вкладками Name[x-test]=xxTab Managerxx @@ -37,6 +38,7 @@ Comment[nl]=Voegt mogelijkheid toe om tabbladen en vensters te beheren Comment[nn]=Gjer det mogleg å handtera faner og vindauge Comment[pl]=Dodaje możliwość zarządzania kartami i oknami Comment[pt]=Adiciona a capacidade para gerir páginas e janelas +Comment[pt_BR]=Adiciona a habilidade de gerenciar abas e janelas Comment[sv]=Lägger till möjlighet att hantera flikar och fönster Comment[uk]=Додає можливість керування вкладками і вікнами Comment[x-test]=xxAdds ability to managing tabs and windowsxx diff --git a/src/plugins/TestPlugin/metadata.desktop b/src/plugins/TestPlugin/metadata.desktop index 09cf08e68..87e8c57ff 100644 --- a/src/plugins/TestPlugin/metadata.desktop +++ b/src/plugins/TestPlugin/metadata.desktop @@ -16,6 +16,7 @@ Name[nl]=Voorbeeld plug-in Name[nn]=Eksempel-tillegg Name[pl]=Przykładowa wtyczka Name[pt]='Plugin' de Exemplo +Name[pt_BR]=Plugin de exemplo Name[sv]=Exempelinsticksprogram Name[uk]=Приклад додатка Name[x-test]=xxExample Pluginxx @@ -37,6 +38,7 @@ Comment[nl]=Zeer eenvoudige minimaal voorbeeld voor plug-in Comment[nn]=Veldig enkelt og lite eksempel-tillegg Comment[pl]=Bardzo prosty minimalny przykład wtyczki Comment[pt]='Plugin' de exemplo muito simples e minimalista +Comment[pt_BR]=Um exemplo de plugin mínimo e simples Comment[sv]=Mycket enkelt minimalt exempel på ett insticksprogram Comment[uk]=Дуже простий мінімальний приклад додатка Comment[x-test]=xxVery simple minimal plugin examplexx diff --git a/src/plugins/VerticalTabs/metadata.desktop b/src/plugins/VerticalTabs/metadata.desktop index 49fc41040..bb7d37d34 100644 --- a/src/plugins/VerticalTabs/metadata.desktop +++ b/src/plugins/VerticalTabs/metadata.desktop @@ -16,6 +16,7 @@ Name[nl]=Verticale tabbladen Name[nn]=Loddrette faner Name[pl]=Pionowe karty Name[pt]=Páginas Verticais +Name[pt_BR]=Abas verticais Name[sv]=Vertikala flikar Name[uk]=Вертикальні вкладки Name[x-test]=xxVertical Tabsxx @@ -36,6 +37,7 @@ Comment[nl]=Voegt mogelijkheid toe om tabbladen in de zijbalk te tonen Comment[nn]=Gjer det mogleg å visa faner i sidestolpen Comment[pl]=Dodaje możliwość pokazywania kart na pasku bocznym Comment[pt]=Adiciona a capacidade de mostrar as páginas na barra lateral +Comment[pt_BR]=Adiciona a habilidade de mostrar abas na barra lateral Comment[sv]=Lägger till möjlighet att visa flikar i sidorader Comment[uk]=Додає можливість показу вкладок на бічній панелі Comment[x-test]=xxAdds ability to show tabs in sidebarxx diff --git a/src/scripts/hellopython/metadata.desktop b/src/scripts/hellopython/metadata.desktop index 3c8088354..1c3a16f80 100644 --- a/src/scripts/hellopython/metadata.desktop +++ b/src/scripts/hellopython/metadata.desktop @@ -16,6 +16,7 @@ Name[nl]=Hallo Python Name[nn]=Hei-Python Name[pl]=Witaj Python Name[pt]=Olá em Python +Name[pt_BR]=Olá Python Name[sv]=Hej Python Name[uk]=Привіт, Python Name[x-test]=xxHello Pythonxx @@ -37,6 +38,7 @@ Comment[nl]=Voorbeeld Python-extensie Comment[nn]=Eksempel på Python-tillegg Comment[pl]=Przykładowe rozszerzenie Python Comment[pt]=Extensão de exemplo em Python +Comment[pt_BR]=Exemplo de extensão python Comment[sv]=Exempel på Python-utökning Comment[uk]=Приклад розширення мовою Python Comment[x-test]=xxExample Python extensionxx diff --git a/themes/chrome/metadata.desktop b/themes/chrome/metadata.desktop index 1d5ab8dbe..e9f281f96 100644 --- a/themes/chrome/metadata.desktop +++ b/themes/chrome/metadata.desktop @@ -16,6 +16,7 @@ Name[nl]=Chrome Name[nn]=Chrome Name[pl]=Chrome Name[pt]=Chrome +Name[pt_BR]=Chrome Name[sv]=Chrome Name[uk]=Хромування Name[x-test]=xxChromexx @@ -37,6 +38,7 @@ Comment[nl]=Op Chrome lijkend thema voor Falkon gebaseerd op Firefox Chromifox t Comment[nn]=Chrome-liknande tema for Falkon, basert på Firefox Chromifox-temaet Comment[pl]=Wygląd przypominający Chrome dla Falkona oparty na wyglądzie Firefox Chromifox Comment[pt]=Tema semelhante ao Chrome para o Falkon, baseado no tema Chromifox do Firefox +Comment[pt_BR]=Tema parecido com o Chrome para o Falkon, baseado no tema Chromifox do Firefox Comment[sv]=Chrome-liknande tema för Falkon baserat på Firefox Chromifox-tema Comment[uk]=Chrome-подібна тема для Falkon, заснована на темі Chromifox для Firefox Comment[x-test]=xxChrome like theme for Falkon based on Firefox Chromifox themexx diff --git a/themes/linux/metadata.desktop b/themes/linux/metadata.desktop index 6623416c9..147b75532 100644 --- a/themes/linux/metadata.desktop +++ b/themes/linux/metadata.desktop @@ -16,6 +16,7 @@ Name[nl]=Linux Name[nn]=Linux Name[pl]=Linux Name[pt]=Linux +Name[pt_BR]=Linux Name[sv]=Linux Name[uk]=Linux Name[x-test]=xxLinuxxx @@ -36,6 +37,7 @@ Comment[nl]=Standaard eenvoudig thema voor Linux met inheemse widgetstijl en eni Comment[nn]=Standardtema for Linux, som brukar systemutsjånad på skjermelement og nokre ikon frå skrivebordsikontemaet Comment[pl]=Domyślny prosty wygląd dla Linuksa używający natywnego wyglądu elementów interfejsu i podstawowych ikon z zestawu ikon dla pulpitu Comment[pt]=Tema predefinido simples para o Linux, usando o estilo gráfico nativo e alguns ícones básicos do conjunto de ícones do ambiente de trabalho +Comment[pt_BR]=Tema simples padrão para o Linux usando estilo de widgets nativos e alguns ícones básicos do conjunto de ícones da área de trabalho Comment[sv]=Enkelt standardtema för Linux som använder inbyggd komponentstil och några grundläggande ikoner från skrivbordets ikonuppsättning Comment[uk]=Типова проста тема для Linux із використанням природного стилю віджетів і декількох базових піктограм із набору піктограм стільниці Comment[x-test]=xxDefault simple theme for Linux using native widget style and some basic icons from desktop icon setxx diff --git a/themes/mac/metadata.desktop b/themes/mac/metadata.desktop index 0e5bc2798..39f1e4d5f 100644 --- a/themes/mac/metadata.desktop +++ b/themes/mac/metadata.desktop @@ -16,6 +16,7 @@ Name[nl]=Mac Name[nn]=Mac Name[pl]=Mac Name[pt]=Mac +Name[pt_BR]=Mac Name[sv]=Mac Name[uk]=Mac Name[x-test]=xxMacxx @@ -37,6 +38,7 @@ Comment[nl]=Op Mac lijkend thema voor Falkon gebaseerd op Firefox Mac OS X thema Comment[nn]=Mac-liknande tema for Falkon, basert på Firefox Mac OS X-temaet Comment[pl]=Wygląd przypominający Maka dla Falkona oparty na wyglądzie Firefox Mac OS X Comment[pt]=Tema semelhante ao Mac para o Falkon, baseado no tema Mac OS X do Firefox +Comment[pt_BR]=Tema estilo Mac para o Falkon baseado no tema Mac OS X do Firefox Comment[sv]=Mac-liknande tema för Falkon baserat på Firefox Mac OS X-tema Comment[uk]=Mac-подібна тема для Falkon, заснована на темі Mac OS X для Firefox Comment[x-test]=xxMac like theme for Falkon based on Firefox Mac OS X themexx diff --git a/themes/windows/metadata.desktop b/themes/windows/metadata.desktop index 5b818fe5e..f63f413e2 100644 --- a/themes/windows/metadata.desktop +++ b/themes/windows/metadata.desktop @@ -16,6 +16,7 @@ Name[nl]=Windows Name[nn]=Windows Name[pl]=Windows Name[pt]=Windows +Name[pt_BR]=Windows Name[sv]=Windows Name[uk]=Windows Name[x-test]=xxWindowsxx @@ -37,6 +38,7 @@ Comment[nl]=Op Windows lijkend thema gebaseerd op Material ontwerp Comment[nn]=Windows-liknande tema, basert på Material-stilen Comment[pl]=Wygląd przypominający Windowsa dla Falkona oparty na wyglądzie Material Comment[pt]=Tema semelhante ao Windows, baseado no 'material design' +Comment[pt_BR]=Tema estilo Windows baseado no Material design Comment[sv]=Windows-liknande tema baserat på Material design Comment[uk]=Windows-подібна тема, заснована на дизайні Material Comment[x-test]=xxWindows like theme based on Material designxx