From b9f27335e7462a15ac642841bb6d86ebebb349f9 Mon Sep 17 00:00:00 2001 From: Assam Boudjelthia Date: Fri, 26 Mar 2021 10:48:49 +0200 Subject: [PATCH 1/2] Rename QJniEnvironment exceptionCheckAndClear to checkAndClearExceptions Address feedback from header view. Task-number: QTBUG-90211 Pick-to: 6.1 Change-Id: Iad2b609598b16f66fd6ab09484fe6e6899981263 Reviewed-by: Volker Hilsheimer --- src/corelib/kernel/qjnienvironment.cpp | 14 ++--- src/corelib/kernel/qjnienvironment.h | 4 +- src/corelib/kernel/qjnihelpers.cpp | 22 +++---- src/corelib/kernel/qjniobject.cpp | 60 +++++++++---------- src/plugins/platforms/android/extract.cpp | 4 +- .../qjnienvironment/tst_qjnienvironment.cpp | 6 +- 6 files changed, 55 insertions(+), 55 deletions(-) diff --git a/src/corelib/kernel/qjnienvironment.cpp b/src/corelib/kernel/qjnienvironment.cpp index ddadc2e114f..0c9aa27e82f 100644 --- a/src/corelib/kernel/qjnienvironment.cpp +++ b/src/corelib/kernel/qjnienvironment.cpp @@ -128,11 +128,11 @@ QJniEnvironment::QJniEnvironment() \fn QJniEnvironment::~QJniEnvironment() Detaches the current thread from the Java VM and destroys the QJniEnvironment object. - This will clear any pending exception by calling exceptionCheckAndClear(). + This will clear any pending exception by calling checkAndClearExceptions(). */ QJniEnvironment::~QJniEnvironment() { - exceptionCheckAndClear(); + checkAndClearExceptions(); } /*! @@ -229,7 +229,7 @@ bool QJniEnvironment::registerNativeMethods(const char *className, JNINativeMeth jclass clazz = d->jniEnv->GetObjectClass(classObject.object()); if (d->jniEnv->RegisterNatives(clazz, methods, size) < 0) { - exceptionCheckAndClear(); + checkAndClearExceptions(); d->jniEnv->DeleteLocalRef(clazz); return false; } @@ -248,7 +248,7 @@ bool QJniEnvironment::registerNativeMethods(const char *className, JNINativeMeth */ /*! - \fn QJniEnvironment::exceptionCheckAndClear(OutputMode outputMode = OutputMode::Verbose) + \fn QJniEnvironment::checkAndClearExceptions(OutputMode outputMode = OutputMode::Verbose) Cleans any pending exceptions either silently or reporting stack backtrace, depending on the \a outputMode. @@ -260,7 +260,7 @@ bool QJniEnvironment::registerNativeMethods(const char *className, JNINativeMeth \return \c true when a pending exception was cleared. */ -bool QJniEnvironment::exceptionCheckAndClear(QJniEnvironment::OutputMode outputMode) +bool QJniEnvironment::checkAndClearExceptions(QJniEnvironment::OutputMode outputMode) { if (Q_UNLIKELY(d->jniEnv->ExceptionCheck())) { if (outputMode != OutputMode::Silent) @@ -274,7 +274,7 @@ bool QJniEnvironment::exceptionCheckAndClear(QJniEnvironment::OutputMode outputM } /*! - \fn QJniEnvironment::exceptionCheckAndClear(JNIEnv *env, OutputMode outputMode = OutputMode::Verbose) + \fn QJniEnvironment::checkAndClearExceptions(JNIEnv *env, OutputMode outputMode = OutputMode::Verbose) Cleans any pending exceptions for \a env, either silently or reporting stack backtrace, depending on the \a outputMode. This is useful when you @@ -287,7 +287,7 @@ bool QJniEnvironment::exceptionCheckAndClear(QJniEnvironment::OutputMode outputM \return \c true when a pending exception was cleared. */ -bool QJniEnvironment::exceptionCheckAndClear(JNIEnv *env, QJniEnvironment::OutputMode outputMode) +bool QJniEnvironment::checkAndClearExceptions(JNIEnv *env, QJniEnvironment::OutputMode outputMode) { if (Q_UNLIKELY(env->ExceptionCheck())) { if (outputMode != OutputMode::Silent) diff --git a/src/corelib/kernel/qjnienvironment.h b/src/corelib/kernel/qjnienvironment.h index 5a7accf004b..a098e6fe079 100644 --- a/src/corelib/kernel/qjnienvironment.h +++ b/src/corelib/kernel/qjnienvironment.h @@ -71,8 +71,8 @@ public: Verbose }; - bool exceptionCheckAndClear(OutputMode outputMode = OutputMode::Verbose); - static bool exceptionCheckAndClear(JNIEnv *env, OutputMode outputMode = OutputMode::Verbose); + bool checkAndClearExceptions(OutputMode outputMode = OutputMode::Verbose); + static bool checkAndClearExceptions(JNIEnv *env, OutputMode outputMode = OutputMode::Verbose); private: diff --git a/src/corelib/kernel/qjnihelpers.cpp b/src/corelib/kernel/qjnihelpers.cpp index 45f4a4d8952..0ad5988297e 100644 --- a/src/corelib/kernel/qjnihelpers.cpp +++ b/src/corelib/kernel/qjnihelpers.cpp @@ -291,11 +291,11 @@ void QtAndroidPrivate::handleResume() static void setAndroidSdkVersion(JNIEnv *env) { jclass androidVersionClass = env->FindClass("android/os/Build$VERSION"); - if (QJniEnvironment::exceptionCheckAndClear(env)) + if (QJniEnvironment::checkAndClearExceptions(env)) return; jfieldID androidSDKFieldID = env->GetStaticFieldID(androidVersionClass, "SDK_INT", "I"); - if (QJniEnvironment::exceptionCheckAndClear(env)) + if (QJniEnvironment::checkAndClearExceptions(env)) return; g_androidSdkVersion = env->GetStaticIntField(androidVersionClass, androidSDKFieldID); @@ -331,42 +331,42 @@ jint QtAndroidPrivate::initJNI(JavaVM *vm, JNIEnv *env) { jclass jQtNative = env->FindClass("org/qtproject/qt/android/QtNative"); - if (QJniEnvironment::exceptionCheckAndClear(env)) + if (QJniEnvironment::checkAndClearExceptions(env)) return JNI_ERR; jmethodID activityMethodID = env->GetStaticMethodID(jQtNative, "activity", "()Landroid/app/Activity;"); - if (QJniEnvironment::exceptionCheckAndClear(env)) + if (QJniEnvironment::checkAndClearExceptions(env)) return JNI_ERR; jobject activity = env->CallStaticObjectMethod(jQtNative, activityMethodID); - if (QJniEnvironment::exceptionCheckAndClear(env)) + if (QJniEnvironment::checkAndClearExceptions(env)) return JNI_ERR; jmethodID serviceMethodID = env->GetStaticMethodID(jQtNative, "service", "()Landroid/app/Service;"); - if (QJniEnvironment::exceptionCheckAndClear(env)) + if (QJniEnvironment::checkAndClearExceptions(env)) return JNI_ERR; jobject service = env->CallStaticObjectMethod(jQtNative, serviceMethodID); - if (QJniEnvironment::exceptionCheckAndClear(env)) + if (QJniEnvironment::checkAndClearExceptions(env)) return JNI_ERR; jmethodID classLoaderMethodID = env->GetStaticMethodID(jQtNative, "classLoader", "()Ljava/lang/ClassLoader;"); - if (QJniEnvironment::exceptionCheckAndClear(env)) + if (QJniEnvironment::checkAndClearExceptions(env)) return JNI_ERR; jobject classLoader = env->CallStaticObjectMethod(jQtNative, classLoaderMethodID); - if (QJniEnvironment::exceptionCheckAndClear(env)) + if (QJniEnvironment::checkAndClearExceptions(env)) return JNI_ERR; setAndroidSdkVersion(env); @@ -394,7 +394,7 @@ jint QtAndroidPrivate::initJNI(JavaVM *vm, JNIEnv *env) const bool regOk = (env->RegisterNatives(jQtNative, methods, sizeof(methods) / sizeof(methods[0])) == JNI_OK); - if (!regOk && QJniEnvironment::exceptionCheckAndClear(env)) + if (!regOk && QJniEnvironment::checkAndClearExceptions(env)) return JNI_ERR; g_runPendingCppRunnablesMethodID = env->GetStaticMethodID(jQtNative, @@ -512,7 +512,7 @@ void QtAndroidPrivate::requestPermissions(JNIEnv *env, QJniEnvironment env; jclass clazz = env->FindClass("java/lang/String"); - if (env.exceptionCheckAndClear()) + if (env.checkAndClearExceptions()) return; auto array = env->NewObjectArray(permissions.size(), clazz, nullptr); diff --git a/src/corelib/kernel/qjniobject.cpp b/src/corelib/kernel/qjniobject.cpp index f141c2d84e4..8a09ae5f5fd 100644 --- a/src/corelib/kernel/qjniobject.cpp +++ b/src/corelib/kernel/qjniobject.cpp @@ -132,7 +132,7 @@ QT_BEGIN_NAMESPACE \note The user must handle exceptions manually when doing JNI calls using \c JNIEnv directly. It is unsafe to make other JNI calls when exceptions are pending. For more information, see - QJniEnvironment::exceptionCheckAndClear(). + QJniEnvironment::checkAndClearExceptions(). \section1 Java Native Methods @@ -346,7 +346,7 @@ inline static jclass loadClass(const QByteArray &className, JNIEnv *env, bool bi "(Ljava/lang/String;)Ljava/lang/Class;", stringName.object()); - if (!QJniEnvironment::exceptionCheckAndClear(env) && classObject.isValid()) + if (!QJniEnvironment::checkAndClearExceptions(env) && classObject.isValid()) clazz = static_cast(env->NewGlobalRef(classObject.object())); cachedClasses->insert(key, clazz); @@ -366,7 +366,7 @@ static inline jmethodID getMethodID(JNIEnv *env, jmethodID id = isStatic ? env->GetStaticMethodID(clazz, name, signature) : env->GetMethodID(clazz, name, signature); - if (QJniEnvironment::exceptionCheckAndClear(env)) + if (QJniEnvironment::checkAndClearExceptions(env)) return nullptr; return id; @@ -420,7 +420,7 @@ static inline jfieldID getFieldID(JNIEnv *env, jfieldID id = isStatic ? env->GetStaticFieldID(clazz, name, signature) : env->GetFieldID(clazz, name, signature); - if (QJniEnvironment::exceptionCheckAndClear(env)) + if (QJniEnvironment::checkAndClearExceptions(env)) return nullptr; return id; @@ -479,7 +479,7 @@ jclass QtAndroidPrivate::findClass(const char *className, JNIEnv *env) return it.value(); jclass fclazz = env->FindClass(className); - if (!QJniEnvironment::exceptionCheckAndClear(env)) { + if (!QJniEnvironment::checkAndClearExceptions(env)) { clazz = static_cast(env->NewGlobalRef(fclazz)); env->DeleteLocalRef(fclazz); } @@ -726,7 +726,7 @@ inline static QJniObject getCleanJniObject(jobject obj) return QJniObject(); QJniEnvironment env; - if (env.exceptionCheckAndClear()) { + if (env.checkAndClearExceptions()) { env->DeleteLocalRef(obj); return QJniObject(); } @@ -775,7 +775,7 @@ QJniObject QJniObject::callObjectMethodV(const char *methodName, jmethodID id = getCachedMethodID(env, d->m_jclass, d->m_className, methodName, signature); if (id) { res = env->CallObjectMethodV(d->m_jobject, id, args); - if (env.exceptionCheckAndClear()) { + if (env.checkAndClearExceptions()) { env->DeleteLocalRef(res); res = nullptr; } @@ -799,7 +799,7 @@ QJniObject QJniObject::callStaticObjectMethodV(const char *className, methodName, signature, true); if (id) { res = env->CallStaticObjectMethodV(clazz, id, args); - if (env.exceptionCheckAndClear()) { + if (env.checkAndClearExceptions()) { env->DeleteLocalRef(res); res = nullptr; } @@ -846,7 +846,7 @@ Q_CORE_EXPORT void QJniObject::callMethod(const char *methodName, const ch va_start(args, signature); env->CallVoidMethodV(d->m_jobject, id, args); va_end(args); - env.exceptionCheckAndClear(); + env.checkAndClearExceptions(); } } @@ -894,7 +894,7 @@ Q_CORE_EXPORT void QJniObject::callStaticMethod(const char *className, va_start(args, signature); env->CallStaticVoidMethodV(clazz, id, args); va_end(args); - env.exceptionCheckAndClear(); + env.checkAndClearExceptions(); } } } @@ -942,7 +942,7 @@ Q_CORE_EXPORT void QJniObject::callStaticMethod(jclass clazz, va_start(args, signature); env->CallStaticVoidMethodV(clazz, id, args); va_end(args); - env.exceptionCheckAndClear(); + env.checkAndClearExceptions(); } } } @@ -961,7 +961,7 @@ Q_CORE_EXPORT void QJniObject::callStaticMethodV(const char *className, signature, true); if (id) { env->CallStaticVoidMethodV(clazz, id, args); - env.exceptionCheckAndClear(); + env.checkAndClearExceptions(); } } } @@ -976,7 +976,7 @@ Q_CORE_EXPORT void QJniObject::callStaticMethodV(jclass clazz, jmethodID id = getMethodID(env, clazz, methodName, signature, true); if (id) { env->CallStaticVoidMethodV(clazz, id, args); - env.exceptionCheckAndClear(); + env.checkAndClearExceptions(); } } @@ -1005,7 +1005,7 @@ Q_CORE_EXPORT void QJniObject::callMethodV(const char *methodName, const c jmethodID id = getCachedMethodID(env, d->m_jclass, d->m_className, methodName, signature); if (id) { env->CallVoidMethodV(d->m_jobject, id, args); - env.exceptionCheckAndClear(); + env.checkAndClearExceptions(); } } @@ -1021,7 +1021,7 @@ template <> Q_CORE_EXPORT Type QJniObject::callMethod(const char *methodNa va_start(args, signature); \ res = env->Call##MethodName##MethodV(d->m_jobject, id, args); \ va_end(args); \ - if (env.exceptionCheckAndClear()) \ + if (env.checkAndClearExceptions()) \ res = 0; \ } \ return res; \ @@ -1047,7 +1047,7 @@ template <> Q_CORE_EXPORT Type QJniObject::callStaticMethod(const char *cl va_start(args, signature); \ res = env->CallStatic##MethodName##MethodV(clazz, id, args); \ va_end(args); \ - if (env.exceptionCheckAndClear()) \ + if (env.checkAndClearExceptions()) \ res = 0; \ } \ } \ @@ -1073,7 +1073,7 @@ template <> Q_CORE_EXPORT Type QJniObject::callStaticMethod(jclass clazz, va_start(args, signature); \ res = env->CallStatic##MethodName##MethodV(clazz, id, args); \ va_end(args); \ - if (env.exceptionCheckAndClear()) \ + if (env.checkAndClearExceptions()) \ res = 0; \ } \ } \ @@ -1093,7 +1093,7 @@ Q_CORE_EXPORT Type QJniObject::callMethodV(const char *methodName, const c jmethodID id = getCachedMethodID(env, d->m_jclass, d->m_className, methodName, signature);\ if (id) {\ res = env->Call##MethodName##MethodV(d->m_jobject, id, args);\ - if (env.exceptionCheckAndClear()) \ + if (env.checkAndClearExceptions()) \ res = 0; \ }\ return res;\ @@ -1112,7 +1112,7 @@ Q_CORE_EXPORT Type QJniObject::callStaticMethodV(const char *className,\ signature, true);\ if (id) {\ res = env->CallStatic##MethodName##MethodV(clazz, id, args);\ - if (env.exceptionCheckAndClear()) \ + if (env.checkAndClearExceptions()) \ res = 0; \ }\ }\ @@ -1129,7 +1129,7 @@ Q_CORE_EXPORT Type QJniObject::callStaticMethodV(jclass clazz,\ jmethodID id = getMethodID(env, clazz, methodName, signature, true);\ if (id) {\ res = env->CallStatic##MethodName##MethodV(clazz, id, args);\ - if (env.exceptionCheckAndClear()) \ + if (env.checkAndClearExceptions()) \ res = 0; \ }\ return res;\ @@ -1357,7 +1357,7 @@ Q_CORE_EXPORT void QJniObject::setStaticField(const char *className, jfieldID id = getCachedFieldID(env, clazz, className, fieldName, signature, true); if (id) { env->SetStaticObjectField(clazz, id, value); - env.exceptionCheckAndClear(); + env.checkAndClearExceptions(); } } @@ -1377,7 +1377,7 @@ template <> Q_CORE_EXPORT void QJniObject::setStaticField(jclass clazz, if (id) { env->SetStaticObjectField(clazz, id, value); - env.exceptionCheckAndClear(); + env.checkAndClearExceptions(); } } @@ -1423,7 +1423,7 @@ template <> Q_CORE_EXPORT Type QJniObject::getField(const char *fieldName) jfieldID id = getCachedFieldID(env, d->m_jclass, d->m_className, fieldName, Signature); \ if (id) {\ res = env->Get##FieldName##Field(d->m_jobject, id); \ - if (env.exceptionCheckAndClear()) \ + if (env.checkAndClearExceptions()) \ res = 0; \ } \ return res;\ @@ -1440,7 +1440,7 @@ Q_CORE_EXPORT Type QJniObject::getStaticField(const char *className, const if (!id) \ return 0; \ Type res = env->GetStatic##FieldName##Field(clazz, id); \ - if (env.exceptionCheckAndClear()) \ + if (env.checkAndClearExceptions()) \ res = 0; \ return res;\ } \ @@ -1452,7 +1452,7 @@ Q_CORE_EXPORT Type QJniObject::getStaticField(jclass clazz, const char *fi jfieldID id = getFieldID(env, clazz, fieldName, Signature, true);\ if (id) {\ res = env->GetStatic##FieldName##Field(clazz, id);\ - if (env.exceptionCheckAndClear()) \ + if (env.checkAndClearExceptions()) \ res = 0; \ }\ return res;\ @@ -1469,7 +1469,7 @@ template <> Q_CORE_EXPORT void QJniObject::setStaticField(const char *clas if (!id) \ return; \ env->SetStatic##FieldName##Field(clazz, id, value); \ - env.exceptionCheckAndClear(); \ + env.checkAndClearExceptions(); \ }\ template <> Q_CORE_EXPORT void QJniObject::setStaticField(jclass clazz,\ const char *fieldName,\ @@ -1479,7 +1479,7 @@ template <> Q_CORE_EXPORT void QJniObject::setStaticField(jclass clazz,\ jfieldID id = getFieldID(env, clazz, fieldName, Signature, true);\ if (id) {\ env->SetStatic##FieldName##Field(clazz, id, value);\ - env.exceptionCheckAndClear();\ + env.checkAndClearExceptions();\ }\ }\ template <> Q_CORE_EXPORT void QJniObject::setField(const char *fieldName, Type value) \ @@ -1488,7 +1488,7 @@ template <> Q_CORE_EXPORT void QJniObject::setField(const char *fieldName, jfieldID id = getCachedFieldID(env, d->m_jclass, d->m_className, fieldName, Signature); \ if (id) { \ env->Set##FieldName##Field(d->m_jobject, id, value); \ - env.exceptionCheckAndClear(); \ + env.checkAndClearExceptions(); \ } \ } \ @@ -1631,7 +1631,7 @@ void QJniObject::setField(const char *fieldName, const char *signature, jfieldID id = getCachedFieldID(env, d->m_jclass, d->m_className, fieldName, signature); if (id) { env->SetObjectField(d->m_jobject, id, value); - env.exceptionCheckAndClear(); + env.checkAndClearExceptions(); } } @@ -1644,7 +1644,7 @@ void QJniObject::setField(const char *fieldName, jfieldID id = getCachedFieldID(env, d->m_jclass, d->m_className, fieldName, signature); if (id) { env->SetObjectField(d->m_jobject, id, value); - env.exceptionCheckAndClear(); + env.checkAndClearExceptions(); } } diff --git a/src/plugins/platforms/android/extract.cpp b/src/plugins/platforms/android/extract.cpp index bac3c3709ef..cad54d580b5 100644 --- a/src/plugins/platforms/android/extract.cpp +++ b/src/plugins/platforms/android/extract.cpp @@ -135,12 +135,12 @@ Java_org_qtproject_qt_android_ExtractStyle_extractChunkInfo20(JNIEnv *env, jobje env->GetByteArrayRegion(chunkObj, 0, chunkSize, reinterpret_cast(storage)); - if (QJniEnvironment::exceptionCheckAndClear(env)) + if (QJniEnvironment::checkAndClearExceptions(env)) return 0; jintArray res = Java_org_qtproject_qt_android_ExtractStyle_extractNativeChunkInfo20(env, obj, long(storage)); - if (QJniEnvironment::exceptionCheckAndClear(env)) + if (QJniEnvironment::checkAndClearExceptions(env)) res = nullptr; return res; diff --git a/tests/auto/corelib/kernel/qjnienvironment/tst_qjnienvironment.cpp b/tests/auto/corelib/kernel/qjnienvironment/tst_qjnienvironment.cpp index d47a9ecd57e..2cd0b7ea763 100644 --- a/tests/auto/corelib/kernel/qjnienvironment/tst_qjnienvironment.cpp +++ b/tests/auto/corelib/kernel/qjnienvironment/tst_qjnienvironment.cpp @@ -71,11 +71,11 @@ void tst_QJniEnvironment::jniEnv() env->ExceptionClear(); QVERIFY(env->FindClass("java/lang/Object")); - QVERIFY(!QJniEnvironment::exceptionCheckAndClear(env)); + QVERIFY(!QJniEnvironment::checkAndClearExceptions(env)); // try to find a nonexistent class QVERIFY(!env->FindClass("this/doesnt/Exist")); - QVERIFY(QJniEnvironment::exceptionCheckAndClear(env)); + QVERIFY(QJniEnvironment::checkAndClearExceptions(env)); // try to find an existing class with QJniEnvironment QJniEnvironment env; @@ -86,7 +86,7 @@ void tst_QJniEnvironment::jniEnv() // clear exception with member function QVERIFY(!env->FindClass("this/doesnt/Exist")); - QVERIFY(env.exceptionCheckAndClear()); + QVERIFY(env.checkAndClearExceptions()); } // The env does not detach automatically, even if it goes out of scope. The only way it can From 0b4ccbf81ee2009051169f2f0918442b56512b20 Mon Sep 17 00:00:00 2001 From: Giuseppe D'Angelo Date: Thu, 25 Mar 2021 18:26:49 +0100 Subject: [PATCH 2/2] QPainterPath: fix handling of fill rules fillRule() contained a major blunder: instead of checking if the d-pointer was allocated, and return a default value if it wasn't, it checked whether the path contained any points. This means that QPainterPath p; p.setFillRule(x); Q_ASSERT(p.fillRule() == x); was failing. As a drive-by to test this change, fix another mistake in clear(): clear is documented to clear the elements in a path, but instead it also changed the fill rule. This commit partially reverses 697910e5fbd382e78bc1bcbac3f5824aded059b4. Change-Id: Ieb8145694b672439c3380d9ccb87d1206a2dd115 Pick-to: 5.12 5.15 6.0 6.1 Done-with: Milian Wolff Reviewed-by: Eirik Aavitsland --- src/gui/painting/qpainterpath.cpp | 2 +- src/gui/painting/qpainterpath_p.h | 1 - .../gui/painting/qpainterpath/tst_qpainterpath.cpp | 12 +++++++++++- 3 files changed, 12 insertions(+), 3 deletions(-) diff --git a/src/gui/painting/qpainterpath.cpp b/src/gui/painting/qpainterpath.cpp index bf77fb8b3ef..6042106399d 100644 --- a/src/gui/painting/qpainterpath.cpp +++ b/src/gui/painting/qpainterpath.cpp @@ -1341,7 +1341,7 @@ void QPainterPath::addRegion(const QRegion ®ion) */ Qt::FillRule QPainterPath::fillRule() const { - return isEmpty() ? Qt::OddEvenFill : d_func()->fillRule; + return !d_func() ? Qt::OddEvenFill : d_func()->fillRule; } /*! diff --git a/src/gui/painting/qpainterpath_p.h b/src/gui/painting/qpainterpath_p.h index 92d0853ba0c..5a07e3dc8d1 100644 --- a/src/gui/painting/qpainterpath_p.h +++ b/src/gui/painting/qpainterpath_p.h @@ -292,7 +292,6 @@ inline void QPainterPathPrivate::clear() elements.clear(); cStart = 0; - fillRule = Qt::OddEvenFill; bounds = {}; controlBounds = {}; diff --git a/tests/auto/gui/painting/qpainterpath/tst_qpainterpath.cpp b/tests/auto/gui/painting/qpainterpath/tst_qpainterpath.cpp index 12a8fff33ba..dcba95d33cb 100644 --- a/tests/auto/gui/painting/qpainterpath/tst_qpainterpath.cpp +++ b/tests/auto/gui/painting/qpainterpath/tst_qpainterpath.cpp @@ -173,8 +173,18 @@ void tst_QPainterPath::clear() p1.setFillRule(Qt::WindingFill); QVERIFY(p1 != p3); p1.clear(); - QCOMPARE(p1.fillRule(), Qt::OddEvenFill); + QVERIFY(p1 != p3); + p1.setFillRule(Qt::OddEvenFill); QCOMPARE(p1, p2); + + QPainterPath p4; + QCOMPARE(p4.fillRule(), Qt::OddEvenFill); + p4.setFillRule(Qt::WindingFill); + QCOMPARE(p4.fillRule(), Qt::WindingFill); + p4.clear(); + QCOMPARE(p4.fillRule(), Qt::WindingFill); + p4 = QPainterPath(); + QCOMPARE(p4.fillRule(), Qt::OddEvenFill); } void tst_QPainterPath::reserveAndCapacity()