diff options
Diffstat (limited to 'kopete/protocols/oscar/liboscar/tests')
21 files changed, 1637 insertions, 0 deletions
diff --git a/kopete/protocols/oscar/liboscar/tests/Makefile.am b/kopete/protocols/oscar/liboscar/tests/Makefile.am new file mode 100644 index 00000000..9dc6b292 --- /dev/null +++ b/kopete/protocols/oscar/liboscar/tests/Makefile.am @@ -0,0 +1,28 @@ +INCLUDES = $(all_includes) $(KOPETE_INCLUDES) -I$(top_srcdir)/kopete/protocols/oscar/liboscar +METASOURCES = AUTO +check_PROGRAMS = kunittest clientstream_test logintest userinfotest ssigrouptest redirecttest ipaddrtest + +kunittest_SOURCES = main.cpp kunittest.cpp chatnavtests.cpp +kunittest_LDFLAGS = $(all_libraries) $(KDE_RPATH) +kunittest_LDADD = $(LIB_KDECORE) ../liboscar.la + +clientstream_test_SOURCES = clientstream_test.cpp +clientstream_test_LDADD = $(LIB_QT) $(LIB_KDECORE) ../liboscar.la + +logintest_SOURCES = logintest.cpp +logintest_LDADD = $(LIB_QT) $(LIB_KDECORE) ../liboscar.la + +userinfotest_SOURCES = userinfotest.cpp +userinfotest_LDADD = $(LIB_QT) $(LIB_KDECORE) ../liboscar.la + +ssigrouptest_SOURCES = ssigrouptest.cpp +ssigrouptest_LDADD = $(LIB_QT) $(LIB_KDECORE) ../liboscar.la + +redirecttest_SOURCES = redirecttest.cpp +redirecttest_LDADD = $(LIB_QT) $(LIB_KDECORE) ../liboscar.la + +ipaddrtest_SOURCES = ipaddrtest.cpp +ipaddrtest_LDADD = $(LIB_QT) $(LIB_KDECORE) ../liboscar.la + +check: kunittest + @./kunittest 2>&1 | grep "tests:" diff --git a/kopete/protocols/oscar/liboscar/tests/chatnavtests.cpp b/kopete/protocols/oscar/liboscar/tests/chatnavtests.cpp new file mode 100644 index 00000000..07a89f98 --- /dev/null +++ b/kopete/protocols/oscar/liboscar/tests/chatnavtests.cpp @@ -0,0 +1,305 @@ +/* + Kopete Oscar Protocol - Chat Navigation parsing tests + Copyright (c) 2005 Matt Rogers <mattr@kde.org> + + Kopete (c) 2002-2005 by the Kopete developers <kopete-devel@kde.org> + + ************************************************************************* + * * + * This library is free software; you can redistribute it and/or * + * modify it under the terms of the GNU Lesser General Public * + * License as published by the Free Software Foundation; either * + * version 2 of the License, or (at your option) any later version. * + * * + ************************************************************************* +*/ + +#include "chatnavtests.h" + +#include <iostream> + +#include "buffer.h" +#include "oscartypeclasses.h" + +using namespace std; +using namespace Oscar; + + +ChatNavTests::ChatNavTests() +{ + m_buffer = 0; +} + + +ChatNavTests::~ChatNavTests() +{ +} + +void ChatNavTests::setupExchangeTestBuffer() +{ + delete m_buffer; + m_buffer = 0; + + m_buffer = new Buffer(); + //TLV 0x02 + m_buffer->addDWord(0x00020001); + m_buffer->addByte(0x03); + //TLV 0x03 + m_buffer->addDWord(0x0003003C); + m_buffer->addDWord(0x0001000a); + m_buffer->addDWord(0x00030001); + m_buffer->addDWord(0x14000400); + m_buffer->addDWord(0x02200000); + m_buffer->addDWord(0xC9000200); + m_buffer->addDWord(0x4400CA00); + m_buffer->addDWord(0x04000000); + m_buffer->addDWord(0x0000D000); + m_buffer->addDWord(0x0000D100); + m_buffer->addDWord(0x0207D000); + m_buffer->addDWord(0xD2000200); + m_buffer->addDWord(0x2F00D400); + m_buffer->addDWord(0x0000D500); + m_buffer->addDWord(0x010100DA); + m_buffer->addDWord(0x00020066); +} + +void ChatNavTests::setupRoomInfoTestBuffer() +{ + + delete m_buffer; + m_buffer = 0; + + m_buffer = new Buffer(); + //TLV 0x04 + m_buffer->addDWord(0x000400F8); + m_buffer->addWord(0x0004); //exchange + m_buffer->addByte(0x28); //cookie length + m_buffer->addByte(0x21); //start of cookie + m_buffer->addDWord(0x616F6C3A); + m_buffer->addDWord(0x2F2F3237); + m_buffer->addDWord(0x31393A31); + m_buffer->addDWord(0x302D342D); + m_buffer->addDWord(0x63686174); + m_buffer->addDWord(0x37343739); + m_buffer->addDWord(0x33333134); + m_buffer->addDWord(0x30313137); + m_buffer->addDWord(0x37393435); + m_buffer->addDWord(0x36363500); + m_buffer->addDWord(0x00020016); + m_buffer->addDWord(0x00660002); + m_buffer->addDWord(0x00000068); + m_buffer->addDWord(0x00040000); + m_buffer->addDWord(0x0000006A); + m_buffer->addDWord(0x00176368); + m_buffer->addDWord(0x61743734); + m_buffer->addDWord(0x37393333); + m_buffer->addDWord(0x31343031); + m_buffer->addDWord(0x31373739); + m_buffer->addDWord(0x34353636); + m_buffer->addDWord(0x35006D00); + m_buffer->addDWord(0x02000000); + m_buffer->addDWord(0x6E000200); + m_buffer->addDWord(0x00006F00); + m_buffer->addDWord(0x02000000); + m_buffer->addDWord(0x71000200); + m_buffer->addDWord(0x00007500); + m_buffer->addDWord(0x04000000); + m_buffer->addDWord(0x0000C900); + m_buffer->addDWord(0x02004000); + m_buffer->addDWord(0xCA000442); + m_buffer->addDWord(0xBEF90500); + m_buffer->addDWord(0xD0000200); + m_buffer->addDWord(0x0300D100); + m_buffer->addDWord(0x0207D000); + m_buffer->addDWord(0xD2000200); + m_buffer->addDWord(0x2600D300); + m_buffer->addDWord(0x17636861); + m_buffer->addDWord(0x74373437); + m_buffer->addDWord(0x39333331); + m_buffer->addDWord(0x34303131); + m_buffer->addDWord(0x37373934); + m_buffer->addDWord(0x35363635); + m_buffer->addDWord(0x00D40000); + m_buffer->addDWord(0x00D50001); + m_buffer->addDWord(0x0100D600); + m_buffer->addDWord(0x0875732D); + m_buffer->addDWord(0x61736369); + m_buffer->addDWord(0x6900D700); + m_buffer->addDWord(0x02656E00); + m_buffer->addDWord(0xD8000875); + m_buffer->addDWord(0x732D6173); + m_buffer->addDWord(0x63696900); + m_buffer->addDWord(0xD9000265); + m_buffer->addDWord(0x6E00DB00); + m_buffer->addDWord(0x0D756578); + m_buffer->addDWord(0x742F782D); + m_buffer->addDWord(0x616F6C72); + m_buffer->addDWord(0x746600DA); + m_buffer->addDWord(0x000200E8); +} + +void ChatNavTests::allTests() +{ + exchangeParsingTest(); + roominfoParsingTest(); +} + +void ChatNavTests::exchangeParsingTest() +{ + setupExchangeTestBuffer(); + Buffer testBuffer(*m_buffer); + CHECK( testBuffer.length() != 0, true ); + while ( testBuffer.length() != 0 ) + { + TLV t = testBuffer.getTLV(); + if ( t.type == 0x0002 ) + { +// cout << "Max concurrent rooms: " << t.data << endl; + } + + t = testBuffer.getTLV(); + if ( t.type == 0x0003 ) + { +// cout << "TLV of type 3 with length " << t.length << endl; + Buffer b(t.data); + WORD id = b.getWord(); + CHECK( id > 0, true ); + int tlvCount = b.getWord(); + int realCount = 0; +// cout << "Expecting " << tlvCount << " TLVs" << endl; + while ( b.length() > 0 ) + { + TLV t = b.getTLV(); + CHECK( t.type != 0, true ); + switch (t.type) + { + case 0x02: + CHECK( t.length == 2, true ); + CHECK( t.data.count() == 2, true ); + break; + case 0x03: + CHECK( t.length == 1, true ); + CHECK( t.data.count() == 1, true ); + CHECK( t.data[0] > 0, true ); + break; + case 0x04: + CHECK( t.length == 2, true ); + CHECK( t.data.count() == 2, true ); + //CHECK( t.data[0] > 0, true ); + break; + case 0x05: + CHECK( t.length > 1, true ); + break; + case 0x06: + CHECK( t.length > 2, true ); + break; + case 0xCA: + CHECK( t.length == 4, true ); + break; + case 0xD1: + CHECK( t.length == 2, true ); + break; + case 0xD2: + CHECK( t.length == 2, true ); + break; + case 0xD3: + CHECK( t.length > 0, true ); + CHECK( t.data.count() == t.length, true ); + break; + case 0xD5: + CHECK( t.length == 1, true ); + break; + default: +// ios::fmtflags origFlags = cout.flags(ios::hex|ios::showbase); +// cout << "unknown TLV type " << t.type << endl; +// cout.flags(origFlags); + break; + } + realCount++; + } + CHECK( tlvCount == realCount, true ); + } + CHECK( testBuffer.length() == 0, true ); + } +} + +void ChatNavTests::roominfoParsingTest() +{ + setupRoomInfoTestBuffer(); + Buffer testBuffer(*m_buffer); + CHECK( testBuffer.length() != 0, true ); + while ( testBuffer.length() != 0 ) + { + TLV t = testBuffer.getTLV(); + +// cout << "TLV of type " << t.type << " with length " << t.length << endl; + + + CHECK( t.type == 0x04, true ); + CHECK( t.length > 8, true ); + Buffer b( t.data ); + CHECK( b.getWord() > 0, true ); + BYTE cookieLength = b.getByte(); + b.skipBytes( cookieLength ); + CHECK( b.getWord() == 0, true ); + CHECK( b.getByte() > 0, true ); + int tlvCount = b.getWord(); + int realCount = 0; +// cout << "Expecting " << tlvCount << " TLVs" << endl; + while ( b.length() > 0 ) + { + TLV t = b.getTLV(); +// ios::fmtflags origFlags = cout.flags(ios::hex|ios::showbase); +// cout << "TLV of type " << t.type << endl; +// cout.flags(origFlags); + CHECK( t.type != 0, true ); + switch (t.type) + { + case 0x02: + CHECK( t.length == 2, true ); + CHECK( t.data.count() == 2, true ); + break; + case 0x03: + CHECK( t.length == 1, true ); + CHECK( t.data.count() == 1, true ); + CHECK( t.data[0] > 0, true ); + break; + case 0x04: + CHECK( t.length == 2, true ); + CHECK( t.data.count() == 2, true ); + //CHECK( t.data[0] > 0, true ); + break; + case 0x05: + CHECK( t.length > 1, true ); + break; + case 0x06: + CHECK( t.length > 2, true ); + break; + case 0xCA: + CHECK( t.length == 4, true ); + break; + case 0xD1: + CHECK( t.length == 2, true ); + break; + case 0xD2: + CHECK( t.length == 2, true ); + break; + case 0xD3: + CHECK( t.length > 0, true ); + CHECK( t.data.count() == t.length, true ); + break; + case 0xD5: + CHECK( t.length == 1, true ); + break; + default: + break; + } + realCount++; + } + CHECK( tlvCount == realCount, true ); + } +} + +//kate: indent-mode csands; tab-width 4; + + diff --git a/kopete/protocols/oscar/liboscar/tests/chatnavtests.h b/kopete/protocols/oscar/liboscar/tests/chatnavtests.h new file mode 100644 index 00000000..9899682f --- /dev/null +++ b/kopete/protocols/oscar/liboscar/tests/chatnavtests.h @@ -0,0 +1,50 @@ +/* + Kopete Oscar Protocol - Chat Navigation parsing tests + Copyright (c) 2005 Matt Rogers <mattr@kde.org> + + Kopete (c) 2002-2005 by the Kopete developers <kopete-devel@kde.org> + + ************************************************************************* + * * + * This library is free software; you can redistribute it and/or * + * modify it under the terms of the GNU Lesser General Public * + * License as published by the Free Software Foundation; either * + * version 2 of the License, or (at your option) any later version. * + * * + ************************************************************************* +*/ + +#ifndef CHATNAVTESTS_H +#define CHATNAVTESTS_H + +#include "tester.h" + +class Buffer; + +/** +@author Kopete Developers +*/ +class ChatNavTests : public Tester +{ +public: + ChatNavTests(); + ~ChatNavTests(); + + void allTests(); + +// void limitsParsingTest(); + void exchangeParsingTest(); + void roominfoParsingTest(); +// void extRoomInfoParsingTest(); +// void memberListParsingTest(); +// void searchInfoParsingTest(); +// void createRoomParsingTest(); + + void setupExchangeTestBuffer(); + void setupRoomInfoTestBuffer(); + +private: + Buffer* m_buffer; +}; + +#endif diff --git a/kopete/protocols/oscar/liboscar/tests/clientstream_test.cpp b/kopete/protocols/oscar/liboscar/tests/clientstream_test.cpp new file mode 100644 index 00000000..59f392de --- /dev/null +++ b/kopete/protocols/oscar/liboscar/tests/clientstream_test.cpp @@ -0,0 +1,49 @@ +//Licensed under the GNU General Public License + +#include "clientstream_test.h" + +ClientStreamTest::ClientStreamTest(int argc, char ** argv) : QApplication( argc, argv ) +{ + // set up client stream + myConnector = new KNetworkConnector( 0 ); + //myConnector->setOptHostPort( "localhost", 8300 ); + myConnector->setOptHostPort( "login.oscar.aol.com", 5190 ); + myTestObject = new ClientStream( myConnector, myConnector); + // notify when the transport layer is connected + connect( myTestObject, SIGNAL( connected() ), SLOT( slotConnected() ) ); + // notify and start sending + //connect( myTestObject, SIGNAL( warning(int) ), SLOT( slotWarning(int) ) ); + + // do test once the event loop is running + QTimer::singleShot( 0, this, SLOT( slotDoTest() ) ); + connected = false; +} + +ClientStreamTest::~ClientStreamTest() +{ + delete myTestObject; + delete myConnector; +} + +void ClientStreamTest::slotDoTest() +{ + QString server = QString::fromLatin1("login.oscar.aol.com"); + // connect to server + qDebug( "connecting to server "); + myTestObject->connectToServer( server, true ); // fine up to here... +} + +void ClientStreamTest::slotConnected() +{ + qDebug( "connection is up"); + connected = true; +} + +int main(int argc, char ** argv) +{ + ClientStreamTest a( argc, argv ); + a.exec(); + return 0; +} + +#include "clientstream_test.moc" diff --git a/kopete/protocols/oscar/liboscar/tests/clientstream_test.h b/kopete/protocols/oscar/liboscar/tests/clientstream_test.h new file mode 100644 index 00000000..32a0e3a9 --- /dev/null +++ b/kopete/protocols/oscar/liboscar/tests/clientstream_test.h @@ -0,0 +1,49 @@ +// +// C++ Implementation: clientstream_test +// +// Description: +// +// +// Author: Kopete Developers <kopete-devel@kde.org>, (C) 2004 +// Licensed under the GNU General Public License + +#ifndef clientstream_test_h +#define clientstream_test_h + +#include <qglobal.h> +#include <qapplication.h> +#include <qtimer.h> + +#include "oscarclientstream.h" +#include "oscarconnector.h" + +#include "coreprotocol.h" + +#define QT_FATAL_ASSERT 1 + +class ClientStreamTest : public QApplication +{ +Q_OBJECT +public: + ClientStreamTest(int argc, char ** argv); + + ~ClientStreamTest(); + + bool isConnected(); + +public slots: + void slotDoTest(); + + void slotConnected(); + + //void slotWarning(int warning); + + //void slotsend(int layer); + +private: + KNetworkConnector *myConnector; + ClientStream *myTestObject; + bool connected; +}; + +#endif diff --git a/kopete/protocols/oscar/liboscar/tests/ipaddrtest.cpp b/kopete/protocols/oscar/liboscar/tests/ipaddrtest.cpp new file mode 100644 index 00000000..4f4e8df2 --- /dev/null +++ b/kopete/protocols/oscar/liboscar/tests/ipaddrtest.cpp @@ -0,0 +1,58 @@ +//Licensed under the GNU General Public License + +#include <iostream> +#include "ipaddrtest.h" +#include <qstring.h> + +using namespace std; +IPAddrTest::IPAddrTest(int argc, char ** argv) +: QApplication( argc, argv ) +{ +} + +IPAddrTest::~IPAddrTest() +{ +} + +bool IPAddrTest::testDottedDecimal() +{ + DWORD address = 1096652712; + return ( Oscar::getDottedDecimal( address ) == "65.93.151.168" ); +} + +bool IPAddrTest::testAllZeroDotted() +{ + DWORD address = 0; + return ( Oscar::getDottedDecimal( address ) == "0.0.0.0" ); +} + +bool IPAddrTest::testNumericalIP() +{ + QString address = "65.93.151.168"; + return ( Oscar::getNumericalIP( address ) == 1096652712 ); +} + +bool IPAddrTest::testAllZeroNumerical() +{ + QString address = "0.0.0.0"; + return ( Oscar::getNumericalIP( address ) == 0 ); +} + +void IPAddrTest::CheckTest(bool TestPassed) +{ + if ( TestPassed ) + cout << "passed" << endl; + else + cout << "failed" << endl; +} + +int main(int argc, char ** argv) +{ + IPAddrTest a( argc, argv ); + + a.CheckTest(a.testDottedDecimal()); + a.CheckTest(a.testNumericalIP()); + a.CheckTest(a.testAllZeroDotted() ); + a.CheckTest( a.testAllZeroNumerical() ); +} + diff --git a/kopete/protocols/oscar/liboscar/tests/ipaddrtest.h b/kopete/protocols/oscar/liboscar/tests/ipaddrtest.h new file mode 100644 index 00000000..9452ad82 --- /dev/null +++ b/kopete/protocols/oscar/liboscar/tests/ipaddrtest.h @@ -0,0 +1,35 @@ +// +// C++ Implementation: clientstream_test +// +// Description: +// +// +// Author: Kopete Developers <kopete-devel@kde.org>, (C) 2004 +// Licensed under the GNU General Public License + +#ifndef IPADDRTEST_H +#define IPADDRTEST_H + +#include <qglobal.h> +#include <qapplication.h> +#include <qtimer.h> + +#include "oscarutils.h" + +#define QT_FATAL_ASSERT 1 + +class IPAddrTest : public QApplication +{ +public: + IPAddrTest(int argc, char ** argv); + ~IPAddrTest(); + + bool testDottedDecimal(); + bool testNumericalIP(); + bool testAllZeroDotted(); + bool testAllZeroNumerical(); + + void CheckTest(bool TestPassed); +}; + +#endif diff --git a/kopete/protocols/oscar/liboscar/tests/kunittest.cpp b/kopete/protocols/oscar/liboscar/tests/kunittest.cpp new file mode 100644 index 00000000..9f7ba693 --- /dev/null +++ b/kopete/protocols/oscar/liboscar/tests/kunittest.cpp @@ -0,0 +1,167 @@ +/** + * kunittest.cpp + * + * Copyright (C) 2004 Zack Rusin <zack@kde.org> + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * + * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR + * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES + * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. + * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, + * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT + * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, + * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY + * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF + * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + */ +#include "kunittest.h" + +#include "tester.h" +#include "chatnavtests.h" + +#include <qapplication.h> +#include <qtimer.h> + +#include <iostream> +using namespace std; + +void KUnitTest::registerTests() +{ + ADD_TEST( ChatNavTests ); +// ADD_TEST( SampleTest ); +// ADD_TEST( OnePassTest ); +// ADD_TEST( TwoPassTest ); +// ADD_TEST( MultiFailTest ); +// ADD_TEST( ExpectedFailureTest ); +// ADD_TEST( UnexpectedPassTest ); +// ADD_TEST( OnlyUnexpectedPassTest ); +// ADD_TEST( SkipLogTest ); +// ADD_TEST( SkipWithFailTest ); +} + +KUnitTest::KUnitTest() +{ + QTimer::singleShot( 0, this, SLOT(checkRun()) ); + + m_tests.setAutoDelete( TRUE ); +// m_qtests.setAutoDelete( TRUE ); + + registerTests(); +} + +void KUnitTest::checkRun() +{ +// if ( m_qtests.isEmpty() ) +// qApp->exit(); +} + +int KUnitTest::runTests() +{ + int globalSteps = 0; + int globalPasses = 0; + int globalFails = 0; + int globalXFails = 0; + int globalXPasses = 0; + int globalSkipped = 0; + + cout << "# Running normal tests... #" << endl << endl; + QAsciiDictIterator<Tester> it( m_tests ); + + for( ; it.current(); ++it ) { + Tester* test = it.current(); + test->allTests(); + cout << it.currentKey() << " - "; + int numPass = test->testsFinished() - ( test->errorList().count() + test->xfailList().count() + test->skipList().count() ); + int numFail = test->errorList().count() + test->xfailList().count(); + int numXFail = test->xfailList().count(); + int numXPass = test->xpassList().count(); + int numSkip = test->skipList().count(); + + globalSteps += test->testsFinished(); + globalPasses += numPass; + globalFails += numFail; + globalXFails += numXFail; + globalXPasses += numXPass; + globalSkipped += numSkip; + + cout << numPass << " test" << ( ( 1 == numPass )?"":"s") << " passed"; + if ( 0 < test->xpassList().count() ) { + cout << " (" << numXPass << " unexpected pass" << ( ( 1 == numXPass )?"":"es") << ")"; + } + cout << ", " << numFail << " test" << ( ( 1 == numFail )?"":"s") << " failed"; + if ( 0 < numXFail ) { + cout << " (" << numXFail << " expected failure" << ( ( 1 == numXFail )?"":"s") << ")"; + } + if ( 0 < numSkip ) { + cout << "; also " << numSkip << " skipped"; + } + cout << endl; + + if ( 0 < numXPass ) { + cout << " Unexpected pass" << ( ( 1 == numXPass )?"":"es") << ":" << endl; + QStringList list = test->xpassList(); + for ( QStringList::Iterator itr = list.begin(); itr != list.end(); ++itr ) { + cout << "\t" << (*itr).latin1() << endl; + } + } + if ( 0 < (numFail - numXFail) ) { + cout << " Unexpected failure" << ( ( 1 == numFail )?"":"s") << ":" << endl; + QStringList list = test->errorList(); + for ( QStringList::Iterator itr = list.begin(); itr != list.end(); ++itr ) { + cout << "\t" << (*itr).latin1() << endl; + } + } + if ( 0 < numXFail ) { + cout << " Expected failure" << ( ( 1 == numXFail)?"":"s") << ":" << endl; + QStringList list = test->xfailList(); + for ( QStringList::Iterator itr = list.begin(); itr != list.end(); ++itr ) { + cout << "\t" << (*itr).latin1() << endl; + } + } + if ( 0 < numSkip ) { + cout << " Skipped test" << ( ( 1 == numSkip )?"":"s") << ":" << endl; + QStringList list = test->skipList(); + for ( QStringList::Iterator itr = list.begin(); itr != list.end(); ++itr ) { + cout << "\t" << (*itr).latin1() << endl; + } + } + cout << endl; + } + + cout << "# Done with normal tests:" << endl; + cout << " Total test cases: " << m_tests.count() << endl; + cout << " Total test steps : " << globalSteps << endl; + cout << " Total passed test steps (including unexpected) : " << globalPasses << endl; + cout << " Total unexpected passed test steps : " << globalXPasses << endl; + cout << " Total failed test steps (including expected) : " << globalFails << endl; + cout << " Total expected failed test steps : " << globalXFails << endl; + cout << " Total skipped test steps : " << globalSkipped << endl; + + return m_tests.count(); +} + +//void KUnitTest::addTester( QTester *test ) +//{ +// m_qtests.insert( test, test ); +// connect( test, SIGNAL(destroyed(QObject*)), +// SLOT(qtesterDone(QObject* )) ); +//} + +void KUnitTest::qtesterDone( QObject *obj ) +{ +// m_qtests.remove( obj ); +// if ( m_qtests.isEmpty() ) +// qApp->quit(); +} + +#include "kunittest.moc" diff --git a/kopete/protocols/oscar/liboscar/tests/kunittest.h b/kopete/protocols/oscar/liboscar/tests/kunittest.h new file mode 100644 index 00000000..5148a82a --- /dev/null +++ b/kopete/protocols/oscar/liboscar/tests/kunittest.h @@ -0,0 +1,71 @@ +/** + * kunittest.h + * + * Copyright (C) 2004 Zack Rusin <zack@kde.org> + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * + * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR + * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES + * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. + * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, + * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT + * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, + * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY + * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF + * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + */ +#ifndef KUNITTEST_H +#define KUNITTEST_H + +#include "tester.h" + +#include <qobject.h> +#include <qasciidict.h> +#include <qptrdict.h> + +#define ADD_TEST(x) addTester( #x, new x ) +#define ADD_QTEST(x) addTester( new x ) + +class KUnitTest : public QObject +{ + Q_OBJECT +public: + KUnitTest(); + + int runTests(); +public: + void addTester( const char *name, Tester* test ) + { + m_tests.insert( name, test ); + } +// void addTester( QTester *test ); + +private slots: + void qtesterDone( QObject *obj ); + void checkRun(); + +private: + void registerTests(); + +private: + QAsciiDict<Tester> m_tests; +// QPtrDict<QTester> m_qtests; + int globalTests; + int globalPasses; + int globalFails; + int globalXFails; + int globalXPasses; + int globalSkipped; +}; + +#endif diff --git a/kopete/protocols/oscar/liboscar/tests/logintest.cpp b/kopete/protocols/oscar/liboscar/tests/logintest.cpp new file mode 100644 index 00000000..6dbc9646 --- /dev/null +++ b/kopete/protocols/oscar/liboscar/tests/logintest.cpp @@ -0,0 +1,56 @@ +//Licensed under the GNU General Public License + +#include "logintest.h" + +LoginTest::LoginTest(int argc, char ** argv) : QApplication( argc, argv ) +{ + // set up client stream + myConnector = new KNetworkConnector( 0 ); + myConnector->setOptHostPort( "login.oscar.aol.com", 5190 ); + myTestObject = new ClientStream( myConnector, myConnector); + + // notify when the transport layer is connected + //connect( myTestObject, SIGNAL( connected() ), SLOT( slotConnected() ) ); + myClient = new Client(); + + myConnection = new Connection( myConnector, myTestObject, "AUTHORIZER" ); + myConnection->setClient( myClient ); + // do test once the event loop is running + QTimer::singleShot( 0, this, SLOT( slotDoTest() ) ); + connected = false; +} + +LoginTest::~LoginTest() +{ + delete myTestObject; + delete myConnector; + delete myClient; +} + +void LoginTest::slotDoTest() +{ + QString server = QString::fromLatin1("login.oscar.aol.com"); + // connect to server + qDebug( "connecting to server "); + + myClient->setIsIcq( true ); + myClient->start( server, 5190, "userid", "password" ); + myClient->connectToServer( myConnection, server, true ); + connected = true; +} + +void LoginTest::slotConnected() +{ + qDebug( "connection is up"); + connected = true; +} + +int main(int argc, char ** argv) +{ + LoginTest a( argc, argv ); + a.exec(); + if ( !a.isConnected() ) + return 0; +} + +#include "logintest.moc" diff --git a/kopete/protocols/oscar/liboscar/tests/logintest.h b/kopete/protocols/oscar/liboscar/tests/logintest.h new file mode 100644 index 00000000..898a3d99 --- /dev/null +++ b/kopete/protocols/oscar/liboscar/tests/logintest.h @@ -0,0 +1,53 @@ +// +// C++ Implementation: clientstream_test +// +// Description: +// +// +// Author: Kopete Developers <kopete-devel@kde.org>, (C) 2004 +// Licensed under the GNU General Public License + +#ifndef logintest_h +#define logintest_h + +#include <qglobal.h> +#include <qapplication.h> +#include <qtimer.h> + +#include "oscarclientstream.h" +#include "oscarconnector.h" +#include "client.h" +#include "connection.h" +#include "coreprotocol.h" + +#define QT_FATAL_ASSERT 1 + +class LoginTest : public QApplication +{ +Q_OBJECT +public: + LoginTest(int argc, char ** argv); + + ~LoginTest(); + + bool isConnected() { return connected; } + +public slots: + void slotDoTest(); + + void slotConnected(); + + //void slotWarning(int warning); + + //void slotsend(int layer); + +private: + KNetworkConnector *myConnector; + ClientStream *myTestObject; + Client* myClient; + Connection* myConnection; + + bool connected; +}; + +#endif diff --git a/kopete/protocols/oscar/liboscar/tests/main.cpp b/kopete/protocols/oscar/liboscar/tests/main.cpp new file mode 100644 index 00000000..49966924 --- /dev/null +++ b/kopete/protocols/oscar/liboscar/tests/main.cpp @@ -0,0 +1,35 @@ +/** + * main.cpp + * + * Copyright (C) 2004 Zack Rusin <zack@kde.org> + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * + * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR + * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES + * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. + * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, + * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT + * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, + * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY + * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF + * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + */ +#include "kunittest.h" + +int main( int argc, char** argv ) +{ + Q_UNUSED( argc ); + Q_UNUSED( argv ); + KUnitTest tests; + return tests.runTests(); +} diff --git a/kopete/protocols/oscar/liboscar/tests/redirecttest.cpp b/kopete/protocols/oscar/liboscar/tests/redirecttest.cpp new file mode 100644 index 00000000..a220e13e --- /dev/null +++ b/kopete/protocols/oscar/liboscar/tests/redirecttest.cpp @@ -0,0 +1,117 @@ +//Licensed under the GNU General Public License + +#include <iostream> +#include "redirecttest.h" +#include <qcstring.h> + +using namespace std; +RedirectTest::RedirectTest(int argc, char ** argv) +: QApplication( argc, argv ), + m_transfer(0), + m_task(0) +{ + m_root = new Task(0, true); +} + +RedirectTest::~RedirectTest() +{ + delete m_root; +} + +void RedirectTest::Setup() +{ + m_transfer = new SnacTransfer; + m_task = new ServerRedirectTask( m_root ); +} + +void RedirectTest::Teardown() +{ + delete m_task; + m_task = 0; + m_transfer = 0; +} + +bool RedirectTest::testHandleRedirect() +{ + Buffer* b = SetupBuffer(0x0010, "REDF$"); + m_transfer->setBuffer(b); + + m_task->setService(0x0010); + m_task->setTransfer(m_transfer); + return m_task->handleRedirect(); +} + +bool RedirectTest::testInvalidService() +{ + Buffer* b = SetupBuffer(0x4321, "REDF$"); + m_transfer->setBuffer(b); + + m_task->setService(0x0010); + m_task->setTransfer(m_transfer); + return !m_task->handleRedirect(); +} + +bool RedirectTest::testInvalidCookie() +{ + Buffer* b = SetupBuffer(0x0010, ""); + m_transfer->setBuffer(b); + + m_task->setService(0x0010); + m_task->setTransfer(m_transfer); + return !m_task->handleRedirect(); +} + +bool RedirectTest::testCookieIsSet() +{ + Buffer* b = SetupBuffer(0x0010, "grouch"); + m_transfer->setBuffer(b); + + m_task->setService(0x0010); + m_task->setTransfer(m_transfer); + m_task->handleRedirect(); + + return !m_task->cookie().isEmpty(); +} + +Buffer* RedirectTest::SetupBuffer(WORD Service, QString Cookie) +{ + Buffer* b = new Buffer; + b->addTLV16(0x000D, Service); + b->addWord(0x0005); + b->addWord(0x0010); + b->addString("65.86.43.45:5190", 16); + b->addWord(0x0006); + b->addWord(Cookie.length()); + b->addString(Cookie.latin1(), Cookie.length()); + return b; +} + +void RedirectTest::CheckTest(bool TestPassed) +{ + if ( TestPassed ) + cout << "passed" << endl; + else + cout << "failed" << endl; +} + +int main(int argc, char ** argv) +{ + RedirectTest a( argc, argv ); + + a.Setup(); + a.CheckTest(a.testHandleRedirect()); + a.Teardown(); + + a.Setup(); + a.CheckTest(a.testInvalidService()); + a.Teardown(); + + a.Setup(); + a.CheckTest(a.testInvalidCookie()); + a.Teardown(); + + a.Setup(); + a.CheckTest(a.testCookieIsSet()); + a.Teardown(); +} + diff --git a/kopete/protocols/oscar/liboscar/tests/redirecttest.h b/kopete/protocols/oscar/liboscar/tests/redirecttest.h new file mode 100644 index 00000000..eda5d67a --- /dev/null +++ b/kopete/protocols/oscar/liboscar/tests/redirecttest.h @@ -0,0 +1,51 @@ +// +// C++ Implementation: clientstream_test +// +// Description: +// +// +// Author: Kopete Developers <kopete-devel@kde.org>, (C) 2004 +// Licensed under the GNU General Public License + +#ifndef RedirectTest_h +#define RedirectTest_h + +#include <qglobal.h> +#include <qapplication.h> +#include <qtimer.h> + +#include "transfer.h" +#include "oscartypes.h" +#include "serverredirecttask.h" +#include "task.h" + +#define QT_FATAL_ASSERT 1 + +class RedirectTest : public QApplication +{ +public: + RedirectTest(int argc, char ** argv); + ~RedirectTest(); + + bool testHandleRedirect(); + bool testInvalidService(); + bool testInvalidCookie(); + bool testCookieIsSet(); + + void Setup(); + void Teardown(); + + void CheckTest(bool TestPassed); + +private: + //Helper functions + Buffer* SetupBuffer(WORD Service, QString Cookie); + + Task *m_root; + SnacTransfer * m_transfer; + ServerRedirectTask* m_task; + + bool connected; +}; + +#endif diff --git a/kopete/protocols/oscar/liboscar/tests/ssigrouptest.cpp b/kopete/protocols/oscar/liboscar/tests/ssigrouptest.cpp new file mode 100644 index 00000000..a1a9e754 --- /dev/null +++ b/kopete/protocols/oscar/liboscar/tests/ssigrouptest.cpp @@ -0,0 +1,73 @@ +//Licensed under the GNU General Public License + +#include "ssigrouptest.h" + +LoginTest::LoginTest(int argc, char ** argv) : QApplication( argc, argv ) +{ + // set up client stream + myConnector = new KNetworkConnector( 0 ); + myConnector->setOptHostPort( "login.oscar.aol.com", 5190 ); + myTestObject = new ClientStream( myConnector, myConnector); + + // notify when the transport layer is connected + //connect( myTestObject, SIGNAL( connected() ), SLOT( slotConnected() ) ); + myClient = new Client(); + + myConnection = new Connection( myConnector, myTestObject, "AUTHORIZER" ); + myConnection->setClient( myClient ); + // do test once the event loop is running + QTimer::singleShot( 0, this, SLOT( slotDoTest() ) ); + connected = false; +} + +LoginTest::~LoginTest() +{ + delete myTestObject; + delete myConnector; + delete myClient; +} + +void LoginTest::slotDoTest() +{ + QString server = QString::fromLatin1("login.oscar.aol.com"); + // connect to server + qDebug( "connecting to server "); + + myClient->setIsIcq( true ); + myClient->start( server, 5190, "userid", "password" ); + myClient->connectToServer( myConnection, server, true ); + QTimer::singleShot( 10000, this, SLOT(runAddGroupTest() ) ); + connected = true; +} + +void LoginTest::slotConnected() +{ + qDebug( "connection is up"); + connected = true; +} + +int main(int argc, char ** argv) +{ + LoginTest a( argc, argv ); + a.exec(); + if ( !a.isConnected() ) + return 0; +} + +void LoginTest::runAddGroupTest() +{ + qDebug( "running ssi group add test" ); + QString group = QString::fromLatin1( "dummygroup" ); + myClient->addGroup( group ); + QTimer::singleShot( 5000, this, SLOT( runDelGroupTest() ) ); +} + +void LoginTest::runDelGroupTest() +{ + qDebug( "running ssi group del test" ); + QString group = QString::fromLatin1( "dummygroup" ); + myClient->removeGroup( group ); +} + + +#include "ssigrouptest.moc" diff --git a/kopete/protocols/oscar/liboscar/tests/ssigrouptest.h b/kopete/protocols/oscar/liboscar/tests/ssigrouptest.h new file mode 100644 index 00000000..361c053b --- /dev/null +++ b/kopete/protocols/oscar/liboscar/tests/ssigrouptest.h @@ -0,0 +1,54 @@ +// +// C++ Implementation: clientstream_test +// +// Description: +// +// +// Author: Kopete Developers <kopete-devel@kde.org>, (C) 2004 +// Licensed under the GNU General Public License + +#ifndef logintest_h +#define logintest_h + +#include <qglobal.h> +#include <qapplication.h> +#include <qtimer.h> + +#include "oscarclientstream.h" +#include "oscarconnector.h" +#include "client.h" +#include "connection.h" +#include "coreprotocol.h" + +#define QT_FATAL_ASSERT 1 + +class LoginTest : public QApplication +{ +Q_OBJECT +public: + LoginTest(int argc, char ** argv); + + ~LoginTest(); + + bool isConnected() { return connected; } + +public slots: + void slotDoTest(); + void runAddGroupTest(); + void runDelGroupTest(); + void slotConnected(); + + //void slotWarning(int warning); + + //void slotsend(int layer); + +private: + KNetworkConnector *myConnector; + ClientStream *myTestObject; + Client* myClient; + Connection* myConnection; + + bool connected; +}; + +#endif diff --git a/kopete/protocols/oscar/liboscar/tests/ssitest.cpp b/kopete/protocols/oscar/liboscar/tests/ssitest.cpp new file mode 100644 index 00000000..d8e05b36 --- /dev/null +++ b/kopete/protocols/oscar/liboscar/tests/ssitest.cpp @@ -0,0 +1,111 @@ +//Licensed under the GNU General Public License + +#include "ssitest.h" + +#include <qstring.h> + +SSITest::SSITest(int argc, char ** argv) : QApplication( argc, argv ) +{ + m_manager = new SSIManager(this); + + testIt(); + +} + +SSITest::~SSITest() +{ + delete m_manager; +} + +void SSITest::testIt() +{ + QPtrList<TLV> tlvs; + + //add three groups + SSI *ssi = new SSI( "FirstGroup", 1, 1, ROSTER_GROUP, tlvs); + m_manager->newGroup(ssi); + + ssi = new SSI( "SecondGroup", 2, 2, ROSTER_GROUP, tlvs); + m_manager->newGroup(ssi); + + ssi = new SSI( "ThirdGroup", 3, 3, ROSTER_GROUP, tlvs); + m_manager->newGroup(ssi); + + //add six contacts + ssi = new SSI( "FirstContact", 1, 4, ROSTER_CONTACT, tlvs); + m_manager->newContact(ssi); + + ssi = new SSI( "SecondContact", 1, 5, ROSTER_CONTACT, tlvs); + m_manager->newContact(ssi); + + ssi = new SSI( "ThirdContact", 1, 6, ROSTER_CONTACT, tlvs); + m_manager->newContact(ssi); + + ssi = new SSI( "FourthContact", 2, 7, ROSTER_CONTACT, tlvs); + m_manager->newContact(ssi); + + ssi = new SSI( "FifthContact", 2, 8, ROSTER_CONTACT, tlvs); + m_manager->newContact(ssi); + + ssi = new SSI( "SixthContact", 3, 9, ROSTER_CONTACT, tlvs); + m_manager->newContact(ssi); + + //try to find a group by name + ssi = m_manager->findGroup("SecondGroup"); + if ( ssi ) + qDebug( QString("Found group SecondGroup with gid=%1").arg( ssi->gid() ).latin1()); + else + qDebug( "Oops, group SecondGroup not found" ); + + //try to find a group by gid + ssi = m_manager->findGroup( 3 ); + if ( ssi ) + qDebug( QString("Found group 3 with name=%1").arg( ssi->name() ).latin1() ); + else + qDebug( "Oops, group 3 not found" ); + + //try to find a contact by name + ssi = m_manager->findContact("ThirdContact"); + if ( ssi ) + qDebug( QString( "Found contact ThirdContact with gid=%1" ).arg( ssi->gid() ).latin1() ); + else + qDebug( "Oops, contact ThirdContact not found" ); + + //try to find a contact using the name and the group name + ssi = m_manager->findContact("FourthContact","SecondGroup"); + if ( ssi ) + qDebug( QString("Found contact FourthContact with bid=%1").arg( ssi->bid() ).latin1() ); + else + qDebug( "Oops, contact FourthContact not found" ); + + + //try to find an invalid group + ssi = m_manager->findGroup("InvalidGroup"); + if ( !ssi ) + qDebug( "Good! It has detected the group is invalid :)" ); + + //contacts from a group + QValueList<SSI*> list = m_manager->contactsFromGroup("FirstGroup"); + QValueList<SSI*>::iterator it; + qDebug( "Contacts from group FirtsGroup:" ); + for ( it = list.begin(); it != list.end(); ++it) + qDebug( QString(" name=%1").arg( (*it)->name() ).latin1() ); + + //the group list + QValueList<SSI*> list2 = m_manager->groupList(); + qDebug( "Group list:" ); + for ( it = list2.begin(); it != list2.end(); ++it) + qDebug( QString(" name=%1").arg( (*it)->name() ).latin1() ); + + //remove a group - this shouldn't report any debug line + m_manager->removeGroup( "SecondGroup" ); + +} + +int main(int argc, char ** argv) +{ + SSITest a( argc, argv ); + a.exec(); +} + +#include "ssitest.moc" diff --git a/kopete/protocols/oscar/liboscar/tests/ssitest.h b/kopete/protocols/oscar/liboscar/tests/ssitest.h new file mode 100644 index 00000000..19206465 --- /dev/null +++ b/kopete/protocols/oscar/liboscar/tests/ssitest.h @@ -0,0 +1,34 @@ +// +// C++ Implementation: clientstream_test +// +// Description: +// +// +// Author: Kopete Developers <kopete-devel@kde.org>, (C) 2004 +// Licensed under the GNU General Public License + +#ifndef ssitest_h +#define ssitest_h + +#include <qglobal.h> +#include <qapplication.h> +#include <qtimer.h> + +#include "ssimanager.h" + +#define QT_FATAL_ASSERT 1 + +class SSITest : public QApplication +{ +Q_OBJECT +public: + SSITest(int argc, char ** argv); + + ~SSITest(); + + void testIt(); +private: + SSIManager *m_manager; +}; + +#endif diff --git a/kopete/protocols/oscar/liboscar/tests/tester.h b/kopete/protocols/oscar/liboscar/tests/tester.h new file mode 100644 index 00000000..2cb1f3af --- /dev/null +++ b/kopete/protocols/oscar/liboscar/tests/tester.h @@ -0,0 +1,121 @@ +/** + * tester.h + * + * Copyright (C) 2004 Zack Rusin <zack@kde.org> + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * + * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR + * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES + * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. + * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, + * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT + * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, + * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY + * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF + * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + */ +#ifndef TESTER_H +#define TESTER_H + +#include <qstringlist.h> + +#define CHECK( x, y ) check( __FILE__, __LINE__, #x, x, y, false ) +#define XFAIL( x, y ) check( __FILE__, __LINE__, #x, x, y, true ) +#define SKIP( x ) skip( __FILE__, __LINE__, #x ) + +class Tester +{ +public: + Tester() + : m_tests( 0 ) + { + } + virtual ~Tester() {} + +public: + virtual void allTests() = 0; + +public: + int testsFinished() const { + return m_tests; + } + + QStringList errorList() const { + return m_errorList; + } + + QStringList xfailList() const { + return m_xfailList; + } + + QStringList xpassList() const { + return m_xpassList; + } + + QStringList skipList() const { + return m_skipList; + } + + void skip( const char *file, int line, QString msg ) + { + QString skipEntry; + QTextStream ts( &skipEntry, IO_WriteOnly ); + ts << file << "["<< line <<"]: " << msg; + m_skipList.append( skipEntry ); + + ++m_tests; + } + +protected: + template<typename T> + void check( const char *file, int line, const char *str, + const T &result, const T &expectedResult, + bool expectedFailure ) + { + if ( result != expectedResult ) { + QString error; + QTextStream ts( &error, IO_WriteOnly ); + ts << file << "["<< line <<"]:" + <<" failed on \""<< str <<"\"" + << "\n\t\t result = '" + << result + << "', expected = '"<< expectedResult<<"'"; + if ( expectedFailure ) { + m_xfailList.append( error ); + } else { + m_errorList.append( error ); + } + } else { + // then the test passed, but we want to record it if + // we were expecting a failure + if (expectedFailure) { + QString error; + QTextStream ts( &error, IO_WriteOnly ); + ts << file << "["<< line <<"]:" + <<" unexpectedly passed on \"" + << str <<"\""; + m_xpassList.append( error ); + } + } + ++m_tests; + } + +private: + QStringList m_errorList; + QStringList m_xfailList; + QStringList m_xpassList; + QStringList m_skipList; + int m_tests; +}; + +#endif diff --git a/kopete/protocols/oscar/liboscar/tests/userinfotest.cpp b/kopete/protocols/oscar/liboscar/tests/userinfotest.cpp new file mode 100644 index 00000000..72ef5acb --- /dev/null +++ b/kopete/protocols/oscar/liboscar/tests/userinfotest.cpp @@ -0,0 +1,67 @@ +//Licensed under the GNU General Public License + +#include "userinfotest.h" + +LoginTest::LoginTest(int argc, char ** argv) : QApplication( argc, argv ) +{ + // set up client stream + myConnector = new KNetworkConnector( 0 ); + myConnector->setOptHostPort( "login.oscar.aol.com", 5190 ); + myTestObject = new ClientStream( myConnector, myConnector); + + // notify when the transport layer is connected + //connect( myTestObject, SIGNAL( connected() ), SLOT( slotConnected() ) ); + myClient = new Client(); + + myConnection = new Connection( myConnector, myTestObject, "AUTHORIZER" ); + myConnection->setClient( myClient ); + // do test once the event loop is running + QTimer::singleShot( 0, this, SLOT( slotDoTest() ) ); + connected = false; +} + +LoginTest::~LoginTest() +{ + delete myTestObject; + delete myConnector; + delete myClient; +} + +void LoginTest::slotDoTest() +{ + QString server = QString::fromLatin1("login.oscar.aol.com"); + // connect to server + qDebug( "connecting to server "); + + myClient->setIsIcq( true ); + myClient->start( server, 5190, "userid", "password" ); + myClient->connectToServer( myConnection, server, true ); + //QObject::connect( myClient, SIGNAL( userIsOnline( const QString& ) ), this, SLOT( runUserInfoTest())); + //QTimer::singleShot( 6000, this, SLOT(runUserInfoTest() ) ); + connected = true; +} + +void LoginTest::slotConnected() +{ + qDebug( "connection is up"); + connected = true; +} + +int main(int argc, char ** argv) +{ + LoginTest a( argc, argv ); + a.exec(); + if ( !a.isConnected() ) + return 0; +} + +void LoginTest::runUserInfoTest() +{ + qDebug( "running user info test" ); + QString contact = QString::fromLatin1( "userid" ); + myClient->requestFullInfo( contact ); + +} + + +#include "userinfotest.moc" diff --git a/kopete/protocols/oscar/liboscar/tests/userinfotest.h b/kopete/protocols/oscar/liboscar/tests/userinfotest.h new file mode 100644 index 00000000..433a6c48 --- /dev/null +++ b/kopete/protocols/oscar/liboscar/tests/userinfotest.h @@ -0,0 +1,53 @@ +// +// C++ Implementation: clientstream_test +// +// Description: +// +// +// Author: Kopete Developers <kopete-devel@kde.org>, (C) 2004 +// Licensed under the GNU General Public License + +#ifndef logintest_h +#define logintest_h + +#include <qglobal.h> +#include <qapplication.h> +#include <qtimer.h> + +#include "oscarclientstream.h" +#include "oscarconnector.h" +#include "client.h" +#include "connection.h" +#include "coreprotocol.h" + +#define QT_FATAL_ASSERT 1 + +class LoginTest : public QApplication +{ +Q_OBJECT +public: + LoginTest(int argc, char ** argv); + + ~LoginTest(); + + bool isConnected() { return connected; } + +public slots: + void slotDoTest(); + void runUserInfoTest(); + void slotConnected(); + + //void slotWarning(int warning); + + //void slotsend(int layer); + +private: + KNetworkConnector *myConnector; + ClientStream *myTestObject; + Client* myClient; + Connection* myConnection; + + bool connected; +}; + +#endif |