summaryrefslogtreecommitdiffstats
path: root/kio/tests/kurlcompletiontest.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'kio/tests/kurlcompletiontest.cpp')
-rw-r--r--kio/tests/kurlcompletiontest.cpp189
1 files changed, 189 insertions, 0 deletions
diff --git a/kio/tests/kurlcompletiontest.cpp b/kio/tests/kurlcompletiontest.cpp
new file mode 100644
index 000000000..ac0108ead
--- /dev/null
+++ b/kio/tests/kurlcompletiontest.cpp
@@ -0,0 +1,189 @@
+/*
+ * Copyright (C) 2004 David Faure <faure@kde.org>
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Library General Public
+ * License version 2 as published by the Free Software Foundation;
+ *
+ * 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 <kapplication.h>
+#include <kurlcompletion.h>
+#include <kdebug.h>
+#include <qdir.h>
+#include <assert.h>
+#include <qfile.h>
+#include <ktempdir.h>
+#include <kcmdlineargs.h>
+#include <unistd.h>
+
+class KURLCompletionTest
+{
+public:
+ KURLCompletionTest() {}
+ ~KURLCompletionTest() { teardown(); }
+ void setup( bool setDirAsURL );
+ void teardown();
+ void testLocalRelativePath();
+ void testLocalAbsolutePath();
+ void testLocalURL();
+
+private:
+ void waitForCompletion();
+ KURLCompletion* m_completion;
+ KTempDir* m_tempDir;
+ KURL m_dirURL;
+ QString m_dir;
+};
+
+void KURLCompletionTest::setup( bool setDirAsURL )
+{
+ kdDebug() << k_funcinfo << endl;
+ m_completion = new KURLCompletion;
+ m_tempDir = new KTempDir;
+ m_tempDir->setAutoDelete( true );
+ m_dir = m_tempDir->name();
+ kdDebug() << "m_dir=" << m_dir << endl;
+ Q_ASSERT( m_dir.endsWith( "/" ) );
+ if ( setDirAsURL ) {
+ KURL d; d.setPath( m_dir );
+ m_completion->setDir( d.url() );
+ } else {
+ m_completion->setDir( m_dir );
+ }
+ m_dirURL.setPath( m_dir );
+
+ QFile f1( m_dir + "/file1" );
+ bool ok = f1.open( IO_WriteOnly );
+ assert( ok );
+ f1.close();
+
+ QFile f2( m_dir + "/file#a" );
+ ok = f2.open( IO_WriteOnly );
+ assert( ok );
+ f2.close();
+}
+
+void KURLCompletionTest::teardown()
+{
+ delete m_completion;
+ m_completion = 0;
+ delete m_tempDir;
+ m_tempDir = 0;
+}
+void KURLCompletionTest::waitForCompletion()
+{
+ while ( m_completion->isRunning() ) {
+ kdDebug() << "waiting for thread..." << endl;
+ usleep( 10 );
+ }
+}
+
+void KURLCompletionTest::testLocalRelativePath()
+{
+ kdDebug() << k_funcinfo << endl;
+ // Completion from relative path, with two matches
+ m_completion->makeCompletion( "f" );
+ waitForCompletion();
+ QStringList comp1all = m_completion->allMatches();
+ assert( comp1all.count() == 2 );
+ assert( comp1all.find( "file1" ) != comp1all.end() );
+ assert( comp1all.find( "file#a" ) != comp1all.end() );
+ QString comp1 = m_completion->replacedPath( "file1" ); // like KURLRequester does
+ assert( comp1 == "file1" );
+
+ // Completion from relative path
+ kdDebug() << endl << k_funcinfo << "now completing on 'file#'" << endl;
+ m_completion->makeCompletion( "file#" );
+ waitForCompletion();
+ QStringList compall = m_completion->allMatches();
+ kdDebug() << compall << endl;
+ assert( compall.count() == 1 );
+ assert( compall.first() == "file#a" );
+ QString comp2 = m_completion->replacedPath( compall.first() ); // like KURLRequester does
+ assert( comp2 == "file#a" );
+}
+
+void KURLCompletionTest::testLocalAbsolutePath()
+{
+ // Completion from absolute path
+ kdDebug() << k_funcinfo << m_dir+"file#" << endl;
+ m_completion->makeCompletion( m_dir + "file#" );
+ waitForCompletion();
+ QStringList compall = m_completion->allMatches();
+ kdDebug() << compall << endl;
+ assert( compall.count() == 1 );
+ QString comp = compall.first();
+ assert( comp == m_dir + "file#a" );
+ comp = m_completion->replacedPath( comp ); // like KURLRequester does
+ assert( comp == m_dir + "file#a" );
+}
+
+void KURLCompletionTest::testLocalURL()
+{
+ // Completion from URL
+ kdDebug() << k_funcinfo << endl;
+ KURL url = KURL::fromPathOrURL( m_dirURL.path() + "file" );
+ m_completion->makeCompletion( url.prettyURL() );
+ waitForCompletion();
+ QStringList comp1all = m_completion->allMatches();
+ kdDebug() << comp1all << endl;
+ assert( comp1all.count() == 2 );
+ assert( comp1all.find( m_dirURL.url() + "file1" ) != comp1all.end() );
+ QString filehash = m_dirURL.url() + "file%23a";
+ assert( comp1all.find( filehash ) != comp1all.end() );
+ QString filehashPath = m_completion->replacedPath( filehash ); // note that it returns a path!!
+ kdDebug() << filehashPath << endl;
+ assert( filehashPath == m_dirURL.path() + "file#a" );
+
+ // Completion from URL with no match
+ url = KURL::fromPathOrURL( m_dirURL.path() + "foobar" );
+ kdDebug() << k_funcinfo << "makeCompletion(" << url << ")" << endl;
+ QString comp2 = m_completion->makeCompletion( url.prettyURL() );
+ assert( comp2.isEmpty() );
+ waitForCompletion();
+ assert( m_completion->allMatches().isEmpty() );
+
+ // Completion from URL with a ref -> no match
+ url = KURL::fromPathOrURL( m_dirURL.path() + "f" );
+ url.setRef( "ref" );
+ kdDebug() << k_funcinfo << "makeCompletion(" << url << ")" << endl;
+ m_completion->makeCompletion( url.prettyURL() );
+ waitForCompletion();
+ assert( m_completion->allMatches().isEmpty() );
+}
+
+int main( int argc, char **argv )
+{
+ KApplication::disableAutoDcopRegistration();
+ KCmdLineArgs::init(argc,argv,"kurlcompletiontest", 0, 0, 0, 0);
+ KApplication app;
+
+ {
+ KURLCompletionTest test;
+ test.setup( false );
+ test.testLocalRelativePath();
+ test.testLocalAbsolutePath();
+ test.testLocalURL();
+ test.teardown();
+
+ // Try again, with another KTempDir (to check that the caching doesn't give us wrong results)
+ test.setup( true );
+ test.testLocalRelativePath();
+ test.testLocalAbsolutePath();
+ test.testLocalURL();
+ test.teardown();
+ }
+ qDebug( "All tests OK." );
+
+ return 0;
+}