summaryrefslogtreecommitdiffstats
path: root/src
diff options
context:
space:
mode:
authorQt Forward Merge Bot <qt_forward_merge_bot@qt-project.org>2018-02-28 20:38:46 +0100
committerQt Forward Merge Bot <qt_forward_merge_bot@qt-project.org>2018-02-28 20:38:47 +0100
commit699a263b29edc26473948d6638232b675409338b (patch)
tree0699b08ad6e6055bf3534f69a30e34e4127371a1 /src
parent96ffe48add521e29d883814a35b1130b9dfdd636 (diff)
parent5d365b96b9a9d8585a0be5cc1c2376b7b2f27101 (diff)
Merge remote-tracking branch 'origin/5.11' into dev
Diffstat (limited to 'src')
-rw-r--r--src/corelib/tools/qvector.h2
-rw-r--r--src/gui/painting/qoutlinemapper.cpp2
-rw-r--r--src/gui/painting/qpainter.cpp4
-rw-r--r--src/plugins/platforms/cocoa/qcocoawindow.mm5
-rw-r--r--src/testlib/doc/snippets/code/doc_src_qtqskip.cpp66
-rw-r--r--src/testlib/doc/src/qttestlib-manual.qdoc47
6 files changed, 122 insertions, 4 deletions
diff --git a/src/corelib/tools/qvector.h b/src/corelib/tools/qvector.h
index 9a6e67cc0b..a01d5c8f3c 100644
--- a/src/corelib/tools/qvector.h
+++ b/src/corelib/tools/qvector.h
@@ -779,7 +779,7 @@ typename QVector<T>::iterator QVector<T>::insert(iterator before, T &&t)
}
} else {
T *b = d->begin() + offset;
- memmove(b + 1, b, (d->size - offset) * sizeof(T));
+ memmove(static_cast<void *>(b + 1), static_cast<const void *>(b), (d->size - offset) * sizeof(T));
new (b) T(std::move(t));
}
d->size += 1;
diff --git a/src/gui/painting/qoutlinemapper.cpp b/src/gui/painting/qoutlinemapper.cpp
index f1e4ce5820..b2d02182c3 100644
--- a/src/gui/painting/qoutlinemapper.cpp
+++ b/src/gui/painting/qoutlinemapper.cpp
@@ -179,7 +179,7 @@ QT_FT_Outline *QOutlineMapper::convertPath(const QVectorPath &path)
m_elements.resize(count);
if (count)
- memcpy(m_elements.data(), path.points(), count* sizeof(QPointF));
+ memcpy(static_cast<void *>(m_elements.data()), static_cast<const void *>(path.points()), count* sizeof(QPointF));
m_element_types.resize(0);
}
diff --git a/src/gui/painting/qpainter.cpp b/src/gui/painting/qpainter.cpp
index ec1b4c1310..b992e8f55d 100644
--- a/src/gui/painting/qpainter.cpp
+++ b/src/gui/painting/qpainter.cpp
@@ -5622,8 +5622,8 @@ void QPainterPrivate::drawGlyphs(const quint32 *glyphArray, QFixedPoint *positio
QVarLengthArray<QGlyphJustification, 128> glyphJustifications(glyphCount);
QVarLengthArray<QGlyphAttributes, 128> glyphAttributes(glyphCount);
memset(glyphAttributes.data(), 0, glyphAttributes.size() * sizeof(QGlyphAttributes));
- memset(advances.data(), 0, advances.size() * sizeof(QFixed));
- memset(glyphJustifications.data(), 0, glyphJustifications.size() * sizeof(QGlyphJustification));
+ memset(static_cast<void *>(advances.data()), 0, advances.size() * sizeof(QFixed));
+ memset(static_cast<void *>(glyphJustifications.data()), 0, glyphJustifications.size() * sizeof(QGlyphJustification));
textItem.glyphs.numGlyphs = glyphCount;
textItem.glyphs.glyphs = const_cast<glyph_t *>(glyphArray);
diff --git a/src/plugins/platforms/cocoa/qcocoawindow.mm b/src/plugins/platforms/cocoa/qcocoawindow.mm
index 3bc9055650..0ece15d1fa 100644
--- a/src/plugins/platforms/cocoa/qcocoawindow.mm
+++ b/src/plugins/platforms/cocoa/qcocoawindow.mm
@@ -1257,6 +1257,11 @@ void QCocoaWindow::recreateWindowIfNeeded()
if ((isContentView() && !shouldBeContentView) || (recreateReason & PanelChanged)) {
if (m_nsWindow) {
qCDebug(lcQpaCocoaWindow) << "Getting rid of existing window" << m_nsWindow;
+ if (m_nsWindow.observationInfo) {
+ qCCritical(lcQpaCocoaWindow) << m_nsWindow << "has active key-value observers (KVO)!"
+ << "These will stop working now that the window is recreated, and will result in exceptions"
+ << "when the observers are removed. Break in QCocoaWindow::recreateWindowIfNeeded to debug.";
+ }
[m_nsWindow closeAndRelease];
if (isContentView()) {
// We explicitly disassociate m_view from the window's contentView,
diff --git a/src/testlib/doc/snippets/code/doc_src_qtqskip.cpp b/src/testlib/doc/snippets/code/doc_src_qtqskip.cpp
new file mode 100644
index 0000000000..d261e87e4c
--- /dev/null
+++ b/src/testlib/doc/snippets/code/doc_src_qtqskip.cpp
@@ -0,0 +1,66 @@
+/****************************************************************************
+**
+** Copyright (C) 2018 The Qt Company Ltd.
+** Contact: https://www.qt.io/licensing/
+**
+** This file is part of the documentation of the Qt Toolkit.
+**
+** $QT_BEGIN_LICENSE:BSD$
+** Commercial License Usage
+** Licensees holding valid commercial Qt licenses may use this file in
+** accordance with the commercial license agreement provided with the
+** Software or, alternatively, in accordance with the terms contained in
+** a written agreement between you and The Qt Company. For licensing terms
+** and conditions see https://www.qt.io/terms-conditions. For further
+** information use the contact form at https://www.qt.io/contact-us.
+**
+** BSD License Usage
+** Alternatively, you may use this file under the terms of the BSD license
+** as follows:
+**
+** "Redistribution and use in source and binary forms, with or without
+** modification, are permitted provided that the following conditions are
+** met:
+** * Redistributions of source code must retain the above copyright
+** notice, this list of conditions and the following disclaimer.
+** * 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.
+** * Neither the name of The Qt Company Ltd nor the names of its
+** contributors may be used to endorse or promote products derived
+** from this software without specific prior written permission.
+**
+**
+** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+** "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 COPYRIGHT
+** OWNER OR CONTRIBUTORS 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."
+**
+** $QT_END_LICENSE$
+**
+****************************************************************************/
+
+//! [0]
+
+if ( tst_Databases::getMySqlVersion( db ).section( QChar('.'), 0, 0 ).toInt()<5 )
+ QSKIP( "Test requires MySQL >= 5.0");
+//! [0]
+//! [1]
+void tst_Skip::test_data()
+{
+ QTest::addColumn<bool>("bool");
+ QTest::newRow("local 1") << false;
+ QTest::newRow("local 2") << true;
+
+ QSKIP("skipping all");
+}
+//! [1]
+void tst_Skip::test_data()
diff --git a/src/testlib/doc/src/qttestlib-manual.qdoc b/src/testlib/doc/src/qttestlib-manual.qdoc
index 3dd1d9d522..2e2af8d67f 100644
--- a/src/testlib/doc/src/qttestlib-manual.qdoc
+++ b/src/testlib/doc/src/qttestlib-manual.qdoc
@@ -382,6 +382,7 @@
\li \l {Chapter 3: Simulating GUI Events}{Simulating GUI Events}
\li \l {Chapter 4: Replaying GUI Events}{Replaying GUI Events}
\li \l {Chapter 5: Writing a Benchmark}{Writing a Benchmark}
+ \li \l {Chapter 6: Skipping Tests with QSKIP}{Skipping Tests}
\endlist
*/
@@ -715,6 +716,7 @@
\previouspage {Chapter 4: Replaying GUI Events}{Chapter 4}
\contentspage {Qt Test Tutorial}{Contents}
+ \nextpage {Chapter 6: Skipping Tests with QSKIP}{Chapter 6}
\title Chapter 5: Writing a Benchmark
\brief How to write a benchmark.
@@ -765,3 +767,48 @@
for more information on these tools and a simple graphing example.
*/
+/*!
+ \page qttestlib-tutorial6.html
+
+ \previouspage {Chapter 5: Writing a Benchmark}{Chapter 5}
+ \contentspage {Qt Test Tutorial}{Contents}
+
+ \title Chapter 6: Skipping Tests with QSKIP
+ \brief How to skip tests in certain cases.
+
+ \section2 Using QSKIP(\a description) in a test function
+
+ If the QSKIP() macro is called from a test function, it stops
+ the execution of the test without adding a failure to the test log.
+ It can be used to skip tests that are certain to fail. The text in
+ the QSKIP \a description parameter is appended to the test log,
+ and explains why the test was not carried out.
+
+ QSKIP can be used to skip testing when the implementation is not yet
+ complete or not supported on a certain platform. When there are known
+ failures, it is recommended to use QEXPECT_FAIL, so that the test is
+ always completely executed.
+
+ Example of QSKIP in a test function:
+
+ \snippet code/doc_src_qtqskip.cpp 0
+
+ In a data-driven test, each call to QSKIP() skips only the current
+ row of test data. If the data-driven test contains an unconditional
+ call to QSKIP, it produces a skip message for each row of test data.
+
+ \section2 Using QSKIP in a _data function
+
+ If called from a _data function, the QSKIP() macro stops
+ execution of the _data function. This prevents execution of the
+ associated test function.
+
+ See below for an example:
+
+ \snippet code/doc_src_qtqskip.cpp 1
+
+ \section2 Using QSKIP from initTestCase() or initTestCase_data()
+
+ If called from \c initTestCase() or \c initTestCase_data(), the
+ QSKIP() macro will skip all test and _data functions.
+*/