diff --git a/.gitignore b/.gitignore index d103ceaa9..89680235f 100644 --- a/.gitignore +++ b/.gitignore @@ -30,3 +30,4 @@ tests/modeltest *.swp *_manifest.* *.embed.manifest +bin/autotests diff --git a/scripts/run_tests.sh b/scripts/run_tests.sh new file mode 100755 index 000000000..bb6e170e1 --- /dev/null +++ b/scripts/run_tests.sh @@ -0,0 +1,9 @@ +#!/bin/bash +# run_tests.sh + +cd ../tests/autotests +qmake DEFINES+=NO_SYSTEM_DATAPATH && make +cd ../../bin + +clear +./autotests diff --git a/src/lib/tools/qztools.cpp b/src/lib/tools/qztools.cpp index 35bf9e577..a52c3e101 100644 --- a/src/lib/tools/qztools.cpp +++ b/src/lib/tools/qztools.cpp @@ -1,6 +1,6 @@ /* ============================================================ * QupZilla - WebKit based browser -* Copyright (C) 2010-2012 David Rosca +* Copyright (C) 2010-2013 David Rosca * * 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 @@ -69,7 +69,7 @@ QString QzTools::readAllFileContents(const QString &filename) return a; } - return QByteArray(); + return QString(); } void QzTools::centerWidgetOnScreen(QWidget* w) @@ -126,10 +126,15 @@ void QzTools::removeDir(const QString &d) } } +/* Finds same part of @one in @other from the beginning */ QString QzTools::samePartOfStrings(const QString &one, const QString &other) { - int i = 0; int maxSize = qMin(one.size(), other.size()); + if (maxSize <= 0) { + return QString(); + } + + int i = 0; while (one.at(i) == other.at(i)) { i++; if (i == maxSize) { @@ -139,38 +144,6 @@ QString QzTools::samePartOfStrings(const QString &one, const QString &other) return one.left(i); } -QUrl QzTools::makeRelativeUrl(const QUrl &baseUrl, const QUrl &rUrl) -{ - QString baseUrlPath = baseUrl.path(); - QString rUrlPath = rUrl.path(); - - QString samePart = QzTools::samePartOfStrings(baseUrlPath, rUrlPath); - - QUrl returnUrl; - if (samePart.isEmpty()) { - returnUrl = rUrl; - } - else if (samePart == QLatin1String("/")) { - returnUrl = QUrl(rUrl.path()); - } - else { - samePart = samePart.left(samePart.lastIndexOf(QLatin1Char('/')) + 1); - int slashCount = samePart.count(QLatin1Char('/')) + 1; - if (samePart.startsWith(QLatin1Char('/'))) { - slashCount--; - } - if (samePart.endsWith(QLatin1Char('/'))) { - slashCount--; - } - - rUrlPath.remove(samePart); - rUrlPath.prepend(QString("..""/").repeated(slashCount)); - returnUrl = QUrl(rUrlPath); - } - - return returnUrl; -} - QString QzTools::urlEncodeQueryString(const QUrl &url) { QString returnString = url.toString(QUrl::RemoveQuery | QUrl::RemoveFragment); @@ -223,6 +196,11 @@ QString QzTools::ensureUniqueFilename(const QString &name, const QString &append QString QzTools::getFileNameFromUrl(const QUrl &url) { QString fileName = url.toString(QUrl::RemoveFragment | QUrl::RemoveQuery | QUrl::RemoveScheme | QUrl::RemovePort); + + if (fileName.endsWith(QLatin1Char('/'))) { + fileName = fileName.mid(0, fileName.length() - 1); + } + if (fileName.indexOf(QLatin1Char('/')) != -1) { int pos = fileName.lastIndexOf(QLatin1Char('/')); fileName = fileName.mid(pos); @@ -232,7 +210,7 @@ QString QzTools::getFileNameFromUrl(const QUrl &url) fileName = filterCharsFromFilename(fileName); if (fileName.isEmpty()) { - fileName = filterCharsFromFilename(url.host().replace(QLatin1Char('.'), QLatin1Char('-'))); + fileName = filterCharsFromFilename(url.host()); } return fileName; @@ -289,18 +267,17 @@ QString QzTools::fileSizeToString(qint64 size) return QObject::tr("Unknown size"); } - double _size = (double)size; - _size /= 1024; //kB + double _size = size / 1024.0; // KB if (_size < 1000) { return QString::number(_size > 1 ? _size : 1, 'f', 0) + " KB"; } - _size /= 1024; //MB + _size /= 1024; // MB if (_size < 1000) { return QString::number(_size, 'f', 1) + " MB"; } - _size /= 1024; //GB + _size /= 1024; // GB return QString::number(_size, 'f', 2) + " GB"; } diff --git a/src/lib/tools/qztools.h b/src/lib/tools/qztools.h index b52325f02..e15d027f7 100644 --- a/src/lib/tools/qztools.h +++ b/src/lib/tools/qztools.h @@ -44,7 +44,6 @@ bool QT_QUPZILLA_EXPORT removeFile(const QString &fullFileName); void QT_QUPZILLA_EXPORT removeDir(const QString &d); QString QT_QUPZILLA_EXPORT samePartOfStrings(const QString &one, const QString &other); -QUrl QT_QUPZILLA_EXPORT makeRelativeUrl(const QUrl &baseUrl, const QUrl &rUrl); QString QT_QUPZILLA_EXPORT urlEncodeQueryString(const QUrl &url); QString QT_QUPZILLA_EXPORT ensureUniqueFilename(const QString &name, const QString &appendFormat = QString("(%1)")); diff --git a/tests/autotests/autotests.pro b/tests/autotests/autotests.pro new file mode 100644 index 000000000..5e510b06b --- /dev/null +++ b/tests/autotests/autotests.pro @@ -0,0 +1,53 @@ +isEqual(QT_MAJOR_VERSION, 5) { + QT += webkitwidgets network widgets printsupport sql script gui-private +} else { + QT += core gui webkit sql network script +} + +TARGET = autotests +CONFIG += qtestlib + +!unix|mac: LIBS += -L$$PWD/../../bin -lQupZilla +!mac:unix: LIBS += $$PWD/../../bin/libQupZilla.so + +unix:contains(DEFINES, "NO_SYSTEM_DATAPATH"): QMAKE_LFLAGS+=$${QMAKE_LFLAGS_RPATH}\\$\$ORIGIN + +include($$PWD/../../src/defines.pri) + +DESTDIR = $$PWD/../../bin +OBJECTS_DIR = build +MOC_DIR = build +RCC_DIR = build +UI_DIR = build + +INCLUDEPATH += $$PWD/../../src/lib/3rdparty\ + $$PWD/../../src/lib/app\ + $$PWD/../../src/lib/autofill\ + $$PWD/../../src/lib/bookmarks\ + $$PWD/../../src/lib/cookies\ + $$PWD/../../src/lib/session\ + $$PWD/../../src/lib/downloads\ + $$PWD/../../src/lib/history\ + $$PWD/../../src/lib/navigation\ + $$PWD/../../src/lib/network\ + $$PWD/../../src/lib/other\ + $$PWD/../../src/lib/preferences\ + $$PWD/../../src/lib/rss\ + $$PWD/../../src/lib/tools\ + $$PWD/../../src/lib/utils\ + $$PWD/../../src/lib/webview\ + $$PWD/../../src/lib/plugins\ + $$PWD/../../src/lib/sidebar\ + $$PWD/../../src/lib/data\ + $$PWD/../../src/lib/adblock\ + $$PWD/../../src/lib/desktopnotifications\ + $$PWD/../../src/lib/opensearch\ + $$PWD/../../src/lib/bookmarksimport\ + $$PWD/../../src/lib/popupwindow\ + +HEADERS += \ + qztoolstest.h + +SOURCES += \ + qztoolstest.cpp \ + main.cpp diff --git a/tests/autotests/main.cpp b/tests/autotests/main.cpp new file mode 100644 index 000000000..3d07968d0 --- /dev/null +++ b/tests/autotests/main.cpp @@ -0,0 +1,31 @@ +/* ============================================================ +* QupZilla - WebKit based browser +* Copyright (C) 2010-2013 David Rosca +* +* 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 "qztoolstest.h" + +#include + +int main(int argc, char *argv[]) +{ + QApplication app(argc, argv); + QTEST_DISABLE_KEYPAD_NAVIGATION; + + QzToolsTest qzToolsTest; + QTest::qExec(&qzToolsTest, argc, argv); + + return 0; +} diff --git a/tests/autotests/qztoolstest.cpp b/tests/autotests/qztoolstest.cpp new file mode 100644 index 000000000..0465f3f22 --- /dev/null +++ b/tests/autotests/qztoolstest.cpp @@ -0,0 +1,69 @@ +/* ============================================================ +* QupZilla - WebKit based browser +* Copyright (C) 2010-2013 David Rosca +* +* 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 "qztoolstest.h" +#include "qztools.h" + +#include + +void QzToolsTest::samePartOfStrings_data() +{ + QTest::addColumn("string1"); + QTest::addColumn("string2"); + QTest::addColumn("result"); + + // Lorem ipsum dolor sit amet, consectetur adipiscing elit. + QTest::newRow("General") << "Lorem ipsum dolor" << "Lorem ipsum dolor Test_1" << "Lorem ipsum dolor"; + QTest::newRow("OneChar") << "L" << "LTest_1" << "L"; + QTest::newRow("EmptyReturn") << "Lorem ipsum dolor" << "orem ipsum dolor Test_1" << ""; + QTest::newRow("EmptyString1") << "" << "orem ipsum dolor Test_1" << ""; + QTest::newRow("EmptyString2") << "Lorem ipsum dolor" << "" << ""; + QTest::newRow("EmptyBoth") << "" << "" << ""; +} + +void QzToolsTest::samePartOfStrings() +{ + QFETCH(QString, string1); + QFETCH(QString, string2); + QFETCH(QString, result); + + QCOMPARE(QzTools::samePartOfStrings(string1, string2), result); +} + +void QzToolsTest::getFileNameFromUrl_data() +{ + QTest::addColumn("url"); + QTest::addColumn("result"); + + QTest::newRow("Basic") << QUrl("http://www.google.com/filename.html") << "filename.html"; + QTest::newRow("OnlyHost") << QUrl("http://www.google.com/") << "www.google.com"; + QTest::newRow("OnlyHostWithoutSlash") << QUrl("http://www.google.com") << "www.google.com"; + QTest::newRow("EndingDirectory") << QUrl("http://www.google.com/filename/") << "filename"; + QTest::newRow("EmptyUrl") << QUrl("") << ""; + QTest::newRow("OnlyScheme") << QUrl("http:") << ""; + QTest::newRow("FileSchemeUrl") << QUrl("file:///usr/share/test/file.tx") << "file.tx"; + QTest::newRow("FileSchemeUrlDirectory") << QUrl("file:///usr/share/test/") << "test"; + QTest::newRow("FileSchemeUrlRoot") << QUrl("file:///") << ""; +} + +void QzToolsTest::getFileNameFromUrl() +{ + QFETCH(QUrl, url); + QFETCH(QString, result); + + QCOMPARE(QzTools::getFileNameFromUrl(url), result); +} diff --git a/tests/autotests/qztoolstest.h b/tests/autotests/qztoolstest.h new file mode 100644 index 000000000..99ca34540 --- /dev/null +++ b/tests/autotests/qztoolstest.h @@ -0,0 +1,36 @@ +/* ============================================================ +* QupZilla - WebKit based browser +* Copyright (C) 2010-2013 David Rosca +* +* 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 . +* ============================================================ */ +#ifndef QZTOOLSTEST_H +#define QZTOOLSTEST_H + +#include + +class QzToolsTest : public QObject +{ + Q_OBJECT + +private slots: + void samePartOfStrings_data(); + void samePartOfStrings(); + + void getFileNameFromUrl_data(); + void getFileNameFromUrl(); + +}; + +#endif // QZTOOLSTEST_H