The type loader belongs to the engine and we must not store it in
engine-independent data structures. We do want the import cache to be
stored in the type registry, though (in a separate change).
Change-Id: I2828f5098b27bf1fc96852fc2bd160db44b109e7
Reviewed-by: Fabian Kosmale <fabian.kosmale@qt.io>
It doesn't use any of the features of QSignalSpy, so
it hasn't done it any favors. On top of that QSignalSpy
connects with DirectConnection which means that frequently
emitted signals on another thread may end up trying to
append another signal emission to its internal list during
destruction of the signal spy, leading to use-after-free.
The new implementation uses a small class with a slot that just sets
a boolean. We use AutoConnection so it is thread safe, and pending
emissions go away when the object is destroyed.
Fixes: QTBUG-118744
Fixes: QTBUG-118163
Pick-to: 6.6 6.5
Change-Id: Ib2ccce2369a681bfe9a2e04d2c091f9690edee49
Reviewed-by: Dimitrios Apostolou <jimis@qt.io>
Reviewed-by: Ulf Hermann <ulf.hermann@qt.io>
After 47490648b1, test functions are
executed asynchronously through a scheduler. This makes the entire logic
for detecting whether a test case completed during setSource() obsolete,
and always results in a window being shown.
That is as such fine, Qt Quick Test always required the GUI and Quick
specific Qt modules and platform plugins to be available (so it wasn't
easily possible to run those tests on a server without any display
infrastructure). But we can now remove the logic from the startup
function.
Add a note to the documentation that running tests always shows a UI,
and how to avoid it using the offscreen platform plugin.
Pick-to: 6.5
Fixes: QTBUG-110592
Change-Id: Ie69b04e3fd4044db2fc7f0fc3ca44947a3dddfce
Reviewed-by: Mitch Curtis <mitch.curtis@qt.io>
Reviewed-by: Ulf Hermann <ulf.hermann@qt.io>
We've been requiring C++17 since Qt 6.0, and our qAsConst use finally
starts to bother us (QTBUG-99313), so time to port away from it
now.
Since qAsConst has exactly the same semantics as std::as_const (down
to rvalue treatment, constexpr'ness and noexcept'ness), there's really
nothing more to it than a global search-and-replace.
Task-number: QTBUG-99313
Change-Id: I601bf70f020f511019ed28731ba53b14b765dbf0
Reviewed-by: Shawn Rutledge <shawn.rutledge@qt.io>
This is a semantic patch using ClangTidyTransformator as in
qtbase/df9d882d41b741fef7c5beeddb0abe9d904443d8:
auto QtContainerClass = anyOf(
expr(hasType(cxxRecordDecl(isSameOrDerivedFrom(hasAnyName(classes))))).bind(o),
expr(hasType(namedDecl(hasAnyName(<classes>)))).bind(o));
makeRule(cxxMemberCallExpr(on(QtContainerClass),
callee(cxxMethodDecl(hasAnyName({"count", "length"),
parameterCountIs(0))))),
changeTo(cat(access(o, cat("size"), "()"))),
cat("use 'size()' instead of 'count()/length()'"))
a.k.a qt-port-to-std-compatible-api with config Scope: 'Container',
with the extended set of container classes recognized.
Change-Id: Idb1f75dfe2323bd1d9e8b4d58d54f1b4b80c7ed7
Reviewed-by: Fabian Kosmale <fabian.kosmale@qt.io>
Replace the current license disclaimer in files by
a SPDX-License-Identifier.
Files that have to be modified by hand are modified.
License files are organized under LICENSES directory.
Pick-to: 6.4
Task-number: QTBUG-67283
Change-Id: I63563bbeb6f60f89d2c99660400dca7fab78a294
Reviewed-by: Shawn Rutledge <shawn.rutledge@qt.io>
These were introduced to the C++ QQuickTest namespace in
36c6c1ea57.
QML-only tests should also have access to them.
[ChangeLog][QtQuickTest][TestCase] Added waitForPolish()
and made isPolishScheduled() also take a Window, making it possible
to verify that updatePolish() was called on one or more items
managed by a window.
[ChangeLog][QtQuickTest][TestCase] Deprecated waitForItemPolished().
Use the new waitForPolish() function instead.
Task-number: QTBUG-93757
Change-Id: Ie53389c2d49e096ebf382b902714c9dd4c8d5685
Reviewed-by: Richard Moe Gustavsen <richard.gustavsen@qt.io>
This adds a qIsPolishScheduled(QQuickWindow *) overload of
qIsPolishScheduled(QQuickItem *) (added in
40d6072bc8) and deprecates
qWaitForItemPolished() (added in
7a3cad0619) in favor of qWaitForPolish(),
which has QQuickItem* and QQuickWindow* overloads.
The existing functions that take QQuickItem are useful, but testing
Qt Quick applications can be made even easier by allowing users to
check if a window has any items that need to be polished. This
information is already present (in QQuickWindowPrivate::itemsToPolish),
so it's very efficient to check for.
This is especially useful now that Qt Quick Layouts using polishing for
their layouting, for example, as it's no longer necessary to find
individual polishable items in complex hierarchies before proceeding
to interact with child items.
[ChangeLog][QtQuickTest][QQuickTest] Added
QQuickTest::qIsPolishScheduled(QQuickWindow *) and
QQuickTest::qWaitForPolish(QQuickWindow *) functions for verifying that
updatePolish() was called on one or more items managed by a window.
[ChangeLog][QtQuickTest][QQuickTest] Deprecated
QQuickTest::qWaitForItemPolished(QQuickItem *). Use the new
QQuickTest::qWaitForPolish(QQuickItem *) function instead.
Fixes: QTBUG-93757
Change-Id: I95b6e051b3c9fd2fa93604f4d9ccda486bb29f9d
Reviewed-by: Richard Moe Gustavsen <richard.gustavsen@qt.io>
Reviewed-by: Qt CI Bot <qt_ci_bot@qt-project.org>
Including moc files directly into their classes' TU tends to improve
codegen and enables extended compiler warnings, e.g. about unused
private functions or fields.
Pick-to: 6.3 6.2 5.15
Task-number: QTBUG-102948
Change-Id: Ic8d138526724734169ff7f0686ad19d30c729307
Reviewed-by: Mårten Nordheim <marten.nordheim@qt.io>
Avoid exit(), and wrap the application into a QScopedPointer.
Also, handle errors while enumerating test cases the
same way as errors while creating the QQuickView.
Change-Id: I0dd147a16d3ea60147e15627295d7eb82630e59d
Reviewed-by: Mitch Curtis <mitch.curtis@qt.io>
Reviewed-by: Edward Welbourne <edward.welbourne@qt.io>
Reviewed-by: Tor Arne Vestbø <tor.arne.vestbo@qt.io>
In TestCaseCollector::enumerateTestCases, we visit the super compilation
unit of QML tpyes to check if they might be instances of TestCase.
However, in the case of inline components, the super unit is the current
compilation unit, and we would recurse endlessly.
This does not address the issue that an inline component might actually
inherit TestCase. However, as this only affects the enumeration output
and does not actually affect test execution, this is not that much of an
issue. It should also be noted that the enumeration also fails in any
case where TestCases are loaded dynamically (with a loader), so the
method is not 100% accurate even in the absence of inline components.
Fixes: QTBUG-90740
Task-number: QTBUG-90762
Pick-to: 5.15 6.0
Change-Id: I7e133d62c4f62fc46e9bd3999ff755f7ded3c386
Reviewed-by: Ulf Hermann <ulf.hermann@qt.io>
It was introduced for QtQuick.Controls 1 back when it was still called
QtDesktopComponents. QtQuick.Controls 1 is deprecated and also doesn't
use the widgets mode anymore. I can't think of any other use for it, but
loading QtWidgets produces a number of unwelcome side effects in the
tests.
Change-Id: I4b7e53a9b906c428d84926302bf629b826d900c4
Reviewed-by: Shawn Rutledge <shawn.rutledge@qt.io>
Reviewed-by: Richard Moe Gustavsen <richard.gustavsen@qt.io>
Reviewed-by: Fabian Kosmale <fabian.kosmale@qt.io>
There is no point in having them separate and this way the plugin can be
optional.
Fixes: QTBUG-89804
Change-Id: Ic7de35f6ee7abde4840841e17d21c2b709f6db7d
Reviewed-by: Fabian Kosmale <fabian.kosmale@qt.io>
Reviewed-by: Andrei Golubev <andrei.golubev@qt.io>
Android is passing the test path via QUICK_TEST_SOURCE_DIR but it was
set
to ":/" no matter what.
Pick-to: 5.15
Change-Id: If0e6615999019cf1869a237056d41e35b5be12f1
Reviewed-by: Assam Boudjelthia <assam.boudjelthia@qt.io>
Somehow this was missed when moving to static type registration.
Change-Id: I33f0567449f7bce62b0cb71b9d4f0862ed801e59
Reviewed-by: Fabian Kosmale <fabian.kosmale@qt.io>
It's used all over the place. We need a proper interface.
Change-Id: Iebe254ef3bf35503bf3fdd3639979a5db2b3449e
Reviewed-by: Fabian Kosmale <fabian.kosmale@qt.io>
The compilation unit keeps a list of references to used types. Usually
those are references to types in other compilation units. However, in
the case of inline components they can be references to the same
compilation unit. In that case we should not addref() the compilation
unit, as that forms a cyclic reference.
Fixes: QTBUG-82768
Change-Id: I29d28f3a4780aad4fabd4aa2ed02ca0d0108987e
Reviewed-by: Simon Hausmann <simon.hausmann@qt.io>
406f15ce0e only removed the "QtGui" prefix from some includes, but we are
trying to move (almost) everything OpenGL related from QtGui.
This removes prefixes for additional QOpenGL includes (QOpenGLShaderProgram,
versioned opengl functions etc.).
Task-number: QTBUG-74409
Change-Id: I91e1feac0676859f11de9b75301a0a4e81db50d9
Reviewed-by: Simon Hausmann <simon.hausmann@qt.io>
QLatin1Literal is an undocumented and deprecated typedef
for QLatin1String, just use the original.
Change-Id: Ib6e2b7ac369be12aed0e455c91cf31b807eae4ed
Reviewed-by: Simon Hausmann <simon.hausmann@qt.io>
We need a CompilationUnit that only holds the data needed for
compilation and another one that is executable by the runtime.
Change-Id: I704d859ba028576a18460f5e3a59f210f64535d3
Reviewed-by: Simon Hausmann <simon.hausmann@qt.io>
This was never the intention (as the code comments imply), but
it was never tested.
This is a cherry-pick of 50f234df50
because it went to dev (5.13) when it should have originally went
to 5.12.
Change-Id: I8df0b3702129b1f1d086df73117d3ddb721317cb
Reviewed-by: Gatis Paeglis <gatis.paeglis@qt.io>
(cherry picked from commit 50f234df50)
Reviewed-by: Richard Moe Gustavsen <richard.gustavsen@qt.io>
When I added the macro, I wasn't aware that TestCaseCollector was a
thing. TestCaseCollector loads each QML file without running the tests
(i.e. creates a QQmlComponent from the file without creating an object
from that component). Since it still executes imports, the test can
fail if types are registered or import paths added in
qmlEngineAvailable(), since it's called too late.
So, call it earlier. This should have no adverse effect on user code,
as nothing of importance to the user will be skipped, and the
documentation already details what can be expected by the time
qmlEngineAvailable() is called.
Change-Id: Ibd3a4b728bc87b90f89cc310fddf668c5879ad83
Fixes: QTBUG-74160
Reviewed-by: Ulf Hermann <ulf.hermann@qt.io>
Executing the event loop means we get various things set up properly, such
as runloop auto-release pools on macOS.
If not, the whole test suite will be run as a result of the setWindowShown
call.
Change-Id: Ie217d803208134c5be7db0ee04fbfab86702b521
Reviewed-by: Simon Hausmann <simon.hausmann@qt.io>
Reviewed-by: Tor Arne Vestbø <tor.arne.vestbo@qt.io>
Similar to how it is done for Android, winrt should use qml files from qrc
by default.
Change-Id: I4cd0def2467f764155302fccc393c355907be744
Reviewed-by: Simon Hausmann <simon.hausmann@qt.io>
- Add qtquicktest-cppapi.qdoc for the C++ API landing page.
- Add qtquicktest.qdoc for the QQuickTest namespace.
- Add qtquicktest-qmltypes.qdoc for the QML types landing page.
- Add ../../imports/testlib to the sourcedirs variable so that
the QML files can be found.
- Add a "Reference" section to qtquicktest-index.qdoc that
has links to the QML and C++ pages.
- Add more targets so that we can reliably link to them
while keeping the nice short section names.
- Fix minor issues in existing documentation.
- Link to the QML API docs from the C++ API docs.
Change-Id: I5fc3c90105b095d9ea84c3f76e6c7ba0a47c2695
Reviewed-by: Topi Reiniö <topi.reinio@qt.io>
Reviewed-by: Paul Wicking <paul.wicking@qt.io>
This was never the intention (as the code comments imply), but
it was never tested.
Change-Id: I8df0b3702129b1f1d086df73117d3ddb721317cb
Reviewed-by: Gatis Paeglis <gatis.paeglis@qt.io>
Verifying that an item was polished is quite common in Qt's auto tests:
- The Qt Quick auto tests have a util function for it in
visualtestutil.h (line 103).
- "git grep polishScheduled -- tests/auto | wc -l" says that there are
269 usages of polishScheduled in Qt Quick auto tests, almost all of
which look like this:
QTRY_COMPARE(QQuickItemPrivate::get(item)->polishScheduled, false);
- QQuickTableView's auto tests have their own function:
#define WAIT_UNTIL_POLISHED \
QVERIFY(tableViewPrivate->polishScheduled); \
QTRY_VERIFY(!tableViewPrivate->polishScheduled)
- More recently, QQuickMenu started requiring it (see menuutil.h).
QQuickItem::polish() and QQuickItem::updatePolish() are both public
functions, so the notion of polishing in Qt Quick is not new or hidden.
This means that any user applications that have custom items that make
use of the polish() => updatePolish() system will benefit from having
a reliable method of testing their behavior. In addition, anyone
wanting to simulate interaction with items in e.g. QQuickMenu will
need this API if they don't want to use unreliable qWait() calls.
With this in mind, this and the previous patch aim to standardise/
simplify the various private API checks and utility functions, and
provide public API for users so that they can benefit from more
reliable tests. When used together, the code will look like this:
QVERIFY(QQuickTest::qIsPolishScheduled(item));
QVERIFY(QQuickTest::qWaitForItemPolished(item));
[ChangeLog][QtQuickTest][QQuickTest] Added
QQuickTest::qWaitForItemPolished() for verifying that updatePolish()
was called on an item.
Fixes: QTBUG-71224
Change-Id: I8841910212e7f1a431ba845cae8a1ba7b4f4da67
Reviewed-by: Gatis Paeglis <gatis.paeglis@qt.io>
Verifying that an item was polished is quite common in Qt's auto tests:
- The Qt Quick auto tests have a util function for it in
visualtestutil.h (line 103).
- "git grep polishScheduled -- tests/auto | wc -l" says that there are
269 usages of polishScheduled in Qt Quick auto tests, almost all of
which look like this:
QTRY_COMPARE(QQuickItemPrivate::get(item)->polishScheduled, false);
- QQuickTableView's auto tests have their own function:
#define WAIT_UNTIL_POLISHED \
QVERIFY(tableViewPrivate->polishScheduled); \
QTRY_VERIFY(!tableViewPrivate->polishScheduled)
- More recently, QQuickMenu started requiring it (see menuutil.h).
QQuickItem::polish() and QQuickItem::updatePolish() are both public
functions, so the notion of polishing in Qt Quick is not new or hidden.
This means that any user applications that have custom items that make
use of the polish() => updatePolish() system will benefit from having
a reliable method of testing their behavior. In addition, anyone
wanting to simulate interaction with items in e.g. QQuickMenu will
need this API if they don't want to use unreliable qWait() calls.
With this in mind, this and the follow-up patch aim to standardise/
simplify the various private API checks and utility functions, and
provide public API for users so that they can benefit from more
reliable tests. When used together, the code will look like this:
QVERIFY(QQuickTest::qIsPolishScheduled(item));
QVERIFY(QQuickTest::qWaitForItemPolished(item));
The follow up patch adds auto tests.
[ChangeLog][QtQuickTest][QQuickTest] Added qIsPolishScheduled()
function to allow checking if updatePolish() has been called on
an item since the last call to its polish() function.
This is useful to verify that a polish has been scheduled.
Task-number: QTBUG-71224
Change-Id: I856a40321945c0070e4679e11e4812e0d7adc1f9
Reviewed-by: Gatis Paeglis <gatis.paeglis@qt.io>
Reviewed-by: Richard Moe Gustavsen <richard.gustavsen@qt.io>
This allows to do cleanup in C++ before other parts being destructed.
It QtOpcUa we need to destruct a subprocess. Until now it was done in the
destructor of the setup class. When the destructor is called the eventloop
already died but the process is still sending output when being terminated.
In the windows event handling a nullptr is being dereferenced in this case,
see QTBUG-70641. When terminating this process somewhat earlier, when the
eventloop is still available, the event dispatcher is able to handle those
events without crashing.
Another reason to have this function is because there is applicationAvailable()
being called to initialize C++ code and there should be an equivalent function
for cleaning up.
[ChangeLog][QtQml][QtTest] Add cleanupTestCase() to be called before starting destruction
Change-Id: I24f7a51ec5276a449892609f5b2cfe7957c27668
Reviewed-by: Mitch Curtis <mitch.curtis@qt.io>
This will make it easier to move the data out of CompiledData::Unit and
into a separate data structure.
Change-Id: I32e6233a66f2279b44cc06ef7c3505db4a565f98
Reviewed-by: Lars Knoll <lars.knoll@qt.io>
This allows updating the constants table when the unit data is set /
changes and removes the tie to the engine.
Change-Id: Ice553650390589e30e18421c4e55422a55d0df89
Reviewed-by: Lars Knoll <lars.knoll@qt.io>
This allows to start other processes as counterparts using QProcess.
In the constructor of the setup class it is not possible because no
QApplication object has been instantiated yet.
[ChangeLog][QtQml] Add test init function to be called when application
object is available.
Change-Id: Id24395eca41921c743062522a4aeb6231f9bdf09
Reviewed-by: Mitch Curtis <mitch.curtis@qt.io>
If QtQuickTest test executable was given filters that didn't match in any of the
qml files run, it exited successfully.
In combination with a Coin bug when the test function name contains a space,
this allowed failing tests to pass the CI. If the test function fails, the
repeat attempts would pass two arguments to the executable. Neither of those
hit, but that wasn't considered a problem.
Check that all of the test functions named on the command line are actually
executed during the whole run and otherwise exit with a non-zero exit code.
I assume there's no duplicates in the whole names of test functions scoped with
testcase names.
Task-number: QTBUG-68197
Change-Id: Icf7fe263945403f02920522dfd187aeb76b7cb3c
Reviewed-by: Qt CI Bot <qt_ci_bot@qt-project.org>
Reviewed-by: Kalle Viironen <kalle.viironen@qt.io>
Reviewed-by: Ville Voutilainen <ville.voutilainen@qt.io>