summaryrefslogtreecommitdiffstats
path: root/tests/auto/sql/kernel/qsqlrecord/tst_qsqlrecord.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'tests/auto/sql/kernel/qsqlrecord/tst_qsqlrecord.cpp')
-rw-r--r--tests/auto/sql/kernel/qsqlrecord/tst_qsqlrecord.cpp522
1 files changed, 522 insertions, 0 deletions
diff --git a/tests/auto/sql/kernel/qsqlrecord/tst_qsqlrecord.cpp b/tests/auto/sql/kernel/qsqlrecord/tst_qsqlrecord.cpp
new file mode 100644
index 0000000000..c84e39fb2a
--- /dev/null
+++ b/tests/auto/sql/kernel/qsqlrecord/tst_qsqlrecord.cpp
@@ -0,0 +1,522 @@
+/****************************************************************************
+**
+** Copyright (C) 2011 Nokia Corporation and/or its subsidiary(-ies).
+** All rights reserved.
+** Contact: Nokia Corporation (qt-info@nokia.com)
+**
+** This file is part of the test suite of the Qt Toolkit.
+**
+** $QT_BEGIN_LICENSE:LGPL$
+** GNU Lesser General Public License Usage
+** This file may be used under the terms of the GNU Lesser General Public
+** License version 2.1 as published by the Free Software Foundation and
+** appearing in the file LICENSE.LGPL included in the packaging of this
+** file. Please review the following information to ensure the GNU Lesser
+** General Public License version 2.1 requirements will be met:
+** http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html.
+**
+** In addition, as a special exception, Nokia gives you certain additional
+** rights. These rights are described in the Nokia Qt LGPL Exception
+** version 1.1, included in the file LGPL_EXCEPTION.txt in this package.
+**
+** GNU General Public License Usage
+** Alternatively, this file may be used under the terms of the GNU General
+** Public License version 3.0 as published by the Free Software Foundation
+** and appearing in the file LICENSE.GPL included in the packaging of this
+** file. Please review the following information to ensure the GNU General
+** Public License version 3.0 requirements will be met:
+** http://www.gnu.org/copyleft/gpl.html.
+**
+** Other Usage
+** Alternatively, this file may be used in accordance with the terms and
+** conditions contained in a signed written agreement between you and Nokia.
+**
+**
+**
+**
+**
+** $QT_END_LICENSE$
+**
+****************************************************************************/
+
+
+#include <QtTest/QtTest>
+
+#include "qsqlrecord.h"
+#include "qsqlfield.h"
+#include "qstringlist.h"
+
+
+
+
+#include <qsqlrecord.h>
+
+//TESTED_CLASS=
+//TESTED_FILES=
+
+#define NUM_FIELDS 4
+
+class tst_QSqlRecord : public QObject
+{
+Q_OBJECT
+
+public:
+ tst_QSqlRecord();
+ virtual ~tst_QSqlRecord();
+
+
+public slots:
+ void init();
+ void cleanup();
+private slots:
+ void value();
+ void setValue_data();
+ void setValue();
+ void setNull();
+ void setGenerated();
+ void remove();
+ void position();
+ void operator_Assign();
+ void isNull();
+ void isGenerated();
+ void isEmpty();
+ void insert();
+ void fieldName();
+ void field();
+ void count();
+ void contains();
+ void clearValues_data();
+ void clearValues();
+ void clear();
+ void append();
+
+private:
+ QSqlRecord* rec;
+ QSqlField* fields[ NUM_FIELDS ];
+ void createTestRecord();
+};
+
+tst_QSqlRecord::tst_QSqlRecord()
+{
+ rec = 0;
+ for ( int i = 0; i < NUM_FIELDS; ++i )
+ fields[ i ] = 0;
+}
+
+tst_QSqlRecord::~tst_QSqlRecord()
+{
+ delete rec;
+ for ( int i = 0; i < NUM_FIELDS; ++i )
+ delete fields[ i ];
+ rec = 0;
+}
+
+void tst_QSqlRecord::init()
+{
+ cleanup();
+}
+
+void tst_QSqlRecord::cleanup()
+{
+ delete rec;
+ for ( int i = 0; i < NUM_FIELDS; ++i ) {
+ delete fields[ i ];
+ fields[ i ] = 0;
+ }
+ rec = 0;
+}
+
+void tst_QSqlRecord::createTestRecord()
+{
+ delete rec;
+ rec = new QSqlRecord();
+ fields[ 0 ] = new QSqlField( "string", QVariant::String );
+ fields[ 1 ] = new QSqlField( "int", QVariant::Int );
+ fields[ 2 ] = new QSqlField( "double", QVariant::Double );
+ fields[ 3 ] = new QSqlField( "bool", QVariant::Bool );
+ for ( int i = 0; i < NUM_FIELDS; ++i )
+ rec->append( *(fields[ i ] ) );
+}
+
+
+void tst_QSqlRecord::append()
+{
+ delete rec;
+ rec = new QSqlRecord();
+ rec->append( QSqlField( "string", QVariant::String ) );
+ QCOMPARE( rec->field( 0 ).name(), (QString) "string" );
+ QVERIFY( !rec->isEmpty() );
+ QCOMPARE( (int)rec->count(), 1 );
+ rec->append( QSqlField( "int", QVariant::Int ) );
+ QCOMPARE( rec->field( 1 ).name(), (QString) "int" );
+ QCOMPARE( (int)rec->count(), 2 );
+ rec->append( QSqlField( "double", QVariant::Double ) );
+ QCOMPARE( rec->field( 2 ).name(), (QString) "double" );
+ QCOMPARE( (int)rec->count(), 3 );
+ rec->append( QSqlField( "bool", QVariant::Bool ) );
+ QCOMPARE( rec->field( 3 ).name(), (QString) "bool" );
+ QCOMPARE( (int)rec->count(), 4 );
+ QCOMPARE( rec->indexOf( "string" ), 0 );
+ QCOMPARE( rec->indexOf( "int" ), 1 );
+ QCOMPARE( rec->indexOf( "double" ), 2 );
+ QCOMPARE( rec->indexOf( "bool" ), 3 );
+}
+
+void tst_QSqlRecord::clear()
+{
+ createTestRecord();
+
+ rec->clear();
+ QCOMPARE( (int)rec->count(), 0 );
+ QVERIFY( rec->isEmpty() );
+ QVERIFY( !rec->contains( fields[0]->name() ) );
+}
+
+void tst_QSqlRecord::clearValues_data()
+{
+ QTest::addColumn<QString>("prefix");
+ QTest::addColumn<QString>("sep");
+ QTest::addColumn<int>("ival");
+ QTest::addColumn<QString>("sval");
+ QTest::addColumn<double>("dval");
+ QTest::addColumn<int>("bval");
+
+ QTest::newRow( "data0" ) << QString::fromLatin1("tablename") << QString::fromLatin1(",") << 10
+ << QString::fromLatin1("Trond K.") << 2222.231234441 << 0;
+ QTest::newRow( "data1" ) << QString::fromLatin1("mytable") << QString::fromLatin1(".") << 12
+ << QString::fromLatin1("Josten") << 544444444444423232.32334441 << 1;
+ QTest::newRow( "data2" ) << QString::fromLatin1("tabby") << QString::fromLatin1("-") << 12
+ << QString::fromLatin1("Odvin") << 899129389283.32334441 << 1;
+ QTest::newRow( "data3" ) << QString::fromLatin1("per") << QString::fromLatin1("00") << 12
+ << QString::fromLatin1("Brge") << 29382939182.99999919 << 0;
+}
+
+void tst_QSqlRecord::clearValues()
+{
+ int i;
+ QFETCH( int, ival );
+ QFETCH( QString, sval );
+ QFETCH( double, dval );
+ QFETCH( int, bval );
+
+ if(rec)
+ delete rec;
+
+ rec = new QSqlRecord();
+ rec->append( QSqlField( "string", QVariant::String ) );
+ QCOMPARE( rec->field(0).name(), (QString) "string" );
+ QVERIFY( !rec->isEmpty() );
+ QCOMPARE( (int)rec->count(), 1 );
+ rec->append( QSqlField( "int", QVariant::Int ) );
+ QCOMPARE( rec->field(1).name(), (QString) "int" );
+ QCOMPARE( (int)rec->count(), 2 );
+ rec->append( QSqlField( "double", QVariant::Double ) );
+ QCOMPARE( rec->field(2).name(), (QString) "double" );
+ QCOMPARE( (int)rec->count(), 3 );
+ rec->append( QSqlField( "bool", QVariant::Bool ) );
+ QCOMPARE( rec->field(3).name(), (QString) "bool" );
+ QCOMPARE( (int)rec->count(), 4 );
+ QCOMPARE( rec->indexOf( "string" ), 0 );
+ QCOMPARE( rec->indexOf( "int" ), 1 );
+ QCOMPARE( rec->indexOf( "double" ), 2 );
+ QCOMPARE( rec->indexOf( "bool" ), 3 );
+ for ( i = 0; i < 4; ++i )
+ rec->setNull( i );
+
+ rec->setValue( 0, sval );
+ rec->setValue( 1, ival );
+ rec->setValue( 2, dval );
+ rec->setValue( 3, QVariant(bval) );
+ QVERIFY( rec->value( 0 ) == sval );
+ QVERIFY( rec->value( 1 ) == ival );
+ QVERIFY( rec->value( 2 ) == dval );
+ QVERIFY( rec->value( 3 ) == QVariant(bval) );
+
+ rec->clearValues();
+
+ for ( i = 0; i < 4; ++i )
+ QVERIFY( rec->isNull( i ) );
+
+}
+
+void tst_QSqlRecord::contains()
+{
+ createTestRecord();
+ for ( int i = 0; i < NUM_FIELDS; ++i )
+ QVERIFY( rec->contains( fields[ i ]->name() ) );
+ QVERIFY( !rec->contains( "__Harry__" ) );
+}
+
+void tst_QSqlRecord::count()
+{
+ createTestRecord();
+ QCOMPARE( (int)rec->count(), NUM_FIELDS );
+ rec->remove( 3 );
+ QCOMPARE( (int)rec->count(), NUM_FIELDS - 1 );
+ rec->clear();
+ QCOMPARE( (int)rec->count(), 0 );
+ QCOMPARE( (int)QSqlRecord().count(), 0 );
+}
+
+void tst_QSqlRecord::field()
+{
+ createTestRecord();
+
+ int i;
+ for ( i = 0; i < NUM_FIELDS; ++i )
+ QVERIFY( rec->field( i ) == *fields[ i ] );
+
+ for ( i = 0; i < NUM_FIELDS; ++i )
+ QVERIFY( rec->field( (fields[ i ] )->name() ) == *( fields[ i ] ) );
+ QVERIFY( rec->indexOf( "_This should give a warning!_" ) == -1 );
+}
+
+void tst_QSqlRecord::fieldName()
+{
+ createTestRecord();
+
+ for ( int i = 0; i < NUM_FIELDS; ++i )
+ QVERIFY( rec->field( (fields[ i ] )->name() ) == *( fields[ i ] ) );
+ QVERIFY( rec->fieldName( NUM_FIELDS ).isNull() );
+}
+
+void tst_QSqlRecord::insert()
+{
+ QSqlRecord iRec;
+ int i;
+ for ( i = 0; i <= 100; ++i ) {
+ iRec.insert( i, QSqlField( QString::number( i ), QVariant::Int ) );
+ }
+ for ( i = 0; i <= 100; ++i ) {
+ QCOMPARE( iRec.fieldName( i ), QString::number( i ) );
+ }
+// iRec.insert( 505, QSqlField( "Harry", QVariant::Double ) );
+// QCOMPARE( iRec.fieldName( 505 ), (QString)"Harry" );
+// QVERIFY( iRec.field( 505 ).type() == QVariant::Double );
+
+ iRec.insert( 42, QSqlField( "Everything", QVariant::String ) );
+ QCOMPARE( iRec.fieldName( 42 ), (QString)"Everything" );
+ QVERIFY( iRec.field( 42 ).type() == QVariant::String );
+}
+
+void tst_QSqlRecord::isEmpty()
+{
+ QSqlRecord eRec;
+ QVERIFY( eRec.isEmpty() );
+ eRec.append( QSqlField( "Harry", QVariant::String ) );
+ QVERIFY( !eRec.isEmpty() );
+ eRec.remove( 0 );
+ QVERIFY( eRec.isEmpty() );
+ eRec.insert( 0, QSqlField( "Harry", QVariant::String ) );
+ QVERIFY( !eRec.isEmpty() );
+ eRec.clear();
+ QVERIFY( eRec.isEmpty() );
+}
+
+void tst_QSqlRecord::isGenerated()
+{
+ createTestRecord();
+
+ int i;
+ for ( i = 0; i < NUM_FIELDS; ++i )
+ QVERIFY( rec->isGenerated( i ) );
+
+ for ( i = 0; i < NUM_FIELDS; ++i )
+ QVERIFY( rec->isGenerated( fields[ i ]->name() ) );
+
+ for ( i = 0; i < NUM_FIELDS; ++i ) {
+ if ( i % 2 )
+ rec->setGenerated( i, false );
+ }
+ rec->setGenerated( NUM_FIELDS * 2, false ); // nothing should happen here
+
+ for ( i = 0; i < NUM_FIELDS; ++i ) {
+ if ( i % 2 ) {
+ QVERIFY( !rec->isGenerated( i ) );
+ } else {
+ QVERIFY( rec->isGenerated( i ) );
+ }
+ }
+
+ for ( i = 0; i < NUM_FIELDS; ++i )
+ if ( i % 2 ) {
+ QVERIFY( !rec->isGenerated( fields[ i ]->name() ) );
+ } else {
+ QVERIFY( rec->isGenerated( fields[ i ]->name() ) );
+ }
+
+ rec->setGenerated( "_This should give a warning!_", false ); // nothing should happen here
+}
+
+void tst_QSqlRecord::isNull()
+{
+ createTestRecord();
+
+ int i;
+ for ( i = 0; i < NUM_FIELDS; ++i ) {
+ QVERIFY( rec->isNull( i ) );
+ QVERIFY( rec->isNull( fields[ i ]->name() ) );
+ }
+
+ for ( i = 0; i < NUM_FIELDS; ++i ) {
+ if ( i % 2 )
+ rec->setNull( i );
+ }
+ rec->setNull( NUM_FIELDS ); // nothing should happen here
+
+ for ( i = 0; i < NUM_FIELDS; ++i ) {
+ if ( i % 2 ) {
+ QVERIFY( rec->isNull( i ) );
+ QVERIFY( rec->isNull( fields[ i ]->name() ) );
+ }
+ }
+
+ for ( i = 0; i < NUM_FIELDS; ++i ) {
+ rec->setNull( fields[ i ]->name() );
+ }
+ rec->setNull( "_This should give a warning!_" ); // nothing should happen here
+
+ for ( i = 0; i < NUM_FIELDS; ++i ) {
+ QVERIFY( rec->isNull( i ) );
+ QVERIFY( rec->isNull( fields[ i ]->name() ) );
+ }
+}
+
+void tst_QSqlRecord::operator_Assign()
+{
+ createTestRecord();
+ int i;
+ QSqlRecord buf2, buf3, buf4; // since buffers are implicitely shared, we exaggerate a bit here
+ buf2 = *rec;
+ buf3 = *rec;
+ buf4 = *rec;
+ for ( i = 0; i < NUM_FIELDS; ++i ) {
+ QVERIFY( buf2.field( i ) == *fields[ i ] );
+ QVERIFY( buf3.field( i ) == *( fields[ i ] ) );
+ QVERIFY( buf4.field( i ) == *( fields[ i ] ) );
+ }
+ for ( i = 0; i < NUM_FIELDS; ++i )
+ buf3.setNull( i );
+ buf3.remove( NUM_FIELDS - 1 );
+ QSqlRecord buf5 = buf3;
+ for ( i = 0; i < NUM_FIELDS - 1; ++i ) {
+ QSqlField fi ( fields[ i ]->name(), fields[ i ]->type() );
+ fi.clear();
+ QVERIFY( buf5.field( i ) == fi );
+ QVERIFY( buf5.isGenerated( i ) );
+ }
+}
+
+void tst_QSqlRecord::position()
+{
+ createTestRecord();
+ int i;
+ for ( i = 0; i < NUM_FIELDS; ++i ) {
+ QCOMPARE( rec->indexOf( fields[ i ]->name() ), i );
+ }
+}
+
+void tst_QSqlRecord::remove()
+{
+ createTestRecord();
+ int i;
+ for ( i = 0; i < NUM_FIELDS; ++i ) {
+ rec->setGenerated( i, false );
+ QCOMPARE( (int)rec->count(), NUM_FIELDS - i );
+ rec->remove( 0 );
+ QCOMPARE( (int)rec->count(), NUM_FIELDS - i - 1 );
+ }
+ rec->remove( NUM_FIELDS * 2 ); // nothing should happen
+ for ( i = 0; i < NUM_FIELDS; ++i ) {
+ rec->insert( i, QSqlField( fields[ i ]->name(), fields[ i ]->type() ) );
+ QVERIFY( rec->isGenerated( i ) );
+ }
+}
+
+void tst_QSqlRecord::setGenerated()
+{
+ isGenerated();
+}
+
+void tst_QSqlRecord::setNull()
+{
+ isNull();
+}
+
+void tst_QSqlRecord::setValue_data()
+{
+ clearValues_data();
+}
+
+void tst_QSqlRecord::setValue()
+{
+ int i;
+
+ delete rec;
+ rec = new QSqlRecord();
+ rec->append( QSqlField( "string", QVariant::String ) );
+ QCOMPARE( rec->field( 0 ).name(), (QString) "string" );
+ QVERIFY( !rec->isEmpty() );
+ QCOMPARE( (int)rec->count(), 1 );
+ rec->append( QSqlField( "int", QVariant::Int ) );
+ QCOMPARE( rec->field( 1 ).name(), (QString) "int" );
+ QCOMPARE( (int)rec->count(), 2 );
+ rec->append( QSqlField( "double", QVariant::Double ) );
+ QCOMPARE( rec->field( 2 ).name(), (QString) "double" );
+ QCOMPARE( (int)rec->count(), 3 );
+ rec->append( QSqlField( "bool", QVariant::Bool ) );
+ QCOMPARE( rec->field( 3 ).name(), (QString) "bool" );
+ QCOMPARE( (int)rec->count(), 4 );
+ QCOMPARE( rec->indexOf( "string" ), 0 );
+ QCOMPARE( rec->indexOf( "int" ), 1 );
+ QCOMPARE( rec->indexOf( "double" ), 2 );
+ QCOMPARE( rec->indexOf( "bool" ), 3 );
+
+ QFETCH( int, ival );
+ QFETCH( QString, sval );
+ QFETCH( double, dval );
+ QFETCH( int, bval );
+
+ for ( i = 0; i < 4; ++i )
+ rec->setNull( i );
+
+ rec->setValue( 0, sval );
+ rec->setValue( 1, ival );
+ rec->setValue( 2, dval );
+ rec->setValue( 3, QVariant(bval) );
+ QVERIFY( rec->value( 0 ) == sval );
+ QVERIFY( rec->value( 1 ) == ival );
+ QVERIFY( rec->value( 2 ) == dval );
+ QVERIFY( rec->value( 3 ) == QVariant(bval) );
+ for ( i = 0; i < 4; ++i )
+ QVERIFY( !rec->isNull( i ) );
+
+ QSqlRecord rec2 = *rec;
+ QVERIFY( rec2.value( 0 ) == sval );
+ QVERIFY( rec2.value( 1 ) == ival );
+ QVERIFY( rec2.value( 2 ) == dval );
+ QVERIFY( rec2.value( 3 ) == QVariant(bval) );
+
+ rec2.setValue( "string", "__Harry__" );
+ QVERIFY( rec2.value( 0 ) == "__Harry__" );
+
+ for ( i = 0; i < 4; ++i )
+ QVERIFY( !rec2.isNull( i ) );
+
+ QCOMPARE( rec->value( 0 ).toString(), sval );
+ QCOMPARE( rec->value( 1 ).toInt(), ival );
+ QCOMPARE( rec->value( 2 ).toDouble(), dval );
+ QCOMPARE( rec->value( 3 ), QVariant(bval) );
+}
+
+void tst_QSqlRecord::value()
+{
+ // this test is already covered in setValue()
+ QSqlRecord rec2;
+ rec2.append( QSqlField( "string", QVariant::String ) );
+ rec2.setValue( "string", "Harry" );
+ QVERIFY( rec2.value( "string" ) == "Harry" );
+}
+
+QTEST_MAIN(tst_QSqlRecord)
+#include "tst_qsqlrecord.moc"