diff options
author | Aaron Kennedy <aaron.kennedy@nokia.com> | 2009-11-19 09:08:07 (GMT) |
---|---|---|
committer | Aaron Kennedy <aaron.kennedy@nokia.com> | 2009-11-19 09:08:07 (GMT) |
commit | 606da4a8af96167e98de53f82d88708b8225e9ee (patch) | |
tree | 9fa36ceb784306ecf0dbc04ec8d527457ebb2737 | |
parent | 48c46d972213e727ed5e80034e7dea3568b61282 (diff) | |
parent | 5e6262210a71691e90f98318f4d1794b49ab361b (diff) | |
download | Qt-606da4a8af96167e98de53f82d88708b8225e9ee.zip Qt-606da4a8af96167e98de53f82d88708b8225e9ee.tar.gz Qt-606da4a8af96167e98de53f82d88708b8225e9ee.tar.bz2 |
Merge branch 'kinetic-declarativeui' of scm.dev.nokia.troll.no:qt/kinetic into kinetic-declarativeui
21 files changed, 198 insertions, 202 deletions
diff --git a/src/declarative/graphicsitems/qmlgraphicsimagebase.cpp b/src/declarative/graphicsitems/qmlgraphicsimagebase.cpp index 3e86a7c..6cd1c05 100644 --- a/src/declarative/graphicsitems/qmlgraphicsimagebase.cpp +++ b/src/declarative/graphicsitems/qmlgraphicsimagebase.cpp @@ -49,12 +49,6 @@ QT_BEGIN_NAMESPACE -QmlGraphicsImageBase::QmlGraphicsImageBase(QmlGraphicsItem *parent) - : QmlGraphicsItem(*(new QmlGraphicsImageBasePrivate), parent) -{ - setFlag(QGraphicsItem::ItemHasNoContents, true); -} - QmlGraphicsImageBase::QmlGraphicsImageBase(QmlGraphicsImageBasePrivate &dd, QmlGraphicsItem *parent) : QmlGraphicsItem(dd, parent) { diff --git a/src/declarative/graphicsitems/qmlgraphicsimagebase_p.h b/src/declarative/graphicsitems/qmlgraphicsimagebase_p.h index 8144ce0..bab93b7 100644 --- a/src/declarative/graphicsitems/qmlgraphicsimagebase_p.h +++ b/src/declarative/graphicsitems/qmlgraphicsimagebase_p.h @@ -59,7 +59,6 @@ class Q_DECLARATIVE_EXPORT QmlGraphicsImageBase : public QmlGraphicsItem Q_PROPERTY(qreal progress READ progress NOTIFY progressChanged) public: - QmlGraphicsImageBase(QmlGraphicsItem *parent = 0); ~QmlGraphicsImageBase(); enum Status { Null, Ready, Loading, Error }; Status status() const; diff --git a/src/declarative/graphicsitems/qmlgraphicstextedit.cpp b/src/declarative/graphicsitems/qmlgraphicstextedit.cpp index b691304..2588f7d 100644 --- a/src/declarative/graphicsitems/qmlgraphicstextedit.cpp +++ b/src/declarative/graphicsitems/qmlgraphicstextedit.cpp @@ -686,29 +686,6 @@ Qt::TextInteractionFlags QmlGraphicsTextEdit::textInteractionFlags() const } /*! - Returns the cursor for the point at the given \a pos on the - text edit. -*/ -QTextCursor QmlGraphicsTextEdit::cursorForPosition(const QPoint &pos) const -{ - Q_D(const QmlGraphicsTextEdit); - return d->control->cursorForPosition(pos); -} - -/*! - Returns the rectangle where the given text \a cursor is rendered - within the text edit. -*/ -QRect QmlGraphicsTextEdit::cursorRect(const QTextCursor &cursor) const -{ - Q_D(const QmlGraphicsTextEdit); - if (cursor.isNull()) - return QRect(); - - return d->control->cursorRect(cursor).toRect(); -} - -/*! Returns the rectangle where the text cursor is rendered within the text edit. */ @@ -720,35 +697,6 @@ QRect QmlGraphicsTextEdit::cursorRect() const /*! - Sets the text cursor for the text edit to the given \a cursor. -*/ -void QmlGraphicsTextEdit::setTextCursor(const QTextCursor &cursor) -{ - Q_D(QmlGraphicsTextEdit); - d->control->setTextCursor(cursor); -} - -/*! - Returns the text cursor for the text edit. -*/ -QTextCursor QmlGraphicsTextEdit::textCursor() const -{ - Q_D(const QmlGraphicsTextEdit); - return d->control->textCursor(); -} - -/*! -Moves the cursor by performing the given \a operation. - -If \a mode is QTextCursor::KeepAnchor, the cursor selects the text it moves over. This is the same effect that the user achieves when they hold down the Shift key and move the cursor with the cursor keys. -*/ -void QmlGraphicsTextEdit::moveCursor(QTextCursor::MoveOperation operation, QTextCursor::MoveMode mode) -{ - Q_D(QmlGraphicsTextEdit); - d->control->moveCursor(operation, mode); -} - -/*! \overload Handles the given \a event. */ @@ -769,28 +717,7 @@ Handles the given key \a event. void QmlGraphicsTextEdit::keyPressEvent(QKeyEvent *event) { Q_D(QmlGraphicsTextEdit); - //### this causes non-standard cursor behavior in some cases. - // is it still needed? - /*QTextCursor c = textCursor(); - QTextCursor::MoveOperation op = QTextCursor::NoMove; - if (event == QKeySequence::MoveToNextChar) { - op = QTextCursor::Right; - } else if (event == QKeySequence::MoveToPreviousChar) { - op = QTextCursor::Left; - } else if (event == QKeySequence::MoveToNextWord) { - op = QTextCursor::WordRight; - } else if (event == QKeySequence::MoveToPreviousWord) { - op = QTextCursor::WordLeft; - } else if (event == QKeySequence::MoveToNextLine) { - op = QTextCursor::Down; - } else if (event == QKeySequence::MoveToPreviousLine) { - op = QTextCursor::Up; - } - - if (op != QTextCursor::NoMove && !c.movePosition(op)) - event->ignore(); - else*/ - d->control->processEvent(event, QPointF(0, 0)); + d->control->processEvent(event, QPointF(0, 0)); if (!event->isAccepted()) QmlGraphicsPaintedItem::keyPressEvent(event); @@ -942,6 +869,7 @@ void QmlGraphicsTextEditPrivate::init() q->setFlag(QGraphicsItem::ItemAcceptsInputMethod); control = new QTextControl(q); + control->setIgnoreUnusedNavigationEvents(true); QObject::connect(control, SIGNAL(updateRequest(QRectF)), q, SLOT(updateImgCache(QRectF))); diff --git a/src/declarative/graphicsitems/qmlgraphicstextedit_p.h b/src/declarative/graphicsitems/qmlgraphicstextedit_p.h index fa95373..1ddfa6b 100644 --- a/src/declarative/graphicsitems/qmlgraphicstextedit_p.h +++ b/src/declarative/graphicsitems/qmlgraphicstextedit_p.h @@ -169,15 +169,8 @@ public: void setTextInteractionFlags(Qt::TextInteractionFlags flags); Qt::TextInteractionFlags textInteractionFlags() const; - QTextCursor cursorForPosition(const QPoint &pos) const; - QRect cursorRect(const QTextCursor &cursor) const; QRect cursorRect() const; - void setTextCursor(const QTextCursor &cursor); - QTextCursor textCursor() const; - - void moveCursor(QTextCursor::MoveOperation operation, QTextCursor::MoveMode mode = QTextCursor::MoveAnchor); - QVariant inputMethodQuery(Qt::InputMethodQuery property) const; Q_SIGNALS: diff --git a/src/declarative/qml/qmlsqldatabase.cpp b/src/declarative/qml/qmlsqldatabase.cpp index 9e4c198..dfe3982 100644 --- a/src/declarative/qml/qmlsqldatabase.cpp +++ b/src/declarative/qml/qmlsqldatabase.cpp @@ -107,8 +107,11 @@ public: int s = query.size(); if (s<0) { // Inefficient. - query.last(); - return query.at()+1; + if (query.last()) { + return query.at()+1; + } else { + return 0; + } } else { return s; } @@ -145,13 +148,14 @@ public: return QScriptValue::Undeletable; } - QScriptClassPropertyIterator *newIterator(const QScriptValue &object); + //QScriptClassPropertyIterator *newIterator(const QScriptValue &object); private: QScriptString str_length; QScriptString str_forwardOnly; }; +/* class QmlSqlQueryScriptClassPropertyIterator : public QScriptClassPropertyIterator { public: @@ -220,6 +224,7 @@ QScriptClassPropertyIterator *QmlSqlQueryScriptClass::newIterator(const QScriptV { return new QmlSqlQueryScriptClassPropertyIterator(object); } +*/ enum SqlException { UNKNOWN_ERR, @@ -349,7 +354,9 @@ static QScriptValue qmlsqldatabase_change_version(QScriptContext *context, QScri return engine->undefinedValue(); } + bool ok = true; if (callback.isFunction()) { + ok = false; db.transaction(); callback.call(QScriptValue(), QScriptValueList() << tx); if (engine->hasUncaughtException()) { @@ -359,13 +366,17 @@ static QScriptValue qmlsqldatabase_change_version(QScriptContext *context, QScri db.rollback(); THROW_SQL(0,QmlEngine::tr("SQL transaction failed")); } else { - context->thisObject().setProperty(QLatin1String("version"), to_version, QScriptValue::ReadOnly); - QSettings ini(databaseFile(db.connectionName(),engine)+QLatin1String(".ini"),QSettings::IniFormat); - ini.setValue(QLatin1String("Version"), to_version); + ok = true; } } } + if (ok) { + context->thisObject().setProperty(QLatin1String("version"), to_version, QScriptValue::ReadOnly); + QSettings ini(databaseFile(db.connectionName(),engine)+QLatin1String(".ini"),QSettings::IniFormat); + ini.setValue(QLatin1String("Version"), to_version); + } + return engine->undefinedValue(); } @@ -439,6 +450,7 @@ static QScriptValue qmlsqldatabase_open_sync(QScriptContext *context, QScriptEng if (QSqlDatabase::connectionNames().contains(dbid)) { database = QSqlDatabase::database(dbid); + version = ini.value(QLatin1String("Version")).toString(); } else { created = !QFile::exists(basename+QLatin1String(".sqlite")); database = QSqlDatabase::addDatabase(QLatin1String("QSQLITE"), dbid); @@ -456,6 +468,7 @@ static QScriptValue qmlsqldatabase_open_sync(QScriptContext *context, QScriptEng // Incompatible THROW_SQL(VERSION_ERR,QmlEngine::tr("SQL: database version mismatch")); } + version = ini.value("Version").toString(); } database.setDatabaseName(basename+QLatin1String(".sqlite")); } diff --git a/tests/auto/declarative/qmlgraphicstextedit/tst_qmlgraphicstextedit.cpp b/tests/auto/declarative/qmlgraphicstextedit/tst_qmlgraphicstextedit.cpp index 543c650..96df0a5 100644 --- a/tests/auto/declarative/qmlgraphicstextedit/tst_qmlgraphicstextedit.cpp +++ b/tests/auto/declarative/qmlgraphicstextedit/tst_qmlgraphicstextedit.cpp @@ -656,7 +656,6 @@ void tst_qmlgraphicstextedit::navigation() QVERIFY(input != 0); QTRY_VERIFY(input->hasFocus() == true); - QEXPECT_FAIL("", "Depends on QT-2236", Abort); simulateKey(canvas, Qt::Key_Left); QVERIFY(input->hasFocus() == false); simulateKey(canvas, Qt::Key_Right); diff --git a/tests/auto/declarative/qmlgraphicstextinput/data/masks.qml b/tests/auto/declarative/qmlgraphicstextinput/data/masks.qml new file mode 100644 index 0000000..08a857c --- /dev/null +++ b/tests/auto/declarative/qmlgraphicstextinput/data/masks.qml @@ -0,0 +1,7 @@ +import Qt 4.6 + +TextInput{ + focus: true + objectName: "myInput" + inputMask: "HHHHhhhh; " +} diff --git a/tests/auto/declarative/qmlgraphicstextinput/data/maxLength.qml b/tests/auto/declarative/qmlgraphicstextinput/data/maxLength.qml new file mode 100644 index 0000000..7cbeadd --- /dev/null +++ b/tests/auto/declarative/qmlgraphicstextinput/data/maxLength.qml @@ -0,0 +1,7 @@ +import Qt 4.6 + +TextInput{ + focus: true + objectName: "myInput" + maximumLength: 10 +} diff --git a/tests/auto/declarative/qmlgraphicstextinput/tst_qmlgraphicstextinput.cpp b/tests/auto/declarative/qmlgraphicstextinput/tst_qmlgraphicstextinput.cpp index d84623f..0eba11b 100644 --- a/tests/auto/declarative/qmlgraphicstextinput/tst_qmlgraphicstextinput.cpp +++ b/tests/auto/declarative/qmlgraphicstextinput/tst_qmlgraphicstextinput.cpp @@ -328,27 +328,53 @@ void tst_qmlgraphicstextinput::selection() void tst_qmlgraphicstextinput::maxLength() { - QString componentStr = "import Qt 4.6\nTextInput { maximumLength: 10; }"; - QmlComponent textinputComponent(&engine, componentStr.toLatin1(), QUrl()); - QmlGraphicsTextInput *textinputObject = qobject_cast<QmlGraphicsTextInput*>(textinputComponent.create()); + //QString componentStr = "import Qt 4.6\nTextInput { maximumLength: 10; }"; + QmlView *canvas = createView(SRCDIR "/data/maxLength.qml"); + canvas->execute(); + canvas->show(); + canvas->setFocus(); + QVERIFY(canvas->root() != 0); + QmlGraphicsTextInput *textinputObject = qobject_cast<QmlGraphicsTextInput *>(canvas->root()); QVERIFY(textinputObject != 0); QVERIFY(textinputObject->text().isEmpty()); + QVERIFY(textinputObject->maxLength() == 10); foreach(const QString &str, standard){ QVERIFY(textinputObject->text().length() <= 10); textinputObject->setText(str); QVERIFY(textinputObject->text().length() <= 10); } - //TODO: Simulated keypress input adding 11 chars at a time + + textinputObject->setText(""); + QTRY_VERIFY(textinputObject->hasFocus() == true); + for(int i=0; i<20; i++){ + QCOMPARE(textinputObject->text().length(), qMin(i,10)); + //simulateKey(canvas, Qt::Key_A); + QTest::keyPress(canvas, Qt::Key_A); + QTest::keyRelease(canvas, Qt::Key_A, Qt::NoModifier ,10); + } } void tst_qmlgraphicstextinput::masks() { - QString componentStr = "import Qt 4.6\nTextInput { maximumLength: 10; }"; - QmlComponent textinputComponent(&engine, componentStr.toLatin1(), QUrl()); - QmlGraphicsTextInput *textinputObject = qobject_cast<QmlGraphicsTextInput*>(textinputComponent.create()); + //Not a comprehensive test of the possible masks, that's done elsewhere (QLineEdit) + //QString componentStr = "import Qt 4.6\nTextInput { inputMask: 'HHHHhhhh'; }"; + QmlView *canvas = createView(SRCDIR "/data/masks.qml"); + canvas->execute(); + canvas->show(); + canvas->setFocus(); + QVERIFY(canvas->root() != 0); + QmlGraphicsTextInput *textinputObject = qobject_cast<QmlGraphicsTextInput *>(canvas->root()); QVERIFY(textinputObject != 0); - - //TODO: Me + QTRY_VERIFY(textinputObject->hasFocus() == true); + QVERIFY(textinputObject->text().length() == 0); + QCOMPARE(textinputObject->inputMask(), QString("HHHHhhhh; ")); + for(int i=0; i<10; i++){ + QCOMPARE(qMin(i,8), textinputObject->text().length()); + QCOMPARE(i>=4, textinputObject->hasAcceptableInput()); + //simulateKey(canvas, Qt::Key_A); + QTest::keyPress(canvas, Qt::Key_A); + QTest::keyRelease(canvas, Qt::Key_A, Qt::NoModifier ,10); + } } void tst_qmlgraphicstextinput::validators() diff --git a/tests/auto/declarative/sql/data/2-selection-bindnames.js b/tests/auto/declarative/sql/data/2-selection-bindnames.js deleted file mode 100644 index 21f34db..0000000 --- a/tests/auto/declarative/sql/data/2-selection-bindnames.js +++ /dev/null @@ -1,16 +0,0 @@ -function test() { - var db = openDatabaseSync("QmlTestDB", "", "Test database from Qt autotests", 1000000); - var r="transaction_not_finished"; - - db.transaction( - function(tx) { - var rs = tx.executeSql('SELECT * FROM Greeting WHERE salutation=:p2 AND salutee=:p1', {':p1':'world', ':p2':'hello'}); - if ( rs.rows.length != 4 ) - r = "SELECT RETURNED WRONG VALUE "+rs.rows.length+rs.rows.item(0)+rs.rows.item(1) - else - r = "passed"; - } - ); - - return r; -} diff --git a/tests/auto/declarative/sql/data/4-iteration-index.js b/tests/auto/declarative/sql/data/4-iteration-index.js deleted file mode 100644 index 512cf8d..0000000 --- a/tests/auto/declarative/sql/data/4-iteration-index.js +++ /dev/null @@ -1,19 +0,0 @@ -function test() { - var db = openDatabaseSync("QmlTestDB", "", "Test database from Qt autotests", 1000000); - var r="transaction_not_finished"; - - db.transaction( - function(tx) { - var rs = tx.executeSql('SELECT * FROM Greeting'); - var r1="" - for(var i = 0; i < rs.rows.length; i++) - r1 += rs.rows[i].salutation + ", " + rs.rows[i].salutee + ";" - if (r1 != "hello, world;hello, world;hello, world;hello, world;") - r = "SELECTED DATA WRONG: "+r1; - else - r = "passed"; - } - ); - - return r; -} diff --git a/tests/auto/declarative/sql/data/5-iteration-iterator.js b/tests/auto/declarative/sql/data/5-iteration-iterator.js deleted file mode 100644 index ae4fd34..0000000 --- a/tests/auto/declarative/sql/data/5-iteration-iterator.js +++ /dev/null @@ -1,19 +0,0 @@ -function test() { - var db = openDatabaseSync("QmlTestDB", "", "Test database from Qt autotests", 1000000); - var r="transaction_not_finished"; - - db.transaction( - function(tx) { - var rs = tx.executeSql('SELECT * FROM Greeting') - var r1="" - for(var i in rs.rows) - r1 += rs.rows[i].salutation + ", " + rs.rows[i].salutee + ";" - if (r1 != "hello, world;hello, world;hello, world;hello, world;") - r = "SELECTED DATA WRONG: "+r1; - else - r = "passed"; - } - ); - - return r; -} diff --git a/tests/auto/declarative/sql/data/6-iteration-efficient.js b/tests/auto/declarative/sql/data/6-iteration-efficient.js deleted file mode 100644 index fe0acfc..0000000 --- a/tests/auto/declarative/sql/data/6-iteration-efficient.js +++ /dev/null @@ -1,29 +0,0 @@ -function test() { - var db = openDatabaseSync("QmlTestDB", "", "Test database from Qt autotests", 1000000); - var r="transaction_not_finished"; - - db.transaction( - function(tx) { - var rs = tx.executeSql('SELECT * FROM Greeting'); - var r1="" - var fbefiore = rs.rows.forwardOnly; - rs.rows.forwardOnly = true; - var fafter = rs.rows.forwardOnly; - if (fbefore) - r = "forward wrong before"; - else if (!fafter) - r = "forward wrong after"; - else { - for(var i=0; rs.rows[i]; ++i) { - r1 += rs.rows[i].salutation + ", " + rs.rows[i].salutee + ";" - } - if (r1 != "hello, world;hello, world;hello, world;hello, world;") - r = "SELECTED DATA WRONG: "+r1; - else - r = "passed"; - } - } - ); - - return r; -} diff --git a/tests/auto/declarative/sql/data/changeversion.js b/tests/auto/declarative/sql/data/changeversion.js new file mode 100644 index 0000000..680d7a6 --- /dev/null +++ b/tests/auto/declarative/sql/data/changeversion.js @@ -0,0 +1,53 @@ +function test() { + var r="transaction_not_finished"; + + var db = openDatabaseSync("QmlTestDB-changeversion", "", "Test database from Qt autotests", 1000000, + function(db) { + db.changeVersion("","1.0") + db.transaction(function(tx){ + tx.executeSql('CREATE TABLE Greeting(salutation TEXT, salutee TEXT)'); + }) + }); + + db.transaction(function(tx){ + tx.executeSql('INSERT INTO Greeting VALUES ("Hello", "world")'); + tx.executeSql('INSERT INTO Greeting VALUES ("Goodbye", "cruel world")'); + }); + + + db = openDatabaseSync("QmlTestDB-changeversion", "", "Test database from Qt autotests", 1000000); + + if (db.version == "1.0") + db.changeVersion("1.0","2.0",function(tx) + { + tx.executeSql('CREATE TABLE Utterance(type TEXT, phrase TEXT)') + var rs = tx.executeSql('SELECT * FROM Greeting'); + for (var i=0; i<rs.rows.length; ++i) { + var type = "Greeting"; + var phrase = rs.rows.item(i).salutation + ", " + rs.rows.item(i).salutee; + if (rs.rows.item(i).salutation == "Goodbye" + || rs.rows.item(i).salutation == "Farewell" + || rs.rows.item(i).salutation == "Good-bye") type = "Valediction"; + var ins = tx.executeSql('INSERT INTO Utterance VALUES(?,?)',[type,phrase]); + } + tx.executeSql('DROP TABLE Greeting'); + }); + else + return "db.version should be 1.0, but is " + db.version; + + var db = openDatabaseSync("QmlTestDB-changeversion", "2.0", "Test database from Qt autotests", 1000000); + + db.transaction(function(tx){ + var rs = tx.executeSql('SELECT * FROM Utterance'); + r = "" + for (var i=0; i<rs.rows.length; ++i) { + r += "(" + rs.rows.item(i).type + ": " + rs.rows.item(i).phrase + ")"; + } + if (r == "(Greeting: Hello, world)(Valediction: Goodbye, cruel world)") + r = "passed" + else + r = "WRONG DATA: " + r; + }) + + return r; +} diff --git a/tests/auto/declarative/sql/data/creation-a.js b/tests/auto/declarative/sql/data/creation-a.js new file mode 100644 index 0000000..bd7d5c5 --- /dev/null +++ b/tests/auto/declarative/sql/data/creation-a.js @@ -0,0 +1,18 @@ +function test() { + var r="transaction_not_finished"; + + var db = openDatabaseSync("QmlTestDB-creation-a", "1.0", "Test database from Qt autotests", 1000000, + function(db) { + db.transaction(function(tx){ + tx.executeSql('CREATE TABLE Greeting(salutation TEXT, salutee TEXT)'); + r = "passed"; + }) + }); + + var db = openDatabaseSync("QmlTestDB-creation-a", "1.0", "Test database from Qt autotests", 1000000, + function(db) { + r = "FAILED: should have already been created"; + }); + + return r; +} diff --git a/tests/auto/declarative/sql/data/1-creation.js b/tests/auto/declarative/sql/data/creation.js index aab9b5d..317b4c1 100644 --- a/tests/auto/declarative/sql/data/1-creation.js +++ b/tests/auto/declarative/sql/data/creation.js @@ -1,8 +1,7 @@ function test() { - var db = openDatabaseSync("QmlTestDB", "", "Test database from Qt autotests", 1000000); var r="transaction_not_finished"; + var db = openDatabaseSync("QmlTestDB-creation", "1.0", "Test database from Qt autotests", 1000000); - // Asynchronous in WebKit, so must wait before calling test() db.transaction( function(tx) { tx.executeSql('CREATE TABLE IF NOT EXISTS Greeting(salutation TEXT, salutee TEXT)'); diff --git a/tests/auto/declarative/sql/data/7a-error.js b/tests/auto/declarative/sql/data/error-a.js index 65d0c03..10a23f6 100644 --- a/tests/auto/declarative/sql/data/7a-error.js +++ b/tests/auto/declarative/sql/data/error-a.js @@ -1,5 +1,5 @@ function test() { - var db = openDatabaseSync("QmlTestDB", "", "Test database from Qt autotests", 1000000); + var db = openDatabaseSync("QmlTestDB-error-a", "1.0", "Test database from Qt autotests", 1000000); var r="transaction_not_finished"; try { diff --git a/tests/auto/declarative/sql/data/3-iteration-item-function.js b/tests/auto/declarative/sql/data/iteration.js index 57c8a17..c34cbbb 100644 --- a/tests/auto/declarative/sql/data/3-iteration-item-function.js +++ b/tests/auto/declarative/sql/data/iteration.js @@ -1,14 +1,23 @@ function test() { - var db = openDatabaseSync("QmlTestDB", "", "Test database from Qt autotests", 1000000); + var db = openDatabaseSync("QmlTestDB-iteration", "", "Test database from Qt autotests", 1000000); var r="transaction_not_finished"; db.transaction( function(tx) { + tx.executeSql('CREATE TABLE Greeting(salutation TEXT, salutee TEXT)'); + tx.executeSql('INSERT INTO Greeting VALUES ("Hello", "world")'); + tx.executeSql('INSERT INTO Greeting VALUES ("Goodbye", "cruel world")'); + } + ) + + db.transaction( + function(tx) { var rs = tx.executeSql('SELECT * FROM Greeting'); var r1="" for(var i = 0; i < rs.rows.length; i++) r1 += rs.rows.item(i).salutation + ", " + rs.rows.item(i).salutee + ";" if (r1 != "hello, world;hello, world;hello, world;hello, world;") + if (r1 != "Hello, world;Goodbye, cruel world;") r = "SELECTED DATA WRONG: "+r1; else r = "passed"; diff --git a/tests/auto/declarative/sql/data/selection-bindnames.js b/tests/auto/declarative/sql/data/selection-bindnames.js new file mode 100644 index 0000000..9786821 --- /dev/null +++ b/tests/auto/declarative/sql/data/selection-bindnames.js @@ -0,0 +1,26 @@ +function test() { + var db = openDatabaseSync("QmlTestDB-bindnames", "", "Test database from Qt autotests", 1000000); + var r="transaction_not_finished"; + + db.transaction( + function(tx) { + tx.executeSql('CREATE TABLE IF NOT EXISTS Greeting(salutation TEXT, salutee TEXT)'); + tx.executeSql('INSERT INTO Greeting VALUES(?, ?)', [ 'hello', 'world' ]); + tx.executeSql('INSERT INTO Greeting VALUES(?, ?)', [ 'goodbye', 'world' ]); + tx.executeSql('INSERT INTO Greeting VALUES(?, ?)', [ 'hello', 'world' ]); + tx.executeSql('INSERT INTO Greeting VALUES(?, ?)', [ 'hello', 'there' ]); + } + ); + + db.transaction( + function(tx) { + var rs = tx.executeSql('SELECT * FROM Greeting WHERE salutation=:p2 AND salutee=:p1', {':p1':'world', ':p2':'hello'}); + if ( rs.rows.length != 2 ) + r = "SELECT RETURNED WRONG VALUE "+rs.rows.length+rs.rows.item(0)+rs.rows.item(1) + else + r = "passed"; + } + ); + + return r; +} diff --git a/tests/auto/declarative/sql/data/2-selection.js b/tests/auto/declarative/sql/data/selection.js index f141d2c..f116eff 100644 --- a/tests/auto/declarative/sql/data/2-selection.js +++ b/tests/auto/declarative/sql/data/selection.js @@ -1,14 +1,21 @@ function test() { - var db = openDatabaseSync("QmlTestDB", "", "Test database from Qt autotests", 1000000); + var db = openDatabaseSync("QmlTestDB-selection", "", "Test database from Qt autotests", 1000000); var r="transaction_not_finished"; db.transaction( function(tx) { + tx.executeSql('CREATE TABLE IF NOT EXISTS Greeting(salutation TEXT, salutee TEXT)'); tx.executeSql('INSERT INTO Greeting VALUES(?, ?)', [ 'hello', 'world' ]); tx.executeSql('INSERT INTO Greeting VALUES(?, ?)', [ 'hello', 'world' ]); + } + ); + + db.transaction( + function(tx) { + tx.executeSql('INSERT INTO Greeting VALUES(?, ?)', [ 'hello', 'world' ]); tx.executeSql('INSERT INTO Greeting VALUES(?, ?)', [ 'hello', 'world' ]); var rs = tx.executeSql('SELECT * FROM Greeting'); - if ( rs.rows.length != 4 ) // 1 from test1, 3 from this test. + if ( rs.rows.length != 4 ) r = "SELECT RETURNED WRONG VALUE "+rs.rows.length+rs.rows[0]+rs.rows[1] else r = "passed"; diff --git a/tests/auto/declarative/sql/tst_sql.cpp b/tests/auto/declarative/sql/tst_sql.cpp index cbd14ab..b5f98e3 100644 --- a/tests/auto/declarative/sql/tst_sql.cpp +++ b/tests/auto/declarative/sql/tst_sql.cpp @@ -109,6 +109,7 @@ void tst_sql::initTestCase() { removeRecursive(dbDir()); QDir().mkpath(dbDir()); + } void tst_sql::cleanupTestCase() @@ -137,14 +138,14 @@ void tst_sql::testQml_data() QTest::addColumn<int>("databases"); // The number of databases that should have been created QTest::addColumn<bool>("qmlextension"); // Things WebKit can't do - QTest::newRow("creation") << "data/1-creation.js" << "passed" << 1 << false; - QTest::newRow("selection") << "data/2-selection.js" << "passed" << 1 << false; - QTest::newRow("selection-bindnames") << "data/2-selection-bindnames.js" << "passed" << 1 << true; // WebKit somehow breaks named parameters - QTest::newRow("iteration-item-function") << "data/3-iteration-item-function.js" << "passed" << 1 << false; - QTest::newRow("iteration-index") << "data/4-iteration-index.js" << "passed" << 1 << true; // Some HTML5 documents say to use rows by index, others by item() function - QTest::newRow("iteration-iterator") << "data/5-iteration-iterator.js" << "passed" << 1 << true; // As with previous, WebKit doesn't give an array - QTest::newRow("iteration-efficient") << "data/6-iteration-efficient.js" << "passed" << 1 << true; // It's very inefficient to find the total number of results, here is a solution - QTest::newRow("error-a") << "data/7a-error.js" << "passed" << 1 << false; + // Each test should use a newly named DB to avoid inter-test dependencies + QTest::newRow("creation") << "data/creation.js" << "passed" << 1 << false; + QTest::newRow("creation-a") << "data/creation-a.js" << "passed" << 2 << false; + QTest::newRow("changeversion") << "data/changeversion.js" << "passed" << 3 << false; + QTest::newRow("selection") << "data/selection.js" << "passed" << 4 << false; + QTest::newRow("selection-bindnames") << "data/selection-bindnames.js" << "passed" << 5 << true; + QTest::newRow("iteration") << "data/iteration.js" << "passed" << 6 << false; + QTest::newRow("error-a") << "data/error-a.js" << "passed" << 7 << false; } void tst_sql::validateAgainstWebkit_data() @@ -153,7 +154,7 @@ void tst_sql::validateAgainstWebkit_data() QTest::addColumn<QString>("result"); // The required output from the js test() function QTest::addColumn<int>("databases"); // The number of databases that should have been created QTest::addColumn<bool>("qmlextension"); // Things WebKit can't do - QTest::newRow("creation") << "data/1-creation.js" << "passed" << 1 << false; + QTest::newRow("creation") << "data/creation.js" << "passed" << 1 << false; } void tst_sql::validateAgainstWebkit() |