Skip to content

Commit

Permalink
Browse files Browse the repository at this point in the history
Integrate QtQuickTest into Qt
Change-Id: I558821c0dec9166ea1d0d2e1e2f889553c436316
Task-number:QTBUG-16082
  • Loading branch information
yinyunqiao committed May 20, 2011
1 parent 9bf28fb commit daf671b
Show file tree
Hide file tree
Showing 51 changed files with 6,820 additions and 1 deletion.
123 changes: 123 additions & 0 deletions doc/src/declarative/qmltest.qdoc
@@ -0,0 +1,123 @@
/****************************************************************************
**
** Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies).
** All rights reserved.
** Contact: Nokia Corporation (qt-info@nokia.com)
**
** This file is part of the documentation of the Qt Toolkit.
**
** $QT_BEGIN_LICENSE:FDL$
** No Commercial Usage
** This file contains pre-release code and may not be distributed.
** You may use this file in accordance with the terms and conditions
** contained in the Technology Preview License Agreement accompanying
** this package.
**
** GNU Free Documentation License
** Alternatively, this file may be used under the terms of the GNU Free
** Documentation License version 1.3 as published by the Free Software
** Foundation and appearing in the file included in the packaging of this
** file.
**
** If you have questions regarding the use of this file, please contact
** Nokia at qt-info@nokia.com.
** $QT_END_LICENSE$
**
****************************************************************************/

/*!
\page qmltest.html
\title QtQuickTest Reference Documentation
\keyword QtQuickTest Reference Documentation

\section1 Introduction

QtQuickTest is a unit test framework for Qt Quick (QML) applications.
Test cases are written as JavaScript functions within a TestCase
element:

\code
import QtQuick 2.0
import QtTest 1.0

TestCase {
name: "MathTests"

function test_math() {
compare(2 + 2, 4, "2 + 2 = 4")
}

function test_fail() {
compare(2 + 2, 5, "2 + 2 = 5")
}
}
\endcode

Functions whose names start with \c{test_} are treated as test cases
to be executed. See the documentation for the \l TestCase and
\l SignalSpy elements for more information on writing test cases.

\section1 Running tests

Test cases are launched by a C++ harness that consists of
the following code:

\code
#include <QtQuickTest/quicktest.h>
QUICK_TEST_MAIN(example)
\endcode

Where "example" is an identifier to use to uniquely identify
this set of tests. You should add \c{CONFIG += qmltestcase}.
for example:

\code
TEMPLATE = app
TARGET = tst_example
CONFIG += warn_on qmltestcase
SOURCES += tst_example.cpp
\endcode

The test harness scans the specified source directory recursively
for "tst_*.qml" files. If \c{QUICK_TEST_SOURCE_DIR} is not defined,
then the current directory will be scanned when the harness is run.
Other *.qml files may appear for auxillary QML components that are
used by the test.

The \c{-input} command-line option can be set at runtime to run
test cases from a different directory. This may be needed to run
tests on a target device where the compiled-in directory name refers
to a host. For example:

\code
tst_example -input /mnt/SDCard/qmltests
\endcode

See \c{tests/qmlauto} in the source tree for an example of creating a
test harness that uses the \c{QUICK_TEST_SOURCE_DIR} macro.

If your test case needs QML imports, then you can add them as
\c{-import} options to the the test program command-line by adding
the following line to your .pro file:

\code
IMPORTPATH += $$PWD/../imports/my_module1 $$PWD/../imports/my_module2
\endcode

\section1 Running tests with QtQuick 1

The \c{-qtquick1} option can be passed to a test binary to run
the tests using QDeclarativeView (QtQuick 1) rather than QSGView (QtQuick 2):

\code
tst_example -qtquick1
\endcode

To run tests with either QtQuick 1 or QtQuick 2, use
"import QtQuick 1.0" in your unit tests and then specify
compatibility mode to the QtQuick2 engine:

\code
QMLSCENE_IMPORT_NAME=quick1 tst_example
\endcode
*/
1 change: 1 addition & 0 deletions examples/examples.pro
@@ -1,2 +1,3 @@
TEMPLATE = subdirs
SUBDIRS += declarative
contains(QT_CONFIG, qmltest): SUBDIRS += qmltest
4 changes: 4 additions & 0 deletions examples/qmltest/qmltest.pro
@@ -0,0 +1,4 @@
TEMPLATE=app
TARGET=tst_qmltestexample
CONFIG += qmltestcase
SOURCES += tst_qmltest.cpp
76 changes: 76 additions & 0 deletions examples/qmltest/tst_basic.qml
@@ -0,0 +1,76 @@
/****************************************************************************
**
** Copyright (C) 2010 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$
** No Commercial Usage
** This file contains pre-release code and may not be distributed.
** You may use this file in accordance with the terms and conditions
** contained in the Technology Preview License Agreement accompanying
** this package.
**
** GNU Lesser General Public License Usage
** Alternatively, 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.
**
** If you have questions regarding the use of this file, please contact
** Nokia at qt-info@nokia.com.
**
**
**
**
**
**
**
**
** $QT_END_LICENSE$
**
****************************************************************************/

import QtQuick 2.0
import QtTest 1.0

TestCase {
name: "BasicTests"

function test_pass() {
compare(2 + 2, 4, "2 + 2")
}

function test_fail() {
compare(2 + 2, 5, "2 + 2")
}

function test_skip() {
skip("skipping")
}

function test_expecting() {
expectFail("", "this is the fail we wanted")
verify(false)
}

function test_table_data() {
return [
{tag: "2 + 2 = 4", a: 2, b: 2, answer: 4 },
{tag: "2 + 6 = 8", a: 2, b: 6, answer: 8 },
{tag: "2 + 2 = 5", a: 2, b: 2, answer: 5 }, // fail
]
}

function test_table(data) {
compare(data.a + data.b, data.answer)
}
}
58 changes: 58 additions & 0 deletions examples/qmltest/tst_item.qml
@@ -0,0 +1,58 @@
/****************************************************************************
**
** Copyright (C) 2010 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$
** No Commercial Usage
** This file contains pre-release code and may not be distributed.
** You may use this file in accordance with the terms and conditions
** contained in the Technology Preview License Agreement accompanying
** this package.
**
** GNU Lesser General Public License Usage
** Alternatively, 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.
**
** If you have questions regarding the use of this file, please contact
** Nokia at qt-info@nokia.com.
**
**
**
**
**
**
**
**
** $QT_END_LICENSE$
**
****************************************************************************/

import QtQuick 2.0
import QtTest 1.0

Rectangle {
id: foo
width: 640; height: 480
color: "cyan"

TestCase {
name: "ItemTests"
id: test1

function test_color() {
compare(foo.color, "#00ffff")
}
}
}
43 changes: 43 additions & 0 deletions examples/qmltest/tst_qmltest.cpp
@@ -0,0 +1,43 @@
/****************************************************************************
**
** Copyright (C) 2010 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$
** No Commercial Usage
** This file contains pre-release code and may not be distributed.
** You may use this file in accordance with the terms and conditions
** contained in the Technology Preview License Agreement accompanying
** this package.
**
** GNU Lesser General Public License Usage
** Alternatively, 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.
**
** If you have questions regarding the use of this file, please contact
** Nokia at qt-info@nokia.com.
**
**
**
**
**
**
**
**
** $QT_END_LICENSE$
**
****************************************************************************/

#include <QtQuickTest/quicktest.h>
QUICK_TEST_MAIN(qmltest)
17 changes: 17 additions & 0 deletions modules/qt_qmltest.pri
@@ -0,0 +1,17 @@
QT.qmltest.VERSION = 5.0.0
QT.qmltest.MAJOR_VERSION = 5
QT.qmltest.MINOR_VERSION = 0
QT.qmltest.PATCH_VERSION = 0

QT.qmltest.name = QtQuickTest
QT.qmltest.bins = $$QT_MODULE_BIN_BASE
QT.qmltest.includes = $$QT_MODULE_INCLUDE_BASE $$QT_MODULE_INCLUDE_BASE/QtQuickTest
QT.qmltest.private_includes = $$QT_MODULE_INCLUDE_BASE/QtQuickTest/$$QT.qmltest.VERSION
QT.qmltest.sources = $$QT_MODULE_BASE/src/qmltest
QT.qmltest.libs = $$QT_MODULE_LIB_BASE
QT.qmltest.plugins = $$QT_MODULE_PLUGIN_BASE
QT.qmltest.imports = $$QT_MODULE_IMPORT_BASE
QT.qmltest.depends = declarative testlib
QT.qmltest.DEFINES = QT_DECLARATIVE_LIB

QT_CONFIG += qmltest
1 change: 1 addition & 0 deletions src/imports/imports.pro
@@ -1,4 +1,5 @@
TEMPLATE = subdirs

SUBDIRS += folderlistmodel particles gestures inputcontext etcprovider
contains(QT_CONFIG, qmltest): SUBDIRS += testlib

0 comments on commit daf671b

Please sign in to comment.