From d7af71b3187d9b67eb2aec04197fd41f74149497 Mon Sep 17 00:00:00 2001 From: Kamil Trzcinski Date: Thu, 29 Aug 2013 16:03:19 +0200 Subject: threading support for winrt Change-Id: Ife296e15ddf727c3f53ab3d3d84634b5c7bbf85c Done-with: Maurice Kalinowski Reviewed-by: Lars Knoll --- tests/auto/corelib/thread/qthread/tst_qthread.cpp | 12 ++++++++++++ 1 file changed, 12 insertions(+) (limited to 'tests') diff --git a/tests/auto/corelib/thread/qthread/tst_qthread.cpp b/tests/auto/corelib/thread/qthread/tst_qthread.cpp index 5cc0e5bdb4..4ebdd63b99 100644 --- a/tests/auto/corelib/thread/qthread/tst_qthread.cpp +++ b/tests/auto/corelib/thread/qthread/tst_qthread.cpp @@ -55,6 +55,8 @@ #endif #if defined(Q_OS_WINCE) #include +#elif defined(Q_OS_WINRT) +#include #elif defined(Q_OS_WIN) #include #include @@ -460,6 +462,10 @@ void tst_QThread::start() QVERIFY(!thread.isFinished()); QVERIFY(!thread.isRunning()); QMutexLocker locker(&thread.mutex); +#ifdef Q_OS_WINRT + if (priorities[i] != QThread::NormalPriority && priorities[i] != QThread::InheritPriority) + QTest::ignoreMessage(QtWarningMsg, "QThread::start: Failed to set thread priority (not implemented)"); +#endif thread.start(priorities[i]); QVERIFY(thread.isRunning()); QVERIFY(!thread.isFinished()); @@ -630,6 +636,8 @@ void noop(void*) { } #if defined Q_OS_UNIX typedef pthread_t ThreadHandle; +#elif defined Q_OS_WINRT + typedef std::thread ThreadHandle; #elif defined Q_OS_WIN typedef HANDLE ThreadHandle; #endif @@ -671,6 +679,8 @@ void NativeThreadWrapper::start(FunctionPointer functionPointer, void *data) #if defined Q_OS_UNIX const int state = pthread_create(&nativeThreadHandle, 0, NativeThreadWrapper::runUnix, this); Q_UNUSED(state); +#elif defined(Q_OS_WINRT) + nativeThreadHandle = std::thread(NativeThreadWrapper::runWin, this); #elif defined(Q_OS_WINCE) nativeThreadHandle = CreateThread(NULL, 0 , (LPTHREAD_START_ROUTINE)NativeThreadWrapper::runWin , this, 0, NULL); #elif defined Q_OS_WIN @@ -690,6 +700,8 @@ void NativeThreadWrapper::join() { #if defined Q_OS_UNIX pthread_join(nativeThreadHandle, 0); +#elif defined Q_OS_WINRT + nativeThreadHandle.join(); #elif defined Q_OS_WIN WaitForSingleObject(nativeThreadHandle, INFINITE); CloseHandle(nativeThreadHandle); -- cgit v1.2.3 From e37001aad7f6e4bbad250addba033f1eaf97d566 Mon Sep 17 00:00:00 2001 From: Jan Arve Saether Date: Wed, 31 Jul 2013 15:43:09 +0200 Subject: Say hello to qFloatDistance() This function is useful if a floating point comparison requires a certain precision. The return value can be considered as the precision. For instance, if you want to compare two 32-bit floating point values and all you need is a 24-bit precision, you can use this function like this: if (qFloatDistance(a,b) < (1 << 7)) { // The last 7 bits are not // significant // precise enough } Task-number: QTBUG-32632 Change-Id: I020a58d2f9f9452ac3c510b4bb560dc806f0d93c Reviewed-by: Shawn Rutledge Reviewed-by: Thiago Macieira --- .../auto/corelib/global/qnumeric/tst_qnumeric.cpp | 93 ++++++++++++++++++++++ 1 file changed, 93 insertions(+) (limited to 'tests') diff --git a/tests/auto/corelib/global/qnumeric/tst_qnumeric.cpp b/tests/auto/corelib/global/qnumeric/tst_qnumeric.cpp index 20f99e9191..36e01a0ccd 100644 --- a/tests/auto/corelib/global/qnumeric/tst_qnumeric.cpp +++ b/tests/auto/corelib/global/qnumeric/tst_qnumeric.cpp @@ -44,6 +44,7 @@ #include #include +#include class tst_QNumeric: public QObject { @@ -53,6 +54,10 @@ private slots: void fuzzyCompare_data(); void fuzzyCompare(); void qNan(); + void floatDistance_data(); + void floatDistance(); + void floatDistance_double_data(); + void floatDistance_double(); }; void tst_QNumeric::fuzzyCompare_data() @@ -121,5 +126,93 @@ void tst_QNumeric::qNan() QVERIFY(qFuzzyCompare(1/inf, 0.0)); } +void tst_QNumeric::floatDistance_data() +{ + QTest::addColumn("val1"); + QTest::addColumn("val2"); + QTest::addColumn("expectedDistance"); + + // exponent: 8 bits + // mantissa: 23 bits + const quint32 number_of_denormals = (1 << 23) - 1; // Set to 0 if denormals are not included + + quint32 _0_to_1 = quint32((1 << 23) * 126 + 1 + number_of_denormals); // We need +1 to include the 0 + quint32 _1_to_2 = quint32(1 << 23); + + // We don't need +1 because FLT_MAX has all bits set in the mantissa. (Thus mantissa + // have not wrapped back to 0, which would be the case for 1 in _0_to_1 + quint32 _0_to_FLT_MAX = quint32((1 << 23) * 254) + number_of_denormals; + + quint32 _0_to_FLT_MIN = 1 + number_of_denormals; + QTest::newRow("[0,FLT_MIN]") << 0.F << FLT_MIN << _0_to_FLT_MIN; + QTest::newRow("[0,FLT_MAX]") << 0.F << FLT_MAX << _0_to_FLT_MAX; + QTest::newRow("[1,1.5]") << 1.0F << 1.5F << quint32(1 << 22); + QTest::newRow("[0,1]") << 0.F << 1.0F << _0_to_1; + QTest::newRow("[0.5,1]") << 0.5F << 1.0F << quint32(1 << 23); + QTest::newRow("[1,2]") << 1.F << 2.0F << _1_to_2; + QTest::newRow("[-1,+1]") << -1.F << +1.0F << 2 * _0_to_1; + QTest::newRow("[-1,0]") << -1.F << 0.0F << _0_to_1; + QTest::newRow("[-1,FLT_MAX]") << -1.F << FLT_MAX << _0_to_1 + _0_to_FLT_MAX; + QTest::newRow("[-2,-1") << -2.F << -1.F << _1_to_2; + QTest::newRow("[-1,-2") << -1.F << -2.F << _1_to_2; + QTest::newRow("[FLT_MIN,FLT_MAX]") << FLT_MIN << FLT_MAX << _0_to_FLT_MAX - _0_to_FLT_MIN; + QTest::newRow("[-FLT_MAX,FLT_MAX]") << -FLT_MAX << FLT_MAX << (2*_0_to_FLT_MAX); + float denormal = FLT_MIN; + denormal/=2.0F; + QTest::newRow("denormal") << 0.F << denormal << _0_to_FLT_MIN/2; +} + +void tst_QNumeric::floatDistance() +{ + QFETCH(float, val1); + QFETCH(float, val2); + QFETCH(quint32, expectedDistance); + QCOMPARE(qFloatDistance(val1, val2), expectedDistance); +} + +void tst_QNumeric::floatDistance_double_data() +{ + QTest::addColumn("val1"); + QTest::addColumn("val2"); + QTest::addColumn("expectedDistance"); + + // exponent: 11 bits + // mantissa: 52 bits + const quint64 number_of_denormals = (Q_UINT64_C(1) << 52) - 1; // Set to 0 if denormals are not included + + quint64 _0_to_1 = (Q_UINT64_C(1) << 52) * ((1 << (11-1)) - 2) + 1 + number_of_denormals; // We need +1 to include the 0 + quint64 _1_to_2 = Q_UINT64_C(1) << 52; + + // We don't need +1 because DBL_MAX has all bits set in the mantissa. (Thus mantissa + // have not wrapped back to 0, which would be the case for 1 in _0_to_1 + quint64 _0_to_DBL_MAX = quint64((Q_UINT64_C(1) << 52) * ((1 << 11) - 2)) + number_of_denormals; + + quint64 _0_to_DBL_MIN = 1 + number_of_denormals; + QTest::newRow("[0,DBL_MIN]") << 0.0 << DBL_MIN << _0_to_DBL_MIN; + QTest::newRow("[0,DBL_MAX]") << 0.0 << DBL_MAX << _0_to_DBL_MAX; + QTest::newRow("[1,1.5]") << 1.0 << 1.5 << (Q_UINT64_C(1) << 51); + QTest::newRow("[0,1]") << 0.0 << 1.0 << _0_to_1; + QTest::newRow("[0.5,1]") << 0.5 << 1.0 << (Q_UINT64_C(1) << 52); + QTest::newRow("[1,2]") << 1.0 << 2.0 << _1_to_2; + QTest::newRow("[-1,+1]") << -1.0 << +1.0 << 2 * _0_to_1; + QTest::newRow("[-1,0]") << -1.0 << 0.0 << _0_to_1; + QTest::newRow("[-1,DBL_MAX]") << -1.0 << DBL_MAX << _0_to_1 + _0_to_DBL_MAX; + QTest::newRow("[-2,-1") << -2.0 << -1.0 << _1_to_2; + QTest::newRow("[-1,-2") << -1.0 << -2.0 << _1_to_2; + QTest::newRow("[DBL_MIN,DBL_MAX]") << DBL_MIN << DBL_MAX << _0_to_DBL_MAX - _0_to_DBL_MIN; + QTest::newRow("[-DBL_MAX,DBL_MAX]") << -DBL_MAX << DBL_MAX << (2*_0_to_DBL_MAX); + double denormal = DBL_MIN; + denormal/=2.0; + QTest::newRow("denormal") << 0.0 << denormal << _0_to_DBL_MIN/2; +} + +void tst_QNumeric::floatDistance_double() +{ + QFETCH(double, val1); + QFETCH(double, val2); + QFETCH(quint64, expectedDistance); + QCOMPARE(qFloatDistance(val1, val2), expectedDistance); +} + QTEST_APPLESS_MAIN(tst_QNumeric) #include "tst_qnumeric.moc" -- cgit v1.2.3 From c6af0a504f2acced8147a1dd78bc249da49d3d99 Mon Sep 17 00:00:00 2001 From: Andrew Knight Date: Sun, 1 Sep 2013 19:05:46 +0300 Subject: WinRT: Fix various test compilations - Remove irrelevant test subdirs via .pro files - Follow WinCE codepaths where applicable - Replace unsupported Win32 APIs with WinRT equivalents This does not aim to fix any failures in the tests themselves; it only makes them compile. Change-Id: Ia82bc0cc402891f8f6238d4c261ee9152b51be80 Reviewed-by: Maurice Kalinowski Reviewed-by: Friedemann Kleint --- tests/auto/corelib/io/io.pro | 6 +++++ tests/auto/corelib/io/qfile/test/test.pro | 2 +- tests/auto/corelib/io/qfile/tst_qfile.cpp | 20 ++++++++++++----- tests/auto/corelib/io/qfileinfo/qfileinfo.pro | 2 +- tests/auto/corelib/io/qfileinfo/tst_qfileinfo.cpp | 16 ++++++------- .../qfilesystemwatcher/tst_qfilesystemwatcher.cpp | 6 +++++ tests/auto/corelib/io/qsettings/tst_qsettings.cpp | 8 +++---- .../corelib/io/qtemporarydir/tst_qtemporarydir.cpp | 4 ++-- .../io/qtemporaryfile/tst_qtemporaryfile.cpp | 4 ++-- tests/auto/corelib/kernel/kernel.pro | 2 +- .../auto/corelib/kernel/qeventloop/qeventloop.pro | 2 +- tests/auto/corelib/kernel/qmetatype/qmetatype.pro | 4 ++-- .../thread/qreadwritelock/tst_qreadwritelock.cpp | 2 ++ .../thread/qthreadstorage/tst_qthreadstorage.cpp | 2 +- .../qcommandlineparser/tst_qcommandlineparser.cpp | 4 ++++ .../auto/corelib/tools/qdatetime/tst_qdatetime.cpp | 5 ++++- tests/auto/corelib/tools/qlocale/tst_qlocale.cpp | 6 ++--- tests/auto/gui/image/qpixmap/qpixmap.pro | 2 +- tests/auto/gui/image/qpixmap/tst_qpixmap.cpp | 6 ++--- .../kernel/qhostaddress/tst_qhostaddress.cpp | 3 +++ .../network/kernel/qhostinfo/tst_qhostinfo.cpp | 2 +- tests/auto/sql/kernel/qsqldatabase/tst_databases.h | 7 ++++-- .../auto/testlib/selftests/crashes/tst_crashes.cpp | 2 +- .../qfilesystemmodel/tst_qfilesystemmodel.cpp | 7 ++++++ .../graphicsview/qgraphicsitem/qgraphicsitem.pro | 2 +- .../qgraphicsitem/tst_qgraphicsitem.cpp | 2 +- .../graphicsview/qgraphicsscene/qgraphicsscene.pro | 2 +- .../qgraphicsscene/tst_qgraphicsscene.cpp | 2 +- .../itemviews/qitemdelegate/qitemdelegate.pro | 2 +- .../itemviews/qitemdelegate/tst_qitemdelegate.cpp | 2 +- .../auto/widgets/itemviews/qlistview/qlistview.pro | 2 +- .../widgets/itemviews/qlistview/tst_qlistview.cpp | 4 ++-- .../kernel/qapplication/tst_qapplication.cpp | 2 +- tests/auto/widgets/kernel/qwidget/qwidget.pro | 2 +- tests/auto/widgets/kernel/qwidget/tst_qwidget.cpp | 24 +++++++++++--------- .../widgets/qdatetimeedit/tst_qdatetimeedit.cpp | 2 +- .../auto/widgets/widgets/qtabwidget/qtabwidget.pro | 2 +- .../widgets/widgets/qtabwidget/tst_qtabwidget.cpp | 2 +- tests/baselineserver/shared/baselineprotocol.cpp | 6 +++++ .../corelib/io/qdir/10000/bench_qdir_10000.cpp | 5 +++++ tests/benchmarks/corelib/io/qdiriterator/main.cpp | 5 +++++ .../io/qdiriterator/qfilesystemiterator.cpp | 5 +++++ tests/benchmarks/corelib/io/qfile/main.cpp | 26 ++++++++++++++++++++++ tests/benchmarks/corelib/io/qfileinfo/main.cpp | 4 ++-- .../corelib/thread/qmutex/tst_qmutex.cpp | 4 ++++ tests/shared/filesystem.h | 2 +- 46 files changed, 165 insertions(+), 68 deletions(-) (limited to 'tests') diff --git a/tests/auto/corelib/io/io.pro b/tests/auto/corelib/io/io.pro index 41d7e7e08b..d70737a53f 100644 --- a/tests/auto/corelib/io/io.pro +++ b/tests/auto/corelib/io/io.pro @@ -52,3 +52,9 @@ SUBDIRS=\ win32:!contains(QT_CONFIG, private_tests): SUBDIRS -= \ qfilesystementry + +winrt: SUBDIRS -= \ + qprocess \ + qprocess-noapplication \ + qprocessenvironment \ + qwinoverlappedionotifier diff --git a/tests/auto/corelib/io/qfile/test/test.pro b/tests/auto/corelib/io/qfile/test/test.pro index bc6922b4e9..e282bd091c 100644 --- a/tests/auto/corelib/io/qfile/test/test.pro +++ b/tests/auto/corelib/io/qfile/test/test.pro @@ -13,5 +13,5 @@ TESTDATA += ../dosfile.txt ../noendofline.txt ../testfile.txt \ ../Makefile ../forCopying.txt ../forRenaming.txt \ ../resources/file1.ext1 -win32: LIBS+=-lole32 -luuid +win32:!winrt: LIBS+=-lole32 -luuid DEFINES += QT_DISABLE_DEPRECATED_BEFORE=0 diff --git a/tests/auto/corelib/io/qfile/tst_qfile.cpp b/tests/auto/corelib/io/qfile/tst_qfile.cpp index 2b029203e9..78cb27ee30 100644 --- a/tests/auto/corelib/io/qfile/tst_qfile.cpp +++ b/tests/auto/corelib/io/qfile/tst_qfile.cpp @@ -527,7 +527,7 @@ void tst_QFile::open_data() << false << QFile::OpenError; QTest::newRow("noreadfile") << QString::fromLatin1(noReadFile) << int(QIODevice::ReadOnly) << false << QFile::OpenError; -#if defined(Q_OS_WIN) && !defined(Q_OS_WINCE) +#if defined(Q_OS_WIN) && !defined(Q_OS_WINCE) && !defined(Q_OS_WINRT) //opening devices requires administrative privileges (and elevation). HANDLE hTest = CreateFile(_T("\\\\.\\PhysicalDrive0"), GENERIC_READ, FILE_SHARE_READ | FILE_SHARE_WRITE, NULL, OPEN_EXISTING, 0, NULL); if (hTest != INVALID_HANDLE_VALUE) { @@ -1057,7 +1057,7 @@ void tst_QFile::ungetChar() QCOMPARE(buf[2], '4'); } -#if defined(Q_OS_WIN) && !defined(Q_OS_WINCE) +#if defined(Q_OS_WIN) && !defined(Q_OS_WINCE) && !defined(Q_OS_WINRT) QString driveLetters() { wchar_t volumeName[MAX_PATH]; @@ -1094,7 +1094,7 @@ void tst_QFile::invalidFile_data() #if !defined(Q_OS_WIN) QTest::newRow( "x11" ) << QString( "qwe//" ); #else -#if !defined(Q_OS_WINCE) +#if !defined(Q_OS_WINCE) && !defined(Q_OS_WINRT) QTest::newRow( "colon2" ) << invalidDriveLetter() + QString::fromLatin1(":ail:invalid"); #endif QTest::newRow( "colon3" ) << QString( ":failinvalid" ); @@ -1338,10 +1338,12 @@ void tst_QFile::copyFallback() #ifdef Q_OS_WIN #include +#ifndef Q_OS_WINPHONE #include #endif +#endif -#if defined(Q_OS_WIN) && !defined(Q_OS_WINCE) +#if defined(Q_OS_WIN) && !defined(Q_OS_WINCE) && !defined(Q_OS_WINRT) static QString getWorkingDirectoryForLink(const QString &linkFileName) { bool neededCoInit = false; @@ -1400,7 +1402,7 @@ void tst_QFile::link() QCOMPARE(QFile::symLinkTarget("myLink.lnk"), referenceTarget); -#if defined(Q_OS_WIN) && !defined(Q_OS_WINCE) +#if defined(Q_OS_WIN) && !defined(Q_OS_WINCE) && !defined(Q_OS_WINRT) QString wd = getWorkingDirectoryForLink(info2.absoluteFilePath()); QCOMPARE(QDir::fromNativeSeparators(wd), QDir::cleanPath(info1.absolutePath())); #endif @@ -2690,8 +2692,12 @@ void tst_QFile::nativeHandleLeaks() } #ifdef Q_OS_WIN +# ifndef Q_OS_WINRT handle1 = ::CreateFileA("qt_file.tmp", GENERIC_READ, 0, NULL, OPEN_ALWAYS, FILE_ATTRIBUTE_NORMAL, NULL); +# else + handle1 = ::CreateFile2(L"qt_file.tmp", GENERIC_READ, 0, OPEN_ALWAYS, NULL); +# endif QVERIFY( INVALID_HANDLE_VALUE != handle1 ); QVERIFY( ::CloseHandle(handle1) ); #endif @@ -2705,8 +2711,12 @@ void tst_QFile::nativeHandleLeaks() } #ifdef Q_OS_WIN +# ifndef Q_OS_WINRT handle2 = ::CreateFileA("qt_file.tmp", GENERIC_READ, 0, NULL, OPEN_ALWAYS, FILE_ATTRIBUTE_NORMAL, NULL); +# else + handle2 = ::CreateFile2(L"qt_file.tmp", GENERIC_READ, 0, OPEN_ALWAYS, NULL); +# endif QVERIFY( INVALID_HANDLE_VALUE != handle2 ); QVERIFY( ::CloseHandle(handle2) ); #endif diff --git a/tests/auto/corelib/io/qfileinfo/qfileinfo.pro b/tests/auto/corelib/io/qfileinfo/qfileinfo.pro index c4b37a8847..64d289bc3c 100644 --- a/tests/auto/corelib/io/qfileinfo/qfileinfo.pro +++ b/tests/auto/corelib/io/qfileinfo/qfileinfo.pro @@ -6,5 +6,5 @@ RESOURCES += qfileinfo.qrc TESTDATA += qfileinfo.qrc qfileinfo.pro tst_qfileinfo.cpp resources/file1 resources/file1.ext1 resources/file1.ext1.ext2 -win32*:!wince*:LIBS += -ladvapi32 -lnetapi32 +win32*:!wince*:!winrt:LIBS += -ladvapi32 -lnetapi32 DEFINES += QT_DISABLE_DEPRECATED_BEFORE=0 diff --git a/tests/auto/corelib/io/qfileinfo/tst_qfileinfo.cpp b/tests/auto/corelib/io/qfileinfo/tst_qfileinfo.cpp index d2171cc64a..74667a951f 100644 --- a/tests/auto/corelib/io/qfileinfo/tst_qfileinfo.cpp +++ b/tests/auto/corelib/io/qfileinfo/tst_qfileinfo.cpp @@ -62,7 +62,7 @@ #ifdef Q_OS_WIN #include #include -#if !defined(Q_OS_WINCE) +#if !defined(Q_OS_WINCE) && !defined(Q_OS_WINRT) #include #endif #endif @@ -176,7 +176,7 @@ private slots: void refresh(); -#if defined(Q_OS_WIN) && !defined(Q_OS_WINCE) +#if defined(Q_OS_WIN) && !defined(Q_OS_WINCE) && !defined(Q_OS_WINRT) void ntfsJunctionPointsAndSymlinks_data(); void ntfsJunctionPointsAndSymlinks(); void brokenShortcut(); @@ -193,7 +193,7 @@ private slots: void detachingOperations(); -#if !defined(Q_OS_WINCE) +#if !defined(Q_OS_WINCE) && !defined(Q_OS_WINRT) void owner(); #endif void group(); @@ -1058,7 +1058,7 @@ void tst_QFileInfo::fileTimes() //In Vista the last-access timestamp is not updated when the file is accessed/touched (by default). //To enable this the HKLM\SYSTEM\CurrentControlSet\Control\FileSystem\NtfsDisableLastAccessUpdate //is set to 0, in the test machine. -#ifdef Q_OS_WIN +#if defined(Q_OS_WIN) && !defined(Q_OS_WINRT) HKEY key; if (ERROR_SUCCESS == RegOpenKeyEx(HKEY_LOCAL_MACHINE, L"SYSTEM\\CurrentControlSet\\Control\\FileSystem", 0, KEY_READ, &key)) { @@ -1085,8 +1085,8 @@ void tst_QFileInfo::fileTimes() void tst_QFileInfo::fileTimes_oldFile() { - // This is not supported on WinCE -#if defined(Q_OS_WIN) && !defined(Q_OS_WINCE) + // This is not supported on WinCE or WinRT +#if defined(Q_OS_WIN) && !defined(Q_OS_WINCE) && !defined(Q_OS_WINRT) // All files are opened in share mode (both read and write). DWORD shareMode = FILE_SHARE_READ | FILE_SHARE_WRITE; @@ -1329,7 +1329,7 @@ void tst_QFileInfo::refresh() QCOMPARE(info2.size(), info.size()); } -#if defined(Q_OS_WIN) && !defined(Q_OS_WINCE) +#if defined(Q_OS_WIN) && !defined(Q_OS_WINCE) && !defined(Q_OS_WINRT) void tst_QFileInfo::ntfsJunctionPointsAndSymlinks_data() { QTest::addColumn("path"); @@ -1680,7 +1680,7 @@ void tst_QFileInfo::detachingOperations() QVERIFY(!info1.caching()); } -#if !defined(Q_OS_WINCE) +#if !defined(Q_OS_WINCE) && !defined(Q_OS_WINRT) #if defined (Q_OS_WIN) BOOL IsUserAdmin() { diff --git a/tests/auto/corelib/io/qfilesystemwatcher/tst_qfilesystemwatcher.cpp b/tests/auto/corelib/io/qfilesystemwatcher/tst_qfilesystemwatcher.cpp index 20ef7b5a76..b5115972d7 100644 --- a/tests/auto/corelib/io/qfilesystemwatcher/tst_qfilesystemwatcher.cpp +++ b/tests/auto/corelib/io/qfilesystemwatcher/tst_qfilesystemwatcher.cpp @@ -55,6 +55,7 @@ class tst_QFileSystemWatcher : public QObject public: tst_QFileSystemWatcher(); +#ifndef QT_NO_FILESYSTEMWATCHER private slots: void basicTest_data(); void basicTest(); @@ -83,16 +84,20 @@ private slots: private: QString m_tempDirPattern; +#endif // QT_NO_FILESYSTEMWATCHER }; tst_QFileSystemWatcher::tst_QFileSystemWatcher() { +#ifndef QT_NO_FILESYSTEMWATCHER m_tempDirPattern = QDir::tempPath(); if (!m_tempDirPattern.endsWith(QLatin1Char('/'))) m_tempDirPattern += QLatin1Char('/'); m_tempDirPattern += QStringLiteral("tst_qfilesystemwatcherXXXXXX"); +#endif // QT_NO_FILESYSTEMWATCHER } +#ifndef QT_NO_FILESYSTEMWATCHER void tst_QFileSystemWatcher::basicTest_data() { QTest::addColumn("backend"); @@ -676,6 +681,7 @@ void tst_QFileSystemWatcher::signalsEmittedAfterFileMoved() QTRY_COMPARE(changedSpy.count(), 10); } +#endif // QT_NO_FILESYSTEMWATCHER QTEST_MAIN(tst_QFileSystemWatcher) #include "tst_qfilesystemwatcher.moc" diff --git a/tests/auto/corelib/io/qsettings/tst_qsettings.cpp b/tests/auto/corelib/io/qsettings/tst_qsettings.cpp index 290d4ac240..186e7b1a3f 100644 --- a/tests/auto/corelib/io/qsettings/tst_qsettings.cpp +++ b/tests/auto/corelib/io/qsettings/tst_qsettings.cpp @@ -118,7 +118,7 @@ private slots: #if !defined(Q_OS_WIN) && !defined(QT_QSETTINGS_ALWAYS_CASE_SENSITIVE_AND_FORGET_ORIGINAL_KEY_ORDER) void dontReorderIniKeysNeedlessly(); #endif -#if defined(Q_OS_WIN) +#if defined(Q_OS_WIN) && !defined(Q_OS_WINRT) void consistentRegistryStorage(); #endif @@ -273,7 +273,7 @@ void tst_QSettings::init() QSettings::setSystemIniPath(settingsPath("__system__")); QSettings::setUserIniPath(settingsPath("__user__")); -#if defined(Q_OS_WIN) +#if defined(Q_OS_WIN) && !defined(Q_OS_WINRT) QSettings("HKEY_CURRENT_USER\\Software\\software.org", QSettings::NativeFormat).clear(); QSettings("HKEY_LOCAL_MACHINE\\Software\\software.org", QSettings::NativeFormat).clear(); QSettings("HKEY_CURRENT_USER\\Software\\other.software.org", QSettings::NativeFormat).clear(); @@ -1501,7 +1501,7 @@ void tst_QSettings::sync() // Now "some other app" will change other.software.org.ini QString userConfDir = settingsPath("__user__") + QDir::separator(); -#if !defined(Q_OS_WINCE) +#if !defined(Q_OS_WINCE) && !defined(Q_OS_WINRT) unlink((userConfDir + "other.software.org.ini").toLatin1()); rename((userConfDir + "software.org.ini").toLatin1(), (userConfDir + "other.software.org.ini").toLatin1()); @@ -3189,7 +3189,7 @@ void tst_QSettings::recursionBug() } } -#if defined(Q_OS_WIN) +#if defined(Q_OS_WIN) && !defined(Q_OS_WINRT) static DWORD readKeyType(HKEY handle, const QString &rSubKey) { diff --git a/tests/auto/corelib/io/qtemporarydir/tst_qtemporarydir.cpp b/tests/auto/corelib/io/qtemporarydir/tst_qtemporarydir.cpp index 713d0c5c17..a6cc083d9c 100644 --- a/tests/auto/corelib/io/qtemporarydir/tst_qtemporarydir.cpp +++ b/tests/auto/corelib/io/qtemporarydir/tst_qtemporarydir.cpp @@ -257,7 +257,7 @@ void tst_QTemporaryDir::nonWritableCurrentDir() void tst_QTemporaryDir::openOnRootDrives() { -#if defined(Q_OS_WIN) && !defined(Q_OS_WINCE) +#if defined(Q_OS_WIN) && !defined(Q_OS_WINCE) && !defined(Q_OS_WINRT) unsigned int lastErrorMode = SetErrorMode(SEM_FAILCRITICALERRORS); #endif // If it's possible to create a file in the root directory, it @@ -271,7 +271,7 @@ void tst_QTemporaryDir::openOnRootDrives() QVERIFY(dir.isValid()); } } -#if defined(Q_OS_WIN) && !defined(Q_OS_WINCE) +#if defined(Q_OS_WIN) && !defined(Q_OS_WINCE) && !defined(Q_OS_WINRT) SetErrorMode(lastErrorMode); #endif } diff --git a/tests/auto/corelib/io/qtemporaryfile/tst_qtemporaryfile.cpp b/tests/auto/corelib/io/qtemporaryfile/tst_qtemporaryfile.cpp index 6eb6f83d2a..5ad798ae1f 100644 --- a/tests/auto/corelib/io/qtemporaryfile/tst_qtemporaryfile.cpp +++ b/tests/auto/corelib/io/qtemporaryfile/tst_qtemporaryfile.cpp @@ -371,7 +371,7 @@ void tst_QTemporaryFile::resize() void tst_QTemporaryFile::openOnRootDrives() { -#if defined(Q_OS_WIN) && !defined(Q_OS_WINCE) +#if defined(Q_OS_WIN) && !defined(Q_OS_WINCE) && !defined(Q_OS_WINRT) unsigned int lastErrorMode = SetErrorMode(SEM_FAILCRITICALERRORS); #endif // If it's possible to create a file in the root directory, it @@ -385,7 +385,7 @@ void tst_QTemporaryFile::openOnRootDrives() QVERIFY(file.open()); } } -#if defined(Q_OS_WIN) && !defined(Q_OS_WINCE) +#if defined(Q_OS_WIN) && !defined(Q_OS_WINCE) && !defined(Q_OS_WINRT) SetErrorMode(lastErrorMode); #endif } diff --git a/tests/auto/corelib/kernel/kernel.pro b/tests/auto/corelib/kernel/kernel.pro index a283f5343d..2f3c02332d 100644 --- a/tests/auto/corelib/kernel/kernel.pro +++ b/tests/auto/corelib/kernel/kernel.pro @@ -31,6 +31,6 @@ SUBDIRS=\ qsharedmemory # This test is only applicable on Windows -!win32*:SUBDIRS -= qwineventnotifier +!win32*|winrt: SUBDIRS -= qwineventnotifier android|qnx: SUBDIRS -= qsharedmemory qsystemsemaphore diff --git a/tests/auto/corelib/kernel/qeventloop/qeventloop.pro b/tests/auto/corelib/kernel/qeventloop/qeventloop.pro index e5bcc31e6a..5593aa2430 100644 --- a/tests/auto/corelib/kernel/qeventloop/qeventloop.pro +++ b/tests/auto/corelib/kernel/qeventloop/qeventloop.pro @@ -4,7 +4,7 @@ TARGET = tst_qeventloop QT = core network testlib core-private SOURCES = $$PWD/tst_qeventloop.cpp -win32:!wince*:LIBS += -luser32 +win32:!wince*:!winrt:LIBS += -luser32 DEFINES += QT_DISABLE_DEPRECATED_BEFORE=0 contains(QT_CONFIG, glib): DEFINES += HAVE_GLIB diff --git a/tests/auto/corelib/kernel/qmetatype/qmetatype.pro b/tests/auto/corelib/kernel/qmetatype/qmetatype.pro index 23a8e6d23a..d19ec23760 100644 --- a/tests/auto/corelib/kernel/qmetatype/qmetatype.pro +++ b/tests/auto/corelib/kernel/qmetatype/qmetatype.pro @@ -6,11 +6,11 @@ SOURCES = tst_qmetatype.cpp TESTDATA=./typeFlags.bin DEFINES += QT_DISABLE_DEPRECATED_BEFORE=0 -win32-msvc*|wince { +win32-msvc*|wince|winrt { # Prevents "fatal error C1128: number of sections exceeded object file format limit". QMAKE_CXXFLAGS += /bigobj # Reduce compile time - win32-msvc2012|wince { + win32-msvc2012|wince|winrt { QMAKE_CXXFLAGS_RELEASE -= -O2 QMAKE_CFLAGS_RELEASE -= -O2 } diff --git a/tests/auto/corelib/thread/qreadwritelock/tst_qreadwritelock.cpp b/tests/auto/corelib/thread/qreadwritelock/tst_qreadwritelock.cpp index 7d041e69cb..0d51f69559 100644 --- a/tests/auto/corelib/thread/qreadwritelock/tst_qreadwritelock.cpp +++ b/tests/auto/corelib/thread/qreadwritelock/tst_qreadwritelock.cpp @@ -52,6 +52,8 @@ #if defined(Q_OS_WIN32) || defined(Q_OS_WINCE) #include #define sleep(X) Sleep(X) +#elif defined(Q_OS_WINRT) +#define sleep(X) WaitForSingleObjectEx(GetCurrentThread(), X, FALSE); #endif //on solaris, threads that loop on the release bool variable diff --git a/tests/auto/corelib/thread/qthreadstorage/tst_qthreadstorage.cpp b/tests/auto/corelib/thread/qthreadstorage/tst_qthreadstorage.cpp index 2072034f5f..c96de29b98 100644 --- a/tests/auto/corelib/thread/qthreadstorage/tst_qthreadstorage.cpp +++ b/tests/auto/corelib/thread/qthreadstorage/tst_qthreadstorage.cpp @@ -232,7 +232,7 @@ void tst_QThreadStorage::adoptedThreads() const int state = pthread_create(&thread, 0, testAdoptedThreadStorageUnix, &pointers); QCOMPARE(state, 0); pthread_join(thread, 0); -#elif defined Q_OS_WIN +#elif defined Q_OS_WIN && !defined(Q_OS_WINRT) HANDLE thread; #if defined(Q_OS_WINCE) thread = CreateThread(NULL, 0, (LPTHREAD_START_ROUTINE)testAdoptedThreadStorageWin, &pointers, 0, NULL); diff --git a/tests/auto/corelib/tools/qcommandlineparser/tst_qcommandlineparser.cpp b/tests/auto/corelib/tools/qcommandlineparser/tst_qcommandlineparser.cpp index d8965dee5d..1ee6cacd97 100644 --- a/tests/auto/corelib/tools/qcommandlineparser/tst_qcommandlineparser.cpp +++ b/tests/auto/corelib/tools/qcommandlineparser/tst_qcommandlineparser.cpp @@ -546,6 +546,9 @@ void tst_QCommandLineParser::testHelpOption() void tst_QCommandLineParser::testQuoteEscaping() { +#ifdef QT_NO_PROCESS + QSKIP("This test requires QProcess support"); +#else QCoreApplication app(empty_argc, empty_argv); QProcess process; process.start("testhelper/qcommandlineparser_test_helper", QStringList() << @@ -561,6 +564,7 @@ void tst_QCommandLineParser::testQuoteEscaping() QVERIFY2(output.contains("KEY2=\\\"VALUE2\\\""), qPrintable(output)); QVERIFY2(output.contains("QTBUG-15379=C:\\path\\'file.ext"), qPrintable(output)); QVERIFY2(output.contains("QTBUG-30628=C:\\temp\\'file'.ext"), qPrintable(output)); +#endif // !QT_NO_PROCESS } QTEST_APPLESS_MAIN(tst_QCommandLineParser) diff --git a/tests/auto/corelib/tools/qdatetime/tst_qdatetime.cpp b/tests/auto/corelib/tools/qdatetime/tst_qdatetime.cpp index a282fcabd3..039f5cbc44 100644 --- a/tests/auto/corelib/tools/qdatetime/tst_qdatetime.cpp +++ b/tests/auto/corelib/tools/qdatetime/tst_qdatetime.cpp @@ -49,6 +49,9 @@ #ifdef Q_OS_WIN # include +# if defined(Q_OS_WINRT) +# define tzset() +# endif #endif class tst_QDateTime : public QObject @@ -173,7 +176,7 @@ void tst_QDateTime::init() { #if defined(Q_OS_WINCE) SetUserDefaultLCID(MAKELCID(MAKELANGID(LANG_ENGLISH, SUBLANG_ENGLISH_US), SORT_DEFAULT)); -#elif defined(Q_OS_WIN) +#elif defined(Q_OS_WIN32) SetThreadLocale(MAKELCID(MAKELANGID(LANG_ENGLISH, SUBLANG_ENGLISH_US), SORT_DEFAULT)); #endif } diff --git a/tests/auto/corelib/tools/qlocale/tst_qlocale.cpp b/tests/auto/corelib/tools/qlocale/tst_qlocale.cpp index d6dea05755..f11e632b2e 100644 --- a/tests/auto/corelib/tools/qlocale/tst_qlocale.cpp +++ b/tests/auto/corelib/tools/qlocale/tst_qlocale.cpp @@ -133,7 +133,7 @@ public: private slots: void initTestCase(); void cleanupTestCase(); -#ifdef Q_OS_WIN +#if defined(Q_OS_WIN) && !defined(Q_OS_WINRT) void windowsDefaultLocale(); #endif #ifdef Q_OS_MAC @@ -1472,7 +1472,7 @@ void tst_QLocale::macDefaultLocale() } #endif // Q_OS_MAC -#ifdef Q_OS_WIN +#if defined(Q_OS_WIN) && !defined(Q_OS_WINRT) #include static QString getWinLocaleInfo(LCTYPE type) @@ -1526,7 +1526,7 @@ public: #endif // Q_OS_WIN -#ifdef Q_OS_WIN +#if defined(Q_OS_WIN) && !defined(Q_OS_WINRT) void tst_QLocale::windowsDefaultLocale() { RestoreLocaleHelper systemLocale; diff --git a/tests/auto/gui/image/qpixmap/qpixmap.pro b/tests/auto/gui/image/qpixmap/qpixmap.pro index bdd0c15788..33c301a500 100644 --- a/tests/auto/gui/image/qpixmap/qpixmap.pro +++ b/tests/auto/gui/image/qpixmap/qpixmap.pro @@ -5,7 +5,7 @@ QT += core-private gui-private testlib qtHaveModule(widgets): QT += widgets widgets-private SOURCES += tst_qpixmap.cpp -!wince* { +!wince*:!winrt { win32:LIBS += -lgdi32 -luser32 } diff --git a/tests/auto/gui/image/qpixmap/tst_qpixmap.cpp b/tests/auto/gui/image/qpixmap/tst_qpixmap.cpp index cb5d836291..79dc3f311a 100644 --- a/tests/auto/gui/image/qpixmap/tst_qpixmap.cpp +++ b/tests/auto/gui/image/qpixmap/tst_qpixmap.cpp @@ -116,7 +116,7 @@ private slots: void convertFromImageDetach(); void convertFromImageCacheKey(); -#if defined(Q_OS_WIN) +#if defined(Q_OS_WIN) && !defined(Q_OS_WINRT) void toWinHBITMAP_data(); void toWinHBITMAP(); void fromWinHBITMAP_data(); @@ -805,7 +805,7 @@ void tst_QPixmap::convertFromImageCacheKey() QCOMPARE(copy.cacheKey(), pix.cacheKey()); } -#if defined(Q_OS_WIN) +#if defined(Q_OS_WIN) && !defined(Q_OS_WINRT) QT_BEGIN_NAMESPACE Q_GUI_EXPORT HBITMAP qt_createIconMask(const QBitmap &bitmap); @@ -1024,7 +1024,7 @@ void tst_QPixmap::fromWinHICON() #endif // Q_OS_WINCE } -#endif // Q_OS_WIN +#endif // Q_OS_WIN && !Q_OS_WINRT void tst_QPixmap::onlyNullPixmapsOutsideGuiThread() { diff --git a/tests/auto/network/kernel/qhostaddress/tst_qhostaddress.cpp b/tests/auto/network/kernel/qhostaddress/tst_qhostaddress.cpp index dd9202c748..acb921b34a 100644 --- a/tests/auto/network/kernel/qhostaddress/tst_qhostaddress.cpp +++ b/tests/auto/network/kernel/qhostaddress/tst_qhostaddress.cpp @@ -50,6 +50,9 @@ #include #ifdef Q_OS_WIN # include +# if defined(Q_OS_WINRT) +# include +# endif #endif class tst_QHostAddress : public QObject diff --git a/tests/auto/network/kernel/qhostinfo/tst_qhostinfo.cpp b/tests/auto/network/kernel/qhostinfo/tst_qhostinfo.cpp index e81c7f71db..e3156ceb3f 100644 --- a/tests/auto/network/kernel/qhostinfo/tst_qhostinfo.cpp +++ b/tests/auto/network/kernel/qhostinfo/tst_qhostinfo.cpp @@ -67,7 +67,7 @@ #include #include -#if defined(Q_OS_WIN32) || defined(Q_OS_WINCE) +#if defined(Q_OS_WIN) #include #else #include diff --git a/tests/auto/sql/kernel/qsqldatabase/tst_databases.h b/tests/auto/sql/kernel/qsqldatabase/tst_databases.h index f87493205f..69ecbcb019 100644 --- a/tests/auto/sql/kernel/qsqldatabase/tst_databases.h +++ b/tests/auto/sql/kernel/qsqldatabase/tst_databases.h @@ -55,11 +55,14 @@ #include #include -#if defined (Q_OS_WIN) || defined (Q_OS_WIN32) +#if defined(Q_OS_WIN) # include -# if defined (Q_OS_WINCE) +# if defined(Q_OS_WINCE) || defined(Q_OS_WINRT) # include # endif +# if defined(Q_OS_WINRT) && !defined(Q_OS_WINPHONE) +static inline int gethostname(char *name, int len) { qstrcpy(name, "localhost"); return 9; } +# endif #else #include #endif diff --git a/tests/auto/testlib/selftests/crashes/tst_crashes.cpp b/tests/auto/testlib/selftests/crashes/tst_crashes.cpp index 067c2a9f4f..3b73d87876 100644 --- a/tests/auto/testlib/selftests/crashes/tst_crashes.cpp +++ b/tests/auto/testlib/selftests/crashes/tst_crashes.cpp @@ -57,7 +57,7 @@ private slots: void tst_Crashes::crash() { -#if defined(Q_OS_WIN) && !defined(Q_OS_WINCE) +#if defined(Q_OS_WIN) && !defined(Q_OS_WINCE) && !defined(Q_OS_WINRT) //we avoid the error dialogbox to appear on windows SetErrorMode( SEM_NOGPFAULTERRORBOX | SEM_FAILCRITICALERRORS | SEM_NOOPENFILEERRORBOX); #endif diff --git a/tests/auto/widgets/dialogs/qfilesystemmodel/tst_qfilesystemmodel.cpp b/tests/auto/widgets/dialogs/qfilesystemmodel/tst_qfilesystemmodel.cpp index 0b9fb5c168..e24a1dfc96 100644 --- a/tests/auto/widgets/dialogs/qfilesystemmodel/tst_qfilesystemmodel.cpp +++ b/tests/auto/widgets/dialogs/qfilesystemmodel/tst_qfilesystemmodel.cpp @@ -416,7 +416,14 @@ bool tst_QFileSystemModel::createFiles(const QString &test_path, const QStringLi wchar_t nativeHiddenFile[MAX_PATH]; memset(nativeHiddenFile, 0, sizeof(nativeHiddenFile)); hiddenFile.toWCharArray(nativeHiddenFile); +#ifndef Q_OS_WINRT DWORD currentAttributes = ::GetFileAttributes(nativeHiddenFile); +#else // !Q_OS_WINRT + WIN32_FILE_ATTRIBUTE_DATA attributeData; + if (!::GetFileAttributesEx(nativeHiddenFile, GetFileExInfoStandard, &attributeData)) + attributeData.dwFileAttributes = 0xFFFFFFFF; + DWORD currentAttributes = attributeData.dwFileAttributes; +#endif // Q_OS_WINRT if (currentAttributes == 0xFFFFFFFF) { qErrnoWarning("failed to get file attributes: %s", qPrintable(hiddenFile)); return false; diff --git a/tests/auto/widgets/graphicsview/qgraphicsitem/qgraphicsitem.pro b/tests/auto/widgets/graphicsview/qgraphicsitem/qgraphicsitem.pro index 0c3b46c5d5..527f62b22d 100644 --- a/tests/auto/widgets/graphicsview/qgraphicsitem/qgraphicsitem.pro +++ b/tests/auto/widgets/graphicsview/qgraphicsitem/qgraphicsitem.pro @@ -5,5 +5,5 @@ QT += core-private gui-private SOURCES += tst_qgraphicsitem.cpp DEFINES += QT_NO_CAST_TO_ASCII -win32:!wince*: LIBS += -luser32 +win32:!wince*:!winrt: LIBS += -luser32 DEFINES += QT_DISABLE_DEPRECATED_BEFORE=0 diff --git a/tests/auto/widgets/graphicsview/qgraphicsitem/tst_qgraphicsitem.cpp b/tests/auto/widgets/graphicsview/qgraphicsitem/tst_qgraphicsitem.cpp index 2c03850181..70cfbc8856 100644 --- a/tests/auto/widgets/graphicsview/qgraphicsitem/tst_qgraphicsitem.cpp +++ b/tests/auto/widgets/graphicsview/qgraphicsitem/tst_qgraphicsitem.cpp @@ -71,7 +71,7 @@ Q_DECLARE_METATYPE(QPainterPath) #include "../../../qtest-config.h" -#if defined(Q_OS_WIN) && !defined(Q_OS_WINCE) +#if defined(Q_OS_WIN) && !defined(Q_OS_WINCE) && !defined(Q_OS_WINRT) #include #define Q_CHECK_PAINTEVENTS \ if (::SwitchDesktop(::GetThreadDesktop(::GetCurrentThreadId())) == 0) \ diff --git a/tests/auto/widgets/graphicsview/qgraphicsscene/qgraphicsscene.pro b/tests/auto/widgets/graphicsview/qgraphicsscene/qgraphicsscene.pro index 8d00931ef1..a6022e0d7d 100644 --- a/tests/auto/widgets/graphicsview/qgraphicsscene/qgraphicsscene.pro +++ b/tests/auto/widgets/graphicsview/qgraphicsscene/qgraphicsscene.pro @@ -4,7 +4,7 @@ QT += widgets widgets-private testlib QT += core-private gui-private SOURCES += tst_qgraphicsscene.cpp RESOURCES += images.qrc -win32:!wince*: LIBS += -luser32 +win32:!wince*:!winrt: LIBS += -luser32 !wince*:DEFINES += SRCDIR=\\\"$$PWD\\\" DEFINES += QT_NO_CAST_TO_ASCII diff --git a/tests/auto/widgets/graphicsview/qgraphicsscene/tst_qgraphicsscene.cpp b/tests/auto/widgets/graphicsview/qgraphicsscene/tst_qgraphicsscene.cpp index fe1df6c8f0..b3fba29f81 100644 --- a/tests/auto/widgets/graphicsview/qgraphicsscene/tst_qgraphicsscene.cpp +++ b/tests/auto/widgets/graphicsview/qgraphicsscene/tst_qgraphicsscene.cpp @@ -54,7 +54,7 @@ #include "../../../shared/platforminputcontext.h" #include -#if defined(Q_OS_WIN) && !defined(Q_OS_WINCE) +#if defined(Q_OS_WIN) && !defined(Q_OS_WINCE) && !defined(Q_OS_WINRT) #include #define Q_CHECK_PAINTEVENTS \ if (::SwitchDesktop(::GetThreadDesktop(::GetCurrentThreadId())) == 0) \ diff --git a/tests/auto/widgets/itemviews/qitemdelegate/qitemdelegate.pro b/tests/auto/widgets/itemviews/qitemdelegate/qitemdelegate.pro index cb935fd2fd..313cadd6a1 100644 --- a/tests/auto/widgets/itemviews/qitemdelegate/qitemdelegate.pro +++ b/tests/auto/widgets/itemviews/qitemdelegate/qitemdelegate.pro @@ -3,4 +3,4 @@ TARGET = tst_qitemdelegate QT += widgets testlib SOURCES += tst_qitemdelegate.cpp -win32:!wince*: LIBS += -luser32 +win32:!wince*:!winrt: LIBS += -luser32 diff --git a/tests/auto/widgets/itemviews/qitemdelegate/tst_qitemdelegate.cpp b/tests/auto/widgets/itemviews/qitemdelegate/tst_qitemdelegate.cpp index 439725b257..addb226101 100644 --- a/tests/auto/widgets/itemviews/qitemdelegate/tst_qitemdelegate.cpp +++ b/tests/auto/widgets/itemviews/qitemdelegate/tst_qitemdelegate.cpp @@ -66,7 +66,7 @@ Q_DECLARE_METATYPE(QAbstractItemDelegate::EndEditHint) -#if defined (Q_OS_WIN) && !defined(Q_OS_WINCE) +#if defined (Q_OS_WIN) && !defined(Q_OS_WINCE) && !defined(Q_OS_WINRT) #include #define Q_CHECK_PAINTEVENTS \ if (::SwitchDesktop(::GetThreadDesktop(::GetCurrentThreadId())) == 0) \ diff --git a/tests/auto/widgets/itemviews/qlistview/qlistview.pro b/tests/auto/widgets/itemviews/qlistview/qlistview.pro index 413304bdcf..1ea8beb8df 100644 --- a/tests/auto/widgets/itemviews/qlistview/qlistview.pro +++ b/tests/auto/widgets/itemviews/qlistview/qlistview.pro @@ -2,4 +2,4 @@ CONFIG += testcase TARGET = tst_qlistview QT += widgets gui-private widgets-private core-private testlib SOURCES += tst_qlistview.cpp -win32:!wince*: LIBS += -luser32 +win32:!wince*:!winrt: LIBS += -luser32 diff --git a/tests/auto/widgets/itemviews/qlistview/tst_qlistview.cpp b/tests/auto/widgets/itemviews/qlistview/tst_qlistview.cpp index 268276bd4a..9f5484983d 100644 --- a/tests/auto/widgets/itemviews/qlistview/tst_qlistview.cpp +++ b/tests/auto/widgets/itemviews/qlistview/tst_qlistview.cpp @@ -1484,7 +1484,7 @@ void tst_QListView::wordWrap() QTRY_COMPARE(lv.verticalScrollBar()->isVisible(), true); } -#if defined(Q_OS_WIN) && !defined(Q_OS_WINCE) +#if defined(Q_OS_WIN) && !defined(Q_OS_WINCE) && !defined(Q_OS_WINRT) class SetCurrentIndexAfterAppendRowCrashDialog : public QDialog { Q_OBJECT @@ -1525,7 +1525,7 @@ private: }; #endif -#if defined(Q_OS_WIN) && !defined(Q_OS_WINCE) && WINVER >= 0x0500 +#if defined(Q_OS_WIN) && !defined(Q_OS_WINCE) && !defined(Q_OS_WINRT) && WINVER >= 0x0500 // This test only makes sense on windows 2000 and higher. void tst_QListView::setCurrentIndexAfterAppendRowCrash() { diff --git a/tests/auto/widgets/kernel/qapplication/tst_qapplication.cpp b/tests/auto/widgets/kernel/qapplication/tst_qapplication.cpp index 8d75298673..fee8b6aee5 100644 --- a/tests/auto/widgets/kernel/qapplication/tst_qapplication.cpp +++ b/tests/auto/widgets/kernel/qapplication/tst_qapplication.cpp @@ -1891,7 +1891,7 @@ void tst_QApplication::windowsCommandLine_data() void tst_QApplication::windowsCommandLine() { -#if defined(Q_OS_WIN) && !defined(Q_OS_WINCE) +#if defined(Q_OS_WIN) && !defined(Q_OS_WINCE) && !defined(Q_OS_WINRT) QFETCH(QString, args); QFETCH(QString, expected); diff --git a/tests/auto/widgets/kernel/qwidget/qwidget.pro b/tests/auto/widgets/kernel/qwidget/qwidget.pro index a4fcde8a34..3eedfa1d3a 100644 --- a/tests/auto/widgets/kernel/qwidget/qwidget.pro +++ b/tests/auto/widgets/kernel/qwidget/qwidget.pro @@ -20,7 +20,7 @@ x11 { LIBS += $$QMAKE_LIBS_X11 } -!wince*:win32: LIBS += -luser32 -lgdi32 +!wince*:win32:!winrt: LIBS += -luser32 -lgdi32 mac:CONFIG+=insignificant_test # QTBUG-25300, QTBUG-23695 linux-*:system(". /etc/lsb-release && [ $DISTRIB_CODENAME = oneiric ]"):DEFINES+=UBUNTU_ONEIRIC # QTBUG-30566 \ No newline at end of file diff --git a/tests/auto/widgets/kernel/qwidget/tst_qwidget.cpp b/tests/auto/widgets/kernel/qwidget/tst_qwidget.cpp index 227f61b0a3..2da8df6116 100644 --- a/tests/auto/widgets/kernel/qwidget/tst_qwidget.cpp +++ b/tests/auto/widgets/kernel/qwidget/tst_qwidget.cpp @@ -116,11 +116,13 @@ static bool qt_wince_is_platform(const QString &platformString) { } static inline bool qt_wince_is_smartphone() { return qt_wince_is_platform(QString::fromLatin1("Smartphone")); } # endif // Q_OS_WINCE_WM -# else // Q_OS_WINCE +# elif !defined(Q_OS_WINRT) // Q_OS_WINCE # define Q_CHECK_PAINTEVENTS \ if (::SwitchDesktop(::GetThreadDesktop(::GetCurrentThreadId())) == 0) \ QSKIP("desktop is not visible, this test would fail"); -# endif // !Q_OS_WINCE +# else // !Q_OS_WINCE && !Q_OS_WINRT +# define Q_CHECK_PAINTEVENTS +# endif // Q_OS_WINRT #else // Q_OS_WIN # define Q_CHECK_PAINTEVENTS #endif // else Q_OS_WIN @@ -285,7 +287,7 @@ private slots: void subtractOpaqueSiblings(); #endif -#if defined (Q_OS_WIN) && !defined(Q_OS_WINCE) +#if defined (Q_OS_WIN) && !defined(Q_OS_WINCE) && !defined(Q_OS_WINRT) void setGeometry_win(); #endif @@ -355,7 +357,7 @@ private slots: void quitOnCloseAttribute(); void moveRect(); -#if defined (Q_OS_WIN) +#if defined (Q_OS_WIN) && !defined(Q_OS_WINRT) void gdiPainting(); void paintOnScreenPossible(); #endif @@ -572,7 +574,7 @@ void tst_QWidget::getSetCheck() QCOMPARE(true, obj1.autoFillBackground()); var1.reset(); -#if defined (Q_OS_WIN) && !defined(Q_OS_WINCE) +#if defined (Q_OS_WIN) && !defined(Q_OS_WINCE) && !defined(Q_OS_WINRT) obj1.setWindowFlags(Qt::FramelessWindowHint | Qt::WindowSystemMenuHint); const HWND handle = reinterpret_cast(obj1.winId()); // explicitly create window handle QVERIFY(GetWindowLong(handle, GWL_STYLE) & WS_POPUP); @@ -1257,7 +1259,7 @@ void tst_QWidget::visible_setWindowOpacity() testWidget->hide(); QVERIFY( !testWidget->isVisible() ); testWidget->setWindowOpacity(0.5); -#ifdef Q_OS_WIN +#if defined(Q_OS_WIN) && !defined(Q_OS_WINRT) QVERIFY(!::IsWindowVisible(winHandleOf(testWidget))); #endif testWidget->setWindowOpacity(1.0); @@ -3597,7 +3599,7 @@ void tst_QWidget::optimizedResize_topLevel() topLevel.partial = false; topLevel.paintedRegion = QRegion(); -#ifndef Q_OS_WIN +#if !defined(Q_OS_WIN32) && !defined(Q_OS_WINCE) topLevel.resize(topLevel.size() + QSize(10, 10)); #else // Static contents does not work when programmatically resizing @@ -4529,7 +4531,7 @@ void tst_QWidget::setWindowGeometry() } } -#if defined (Q_OS_WIN) && !defined(Q_OS_WINCE) +#if defined (Q_OS_WIN) && !defined(Q_OS_WINCE) && !defined(Q_OS_WINRT) void tst_QWidget::setGeometry_win() { QWidget widget; @@ -4548,7 +4550,7 @@ void tst_QWidget::setGeometry_win() QEXPECT_FAIL("", "QTBUG-26424", Continue); QVERIFY(rt.top <= 0); } -#endif // defined (Q_OS_WIN) && !defined(Q_OS_WINCE) +#endif // defined (Q_OS_WIN) && !defined(Q_OS_WINCE) && !defined(Q_OS_WINRT) // Since X11 WindowManager operation are all async, and we have no way to know if the window // manager has finished playing with the window geometry, this test can't be reliable on X11. @@ -8047,7 +8049,7 @@ void tst_QWidget::moveRect() child.move(10, 10); // Don't crash. } -#ifdef Q_OS_WIN +#if defined(Q_OS_WIN) && !defined(Q_OS_WINRT) class GDIWidget : public QDialog { Q_OBJECT @@ -8114,7 +8116,7 @@ void tst_QWidget::paintOnScreenPossible() w2.setAttribute(Qt::WA_PaintOnScreen); QVERIFY(w2.testAttribute(Qt::WA_PaintOnScreen)); } -#endif // Q_OS_WIN +#endif // Q_OS_WIN && !Q_OS_WINRT void tst_QWidget::reparentStaticWidget() { diff --git a/tests/auto/widgets/widgets/qdatetimeedit/tst_qdatetimeedit.cpp b/tests/auto/widgets/widgets/qdatetimeedit/tst_qdatetimeedit.cpp index bfffa357a8..ded3e55283 100644 --- a/tests/auto/widgets/widgets/qdatetimeedit/tst_qdatetimeedit.cpp +++ b/tests/auto/widgets/widgets/qdatetimeedit/tst_qdatetimeedit.cpp @@ -346,7 +346,7 @@ void tst_QDateTimeEdit::cleanupTestCase() void tst_QDateTimeEdit::init() { QLocale::setDefault(QLocale(QLocale::C)); -#if defined(Q_OS_WIN) && !defined(Q_OS_WINCE) +#if defined(Q_OS_WIN) && !defined(Q_OS_WINCE) && !defined(Q_OS_WINRT) SetThreadLocale(MAKELCID(MAKELANGID(LANG_ENGLISH, SUBLANG_ENGLISH_US), SORT_DEFAULT)); #endif testWidget->setDisplayFormat("dd/MM/yyyy"); // Nice default to have diff --git a/tests/auto/widgets/widgets/qtabwidget/qtabwidget.pro b/tests/auto/widgets/widgets/qtabwidget/qtabwidget.pro index 72956a6867..c367959cbc 100644 --- a/tests/auto/widgets/widgets/qtabwidget/qtabwidget.pro +++ b/tests/auto/widgets/widgets/qtabwidget/qtabwidget.pro @@ -8,4 +8,4 @@ INCLUDEPATH += ../ HEADERS += SOURCES += tst_qtabwidget.cpp -win32:!wince*:LIBS += -luser32 +win32:!wince*:!winrt:LIBS += -luser32 diff --git a/tests/auto/widgets/widgets/qtabwidget/tst_qtabwidget.cpp b/tests/auto/widgets/widgets/qtabwidget/tst_qtabwidget.cpp index fa518e6afd..e55438f3d3 100644 --- a/tests/auto/widgets/widgets/qtabwidget/tst_qtabwidget.cpp +++ b/tests/auto/widgets/widgets/qtabwidget/tst_qtabwidget.cpp @@ -48,7 +48,7 @@ #include #include -#if defined(Q_OS_WIN) && !defined(Q_OS_WINCE) +#if defined(Q_OS_WIN) && !defined(Q_OS_WINCE) && !defined(Q_OS_WINRT) # include #define Q_CHECK_PAINTEVENTS \ if (::SwitchDesktop(::GetThreadDesktop(::GetCurrentThreadId())) == 0) \ diff --git a/tests/baselineserver/shared/baselineprotocol.cpp b/tests/baselineserver/shared/baselineprotocol.cpp index cbe3ec8798..f6190f20c4 100644 --- a/tests/baselineserver/shared/baselineprotocol.cpp +++ b/tests/baselineserver/shared/baselineprotocol.cpp @@ -76,7 +76,11 @@ const QString PI_PulseTestrBranch(QLS("PulseTestrBranch")); void BaselineProtocol::sysSleep(int ms) { #if defined(Q_OS_WIN) +# ifndef Q_OS_WINRT Sleep(DWORD(ms)); +# else + WaitForSingleObjectEx(GetCurrentThread(), ms, false); +# endif #else struct timespec ts = { ms / 1000, (ms % 1000) * 1000 * 1000 }; nanosleep(&ts, NULL); @@ -116,6 +120,7 @@ PlatformInfo PlatformInfo::localHostInfo() pi.insert(PI_OSName, QLS("Other")); #endif +#ifndef QT_NO_PROCESS QProcess git; QString cmd; QStringList args; @@ -151,6 +156,7 @@ PlatformInfo PlatformInfo::localHostInfo() pi.insert(PI_PulseGitBranch, QString::fromLatin1(gb)); } } +#endif // !QT_NO_PROCESS return pi; } diff --git a/tests/benchmarks/corelib/io/qdir/10000/bench_qdir_10000.cpp b/tests/benchmarks/corelib/io/qdir/10000/bench_qdir_10000.cpp index 49672a90bf..b2380b0e58 100644 --- a/tests/benchmarks/corelib/io/qdir/10000/bench_qdir_10000.cpp +++ b/tests/benchmarks/corelib/io/qdir/10000/bench_qdir_10000.cpp @@ -176,7 +176,12 @@ private slots: wcscat(appendedPath, L"\\*"); WIN32_FIND_DATA fd; +#ifndef Q_OS_WINRT HANDLE hSearch = FindFirstFileW(appendedPath, &fd); +#else + HANDLE hSearch = FindFirstFileEx(appendedPath, FindExInfoStandard, &fd, + FindExSearchNameMatch, NULL, FIND_FIRST_EX_LARGE_FETCH); +#endif QVERIFY(hSearch != INVALID_HANDLE_VALUE); QBENCHMARK { diff --git a/tests/benchmarks/corelib/io/qdiriterator/main.cpp b/tests/benchmarks/corelib/io/qdiriterator/main.cpp index 5188658bdb..691e822379 100644 --- a/tests/benchmarks/corelib/io/qdiriterator/main.cpp +++ b/tests/benchmarks/corelib/io/qdiriterator/main.cpp @@ -106,7 +106,12 @@ static int posix_helper(const wchar_t *dirpath) wchar_t appendedPath[MAX_PATH]; wcscpy(appendedPath, dirpath); wcscat(appendedPath, L"\\*"); +#ifndef Q_OS_WINRT hSearch = FindFirstFile(appendedPath, &fd); +#else + hSearch = FindFirstFileEx(appendedPath, FindExInfoStandard, &fd, + FindExSearchNameMatch, NULL, FIND_FIRST_EX_LARGE_FETCH); +#endif appendedPath[origDirPathLength] = 0; if (hSearch == INVALID_HANDLE_VALUE) { diff --git a/tests/benchmarks/corelib/io/qdiriterator/qfilesystemiterator.cpp b/tests/benchmarks/corelib/io/qdiriterator/qfilesystemiterator.cpp index bb4a921fc7..82bca1541d 100644 --- a/tests/benchmarks/corelib/io/qdiriterator/qfilesystemiterator.cpp +++ b/tests/benchmarks/corelib/io/qdiriterator/qfilesystemiterator.cpp @@ -230,7 +230,12 @@ void QFileSystemIteratorPrivate::pushSubDirectory(const QByteArray &path) wchar_t szSearchPath[MAX_PATH]; QString::fromLatin1(path).toWCharArray(szSearchPath); wcscat(szSearchPath, L"\\*"); +#ifndef Q_OS_WINRT HANDLE dir = FindFirstFile(szSearchPath, &m_fileSearchResult); +#else + HANDLE dir = FindFirstFileEx(szSearchPath, FindExInfoStandard, &m_fileSearchResult, + FindExSearchLimitToDirectories, NULL, FIND_FIRST_EX_LARGE_FETCH); +#endif m_bFirstSearchResult = true; #else DIR *dir = ::opendir(path.constData()); diff --git a/tests/benchmarks/corelib/io/qfile/main.cpp b/tests/benchmarks/corelib/io/qfile/main.cpp index 0beffebfb7..e0ae29fbee 100644 --- a/tests/benchmarks/corelib/io/qfile/main.cpp +++ b/tests/benchmarks/corelib/io/qfile/main.cpp @@ -310,7 +310,11 @@ void tst_qfile::readBigFile() // ensure we don't account string conversion wchar_t* cfilename = (wchar_t*)filename.utf16(); +#ifndef Q_OS_WINRT hndl = CreateFile(cfilename, GENERIC_READ, 0, 0, OPEN_EXISTING, 0, 0); +#else + hndl = CreateFile2(cfilename, GENERIC_READ, 0, OPEN_EXISTING, 0); +#endif Q_ASSERT(hndl); wchar_t* nativeBuffer = new wchar_t[BUFSIZE]; DWORD numberOfBytesRead; @@ -319,7 +323,12 @@ void tst_qfile::readBigFile() do { ReadFile(hndl, nativeBuffer, blockSize, &numberOfBytesRead, NULL); } while(numberOfBytesRead != 0); +#ifndef Q_OS_WINRT SetFilePointer(hndl, 0, NULL, FILE_BEGIN); +#else + LARGE_INTEGER offset = { 0 }; + SetFilePointerEx(hndl, offset, NULL, FILE_BEGIN); +#endif } delete[] nativeBuffer; CloseHandle(hndl); @@ -400,11 +409,20 @@ void tst_qfile::seek() // ensure we don't account string conversion wchar_t* cfilename = (wchar_t*)filename.utf16(); +#ifndef Q_OS_WINRT hndl = CreateFile(cfilename, GENERIC_READ, 0, 0, OPEN_EXISTING, 0, 0); +#else + hndl = CreateFile2(cfilename, GENERIC_READ, 0, OPEN_EXISTING, 0); +#endif Q_ASSERT(hndl); QBENCHMARK { i=(i+1)%sp_size; +#ifndef Q_OS_WINRT SetFilePointer(hndl, seekpos[i], NULL, 0); +#else + LARGE_INTEGER offset = { seekpos[i] }; + SetFilePointerEx(hndl, offset, NULL, FILE_BEGIN); +#endif } CloseHandle(hndl); #else @@ -489,7 +507,11 @@ void tst_qfile::open() wchar_t* cfilename = (wchar_t*)filename.utf16(); QBENCHMARK { +#ifndef Q_OS_WINRT hndl = CreateFile(cfilename, GENERIC_READ, 0, 0, OPEN_EXISTING, 0, 0); +#else + hndl = CreateFile2(cfilename, GENERIC_READ, 0, OPEN_EXISTING, 0); +#endif Q_ASSERT(hndl); CloseHandle(hndl); } @@ -698,7 +720,11 @@ void tst_qfile::readSmallFiles() // ensure we don't account string conversion wchar_t* cfilename = (wchar_t*)filename.utf16(); +#ifndef Q_OS_WINRT hndl = CreateFile(cfilename, GENERIC_READ, 0, 0, OPEN_EXISTING, 0, 0); +#else + hndl = CreateFile2(cfilename, GENERIC_READ, 0, OPEN_EXISTING, 0); +#endif Q_ASSERT(hndl); wchar_t* nativeBuffer = new wchar_t[BUFSIZE]; DWORD numberOfBytesRead; diff --git a/tests/benchmarks/corelib/io/qfileinfo/main.cpp b/tests/benchmarks/corelib/io/qfileinfo/main.cpp index 594e5b7478..de1aaea177 100644 --- a/tests/benchmarks/corelib/io/qfileinfo/main.cpp +++ b/tests/benchmarks/corelib/io/qfileinfo/main.cpp @@ -54,7 +54,7 @@ class qfileinfo : public QObject private slots: void existsTemporary(); void existsStatic(); -#if defined(Q_OS_WIN) && !defined(Q_OS_WINCE) +#if defined(Q_OS_WIN) && !defined(Q_OS_WINCE) && !defined(Q_OS_WINRT) void symLinkTargetPerformanceLNK(); void symLinkTargetPerformanceMounpoint(); #endif @@ -84,7 +84,7 @@ void qfileinfo::existsStatic() QBENCHMARK { QFileInfo::exists(appPath); } } -#if defined(Q_OS_WIN) && !defined(Q_OS_WINCE) +#if defined(Q_OS_WIN) && !defined(Q_OS_WINCE) && !defined(Q_OS_WINRT) void qfileinfo::symLinkTargetPerformanceLNK() { QVERIFY(QFile::link("file","link.lnk")); diff --git a/tests/benchmarks/corelib/thread/qmutex/tst_qmutex.cpp b/tests/benchmarks/corelib/thread/qmutex/tst_qmutex.cpp index a7480e6afe..37fa571f8c 100644 --- a/tests/benchmarks/corelib/thread/qmutex/tst_qmutex.cpp +++ b/tests/benchmarks/corelib/thread/qmutex/tst_qmutex.cpp @@ -93,7 +93,11 @@ void NativeMutexUnlock(NativeMutexType *mutex) typedef CRITICAL_SECTION NativeMutexType; void NativeMutexInitialize(NativeMutexType *mutex) { +#ifndef Q_OS_WINRT InitializeCriticalSection(mutex); +#else + InitializeCriticalSectionEx(mutex, 0, 0); +#endif } void NativeMutexDestroy(NativeMutexType *mutex) { diff --git a/tests/shared/filesystem.h b/tests/shared/filesystem.h index 7aa72cc28e..a68130a324 100644 --- a/tests/shared/filesystem.h +++ b/tests/shared/filesystem.h @@ -92,7 +92,7 @@ public: return file.isNull() ? qint64(-1) : file->write(relativeFileName.toUtf8()); } -#if defined(Q_OS_WIN) && !defined(Q_OS_WINCE) +#if defined(Q_OS_WIN) && !defined(Q_OS_WINCE) && !defined(Q_OS_WINRT) static void createNtfsJunction(QString target, QString linkName) { typedef struct { -- cgit v1.2.3 From ffb92a56916580d6948722dee13b0cf99b201e5b Mon Sep 17 00:00:00 2001 From: Oliver Wolff Date: Mon, 27 May 2013 15:55:12 +0200 Subject: Winrt: tst_qthread: Added QEXPECT_FAIL where needed Change-Id: I88d98421978e0f5c55af8647f3f74c265b45bd37 Reviewed-by: Andrew Knight Reviewed-by: Maurice Kalinowski --- tests/auto/corelib/thread/qthread/tst_qthread.cpp | 12 ++++++++++++ 1 file changed, 12 insertions(+) (limited to 'tests') diff --git a/tests/auto/corelib/thread/qthread/tst_qthread.cpp b/tests/auto/corelib/thread/qthread/tst_qthread.cpp index 4ebdd63b99..42424f23c4 100644 --- a/tests/auto/corelib/thread/qthread/tst_qthread.cpp +++ b/tests/auto/corelib/thread/qthread/tst_qthread.cpp @@ -869,6 +869,9 @@ void tst_QThread::adoptedThreadFinished() nativeThread.join(); QTestEventLoop::instance().enterLoop(5); +#if defined(Q_OS_WINRT) + QEXPECT_FAIL("", "QTBUG-31397: Known not to work on WinRT", Abort); +#endif QVERIFY(!QTestEventLoop::instance().timeout()); } @@ -884,6 +887,9 @@ void tst_QThread::adoptedThreadExecFinished() nativeThread.join(); QTestEventLoop::instance().enterLoop(5); +#if defined(Q_OS_WINRT) + QEXPECT_FAIL("", "QTBUG-31397: Known not to work on WinRT", Abort); +#endif QVERIFY(!QTestEventLoop::instance().timeout()); } @@ -920,6 +926,9 @@ void tst_QThread::adoptMultipleThreads() } QTestEventLoop::instance().enterLoop(5); +#if defined(Q_OS_WINRT) + QEXPECT_FAIL("", "QTBUG-31397: Known not to work on WinRT", Abort); +#endif QVERIFY(!QTestEventLoop::instance().timeout()); QCOMPARE(recorder.activationCount.load(), numThreads); } @@ -962,6 +971,9 @@ void tst_QThread::adoptMultipleThreadsOverlap() } QTestEventLoop::instance().enterLoop(5); +#if defined(Q_OS_WINRT) + QEXPECT_FAIL("", "QTBUG-31397: Known not to work on WinRT", Abort); +#endif QVERIFY(!QTestEventLoop::instance().timeout()); QCOMPARE(recorder.activationCount.load(), numThreads); } -- cgit v1.2.3 From 8cbc90ffb238146f2a9c3217bdf687c9535c5f9b Mon Sep 17 00:00:00 2001 From: Oliver Wolff Date: Mon, 27 May 2013 15:54:06 +0200 Subject: Winrt: Skip qthread autotests, which are not supported (yet) Change-Id: Ib1047731667ba8a7b9db2f62924eb42a6b85b4fd Reviewed-by: Andrew Knight Reviewed-by: Maurice Kalinowski --- tests/auto/corelib/thread/qthread/tst_qthread.cpp | 12 ++++++++++++ 1 file changed, 12 insertions(+) (limited to 'tests') diff --git a/tests/auto/corelib/thread/qthread/tst_qthread.cpp b/tests/auto/corelib/thread/qthread/tst_qthread.cpp index 42424f23c4..0e53139414 100644 --- a/tests/auto/corelib/thread/qthread/tst_qthread.cpp +++ b/tests/auto/corelib/thread/qthread/tst_qthread.cpp @@ -328,6 +328,9 @@ void tst_QThread::isRunning() void tst_QThread::setPriority() { +#if defined(Q_OS_WINRT) + QSKIP("Thread priority is not supported on WinRT"); +#endif Simple_Thread thread; // cannot change the priority, since the thread is not running @@ -478,6 +481,9 @@ void tst_QThread::start() void tst_QThread::terminate() { +#if defined(Q_OS_WINRT) + QSKIP("Terminate is not supported on WinRT"); +#endif Terminate_Thread thread; { QMutexLocker locker(&thread.mutex); @@ -541,6 +547,9 @@ void tst_QThread::finished() void tst_QThread::terminated() { +#if defined(Q_OS_WINRT) + QSKIP("Terminate is not supported on WinRT"); +#endif SignalRecorder recorder; Terminate_Thread thread; connect(&thread, SIGNAL(finished()), &recorder, SLOT(slot()), Qt::DirectConnection); @@ -792,6 +801,9 @@ void tst_QThread::adoptedThreadAffinity() void tst_QThread::adoptedThreadSetPriority() { +#if defined(Q_OS_WINRT) + QSKIP("Thread priority is not supported on WinRT"); +#endif NativeThreadWrapper nativeThread; nativeThread.setWaitForStop(); -- cgit v1.2.3 From 7f3e3c1099f42cff46bbd267c70587bcf72024fc Mon Sep 17 00:00:00 2001 From: Albert Astals Cid Date: Tue, 8 Oct 2013 13:43:26 +0200 Subject: Compare QIcon QVariants by their cache key MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit This makes it so that two QVariants created from the same QIcon (or from QIcons that were assigned one from eachother) compare to true. Unfortunately creating two QIcons with the same path and comparing them still gives false as they have different cacheKeys Change-Id: Iafe2bc4082a830f9c6469f083c26a7abbe4b35c5 Reviewed-by: Jędrzej Nowacki --- tests/auto/gui/kernel/qguivariant/test/black.png | Bin 0 -> 697 bytes tests/auto/gui/kernel/qguivariant/test/black2.png | Bin 0 -> 697 bytes tests/auto/gui/kernel/qguivariant/test/test.pro | 1 + .../kernel/qguivariant/test/tst_qguivariant.cpp | 29 +++++++++++++++++++++ .../kernel/qguivariant/test/tst_qguivariant.qrc | 6 +++++ .../itemviews/qtreewidget/tst_qtreewidget.cpp | 4 +-- 6 files changed, 37 insertions(+), 3 deletions(-) create mode 100644 tests/auto/gui/kernel/qguivariant/test/black.png create mode 100644 tests/auto/gui/kernel/qguivariant/test/black2.png create mode 100644 tests/auto/gui/kernel/qguivariant/test/tst_qguivariant.qrc (limited to 'tests') diff --git a/tests/auto/gui/kernel/qguivariant/test/black.png b/tests/auto/gui/kernel/qguivariant/test/black.png new file mode 100644 index 0000000000..6c94085ed5 Binary files /dev/null and b/tests/auto/gui/kernel/qguivariant/test/black.png differ diff --git a/tests/auto/gui/kernel/qguivariant/test/black2.png b/tests/auto/gui/kernel/qguivariant/test/black2.png new file mode 100644 index 0000000000..6c94085ed5 Binary files /dev/null and b/tests/auto/gui/kernel/qguivariant/test/black2.png differ diff --git a/tests/auto/gui/kernel/qguivariant/test/test.pro b/tests/auto/gui/kernel/qguivariant/test/test.pro index d47cf7bf6f..86ab17d9cd 100644 --- a/tests/auto/gui/kernel/qguivariant/test/test.pro +++ b/tests/auto/gui/kernel/qguivariant/test/test.pro @@ -2,5 +2,6 @@ CONFIG += testcase CONFIG += parallel_test TARGET = tst_qguivariant SOURCES += tst_qguivariant.cpp +RESOURCES = tst_qguivariant.qrc INCLUDEPATH += $$PWD/../../../../other/qvariant_common QT += testlib diff --git a/tests/auto/gui/kernel/qguivariant/test/tst_qguivariant.cpp b/tests/auto/gui/kernel/qguivariant/test/tst_qguivariant.cpp index 6fdf3dc843..d5ec9fcfaa 100644 --- a/tests/auto/gui/kernel/qguivariant/test/tst_qguivariant.cpp +++ b/tests/auto/gui/kernel/qguivariant/test/tst_qguivariant.cpp @@ -124,6 +124,8 @@ private slots: void implicitConstruction(); void guiVariantAtExit(); + + void iconEquality(); }; void tst_QGuiVariant::constructor_invalid_data() @@ -702,5 +704,32 @@ void tst_QGuiVariant::guiVariantAtExit() QVERIFY(true); } +void tst_QGuiVariant::iconEquality() +{ + QIcon i; + QVariant a = i; + QVariant b = i; + QCOMPARE(a, b); + + i = QIcon(":/black.png"); + a = i; + QVERIFY(a != b); + + b = a; + QCOMPARE(a, b); + + i = QIcon(":/black2.png"); + a = i; + QVERIFY(a != b); + + b = i; + QCOMPARE(a, b); + + // This is a "different" QIcon + // even if the contents are the same + b = QIcon(":/black2.png"); + QVERIFY(a != b); +} + QTEST_MAIN(tst_QGuiVariant) #include "tst_qguivariant.moc" diff --git a/tests/auto/gui/kernel/qguivariant/test/tst_qguivariant.qrc b/tests/auto/gui/kernel/qguivariant/test/tst_qguivariant.qrc new file mode 100644 index 0000000000..15cfde5788 --- /dev/null +++ b/tests/auto/gui/kernel/qguivariant/test/tst_qguivariant.qrc @@ -0,0 +1,6 @@ + + +black.png +black2.png + + diff --git a/tests/auto/widgets/itemviews/qtreewidget/tst_qtreewidget.cpp b/tests/auto/widgets/itemviews/qtreewidget/tst_qtreewidget.cpp index 83ba1ddcda..d2625c400a 100644 --- a/tests/auto/widgets/itemviews/qtreewidget/tst_qtreewidget.cpp +++ b/tests/auto/widgets/itemviews/qtreewidget/tst_qtreewidget.cpp @@ -1758,9 +1758,7 @@ void tst_QTreeWidget::setData() QCOMPARE(qvariant_cast(args.at(0)), item); QCOMPARE(qvariant_cast(args.at(1)), j); item->setIcon(j, icon); - // #### shouldn't cause dataChanged() - QCOMPARE(itemChangedSpy.count(), 1); - itemChangedSpy.clear(); + QCOMPARE(itemChangedSpy.count(), 0); QString toolTip = QString("toolTip %0").arg(i); item->setToolTip(j, toolTip); -- cgit v1.2.3 From 2d107c20b9670976e0d4a22edc6c3b235e225fa4 Mon Sep 17 00:00:00 2001 From: Friedemann Kleint Date: Tue, 15 Oct 2013 14:12:34 +0200 Subject: Fix settable style hints. MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Introduce QStyleHintsPrivate and introduce internal setters called by QApplication. Task-number: QTBUG-33991 Change-Id: Id61f8b1e2b5c9cfd7b4713aaded66e93e6f63719 Reviewed-by: Jan Arve Sæther Reviewed-by: Andy Shaw --- .../widgets/kernel/qapplication/tst_qapplication.cpp | 18 ++++++++++++++++++ 1 file changed, 18 insertions(+) (limited to 'tests') diff --git a/tests/auto/widgets/kernel/qapplication/tst_qapplication.cpp b/tests/auto/widgets/kernel/qapplication/tst_qapplication.cpp index fee8b6aee5..f2fa1f87fa 100644 --- a/tests/auto/widgets/kernel/qapplication/tst_qapplication.cpp +++ b/tests/auto/widgets/kernel/qapplication/tst_qapplication.cpp @@ -178,6 +178,8 @@ private slots: void globalStaticObjectDestruction(); // run this last void abortQuitOnShow(); + + void settableStyleHints(); // Needs to run last as it changes style hints. }; class EventSpy : public QObject @@ -2247,6 +2249,22 @@ void tst_QApplication::abortQuitOnShow() QCOMPARE(app.exec(), 1); } +void tst_QApplication::settableStyleHints() +{ + int argc = 0; + QApplication app(argc, 0); + QApplication::setCursorFlashTime(437); + QCOMPARE(QApplication::cursorFlashTime(), 437); + QApplication::setDoubleClickInterval(128); + QCOMPARE(QApplication::doubleClickInterval(), 128); + QApplication::setStartDragDistance(122000); + QCOMPARE(QApplication::startDragDistance(), 122000); + QApplication::setStartDragTime(834); + QCOMPARE(QApplication::startDragTime(), 834); + QApplication::setKeyboardInputInterval(309); + QCOMPARE(QApplication::keyboardInputInterval(), 309); +} + /* This test is meant to ensure that certain objects (public & commonly used) can safely be used in a Q_GLOBAL_STATIC such that their destructors are -- cgit v1.2.3 From 109bf980b37fed405c6c1eb14cb9c83ff897e389 Mon Sep 17 00:00:00 2001 From: Tasuku Suzuki Date: Sat, 21 Sep 2013 15:23:16 +0900 Subject: Fix a bug in QSqlQuery::isNull documentation the method returns true if there is not such field. Change-Id: I25db8de4561d3e0604f3e64edc1810140ba4aad2 Reviewed-by: Andy Shaw Reviewed-by: Mark Brand --- tests/auto/sql/kernel/qsqlquery/tst_qsqlquery.cpp | 3 +++ 1 file changed, 3 insertions(+) (limited to 'tests') diff --git a/tests/auto/sql/kernel/qsqlquery/tst_qsqlquery.cpp b/tests/auto/sql/kernel/qsqlquery/tst_qsqlquery.cpp index 1a100ce706..9098d5b101 100644 --- a/tests/auto/sql/kernel/qsqlquery/tst_qsqlquery.cpp +++ b/tests/auto/sql/kernel/qsqlquery/tst_qsqlquery.cpp @@ -1393,6 +1393,9 @@ void tst_QSqlQuery::isNull() QVERIFY( q.next() ); QVERIFY( !q.isNull( 0 ) ); QVERIFY( !q.isNull( 1 ) ); + + // For a non existent field, it should be returning true. + QVERIFY(q.isNull(2)); } /*! TDS specific BIT field test */ -- cgit v1.2.3 From 1f22c1d98162b3a7d34ceb64c543d6580333b434 Mon Sep 17 00:00:00 2001 From: J-P Nurmi Date: Sun, 1 Sep 2013 23:34:20 +0200 Subject: Introduce QTextDocument::baseUrl Required for QQuickText & friends to implement image resource handling in a clean way - to get rid of QQuickTextDocumentWithImageResources and eventually make QQuickTextEdit's document interchangeable. Change-Id: I97314a6c3e2d5726539d5722795a472631388cb0 Reviewed-by: Konstantin Ritt --- .../gui/text/qtextdocument/tst_qtextdocument.cpp | 50 ++++++++++++++++++++++ 1 file changed, 50 insertions(+) (limited to 'tests') diff --git a/tests/auto/gui/text/qtextdocument/tst_qtextdocument.cpp b/tests/auto/gui/text/qtextdocument/tst_qtextdocument.cpp index b065f537f7..1abac3a28a 100644 --- a/tests/auto/gui/text/qtextdocument/tst_qtextdocument.cpp +++ b/tests/auto/gui/text/qtextdocument/tst_qtextdocument.cpp @@ -189,6 +189,9 @@ private slots: void QTBUG27354_spaceAndSoftSpace(); void cssInheritance(); + void baseUrl_data(); + void baseUrl(); + void QTBUG28998_linkColor(); private: @@ -2978,6 +2981,53 @@ void tst_QTextDocument::cssInheritance() } } +class BaseDocument : public QTextDocument +{ +public: + QUrl loadedResource() const { return resourceUrl; } + + QVariant loadResource(int type, const QUrl &name) + { + resourceUrl = name; + return QTextDocument::loadResource(type, name); + } + +private: + QUrl resourceUrl; +}; + +void tst_QTextDocument::baseUrl_data() +{ + QTest::addColumn("base"); + QTest::addColumn("resource"); + QTest::addColumn("loaded"); + + QTest::newRow("1") << QUrl() << QUrl("images/logo.png") << QUrl("images/logo.png"); + QTest::newRow("2") << QUrl("file:///path/to/content") << QUrl("images/logo.png") << QUrl("file:///path/to/images/logo.png"); + QTest::newRow("3") << QUrl("file:///path/to/content/") << QUrl("images/logo.png") << QUrl("file:///path/to/content/images/logo.png"); + QTest::newRow("4") << QUrl("file:///path/to/content/images") << QUrl("images/logo.png") << QUrl("file:///path/to/content/images/logo.png"); + QTest::newRow("5") << QUrl("file:///path/to/content/images/") << QUrl("images/logo.png") << QUrl("file:///path/to/content/images/images/logo.png"); + QTest::newRow("6") << QUrl("file:///path/to/content/images") << QUrl("../images/logo.png") << QUrl("file:///path/to/images/logo.png"); + QTest::newRow("7") << QUrl("file:///path/to/content/images/") << QUrl("../images/logo.png") << QUrl("file:///path/to/content/images/logo.png"); + QTest::newRow("8") << QUrl("file:///path/to/content/index.html") << QUrl("images/logo.png") << QUrl("file:///path/to/content/images/logo.png"); +} + +void tst_QTextDocument::baseUrl() +{ + QFETCH(QUrl, base); + QFETCH(QUrl, resource); + QFETCH(QUrl, loaded); + + BaseDocument document; + QVERIFY(!document.baseUrl().isValid()); + document.setBaseUrl(base); + QCOMPARE(document.baseUrl(), base); + + document.setHtml(QString("").arg(resource.toString())); + document.resource(QTextDocument::ImageResource, resource); + QCOMPARE(document.loadedResource(), loaded); +} + void tst_QTextDocument::QTBUG28998_linkColor() { QPalette pal; -- cgit v1.2.3 From 041abb93169668b8f6ebac128050d4507e000e16 Mon Sep 17 00:00:00 2001 From: John Layt Date: Sun, 29 Jul 2012 16:27:21 +0100 Subject: QPrintSupport: Move QAbstractPrintDialog test into QPrintSupport Move the test for QAbstractPrintDialog from widgets into printsupport Change-Id: Ia7595fa650a7ad565df3090207500ed06564e842 Reviewed-by: Marc Mutz --- tests/auto/printsupport/dialogs/dialogs.pro | 3 + .../dialogs/qabstractprintdialog/.gitignore | 1 + .../qabstractprintdialog/qabstractprintdialog.pro | 9 ++ .../tst_qabstractprintdialog.cpp | 144 +++++++++++++++++++++ tests/auto/printsupport/printsupport.pro | 1 + tests/auto/widgets/dialogs/dialogs.pro | 3 - .../dialogs/qabstractprintdialog/.gitignore | 1 - .../qabstractprintdialog/qabstractprintdialog.pro | 9 -- .../tst_qabstractprintdialog.cpp | 144 --------------------- 9 files changed, 158 insertions(+), 157 deletions(-) create mode 100644 tests/auto/printsupport/dialogs/dialogs.pro create mode 100644 tests/auto/printsupport/dialogs/qabstractprintdialog/.gitignore create mode 100644 tests/auto/printsupport/dialogs/qabstractprintdialog/qabstractprintdialog.pro create mode 100644 tests/auto/printsupport/dialogs/qabstractprintdialog/tst_qabstractprintdialog.cpp delete mode 100644 tests/auto/widgets/dialogs/qabstractprintdialog/.gitignore delete mode 100644 tests/auto/widgets/dialogs/qabstractprintdialog/qabstractprintdialog.pro delete mode 100644 tests/auto/widgets/dialogs/qabstractprintdialog/tst_qabstractprintdialog.cpp (limited to 'tests') diff --git a/tests/auto/printsupport/dialogs/dialogs.pro b/tests/auto/printsupport/dialogs/dialogs.pro new file mode 100644 index 0000000000..419bd13ccf --- /dev/null +++ b/tests/auto/printsupport/dialogs/dialogs.pro @@ -0,0 +1,3 @@ +TEMPLATE=subdirs +SUBDIRS=\ + qabstractprintdialog \ diff --git a/tests/auto/printsupport/dialogs/qabstractprintdialog/.gitignore b/tests/auto/printsupport/dialogs/qabstractprintdialog/.gitignore new file mode 100644 index 0000000000..a768494da5 --- /dev/null +++ b/tests/auto/printsupport/dialogs/qabstractprintdialog/.gitignore @@ -0,0 +1 @@ +tst_qabstractprintdialog diff --git a/tests/auto/printsupport/dialogs/qabstractprintdialog/qabstractprintdialog.pro b/tests/auto/printsupport/dialogs/qabstractprintdialog/qabstractprintdialog.pro new file mode 100644 index 0000000000..2e9ae33592 --- /dev/null +++ b/tests/auto/printsupport/dialogs/qabstractprintdialog/qabstractprintdialog.pro @@ -0,0 +1,9 @@ +############################################################ +# Project file for autotest for file qabstractprintdialog.h +############################################################ + +CONFIG += testcase +CONFIG += parallel_test +TARGET = tst_qabstractprintdialog +QT += widgets printsupport testlib +SOURCES += tst_qabstractprintdialog.cpp diff --git a/tests/auto/printsupport/dialogs/qabstractprintdialog/tst_qabstractprintdialog.cpp b/tests/auto/printsupport/dialogs/qabstractprintdialog/tst_qabstractprintdialog.cpp new file mode 100644 index 0000000000..c79a4a97ef --- /dev/null +++ b/tests/auto/printsupport/dialogs/qabstractprintdialog/tst_qabstractprintdialog.cpp @@ -0,0 +1,144 @@ +/**************************************************************************** +** +** Copyright (C) 2013 Digia Plc and/or its subsidiary(-ies). +** Contact: http://www.qt-project.org/legal +** +** This file is part of the test suite of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:LGPL$ +** 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 Digia. For licensing terms and +** conditions see http://qt.digia.com/licensing. For further information +** use the contact form at http://qt.digia.com/contact-us. +** +** 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, Digia gives you certain additional +** rights. These rights are described in the Digia Qt LGPL Exception +** version 1.1, included in the file LGPL_EXCEPTION.txt in this package. +** +** GNU General Public License Usage +** Alternatively, this file may be used under the terms of the GNU +** General Public License version 3.0 as published by the Free Software +** Foundation and appearing in the file LICENSE.GPL included in the +** packaging of this file. Please review the following information to +** ensure the GNU General Public License version 3.0 requirements will be +** met: http://www.gnu.org/copyleft/gpl.html. +** +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + + +#include + +#include +#include +#include +#include + +class tst_QAbstractPrintDialog : public QObject +{ +Q_OBJECT + +#if defined(QT_NO_PRINTER) || defined(QT_NO_PRINTDIALOG) +public slots: + void initTestCase(); +#else +private slots: + void getSetCheck(); + void setMinMax(); + void setFromTo(); +#endif +}; + +#if defined(QT_NO_PRINTER) || defined(QT_NO_PRINTDIALOG) +void tst_QAbstractPrintDialog::initTestCase() +{ + QSKIP("This test requires printing and print dialog support"); +} + +#else + +class MyAbstractPrintDialog : public QAbstractPrintDialog +{ +public: + MyAbstractPrintDialog(QPrinter *p) : QAbstractPrintDialog(p) {} + int exec() { return 0; } +}; + +// Testing get/set functions +void tst_QAbstractPrintDialog::getSetCheck() +{ + QPrinter printer; + MyAbstractPrintDialog obj1(&printer); + QCOMPARE(obj1.printer(), &printer); + // PrintDialogOptions QAbstractPrintDialog::enabledOptions() + // void QAbstractPrintDialog::setEnabledOptions(PrintDialogOptions) + obj1.setEnabledOptions(QAbstractPrintDialog::PrintDialogOptions(QAbstractPrintDialog::None)); + QCOMPARE(QAbstractPrintDialog::PrintDialogOptions(QAbstractPrintDialog::None), obj1.enabledOptions()); + obj1.setEnabledOptions(QAbstractPrintDialog::PrintDialogOptions(QAbstractPrintDialog::PrintToFile)); + QCOMPARE(QAbstractPrintDialog::PrintDialogOptions(QAbstractPrintDialog::PrintToFile), obj1.enabledOptions()); + obj1.setEnabledOptions(QAbstractPrintDialog::PrintDialogOptions(QAbstractPrintDialog::PrintSelection)); + QCOMPARE(QAbstractPrintDialog::PrintDialogOptions(QAbstractPrintDialog::PrintSelection), obj1.enabledOptions()); + obj1.setEnabledOptions(QAbstractPrintDialog::PrintDialogOptions(QAbstractPrintDialog::PrintPageRange)); + QCOMPARE(QAbstractPrintDialog::PrintDialogOptions(QAbstractPrintDialog::PrintPageRange), obj1.enabledOptions()); + obj1.setEnabledOptions(QAbstractPrintDialog::PrintDialogOptions(QAbstractPrintDialog::PrintCollateCopies)); + QCOMPARE(QAbstractPrintDialog::PrintDialogOptions(QAbstractPrintDialog::PrintCollateCopies), obj1.enabledOptions()); + + // PrintRange QAbstractPrintDialog::printRange() + // void QAbstractPrintDialog::setPrintRange(PrintRange) + obj1.setPrintRange(QAbstractPrintDialog::PrintRange(QAbstractPrintDialog::AllPages)); + QCOMPARE(QAbstractPrintDialog::PrintRange(QAbstractPrintDialog::AllPages), obj1.printRange()); + obj1.setPrintRange(QAbstractPrintDialog::PrintRange(QAbstractPrintDialog::Selection)); + QCOMPARE(QAbstractPrintDialog::PrintRange(QAbstractPrintDialog::Selection), obj1.printRange()); + obj1.setPrintRange(QAbstractPrintDialog::PrintRange(QAbstractPrintDialog::PageRange)); + QCOMPARE(QAbstractPrintDialog::PrintRange(QAbstractPrintDialog::PageRange), obj1.printRange()); +} + +void tst_QAbstractPrintDialog::setMinMax() +{ + QPrinter printer; + MyAbstractPrintDialog obj1(&printer); + obj1.setEnabledOptions(QAbstractPrintDialog::PrintDialogOptions(QAbstractPrintDialog::None)); + QEXPECT_FAIL("", "QTBUG-22637", Abort); + QCOMPARE(obj1.minPage(), 1); + QCOMPARE(obj1.maxPage(), INT_MAX); + QVERIFY(!obj1.isOptionEnabled(QAbstractPrintDialog::PrintPageRange)); + obj1.setMinMax(2,5); + QCOMPARE(obj1.minPage(), 2); + QCOMPARE(obj1.maxPage(), 5); + QVERIFY(obj1.enabledOptions() & QAbstractPrintDialog::PrintPageRange); + QVERIFY(obj1.isOptionEnabled(QAbstractPrintDialog::PrintPageRange)); +} + +void tst_QAbstractPrintDialog::setFromTo() +{ + QPrinter printer; + MyAbstractPrintDialog obj1(&printer); + QCOMPARE(obj1.fromPage(), 0); + QCOMPARE(obj1.toPage(), 0); + obj1.setMinMax(0,0); + QCOMPARE(obj1.minPage(), 0); + QCOMPARE(obj1.maxPage(), 0); + obj1.setFromTo(20,50); + QCOMPARE(obj1.fromPage(), 20); + QCOMPARE(obj1.toPage(), 50); + QCOMPARE(obj1.minPage(), 1); + QCOMPARE(obj1.maxPage(), 50); +} + +#endif + +QTEST_MAIN(tst_QAbstractPrintDialog) +#include "tst_qabstractprintdialog.moc" diff --git a/tests/auto/printsupport/printsupport.pro b/tests/auto/printsupport/printsupport.pro index 69ba296738..062f46980a 100644 --- a/tests/auto/printsupport/printsupport.pro +++ b/tests/auto/printsupport/printsupport.pro @@ -1,3 +1,4 @@ TEMPLATE=subdirs SUBDIRS=\ + dialogs \ kernel \ diff --git a/tests/auto/widgets/dialogs/dialogs.pro b/tests/auto/widgets/dialogs/dialogs.pro index acff1df5ba..c5f2c409dd 100644 --- a/tests/auto/widgets/dialogs/dialogs.pro +++ b/tests/auto/widgets/dialogs/dialogs.pro @@ -1,6 +1,5 @@ TEMPLATE=subdirs SUBDIRS=\ - qabstractprintdialog \ qcolordialog \ qdialog \ qerrormessage \ @@ -14,8 +13,6 @@ SUBDIRS=\ qsidebar \ qwizard \ -wince*|!qtHaveModule(printsupport):SUBDIRS -= qabstractprintdialog - !contains(QT_CONFIG, private_tests): SUBDIRS -= \ qsidebar \ diff --git a/tests/auto/widgets/dialogs/qabstractprintdialog/.gitignore b/tests/auto/widgets/dialogs/qabstractprintdialog/.gitignore deleted file mode 100644 index a768494da5..0000000000 --- a/tests/auto/widgets/dialogs/qabstractprintdialog/.gitignore +++ /dev/null @@ -1 +0,0 @@ -tst_qabstractprintdialog diff --git a/tests/auto/widgets/dialogs/qabstractprintdialog/qabstractprintdialog.pro b/tests/auto/widgets/dialogs/qabstractprintdialog/qabstractprintdialog.pro deleted file mode 100644 index 2e9ae33592..0000000000 --- a/tests/auto/widgets/dialogs/qabstractprintdialog/qabstractprintdialog.pro +++ /dev/null @@ -1,9 +0,0 @@ -############################################################ -# Project file for autotest for file qabstractprintdialog.h -############################################################ - -CONFIG += testcase -CONFIG += parallel_test -TARGET = tst_qabstractprintdialog -QT += widgets printsupport testlib -SOURCES += tst_qabstractprintdialog.cpp diff --git a/tests/auto/widgets/dialogs/qabstractprintdialog/tst_qabstractprintdialog.cpp b/tests/auto/widgets/dialogs/qabstractprintdialog/tst_qabstractprintdialog.cpp deleted file mode 100644 index c79a4a97ef..0000000000 --- a/tests/auto/widgets/dialogs/qabstractprintdialog/tst_qabstractprintdialog.cpp +++ /dev/null @@ -1,144 +0,0 @@ -/**************************************************************************** -** -** Copyright (C) 2013 Digia Plc and/or its subsidiary(-ies). -** Contact: http://www.qt-project.org/legal -** -** This file is part of the test suite of the Qt Toolkit. -** -** $QT_BEGIN_LICENSE:LGPL$ -** 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 Digia. For licensing terms and -** conditions see http://qt.digia.com/licensing. For further information -** use the contact form at http://qt.digia.com/contact-us. -** -** 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, Digia gives you certain additional -** rights. These rights are described in the Digia Qt LGPL Exception -** version 1.1, included in the file LGPL_EXCEPTION.txt in this package. -** -** GNU General Public License Usage -** Alternatively, this file may be used under the terms of the GNU -** General Public License version 3.0 as published by the Free Software -** Foundation and appearing in the file LICENSE.GPL included in the -** packaging of this file. Please review the following information to -** ensure the GNU General Public License version 3.0 requirements will be -** met: http://www.gnu.org/copyleft/gpl.html. -** -** -** $QT_END_LICENSE$ -** -****************************************************************************/ - - -#include - -#include -#include -#include -#include - -class tst_QAbstractPrintDialog : public QObject -{ -Q_OBJECT - -#if defined(QT_NO_PRINTER) || defined(QT_NO_PRINTDIALOG) -public slots: - void initTestCase(); -#else -private slots: - void getSetCheck(); - void setMinMax(); - void setFromTo(); -#endif -}; - -#if defined(QT_NO_PRINTER) || defined(QT_NO_PRINTDIALOG) -void tst_QAbstractPrintDialog::initTestCase() -{ - QSKIP("This test requires printing and print dialog support"); -} - -#else - -class MyAbstractPrintDialog : public QAbstractPrintDialog -{ -public: - MyAbstractPrintDialog(QPrinter *p) : QAbstractPrintDialog(p) {} - int exec() { return 0; } -}; - -// Testing get/set functions -void tst_QAbstractPrintDialog::getSetCheck() -{ - QPrinter printer; - MyAbstractPrintDialog obj1(&printer); - QCOMPARE(obj1.printer(), &printer); - // PrintDialogOptions QAbstractPrintDialog::enabledOptions() - // void QAbstractPrintDialog::setEnabledOptions(PrintDialogOptions) - obj1.setEnabledOptions(QAbstractPrintDialog::PrintDialogOptions(QAbstractPrintDialog::None)); - QCOMPARE(QAbstractPrintDialog::PrintDialogOptions(QAbstractPrintDialog::None), obj1.enabledOptions()); - obj1.setEnabledOptions(QAbstractPrintDialog::PrintDialogOptions(QAbstractPrintDialog::PrintToFile)); - QCOMPARE(QAbstractPrintDialog::PrintDialogOptions(QAbstractPrintDialog::PrintToFile), obj1.enabledOptions()); - obj1.setEnabledOptions(QAbstractPrintDialog::PrintDialogOptions(QAbstractPrintDialog::PrintSelection)); - QCOMPARE(QAbstractPrintDialog::PrintDialogOptions(QAbstractPrintDialog::PrintSelection), obj1.enabledOptions()); - obj1.setEnabledOptions(QAbstractPrintDialog::PrintDialogOptions(QAbstractPrintDialog::PrintPageRange)); - QCOMPARE(QAbstractPrintDialog::PrintDialogOptions(QAbstractPrintDialog::PrintPageRange), obj1.enabledOptions()); - obj1.setEnabledOptions(QAbstractPrintDialog::PrintDialogOptions(QAbstractPrintDialog::PrintCollateCopies)); - QCOMPARE(QAbstractPrintDialog::PrintDialogOptions(QAbstractPrintDialog::PrintCollateCopies), obj1.enabledOptions()); - - // PrintRange QAbstractPrintDialog::printRange() - // void QAbstractPrintDialog::setPrintRange(PrintRange) - obj1.setPrintRange(QAbstractPrintDialog::PrintRange(QAbstractPrintDialog::AllPages)); - QCOMPARE(QAbstractPrintDialog::PrintRange(QAbstractPrintDialog::AllPages), obj1.printRange()); - obj1.setPrintRange(QAbstractPrintDialog::PrintRange(QAbstractPrintDialog::Selection)); - QCOMPARE(QAbstractPrintDialog::PrintRange(QAbstractPrintDialog::Selection), obj1.printRange()); - obj1.setPrintRange(QAbstractPrintDialog::PrintRange(QAbstractPrintDialog::PageRange)); - QCOMPARE(QAbstractPrintDialog::PrintRange(QAbstractPrintDialog::PageRange), obj1.printRange()); -} - -void tst_QAbstractPrintDialog::setMinMax() -{ - QPrinter printer; - MyAbstractPrintDialog obj1(&printer); - obj1.setEnabledOptions(QAbstractPrintDialog::PrintDialogOptions(QAbstractPrintDialog::None)); - QEXPECT_FAIL("", "QTBUG-22637", Abort); - QCOMPARE(obj1.minPage(), 1); - QCOMPARE(obj1.maxPage(), INT_MAX); - QVERIFY(!obj1.isOptionEnabled(QAbstractPrintDialog::PrintPageRange)); - obj1.setMinMax(2,5); - QCOMPARE(obj1.minPage(), 2); - QCOMPARE(obj1.maxPage(), 5); - QVERIFY(obj1.enabledOptions() & QAbstractPrintDialog::PrintPageRange); - QVERIFY(obj1.isOptionEnabled(QAbstractPrintDialog::PrintPageRange)); -} - -void tst_QAbstractPrintDialog::setFromTo() -{ - QPrinter printer; - MyAbstractPrintDialog obj1(&printer); - QCOMPARE(obj1.fromPage(), 0); - QCOMPARE(obj1.toPage(), 0); - obj1.setMinMax(0,0); - QCOMPARE(obj1.minPage(), 0); - QCOMPARE(obj1.maxPage(), 0); - obj1.setFromTo(20,50); - QCOMPARE(obj1.fromPage(), 20); - QCOMPARE(obj1.toPage(), 50); - QCOMPARE(obj1.minPage(), 1); - QCOMPARE(obj1.maxPage(), 50); -} - -#endif - -QTEST_MAIN(tst_QAbstractPrintDialog) -#include "tst_qabstractprintdialog.moc" -- cgit v1.2.3 From e913972d5268a2b1e5bfc12a0a72e4811e764d86 Mon Sep 17 00:00:00 2001 From: Oto Magaldadze Date: Tue, 17 Sep 2013 14:02:49 +0400 Subject: added QAbstractSpinBox::setGroupSeparatorShown function. [ChangeLog][QtWidgets][QAbstractSpinBox] QTBUG-5142 - This will allow a group (thousand) separator to be shown in QSpinBox and QDoubleSpinBox widgets. Task-number: QTBUG-5142 Change-Id: I2e23f5f83c93bb092a2dbd784e06d17d40d42909 Reviewed-by: Marc Mutz --- .../widgets/qdoublespinbox/tst_qdoublespinbox.cpp | 46 ++++++++++++++++++++ .../auto/widgets/widgets/qspinbox/tst_qspinbox.cpp | 49 ++++++++++++++++++++++ 2 files changed, 95 insertions(+) (limited to 'tests') diff --git a/tests/auto/widgets/widgets/qdoublespinbox/tst_qdoublespinbox.cpp b/tests/auto/widgets/widgets/qdoublespinbox/tst_qdoublespinbox.cpp index b880ebe078..49f058862d 100644 --- a/tests/auto/widgets/widgets/qdoublespinbox/tst_qdoublespinbox.cpp +++ b/tests/auto/widgets/widgets/qdoublespinbox/tst_qdoublespinbox.cpp @@ -145,6 +145,9 @@ private slots: void taskQTBUG_6670_selectAllWithPrefix(); void taskQTBUG_6496_fiddlingWithPrecision(); + void setGroupSeparatorShown_data(); + void setGroupSeparatorShown(); + public slots: void valueChangedHelper(const QString &); void valueChangedHelper(double); @@ -156,6 +159,9 @@ private: typedef QList DoubleList; +Q_DECLARE_METATYPE(QLocale::Language) +Q_DECLARE_METATYPE(QLocale::Country) + tst_QDoubleSpinBox::tst_QDoubleSpinBox() { @@ -1099,5 +1105,45 @@ void tst_QDoubleSpinBox::taskQTBUG_6496_fiddlingWithPrecision() QCOMPARE(dsb.maximum(), 0.991); } +void tst_QDoubleSpinBox::setGroupSeparatorShown_data() +{ + QTest::addColumn("lang"); + QTest::addColumn("country"); + + QTest::newRow("data0") << QLocale::English << QLocale::UnitedStates; + QTest::newRow("data1") << QLocale::Swedish << QLocale::Sweden; + QTest::newRow("data2") << QLocale::German << QLocale::Germany; + QTest::newRow("data3") << QLocale::Georgian << QLocale::Georgia; + QTest::newRow("data3") << QLocale::Macedonian << QLocale::Macedonia; +} + +void tst_QDoubleSpinBox::setGroupSeparatorShown() +{ + QFETCH(QLocale::Language, lang); + QFETCH(QLocale::Country, country); + + QLocale loc(lang, country); + QLocale::setDefault(loc); + DoubleSpinBox spinBox; + spinBox.setMaximum(99999999); + spinBox.setValue(1300000.00); + spinBox.setGroupSeparatorShown(true); + QCOMPARE(spinBox.lineEdit()->text(), spinBox.locale().toString(1300000.00, 'f', 2)); + QCOMPARE(spinBox.isGroupSeparatorShown(), true); + QCOMPARE(spinBox.textFromValue(23421),spinBox.locale().toString(23421.00, 'f', 2)); + + spinBox.setGroupSeparatorShown(false); + QCOMPARE(spinBox.lineEdit()->text(), spinBox.locale().toString(1300000.00, 'f', 2).remove( + spinBox.locale().groupSeparator())); + QCOMPARE(spinBox.isGroupSeparatorShown(), false); + + spinBox.setMaximum(72000); + spinBox.lineEdit()->setText(spinBox.locale().toString(32000.64, 'f', 2)); + QCOMPARE(spinBox.value()+1000, 33000.64); + + spinBox.lineEdit()->setText(spinBox.locale().toString(32000.44, 'f', 2)); + QCOMPARE(spinBox.value()+1000, 33000.44); +} + QTEST_MAIN(tst_QDoubleSpinBox) #include "tst_qdoublespinbox.moc" diff --git a/tests/auto/widgets/widgets/qspinbox/tst_qspinbox.cpp b/tests/auto/widgets/widgets/qspinbox/tst_qspinbox.cpp index 004fdda5ef..1c97686668 100644 --- a/tests/auto/widgets/widgets/qspinbox/tst_qspinbox.cpp +++ b/tests/auto/widgets/widgets/qspinbox/tst_qspinbox.cpp @@ -142,6 +142,10 @@ private slots: void taskQTBUG_5008_textFromValueAndValidate(); void lineEditReturnPressed(); + + void setGroupSeparatorShown_data(); + void setGroupSeparatorShown(); + public slots: void valueChangedHelper(const QString &); void valueChangedHelper(int); @@ -152,6 +156,9 @@ private: typedef QList IntList; +Q_DECLARE_METATYPE(QLocale::Language) +Q_DECLARE_METATYPE(QLocale::Country) + // Testing get/set functions void tst_QSpinBox::getSetCheck() { @@ -1111,5 +1118,47 @@ void tst_QSpinBox::lineEditReturnPressed() QCOMPARE(spyCurrentChanged.count(), 1); } +void tst_QSpinBox::setGroupSeparatorShown_data() +{ + QTest::addColumn("lang"); + QTest::addColumn("country"); + + QTest::newRow("data0") << QLocale::English << QLocale::UnitedStates; + QTest::newRow("data1") << QLocale::Swedish << QLocale::Sweden; + QTest::newRow("data2") << QLocale::German << QLocale::Germany; + QTest::newRow("data3") << QLocale::Georgian << QLocale::Georgia; + QTest::newRow("data3") << QLocale::Macedonian << QLocale::Macedonia; +} + +void tst_QSpinBox::setGroupSeparatorShown() +{ + QFETCH(QLocale::Language, lang); + QFETCH(QLocale::Country, country); + + QLocale loc(lang, country); + QLocale::setDefault(loc); + SpinBox spinBox; + spinBox.setMaximum(99999); + spinBox.setValue(13000); + spinBox.setGroupSeparatorShown(true); + QCOMPARE(spinBox.lineEdit()->text(), spinBox.locale().toString(13000)); + QCOMPARE(spinBox.isGroupSeparatorShown(), true); + QCOMPARE(spinBox.textFromValue(23421),spinBox.locale().toString(23421)); + + spinBox.setGroupSeparatorShown(false); + QCOMPARE(spinBox.lineEdit()->text(), QStringLiteral("13000")); + QCOMPARE(spinBox.isGroupSeparatorShown(), false); + + spinBox.setMaximum(72000); + spinBox.lineEdit()->setText(spinBox.locale().toString(32000)); + QCOMPARE(spinBox.value()+1000, 33000); + + spinBox.lineEdit()->setText(QStringLiteral("32000")); + QCOMPARE(spinBox.value()+1000, 33000); + + spinBox.lineEdit()->setText(QStringLiteral("32,000")); + QCOMPARE(spinBox.value()+1000, 33000); +} + QTEST_MAIN(tst_QSpinBox) #include "tst_qspinbox.moc" -- cgit v1.2.3 From ed827acc27530a97b84685920615359010d74f48 Mon Sep 17 00:00:00 2001 From: Marc Mutz Date: Thu, 1 Mar 2012 18:52:32 +0100 Subject: QSignalBlocker: (new) RAII class for QObject::blockSignals() I don't think I ever worked on a project of non-trivial size that didn't at some point add a QSignalBlocker. This commit adds code, tests and documentation. Later commits will convert naked blockSignals() calls to use QSignalBlocker. The implementation is purely inline to avoid the heavy overhead of cross-dll function calls for this miniscule task. This should not be a problem because QSignalBlocker only uses public API and a pattern that we anyway need to keep working until Qt 6, at least, so even changing the implementation later will be no problem as the old implementation lurking in non-recompiled code will be acceptable, too. This implementation is an evolution from KDTools' KDSignalBlocker, with the following changes: - Implements unblock() and reblock() - Uses the return value of blockSignals() instead of a separate signalsBlocked() call. Change-Id: I1933dfd72a0f5190324be377cfca3c54cf3d6828 Reviewed-by: Olivier Goffart --- tests/auto/corelib/kernel/qobject/tst_qobject.cpp | 49 +++++++++++++++++++++++ 1 file changed, 49 insertions(+) (limited to 'tests') diff --git a/tests/auto/corelib/kernel/qobject/tst_qobject.cpp b/tests/auto/corelib/kernel/qobject/tst_qobject.cpp index 05d81c2bd1..f429500077 100644 --- a/tests/auto/corelib/kernel/qobject/tst_qobject.cpp +++ b/tests/auto/corelib/kernel/qobject/tst_qobject.cpp @@ -102,6 +102,7 @@ private slots: #ifndef QT_NO_PROCESS void recursiveSignalEmission(); #endif + void signalBlocking(); void blockingQueuedConnection(); void childEvents(); void installEventFilter(); @@ -2979,6 +2980,54 @@ void tst_QObject::recursiveSignalEmission() } #endif +void tst_QObject::signalBlocking() +{ + SenderObject sender; + ReceiverObject receiver; + + receiver.connect(&sender, SIGNAL(signal1()), SLOT(slot1())); + + sender.emitSignal1(); + QVERIFY(receiver.called(1)); + receiver.reset(); + + { + QSignalBlocker blocker(&sender); + + sender.emitSignal1(); + QVERIFY(!receiver.called(1)); + receiver.reset(); + + sender.blockSignals(false); + + sender.emitSignal1(); + QVERIFY(receiver.called(1)); + receiver.reset(); + + sender.blockSignals(true); + + sender.emitSignal1(); + QVERIFY(!receiver.called(1)); + receiver.reset(); + + blocker.unblock(); + + sender.emitSignal1(); + QVERIFY(receiver.called(1)); + receiver.reset(); + + blocker.reblock(); + + sender.emitSignal1(); + QVERIFY(!receiver.called(1)); + receiver.reset(); + } + + sender.emitSignal1(); + QVERIFY(receiver.called(1)); + receiver.reset(); +} + void tst_QObject::blockingQueuedConnection() { { -- cgit v1.2.3 From a9b6a78e54670a70b96c122b10ad7bd64d166514 Mon Sep 17 00:00:00 2001 From: David Faure Date: Mon, 24 Jun 2013 19:20:24 +0200 Subject: QThreadPool: fix race at time of thread expiry. The current synchronization mechanism was racy: decrementing waitingThreads and then hoping that the wakeOne will wake a thread before its expiry timeout happens. In other words, on timeout, a just-assigned task would never run. And then no other task would run, if maxThreadCount is reached. Fixed by using a queue of waiting threads (rather than just a count), and by moving the wait condition into the thread itself, so we know precisely which one we're waking up, and we can remove it from the set of waiting threads before waking it up, and therefore it can determine on wakeup whether it has work to do (caller removed it from the queue) or it expired (it's still in the queue). This is reliable, whereas the return value from QWaitCondition::wait isn't reliable, when the main thread has already decided that this thread has work to do. Task-number: QTBUG-3786 Change-Id: I1eac5d6c309daed7f483ac7a8074297bfda6ee32 Reviewed-by: Thiago Macieira --- .../corelib/thread/qthreadpool/tst_qthreadpool.cpp | 25 ++++++++++++++++++---- 1 file changed, 21 insertions(+), 4 deletions(-) (limited to 'tests') diff --git a/tests/auto/corelib/thread/qthreadpool/tst_qthreadpool.cpp b/tests/auto/corelib/thread/qthreadpool/tst_qthreadpool.cpp index 4a9932798c..f43149c3eb 100644 --- a/tests/auto/corelib/thread/qthreadpool/tst_qthreadpool.cpp +++ b/tests/auto/corelib/thread/qthreadpool/tst_qthreadpool.cpp @@ -80,6 +80,7 @@ private slots: void destruction(); void threadRecycling(); void expiryTimeout(); + void expiryTimeoutRace(); #ifndef QT_NO_EXCEPTIONS void exceptions(); #endif @@ -315,7 +316,7 @@ class ExpiryTimeoutTask : public QRunnable { public: QThread *thread; - int runCount; + QAtomicInt runCount; QSemaphore semaphore; ExpiryTimeoutTask() @@ -327,7 +328,7 @@ public: void run() { thread = QThread::currentThread(); - ++runCount; + runCount.ref(); semaphore.release(); } }; @@ -346,7 +347,7 @@ void tst_QThreadPool::expiryTimeout() // run the task threadPool.start(&task); QVERIFY(task.semaphore.tryAcquire(1, 10000)); - QCOMPARE(task.runCount, 1); + QCOMPARE(task.runCount.load(), 1); QVERIFY(!task.thread->wait(100)); // thread should expire QThread *firstThread = task.thread; @@ -355,7 +356,7 @@ void tst_QThreadPool::expiryTimeout() // run task again, thread should be restarted threadPool.start(&task); QVERIFY(task.semaphore.tryAcquire(1, 10000)); - QCOMPARE(task.runCount, 2); + QCOMPARE(task.runCount.load(), 2); QVERIFY(!task.thread->wait(100)); // thread should expire again QVERIFY(task.thread->wait(10000)); @@ -368,6 +369,22 @@ void tst_QThreadPool::expiryTimeout() QCOMPARE(threadPool.expiryTimeout(), expiryTimeout); } +void tst_QThreadPool::expiryTimeoutRace() // QTBUG-3786 +{ + ExpiryTimeoutTask task; + + QThreadPool threadPool; + threadPool.setMaxThreadCount(1); + threadPool.setExpiryTimeout(50); + const int numTasks = 20; + for (int i = 0; i < numTasks; ++i) { + threadPool.start(&task); + QThread::msleep(50); // exactly the same as the expiry timeout + } + QCOMPARE(task.runCount.load(), numTasks); + QVERIFY(threadPool.waitForDone(2000)); +} + #ifndef QT_NO_EXCEPTIONS class ExceptionTask : public QRunnable { -- cgit v1.2.3 From 8120083436d4ba2aaf8fbcd422f7e046e6e5e40f Mon Sep 17 00:00:00 2001 From: Andrew Knight Date: Fri, 18 Oct 2013 09:26:52 +0300 Subject: Replace use of putenv in test case This should be using qputenv; putenv is deprecated on MSVC. Change-Id: I7c27cf5f7955624fa3553b7a34ab11c6fae462b8 Reviewed-by: Oliver Wolff --- tests/auto/corelib/codecs/qtextcodec/echo/main.cpp | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) (limited to 'tests') diff --git a/tests/auto/corelib/codecs/qtextcodec/echo/main.cpp b/tests/auto/corelib/codecs/qtextcodec/echo/main.cpp index 55c831bd35..09c3ac3c09 100644 --- a/tests/auto/corelib/codecs/qtextcodec/echo/main.cpp +++ b/tests/auto/corelib/codecs/qtextcodec/echo/main.cpp @@ -47,8 +47,7 @@ int main(int argc, char **argv) { - static char lc_all[] = "LC_ALL=C"; - putenv(lc_all); + qputenv("LC_ALL", "C"); QCoreApplication app(argc, argv); QString string(QChar(0x410)); -- cgit v1.2.3 From 04d1da1c1b4d834326a961371f9b34f3fbe9eaa4 Mon Sep 17 00:00:00 2001 From: Andrew Knight Date: Tue, 15 Oct 2013 23:27:32 +0300 Subject: Fix QTimeZone test compilation on WinRT WinRT doesn't use the Windows Timezone backend, so don't build the Windows test. Change-Id: I32620546de3ad1f19402cc1359f8038200c915ec Reviewed-by: Oliver Wolff --- tests/auto/corelib/tools/qtimezone/tst_qtimezone.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) (limited to 'tests') diff --git a/tests/auto/corelib/tools/qtimezone/tst_qtimezone.cpp b/tests/auto/corelib/tools/qtimezone/tst_qtimezone.cpp index ed08bcefbf..28245b5e6a 100644 --- a/tests/auto/corelib/tools/qtimezone/tst_qtimezone.cpp +++ b/tests/auto/corelib/tools/qtimezone/tst_qtimezone.cpp @@ -746,7 +746,7 @@ void tst_QTimeZone::macTest() void tst_QTimeZone::winTest() { -#if defined(QT_BUILD_INTERNAL) && defined(Q_OS_WIN) +#if defined(QT_BUILD_INTERNAL) && defined(Q_OS_WIN) && !defined(Q_OS_WINRT) // Known datetimes qint64 std = QDateTime(QDate(2012, 1, 1), QTime(0, 0, 0), Qt::UTC).toMSecsSinceEpoch(); qint64 dst = QDateTime(QDate(2012, 6, 1), QTime(0, 0, 0), Qt::UTC).toMSecsSinceEpoch(); -- cgit v1.2.3 From 18bb8d6b16548c669f8dfe33a865f7f1cff80e1d Mon Sep 17 00:00:00 2001 From: Maurice Kalinowski Date: Thu, 7 Nov 2013 09:50:44 +0100 Subject: compile fix if no QFileSystemWatcher is available Change-Id: I22d0cd90da96e6b6f651768955c7f445dfbcf6bc Reviewed-by: Friedemann Kleint Reviewed-by: Andrew Knight Reviewed-by: Oliver Wolff --- tests/auto/widgets/kernel/qapplication/tst_qapplication.cpp | 4 ++++ 1 file changed, 4 insertions(+) (limited to 'tests') diff --git a/tests/auto/widgets/kernel/qapplication/tst_qapplication.cpp b/tests/auto/widgets/kernel/qapplication/tst_qapplication.cpp index f2fa1f87fa..16bd4a6f7b 100644 --- a/tests/auto/widgets/kernel/qapplication/tst_qapplication.cpp +++ b/tests/auto/widgets/kernel/qapplication/tst_qapplication.cpp @@ -2274,7 +2274,9 @@ Q_GLOBAL_STATIC(QLocale, tst_qapp_locale); #ifndef QT_NO_PROCESS Q_GLOBAL_STATIC(QProcess, tst_qapp_process); #endif +#ifndef QT_NO_FILESYSTEMWATCHER Q_GLOBAL_STATIC(QFileSystemWatcher, tst_qapp_fileSystemWatcher); +#endif #ifndef QT_NO_SHAREDMEMORY Q_GLOBAL_STATIC(QSharedMemory, tst_qapp_sharedMemory); #endif @@ -2297,7 +2299,9 @@ void tst_QApplication::globalStaticObjectDestruction() #ifndef QT_NO_PROCESS QVERIFY(tst_qapp_process()); #endif +#ifndef QT_NO_FILESYSTEMWATCHER QVERIFY(tst_qapp_fileSystemWatcher()); +#endif #ifndef QT_NO_SHAREDMEMORY QVERIFY(tst_qapp_sharedMemory()); #endif -- cgit v1.2.3 From 459fb114818eaf6a209e80ff7d59ccefeee881e3 Mon Sep 17 00:00:00 2001 From: Stephen Kelly Date: Mon, 11 Nov 2013 14:52:11 +0100 Subject: uic: Accept an -include argument to generate a #include. Change-Id: I2854619ab995b4ba3c820fec58e998ad04ac9858 Reviewed-by: Friedemann Kleint --- .../translation/Dialog_without_Buttons_tr.h | 50 +++++++++++++++++++++ tests/auto/tools/uic/tst_uic.cpp | 52 ++++++++++++++++++++++ 2 files changed, 102 insertions(+) create mode 100644 tests/auto/tools/uic/baseline/translation/Dialog_without_Buttons_tr.h (limited to 'tests') diff --git a/tests/auto/tools/uic/baseline/translation/Dialog_without_Buttons_tr.h b/tests/auto/tools/uic/baseline/translation/Dialog_without_Buttons_tr.h new file mode 100644 index 0000000000..597728e207 --- /dev/null +++ b/tests/auto/tools/uic/baseline/translation/Dialog_without_Buttons_tr.h @@ -0,0 +1,50 @@ +/******************************************************************************** +** Form generated from reading UI file 'Dialog_without_Buttons.ui' +** +** Created by: Qt User Interface Compiler version 5.3.0 +** +** WARNING! All changes made in this file will be lost when recompiling UI file! +********************************************************************************/ + +#ifndef DIALOG_WITHOUT_BUTTONS_TR_H +#define DIALOG_WITHOUT_BUTTONS_TR_H + +#include +#include +#include +#include +#include +#include +#include + +QT_BEGIN_NAMESPACE + +class Ui_Dialog +{ +public: + + void setupUi(QDialog *Dialog) + { + if (Dialog->objectName().isEmpty()) + Dialog->setObjectName(QStringLiteral("Dialog")); + Dialog->resize(400, 300); + + retranslateUi(Dialog); + + QMetaObject::connectSlotsByName(Dialog); + } // setupUi + + void retranslateUi(QDialog *Dialog) + { + Dialog->setWindowTitle(i18n("Dialog", 0)); + } // retranslateUi + +}; + +namespace Ui { + class Dialog: public Ui_Dialog {}; +} // namespace Ui + +QT_END_NAMESPACE + +#endif // DIALOG_WITHOUT_BUTTONS_TR_H diff --git a/tests/auto/tools/uic/tst_uic.cpp b/tests/auto/tools/uic/tst_uic.cpp index c6e8466d89..02a19c0c33 100644 --- a/tests/auto/tools/uic/tst_uic.cpp +++ b/tests/auto/tools/uic/tst_uic.cpp @@ -64,9 +64,13 @@ private Q_SLOTS: void run(); void run_data() const; + void runTranslation(); + void compare(); void compare_data() const; + void runCompare(); + private: const QString m_command; QString m_baseline; @@ -220,5 +224,53 @@ void tst_uic::compare_data() const } } +void tst_uic::runTranslation() +{ + QProcess process; + + QDir baseline(m_baseline); + + QDir generated(m_generated.path()); + generated.mkdir(QLatin1String("translation")); + QString generatedFile = generated.absolutePath() + QLatin1String("/translation/Dialog_without_Buttons_tr.h"); + + process.start(m_command, QStringList(baseline.filePath("Dialog_without_Buttons.ui")) + << QString(QLatin1String("-tr")) << "i18n" + << QString(QLatin1String("-include")) << "ki18n.h" + << QString(QLatin1String("-o")) << generatedFile); + QVERIFY2(process.waitForStarted(), msgProcessStartFailed(m_command, process.errorString())); + QVERIFY(process.waitForFinished()); + QCOMPARE(process.exitStatus(), QProcess::NormalExit); + QCOMPARE(process.exitCode(), 0); + QCOMPARE(QFileInfo(generatedFile).exists(), true); +} + + +void tst_uic::runCompare() +{ + QFile orgFile(m_baseline + QLatin1String("/translation/Dialog_without_Buttons_tr.h")); + + QDir generated(m_generated.path()); + QFile genFile(generated.absolutePath() + QLatin1String("/translation/Dialog_without_Buttons_tr.h")); + + if (!orgFile.open(QIODevice::ReadOnly | QIODevice::Text)) { + QString err(QLatin1String("Could not read file: %1...")); + QFAIL(err.arg(orgFile.fileName()).toUtf8()); + } + + if (!genFile.open(QIODevice::ReadOnly | QIODevice::Text)) { + QString err(QLatin1String("Could not read file: %1...")); + QFAIL(err.arg(genFile.fileName()).toUtf8()); + } + + QString originalFile = orgFile.readAll(); + originalFile.replace(QRegExp(QLatin1String("Created by: Qt User Interface Compiler version [.\\d]{5,5}")), ""); + + QString generatedFile = genFile.readAll(); + generatedFile.replace(QRegExp(QLatin1String("Created by: Qt User Interface Compiler version [.\\d]{5,5}")), ""); + + QCOMPARE(generatedFile, originalFile); +} + QTEST_MAIN(tst_uic) #include "tst_uic.moc" -- cgit v1.2.3 From 0de83705316d82273e0d445119ab1d4ee1c2f980 Mon Sep 17 00:00:00 2001 From: Maurice Kalinowski Date: Mon, 11 Nov 2013 15:37:49 +0100 Subject: Enable qfile tests for platforms without network Currently network is only required to gather the host info for one test case. That does not justify to disable all other tests, which can provide useful information on the state when doing a port. Hence disable that testcase if no network is available. Change-Id: I202ef49b3e07ae69ec85ee0432ae0a771a90e816 Reviewed-by: Friedemann Kleint --- tests/auto/corelib/io/io.pro | 1 - tests/auto/corelib/io/qfile/test/test.pro | 5 ++++- tests/auto/corelib/io/qfile/tst_qfile.cpp | 4 ++-- 3 files changed, 6 insertions(+), 4 deletions(-) (limited to 'tests') diff --git a/tests/auto/corelib/io/io.pro b/tests/auto/corelib/io/io.pro index 11815c6160..259463f976 100644 --- a/tests/auto/corelib/io/io.pro +++ b/tests/auto/corelib/io/io.pro @@ -43,7 +43,6 @@ SUBDIRS=\ qsettings !qtHaveModule(network): SUBDIRS -= \ - qfile \ qiodevice \ qprocess \ qtextstream diff --git a/tests/auto/corelib/io/qfile/test/test.pro b/tests/auto/corelib/io/qfile/test/test.pro index e282bd091c..03863e9943 100644 --- a/tests/auto/corelib/io/qfile/test/test.pro +++ b/tests/auto/corelib/io/qfile/test/test.pro @@ -1,7 +1,10 @@ CONFIG += testcase CONFIG += parallel_test CONFIG -= app_bundle debug_and_release_target -QT = core-private core network testlib +QT = core-private core testlib +qtHaveModule(network): QT += network +else: DEFINES += QT_NO_NETWORK + TARGET = ../tst_qfile SOURCES = ../tst_qfile.cpp wince*: SOURCES += $$QT_SOURCE_TREE/src/corelib/kernel/qfunctions_wince.cpp diff --git a/tests/auto/corelib/io/qfile/tst_qfile.cpp b/tests/auto/corelib/io/qfile/tst_qfile.cpp index 78cb27ee30..77ac4bcd86 100644 --- a/tests/auto/corelib/io/qfile/tst_qfile.cpp +++ b/tests/auto/corelib/io/qfile/tst_qfile.cpp @@ -59,7 +59,7 @@ extern Q_CORE_EXPORT int qt_ntfs_permission_lookup; QT_END_NAMESPACE #endif -#if !defined(Q_OS_WINCE) +#if !defined(Q_OS_WINCE) && !defined(QT_NO_NETWORK) #include #endif #include @@ -2245,7 +2245,7 @@ void tst_QFile::writeLargeDataBlock_data() QTest::newRow("localfile-Fd") << "./largeblockfile.txt" << (int)OpenFd; QTest::newRow("localfile-Stream") << "./largeblockfile.txt" << (int)OpenStream; -#if defined(Q_OS_WIN) && !defined(Q_OS_WINCE) +#if defined(Q_OS_WIN) && !defined(Q_OS_WINCE) && !defined(QT_NO_NETWORK) // Some semi-randomness to avoid collisions. QTest::newRow("unc file") << QString("//" + QtNetworkSettings::winServerName() + "/TESTSHAREWRITABLE/largefile-%1-%2.txt") -- cgit v1.2.3 From c784ec00faf022476c10fc622ca43f4c68d544e1 Mon Sep 17 00:00:00 2001 From: Maurice Kalinowski Date: Tue, 12 Nov 2013 11:48:52 +0100 Subject: WinRT: implement QStandardPaths need to leave some items out like media folder access, as this is not available by default and also requires certain capabilities to use those. Furthermore updated the tests for sandboxing as well as skip cmd.exe related tests as that does not exist on WinRT. Change-Id: I992b1e195b79615bea0be4f84f56cfb8f0d902bf Reviewed-by: Oliver Wolff --- tests/auto/corelib/io/qstandardpaths/tst_qstandardpaths.cpp | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) (limited to 'tests') diff --git a/tests/auto/corelib/io/qstandardpaths/tst_qstandardpaths.cpp b/tests/auto/corelib/io/qstandardpaths/tst_qstandardpaths.cpp index 9ac1526f07..c3a1ad206d 100644 --- a/tests/auto/corelib/io/qstandardpaths/tst_qstandardpaths.cpp +++ b/tests/auto/corelib/io/qstandardpaths/tst_qstandardpaths.cpp @@ -283,9 +283,9 @@ void tst_qstandardpaths::testDataLocation() { // On all platforms, DataLocation should be GenericDataLocation / organization name / app name // This allows one app to access the data of another app. - // Blackberry OS is an exception to this case, owing to the fact that + // Blackberry OS and WinRT are an exception to this case, owing to the fact that // applications are sandboxed. -#ifndef Q_OS_BLACKBERRY +#if !defined(Q_OS_BLACKBERRY) && !defined(Q_OS_WINRT) const QString base = QStandardPaths::writableLocation(QStandardPaths::GenericDataLocation); QCOMPARE(QStandardPaths::writableLocation(QStandardPaths::DataLocation), base + "/tst_qstandardpaths"); QCoreApplication::instance()->setOrganizationName("Qt"); @@ -329,6 +329,7 @@ void tst_qstandardpaths::testFindExecutable_data() QTest::addColumn("needle"); QTest::addColumn("expected"); #ifdef Q_OS_WIN +# ifndef Q_OS_WINRT const QFileInfo cmdFi = QFileInfo(QDir::cleanPath(QString::fromLocal8Bit(qgetenv("COMSPEC")))); const QString cmdPath = cmdFi.absoluteFilePath(); @@ -352,6 +353,7 @@ void tst_qstandardpaths::testFindExecutable_data() QTest::newRow("win8-logo-nosuffix") << QString() << logo << logoPath; } +# endif // Q_OS_WINRT #else const QFileInfo shFi = findSh(); Q_ASSERT(shFi.exists()); -- cgit v1.2.3 From 3d2691ae77a5d18a8788540f4e7bf1352261a565 Mon Sep 17 00:00:00 2001 From: Olivier Goffart Date: Thu, 17 Oct 2013 16:01:17 +0200 Subject: Benchmark for QWaitCondition Change-Id: I89fc0819324c12030bc23ba080b21f3d8d5c9852 Reviewed-by: Thiago Macieira --- .../thread/qwaitcondition/tst_qwaitcondition.cpp | 174 +++++++-------------- tests/benchmarks/corelib/thread/thread.pro | 1 + 2 files changed, 54 insertions(+), 121 deletions(-) (limited to 'tests') diff --git a/tests/benchmarks/corelib/thread/qwaitcondition/tst_qwaitcondition.cpp b/tests/benchmarks/corelib/thread/qwaitcondition/tst_qwaitcondition.cpp index 55967b9215..d5919ebe5a 100644 --- a/tests/benchmarks/corelib/thread/qwaitcondition/tst_qwaitcondition.cpp +++ b/tests/benchmarks/corelib/thread/qwaitcondition/tst_qwaitcondition.cpp @@ -55,156 +55,88 @@ public: } private slots: - void oscillate_data(); - void oscillate(); - - void thrash_data(); - void thrash(); - -public: - static QWaitCondition local, remote; - enum Turn {LocalTurn, RemoteTurn}; - static Turn turn; + void oscillate_mutex_data(); + void oscillate_mutex(); + void oscillate_writelock_data(); + void oscillate_writelock(); }; -QWaitCondition tst_QWaitCondition::local; -QWaitCondition tst_QWaitCondition::remote; -tst_QWaitCondition::Turn tst_QWaitCondition::turn = tst_QWaitCondition::LocalTurn; +int turn; +const int threadCount = 10; +QWaitCondition cond; + +template class OscillateThread : public QThread { public: - bool m_done; - bool m_useMutex; - unsigned long m_timeout; - bool m_wakeOne; - int count; - - OscillateThread(bool useMutex, unsigned long timeout, bool wakeOne) - : m_done(false), m_useMutex(useMutex), m_timeout(timeout), m_wakeOne(wakeOne) - {} + Mutex *mutex; + int m_threadid; + int timeout; + void run() { - QMutex mtx; - QReadWriteLock rwl; - count = 0; - - forever { - if (m_done) - break; - if (m_useMutex) { - mtx.lock(); - while (tst_QWaitCondition::turn == tst_QWaitCondition::LocalTurn) - tst_QWaitCondition::remote.wait(&mtx, m_timeout); - mtx.unlock(); - } else { - rwl.lockForWrite(); - while (tst_QWaitCondition::turn == tst_QWaitCondition::LocalTurn) - tst_QWaitCondition::remote.wait(&rwl, m_timeout); - rwl.unlock(); + for (int count = 0; count < 5000; ++count) { + + Locker lock(mutex); + while (m_threadid != turn) { + cond.wait(mutex, timeout); } - tst_QWaitCondition::turn = tst_QWaitCondition::LocalTurn; - if (m_wakeOne) - tst_QWaitCondition::local.wakeOne(); - else - tst_QWaitCondition::local.wakeAll(); - count++; + turn = (turn+1) % threadCount; + cond.wakeAll(); } } }; -void tst_QWaitCondition::oscillate_data() -{ - QTest::addColumn("useMutex"); - QTest::addColumn("timeout"); - QTest::addColumn("wakeOne"); - - QTest::newRow("mutex, timeout, one") << true << 1000ul << true; - QTest::newRow("readWriteLock, timeout, one") << false << 1000ul << true; - QTest::newRow("mutex, timeout, all") << true << 1000ul << false; - QTest::newRow("readWriteLock, timeout, all") << false << 1000ul << false; - QTest::newRow("mutex, forever, one") << true << ULONG_MAX << true; - QTest::newRow("readWriteLock, forever, one") << false << ULONG_MAX << true; - QTest::newRow("mutex, forever, all") << true << ULONG_MAX << false; - QTest::newRow("readWriteLock, forever, all") << false << ULONG_MAX << false; -} - -void tst_QWaitCondition::oscillate() -{ - QMutex mtx; - QReadWriteLock rwl; +template +void oscillate(unsigned long timeout) { - QFETCH(bool, useMutex); - QFETCH(unsigned long, timeout); - QFETCH(bool, wakeOne); - - turn = LocalTurn; - OscillateThread thrd(useMutex, timeout, wakeOne); - thrd.start(); + OscillateThread thrd[threadCount]; + Mutex m; + for (int i = 0; i < threadCount; ++i) { + thrd[i].mutex = &m; + thrd[i].m_threadid = i; + thrd[i].timeout = timeout; + } QBENCHMARK { - if (useMutex) - mtx.lock(); - else - rwl.lockForWrite(); - turn = RemoteTurn; - if (wakeOne) - remote.wakeOne(); - else - remote.wakeAll(); - if (useMutex) { - while (turn == RemoteTurn) - local.wait(&mtx, timeout); - mtx.unlock(); - } else { - while (turn == RemoteTurn) - local.wait(&rwl, timeout); - rwl.unlock(); + for (int i = 0; i < threadCount; ++i) { + thrd[i].start(); + } + for (int i = 0; i < threadCount; ++i) { + thrd[i].wait(); } } - thrd.m_done = true; - remote.wakeAll(); - thrd.wait(); - - QCOMPARE(0, 0); } -void tst_QWaitCondition::thrash_data() +void tst_QWaitCondition::oscillate_mutex_data() { - oscillate_data(); + QTest::addColumn("timeout"); + + QTest::newRow("0") << 0ul; + QTest::newRow("1") << 1ul; + QTest::newRow("1000") << 1000ul; + QTest::newRow("forever") << ULONG_MAX; } -void tst_QWaitCondition::thrash() +void tst_QWaitCondition::oscillate_mutex() { - QMutex mtx; - mtx.lock(); - - QFETCH(bool, useMutex); QFETCH(unsigned long, timeout); - QFETCH(bool, wakeOne); - - turn = LocalTurn; - OscillateThread thrd(useMutex, timeout, wakeOne); - thrd.start(); - local.wait(&mtx, 1000ul); - mtx.unlock(); - - QBENCHMARK { - turn = RemoteTurn; - if (wakeOne) - remote.wakeOne(); - else - remote.wakeAll(); - } + oscillate(timeout); +} - thrd.m_done = true; - turn = RemoteTurn; - remote.wakeAll(); - thrd.wait(); +void tst_QWaitCondition::oscillate_writelock_data() +{ + oscillate_mutex_data(); +} - QCOMPARE(0, 0); +void tst_QWaitCondition::oscillate_writelock() +{ + QFETCH(unsigned long, timeout); + oscillate(timeout); } + QTEST_MAIN(tst_QWaitCondition) #include "tst_qwaitcondition.moc" diff --git a/tests/benchmarks/corelib/thread/thread.pro b/tests/benchmarks/corelib/thread/thread.pro index d7f65a911d..4e602ceb4e 100644 --- a/tests/benchmarks/corelib/thread/thread.pro +++ b/tests/benchmarks/corelib/thread/thread.pro @@ -3,3 +3,4 @@ SUBDIRS = \ qmutex \ qthreadstorage \ qthreadpool \ + qwaitcondition \ -- cgit v1.2.3 From 943ae8bb701a8187d295b747ba82025c55ca9add Mon Sep 17 00:00:00 2001 From: Friedemann Kleint Date: Tue, 12 Nov 2013 15:03:54 +0100 Subject: Add overload of QTest::ignoreMessage() taking a QRegularExpression. Make it possible to match messages by a pattern. Change-Id: I713312e86db5471755459f1ecc43e8f1ac7a95fb Reviewed-by: Jason McDonald --- tests/auto/testlib/selftests/expected_warnings.lightxml | 14 ++++++++++++++ tests/auto/testlib/selftests/expected_warnings.txt | 6 +++++- tests/auto/testlib/selftests/expected_warnings.xml | 14 ++++++++++++++ tests/auto/testlib/selftests/expected_warnings.xunitxml | 11 ++++++++++- tests/auto/testlib/selftests/warnings/tst_warnings.cpp | 17 +++++++++++++++++ 5 files changed, 60 insertions(+), 2 deletions(-) (limited to 'tests') diff --git a/tests/auto/testlib/selftests/expected_warnings.lightxml b/tests/auto/testlib/selftests/expected_warnings.lightxml index ad786832ca..2ad9e97449 100644 --- a/tests/auto/testlib/selftests/expected_warnings.lightxml +++ b/tests/auto/testlib/selftests/expected_warnings.lightxml @@ -24,6 +24,12 @@ + + + + + + @@ -37,6 +43,14 @@ + + + + + + + + diff --git a/tests/auto/testlib/selftests/expected_warnings.txt b/tests/auto/testlib/selftests/expected_warnings.txt index d8064651b0..e73de980cb 100644 --- a/tests/auto/testlib/selftests/expected_warnings.txt +++ b/tests/auto/testlib/selftests/expected_warnings.txt @@ -7,10 +7,14 @@ QDEBUG : tst_Warnings::testWarnings() Debug QDEBUG : tst_Warnings::testWarnings() Debug QDEBUG : tst_Warnings::testWarnings() Baba QDEBUG : tst_Warnings::testWarnings() Baba +QDEBUG : tst_Warnings::testWarnings() Bubublabla +QWARN : tst_Warnings::testWarnings() Babablabla PASS : tst_Warnings::testWarnings() INFO : tst_Warnings::testMissingWarnings() Did not receive message: "Warning0" INFO : tst_Warnings::testMissingWarnings() Did not receive message: "Warning1" FAIL! : tst_Warnings::testMissingWarnings() Not all expected messages were received +INFO : tst_Warnings::testMissingWarningsRegularExpression() Did not receive any message matching: "Warning\s\d" +FAIL! : tst_Warnings::testMissingWarningsRegularExpression() Not all expected messages were received INFO : tst_Warnings::testMissingWarningsWithData(first row) Did not receive message: "Warning0" INFO : tst_Warnings::testMissingWarningsWithData(first row) Did not receive message: "Warning1" FAIL! : tst_Warnings::testMissingWarningsWithData(first row) Not all expected messages were received @@ -18,5 +22,5 @@ INFO : tst_Warnings::testMissingWarningsWithData(second row) Did not receive m INFO : tst_Warnings::testMissingWarningsWithData(second row) Did not receive message: "Warning1" FAIL! : tst_Warnings::testMissingWarningsWithData(second row) Not all expected messages were received PASS : tst_Warnings::cleanupTestCase() -Totals: 3 passed, 3 failed, 0 skipped +Totals: 3 passed, 4 failed, 0 skipped ********* Finished testing of tst_Warnings ********* diff --git a/tests/auto/testlib/selftests/expected_warnings.xml b/tests/auto/testlib/selftests/expected_warnings.xml index 8ad236b52a..14a45ca4fd 100644 --- a/tests/auto/testlib/selftests/expected_warnings.xml +++ b/tests/auto/testlib/selftests/expected_warnings.xml @@ -26,6 +26,12 @@ + + + + + + @@ -39,6 +45,14 @@ + + + + + + + + diff --git a/tests/auto/testlib/selftests/expected_warnings.xunitxml b/tests/auto/testlib/selftests/expected_warnings.xunitxml index 3e3b9ce18e..7be47174c6 100644 --- a/tests/auto/testlib/selftests/expected_warnings.xunitxml +++ b/tests/auto/testlib/selftests/expected_warnings.xunitxml @@ -1,5 +1,5 @@ - + @@ -12,12 +12,18 @@ + + + + + + @@ -34,8 +40,11 @@ + + + diff --git a/tests/auto/testlib/selftests/warnings/tst_warnings.cpp b/tests/auto/testlib/selftests/warnings/tst_warnings.cpp index 20f53fdc91..ff4357f11f 100644 --- a/tests/auto/testlib/selftests/warnings/tst_warnings.cpp +++ b/tests/auto/testlib/selftests/warnings/tst_warnings.cpp @@ -41,6 +41,7 @@ #include +#include #include class tst_Warnings: public QObject @@ -49,6 +50,7 @@ class tst_Warnings: public QObject private slots: void testWarnings(); void testMissingWarnings(); + void testMissingWarningsRegularExpression(); void testMissingWarningsWithData_data(); void testMissingWarningsWithData(); }; @@ -73,6 +75,13 @@ void tst_Warnings::testWarnings() qDebug("Baba"); qDebug("Bubu"); qDebug("Baba"); + + QTest::ignoreMessage(QtDebugMsg, QRegularExpression("^Bubu.*")); + QTest::ignoreMessage(QtWarningMsg, QRegularExpression("^Baba.*")); + qDebug("Bubublabla"); + qWarning("Babablabla"); + qDebug("Bubublabla"); + qWarning("Babablabla"); } void tst_Warnings::testMissingWarnings() @@ -84,6 +93,14 @@ void tst_Warnings::testMissingWarnings() qWarning("Warning2"); } +void tst_Warnings::testMissingWarningsRegularExpression() +{ + QTest::ignoreMessage(QtWarningMsg, QRegularExpression("Warning\\d\\d")); + QTest::ignoreMessage(QtWarningMsg, QRegularExpression("Warning\\s\\d")); + + qWarning("Warning11"); +} + void tst_Warnings::testMissingWarningsWithData_data() { QTest::addColumn("dummy"); -- cgit v1.2.3 From 92b2275c3d4bea4091057b9994d502dbdb64d28b Mon Sep 17 00:00:00 2001 From: Graham Coleman Date: Sat, 16 Nov 2013 08:26:53 +0100 Subject: remove finishEdit() call, fix double textChanged on delete There is a known bug where duplicate textChanged signals are triggered on backspace/delete. The bug has been seen on Windows, Mac, and Linux. Gabi showed that this duplicate signal is caused by two calls to finishEdit(), one direct and one nested, in QTextCursorPrivate::remove(). To attempt a fix, I removed the direct call and do not change the nested call. This change only affects text buffers when they receive remove commands. This seems to fix the problem, shown by the test project uploaded to the bug tracker and also in countTextChangedOnRemove in tests/auto/widgets/widgets/qtextedit/tst_qtextedit.cpp. Further analysis of finishEdit() and QTextCursorPrivate::remove(): finishEdit() calls signals contentsChanged() as long as a valid block is being edited. Remove() calls finishEdit for all non-table edits, so finishEdit will be called for most cases. Methods in the public QTextCursor all seem to set adjusted_anchor and anchor, none reading it directly, so I haven't found publicly observable consequences to "adjusted_anchor = anchor = position;". Task-number: QTBUG-15003 Change-Id: Ic35f25ee81c4007867b47cd8be03c146a673f86d Reviewed-by: Graham Coleman Reviewed-by: Marc Mutz --- tests/auto/widgets/widgets/qtextedit/tst_qtextedit.cpp | 15 +++++++++++++++ 1 file changed, 15 insertions(+) (limited to 'tests') diff --git a/tests/auto/widgets/widgets/qtextedit/tst_qtextedit.cpp b/tests/auto/widgets/widgets/qtextedit/tst_qtextedit.cpp index 11bb5c88a1..d06807eedb 100644 --- a/tests/auto/widgets/widgets/qtextedit/tst_qtextedit.cpp +++ b/tests/auto/widgets/widgets/qtextedit/tst_qtextedit.cpp @@ -203,6 +203,8 @@ private slots: void highlightLongLine(); + void countTextChangedOnRemove(); + private: void createSelection(); int blockCount() const; @@ -2499,6 +2501,19 @@ void tst_QTextEdit::highlightLongLine() QVERIFY(true); } +//check for bug 15003, are there multiple textChanged() signals on remove? +void tst_QTextEdit::countTextChangedOnRemove() +{ + QTextEdit edit; + edit.insertPlainText("Hello"); + + QSignalSpy spy(&edit, SIGNAL(textChanged())); + + QKeyEvent event(QEvent::KeyPress, Qt::Key_Backspace, Qt::NoModifier); + QCoreApplication::instance()->notify(&edit, &event); + + QCOMPARE(spy.count(), 1); +} QTEST_MAIN(tst_QTextEdit) #include "tst_qtextedit.moc" -- cgit v1.2.3 From 4a9092eaad34ca4788247c1ecb216f7d3b3d1d08 Mon Sep 17 00:00:00 2001 From: Dmitry Ashkadov Date: Fri, 11 Oct 2013 14:05:01 +0400 Subject: Add QVERIFY_EXCEPTION_THROWN macro for testing exceptions using QtTest New macro QVERIFY_EXCEPTION_THROWN may be used to check that some code really throws an exception of specified type. Change-Id: I7cf499c7c37a35407862bc604c6eb862c5f329d3 Reviewed-by: Friedemann Kleint Reviewed-by: Thiago Macieira Reviewed-by: Jason McDonald --- .../expected_verifyexceptionthrown.lightxml | 49 +++++++ .../selftests/expected_verifyexceptionthrown.txt | 21 +++ .../selftests/expected_verifyexceptionthrown.xml | 52 +++++++ .../expected_verifyexceptionthrown.xunitxml | 31 ++++ tests/auto/testlib/selftests/selftests.pri | 1 + tests/auto/testlib/selftests/selftests.qrc | 4 + tests/auto/testlib/selftests/tst_selftests.cpp | 4 + .../tst_verifyexceptionthrown.cpp | 162 +++++++++++++++++++++ .../verifyexceptionthrown.pro | 8 + 9 files changed, 332 insertions(+) create mode 100644 tests/auto/testlib/selftests/expected_verifyexceptionthrown.lightxml create mode 100644 tests/auto/testlib/selftests/expected_verifyexceptionthrown.txt create mode 100644 tests/auto/testlib/selftests/expected_verifyexceptionthrown.xml create mode 100644 tests/auto/testlib/selftests/expected_verifyexceptionthrown.xunitxml create mode 100644 tests/auto/testlib/selftests/verifyexceptionthrown/tst_verifyexceptionthrown.cpp create mode 100644 tests/auto/testlib/selftests/verifyexceptionthrown/verifyexceptionthrown.pro (limited to 'tests') diff --git a/tests/auto/testlib/selftests/expected_verifyexceptionthrown.lightxml b/tests/auto/testlib/selftests/expected_verifyexceptionthrown.lightxml new file mode 100644 index 0000000000..6ef857c6d0 --- /dev/null +++ b/tests/auto/testlib/selftests/expected_verifyexceptionthrown.lightxml @@ -0,0 +1,49 @@ + + @INSERT_QT_VERSION_HERE@ + @INSERT_QT_VERSION_HERE@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/tests/auto/testlib/selftests/expected_verifyexceptionthrown.txt b/tests/auto/testlib/selftests/expected_verifyexceptionthrown.txt new file mode 100644 index 0000000000..5c40f62dd2 --- /dev/null +++ b/tests/auto/testlib/selftests/expected_verifyexceptionthrown.txt @@ -0,0 +1,21 @@ +********* Start testing of tst_VerifyExceptionThrown ********* +Config: Using QtTest library @INSERT_QT_VERSION_HERE@, Qt @INSERT_QT_VERSION_HERE@ +PASS : tst_VerifyExceptionThrown::initTestCase() +PASS : tst_VerifyExceptionThrown::testCorrectStdTypes() +PASS : tst_VerifyExceptionThrown::testCorrectStdExceptions() +PASS : tst_VerifyExceptionThrown::testCorrectMyExceptions() +FAIL! : tst_VerifyExceptionThrown::testFailInt() Expected exception of type double to be thrown but unknown exception caught + Loc: [/home/user/dev/qt5/qtbase/tests/auto/testlib/selftests/verifyexceptionthrown/tst_verifyexceptionthrown.cpp(128)] +FAIL! : tst_VerifyExceptionThrown::testFailStdString() Expected exception of type char* to be thrown but unknown exception caught + Loc: [/home/user/dev/qt5/qtbase/tests/auto/testlib/selftests/verifyexceptionthrown/tst_verifyexceptionthrown.cpp(133)] +FAIL! : tst_VerifyExceptionThrown::testFailStdRuntimeError() Expected exception of type std::runtime_error to be thrown but std::exception caught with message: logic error + Loc: [/home/user/dev/qt5/qtbase/tests/auto/testlib/selftests/verifyexceptionthrown/tst_verifyexceptionthrown.cpp(138)] +FAIL! : tst_VerifyExceptionThrown::testFailMyException() Expected exception of type MyBaseException to be thrown but std::exception caught with message: logic error + Loc: [/home/user/dev/qt5/qtbase/tests/auto/testlib/selftests/verifyexceptionthrown/tst_verifyexceptionthrown.cpp(143)] +FAIL! : tst_VerifyExceptionThrown::testFailMyDerivedException() Expected exception of type std::runtime_error to be thrown but std::exception caught with message: MyDerivedException + Loc: [/home/user/dev/qt5/qtbase/tests/auto/testlib/selftests/verifyexceptionthrown/tst_verifyexceptionthrown.cpp(148)] +FAIL! : tst_VerifyExceptionThrown::testFailNoException() Expected exception of type std::exception to be thrown but no exception caught + Loc: [/home/user/dev/qt5/qtbase/tests/auto/testlib/selftests/verifyexceptionthrown/tst_verifyexceptionthrown.cpp(153)] +PASS : tst_VerifyExceptionThrown::cleanupTestCase() +Totals: 5 passed, 6 failed, 0 skipped +********* Finished testing of tst_VerifyExceptionThrown ********* diff --git a/tests/auto/testlib/selftests/expected_verifyexceptionthrown.xml b/tests/auto/testlib/selftests/expected_verifyexceptionthrown.xml new file mode 100644 index 0000000000..df261b72c4 --- /dev/null +++ b/tests/auto/testlib/selftests/expected_verifyexceptionthrown.xml @@ -0,0 +1,52 @@ + + + + @INSERT_QT_VERSION_HERE@ + @INSERT_QT_VERSION_HERE@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/tests/auto/testlib/selftests/expected_verifyexceptionthrown.xunitxml b/tests/auto/testlib/selftests/expected_verifyexceptionthrown.xunitxml new file mode 100644 index 0000000000..f49746a9af --- /dev/null +++ b/tests/auto/testlib/selftests/expected_verifyexceptionthrown.xunitxml @@ -0,0 +1,31 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/tests/auto/testlib/selftests/selftests.pri b/tests/auto/testlib/selftests/selftests.pri index c9474419eb..7b706735a9 100644 --- a/tests/auto/testlib/selftests/selftests.pri +++ b/tests/auto/testlib/selftests/selftests.pri @@ -41,5 +41,6 @@ SUBPROGRAMS = \ subtest \ verbose1 \ verbose2 \ + verifyexceptionthrown \ warnings \ xunit diff --git a/tests/auto/testlib/selftests/selftests.qrc b/tests/auto/testlib/selftests/selftests.qrc index 03de05fb89..e7ca7138b2 100644 --- a/tests/auto/testlib/selftests/selftests.qrc +++ b/tests/auto/testlib/selftests/selftests.qrc @@ -134,6 +134,10 @@ expected_verbose2.txt expected_verbose2.xml expected_verbose2.xunitxml + expected_verifyexceptionthrown.lightxml + expected_verifyexceptionthrown.txt + expected_verifyexceptionthrown.xml + expected_verifyexceptionthrown.xunitxml expected_warnings.lightxml expected_warnings.txt expected_warnings.xml diff --git a/tests/auto/testlib/selftests/tst_selftests.cpp b/tests/auto/testlib/selftests/tst_selftests.cpp index b737f823c8..d77e372983 100644 --- a/tests/auto/testlib/selftests/tst_selftests.cpp +++ b/tests/auto/testlib/selftests/tst_selftests.cpp @@ -380,6 +380,10 @@ void tst_Selftests::runSubTest_data() << "subtest" << "verbose1" << "verbose2" +#ifndef QT_NO_EXCEPTIONS + // this test will test nothing if the exceptions are disabled + << "verifyexceptionthrown" +#endif //!QT_NO_EXCEPTIONS << "warnings" << "xunit" ; diff --git a/tests/auto/testlib/selftests/verifyexceptionthrown/tst_verifyexceptionthrown.cpp b/tests/auto/testlib/selftests/verifyexceptionthrown/tst_verifyexceptionthrown.cpp new file mode 100644 index 0000000000..fc57f19c4f --- /dev/null +++ b/tests/auto/testlib/selftests/verifyexceptionthrown/tst_verifyexceptionthrown.cpp @@ -0,0 +1,162 @@ +/**************************************************************************** +** +** Copyright (C) 2013 Digia Plc and/or its subsidiary(-ies). +** Contact: http://www.qt-project.org/legal +** +** This file is part of the test suite of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:LGPL$ +** 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 Digia. For licensing terms and +** conditions see http://qt.digia.com/licensing. For further information +** use the contact form at http://qt.digia.com/contact-us. +** +** 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, Digia gives you certain additional +** rights. These rights are described in the Digia Qt LGPL Exception +** version 1.1, included in the file LGPL_EXCEPTION.txt in this package. +** +** GNU General Public License Usage +** Alternatively, this file may be used under the terms of the GNU +** General Public License version 3.0 as published by the Free Software +** Foundation and appearing in the file LICENSE.GPL included in the +** packaging of this file. Please review the following information to +** ensure the GNU General Public License version 3.0 requirements will be +** met: http://www.gnu.org/copyleft/gpl.html. +** +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + + +#include + + +#ifndef QT_NO_EXCEPTIONS +# include +#endif + + +#ifndef QT_NO_EXCEPTIONS + +class MyBaseException +{ + +}; + +class MyDerivedException: public MyBaseException, public std::domain_error +{ +public: + MyDerivedException(): std::domain_error("MyDerivedException") {} +}; + + +#endif // !QT_NO_EXCEPTIONS + + +class tst_VerifyExceptionThrown: public QObject +{ + Q_OBJECT +private: + void doSomething() const {} + +private slots: +// Remove all test cases if exceptions are not available +#ifndef QT_NO_EXCEPTIONS + void testCorrectStdTypes() const; + void testCorrectStdExceptions() const; + void testCorrectMyExceptions() const; + + void testFailInt() const; + void testFailStdString() const; + void testFailStdRuntimeError() const; + void testFailMyException() const; + void testFailMyDerivedException() const; + + void testFailNoException() const; +#endif // !QT_NO_EXCEPTIONS +}; + + + +#ifndef QT_NO_EXCEPTIONS + +void tst_VerifyExceptionThrown::testCorrectStdTypes() const +{ + QVERIFY_EXCEPTION_THROWN(throw int(5), int); + QVERIFY_EXCEPTION_THROWN(throw float(9.8), float); + QVERIFY_EXCEPTION_THROWN(throw bool(true), bool); + QVERIFY_EXCEPTION_THROWN(throw std::string("some string"), std::string); +} + +void tst_VerifyExceptionThrown::testCorrectStdExceptions() const +{ + // same type + QVERIFY_EXCEPTION_THROWN(throw std::exception(), std::exception); + QVERIFY_EXCEPTION_THROWN(throw std::runtime_error("runtime error"), std::runtime_error); + QVERIFY_EXCEPTION_THROWN(throw std::overflow_error("overflow error"), std::overflow_error); + + // inheritance + QVERIFY_EXCEPTION_THROWN(throw std::overflow_error("overflow error"), std::runtime_error); + QVERIFY_EXCEPTION_THROWN(throw std::overflow_error("overflow error"), std::exception); +} + +void tst_VerifyExceptionThrown::testCorrectMyExceptions() const +{ + // same type + QVERIFY_EXCEPTION_THROWN(throw MyBaseException(), MyBaseException); + QVERIFY_EXCEPTION_THROWN(throw MyDerivedException(), MyDerivedException); + + // inheritance + QVERIFY_EXCEPTION_THROWN(throw MyDerivedException(), MyBaseException); + QVERIFY_EXCEPTION_THROWN(throw MyDerivedException(), std::domain_error); +} + +void tst_VerifyExceptionThrown::testFailInt() const +{ + QVERIFY_EXCEPTION_THROWN(throw int(5), double); +} + +void tst_VerifyExceptionThrown::testFailStdString() const +{ + QVERIFY_EXCEPTION_THROWN(throw std::string("some string"), char*); +} + +void tst_VerifyExceptionThrown::testFailStdRuntimeError() const +{ + QVERIFY_EXCEPTION_THROWN(throw std::logic_error("logic error"), std::runtime_error); +} + +void tst_VerifyExceptionThrown::testFailMyException() const +{ + QVERIFY_EXCEPTION_THROWN(throw std::logic_error("logic error"), MyBaseException); +} + +void tst_VerifyExceptionThrown::testFailMyDerivedException() const +{ + QVERIFY_EXCEPTION_THROWN(throw MyDerivedException(), std::runtime_error); +} + +void tst_VerifyExceptionThrown::testFailNoException() const +{ + QVERIFY_EXCEPTION_THROWN(doSomething(), std::exception); +} + +#endif // !QT_NO_EXCEPTIONS + + + +QTEST_MAIN(tst_VerifyExceptionThrown) + +#include "tst_verifyexceptionthrown.moc" diff --git a/tests/auto/testlib/selftests/verifyexceptionthrown/verifyexceptionthrown.pro b/tests/auto/testlib/selftests/verifyexceptionthrown/verifyexceptionthrown.pro new file mode 100644 index 0000000000..51f108c9d7 --- /dev/null +++ b/tests/auto/testlib/selftests/verifyexceptionthrown/verifyexceptionthrown.pro @@ -0,0 +1,8 @@ +SOURCES += tst_verifyexceptionthrown.cpp +QT = core testlib + +mac:CONFIG -= app_bundle +CONFIG -= debug_and_release_target +CONFIG += exceptions + +TARGET = verifyexceptionthrown -- cgit v1.2.3 From 036c5db468164297d213764c59a4b59daa76d90a Mon Sep 17 00:00:00 2001 From: Marc Mutz Date: Sat, 16 Nov 2013 20:04:06 +0100 Subject: QString: add missing contains(QLatin1String) overload Since contains() just wraps indexOf(), which has a QLatin1String overload, add one for contains(), too, for consistency. [ChangeLog][QtCore][QString] Added QLatin1String overload of contains() Change-Id: I2acc628a51e00789fb2b90400cf0c523a5b5e65a Reviewed-by: Giuseppe D'Angelo Reviewed-by: Thiago Macieira --- tests/auto/corelib/tools/qstring/tst_qstring.cpp | 2 ++ 1 file changed, 2 insertions(+) (limited to 'tests') diff --git a/tests/auto/corelib/tools/qstring/tst_qstring.cpp b/tests/auto/corelib/tools/qstring/tst_qstring.cpp index 48874781c0..9a3aaebaaf 100644 --- a/tests/auto/corelib/tools/qstring/tst_qstring.cpp +++ b/tests/auto/corelib/tools/qstring/tst_qstring.cpp @@ -1440,6 +1440,8 @@ void tst_QString::contains() QVERIFY(a.contains('F',Qt::CaseInsensitive)); QVERIFY(a.contains("FG")); QVERIFY(a.contains("FG",Qt::CaseInsensitive)); + QVERIFY(a.contains(QLatin1String("FG"))); + QVERIFY(a.contains(QLatin1String("fg"),Qt::CaseInsensitive)); QVERIFY(a.contains( QString(), Qt::CaseInsensitive)); QVERIFY(a.contains( "", Qt::CaseInsensitive)); QVERIFY(a.contains(QRegExp("[FG][HI]"))); -- cgit v1.2.3 From 1c046369e395888df788242295743eb2def102ee Mon Sep 17 00:00:00 2001 From: David Faure Date: Mon, 4 Nov 2013 14:59:41 +0100 Subject: tst_qthreadpool: fix memory leak Task-number: QTBUG-22673 Change-Id: I2e554a2ad0119b5f9ce2d36e4720538af5ef6b82 Reviewed-by: Thiago Macieira --- tests/auto/corelib/thread/qthreadpool/tst_qthreadpool.cpp | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) (limited to 'tests') diff --git a/tests/auto/corelib/thread/qthreadpool/tst_qthreadpool.cpp b/tests/auto/corelib/thread/qthreadpool/tst_qthreadpool.cpp index f43149c3eb..859cd1b36a 100644 --- a/tests/auto/corelib/thread/qthreadpool/tst_qthreadpool.cpp +++ b/tests/auto/corelib/thread/qthreadpool/tst_qthreadpool.cpp @@ -520,7 +520,8 @@ void tst_QThreadPool::setMaxThreadCountStartsAndStopsThreads() QVERIFY(task->waitForStarted.tryAcquire(6, 1000)); task->waitToFinish.release(10); -// delete task; + threadPool.waitForDone(); + delete task; } void tst_QThreadPool::reserveThread_data() -- cgit v1.2.3 From 66b7e7497c3b318dddeb91175d8f85f606c99eec Mon Sep 17 00:00:00 2001 From: Jan Arve Saether Date: Fri, 22 Nov 2013 12:40:06 +0100 Subject: Add test for default (style dependent) spacings Task-number: QTBUG-35099 Change-Id: If19d3ccf7177dcbecef30b3ba1e16b022a3d54c4 Reviewed-by: Paul Olav Tvete --- .../tst_qgraphicslinearlayout.cpp | 94 ++++++++++++++++++++++ 1 file changed, 94 insertions(+) (limited to 'tests') diff --git a/tests/auto/widgets/graphicsview/qgraphicslinearlayout/tst_qgraphicslinearlayout.cpp b/tests/auto/widgets/graphicsview/qgraphicslinearlayout/tst_qgraphicslinearlayout.cpp index 6366f86250..19e8819a7b 100644 --- a/tests/auto/widgets/graphicsview/qgraphicslinearlayout/tst_qgraphicslinearlayout.cpp +++ b/tests/auto/widgets/graphicsview/qgraphicslinearlayout/tst_qgraphicslinearlayout.cpp @@ -1,3 +1,4 @@ + /**************************************************************************** ** ** Copyright (C) 2013 Digia Plc and/or its subsidiary(-ies). @@ -47,6 +48,8 @@ #include #include #include +#include +#include class tst_QGraphicsLinearLayout : public QObject { Q_OBJECT @@ -86,6 +89,7 @@ private slots: void removeItem(); void setGeometry_data(); void setGeometry(); + void defaultSpacing(); void setSpacing_data(); void setSpacing(); void setItemSpacing_data(); @@ -909,6 +913,96 @@ void tst_QGraphicsLinearLayout::setGeometry() delete widget; } +class LayoutStyle : public QProxyStyle +{ +public: + LayoutStyle(const QString &key) + : QProxyStyle(key), + horizontalSpacing(-1), verticalSpacing(-1) {} + + virtual int pixelMetric(QStyle::PixelMetric pm, const QStyleOption *option = 0, const QWidget *widget = 0) const Q_DECL_OVERRIDE + { + if (pm == QStyle::PM_LayoutHorizontalSpacing && horizontalSpacing >= 0) { + return horizontalSpacing; + } else if (pm == QStyle::PM_LayoutVerticalSpacing && verticalSpacing >= 0) { + return verticalSpacing; + } + return QProxyStyle::pixelMetric(pm, option, widget); + } + + int horizontalSpacing; + int verticalSpacing; +}; + +void tst_QGraphicsLinearLayout::defaultSpacing() +{ + QGraphicsScene scene; + QGraphicsView view(&scene); + LayoutStyle *style = new LayoutStyle(QLatin1String("windows")); + style->horizontalSpacing = 5; + style->verticalSpacing = 3; + LayoutStyle *style2 = new LayoutStyle(QLatin1String("windows")); + style2->horizontalSpacing = 25; + style2->verticalSpacing = 23; + + QGraphicsWidget *widget = new QGraphicsWidget(0, Qt::Window); + widget->setStyle(style); + + // Horizontal layout + SubQGraphicsLinearLayout *layout = new SubQGraphicsLinearLayout(Qt::Horizontal); + widget->setLayout(layout); + Q_ASSERT(widget->style()); + scene.addItem(widget); + layout->setContentsMargins(0, 0, 0, 0); + view.show(); + + for (int i = 0; i < 2; ++i) { + QGraphicsWidget *w = new QGraphicsWidget; + layout->addItem(w); + } + + // Horizontal layout + qreal styleSpacing = (qreal)style->pixelMetric(QStyle::PM_LayoutHorizontalSpacing); + QCOMPARE(styleSpacing, qreal(5)); + QCOMPARE(styleSpacing, layout->spacing()); + QCOMPARE(layout->effectiveSizeHint(Qt::PreferredSize).width(), qreal(105)); + style->horizontalSpacing = 15; + // If the style method changes return value, the layout must be invalidated by the application + layout->invalidate(); + styleSpacing = (qreal)style->pixelMetric(QStyle::PM_LayoutHorizontalSpacing); + QCOMPARE(styleSpacing, qreal(15)); + QSKIP("invalidating the layout does not reevaluate the default spacing (QTBUG-35099)"); + QCOMPARE(styleSpacing, layout->spacing()); + QCOMPARE(layout->effectiveSizeHint(Qt::PreferredSize).width(), qreal(115)); + widget->setStyle(style2); + // If the style itself changes, the layout will pick that up + QCOMPARE(layout->effectiveSizeHint(Qt::PreferredSize).width(), qreal(125)); + QCOMPARE(layout->spacing(), qreal(25)); + + // Vertical layout + widget->setStyle(style); + layout->setOrientation(Qt::Vertical); + styleSpacing = (qreal)style->pixelMetric(QStyle::PM_LayoutVerticalSpacing); + QCOMPARE(styleSpacing, qreal(3)); + QCOMPARE(styleSpacing, layout->spacing()); + QCOMPARE(layout->effectiveSizeHint(Qt::PreferredSize).height(), qreal(103)); + style->verticalSpacing = 13; + // If the style method changes return value, the layout must be invalidated by the application + layout->invalidate(); + styleSpacing = (qreal)style->pixelMetric(QStyle::PM_LayoutVerticalSpacing); + QCOMPARE(styleSpacing, qreal(13)); + QSKIP("invalidating the layout does not reevaluate the default spacing (QTBUG-35099)"); + QCOMPARE(styleSpacing, layout->spacing()); + QCOMPARE(layout->effectiveSizeHint(Qt::PreferredSize).height(), qreal(113)); + widget->setStyle(style2); + // If the style itself changes, the layout will pick that up + QCOMPARE(layout->effectiveSizeHint(Qt::PreferredSize).height(), qreal(123)); + QCOMPARE(layout->spacing(), qreal(23)); + + + delete widget; +} + void tst_QGraphicsLinearLayout::setSpacing_data() { QTest::addColumn("spacing"); -- cgit v1.2.3 From c3c424b384b06354116e232bf4055514f9b205ce Mon Sep 17 00:00:00 2001 From: Tasuku Suzuki Date: Mon, 17 Jun 2013 10:44:09 +0900 Subject: QSqlQuery::isNull string overload Introduce isNull overload to take field name as a parameter. This is corresponding to the commit 7e6e1412348fb8d8df844d821ee80d6d3de69517 Change-Id: I122f79707d26eaa09c2f38dc31aeee1dac7de33b Reviewed-by: Mark Brand --- tests/auto/sql/kernel/qsqlquery/tst_qsqlquery.cpp | 5 +++++ 1 file changed, 5 insertions(+) (limited to 'tests') diff --git a/tests/auto/sql/kernel/qsqlquery/tst_qsqlquery.cpp b/tests/auto/sql/kernel/qsqlquery/tst_qsqlquery.cpp index 9098d5b101..b74e02bcc4 100644 --- a/tests/auto/sql/kernel/qsqlquery/tst_qsqlquery.cpp +++ b/tests/auto/sql/kernel/qsqlquery/tst_qsqlquery.cpp @@ -1384,7 +1384,9 @@ void tst_QSqlQuery::isNull() QVERIFY_SQL(q, exec("select id, t_varchar from " + qTableName("qtest_null", __FILE__, db) + " order by id")); QVERIFY( q.next() ); QVERIFY( !q.isNull( 0 ) ); + QVERIFY(!q.isNull("id")); QVERIFY( q.isNull( 1 ) ); + QVERIFY(q.isNull("t_varchar")); QCOMPARE( q.value( 0 ).toInt(), 0 ); QCOMPARE( q.value( 1 ).toString(), QString() ); QVERIFY( !q.value( 0 ).isNull() ); @@ -1392,10 +1394,13 @@ void tst_QSqlQuery::isNull() QVERIFY( q.next() ); QVERIFY( !q.isNull( 0 ) ); + QVERIFY(!q.isNull("id")); QVERIFY( !q.isNull( 1 ) ); + QVERIFY(!q.isNull("t_varchar")); // For a non existent field, it should be returning true. QVERIFY(q.isNull(2)); + QVERIFY(q.isNull("unknown")); } /*! TDS specific BIT field test */ -- cgit v1.2.3 From 5da094c1aa21d0440a31bf09d51016b8af7de046 Mon Sep 17 00:00:00 2001 From: Kai Koehne Date: Tue, 3 Dec 2013 16:15:49 +0100 Subject: TestLib: Ignore trailing space in QTest::ignoreMessage MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit When comparing expected with actual debug messages, allow the expected ones to contain a trailing space. This is needed to not break all autotests in a follow up patch, which will prevent ~QDebug() from generating a trailing space by default. Task-number: QTBUG-15256 Change-Id: I7f67393ddfbfe37fde1ca5ef45e4ad7f4b5324b4 Reviewed-by: Friedemann Kleint Reviewed-by: Jędrzej Nowacki Reviewed-by: Jason McDonald --- tests/auto/testlib/selftests/warnings/tst_warnings.cpp | 4 ++++ 1 file changed, 4 insertions(+) (limited to 'tests') diff --git a/tests/auto/testlib/selftests/warnings/tst_warnings.cpp b/tests/auto/testlib/selftests/warnings/tst_warnings.cpp index ff4357f11f..4e3620caab 100644 --- a/tests/auto/testlib/selftests/warnings/tst_warnings.cpp +++ b/tests/auto/testlib/selftests/warnings/tst_warnings.cpp @@ -82,6 +82,10 @@ void tst_Warnings::testWarnings() qWarning("Babablabla"); qDebug("Bubublabla"); qWarning("Babablabla"); + + // accept redundant space at end to keep compatibility with Qt < 5.2 + QTest::ignoreMessage(QtDebugMsg, "Bubu "); + qDebug() << "Bubu"; } void tst_Warnings::testMissingWarnings() -- cgit v1.2.3 From 3e549f5daa55464512ee2763558f3a7ffd45c545 Mon Sep 17 00:00:00 2001 From: Mitch Curtis Date: Wed, 11 Sep 2013 10:50:39 +0200 Subject: QComboBox: fix keyboard selection with multiple character strings. Take longer search strings into account instead of just using the first character of the search string. Touches up https://qt.gitorious.org/qt/qt/merge_requests/1418 for resubmission. Task-number: QTBUG-3032 [ChangeLog][QtWidgets][QSpinBox] Fixed keyboard selection with multiple-character strings. Change-Id: I2f68c8b97b1a1884659dcb19f52b1efeace9b88b Reviewed-by: Marc Mutz --- .../widgets/widgets/qcombobox/tst_qcombobox.cpp | 30 +++++++++++++++++++++- 1 file changed, 29 insertions(+), 1 deletion(-) (limited to 'tests') diff --git a/tests/auto/widgets/widgets/qcombobox/tst_qcombobox.cpp b/tests/auto/widgets/widgets/qcombobox/tst_qcombobox.cpp index eabb7aaa17..509ccc37b6 100644 --- a/tests/auto/widgets/widgets/qcombobox/tst_qcombobox.cpp +++ b/tests/auto/widgets/widgets/qcombobox/tst_qcombobox.cpp @@ -162,6 +162,7 @@ private slots: void highlightedSignal(); void itemData(); void task_QTBUG_31146_popupCompletion(); + void keyboardSelection(); }; class MyAbstractItemDelegate : public QAbstractItemDelegate @@ -1848,7 +1849,7 @@ void tst_QComboBox::flaggedItems_data() itemList << "nine" << "ten"; keyMovementList << Qt::Key_T; - QTest::newRow(testCase.toLatin1() + "search same start letter") << itemList << deselectFlagList << disableFlagList << keyMovementList << bool(editable) << 9; + QTest::newRow(testCase.toLatin1() + "search same start letter") << itemList << deselectFlagList << disableFlagList << keyMovementList << bool(editable) << 2; keyMovementList.clear(); keyMovementList << Qt::Key_T << Qt::Key_H; @@ -2946,5 +2947,32 @@ void tst_QComboBox::task_QTBUG_31146_popupCompletion() QCOMPARE(comboBox.currentIndex(), 0); } +void tst_QComboBox::keyboardSelection() +{ + QComboBox comboBox; + const int keyboardInterval = QApplication::keyboardInputInterval(); + QStringList list; + list << "OA" << "OB" << "OC" << "OO" << "OP" << "PP"; + comboBox.addItems(list); + + // Clear any remaining keyboard input from previous tests. + QTest::qWait(keyboardInterval); + QTest::keyClicks(&comboBox, "oo", Qt::NoModifier, 50); + QCOMPARE(comboBox.currentText(), list.at(3)); + + QTest::qWait(keyboardInterval); + QTest::keyClicks(&comboBox, "op", Qt::NoModifier, 50); + QCOMPARE(comboBox.currentText(), list.at(4)); + + QTest::keyClick(&comboBox, Qt::Key_P, Qt::NoModifier, keyboardInterval); + QCOMPARE(comboBox.currentText(), list.at(5)); + + QTest::keyClick(&comboBox, Qt::Key_O, Qt::NoModifier, keyboardInterval); + QCOMPARE(comboBox.currentText(), list.at(0)); + + QTest::keyClick(&comboBox, Qt::Key_O, Qt::NoModifier, keyboardInterval); + QCOMPARE(comboBox.currentText(), list.at(1)); +} + QTEST_MAIN(tst_QComboBox) #include "tst_qcombobox.moc" -- cgit v1.2.3 From 6c322a917ad57d57f0ee76825eab3e2e008c5bd4 Mon Sep 17 00:00:00 2001 From: Jan Arve Saether Date: Thu, 28 Nov 2013 14:04:35 +0100 Subject: Add proper abstractions to the grid layout engine. The abstractions are needed so that they can work with both QGraphicsLayouts and QtQuick.Layouts. Since the plan is to move the engine to QtGui, this means that the engine cannot have any references to anything in the QtWidgets module. As a consequence of that several things had to be done: * The style info object had to be redone with an abstraction layer to get rid of style and widget dependency. (Abstract class is called QAbstractLayoutStyleInfo) * QGridLayoutEngine must be subclassed due to some specializations for QGraphicsLayoutItem, manifested as QGraphicsGridLayoutEngine. * QGridLayoutItem must be subclassed due to some specializations for QGraphicsLayoutItem, manifested as QGraphicsGridLayoutEngineItem. Did also some minor cleanups, reordered arguments so that all styleInfo arguments are last in all function calls This also fixes QTBUG-35099 (bug was spotted during this refactoring) Task-number: QTBUG-35099 Change-Id: If49d40f71870dc8d99d2e145be158e3080b595fa Reviewed-by: Paul Olav Tvete --- .../graphicsview/qgraphicslinearlayout/tst_qgraphicslinearlayout.cpp | 2 -- 1 file changed, 2 deletions(-) (limited to 'tests') diff --git a/tests/auto/widgets/graphicsview/qgraphicslinearlayout/tst_qgraphicslinearlayout.cpp b/tests/auto/widgets/graphicsview/qgraphicslinearlayout/tst_qgraphicslinearlayout.cpp index 19e8819a7b..8f7a3a3255 100644 --- a/tests/auto/widgets/graphicsview/qgraphicslinearlayout/tst_qgraphicslinearlayout.cpp +++ b/tests/auto/widgets/graphicsview/qgraphicslinearlayout/tst_qgraphicslinearlayout.cpp @@ -971,7 +971,6 @@ void tst_QGraphicsLinearLayout::defaultSpacing() layout->invalidate(); styleSpacing = (qreal)style->pixelMetric(QStyle::PM_LayoutHorizontalSpacing); QCOMPARE(styleSpacing, qreal(15)); - QSKIP("invalidating the layout does not reevaluate the default spacing (QTBUG-35099)"); QCOMPARE(styleSpacing, layout->spacing()); QCOMPARE(layout->effectiveSizeHint(Qt::PreferredSize).width(), qreal(115)); widget->setStyle(style2); @@ -991,7 +990,6 @@ void tst_QGraphicsLinearLayout::defaultSpacing() layout->invalidate(); styleSpacing = (qreal)style->pixelMetric(QStyle::PM_LayoutVerticalSpacing); QCOMPARE(styleSpacing, qreal(13)); - QSKIP("invalidating the layout does not reevaluate the default spacing (QTBUG-35099)"); QCOMPARE(styleSpacing, layout->spacing()); QCOMPARE(layout->effectiveSizeHint(Qt::PreferredSize).height(), qreal(113)); widget->setStyle(style2); -- cgit v1.2.3 From 326e9c8962532f66109f94f224f891c4445ce87f Mon Sep 17 00:00:00 2001 From: Kai Koehne Date: Wed, 16 Oct 2013 15:59:27 +0200 Subject: Remove trailing space from QDebug stream It's unexpected that all messages generated by the stream version of qDebug and friends have a trailing space. It also makes switching to categorized logging (which only supports the stream version) difficult, since all autotests checking for debug output would have to be adapted. Task-number: QTBUG-15256 Change-Id: I8d627a8379dc273d9689f5611184f03607b73823 Reviewed-by: Thiago Macieira --- .../auto/corelib/global/qlogging/tst_qlogging.cpp | 4 +- tests/auto/corelib/io/qdebug/tst_qdebug.cpp | 18 +-- tests/auto/corelib/io/qnodebug/tst_qnodebug.cpp | 6 +- .../tst_qsortfilterproxymodel.cpp | 4 +- tests/auto/corelib/json/tst_qtjson.cpp | 28 ++--- tests/auto/corelib/kernel/qobject/tst_qobject.cpp | 2 +- .../socket/qlocalsocket/tst_qlocalsocket.cpp | 2 +- .../other/qvariant_common/tst_qvariant_common.h | 2 +- .../testlib/selftests/expected_counting.lightxml | 4 +- tests/auto/testlib/selftests/expected_counting.txt | 4 +- tests/auto/testlib/selftests/expected_counting.xml | 4 +- .../testlib/selftests/expected_counting.xunitxml | 8 +- .../testlib/selftests/expected_globaldata.lightxml | 66 +++++------ .../auto/testlib/selftests/expected_globaldata.txt | 66 +++++------ .../auto/testlib/selftests/expected_globaldata.xml | 66 +++++------ .../testlib/selftests/expected_globaldata.xunitxml | 132 ++++++++++----------- .../testlib/selftests/expected_subtest.lightxml | 62 +++++----- tests/auto/testlib/selftests/expected_subtest.txt | 62 +++++----- tests/auto/testlib/selftests/expected_subtest.xml | 62 +++++----- .../testlib/selftests/expected_subtest.xunitxml | 124 +++++++++---------- .../testlib/selftests/expected_verbose1.lightxml | 4 +- tests/auto/testlib/selftests/expected_verbose1.txt | 4 +- tests/auto/testlib/selftests/expected_verbose1.xml | 4 +- .../testlib/selftests/expected_verbose1.xunitxml | 8 +- .../testlib/selftests/expected_verbose2.lightxml | 4 +- tests/auto/testlib/selftests/expected_verbose2.txt | 4 +- tests/auto/testlib/selftests/expected_verbose2.xml | 4 +- .../testlib/selftests/expected_verbose2.xunitxml | 8 +- 28 files changed, 383 insertions(+), 383 deletions(-) (limited to 'tests') diff --git a/tests/auto/corelib/global/qlogging/tst_qlogging.cpp b/tests/auto/corelib/global/qlogging/tst_qlogging.cpp index 31a4254344..21e07630e2 100644 --- a/tests/auto/corelib/global/qlogging/tst_qlogging.cpp +++ b/tests/auto/corelib/global/qlogging/tst_qlogging.cpp @@ -672,7 +672,7 @@ void tst_qmessagehandler::qMessagePattern() QVERIFY(output.contains("debug tst_qlogging 57 main qDebug")); QVERIFY(output.contains("warning tst_qlogging 58 main qWarning")); QVERIFY(output.contains("critical tst_qlogging 59 main qCritical")); - QVERIFY(output.contains("warning tst_qlogging 62 main qDebug with category ")); + QVERIFY(output.contains("warning tst_qlogging 62 main qDebug with category")); QVERIFY(output.contains("debug tst_qlogging 66 main qDebug2")); environment = m_baseEnvironment; @@ -712,7 +712,7 @@ void tst_qmessagehandler::qMessagePattern() "[debug] qDebug\n" "[warning] qWarning\n" "[critical] qCritical\n" - "[warning] qDebug with category \n"; + "[warning] qDebug with category\n"; #ifdef Q_OS_WIN output.replace("\r\n", "\n"); #endif diff --git a/tests/auto/corelib/io/qdebug/tst_qdebug.cpp b/tests/auto/corelib/io/qdebug/tst_qdebug.cpp index f452efc1b3..29c7e6a81e 100644 --- a/tests/auto/corelib/io/qdebug/tst_qdebug.cpp +++ b/tests/auto/corelib/io/qdebug/tst_qdebug.cpp @@ -65,8 +65,8 @@ void tst_QDebug::assignment() const QDebug debug1(QtDebugMsg); QDebug debug2(QtWarningMsg); - QTest::ignoreMessage(QtDebugMsg, "foo "); - QTest::ignoreMessage(QtWarningMsg, "bar 1 2 "); + QTest::ignoreMessage(QtDebugMsg, "foo"); + QTest::ignoreMessage(QtWarningMsg, "bar 1 2"); debug1 << "foo"; debug2 << "bar"; @@ -118,7 +118,7 @@ void tst_QDebug::warningWithoutDebug() const { qWarning() << "A qWarning() message"; } QString file = __FILE__; int line = __LINE__ - 1; QString function = Q_FUNC_INFO; QCOMPARE(s_msgType, QtWarningMsg); - QCOMPARE(s_msg, QString::fromLatin1("A qWarning() message ")); + QCOMPARE(s_msg, QString::fromLatin1("A qWarning() message")); QCOMPARE(QString::fromLatin1(s_file), file); QCOMPARE(s_line, line); QCOMPARE(QString::fromLatin1(s_function), function); @@ -133,7 +133,7 @@ void tst_QDebug::criticalWithoutDebug() const { qCritical() << "A qCritical() message"; } QString file = __FILE__; int line = __LINE__ - 1; QString function = Q_FUNC_INFO; QCOMPARE(s_msgType, QtCriticalMsg); - QCOMPARE(s_msg, QString::fromLatin1("A qCritical() message ")); + QCOMPARE(s_msg, QString::fromLatin1("A qCritical() message")); QCOMPARE(QString::fromLatin1(s_file), file); QCOMPARE(s_line, line); QCOMPARE(QString::fromLatin1(s_function), function); @@ -145,7 +145,7 @@ void tst_QDebug::debugWithBool() const { qDebug() << false << true; } QString file = __FILE__; int line = __LINE__ - 1; QString function = Q_FUNC_INFO; QCOMPARE(s_msgType, QtDebugMsg); - QCOMPARE(s_msg, QString::fromLatin1("false true ")); + QCOMPARE(s_msg, QString::fromLatin1("false true")); QCOMPARE(QString::fromLatin1(s_file), file); QCOMPARE(s_line, line); QCOMPARE(QString::fromLatin1(s_function), function); @@ -215,7 +215,7 @@ void tst_QDebug::stateSaver() const } d.space() << 42; } - QCOMPARE(s_msg, QString::fromLatin1("02a 42 ")); + QCOMPARE(s_msg, QString::fromLatin1("02a 42")); } void tst_QDebug::veryLongWarningMessage() const @@ -247,7 +247,7 @@ void tst_QDebug::qDebugQStringRef() const { qDebug() << inRef; } QString file = __FILE__; int line = __LINE__ - 1; QString function = Q_FUNC_INFO; QCOMPARE(s_msgType, QtDebugMsg); - QCOMPARE(s_msg, QString::fromLatin1("\"input\" ")); + QCOMPARE(s_msg, QString::fromLatin1("\"input\"")); QCOMPARE(QString::fromLatin1(s_file), file); QCOMPARE(s_line, line); QCOMPARE(QString::fromLatin1(s_function), function); @@ -261,7 +261,7 @@ void tst_QDebug::qDebugQStringRef() const { qDebug() << inRef; } QString file = __FILE__; int line = __LINE__ - 1; QString function = Q_FUNC_INFO; QCOMPARE(s_msgType, QtDebugMsg); - QCOMPARE(s_msg, QString::fromLatin1("\"\" ")); + QCOMPARE(s_msg, QString::fromLatin1("\"\"")); QCOMPARE(QString::fromLatin1(s_file), file); QCOMPARE(s_line, line); QCOMPARE(QString::fromLatin1(s_function), function); @@ -274,7 +274,7 @@ void tst_QDebug::qDebugQLatin1String() const { qDebug() << QLatin1String("foo") << QLatin1String("") << QLatin1String("barbaz", 3); } QString file = __FILE__; int line = __LINE__ - 1; QString function = Q_FUNC_INFO; QCOMPARE(s_msgType, QtDebugMsg); - QCOMPARE(s_msg, QString::fromLatin1("\"foo\" \"\" \"bar\" ")); + QCOMPARE(s_msg, QString::fromLatin1("\"foo\" \"\" \"bar\"")); QCOMPARE(QString::fromLatin1(s_file), file); QCOMPARE(s_line, line); QCOMPARE(QString::fromLatin1(s_function), function); diff --git a/tests/auto/corelib/io/qnodebug/tst_qnodebug.cpp b/tests/auto/corelib/io/qnodebug/tst_qnodebug.cpp index 157e42b447..a516b762f7 100644 --- a/tests/auto/corelib/io/qnodebug/tst_qnodebug.cpp +++ b/tests/auto/corelib/io/qnodebug/tst_qnodebug.cpp @@ -68,8 +68,8 @@ void tst_QNoDebug::noDebugOutput() const qCDebug(cat) << "foo"; // qWarning still works, though - QTest::ignoreMessage(QtWarningMsg, "bar "); - QTest::ignoreMessage(QtWarningMsg, "custom-bar "); + QTest::ignoreMessage(QtWarningMsg, "bar"); + QTest::ignoreMessage(QtWarningMsg, "custom-bar"); qWarning() << "bar"; qCWarning(cat) << "custom-bar"; } @@ -79,7 +79,7 @@ void tst_QNoDebug::streaming() const QDateTime dt(QDate(1,2,3),QTime(4,5,6)); QString debugString = dt.toString(QStringLiteral("yyyy-MM-dd HH:mm:ss.zzz t")) + QStringLiteral(" Qt::LocalTime"); - QTest::ignoreMessage(QtWarningMsg, qPrintable(QString::fromLatin1("QDateTime(\"%1\") ").arg(debugString))); + QTest::ignoreMessage(QtWarningMsg, qPrintable(QString::fromLatin1("QDateTime(\"%1\")").arg(debugString))); qWarning() << dt; } diff --git a/tests/auto/corelib/itemmodels/qsortfilterproxymodel/tst_qsortfilterproxymodel.cpp b/tests/auto/corelib/itemmodels/qsortfilterproxymodel/tst_qsortfilterproxymodel.cpp index 923b9a3a07..bb77ec54c5 100644 --- a/tests/auto/corelib/itemmodels/qsortfilterproxymodel/tst_qsortfilterproxymodel.cpp +++ b/tests/auto/corelib/itemmodels/qsortfilterproxymodel/tst_qsortfilterproxymodel.cpp @@ -2740,9 +2740,9 @@ void tst_QSortFilterProxyModel::mapFromToSource() QCOMPARE(proxy.mapToSource(QModelIndex()), QModelIndex()); #ifdef QT_NO_DEBUG //if Qt is compiled in debug mode, this will assert - QTest::ignoreMessage(QtWarningMsg, "QSortFilterProxyModel: index from wrong model passed to mapToSource "); + QTest::ignoreMessage(QtWarningMsg, "QSortFilterProxyModel: index from wrong model passed to mapToSource"); QCOMPARE(proxy.mapToSource(source.index(2, 3)), QModelIndex()); - QTest::ignoreMessage(QtWarningMsg, "QSortFilterProxyModel: index from wrong model passed to mapFromSource "); + QTest::ignoreMessage(QtWarningMsg, "QSortFilterProxyModel: index from wrong model passed to mapFromSource"); QCOMPARE(proxy.mapFromSource(proxy.index(6, 2)), QModelIndex()); #endif } diff --git a/tests/auto/corelib/json/tst_qtjson.cpp b/tests/auto/corelib/json/tst_qtjson.cpp index c79e7273c0..a8534bf6f0 100644 --- a/tests/auto/corelib/json/tst_qtjson.cpp +++ b/tests/auto/corelib/json/tst_qtjson.cpp @@ -1985,11 +1985,11 @@ void tst_QtJson::testDebugStream() // QJsonObject QJsonObject object; - QTest::ignoreMessage(QtDebugMsg, "QJsonObject() "); + QTest::ignoreMessage(QtDebugMsg, "QJsonObject()"); qDebug() << object; object.insert(QLatin1String("foo"), QLatin1String("bar")); - QTest::ignoreMessage(QtDebugMsg, "QJsonObject({\"foo\": \"bar\"}) "); + QTest::ignoreMessage(QtDebugMsg, "QJsonObject({\"foo\": \"bar\"})"); qDebug() << object; } @@ -1997,12 +1997,12 @@ void tst_QtJson::testDebugStream() // QJsonArray QJsonArray array; - QTest::ignoreMessage(QtDebugMsg, "QJsonArray() "); + QTest::ignoreMessage(QtDebugMsg, "QJsonArray()"); qDebug() << array; array.append(1); array.append(QLatin1String("foo")); - QTest::ignoreMessage(QtDebugMsg, "QJsonArray([1,\"foo\"]) "); + QTest::ignoreMessage(QtDebugMsg, "QJsonArray([1,\"foo\"])"); qDebug() << array; } @@ -2010,19 +2010,19 @@ void tst_QtJson::testDebugStream() // QJsonDocument QJsonDocument doc; - QTest::ignoreMessage(QtDebugMsg, "QJsonDocument() "); + QTest::ignoreMessage(QtDebugMsg, "QJsonDocument()"); qDebug() << doc; QJsonObject object; object.insert(QLatin1String("foo"), QLatin1String("bar")); doc.setObject(object); - QTest::ignoreMessage(QtDebugMsg, "QJsonDocument({\"foo\": \"bar\"}) "); + QTest::ignoreMessage(QtDebugMsg, "QJsonDocument({\"foo\": \"bar\"})"); qDebug() << doc; QJsonArray array; array.append(1); array.append(QLatin1String("foo")); - QTest::ignoreMessage(QtDebugMsg, "QJsonDocument([1,\"foo\"]) "); + QTest::ignoreMessage(QtDebugMsg, "QJsonDocument([1,\"foo\"])"); doc.setArray(array); qDebug() << doc; } @@ -2032,36 +2032,36 @@ void tst_QtJson::testDebugStream() QJsonValue value; - QTest::ignoreMessage(QtDebugMsg, "QJsonValue(null) "); + QTest::ignoreMessage(QtDebugMsg, "QJsonValue(null)"); qDebug() << value; value = QJsonValue(true); // bool - QTest::ignoreMessage(QtDebugMsg, "QJsonValue(bool, true) "); + QTest::ignoreMessage(QtDebugMsg, "QJsonValue(bool, true)"); qDebug() << value; value = QJsonValue((double)4.2); // double - QTest::ignoreMessage(QtDebugMsg, "QJsonValue(double, 4.2) "); + QTest::ignoreMessage(QtDebugMsg, "QJsonValue(double, 4.2)"); qDebug() << value; value = QJsonValue((int)42); // int - QTest::ignoreMessage(QtDebugMsg, "QJsonValue(double, 42) "); + QTest::ignoreMessage(QtDebugMsg, "QJsonValue(double, 42)"); qDebug() << value; value = QJsonValue(QLatin1String("foo")); // string - QTest::ignoreMessage(QtDebugMsg, "QJsonValue(string, \"foo\") "); + QTest::ignoreMessage(QtDebugMsg, "QJsonValue(string, \"foo\")"); qDebug() << value; QJsonArray array; array.append(1); array.append(QLatin1String("foo")); value = QJsonValue(array); // array - QTest::ignoreMessage(QtDebugMsg, "QJsonValue(array, QJsonArray([1,\"foo\"]) ) "); + QTest::ignoreMessage(QtDebugMsg, "QJsonValue(array, QJsonArray([1,\"foo\"]) )"); qDebug() << value; QJsonObject object; object.insert(QLatin1String("foo"), QLatin1String("bar")); value = QJsonValue(object); // object - QTest::ignoreMessage(QtDebugMsg, "QJsonValue(object, QJsonObject({\"foo\": \"bar\"}) ) "); + QTest::ignoreMessage(QtDebugMsg, "QJsonValue(object, QJsonObject({\"foo\": \"bar\"}) )"); qDebug() << value; } } diff --git a/tests/auto/corelib/kernel/qobject/tst_qobject.cpp b/tests/auto/corelib/kernel/qobject/tst_qobject.cpp index e4804e6079..6e8de2721e 100644 --- a/tests/auto/corelib/kernel/qobject/tst_qobject.cpp +++ b/tests/auto/corelib/kernel/qobject/tst_qobject.cpp @@ -454,7 +454,7 @@ void tst_QObject::connectSlotsByName() sender.setObjectName("Sender"); QTest::ignoreMessage(QtWarningMsg, "QMetaObject::connectSlotsByName: No matching signal for on_child_signal()"); - QTest::ignoreMessage(QtWarningMsg, "QMetaObject::connectSlotsByName: Connecting slot on_Sender_signalManyParams() with the first of the following compatible signals: (\"signalManyParams(int,int,int,QString,bool)\", \"signalManyParams(int,int,int,QString,bool,bool)\") "); + QTest::ignoreMessage(QtWarningMsg, "QMetaObject::connectSlotsByName: Connecting slot on_Sender_signalManyParams() with the first of the following compatible signals: (\"signalManyParams(int,int,int,QString,bool)\", \"signalManyParams(int,int,int,QString,bool,bool)\")"); QMetaObject::connectSlotsByName(&receiver); receiver.called_slots.clear(); diff --git a/tests/auto/network/socket/qlocalsocket/tst_qlocalsocket.cpp b/tests/auto/network/socket/qlocalsocket/tst_qlocalsocket.cpp index 9887acf7dd..6053021cf4 100644 --- a/tests/auto/network/socket/qlocalsocket/tst_qlocalsocket.cpp +++ b/tests/auto/network/socket/qlocalsocket/tst_qlocalsocket.cpp @@ -1026,7 +1026,7 @@ void tst_QLocalSocket::writeToClientAndDisconnect() void tst_QLocalSocket::debug() { // Make sure this compiles - QTest::ignoreMessage(QtDebugMsg, "QLocalSocket::ConnectionRefusedError QLocalSocket::UnconnectedState "); + QTest::ignoreMessage(QtDebugMsg, "QLocalSocket::ConnectionRefusedError QLocalSocket::UnconnectedState"); qDebug() << QLocalSocket::ConnectionRefusedError << QLocalSocket::UnconnectedState; } diff --git a/tests/auto/other/qvariant_common/tst_qvariant_common.h b/tests/auto/other/qvariant_common/tst_qvariant_common.h index fc3eff4b91..7a34d7b0c2 100644 --- a/tests/auto/other/qvariant_common/tst_qvariant_common.h +++ b/tests/auto/other/qvariant_common/tst_qvariant_common.h @@ -107,7 +107,7 @@ protected: currentName.chop(1); ok &= (msg.contains(", " + currentName) || msg.contains(", 0x0")); } - ok &= msg.endsWith(") "); + ok &= msg.endsWith(")"); QVERIFY2(ok, (QString::fromLatin1("Message is not correctly finished: '") + msg + '\'').toLatin1().constData()); } diff --git a/tests/auto/testlib/selftests/expected_counting.lightxml b/tests/auto/testlib/selftests/expected_counting.lightxml index c49792fec4..799a7d7b17 100644 --- a/tests/auto/testlib/selftests/expected_counting.lightxml +++ b/tests/auto/testlib/selftests/expected_counting.lightxml @@ -107,7 +107,7 @@ - + @@ -135,7 +135,7 @@ - + diff --git a/tests/auto/testlib/selftests/expected_counting.txt b/tests/auto/testlib/selftests/expected_counting.txt index f413882c2a..51b9402d3a 100644 --- a/tests/auto/testlib/selftests/expected_counting.txt +++ b/tests/auto/testlib/selftests/expected_counting.txt @@ -36,7 +36,7 @@ FAIL! : tst_Counting::testFailInInit(fail) Fail in init() Loc: [/home/user/dev/qt5/qtbase/tests/auto/testlib/selftests/counting/tst_counting.cpp(234)] PASS : tst_Counting::testFailInInit(after) PASS : tst_Counting::testFailInCleanup(before) -QDEBUG : tst_Counting::testFailInCleanup(fail) This test function should execute and then QFAIL in cleanup() +QDEBUG : tst_Counting::testFailInCleanup(fail) This test function should execute and then QFAIL in cleanup() FAIL! : tst_Counting::testFailInCleanup(fail) Fail in cleanup() Loc: [/home/user/dev/qt5/qtbase/tests/auto/testlib/selftests/counting/tst_counting.cpp(242)] PASS : tst_Counting::testFailInCleanup(after) @@ -45,7 +45,7 @@ SKIP : tst_Counting::testSkipInInit(skip) Skip in init() Loc: [/home/user/dev/qt5/qtbase/tests/auto/testlib/selftests/counting/tst_counting.cpp(236)] PASS : tst_Counting::testSkipInInit(after) PASS : tst_Counting::testSkipInCleanup(before) -QDEBUG : tst_Counting::testSkipInCleanup(skip) This test function should execute and then QSKIP in cleanup() +QDEBUG : tst_Counting::testSkipInCleanup(skip) This test function should execute and then QSKIP in cleanup() SKIP : tst_Counting::testSkipInCleanup(skip) Skip in cleanup() Loc: [/home/user/dev/qt5/qtbase/tests/auto/testlib/selftests/counting/tst_counting.cpp(244)] PASS : tst_Counting::testSkipInCleanup(after) diff --git a/tests/auto/testlib/selftests/expected_counting.xml b/tests/auto/testlib/selftests/expected_counting.xml index 7caa915f65..8177a2dc7f 100644 --- a/tests/auto/testlib/selftests/expected_counting.xml +++ b/tests/auto/testlib/selftests/expected_counting.xml @@ -109,7 +109,7 @@ - + @@ -137,7 +137,7 @@ - + diff --git a/tests/auto/testlib/selftests/expected_counting.xunitxml b/tests/auto/testlib/selftests/expected_counting.xunitxml index f317ed5923..72bf047ba8 100644 --- a/tests/auto/testlib/selftests/expected_counting.xunitxml +++ b/tests/auto/testlib/selftests/expected_counting.xunitxml @@ -38,14 +38,14 @@ - + - + @@ -56,9 +56,9 @@ - + - + diff --git a/tests/auto/testlib/selftests/expected_globaldata.lightxml b/tests/auto/testlib/selftests/expected_globaldata.lightxml index 6d68bfbdb5..0fc9d527fb 100644 --- a/tests/auto/testlib/selftests/expected_globaldata.lightxml +++ b/tests/auto/testlib/selftests/expected_globaldata.lightxml @@ -4,83 +4,83 @@ - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + @@ -95,7 +95,7 @@ - + @@ -103,11 +103,11 @@ - + - + @@ -115,43 +115,43 @@ - + - + - + - + - + - + - + - + @@ -159,19 +159,19 @@ - + - + - + - + @@ -179,7 +179,7 @@ - + diff --git a/tests/auto/testlib/selftests/expected_globaldata.txt b/tests/auto/testlib/selftests/expected_globaldata.txt index e5d9cacc9c..4e3544dbe0 100644 --- a/tests/auto/testlib/selftests/expected_globaldata.txt +++ b/tests/auto/testlib/selftests/expected_globaldata.txt @@ -1,54 +1,54 @@ ********* Start testing of tst_globaldata ********* Config: Using QtTest library @INSERT_QT_VERSION_HERE@, Qt @INSERT_QT_VERSION_HERE@ -QDEBUG : tst_globaldata::initTestCase() initTestCase initTestCase (null) +QDEBUG : tst_globaldata::initTestCase() initTestCase initTestCase (null) PASS : tst_globaldata::initTestCase() -QDEBUG : tst_globaldata::testGlobal(1:local 1) init testGlobal local 1 -QDEBUG : tst_globaldata::testGlobal(1:local 1) global: false -QDEBUG : tst_globaldata::testGlobal(1:local 1) local: false -QDEBUG : tst_globaldata::testGlobal(1:local 1) cleanup testGlobal local 1 +QDEBUG : tst_globaldata::testGlobal(1:local 1) init testGlobal local 1 +QDEBUG : tst_globaldata::testGlobal(1:local 1) global: false +QDEBUG : tst_globaldata::testGlobal(1:local 1) local: false +QDEBUG : tst_globaldata::testGlobal(1:local 1) cleanup testGlobal local 1 PASS : tst_globaldata::testGlobal(1:local 1) -QDEBUG : tst_globaldata::testGlobal(1:local 2) init testGlobal local 2 -QDEBUG : tst_globaldata::testGlobal(1:local 2) global: false -QDEBUG : tst_globaldata::testGlobal(1:local 2) local: true -QDEBUG : tst_globaldata::testGlobal(1:local 2) cleanup testGlobal local 2 +QDEBUG : tst_globaldata::testGlobal(1:local 2) init testGlobal local 2 +QDEBUG : tst_globaldata::testGlobal(1:local 2) global: false +QDEBUG : tst_globaldata::testGlobal(1:local 2) local: true +QDEBUG : tst_globaldata::testGlobal(1:local 2) cleanup testGlobal local 2 PASS : tst_globaldata::testGlobal(1:local 2) -QDEBUG : tst_globaldata::testGlobal(2:local 1) init testGlobal local 1 -QDEBUG : tst_globaldata::testGlobal(2:local 1) global: true -QDEBUG : tst_globaldata::testGlobal(2:local 1) local: false -QDEBUG : tst_globaldata::testGlobal(2:local 1) cleanup testGlobal local 1 +QDEBUG : tst_globaldata::testGlobal(2:local 1) init testGlobal local 1 +QDEBUG : tst_globaldata::testGlobal(2:local 1) global: true +QDEBUG : tst_globaldata::testGlobal(2:local 1) local: false +QDEBUG : tst_globaldata::testGlobal(2:local 1) cleanup testGlobal local 1 PASS : tst_globaldata::testGlobal(2:local 1) -QDEBUG : tst_globaldata::testGlobal(2:local 2) init testGlobal local 2 -QDEBUG : tst_globaldata::testGlobal(2:local 2) global: true -QDEBUG : tst_globaldata::testGlobal(2:local 2) local: true -QDEBUG : tst_globaldata::testGlobal(2:local 2) cleanup testGlobal local 2 +QDEBUG : tst_globaldata::testGlobal(2:local 2) init testGlobal local 2 +QDEBUG : tst_globaldata::testGlobal(2:local 2) global: true +QDEBUG : tst_globaldata::testGlobal(2:local 2) local: true +QDEBUG : tst_globaldata::testGlobal(2:local 2) cleanup testGlobal local 2 PASS : tst_globaldata::testGlobal(2:local 2) SKIP : tst_globaldata::skip(1) skipping Loc: [/home/user/dev/qt5/qtbase/tests/auto/testlib/selftests/globaldata/tst_globaldata.cpp(129)] -QDEBUG : tst_globaldata::skipLocal(1:local 1) init skipLocal local 1 +QDEBUG : tst_globaldata::skipLocal(1:local 1) init skipLocal local 1 SKIP : tst_globaldata::skipLocal(1:local 1) skipping Loc: [/home/user/dev/qt5/qtbase/tests/auto/testlib/selftests/globaldata/tst_globaldata.cpp(149)] -QDEBUG : tst_globaldata::skipLocal(1:local 1) cleanup skipLocal local 1 -QDEBUG : tst_globaldata::skipLocal(1:local 2) init skipLocal local 2 +QDEBUG : tst_globaldata::skipLocal(1:local 1) cleanup skipLocal local 1 +QDEBUG : tst_globaldata::skipLocal(1:local 2) init skipLocal local 2 SKIP : tst_globaldata::skipLocal(1:local 2) skipping Loc: [/home/user/dev/qt5/qtbase/tests/auto/testlib/selftests/globaldata/tst_globaldata.cpp(149)] -QDEBUG : tst_globaldata::skipLocal(1:local 2) cleanup skipLocal local 2 -QDEBUG : tst_globaldata::skipSingle(1:local 1) init skipSingle local 1 -QDEBUG : tst_globaldata::skipSingle(1:local 1) global: false local: false -QDEBUG : tst_globaldata::skipSingle(1:local 1) cleanup skipSingle local 1 +QDEBUG : tst_globaldata::skipLocal(1:local 2) cleanup skipLocal local 2 +QDEBUG : tst_globaldata::skipSingle(1:local 1) init skipSingle local 1 +QDEBUG : tst_globaldata::skipSingle(1:local 1) global: false local: false +QDEBUG : tst_globaldata::skipSingle(1:local 1) cleanup skipSingle local 1 PASS : tst_globaldata::skipSingle(1:local 1) -QDEBUG : tst_globaldata::skipSingle(1:local 2) init skipSingle local 2 -QDEBUG : tst_globaldata::skipSingle(1:local 2) global: false local: true -QDEBUG : tst_globaldata::skipSingle(1:local 2) cleanup skipSingle local 2 +QDEBUG : tst_globaldata::skipSingle(1:local 2) init skipSingle local 2 +QDEBUG : tst_globaldata::skipSingle(1:local 2) global: false local: true +QDEBUG : tst_globaldata::skipSingle(1:local 2) cleanup skipSingle local 2 PASS : tst_globaldata::skipSingle(1:local 2) -QDEBUG : tst_globaldata::skipSingle(2:local 1) init skipSingle local 1 +QDEBUG : tst_globaldata::skipSingle(2:local 1) init skipSingle local 1 SKIP : tst_globaldata::skipSingle(2:local 1) skipping Loc: [/home/user/dev/qt5/qtbase/tests/auto/testlib/selftests/globaldata/tst_globaldata.cpp(143)] -QDEBUG : tst_globaldata::skipSingle(2:local 1) cleanup skipSingle local 1 -QDEBUG : tst_globaldata::skipSingle(2:local 2) init skipSingle local 2 -QDEBUG : tst_globaldata::skipSingle(2:local 2) global: true local: true -QDEBUG : tst_globaldata::skipSingle(2:local 2) cleanup skipSingle local 2 +QDEBUG : tst_globaldata::skipSingle(2:local 1) cleanup skipSingle local 1 +QDEBUG : tst_globaldata::skipSingle(2:local 2) init skipSingle local 2 +QDEBUG : tst_globaldata::skipSingle(2:local 2) global: true local: true +QDEBUG : tst_globaldata::skipSingle(2:local 2) cleanup skipSingle local 2 PASS : tst_globaldata::skipSingle(2:local 2) -QDEBUG : tst_globaldata::cleanupTestCase() cleanupTestCase cleanupTestCase (null) +QDEBUG : tst_globaldata::cleanupTestCase() cleanupTestCase cleanupTestCase (null) PASS : tst_globaldata::cleanupTestCase() Totals: 9 passed, 0 failed, 4 skipped ********* Finished testing of tst_globaldata ********* diff --git a/tests/auto/testlib/selftests/expected_globaldata.xml b/tests/auto/testlib/selftests/expected_globaldata.xml index 906e66ca68..cf2534e34a 100644 --- a/tests/auto/testlib/selftests/expected_globaldata.xml +++ b/tests/auto/testlib/selftests/expected_globaldata.xml @@ -6,83 +6,83 @@ - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + @@ -97,7 +97,7 @@ - + @@ -105,11 +105,11 @@ - + - + @@ -117,43 +117,43 @@ - + - + - + - + - + - + - + - + @@ -161,19 +161,19 @@ - + - + - + - + @@ -181,7 +181,7 @@ - + diff --git a/tests/auto/testlib/selftests/expected_globaldata.xunitxml b/tests/auto/testlib/selftests/expected_globaldata.xunitxml index 9e0cd149dc..e8cd03a59c 100644 --- a/tests/auto/testlib/selftests/expected_globaldata.xunitxml +++ b/tests/auto/testlib/selftests/expected_globaldata.xunitxml @@ -5,91 +5,91 @@ - + - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + - + - - + + - + - - - - - - - + + + + + + + - - - - + + + + - + - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + - + - - + + - - - - - - - - + + + + + + + + - - - - - + + + + + diff --git a/tests/auto/testlib/selftests/expected_subtest.lightxml b/tests/auto/testlib/selftests/expected_subtest.lightxml index 5adbb771af..45d0a71a3e 100644 --- a/tests/auto/testlib/selftests/expected_subtest.lightxml +++ b/tests/auto/testlib/selftests/expected_subtest.lightxml @@ -4,82 +4,82 @@ - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + @@ -87,37 +87,37 @@ - + - + - + - + - + - + - + - + @@ -127,15 +127,15 @@ - + - + - + @@ -145,12 +145,12 @@ - + - + diff --git a/tests/auto/testlib/selftests/expected_subtest.txt b/tests/auto/testlib/selftests/expected_subtest.txt index bb88f189ec..bb496bf33c 100644 --- a/tests/auto/testlib/selftests/expected_subtest.txt +++ b/tests/auto/testlib/selftests/expected_subtest.txt @@ -1,50 +1,50 @@ ********* Start testing of tst_Subtest ********* Config: Using QtTest library @INSERT_QT_VERSION_HERE@, Qt @INSERT_QT_VERSION_HERE@ -QDEBUG : tst_Subtest::initTestCase() initTestCase initTestCase (null) +QDEBUG : tst_Subtest::initTestCase() initTestCase initTestCase (null) PASS : tst_Subtest::initTestCase() -QDEBUG : tst_Subtest::test1() init test1 (null) -QDEBUG : tst_Subtest::test1() test1 test1 (null) -QDEBUG : tst_Subtest::test1() cleanup test1 (null) +QDEBUG : tst_Subtest::test1() init test1 (null) +QDEBUG : tst_Subtest::test1() test1 test1 (null) +QDEBUG : tst_Subtest::test1() cleanup test1 (null) PASS : tst_Subtest::test1() -QDEBUG : tst_Subtest::test2() test2_data test2 (null) -QDEBUG : tst_Subtest::test2() test2_data end -QDEBUG : tst_Subtest::test2(data0) init test2 data0 -QDEBUG : tst_Subtest::test2(data0) test2 test2 data0 -QDEBUG : tst_Subtest::test2(data0) test2 end -QDEBUG : tst_Subtest::test2(data0) cleanup test2 data0 +QDEBUG : tst_Subtest::test2() test2_data test2 (null) +QDEBUG : tst_Subtest::test2() test2_data end +QDEBUG : tst_Subtest::test2(data0) init test2 data0 +QDEBUG : tst_Subtest::test2(data0) test2 test2 data0 +QDEBUG : tst_Subtest::test2(data0) test2 end +QDEBUG : tst_Subtest::test2(data0) cleanup test2 data0 PASS : tst_Subtest::test2(data0) -QDEBUG : tst_Subtest::test2(data1) init test2 data1 -QDEBUG : tst_Subtest::test2(data1) test2 test2 data1 -QDEBUG : tst_Subtest::test2(data1) test2 end -QDEBUG : tst_Subtest::test2(data1) cleanup test2 data1 +QDEBUG : tst_Subtest::test2(data1) init test2 data1 +QDEBUG : tst_Subtest::test2(data1) test2 test2 data1 +QDEBUG : tst_Subtest::test2(data1) test2 end +QDEBUG : tst_Subtest::test2(data1) cleanup test2 data1 PASS : tst_Subtest::test2(data1) -QDEBUG : tst_Subtest::test2(data2) init test2 data2 -QDEBUG : tst_Subtest::test2(data2) test2 test2 data2 -QDEBUG : tst_Subtest::test2(data2) test2 end -QDEBUG : tst_Subtest::test2(data2) cleanup test2 data2 +QDEBUG : tst_Subtest::test2(data2) init test2 data2 +QDEBUG : tst_Subtest::test2(data2) test2 test2 data2 +QDEBUG : tst_Subtest::test2(data2) test2 end +QDEBUG : tst_Subtest::test2(data2) cleanup test2 data2 PASS : tst_Subtest::test2(data2) -QDEBUG : tst_Subtest::test3() test3_data test3 (null) -QDEBUG : tst_Subtest::test3() test3_data end -QDEBUG : tst_Subtest::test3(data0) init test3 data0 -QDEBUG : tst_Subtest::test3(data0) test2 test3 data0 -QDEBUG : tst_Subtest::test3(data0) test2 end -QDEBUG : tst_Subtest::test3(data0) cleanup test3 data0 +QDEBUG : tst_Subtest::test3() test3_data test3 (null) +QDEBUG : tst_Subtest::test3() test3_data end +QDEBUG : tst_Subtest::test3(data0) init test3 data0 +QDEBUG : tst_Subtest::test3(data0) test2 test3 data0 +QDEBUG : tst_Subtest::test3(data0) test2 end +QDEBUG : tst_Subtest::test3(data0) cleanup test3 data0 PASS : tst_Subtest::test3(data0) -QDEBUG : tst_Subtest::test3(data1) init test3 data1 -QDEBUG : tst_Subtest::test3(data1) test2 test3 data1 +QDEBUG : tst_Subtest::test3(data1) init test3 data1 +QDEBUG : tst_Subtest::test3(data1) test2 test3 data1 FAIL! : tst_Subtest::test3(data1) Compared values are not the same Actual (str) : hello1 Expected (QString("hello0")): hello0 Loc: [/home/user/dev/qt5/qtbase/tests/auto/testlib/selftests/subtest/tst_subtest.cpp(154)] -QDEBUG : tst_Subtest::test3(data1) cleanup test3 data1 -QDEBUG : tst_Subtest::test3(data2) init test3 data2 -QDEBUG : tst_Subtest::test3(data2) test2 test3 data2 +QDEBUG : tst_Subtest::test3(data1) cleanup test3 data1 +QDEBUG : tst_Subtest::test3(data2) init test3 data2 +QDEBUG : tst_Subtest::test3(data2) test2 test3 data2 FAIL! : tst_Subtest::test3(data2) Compared values are not the same Actual (str) : hello2 Expected (QString("hello0")): hello0 Loc: [/home/user/dev/qt5/qtbase/tests/auto/testlib/selftests/subtest/tst_subtest.cpp(154)] -QDEBUG : tst_Subtest::test3(data2) cleanup test3 data2 -QDEBUG : tst_Subtest::cleanupTestCase() cleanupTestCase cleanupTestCase (null) +QDEBUG : tst_Subtest::test3(data2) cleanup test3 data2 +QDEBUG : tst_Subtest::cleanupTestCase() cleanupTestCase cleanupTestCase (null) PASS : tst_Subtest::cleanupTestCase() Totals: 7 passed, 2 failed, 0 skipped ********* Finished testing of tst_Subtest ********* diff --git a/tests/auto/testlib/selftests/expected_subtest.xml b/tests/auto/testlib/selftests/expected_subtest.xml index 094e22383d..b0a5c8a810 100644 --- a/tests/auto/testlib/selftests/expected_subtest.xml +++ b/tests/auto/testlib/selftests/expected_subtest.xml @@ -6,82 +6,82 @@ - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + @@ -89,37 +89,37 @@ - + - + - + - + - + - + - + - + @@ -129,15 +129,15 @@ - + - + - + @@ -147,12 +147,12 @@ - + - + diff --git a/tests/auto/testlib/selftests/expected_subtest.xunitxml b/tests/auto/testlib/selftests/expected_subtest.xunitxml index 6f8fc3db45..5f7024e8ba 100644 --- a/tests/auto/testlib/selftests/expected_subtest.xunitxml +++ b/tests/auto/testlib/selftests/expected_subtest.xunitxml @@ -5,83 +5,83 @@ - + - - - + + + - - - - - - - - - - - - - - + + + + + + + + + + + + + + - - - - - - - - + + + + + + + + - - - + + + - + - + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/tests/auto/testlib/selftests/expected_verbose1.lightxml b/tests/auto/testlib/selftests/expected_verbose1.lightxml index c49792fec4..799a7d7b17 100644 --- a/tests/auto/testlib/selftests/expected_verbose1.lightxml +++ b/tests/auto/testlib/selftests/expected_verbose1.lightxml @@ -107,7 +107,7 @@ - + @@ -135,7 +135,7 @@ - + diff --git a/tests/auto/testlib/selftests/expected_verbose1.txt b/tests/auto/testlib/selftests/expected_verbose1.txt index 4ba42c1c8e..23962a0ff6 100644 --- a/tests/auto/testlib/selftests/expected_verbose1.txt +++ b/tests/auto/testlib/selftests/expected_verbose1.txt @@ -48,7 +48,7 @@ FAIL! : tst_Counting::testFailInInit(fail) Fail in init() PASS : tst_Counting::testFailInInit(after) INFO : tst_Counting::testFailInCleanup() entering PASS : tst_Counting::testFailInCleanup(before) -QDEBUG : tst_Counting::testFailInCleanup(fail) This test function should execute and then QFAIL in cleanup() +QDEBUG : tst_Counting::testFailInCleanup(fail) This test function should execute and then QFAIL in cleanup() FAIL! : tst_Counting::testFailInCleanup(fail) Fail in cleanup() Loc: [/home/user/dev/qt5/qtbase/tests/auto/testlib/selftests/counting/tst_counting.cpp(242)] PASS : tst_Counting::testFailInCleanup(after) @@ -59,7 +59,7 @@ SKIP : tst_Counting::testSkipInInit(skip) Skip in init() PASS : tst_Counting::testSkipInInit(after) INFO : tst_Counting::testSkipInCleanup() entering PASS : tst_Counting::testSkipInCleanup(before) -QDEBUG : tst_Counting::testSkipInCleanup(skip) This test function should execute and then QSKIP in cleanup() +QDEBUG : tst_Counting::testSkipInCleanup(skip) This test function should execute and then QSKIP in cleanup() SKIP : tst_Counting::testSkipInCleanup(skip) Skip in cleanup() Loc: [/home/user/dev/qt5/qtbase/tests/auto/testlib/selftests/counting/tst_counting.cpp(244)] PASS : tst_Counting::testSkipInCleanup(after) diff --git a/tests/auto/testlib/selftests/expected_verbose1.xml b/tests/auto/testlib/selftests/expected_verbose1.xml index 7caa915f65..8177a2dc7f 100644 --- a/tests/auto/testlib/selftests/expected_verbose1.xml +++ b/tests/auto/testlib/selftests/expected_verbose1.xml @@ -109,7 +109,7 @@ - + @@ -137,7 +137,7 @@ - + diff --git a/tests/auto/testlib/selftests/expected_verbose1.xunitxml b/tests/auto/testlib/selftests/expected_verbose1.xunitxml index f317ed5923..72bf047ba8 100644 --- a/tests/auto/testlib/selftests/expected_verbose1.xunitxml +++ b/tests/auto/testlib/selftests/expected_verbose1.xunitxml @@ -38,14 +38,14 @@ - + - + @@ -56,9 +56,9 @@ - + - + diff --git a/tests/auto/testlib/selftests/expected_verbose2.lightxml b/tests/auto/testlib/selftests/expected_verbose2.lightxml index 2937adbe01..4e5f9952b8 100644 --- a/tests/auto/testlib/selftests/expected_verbose2.lightxml +++ b/tests/auto/testlib/selftests/expected_verbose2.lightxml @@ -179,7 +179,7 @@ - + @@ -207,7 +207,7 @@ - + diff --git a/tests/auto/testlib/selftests/expected_verbose2.txt b/tests/auto/testlib/selftests/expected_verbose2.txt index e9c7838f6d..d8c6e4a218 100644 --- a/tests/auto/testlib/selftests/expected_verbose2.txt +++ b/tests/auto/testlib/selftests/expected_verbose2.txt @@ -84,7 +84,7 @@ FAIL! : tst_Counting::testFailInInit(fail) Fail in init() PASS : tst_Counting::testFailInInit(after) INFO : tst_Counting::testFailInCleanup() entering PASS : tst_Counting::testFailInCleanup(before) -QDEBUG : tst_Counting::testFailInCleanup(fail) This test function should execute and then QFAIL in cleanup() +QDEBUG : tst_Counting::testFailInCleanup(fail) This test function should execute and then QFAIL in cleanup() FAIL! : tst_Counting::testFailInCleanup(fail) Fail in cleanup() Loc: [/home/user/dev/qt5/qtbase/tests/auto/testlib/selftests/counting/tst_counting.cpp(242)] PASS : tst_Counting::testFailInCleanup(after) @@ -95,7 +95,7 @@ SKIP : tst_Counting::testSkipInInit(skip) Skip in init() PASS : tst_Counting::testSkipInInit(after) INFO : tst_Counting::testSkipInCleanup() entering PASS : tst_Counting::testSkipInCleanup(before) -QDEBUG : tst_Counting::testSkipInCleanup(skip) This test function should execute and then QSKIP in cleanup() +QDEBUG : tst_Counting::testSkipInCleanup(skip) This test function should execute and then QSKIP in cleanup() SKIP : tst_Counting::testSkipInCleanup(skip) Skip in cleanup() Loc: [/home/user/dev/qt5/qtbase/tests/auto/testlib/selftests/counting/tst_counting.cpp(244)] PASS : tst_Counting::testSkipInCleanup(after) diff --git a/tests/auto/testlib/selftests/expected_verbose2.xml b/tests/auto/testlib/selftests/expected_verbose2.xml index bbdca567d3..bf5e7c7570 100644 --- a/tests/auto/testlib/selftests/expected_verbose2.xml +++ b/tests/auto/testlib/selftests/expected_verbose2.xml @@ -181,7 +181,7 @@ - + @@ -209,7 +209,7 @@ - + diff --git a/tests/auto/testlib/selftests/expected_verbose2.xunitxml b/tests/auto/testlib/selftests/expected_verbose2.xunitxml index a774cb9d9f..6dabbd34fc 100644 --- a/tests/auto/testlib/selftests/expected_verbose2.xunitxml +++ b/tests/auto/testlib/selftests/expected_verbose2.xunitxml @@ -57,14 +57,14 @@ - + - + @@ -93,9 +93,9 @@ - + - + -- cgit v1.2.3 From 1efe5d4b4141ef7b47c692f244178496578f15ae Mon Sep 17 00:00:00 2001 From: Oliver Wolff Date: Fri, 6 Dec 2013 13:36:03 +0100 Subject: WinRT: Fixed compilation of network autotests and benchmarks Change-Id: Id689f199cfb22dce231cec36faba57ab958b1bac Reviewed-by: Maurice Kalinowski --- tests/auto/network/access/qftp/tst_qftp.cpp | 17 +++++++-- .../access/qnetworkreply/tst_qnetworkreply.cpp | 42 ++++++++++++++++++++++ tests/auto/network/kernel/kernel.pro | 4 +++ .../kernel/qhostaddress/tst_qhostaddress.cpp | 3 ++ .../tst_platformsocketengine.cpp | 14 ++++++-- .../network/socket/qtcpserver/tst_qtcpserver.cpp | 38 ++++++++++++++++++++ .../network/socket/qtcpsocket/tst_qtcpsocket.cpp | 24 +++++++++++++ .../network/socket/qudpsocket/tst_qudpsocket.cpp | 16 +++++++++ tests/auto/network/socket/socket.pro | 4 +++ .../auto/network/ssl/qsslsocket/tst_qsslsocket.cpp | 10 ++++++ tests/auto/network/ssl/ssl.pro | 4 +++ .../network/socket/qtcpserver/tst_qtcpserver.cpp | 8 +++++ 12 files changed, 180 insertions(+), 4 deletions(-) (limited to 'tests') diff --git a/tests/auto/network/access/qftp/tst_qftp.cpp b/tests/auto/network/access/qftp/tst_qftp.cpp index 71af9690be..fffe663f0a 100644 --- a/tests/auto/network/access/qftp/tst_qftp.cpp +++ b/tests/auto/network/access/qftp/tst_qftp.cpp @@ -197,14 +197,18 @@ void tst_QFtp::initTestCase_data() QTest::addColumn("setSession"); QTest::newRow("WithoutProxy") << false << 0 << false; +#ifndef QT_NO_SOCKS5 QTest::newRow("WithSocks5Proxy") << true << int(QNetworkProxy::Socks5Proxy) << false; +#endif //### doesn't work well yet. //QTest::newRow("WithHttpProxy") << true << int(QNetworkProxy::HttpProxy); #ifndef QT_NO_BEARERMANAGEMENT QTest::newRow("WithoutProxyWithSession") << false << 0 << true; +#ifndef QT_NO_SOCKS5 QTest::newRow("WithSocks5ProxyAndSession") << true << int(QNetworkProxy::Socks5Proxy) << true; #endif +#endif } void tst_QFtp::initTestCase() @@ -232,11 +236,16 @@ void tst_QFtp::init() QFETCH_GLOBAL(int, proxyType); QFETCH_GLOBAL(bool, setSession); if (setProxy) { +#ifndef QT_NO_NETWORKPROXY if (proxyType == QNetworkProxy::Socks5Proxy) { QNetworkProxy::setApplicationProxy(QNetworkProxy(QNetworkProxy::Socks5Proxy, QtNetworkSettings::serverName(), 1080)); } else if (proxyType == QNetworkProxy::HttpProxy) { QNetworkProxy::setApplicationProxy(QNetworkProxy(QNetworkProxy::HttpProxy, QtNetworkSettings::serverName(), 3128)); } +#else // !QT_NO_NETWORKPROXY + Q_UNUSED(proxyType); + QSKIP("No proxy support"); +#endif // QT_NO_NETWORKPROXY } #ifndef QT_NO_BEARERMANAGEMENT if (setSession) { @@ -293,7 +302,11 @@ void tst_QFtp::cleanup() } QFETCH_GLOBAL(bool, setProxy); if (setProxy) { +#ifndef QT_NO_NETWORKPROXY QNetworkProxy::setApplicationProxy(QNetworkProxy::DefaultProxy); +#else + QSKIP("No proxy support"); +#endif } delete ftp; @@ -749,14 +762,14 @@ void tst_QFtp::put() QFETCH( QByteArray, fileData ); QFETCH( bool, useIODevice ); -#ifdef Q_OS_WIN +#if defined(Q_OS_WIN) && !defined(QT_NO_NETWORKPROXY) QFETCH_GLOBAL(bool, setProxy); if (setProxy) { QFETCH_GLOBAL(int, proxyType); if (proxyType == QNetworkProxy::Socks5Proxy) QSKIP("With socks5 the put() test takes too long time on Windows."); } -#endif +#endif // OS_WIN && !QT_NO_NETWORKPROXY const int timestep = 50; diff --git a/tests/auto/network/access/qnetworkreply/tst_qnetworkreply.cpp b/tests/auto/network/access/qnetworkreply/tst_qnetworkreply.cpp index 1837e8d665..b35c934680 100644 --- a/tests/auto/network/access/qnetworkreply/tst_qnetworkreply.cpp +++ b/tests/auto/network/access/qnetworkreply/tst_qnetworkreply.cpp @@ -97,7 +97,9 @@ Q_DECLARE_METATYPE(QSharedPointer) #include "../../../network-settings.h" Q_DECLARE_METATYPE(QAuthenticator*) +#ifndef QT_NO_NETWORKPROXY Q_DECLARE_METATYPE(QNetworkProxyQuery) +#endif typedef QSharedPointer QNetworkReplyPtr; @@ -106,6 +108,7 @@ class tst_QNetworkReply: public QObject { Q_OBJECT +#ifndef QT_NO_NETWORKPROXY struct ProxyData { ProxyData(const QNetworkProxy &p, const QByteArray &t, bool auth) : tag(t), proxy(p), requiresAuthentication(auth) @@ -114,6 +117,7 @@ class tst_QNetworkReply: public QObject QNetworkProxy proxy; bool requiresAuthentication; }; +#endif // !QT_NO_NETWORKPROXY static bool seedCreated; static QString createUniqueExtension() { @@ -134,7 +138,9 @@ class tst_QNetworkReply: public QObject QString wronlyFileName; #endif QString uniqueExtension; +#ifndef QT_NO_NETWORKPROXY QList proxies; +#endif QNetworkAccessManager manager; MyCookieJar *cookieJar; #ifndef QT_NO_SSL @@ -203,8 +209,10 @@ private Q_SLOTS: void getFromHttp(); void getErrors_data(); void getErrors(); +#ifndef QT_NO_NETWORKPROXY void headFromHttp_data(); void headFromHttp(); +#endif // !QT_NO_NETWORKPROXY void putToFile_data(); void putToFile(); void putToFtp_data(); @@ -261,9 +269,11 @@ private Q_SLOTS: void ioGetFromHttpWithAuth_data(); void ioGetFromHttpWithAuth(); void ioGetFromHttpWithAuthSynchronous(); +#ifndef QT_NO_NETWORKPROXY void ioGetFromHttpWithProxyAuth(); void ioGetFromHttpWithProxyAuthSynchronous(); void ioGetFromHttpWithSocksProxy(); +#endif // !QT_NO_NETWORKPROXY #ifndef QT_NO_SSL void ioGetFromHttpsWithSslErrors(); void ioGetFromHttpsWithIgnoreSslErrors(); @@ -278,8 +288,10 @@ private Q_SLOTS: void ioGetFromHttpWithCache_data(); void ioGetFromHttpWithCache(); +#ifndef QT_NO_NETWORKPROXY void ioGetWithManyProxies_data(); void ioGetWithManyProxies(); +#endif // !QT_NO_NETWORKPROXY void ioPutToFileFromFile_data(); void ioPutToFileFromFile(); @@ -297,10 +309,12 @@ private Q_SLOTS: void ioPutToHttpFromFile(); void ioPostToHttpFromFile_data(); void ioPostToHttpFromFile(); +#ifndef QT_NO_NETWORKPROXY void ioPostToHttpFromSocket_data(); void ioPostToHttpFromSocket(); void ioPostToHttpFromSocketSynchronous(); void ioPostToHttpFromSocketSynchronous_data(); +#endif // !QT_NO_NETWORKPROXY void ioPostToHttpFromMiddleOfFileToEnd(); void ioPostToHttpFromMiddleOfFileFiveBytes(); void ioPostToHttpFromMiddleOfQBufferFiveBytes(); @@ -339,11 +353,13 @@ private Q_SLOTS: void nestedEventLoops(); +#ifndef QT_NO_NETWORKPROXY void httpProxyCommands_data(); void httpProxyCommands(); void httpProxyCommandsSynchronous_data(); void httpProxyCommandsSynchronous(); void proxyChange(); +#endif // !QT_NO_NETWORKPROXY void authorizationError_data(); void authorizationError(); @@ -419,9 +435,11 @@ private Q_SLOTS: void dontInsertPartialContentIntoTheCache(); void httpUserAgent(); +#ifndef QT_NO_NETWORKPROXY void authenticationCacheAfterCancel_data(); void authenticationCacheAfterCancel(); void authenticationWithDifferentRealm(); +#endif // !QT_NO_NETWORKPROXY void synchronousAuthenticationCache(); void pipelining(); @@ -638,6 +656,7 @@ public: { QNetworkCookieJar::setAllCookies(cookieList); } }; +#ifndef QT_NO_NETWORKPROXY class MyProxyFactory: public QNetworkProxyFactory { public: @@ -660,6 +679,7 @@ public: return toReturn; } }; +#endif // !QT_NO_NETWORKPROXY class MyMemoryCache: public QAbstractNetworkCache { @@ -1154,7 +1174,9 @@ tst_QNetworkReply::tst_QNetworkReply() { qRegisterMetaType(); // for QSignalSpy qRegisterMetaType(); +#ifndef QT_NO_NETWORKPROXY qRegisterMetaType(); +#endif #ifndef QT_NO_SSL qRegisterMetaType >(); #endif @@ -1165,6 +1187,7 @@ tst_QNetworkReply::tst_QNetworkReply() cookieJar = new MyCookieJar; manager.setCookieJar(cookieJar); +#ifndef QT_NO_NETWORKPROXY QHostInfo hostInfo = QHostInfo::fromName(QtNetworkSettings::serverName()); proxies << ProxyData(QNetworkProxy::NoProxy, "", false); @@ -1178,10 +1201,13 @@ tst_QNetworkReply::tst_QNetworkReply() << ProxyData(QNetworkProxy(QNetworkProxy::Socks5Proxy, proxyserver, 1080), "+socks", false) << ProxyData(QNetworkProxy(QNetworkProxy::Socks5Proxy, proxyserver, 1081), "+socksauth", true); } else { +#endif // !QT_NO_NETWORKPROXY printf("==================================================================\n"); printf("Proxy could not be looked up. No proxy will be used while testing!\n"); printf("==================================================================\n"); +#ifndef QT_NO_NETWORKPROXY } +#endif // !QT_NO_NETWORKPROXY } tst_QNetworkReply::~tst_QNetworkReply() @@ -1438,7 +1464,9 @@ void tst_QNetworkReply::cleanup() // clear the internal cache manager.clearAccessCache(); +#ifndef QT_NO_NETWORKPROXY manager.setProxy(QNetworkProxy()); +#endif manager.setCache(0); // clear cookies @@ -1732,6 +1760,7 @@ void tst_QNetworkReply::getFromHttp() QCOMPARE(reply->readAll(), reference.readAll()); } +#ifndef QT_NO_NETWORKPROXY void tst_QNetworkReply::headFromHttp_data() { QTest::addColumn("referenceSize"); @@ -1790,6 +1819,7 @@ void tst_QNetworkReply::headFromHttp() if (reply->header(QNetworkRequest::ContentTypeHeader).isValid()) QCOMPARE(reply->header(QNetworkRequest::ContentTypeHeader).toString(), contentType); } +#endif // !QT_NO_NETWORKPROXY void tst_QNetworkReply::getErrors_data() { @@ -3270,6 +3300,7 @@ void tst_QNetworkReply::ioGetFromHttpWithAuthSynchronous() QCOMPARE(replySync->attribute(QNetworkRequest::HttpStatusCodeAttribute).toInt(), 401); } +#ifndef QT_NO_NETWORKPROXY void tst_QNetworkReply::ioGetFromHttpWithProxyAuth() { // This test sends three requests @@ -3432,6 +3463,7 @@ void tst_QNetworkReply::ioGetFromHttpWithSocksProxy() QCOMPARE(authspy.count(), 0); } } +#endif // !QT_NO_NETWORKPROXY #ifndef QT_NO_SSL void tst_QNetworkReply::ioGetFromHttpsWithSslErrors() @@ -3793,6 +3825,7 @@ void tst_QNetworkReply::ioGetFromHttpWithCache() QCOMPARE(reply->readAll().constData(), qPrintable(body)); } +#ifndef QT_NO_NETWORKPROXY void tst_QNetworkReply::ioGetWithManyProxies_data() { QTest::addColumn >("proxyList"); @@ -4054,6 +4087,7 @@ void tst_QNetworkReply::ioGetWithManyProxies() QCOMPARE(authspy.count(), 0); } } +#endif // !QT_NO_NETWORKPROXY void tst_QNetworkReply::ioPutToFileFromFile_data() { @@ -4346,6 +4380,7 @@ void tst_QNetworkReply::ioPostToHttpFromFile() QCOMPARE(reply->readAll().trimmed(), md5sum(sourceFile.readAll()).toHex()); } +#ifndef QT_NO_NETWORKPROXY void tst_QNetworkReply::ioPostToHttpFromSocket_data() { QTest::addColumn("data"); @@ -4496,6 +4531,7 @@ void tst_QNetworkReply::ioPostToHttpFromSocketSynchronous() QCOMPARE(reply->readAll().trimmed(), md5sum(data).toHex()); } +#endif // !QT_NO_NETWORKPROXY // this tests checks if rewinding the POST-data to some place in the middle // worked. @@ -5410,6 +5446,7 @@ void tst_QNetworkReply::nestedEventLoops() QCOMPARE(errorspy.count(), 0); } +#ifndef QT_NO_NETWORKPROXY void tst_QNetworkReply::httpProxyCommands_data() { QTest::addColumn("url"); @@ -5485,6 +5522,7 @@ void tst_QNetworkReply::httpProxyCommandsSynchronous_data() { httpProxyCommands_data(); } +#endif // !QT_NO_NETWORKPROXY struct QThreadCleanup { @@ -5506,6 +5544,7 @@ struct QDeleteLaterCleanup } }; +#ifndef QT_NO_NETWORKPROXY void tst_QNetworkReply::httpProxyCommandsSynchronous() { QFETCH(QUrl, url); @@ -5586,6 +5625,7 @@ void tst_QNetworkReply::proxyChange() QVERIFY(int(reply3->error()) > 0); } +#endif // !QT_NO_NETWORKPROXY void tst_QNetworkReply::authorizationError_data() { @@ -6502,6 +6542,7 @@ void tst_QNetworkReply::qtbug4121unknownAuthentication() QCOMPARE(reply->error(), QNetworkReply::AuthenticationRequiredError); } +#ifndef QT_NO_NETWORKPROXY void tst_QNetworkReply::authenticationCacheAfterCancel_data() { QTest::addColumn("proxy"); @@ -6716,6 +6757,7 @@ void tst_QNetworkReply::authenticationWithDifferentRealm() QVERIFY(!QTestEventLoop::instance().timeout()); QCOMPARE(reply->error(), QNetworkReply::NoError); } +#endif // !QT_NO_NETWORKPROXY class QtBug13431Helper : public QObject { Q_OBJECT diff --git a/tests/auto/network/kernel/kernel.pro b/tests/auto/network/kernel/kernel.pro index 14080a0548..8594ad5932 100644 --- a/tests/auto/network/kernel/kernel.pro +++ b/tests/auto/network/kernel/kernel.pro @@ -10,6 +10,10 @@ SUBDIRS=\ qnetworkaddressentry \ qhostaddress \ +winrt: SUBDIRS -= \ + qnetworkproxy \ + qnetworkproxyfactory \ + !contains(QT_CONFIG, private_tests): SUBDIRS -= \ qauthenticator \ qhostinfo \ diff --git a/tests/auto/network/kernel/qhostaddress/tst_qhostaddress.cpp b/tests/auto/network/kernel/qhostaddress/tst_qhostaddress.cpp index acb921b34a..c4d42206fe 100644 --- a/tests/auto/network/kernel/qhostaddress/tst_qhostaddress.cpp +++ b/tests/auto/network/kernel/qhostaddress/tst_qhostaddress.cpp @@ -339,12 +339,15 @@ void tst_QHostAddress::assignment() address = "::1"; QCOMPARE(address, QHostAddress("::1")); + // WinRT does not support sockaddr_in +#ifndef Q_OS_WINRT QHostAddress addr("4.2.2.1"); sockaddr_in sockAddr; sockAddr.sin_family = AF_INET; sockAddr.sin_addr.s_addr = htonl(addr.toIPv4Address()); address.setAddress((sockaddr *)&sockAddr); QCOMPARE(address, addr); +#endif // !Q_OS_WINRT } void tst_QHostAddress::scopeId() diff --git a/tests/auto/network/socket/platformsocketengine/tst_platformsocketengine.cpp b/tests/auto/network/socket/platformsocketengine/tst_platformsocketengine.cpp index f474f97f5d..35028735e2 100644 --- a/tests/auto/network/socket/platformsocketengine/tst_platformsocketengine.cpp +++ b/tests/auto/network/socket/platformsocketengine/tst_platformsocketengine.cpp @@ -64,7 +64,11 @@ #define PLATFORMSOCKETENGINE QNativeSocketEngine #define PLATFORMSOCKETENGINESTRING "QNativeSocketEngine" -#include +#ifndef Q_OS_WINRT +# include +#else +# include +#endif #include @@ -97,7 +101,9 @@ private slots: void networkError(); void setSocketDescriptor(); void invalidSend(); +#ifndef Q_OS_WINRT void receiveUrgentData(); +#endif void tooManySockets(); }; @@ -608,7 +614,9 @@ void tst_PlatformSocketEngine::networkError() QVERIFY(client.state() == QAbstractSocket::ConnectedState); // An unexpected network error! -#ifdef Q_OS_WIN +#ifdef Q_OS_WINRT + client.close(); +#elif defined(Q_OS_WIN) // could use shutdown to produce different errors ::closesocket(client.socketDescriptor()); #else @@ -641,6 +649,7 @@ void tst_PlatformSocketEngine::invalidSend() } //--------------------------------------------------------------------------- +#ifndef Q_OS_WINRT void tst_PlatformSocketEngine::receiveUrgentData() { PLATFORMSOCKETENGINE server; @@ -703,6 +712,7 @@ void tst_PlatformSocketEngine::receiveUrgentData() QCOMPARE(response.at(0), msg); #endif } +#endif // !Q_OS_WINRT QTEST_MAIN(tst_PlatformSocketEngine) #include "tst_platformsocketengine.moc" diff --git a/tests/auto/network/socket/qtcpserver/tst_qtcpserver.cpp b/tests/auto/network/socket/qtcpserver/tst_qtcpserver.cpp index d838b463f7..10b41ced9e 100644 --- a/tests/auto/network/socket/qtcpserver/tst_qtcpserver.cpp +++ b/tests/auto/network/socket/qtcpserver/tst_qtcpserver.cpp @@ -100,16 +100,20 @@ private slots: void maxPendingConnections(); void listenError(); void waitForConnectionTest(); +#ifndef Q_OS_WINRT void setSocketDescriptor(); +#endif void listenWhileListening(); #ifndef QT_NO_PROCESS void addressReusable(); #endif void setNewSocketDescriptorBlocking(); +#ifndef QT_NO_NETWORKPROXY void invalidProxy_data(); void invalidProxy(); void proxyFactory_data(); void proxyFactory(); +#endif // !QT_NO_NETWORKPROXY void qtbug14268_peek(); @@ -158,7 +162,9 @@ void tst_QTcpServer::initTestCase_data() QTest::addColumn("proxyType"); QTest::newRow("WithoutProxy") << false << 0; +#ifndef QT_NO_SOCKS5 QTest::newRow("WithSocks5Proxy") << true << int(QNetworkProxy::Socks5Proxy); +#endif crashingServerDir = QFINDTESTDATA("crashingServer"); QVERIFY2(!crashingServerDir.isEmpty(), qPrintable( @@ -181,16 +187,22 @@ void tst_QTcpServer::init() { QFETCH_GLOBAL(bool, setProxy); if (setProxy) { +#ifndef QT_NO_NETWORKPROXY QFETCH_GLOBAL(int, proxyType); if (proxyType == QNetworkProxy::Socks5Proxy) { QNetworkProxy::setApplicationProxy(QNetworkProxy(QNetworkProxy::Socks5Proxy, QtNetworkSettings::serverName(), 1080)); } +#else // !QT_NO_NETWORKPROXY + QSKIP("No proxy support"); +#endif // QT_NO_NETWORKPROXY } } void tst_QTcpServer::cleanup() { +#ifndef QT_NO_NETWORKPROXY QNetworkProxy::setApplicationProxy(QNetworkProxy::DefaultProxy); +#endif } //---------------------------------------------------------------------------------- @@ -369,9 +381,13 @@ void tst_QTcpServer::maxPendingConnections() { QFETCH_GLOBAL(bool, setProxy); if (setProxy) { +#ifndef QT_NO_NETWORKPROXY QFETCH_GLOBAL(int, proxyType); if (proxyType == QNetworkProxy::Socks5Proxy) QSKIP("With socks5 only 1 connection is allowed ever"); +#else // !QT_NO_NETWORKPROXY + QSKIP("No proxy support"); +#endif // QT_NO_NETWORKPROXY } //### sees to fail sometimes ... a timing issue with the test on windows QTcpServer server; @@ -407,9 +423,13 @@ void tst_QTcpServer::listenError() { QFETCH_GLOBAL(bool, setProxy); if (setProxy) { +#ifndef QT_NO_NETWORKPROXY QFETCH_GLOBAL(int, proxyType); if (proxyType == QNetworkProxy::Socks5Proxy) QSKIP("With socks5 we can not make hard requirements on the address or port"); +#else // !QT_NO_NETWORKPROXY + QSKIP("No proxy support"); +#endif //QT_NO_NETWORKPROXY } QTcpServer server; QVERIFY(!server.listen(QHostAddress("1.2.3.4"), 0)); @@ -453,9 +473,13 @@ void tst_QTcpServer::waitForConnectionTest() QFETCH_GLOBAL(bool, setProxy); if (setProxy) { +#ifndef QT_NO_NETWORKPROXY QFETCH_GLOBAL(int, proxyType); if (proxyType == QNetworkProxy::Socks5Proxy) QSKIP("Localhost servers don't work well with SOCKS5"); +#else // !QT_NO_NETWORKPROXY + QSKIP("No proxy support"); +#endif // QT_NO_NETWORKPROXY } QTcpSocket findLocalIpSocket; @@ -481,6 +505,7 @@ void tst_QTcpServer::waitForConnectionTest() } //---------------------------------------------------------------------------------- +#ifndef Q_OS_WINRT void tst_QTcpServer::setSocketDescriptor() { QTcpServer server; @@ -510,6 +535,7 @@ void tst_QTcpServer::setSocketDescriptor() WSACleanup(); #endif } +#endif // !Q_OS_WINRT //---------------------------------------------------------------------------------- void tst_QTcpServer::listenWhileListening() @@ -531,6 +557,7 @@ public: bool ok; protected: +#ifndef Q_OS_WINRT void incomingConnection(qintptr socketDescriptor) { // how a user woulddo it (qabstractsocketengine is not public) @@ -543,6 +570,7 @@ protected: ::close(socketDescriptor); #endif } +#endif // !Q_OS_WINRT }; #ifndef QT_NO_PROCESS @@ -550,9 +578,13 @@ void tst_QTcpServer::addressReusable() { QFETCH_GLOBAL(bool, setProxy); if (setProxy) { +#ifndef QT_NO_NETWORKPROXY QFETCH_GLOBAL(int, proxyType); if (proxyType == QNetworkProxy::Socks5Proxy) QSKIP("With socks5 this test does not make senans at the momment"); +#else // !QT_NO_NETWORKPROXY + QSKIP("No proxy support"); +#endif // QT_NO_NETWORKPROXY } #if defined(Q_OS_WINCE) QString signalName = QString::fromLatin1("/test_signal.txt"); @@ -596,9 +628,13 @@ void tst_QTcpServer::setNewSocketDescriptorBlocking() { QFETCH_GLOBAL(bool, setProxy); if (setProxy) { +#ifndef QT_NO_NETWORKPROXY QFETCH_GLOBAL(int, proxyType); if (proxyType == QNetworkProxy::Socks5Proxy) QSKIP("With socks5 we can not make the socket descripter blocking"); +#else // !QT_NO_NETWORKPROXY + QSKIP("No proxy support"); +#endif // QT_NO_NETWORKPROXY } SeverWithBlockingSockets server; QVERIFY(server.listen()); @@ -609,6 +645,7 @@ void tst_QTcpServer::setNewSocketDescriptorBlocking() QVERIFY(server.ok); } +#ifndef QT_NO_NETWORKPROXY void tst_QTcpServer::invalidProxy_data() { QTest::addColumn("type"); @@ -763,6 +800,7 @@ void tst_QTcpServer::proxyFactory() // Sometimes, error codes change for the better QTEST(int(server.serverError()), "expectedError"); } +#endif // !QT_NO_NETWORKPROXY class Qtbug14268Helper : public QObject { diff --git a/tests/auto/network/socket/qtcpsocket/tst_qtcpsocket.cpp b/tests/auto/network/socket/qtcpsocket/tst_qtcpsocket.cpp index b6df536b98..f4eac0d6b8 100644 --- a/tests/auto/network/socket/qtcpsocket/tst_qtcpsocket.cpp +++ b/tests/auto/network/socket/qtcpsocket/tst_qtcpsocket.cpp @@ -132,7 +132,9 @@ private slots: void bind_data(); void bind(); void setInvalidSocketDescriptor(); +#ifndef Q_OS_WINRT void setSocketDescriptor(); +#endif void socketDescriptor(); void blockingIMAP(); void nonBlockingIMAP(); @@ -191,10 +193,12 @@ private slots: void taskQtBug5799ConnectionErrorEventLoop(); void taskQtBug7054TimeoutErrorResetting(); +#ifndef QT_NO_NETWORKPROXY void invalidProxy_data(); void invalidProxy(); void proxyFactory_data(); void proxyFactory(); +#endif // !QT_NO_NETWORKPROXY void qtbug14268_peek(); @@ -216,7 +220,9 @@ protected slots: void hostLookupSlot(); void abortiveClose_abortSlot(); void remoteCloseErrorSlot(); +#ifndef QT_NO_NETWORKPROXY void proxyAuthenticationRequired(const QNetworkProxy &, QAuthenticator *auth); +#endif void earlySocketBytesSent(qint64 bytes); void earlySocketReadyRead(); @@ -354,6 +360,7 @@ void tst_QTcpSocket::init() { QFETCH_GLOBAL(bool, setProxy); if (setProxy) { +#ifndef QT_NO_NETWORKPROXY QFETCH_GLOBAL(int, proxyType); QList addresses = QHostInfo::fromName(QtNetworkSettings::serverName()).addresses(); QVERIFY2(addresses.count() > 0, "failed to get ip address for test server"); @@ -382,6 +389,9 @@ void tst_QTcpSocket::init() break; } QNetworkProxy::setApplicationProxy(proxy); +#else // !QT_NO_NETWORKPROXY + QSKIP("No proxy support"); +#endif // QT_NO_NETWORKPROXY } qt_qhostinfo_clear_cache(); @@ -406,15 +416,19 @@ QTcpSocket *tst_QTcpSocket::newSocket() const void tst_QTcpSocket::cleanup() { +#ifndef QT_NO_NETWORKPROXY QNetworkProxy::setApplicationProxy(QNetworkProxy::DefaultProxy); +#endif } +#ifndef QT_NO_NETWORKPROXY void tst_QTcpSocket::proxyAuthenticationRequired(const QNetworkProxy &, QAuthenticator *auth) { ++proxyAuthCalled; auth->setUser("qsockstest"); auth->setPassword("password"); } +#endif // !QT_NO_NETWORKPROXY //---------------------------------------------------------------------------------- @@ -552,6 +566,7 @@ void tst_QTcpSocket::setInvalidSocketDescriptor() //---------------------------------------------------------------------------------- +#ifndef Q_OS_WINRT void tst_QTcpSocket::setSocketDescriptor() { QFETCH_GLOBAL(bool, setProxy); @@ -596,6 +611,7 @@ void tst_QTcpSocket::setSocketDescriptor() delete dummy; #endif } +#endif // !Q_OS_WINRT //---------------------------------------------------------------------------------- @@ -1546,7 +1562,9 @@ void tst_QTcpSocket::synchronousApi() void tst_QTcpSocket::dontCloseOnTimeout() { QTcpServer server; +#ifndef QT_NO_NETWORKPROXY server.setProxy(QNetworkProxy(QNetworkProxy::NoProxy)); +#endif QVERIFY(server.listen()); QHostAddress serverAddress = QHostAddress::LocalHost; @@ -1673,11 +1691,13 @@ private slots: { quit(); } +#ifndef QT_NO_NETWORKPROXY inline void proxyAuthenticationRequired(const QNetworkProxy &, QAuthenticator *auth) { auth->setUser("qsockstest"); auth->setPassword("password"); } +#endif // !QT_NO_NETWORKPROXY private: int exitCode; QTcpSocket *socket; @@ -1970,11 +1990,13 @@ public slots: tst_QTcpSocket::exitLoop(); } +#ifndef QT_NO_NETWORKPROXY inline void proxyAuthenticationRequired(const QNetworkProxy &, QAuthenticator *auth) { auth->setUser("qsockstest"); auth->setPassword("password"); } +#endif // !QT_NO_NETWORKPROXY }; //---------------------------------------------------------------------------------- @@ -2500,6 +2522,7 @@ void tst_QTcpSocket::taskQtBug7054TimeoutErrorResetting() QVERIFY(socket->error() == QAbstractSocket::RemoteHostClosedError); } +#ifndef QT_NO_NETWORKPROXY void tst_QTcpSocket::invalidProxy_data() { QTest::addColumn("type"); @@ -2676,6 +2699,7 @@ void tst_QTcpSocket::proxyFactory() delete socket; } +#endif // !QT_NO_NETWORKPROXY // there is a similar test inside tst_qtcpserver that uses the event loop instead void tst_QTcpSocket::qtbug14268_peek() diff --git a/tests/auto/network/socket/qudpsocket/tst_qudpsocket.cpp b/tests/auto/network/socket/qudpsocket/tst_qudpsocket.cpp index 8de66f0f2c..776278a480 100644 --- a/tests/auto/network/socket/qudpsocket/tst_qudpsocket.cpp +++ b/tests/auto/network/socket/qudpsocket/tst_qudpsocket.cpp @@ -148,7 +148,9 @@ void tst_QUdpSocket::initTestCase_data() QTest::addColumn("proxyType"); QTest::newRow("WithoutProxy") << false << 0; +#ifndef QT_NO_SOCKS5 QTest::newRow("WithSocks5Proxy") << true << int(QNetworkProxy::Socks5Proxy); +#endif #ifndef QT_NO_BEARERMANAGEMENT netConfMan = new QNetworkConfigurationManager(this); @@ -171,16 +173,22 @@ void tst_QUdpSocket::init() { QFETCH_GLOBAL(bool, setProxy); if (setProxy) { +#ifndef QT_NO_SOCKS5 QFETCH_GLOBAL(int, proxyType); if (proxyType == QNetworkProxy::Socks5Proxy) { QNetworkProxy::setApplicationProxy(QNetworkProxy(QNetworkProxy::Socks5Proxy, QtNetworkSettings::serverName(), 1080)); } +#else + QSKIP("No proxy support"); +#endif // !QT_NO_SOCKS5 } } void tst_QUdpSocket::cleanup() { +#ifndef QT_NO_NETWORKPROXY QNetworkProxy::setApplicationProxy(QNetworkProxy::DefaultProxy); +#endif // !QT_NO_NETWORKPROXY } @@ -250,9 +258,13 @@ void tst_QUdpSocket::broadcasting() { QFETCH_GLOBAL(bool, setProxy); if (setProxy) { +#ifndef QT_NO_NETWORKPROXY QFETCH_GLOBAL(int, proxyType); if (proxyType == QNetworkProxy::Socks5Proxy) QSKIP("With socks5 Broadcast is not supported."); +#else // !QT_NO_NETWORKPROXY + QSKIP("No proxy support"); +#endif // QT_NO_NETWORKPROXY } #ifdef Q_OS_AIX QSKIP("Broadcast does not work on darko"); @@ -746,9 +758,13 @@ void tst_QUdpSocket::bindMode() { QFETCH_GLOBAL(bool, setProxy); if (setProxy) { +#ifndef QT_NO_NETWORKPROXY QFETCH_GLOBAL(int, proxyType); if (proxyType == QNetworkProxy::Socks5Proxy) QSKIP("With socks5 explicit port binding is not supported."); +#else // !QT_NO_NETWORKPROXY + QSKIP("No proxy support"); +#endif // QT_NO_NETWORKPROXY } QUdpSocket socket; diff --git a/tests/auto/network/socket/socket.pro b/tests/auto/network/socket/socket.pro index 6d86eab209..436ebe5c7f 100644 --- a/tests/auto/network/socket/socket.pro +++ b/tests/auto/network/socket/socket.pro @@ -14,3 +14,7 @@ SUBDIRS=\ qtcpsocket \ qhttpsocketengine \ qsocks5socketengine \ + +winrt: SUBDIRS -= \ + qhttpsocketengine \ + qsocks5socketengine \ diff --git a/tests/auto/network/ssl/qsslsocket/tst_qsslsocket.cpp b/tests/auto/network/ssl/qsslsocket/tst_qsslsocket.cpp index a15daf660a..82543fbc91 100644 --- a/tests/auto/network/ssl/qsslsocket/tst_qsslsocket.cpp +++ b/tests/auto/network/ssl/qsslsocket/tst_qsslsocket.cpp @@ -111,7 +111,9 @@ public slots: void initTestCase(); void init(); void cleanup(); +#ifndef QT_NO_NETWORKPROXY void proxyAuthenticationRequired(const QNetworkProxy &, QAuthenticator *auth); +#endif #ifndef QT_NO_SSL private slots: @@ -276,6 +278,7 @@ void tst_QSslSocket::init() { QFETCH_GLOBAL(bool, setProxy); if (setProxy) { +#ifndef QT_NO_NETWORKPROXY QFETCH_GLOBAL(int, proxyType); QString fluke = QHostInfo::fromName(QtNetworkSettings::serverName()).addresses().first().toString(); QNetworkProxy proxy; @@ -302,6 +305,9 @@ void tst_QSslSocket::init() break; } QNetworkProxy::setApplicationProxy(proxy); +#else // !QT_NO_NETWORKPROXY + QSKIP("No proxy support"); +#endif // QT_NO_NETWORKPROXY } qt_qhostinfo_clear_cache(); @@ -309,7 +315,9 @@ void tst_QSslSocket::init() void tst_QSslSocket::cleanup() { +#ifndef QT_NO_NETWORKPROXY QNetworkProxy::setApplicationProxy(QNetworkProxy::DefaultProxy); +#endif } #ifndef QT_NO_SSL @@ -326,12 +334,14 @@ QSslSocketPtr tst_QSslSocket::newSocket() } #endif +#ifndef QT_NO_NETWORKPROXY void tst_QSslSocket::proxyAuthenticationRequired(const QNetworkProxy &, QAuthenticator *auth) { ++proxyAuthCalled; auth->setUser("qsockstest"); auth->setPassword("password"); } +#endif // !QT_NO_NETWORKPROXY #ifndef QT_NO_SSL diff --git a/tests/auto/network/ssl/ssl.pro b/tests/auto/network/ssl/ssl.pro index 06f4a05241..0b8f269fac 100644 --- a/tests/auto/network/ssl/ssl.pro +++ b/tests/auto/network/ssl/ssl.pro @@ -12,3 +12,7 @@ contains(QT_CONFIG, openssl) | contains(QT_CONFIG, openssl-linked): qsslsocket_onDemandCertificates_member \ qsslsocket_onDemandCertificates_static \ } + +winrt: SUBDIRS -= \ + qsslsocket_onDemandCertificates_member \ + qsslsocket_onDemandCertificates_static \ diff --git a/tests/benchmarks/network/socket/qtcpserver/tst_qtcpserver.cpp b/tests/benchmarks/network/socket/qtcpserver/tst_qtcpserver.cpp index 5ed6651052..fb95ecb5b4 100644 --- a/tests/benchmarks/network/socket/qtcpserver/tst_qtcpserver.cpp +++ b/tests/benchmarks/network/socket/qtcpserver/tst_qtcpserver.cpp @@ -88,7 +88,9 @@ void tst_QTcpServer::initTestCase_data() QTest::addColumn("proxyType"); QTest::newRow("WithoutProxy") << false << 0; +#ifndef QT_NO_NETWORKPROXY QTest::newRow("WithSocks5Proxy") << true << int(QNetworkProxy::Socks5Proxy); +#endif } void tst_QTcpServer::initTestCase() @@ -100,16 +102,22 @@ void tst_QTcpServer::init() { QFETCH_GLOBAL(bool, setProxy); if (setProxy) { +#ifndef QT_NO_NETWORKPROXY QFETCH_GLOBAL(int, proxyType); if (proxyType == QNetworkProxy::Socks5Proxy) { QNetworkProxy::setApplicationProxy(QNetworkProxy(QNetworkProxy::Socks5Proxy, QtNetworkSettings::serverName(), 1080)); } +#else // !QT_NO_NETWORKPROXY + QSKIP("No proxy support"); +#endif // QT_NO_NETWORKPROXY } } void tst_QTcpServer::cleanup() { +#ifndef QT_NO_NETWORKPROXY QNetworkProxy::setApplicationProxy(QNetworkProxy::DefaultProxy); +#endif } //---------------------------------------------------------------------------------- -- cgit v1.2.3 From be2efef7a41871299cfc4b31fcffc39f96a196b6 Mon Sep 17 00:00:00 2001 From: Andrew Knight Date: Sun, 8 Dec 2013 22:33:43 +0200 Subject: Introducing d3dcompiler_qt d3dcompiler_qt is a DLL for use with ANGLE which replaces d3dcompiler_XX at runtime to proxy shader compilation calls. This is useful for: - Loading the newest D3D compiler DLL found, instead of loading the version specified when Qt was compiled - Reporting better debug information when the compiler cannot be loaded - Caching shader blobs for later use - Returning cached shader blobs - Deferring compilation to another mechanism, such as a D3D compilation service running on a host debugging machine * The above use cases are especially important for Windows Store apps, as they are not allowed to ship the d3dcompiler. On Windows Phone, where there is no runtime compiler, this is essential for handling QtQuick apps which require runtime shader compilation. * This requires a separate service which monitors a directory for shader source files, compiles these files into D3D bytecode, and places the bytecode in the qtd3dcompiler cache directory. This directory is monitored by qtd3dcompiler, which is then able to then load the blob. Change-Id: I9889c8d66d2ddbe5a7a1dc44bfe5d8ad229b0e43 Reviewed-by: Oliver Wolff Reviewed-by: Friedemann Kleint --- tests/auto/other/d3dcompiler/d3dcompiler.pro | 5 + tests/auto/other/d3dcompiler/tst_d3dcompiler.cpp | 358 +++++++++++++++++++++++ tests/auto/other/other.pro | 3 + 3 files changed, 366 insertions(+) create mode 100644 tests/auto/other/d3dcompiler/d3dcompiler.pro create mode 100644 tests/auto/other/d3dcompiler/tst_d3dcompiler.cpp (limited to 'tests') diff --git a/tests/auto/other/d3dcompiler/d3dcompiler.pro b/tests/auto/other/d3dcompiler/d3dcompiler.pro new file mode 100644 index 0000000000..6242d0a554 --- /dev/null +++ b/tests/auto/other/d3dcompiler/d3dcompiler.pro @@ -0,0 +1,5 @@ +CONFIG += testcase +TARGET = tst_d3dcompiler +QT = core testlib + +SOURCES = tst_d3dcompiler.cpp diff --git a/tests/auto/other/d3dcompiler/tst_d3dcompiler.cpp b/tests/auto/other/d3dcompiler/tst_d3dcompiler.cpp new file mode 100644 index 0000000000..1a3f4f4592 --- /dev/null +++ b/tests/auto/other/d3dcompiler/tst_d3dcompiler.cpp @@ -0,0 +1,358 @@ +/**************************************************************************** +** +** Copyright (C) 2013 Digia Plc and/or its subsidiary(-ies). +** Contact: http://www.qt-project.org/legal +** +** This file is part of the test suite of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:LGPL$ +** 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 Digia. For licensing terms and +** conditions see http://qt.digia.com/licensing. For further information +** use the contact form at http://qt.digia.com/contact-us. +** +** 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, Digia gives you certain additional +** rights. These rights are described in the Digia Qt LGPL Exception +** version 1.1, included in the file LGPL_EXCEPTION.txt in this package. +** +** GNU General Public License Usage +** Alternatively, this file may be used under the terms of the GNU +** General Public License version 3.0 as published by the Free Software +** Foundation and appearing in the file LICENSE.GPL included in the +** packaging of this file. Please review the following information to +** ensure the GNU General Public License version 3.0 requirements will be +** met: http://www.gnu.org/copyleft/gpl.html. +** +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +// This test verifies the behavior of d3dcompiler_qt, which is only built when ANGLE is enabled + +#include +#include +#include +#include +#include +#include +#include +#include + +#if defined(Q_OS_WIN) + +#include + +#ifndef Q_OS_WINRT +#define loadLibrary(library) LoadLibrary(library) +#else +#define loadLibrary(library) LoadPackagedLibrary(library, NULL) +#endif + +#ifdef D3DCOMPILER_DLL +#undef D3DCOMPILER_DLL +#endif + +#ifdef QT_NO_DEBUG +#define D3DCOMPILER_DLL L"d3dcompiler_qt" +#else +#define D3DCOMPILER_DLL L"d3dcompiler_qtd" +#endif + +#define getCompilerFunc(dll) reinterpret_cast(GetProcAddress(dll, "D3DCompile")) + +typedef HRESULT (WINAPI *D3DCompileFunc)(const void *data, SIZE_T data_size, const char *filename, + const D3D_SHADER_MACRO *defines, ID3DInclude *include, const char *entrypoint, + const char *target, UINT sflags, UINT eflags, ID3DBlob **shader, ID3DBlob **error_messages); + +static const wchar_t *compilerDlls[] = { + L"d3dcompiler_47.dll", + L"d3dcompiler_46.dll", + L"d3dcompiler_45.dll", + L"d3dcompiler_44.dll", + L"d3dcompiler_43.dll", + 0 +}; + +static const char hlsl[] = + "uniform SamplerState Sampler : register(s0);\n" + "uniform Texture2D Texture : register(t0);\n" + "float4 main(in float4 gl_Position : SV_POSITION, in float2 coord : TEXCOORD0) : SV_TARGET0\n" + "{\n" + "return Texture.Sample(Sampler, coord);\n" + "}\n"; + +static inline QByteArray blobToByteArray(ID3DBlob *blob) +{ + return blob ? QByteArray::fromRawData(reinterpret_cast(blob->GetBufferPointer()), blob->GetBufferSize()) : QByteArray(); +} + +class CompileRunner : public QThread +{ +public: + CompileRunner(D3DCompileFunc d3dCompile, const QByteArray &data, ID3DBlob **shader, ID3DBlob **error) + : m_d3dCompile(d3dCompile), m_data(data), m_shader(shader), m_error(error) + { + } + + HRESULT result() const + { + return m_result; + } + +private: + void run() + { + m_result = m_d3dCompile(m_data.constData(), m_data.size(), 0, 0, 0, "main", "ps_4_0", 0, 0, m_shader, m_error); + } + + HRESULT m_result; + D3DCompileFunc m_d3dCompile; + QByteArray m_data; + ID3DBlob **m_shader; + ID3DBlob **m_error; +}; + +class tst_d3dcompiler : public QObject +{ + Q_OBJECT +private slots: + void initTestCase(); + void init(); + void cleanup(); + void service_data(); + void service(); + void offlineCompile(); + void onlineCompile(); + +private: + QString blobPath(); + + HMODULE d3dcompiler_qt; + HMODULE d3dcompiler_win; + + D3DCompileFunc d3dCompile; + + QTemporaryDir tempDir; +}; + +QString tst_d3dcompiler::blobPath() +{ + QDir path; + if (qEnvironmentVariableIsSet("QT_D3DCOMPILER_DIR")) + path.setPath(qgetenv("QT_D3DCOMPILER_DIR")); + else + path.setPath(QStandardPaths::writableLocation(QStandardPaths::DataLocation)); + + path.mkdir(QStringLiteral("d3dcompiler")); + + return path.absoluteFilePath(QStringLiteral("d3dcompiler/")); +} + +void tst_d3dcompiler::initTestCase() +{ + QVERIFY(tempDir.isValid()); +} + +void tst_d3dcompiler::init() +{ + qunsetenv("QT_D3DCOMPILER_DIR"); + qunsetenv("QT_D3DCOMPILER_TIMEOUT"); +} + +void tst_d3dcompiler::cleanup() +{ + FreeLibrary(d3dcompiler_qt); + FreeLibrary(d3dcompiler_win); + + QDir path(blobPath()); + path.removeRecursively(); +} + +void tst_d3dcompiler::service_data() +{ + QTest::addColumn("compilerDir"); + QTest::addColumn("exists"); + QTest::addColumn("result"); + + // Don't test the default case, as it would clutter the AppData directory + //QTest::newRow("default") << QByteArrayLiteral("") << true << E_ABORT; + QTest::newRow("temporary") << tempDir.path().toUtf8() << true << E_ABORT; + QTest::newRow("invalid") << QByteArrayLiteral("ZZ:\\") << false << S_OK; +} + +void tst_d3dcompiler::service() +{ + QFETCH(QByteArray, compilerDir); + QFETCH(bool, exists); + QFETCH(HRESULT, result); + qputenv("QT_D3DCOMPILER_DIR", compilerDir); + const QDir path = blobPath(); + + if (exists) { + // Activate service + QVERIFY(path.exists()); + + QFile control(path.absoluteFilePath(QStringLiteral("control"))); + QVERIFY(control.open(QFile::WriteOnly)); + control.close(); + QVERIFY(control.exists()); + } else { + QVERIFY(!path.exists()); + } + + // Run compiler (fast fail) + d3dcompiler_qt = loadLibrary(D3DCOMPILER_DLL); + QVERIFY(d3dcompiler_qt); + d3dCompile = getCompilerFunc(d3dcompiler_qt); + QVERIFY(d3dCompile); + + qputenv("QT_D3DCOMPILER_TIMEOUT", "1"); + const QByteArray data(hlsl); + ID3DBlob *shader = 0, *errorMessage = 0; + HRESULT hr = d3dCompile(data.constData(), data.size(), 0, 0, 0, "main", "ps_4_0", 0, 0, &shader, &errorMessage); + QVERIFY2(hr == result, blobToByteArray(errorMessage)); + + // Check that passthrough works + if (hr == S_OK) { + for (int i = 0; compilerDlls[i]; ++i) { + d3dcompiler_win = loadLibrary(compilerDlls[i]); + if (d3dcompiler_win) + break; + } + QVERIFY(d3dcompiler_win); + d3dCompile = getCompilerFunc(d3dcompiler_win); + QVERIFY(d3dCompile); + + // Compile a shader to compare with + ID3DBlob *reference = 0; + HRESULT hr = d3dCompile(data.constData(), data.size(), 0, 0, 0, "main", "ps_4_0", 0, 0, &reference, &errorMessage); + QVERIFY2(SUCCEEDED(hr), blobToByteArray(errorMessage)); + + QByteArray shaderData(reinterpret_cast(shader->GetBufferPointer()), shader->GetBufferSize()); + QByteArray referenceData(reinterpret_cast(reference->GetBufferPointer()), reference->GetBufferSize()); + reference->Release(); + QCOMPARE(shaderData, referenceData); + } else { + QVERIFY(FAILED(hr)); + } + + if (shader) + shader->Release(); +} + +void tst_d3dcompiler::offlineCompile() +{ + for (int i = 0; compilerDlls[i]; ++i) { + d3dcompiler_win = loadLibrary(compilerDlls[i]); + if (d3dcompiler_win) + break; + } + QVERIFY(d3dcompiler_win); + d3dCompile = getCompilerFunc(d3dcompiler_win); + QVERIFY(d3dCompile); + + // Compile a shader to place in binary directory + const QByteArray data(hlsl); + ID3DBlob *shader = 0, *errorMessage = 0; + HRESULT hr = d3dCompile(data.constData(), data.size(), 0, 0, 0, "main", "ps_4_0", 0, 0, &shader, &errorMessage); + QVERIFY2(SUCCEEDED(hr), blobToByteArray(errorMessage)); + QVERIFY(shader); + + QDir outputPath(blobPath()); + QVERIFY(outputPath.mkpath(QStringLiteral("binary"))); + outputPath.cd(QStringLiteral("binary")); + QFile output(outputPath.absoluteFilePath(QCryptographicHash::hash(data, QCryptographicHash::Sha1).toHex())); + QVERIFY(output.open(QFile::WriteOnly)); + output.write(reinterpret_cast(shader->GetBufferPointer()), shader->GetBufferSize()); + shader->Release(); + + // Run compiler + d3dcompiler_qt = loadLibrary(D3DCOMPILER_DLL); + QVERIFY(d3dcompiler_qt); + d3dCompile = getCompilerFunc(d3dcompiler_qt); + QVERIFY(d3dCompile); + + hr = d3dCompile(data.constData(), data.size(), 0, 0, 0, "main", "ps_4_0", 0, 0, &shader, &errorMessage); + // Returns S_FALSE if a cached shader was found + QVERIFY2(hr == S_FALSE, blobToByteArray(errorMessage)); +} + +void tst_d3dcompiler::onlineCompile() +{ + QByteArray data(hlsl); + + const QDir path = blobPath(); + + // Activate service + QVERIFY(path.exists()); + QFile control(path.absoluteFilePath(QStringLiteral("control"))); + QVERIFY(control.open(QFile::WriteOnly)); + control.close(); + QVERIFY(control.exists()); + + d3dcompiler_qt = loadLibrary(D3DCOMPILER_DLL); + QVERIFY(d3dcompiler_qt); + D3DCompileFunc concurrentCompile = getCompilerFunc(d3dcompiler_qt); + QVERIFY(d3dCompile); + + // Run async + ID3DBlob *shader = 0, *errorMessage = 0; + CompileRunner runner(concurrentCompile, data, &shader, &errorMessage); + runner.start(); + + // Wait for source to appear + QVERIFY(path.mkpath(QStringLiteral("source"))); + QVERIFY(path.mkpath(QStringLiteral("binary"))); + + const QByteArray hash = QCryptographicHash::hash(data, QCryptographicHash::Sha1).toHex(); + QFile input(path.absoluteFilePath(QStringLiteral("source/") + hash)); + QTRY_VERIFY_WITH_TIMEOUT(input.exists(), 3000); + QTRY_VERIFY_WITH_TIMEOUT(input.isOpen() || input.open(QFile::ReadOnly), 1000); + + // Compile passed source + const QByteArray inputData = input.readAll(); + for (int i = 0; compilerDlls[i]; ++i) { + d3dcompiler_win = loadLibrary(compilerDlls[i]); + if (d3dcompiler_win) + break; + } + QVERIFY(d3dcompiler_win); + d3dCompile = getCompilerFunc(d3dcompiler_win); + QVERIFY(d3dCompile); + ID3DBlob *reference = 0, *errorMessage2 = 0; + HRESULT hr = d3dCompile(inputData.constData(), inputData.size(), 0, 0, 0, "main", "ps_4_0", 0, 0, &reference, &errorMessage2); + QVERIFY2(SUCCEEDED(hr), blobToByteArray(errorMessage2)); + const QByteArray referenceData(reinterpret_cast(reference->GetBufferPointer()), reference->GetBufferSize()); + reference->Release(); + + // Write to output directory + QFile output(path.absoluteFilePath(QStringLiteral("binary/") + hash)); + QVERIFY(output.open(QFile::WriteOnly)); + output.write(referenceData); + output.close(); + + // All done + QVERIFY(runner.wait(3000)); + hr = runner.result(); + QVERIFY2(hr == S_FALSE, blobToByteArray(errorMessage2)); + const QByteArray resultData(reinterpret_cast(shader->GetBufferPointer()), shader->GetBufferSize()); + shader->Release(); + QVERIFY(referenceData == resultData); +} + +QTEST_MAIN(tst_d3dcompiler) +#include "tst_d3dcompiler.moc" + +#endif // Q_OS_WIN diff --git a/tests/auto/other/other.pro b/tests/auto/other/other.pro index 63cbca539d..2bddc8d127 100644 --- a/tests/auto/other/other.pro +++ b/tests/auto/other/other.pro @@ -4,6 +4,7 @@ SUBDIRS=\ baselineexample \ collections \ compiler \ + d3dcompiler \ gestures \ headersclean \ lancelot \ @@ -57,6 +58,8 @@ cross_compile: SUBDIRS -= \ wince*|!contains(QT_CONFIG, accessibility): SUBDIRS -= qaccessibility +!angle_d3d11: SUBDIRS -= d3dcompiler + !contains(QT_CONFIG, accessibility-atspi-bridge): SUBDIRS -= qaccessibilitylinux !mac: SUBDIRS -= \ -- cgit v1.2.3 From 7e2c9a9c62a61f61265a1b6a66efabeb4779ea91 Mon Sep 17 00:00:00 2001 From: Marc Mutz Date: Sat, 12 Oct 2013 22:02:44 +0200 Subject: moc: move qt_meta_extradata data from .data.rel into .data.rel.ro It's still a relocation, but at least it can be marked read-only after the relocation run, if indeed the dynamic linker goes to such a length. Change-Id: Ibadddac3ab99d2e58cc32cfd57311bddd3bdb0ef Reviewed-by: Olivier Goffart Reviewed-by: Thiago Macieira --- .../auto/corelib/kernel/qmetaobjectbuilder/tst_qmetaobjectbuilder.cpp | 4 ++-- tests/auto/tools/moc/tst_moc.cpp | 4 ++-- 2 files changed, 4 insertions(+), 4 deletions(-) (limited to 'tests') diff --git a/tests/auto/corelib/kernel/qmetaobjectbuilder/tst_qmetaobjectbuilder.cpp b/tests/auto/corelib/kernel/qmetaobjectbuilder/tst_qmetaobjectbuilder.cpp index 8f6bd50cca..0570985e46 100644 --- a/tests/auto/corelib/kernel/qmetaobjectbuilder/tst_qmetaobjectbuilder.cpp +++ b/tests/auto/corelib/kernel/qmetaobjectbuilder/tst_qmetaobjectbuilder.cpp @@ -1321,8 +1321,8 @@ bool tst_QMetaObjectBuilder::sameMetaObject return false; } - const QMetaObject **objects1 = meta1->d.relatedMetaObjects; - const QMetaObject **objects2 = meta2->d.relatedMetaObjects; + const QMetaObject * const *objects1 = meta1->d.relatedMetaObjects; + const QMetaObject * const *objects2 = meta2->d.relatedMetaObjects; if (objects1 && !objects2) return false; if (objects2 && !objects1) diff --git a/tests/auto/tools/moc/tst_moc.cpp b/tests/auto/tools/moc/tst_moc.cpp index 7fae29e5ca..0b4560341e 100644 --- a/tests/auto/tools/moc/tst_moc.cpp +++ b/tests/auto/tools/moc/tst_moc.cpp @@ -884,7 +884,7 @@ void tst_Moc::testExtraDataForEnum() const QMetaObject *mobjUser = &EnumUserClass::staticMetaObject; QCOMPARE(mobjUser->enumeratorCount(), 0); - const QMetaObject **objects = mobjUser->d.relatedMetaObjects; + const QMetaObject * const *objects = mobjUser->d.relatedMetaObjects; QVERIFY(objects); QVERIFY(objects[0] == mobjSource); QVERIFY(objects[1] == 0); @@ -3098,7 +3098,7 @@ namespace QTBUG32933_relatedObjectsDontIncludeItself { void tst_Moc::QTBUG32933_relatedObjectsDontIncludeItself() { const QMetaObject *mo = &QTBUG32933_relatedObjectsDontIncludeItself::NS::Obj::staticMetaObject; - const QMetaObject **objects = mo->d.relatedMetaObjects; + const QMetaObject * const *objects = mo->d.relatedMetaObjects; // the related objects should be empty because the enums is in the same object. QVERIFY(!objects); -- cgit v1.2.3 From 16a26931d481a157f6ff09a3db1b0c3e33a7366d Mon Sep 17 00:00:00 2001 From: Michael Brasser Date: Tue, 26 Nov 2013 14:47:56 -0600 Subject: Allow the platform to specify a press and hold delay. Press and hold is an interaction available on many platforms, particularly when touch is involved. In Qt Quick this is exposed to the user via MouseArea::onPressAndHold. This value should not be hard-coded, but rather use a platform-specified default. This commit adds the low-level hooks necessary for that to happen. Task-number: QTBUG-24793 Change-Id: I621a8ac9de66b881e34336228056bffbb6306a70 Reviewed-by: Friedemann Kleint Reviewed-by: Paul Olav Tvete --- tests/manual/qpainfo/main.cpp | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) (limited to 'tests') diff --git a/tests/manual/qpainfo/main.cpp b/tests/manual/qpainfo/main.cpp index 0f5119bab3..257b340467 100644 --- a/tests/manual/qpainfo/main.cpp +++ b/tests/manual/qpainfo/main.cpp @@ -180,7 +180,8 @@ int main(int argc, char **argv) << " startDragVelocity=" << styleHints->startDragVelocity() << " keyboardInputInterval=" << styleHints->keyboardInputInterval() << " keyboardAutoRepeatRate=" << styleHints->keyboardAutoRepeatRate() << " cursorFlashTime=" << styleHints->cursorFlashTime() << " showIsFullScreen=" << styleHints->showIsFullScreen() << " passwordMaskDelay=" << styleHints->passwordMaskDelay() - << " fontSmoothingGamma=" << styleHints->fontSmoothingGamma() << " useRtlExtensions=" << styleHints->useRtlExtensions() << '\n'; + << " fontSmoothingGamma=" << styleHints->fontSmoothingGamma() << " useRtlExtensions=" << styleHints->useRtlExtensions() + << " mousePressAndHoldInterval=" << styleHints->mousePressAndHoldInterval() << '\n'; const QPlatformTheme *platformTheme = QGuiApplicationPrivate::platformTheme(); std::cout << "\nTheme:\n Styles: " << platformTheme->themeHint(QPlatformTheme::StyleNames).toStringList(); -- cgit v1.2.3 From 4031cb8610dd311910d550201230ea8ab0f6a89a Mon Sep 17 00:00:00 2001 From: Marc Mutz Date: Sun, 17 Nov 2013 16:13:08 +0100 Subject: Move-enable QSignalBlocker When QSignalBlocker was reviewed, move semantics were asked for. This patch add them. This makes QSignalBlocker usable as a by-value argument (to transfer control of signal blocking into a function) as well as as a return value (to transfer control of signal blocking out of a function). Change-Id: I714aa2a283bb33dba76e860649e88ed202e913c5 Reviewed-by: Olivier Goffart --- tests/auto/corelib/kernel/qobject/tst_qobject.cpp | 100 ++++++++++++++++++++++ 1 file changed, 100 insertions(+) (limited to 'tests') diff --git a/tests/auto/corelib/kernel/qobject/tst_qobject.cpp b/tests/auto/corelib/kernel/qobject/tst_qobject.cpp index c6fb1025ac..4776bdbbc9 100644 --- a/tests/auto/corelib/kernel/qobject/tst_qobject.cpp +++ b/tests/auto/corelib/kernel/qobject/tst_qobject.cpp @@ -103,6 +103,7 @@ private slots: void recursiveSignalEmission(); #endif void signalBlocking(); + void signalBlockingMoveAssignment(); void blockingQueuedConnection(); void childEvents(); void installEventFilter(); @@ -3030,6 +3031,105 @@ void tst_QObject::signalBlocking() receiver.reset(); } +void tst_QObject::signalBlockingMoveAssignment() +{ +#ifdef Q_COMPILER_RVALUE_REFS + QObject o1, o2; + + // move-assignment: both block other objects + { + QSignalBlocker b(&o1); + QVERIFY(o1.signalsBlocked()); + + QVERIFY(!o2.signalsBlocked()); + b = QSignalBlocker(&o2); + QVERIFY(!o1.signalsBlocked()); + QVERIFY(o2.signalsBlocked()); + } + + QVERIFY(!o1.signalsBlocked()); + QVERIFY(!o2.signalsBlocked()); + + // move-assignment: from inert other + { + QSignalBlocker b(&o1); + QVERIFY(o1.signalsBlocked()); + b = QSignalBlocker(0); + } + + QVERIFY(!o1.signalsBlocked()); + QVERIFY(!o2.signalsBlocked()); + + // move-assignment: to inert *this + { + QSignalBlocker b(0); + QVERIFY(!o1.signalsBlocked()); + { + QSignalBlocker inner(&o1); + QVERIFY(o1.signalsBlocked()); + b = std::move(inner); + } + QVERIFY(o1.signalsBlocked()); + } + + QVERIFY(!o1.signalsBlocked()); + QVERIFY(!o2.signalsBlocked()); + + // move-assignment: both block the same object, neither is unblocked + { + QSignalBlocker b(&o1); + QVERIFY(o1.signalsBlocked()); + { + b.unblock(); // make sure inner.m_blocked = false + QVERIFY(!o1.signalsBlocked()); + QSignalBlocker inner(&o1); + QVERIFY(o1.signalsBlocked()); + b.reblock(); + QVERIFY(o1.signalsBlocked()); + b = std::move(inner); + } + QVERIFY(o1.signalsBlocked()); + } + + QVERIFY(!o1.signalsBlocked()); + QVERIFY(!o2.signalsBlocked()); + + // move-assignment: both block the same object, but *this is unblocked + { + QSignalBlocker b(&o1); + QVERIFY(o1.signalsBlocked()); + b.unblock(); + QVERIFY(!o1.signalsBlocked()); + b = QSignalBlocker(&o1); + QVERIFY(o1.signalsBlocked()); + } + + QVERIFY(!o1.signalsBlocked()); + QVERIFY(!o2.signalsBlocked()); + + // move-assignment: both block the same object, but other is unblocked + { + QSignalBlocker b(&o1); + { + QVERIFY(o1.signalsBlocked()); + QSignalBlocker inner(&o1); + QVERIFY(o1.signalsBlocked()); + inner.unblock(); + QVERIFY(o1.signalsBlocked()); + b = std::move(inner); + QVERIFY(!o1.signalsBlocked()); + } + QVERIFY(!o1.signalsBlocked()); + } + + QVERIFY(!o1.signalsBlocked()); + QVERIFY(!o2.signalsBlocked()); + +#else + QSKIP("This compiler is not in C++11 mode or doesn't support move semantics"); +#endif // Q_COMPILER_RVALUE_REFS +} + void tst_QObject::blockingQueuedConnection() { { -- cgit v1.2.3 From 75df151eaae389b2674b6bb29e97ad10592f2d43 Mon Sep 17 00:00:00 2001 From: Marc Mutz Date: Mon, 9 Dec 2013 15:52:07 +0100 Subject: tst_QObject: separate QSignalBlocker tests tst_QObject is getting big, so make a separate test for QSignalBlocker, but leave parts of signalsBlocked() in tst_QObject as that seemed to have been the only check for blockSignals(true) actually blocking signal emission. Change-Id: I1cfac035e0e39203eea8626d43f316cc6244ee86 Reviewed-by: Olivier Goffart --- tests/auto/corelib/kernel/kernel.pro | 1 + tests/auto/corelib/kernel/qobject/tst_qobject.cpp | 134 +-------- .../auto/corelib/kernel/qsignalblocker/.gitignore | 1 + .../kernel/qsignalblocker/qsignalblocker.pro | 7 + .../kernel/qsignalblocker/tst_qsignalblocker.cpp | 305 +++++++++++++++++++++ 5 files changed, 319 insertions(+), 129 deletions(-) create mode 100644 tests/auto/corelib/kernel/qsignalblocker/.gitignore create mode 100644 tests/auto/corelib/kernel/qsignalblocker/qsignalblocker.pro create mode 100644 tests/auto/corelib/kernel/qsignalblocker/tst_qsignalblocker.cpp (limited to 'tests') diff --git a/tests/auto/corelib/kernel/kernel.pro b/tests/auto/corelib/kernel/kernel.pro index c1b867e6eb..4b3b2e824e 100644 --- a/tests/auto/corelib/kernel/kernel.pro +++ b/tests/auto/corelib/kernel/kernel.pro @@ -13,6 +13,7 @@ SUBDIRS=\ qobject \ qpointer \ qsharedmemory \ + qsignalblocker \ qsignalmapper \ qsocketnotifier \ qsystemsemaphore \ diff --git a/tests/auto/corelib/kernel/qobject/tst_qobject.cpp b/tests/auto/corelib/kernel/qobject/tst_qobject.cpp index 4776bdbbc9..a5b5b659ea 100644 --- a/tests/auto/corelib/kernel/qobject/tst_qobject.cpp +++ b/tests/auto/corelib/kernel/qobject/tst_qobject.cpp @@ -103,7 +103,6 @@ private slots: void recursiveSignalEmission(); #endif void signalBlocking(); - void signalBlockingMoveAssignment(); void blockingQueuedConnection(); void childEvents(); void installEventFilter(); @@ -2994,142 +2993,19 @@ void tst_QObject::signalBlocking() QVERIFY(receiver.called(1)); receiver.reset(); - { - QSignalBlocker blocker(&sender); - - sender.emitSignal1(); - QVERIFY(!receiver.called(1)); - receiver.reset(); - - sender.blockSignals(false); - - sender.emitSignal1(); - QVERIFY(receiver.called(1)); - receiver.reset(); - - sender.blockSignals(true); - - sender.emitSignal1(); - QVERIFY(!receiver.called(1)); - receiver.reset(); - - blocker.unblock(); - - sender.emitSignal1(); - QVERIFY(receiver.called(1)); - receiver.reset(); + sender.blockSignals(true); - blocker.reblock(); + sender.emitSignal1(); + QVERIFY(!receiver.called(1)); + receiver.reset(); - sender.emitSignal1(); - QVERIFY(!receiver.called(1)); - receiver.reset(); - } + sender.blockSignals(false); sender.emitSignal1(); QVERIFY(receiver.called(1)); receiver.reset(); } -void tst_QObject::signalBlockingMoveAssignment() -{ -#ifdef Q_COMPILER_RVALUE_REFS - QObject o1, o2; - - // move-assignment: both block other objects - { - QSignalBlocker b(&o1); - QVERIFY(o1.signalsBlocked()); - - QVERIFY(!o2.signalsBlocked()); - b = QSignalBlocker(&o2); - QVERIFY(!o1.signalsBlocked()); - QVERIFY(o2.signalsBlocked()); - } - - QVERIFY(!o1.signalsBlocked()); - QVERIFY(!o2.signalsBlocked()); - - // move-assignment: from inert other - { - QSignalBlocker b(&o1); - QVERIFY(o1.signalsBlocked()); - b = QSignalBlocker(0); - } - - QVERIFY(!o1.signalsBlocked()); - QVERIFY(!o2.signalsBlocked()); - - // move-assignment: to inert *this - { - QSignalBlocker b(0); - QVERIFY(!o1.signalsBlocked()); - { - QSignalBlocker inner(&o1); - QVERIFY(o1.signalsBlocked()); - b = std::move(inner); - } - QVERIFY(o1.signalsBlocked()); - } - - QVERIFY(!o1.signalsBlocked()); - QVERIFY(!o2.signalsBlocked()); - - // move-assignment: both block the same object, neither is unblocked - { - QSignalBlocker b(&o1); - QVERIFY(o1.signalsBlocked()); - { - b.unblock(); // make sure inner.m_blocked = false - QVERIFY(!o1.signalsBlocked()); - QSignalBlocker inner(&o1); - QVERIFY(o1.signalsBlocked()); - b.reblock(); - QVERIFY(o1.signalsBlocked()); - b = std::move(inner); - } - QVERIFY(o1.signalsBlocked()); - } - - QVERIFY(!o1.signalsBlocked()); - QVERIFY(!o2.signalsBlocked()); - - // move-assignment: both block the same object, but *this is unblocked - { - QSignalBlocker b(&o1); - QVERIFY(o1.signalsBlocked()); - b.unblock(); - QVERIFY(!o1.signalsBlocked()); - b = QSignalBlocker(&o1); - QVERIFY(o1.signalsBlocked()); - } - - QVERIFY(!o1.signalsBlocked()); - QVERIFY(!o2.signalsBlocked()); - - // move-assignment: both block the same object, but other is unblocked - { - QSignalBlocker b(&o1); - { - QVERIFY(o1.signalsBlocked()); - QSignalBlocker inner(&o1); - QVERIFY(o1.signalsBlocked()); - inner.unblock(); - QVERIFY(o1.signalsBlocked()); - b = std::move(inner); - QVERIFY(!o1.signalsBlocked()); - } - QVERIFY(!o1.signalsBlocked()); - } - - QVERIFY(!o1.signalsBlocked()); - QVERIFY(!o2.signalsBlocked()); - -#else - QSKIP("This compiler is not in C++11 mode or doesn't support move semantics"); -#endif // Q_COMPILER_RVALUE_REFS -} - void tst_QObject::blockingQueuedConnection() { { diff --git a/tests/auto/corelib/kernel/qsignalblocker/.gitignore b/tests/auto/corelib/kernel/qsignalblocker/.gitignore new file mode 100644 index 0000000000..a841a2a0a8 --- /dev/null +++ b/tests/auto/corelib/kernel/qsignalblocker/.gitignore @@ -0,0 +1 @@ +tst_qsignalblocker diff --git a/tests/auto/corelib/kernel/qsignalblocker/qsignalblocker.pro b/tests/auto/corelib/kernel/qsignalblocker/qsignalblocker.pro new file mode 100644 index 0000000000..c6c6f379eb --- /dev/null +++ b/tests/auto/corelib/kernel/qsignalblocker/qsignalblocker.pro @@ -0,0 +1,7 @@ +CONFIG += testcase console +CONFIG += parallel_test +TARGET = tst_qsignalblocker +QT = core testlib +SOURCES = tst_qsignalblocker.cpp + +DEFINES += QT_DISABLE_DEPRECATED_BEFORE=0 diff --git a/tests/auto/corelib/kernel/qsignalblocker/tst_qsignalblocker.cpp b/tests/auto/corelib/kernel/qsignalblocker/tst_qsignalblocker.cpp new file mode 100644 index 0000000000..1f71692ffe --- /dev/null +++ b/tests/auto/corelib/kernel/qsignalblocker/tst_qsignalblocker.cpp @@ -0,0 +1,305 @@ +/**************************************************************************** +** +** Copyright (C) 2013 Klarälvdalens Datakonsult AB, a KDAB Group company, info@kdab.com, author Marc Mutz +** Contact: http://www.qt-project.org/legal +** +** This file is part of the test suite of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:LGPL$ +** 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 Digia. For licensing terms and +** conditions see http://qt.digia.com/licensing. For further information +** use the contact form at http://qt.digia.com/contact-us. +** +** 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, Digia gives you certain additional +** rights. These rights are described in the Digia Qt LGPL Exception +** version 1.1, included in the file LGPL_EXCEPTION.txt in this package. +** +** GNU General Public License Usage +** Alternatively, this file may be used under the terms of the GNU +** General Public License version 3.0 as published by the Free Software +** Foundation and appearing in the file LICENSE.GPL included in the +** packaging of this file. Please review the following information to +** ensure the GNU General Public License version 3.0 requirements will be +** met: http://www.gnu.org/copyleft/gpl.html. +** +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +#include + +#include "qobject.h" + +class tst_QSignalBlocker : public QObject +{ + Q_OBJECT +private slots: + void signalBlocking(); + void signalBlockingMoveAssignment(); +}; + +class SenderObject : public QObject +{ + Q_OBJECT + +public: + SenderObject() : aPublicSlotCalled(0), recursionCount(0) {} + + void emitSignal1AfterRecursion() + { + if (recursionCount++ < 100) + emitSignal1AfterRecursion(); + else + emitSignal1(); + } + + void emitSignal1() { emit signal1(); } + void emitSignal2() { emit signal2(); } + void emitSignal3() { emit signal3(); } + void emitSignal4() { emit signal4(); } + +signals: + void signal1(); + void signal2(); + void signal3(); + void signal4(); + QT_MOC_COMPAT void signal5(); + void signal6(void); + void signal7(int, const QString &); + +public slots: + void aPublicSlot() { aPublicSlotCalled++; } + +public: + Q_INVOKABLE void invoke1(){} + Q_SCRIPTABLE void sinvoke1(){} + int aPublicSlotCalled; +protected: + Q_INVOKABLE QT_MOC_COMPAT void invoke2(){} + Q_INVOKABLE QT_MOC_COMPAT void invoke2(int){} + Q_SCRIPTABLE QT_MOC_COMPAT void sinvoke2(){} +private: + Q_INVOKABLE void invoke3(int hinz = 0, int kunz = 0){Q_UNUSED(hinz) Q_UNUSED(kunz)} + Q_SCRIPTABLE void sinvoke3(){} + + int recursionCount; +}; + +class ReceiverObject : public QObject +{ + Q_OBJECT + +public: + ReceiverObject() + : sequence_slot1( 0 ) + , sequence_slot2( 0 ) + , sequence_slot3( 0 ) + , sequence_slot4( 0 ) + {} + + void reset() + { + sequence_slot4 = 0; + sequence_slot3 = 0; + sequence_slot2 = 0; + sequence_slot1 = 0; + count_slot1 = 0; + count_slot2 = 0; + count_slot3 = 0; + count_slot4 = 0; + } + + int sequence_slot1; + int sequence_slot2; + int sequence_slot3; + int sequence_slot4; + int count_slot1; + int count_slot2; + int count_slot3; + int count_slot4; + + bool called(int slot) + { + switch (slot) { + case 1: return sequence_slot1; + case 2: return sequence_slot2; + case 3: return sequence_slot3; + case 4: return sequence_slot4; + default: return false; + } + } + + static int sequence; + +public slots: + void slot1() { sequence_slot1 = ++sequence; count_slot1++; } + void slot2() { sequence_slot2 = ++sequence; count_slot2++; } + void slot3() { sequence_slot3 = ++sequence; count_slot3++; } + void slot4() { sequence_slot4 = ++sequence; count_slot4++; } + +}; + +int ReceiverObject::sequence = 0; + +void tst_QSignalBlocker::signalBlocking() +{ + SenderObject sender; + ReceiverObject receiver; + + receiver.connect(&sender, SIGNAL(signal1()), SLOT(slot1())); + + sender.emitSignal1(); + QVERIFY(receiver.called(1)); + receiver.reset(); + + { + QSignalBlocker blocker(&sender); + + sender.emitSignal1(); + QVERIFY(!receiver.called(1)); + receiver.reset(); + + sender.blockSignals(false); + + sender.emitSignal1(); + QVERIFY(receiver.called(1)); + receiver.reset(); + + sender.blockSignals(true); + + sender.emitSignal1(); + QVERIFY(!receiver.called(1)); + receiver.reset(); + + blocker.unblock(); + + sender.emitSignal1(); + QVERIFY(receiver.called(1)); + receiver.reset(); + + blocker.reblock(); + + sender.emitSignal1(); + QVERIFY(!receiver.called(1)); + receiver.reset(); + } + + sender.emitSignal1(); + QVERIFY(receiver.called(1)); + receiver.reset(); +} + +void tst_QSignalBlocker::signalBlockingMoveAssignment() +{ +#ifdef Q_COMPILER_RVALUE_REFS + QObject o1, o2; + + // move-assignment: both block other objects + { + QSignalBlocker b(&o1); + QVERIFY(o1.signalsBlocked()); + + QVERIFY(!o2.signalsBlocked()); + b = QSignalBlocker(&o2); + QVERIFY(!o1.signalsBlocked()); + QVERIFY(o2.signalsBlocked()); + } + + QVERIFY(!o1.signalsBlocked()); + QVERIFY(!o2.signalsBlocked()); + + // move-assignment: from inert other + { + QSignalBlocker b(&o1); + QVERIFY(o1.signalsBlocked()); + b = QSignalBlocker(0); + } + + QVERIFY(!o1.signalsBlocked()); + QVERIFY(!o2.signalsBlocked()); + + // move-assignment: to inert *this + { + QSignalBlocker b(0); + QVERIFY(!o1.signalsBlocked()); + { + QSignalBlocker inner(&o1); + QVERIFY(o1.signalsBlocked()); + b = std::move(inner); + } + QVERIFY(o1.signalsBlocked()); + } + + QVERIFY(!o1.signalsBlocked()); + QVERIFY(!o2.signalsBlocked()); + + // move-assignment: both block the same object, neither is unblocked + { + QSignalBlocker b(&o1); + QVERIFY(o1.signalsBlocked()); + { + b.unblock(); // make sure inner.m_blocked = false + QVERIFY(!o1.signalsBlocked()); + QSignalBlocker inner(&o1); + QVERIFY(o1.signalsBlocked()); + b.reblock(); + QVERIFY(o1.signalsBlocked()); + b = std::move(inner); + } + QVERIFY(o1.signalsBlocked()); + } + + QVERIFY(!o1.signalsBlocked()); + QVERIFY(!o2.signalsBlocked()); + + // move-assignment: both block the same object, but *this is unblocked + { + QSignalBlocker b(&o1); + QVERIFY(o1.signalsBlocked()); + b.unblock(); + QVERIFY(!o1.signalsBlocked()); + b = QSignalBlocker(&o1); + QVERIFY(o1.signalsBlocked()); + } + + QVERIFY(!o1.signalsBlocked()); + QVERIFY(!o2.signalsBlocked()); + + // move-assignment: both block the same object, but other is unblocked + { + QSignalBlocker b(&o1); + { + QVERIFY(o1.signalsBlocked()); + QSignalBlocker inner(&o1); + QVERIFY(o1.signalsBlocked()); + inner.unblock(); + QVERIFY(o1.signalsBlocked()); + b = std::move(inner); + QVERIFY(!o1.signalsBlocked()); + } + QVERIFY(!o1.signalsBlocked()); + } + + QVERIFY(!o1.signalsBlocked()); + QVERIFY(!o2.signalsBlocked()); + +#else + QSKIP("This compiler is not in C++11 mode or doesn't support move semantics"); +#endif // Q_COMPILER_RVALUE_REFS +} + +QTEST_MAIN(tst_QSignalBlocker) +#include "tst_qsignalblocker.moc" -- cgit v1.2.3 From a2666d33919807ba6170f55f8e74a71ef8392a4d Mon Sep 17 00:00:00 2001 From: J-P Nurmi Date: Mon, 2 Dec 2013 14:42:58 +0100 Subject: QLineEdit: hide placeholder text when h-centered & focused [ChangeLog][QtWidgets][QLineEdit] A blinking cursor in the middle over horizontally centered placeholder text looks bad. Thus, horizontally centered content is now considered as an exception and the placeholder text is hidden when the line edit is focused. Task-number: QTBUG-31669 Change-Id: I17aa1e6656673f81545a8437f90814b188ad484a Reviewed-by: Friedemann Kleint Reviewed-by: Marc Mutz --- .../widgets/widgets/qlineedit/tst_qlineedit.cpp | 59 +++++++++++++++++++++- 1 file changed, 58 insertions(+), 1 deletion(-) (limited to 'tests') diff --git a/tests/auto/widgets/widgets/qlineedit/tst_qlineedit.cpp b/tests/auto/widgets/widgets/qlineedit/tst_qlineedit.cpp index a9f5cb686c..d6d48a1e8d 100644 --- a/tests/auto/widgets/widgets/qlineedit/tst_qlineedit.cpp +++ b/tests/auto/widgets/widgets/qlineedit/tst_qlineedit.cpp @@ -53,7 +53,7 @@ #include "qstandarditemmodel.h" #include #include "qstylehints.h" -#include +#include #include "qclipboard.h" #ifdef Q_OS_MAC @@ -300,6 +300,9 @@ private slots: void clearButton(); void sideWidgets(); + void shouldShowPlaceholderText_data(); + void shouldShowPlaceholderText(); + protected slots: void editingFinished(); @@ -4136,5 +4139,59 @@ void tst_QLineEdit::sideWidgets() lineEdit->addAction(iconAction); } +Q_DECLARE_METATYPE(Qt::AlignmentFlag) +void tst_QLineEdit::shouldShowPlaceholderText_data() +{ + QTest::addColumn("text"); + QTest::addColumn("hasFocus"); + QTest::addColumn("alignment"); + QTest::addColumn("shouldShowPlaceholderText"); + + QTest::newRow("empty, non-focused, left") << QString() << false << Qt::AlignLeft << true; + QTest::newRow("empty, focused, left") << QString() << true << Qt::AlignLeft << true; + QTest::newRow("non-empty, non-focused, left") << QStringLiteral("Qt") << false << Qt::AlignLeft << false; + QTest::newRow("non-empty, focused, left") << QStringLiteral("Qt") << true << Qt::AlignLeft << false; + + QTest::newRow("empty, non-focused, center") << QString() << false << Qt::AlignHCenter << true; + QTest::newRow("empty, focused, center") << QString() << true << Qt::AlignHCenter << false; + QTest::newRow("non-empty, non-focused, center") << QStringLiteral("Qt") << false << Qt::AlignHCenter << false; + QTest::newRow("non-empty, focused, center") << QStringLiteral("Qt") << true << Qt::AlignHCenter << false; + + QTest::newRow("empty, non-focused, right") << QString() << false << Qt::AlignRight << true; + QTest::newRow("empty, focused, right") << QString() << true << Qt::AlignRight << true; + QTest::newRow("non-empty, non-focused, right") << QStringLiteral("Qt") << false << Qt::AlignRight << false; + QTest::newRow("non-empty, focused, right") << QStringLiteral("Qt") << true << Qt::AlignRight << false; +} + +void tst_QLineEdit::shouldShowPlaceholderText() +{ +#ifndef QT_BUILD_INTERNAL + QSKIP("This test requires a developer build."); +#else + QFETCH(QString, text); + QFETCH(bool, hasFocus); + QFETCH(Qt::AlignmentFlag, alignment); + QFETCH(bool, shouldShowPlaceholderText); + + QLineEdit lineEdit; + + // avoid "Test input context to commit without focused object" warnings + lineEdit.setAttribute(Qt::WA_InputMethodEnabled, false); + + if (hasFocus) { + lineEdit.show(); + QApplicationPrivate::setFocusWidget(&lineEdit, Qt::NoFocusReason); + } + QCOMPARE(lineEdit.hasFocus(), hasFocus); + + lineEdit.setText(text); + lineEdit.setAlignment(alignment); + + QLineEditPrivate *priv = QLineEditPrivate::get(&lineEdit); + QCOMPARE(priv->shouldShowPlaceholderText(), shouldShowPlaceholderText); +#endif + +} + QTEST_MAIN(tst_QLineEdit) #include "tst_qlineedit.moc" -- cgit v1.2.3 From 54f0733e7df4134afbcf0a81ba39751f31c9b84d Mon Sep 17 00:00:00 2001 From: Simon Hausmann Date: Thu, 12 Dec 2013 10:50:00 +0100 Subject: Fix erroneous exclusion of classes from related meta objects in moc Assume an unrelated class that declares an enum and uses Q_ENUMS. Consider then a class that uses UnrelatedClass::Enum as a Q_PROPERTY. We used to include UnrelatedClass in the primary class's related meta objects, in order to support use-cases like obj->setProperty("enumProperty", "ValueOfEnumAsString"); If however moc happens to see Q_DECLARE_METATYPE(UnrelatedClass::Enum), then it would exclude it from the related meta objects, which would silently break the string based enum value conversion. This was meant as an optimization, but it isn't apparent to the developer why sometimes the string conversion would work and sometimes not (depending on whether somebody declares that macro). This also becomes visible in QML, which relies on the same embedded type information for enum assignments. This patch removes that check in moc's code generator and cleans up the code a little. However always including the prefix of Q_PROPERTY(SomePrefix::Enum ...) is not correct either, because it may be that SomePrefix is a namespace, which would cause compilation issues. Therefore we limit the inclusion of related meta objects only to Q_OBJECT decorated classes the moc has seen, and for these we save the fully qualified name in the related meta objects array (for QTBUG-2151). While this patch makes the previous workaround for namespace issues by using a Q_DECLARE_METATYPE not workable anymore, by saving the fully qualified name we are making a hopefully sufficient effort to not require a workaround in the first place. There's always the new workaround of fully qualifying the type in Q_PROPERTY. One side-effect of this change is that in the autoPropertyMetaTypeRegistration test of tst_moc, the CustomQObject for Q_PROPERTY(CustomQObject::Number enumValue ...) is now a related meta object, and therefore when querying for the type of this property via QMetaProperty::userType(), we are now aware of this being an enum and try to resolve CustomQObject::Number via QMetaType::type(qualfiedName). As there is no guarantee for this to succeed, we must now also do what is done in the non-enum code path in ::userType(), which is to call the moc generated type registration function. Task-number: QTBUG-33577 Task-number: QTBUG-2151 Change-Id: Ibf20e7421cba464c558a25c76a7e1eef002c6cff Reviewed-by: Olivier Goffart --- tests/auto/tools/moc/moc.pro | 3 +- .../tools/moc/related-metaobjects-in-namespaces.h | 60 ++++++++++++++++++++++ tests/auto/tools/moc/tst_moc.cpp | 58 +++++++++++++++++++++ 3 files changed, 120 insertions(+), 1 deletion(-) create mode 100644 tests/auto/tools/moc/related-metaobjects-in-namespaces.h (limited to 'tests') diff --git a/tests/auto/tools/moc/moc.pro b/tests/auto/tools/moc/moc.pro index 779e992881..c68d48b813 100644 --- a/tests/auto/tools/moc/moc.pro +++ b/tests/auto/tools/moc/moc.pro @@ -24,7 +24,8 @@ HEADERS += using-namespaces.h no-keywords.h task87883.h c-comments.h backslash-n parse-defines.h \ function-with-attributes.h \ plugin_metadata.h \ - single-quote-digit-separator-n3781.h + single-quote-digit-separator-n3781.h \ + related-metaobjects-in-namespaces.h if(*-g++*|*-icc*|*-clang*|*-llvm):!irix-*:!win32-*: HEADERS += os9-newlines.h win-newlines.h diff --git a/tests/auto/tools/moc/related-metaobjects-in-namespaces.h b/tests/auto/tools/moc/related-metaobjects-in-namespaces.h new file mode 100644 index 0000000000..0a3e9ed77d --- /dev/null +++ b/tests/auto/tools/moc/related-metaobjects-in-namespaces.h @@ -0,0 +1,60 @@ +/**************************************************************************** +** +** Copyright (C) 2013 Digia Plc and/or its subsidiary(-ies). +** Contact: http://www.qt-project.org/legal +** +** This file is part of the test suite of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:LGPL$ +** 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 Digia. For licensing terms and +** conditions see http://qt.digia.com/licensing. For further information +** use the contact form at http://qt.digia.com/contact-us. +** +** 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, Digia gives you certain additional +** rights. These rights are described in the Digia Qt LGPL Exception +** version 1.1, included in the file LGPL_EXCEPTION.txt in this package. +** +** GNU General Public License Usage +** Alternatively, this file may be used under the terms of the GNU +** General Public License version 3.0 as published by the Free Software +** Foundation and appearing in the file LICENSE.GPL included in the +** packaging of this file. Please review the following information to +** ensure the GNU General Public License version 3.0 requirements will be +** met: http://www.gnu.org/copyleft/gpl.html. +** +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +#include + +namespace QTBUG_2151 { + class A : public QObject { + Q_OBJECT + Q_ENUMS(SomeEnum) + public: + enum SomeEnum { SomeEnumValue = 0 }; + }; + + class B : public QObject + { + Q_OBJECT + Q_PROPERTY(A::SomeEnum blah READ blah) + public: + + A::SomeEnum blah() const { return A::SomeEnumValue; } + }; +} diff --git a/tests/auto/tools/moc/tst_moc.cpp b/tests/auto/tools/moc/tst_moc.cpp index 0b4560341e..46f3e5a42a 100644 --- a/tests/auto/tools/moc/tst_moc.cpp +++ b/tests/auto/tools/moc/tst_moc.cpp @@ -76,6 +76,7 @@ #include "cxx11-explicit-override-control.h" #include "parse-defines.h" +#include "related-metaobjects-in-namespaces.h" QT_USE_NAMESPACE @@ -568,6 +569,8 @@ private slots: void preprocessorOnly(); void unterminatedFunctionMacro(); void QTBUG32933_relatedObjectsDontIncludeItself(); + void writeEnumFromUnrelatedClass(); + void relatedMetaObjectsWithinNamespaces(); signals: void sigWithUnsignedArg(unsigned foo); @@ -3104,6 +3107,61 @@ void tst_Moc::QTBUG32933_relatedObjectsDontIncludeItself() } +class UnrelatedClass : public QObject +{ + Q_OBJECT + Q_ENUMS(UnrelatedEnum) +public: + enum UnrelatedEnum { + UnrelatedInvalidValue = -1, + UnrelatedValue = 42 + }; +}; + +// The presence of this macro used to confuse moc and prevent +// UnrelatedClass from being listed in the related meta objects. +Q_DECLARE_METATYPE(UnrelatedClass::UnrelatedEnum) + +class TestClassReferencingUnrelatedEnum : public QObject +{ + Q_OBJECT + Q_PROPERTY(UnrelatedClass::UnrelatedEnum enumProperty READ enumProperty WRITE setEnumProperty) +public: + TestClassReferencingUnrelatedEnum() + : m_enumProperty(UnrelatedClass::UnrelatedInvalidValue) + {} + + UnrelatedClass::UnrelatedEnum enumProperty() const { + return m_enumProperty; + } + + void setEnumProperty(UnrelatedClass::UnrelatedEnum arg) { + m_enumProperty = arg; + } + +private: + UnrelatedClass::UnrelatedEnum m_enumProperty; +}; + +void tst_Moc::writeEnumFromUnrelatedClass() +{ + TestClassReferencingUnrelatedEnum obj; + QString enumValueAsString("UnrelatedValue"); + obj.setProperty("enumProperty", enumValueAsString); + QCOMPARE(int(obj.enumProperty()), int(UnrelatedClass::UnrelatedValue)); +} + + + +void tst_Moc::relatedMetaObjectsWithinNamespaces() +{ + const QMetaObject *relatedMo = &QTBUG_2151::A::staticMetaObject; + + const QMetaObject *testMo = &QTBUG_2151::B::staticMetaObject; + QVERIFY(testMo->d.relatedMetaObjects); + QVERIFY(testMo->d.relatedMetaObjects[0] == relatedMo); +} + QTEST_MAIN(tst_Moc) // the generated code must compile with QT_NO_KEYWORDS -- cgit v1.2.3 From c0b899b3df328f9957bea404f351b492ecfefe31 Mon Sep 17 00:00:00 2001 From: Friedemann Kleint Date: Thu, 12 Dec 2013 10:38:26 +0200 Subject: tst_qlinedit: Create a new test widget on demand for each test. The test used a member testWidget that was cleared and reset after each test, which caused focus fights and side effects. The widget is now created and shown only when necessary. Change-Id: I0dc635e9d4cdf4f899994b88206bb0125526f6df Reviewed-by: J-P Nurmi --- .../widgets/widgets/qlineedit/tst_qlineedit.cpp | 156 ++++++++++++++++----- 1 file changed, 120 insertions(+), 36 deletions(-) (limited to 'tests') diff --git a/tests/auto/widgets/widgets/qlineedit/tst_qlineedit.cpp b/tests/auto/widgets/widgets/qlineedit/tst_qlineedit.cpp index d6d48a1e8d..e9cc1e6abd 100644 --- a/tests/auto/widgets/widgets/qlineedit/tst_qlineedit.cpp +++ b/tests/auto/widgets/widgets/qlineedit/tst_qlineedit.cpp @@ -71,6 +71,7 @@ #include #include #include +#include #include "qcommonstyle.h" #include "qstyleoption.h" @@ -87,6 +88,17 @@ QT_BEGIN_NAMESPACE class QPainter; QT_END_NAMESPACE +static inline void centerOnScreen(QWidget *w, const QSize &size) +{ + const QPoint offset = QPoint(size.width() / 2, size.height() / 2); + w->move(QGuiApplication::primaryScreen()->availableGeometry().center() - offset); +} + +static inline void centerOnScreen(QWidget *w) +{ + centerOnScreen(w, w->geometry().size()); +} + class StyleOptionTestStyle : public QCommonStyle { private: @@ -316,6 +328,7 @@ private: // keyClicks(..) is moved to QtTestCase void psKeyClick(QWidget *target, Qt::Key key, Qt::KeyboardModifiers pressState = 0); void psKeyClick(QTestEventList &keys, Qt::Key key, Qt::KeyboardModifiers pressState = 0); + QLineEdit *ensureTestWidget(); bool validInput; QString changed_string; @@ -325,7 +338,7 @@ private: int selection_count; int lastCursorPos; int newCursorPos; - QLineEdit *testWidget; + QLineEdit *m_testWidget; int m_keyboardScheme; PlatformInputContext m_platformInputContext; }; @@ -354,7 +367,7 @@ void tst_QLineEdit::getSetCheck() QCOMPARE(true, obj1.dragEnabled()); } -tst_QLineEdit::tst_QLineEdit() : validInput(false), m_keyboardScheme(0) +tst_QLineEdit::tst_QLineEdit() : validInput(false), m_testWidget(0), m_keyboardScheme(0) { if (const QPlatformTheme *theme = QGuiApplicationPrivate::platformTheme()) m_keyboardScheme = theme->themeHint(QPlatformTheme::KeyboardScheme).toInt(); @@ -370,23 +383,24 @@ tst_QLineEdit::~tst_QLineEdit() { } +QLineEdit *tst_QLineEdit::ensureTestWidget() +{ + if (!m_testWidget) { + m_testWidget = new QLineEdit; + m_testWidget->setObjectName("testWidget"); + connect(m_testWidget, SIGNAL(cursorPositionChanged(int,int)), this, SLOT(onCursorPositionChanged(int,int))); + connect(m_testWidget, SIGNAL(textChanged(QString)), this, SLOT(onTextChanged(QString))); + connect(m_testWidget, SIGNAL(textEdited(QString)), this, SLOT(onTextEdited(QString))); + connect(m_testWidget, SIGNAL(returnPressed()), this, SLOT(onReturnPressed())); + connect(m_testWidget, SIGNAL(selectionChanged()), this, SLOT(onSelectionChanged())); + connect(m_testWidget, SIGNAL(editingFinished()), this, SLOT(editingFinished())); + m_testWidget->resize(200,50); + } + return m_testWidget; +} + void tst_QLineEdit::initTestCase() { - testWidget = new QLineEdit(0); - testWidget->setObjectName("testWidget"); - connect(testWidget, SIGNAL(cursorPositionChanged(int,int)), this, SLOT(onCursorPositionChanged(int,int))); - connect(testWidget, SIGNAL(textChanged(QString)), this, SLOT(onTextChanged(QString))); - connect(testWidget, SIGNAL(textEdited(QString)), this, SLOT(onTextEdited(QString))); - connect(testWidget, SIGNAL(returnPressed()), this, SLOT(onReturnPressed())); - connect(testWidget, SIGNAL(selectionChanged()), this, SLOT(onSelectionChanged())); - connect(testWidget, SIGNAL(editingFinished()), this, SLOT(editingFinished())); - - testWidget->resize(200,50); - testWidget->show(); - QVERIFY(QTest::qWaitForWindowExposed(testWidget)); - QApplication::setActiveWindow(testWidget); - QTRY_VERIFY(testWidget->hasFocus()); - changed_count = 0; edited_count = 0; selection_count = 0; @@ -397,7 +411,6 @@ void tst_QLineEdit::initTestCase() void tst_QLineEdit::cleanupTestCase() { - delete testWidget; QInputMethodPrivate *inputMethodPrivate = QInputMethodPrivate::get(qApp->inputMethod()); inputMethodPrivate->testContext = 0; } @@ -405,23 +418,17 @@ void tst_QLineEdit::cleanupTestCase() void tst_QLineEdit::init() { return_count = 0; - testWidget->clear(); - testWidget->setEchoMode(QLineEdit::Normal); - testWidget->setMaxLength(32767); - testWidget->setReadOnly(false); - testWidget->setText(""); - testWidget->setInputMask(""); - testWidget->setFrame(true); - testWidget->setValidator(0); - testWidget->setDragEnabled(true); } void tst_QLineEdit::cleanup() { + delete m_testWidget; + m_testWidget = 0; } void tst_QLineEdit::experimental() { + QLineEdit *testWidget = ensureTestWidget(); QIntValidator intValidator(3, 7, 0); testWidget->setValidator(&intValidator); testWidget->setText(""); @@ -439,8 +446,7 @@ void tst_QLineEdit::experimental() void tst_QLineEdit::upperAndLowercase() { - testWidget->setInputMask(""); - testWidget->setText(""); + QLineEdit *testWidget = ensureTestWidget(); QTest::keyClicks(testWidget, "aAzZ`1234567890-=~!@#$%^&*()_+[]{}\\|;:'\",.<>/?"); qApp->processEvents(); @@ -662,6 +668,7 @@ void tst_QLineEdit::setInputMask() QEXPECT_FAIL( "insert blank=input", "To eat blanks or not? Known issue. Task 43172", Abort); // First set the input mask + QLineEdit *testWidget = ensureTestWidget(); testWidget->setInputMask(mask); // then either insert using insert() or keyboard @@ -705,12 +712,14 @@ void tst_QLineEdit::inputMask() QFETCH(QString, mask); QFETCH(QString, expectedMask); + QLineEdit *testWidget = ensureTestWidget(); testWidget->setInputMask(mask); QCOMPARE(testWidget->inputMask(), expectedMask); } void tst_QLineEdit::clearInputMask() { + QLineEdit *testWidget = ensureTestWidget(); testWidget->setInputMask("000.000.000.000"); QVERIFY(testWidget->inputMask() != QString::null); testWidget->setInputMask(QString::null); @@ -792,6 +801,7 @@ void tst_QLineEdit::keypress_inputMask() QFETCH(QString, expectedText); QFETCH(QString, expectedDisplayText); + QLineEdit *testWidget = ensureTestWidget(); testWidget->setInputMask(mask); keys.simulate(testWidget); @@ -828,6 +838,7 @@ void tst_QLineEdit::hasAcceptableInputMask() QFETCH(QString, valid); // test that invalid input (for required) work for optionalMask + QLineEdit *testWidget = ensureTestWidget(); testWidget->setInputMask(optionalMask); validInput = false; testWidget->setText(invalid); @@ -879,6 +890,7 @@ public: void tst_QLineEdit::hasAcceptableInputValidator() { + QLineEdit *testWidget = ensureTestWidget(); QSignalSpy spyChanged(testWidget, SIGNAL(textChanged(QString))); QSignalSpy spyEdited(testWidget, SIGNAL(textEdited(QString))); @@ -929,6 +941,7 @@ void tst_QLineEdit::maskCharacter() QFETCH(QString, input); QFETCH(bool, expectedValid); + QLineEdit *testWidget = ensureTestWidget(); QFocusEvent lostFocus(QEvent::FocusOut); testWidget->setInputMask(mask); @@ -1079,6 +1092,7 @@ void tst_QLineEdit::undo() QFETCH(QStringList, expectedString); QFETCH(bool, use_keys); + QLineEdit *testWidget = ensureTestWidget(); QVERIFY(!testWidget->isUndoAvailable()); int i; @@ -1170,6 +1184,7 @@ void tst_QLineEdit::redo() QFETCH(IntList, insertIndex); QFETCH(QStringList, expectedString); + QLineEdit *testWidget = ensureTestWidget(); QVERIFY(!testWidget->isUndoAvailable()); QVERIFY(!testWidget->isRedoAvailable()); @@ -1439,6 +1454,7 @@ void tst_QLineEdit::undo_keypressevents() QFETCH(QTestEventList, keys); QFETCH(QStringList, expectedString); + QLineEdit *testWidget = ensureTestWidget(); keys.simulate(testWidget); for (int i=0; i 0 && testWidget->isUndoAvailable()) { max--; @@ -1504,7 +1521,7 @@ void tst_QLineEdit::clear() void tst_QLineEdit::editingFinished() { - if (testWidget->hasAcceptableInput()) + if (m_testWidget->hasAcceptableInput()) validInput = true; else validInput = false; @@ -1526,6 +1543,7 @@ void tst_QLineEdit::text_data() void tst_QLineEdit::text() { QFETCH(QString, insertString); + QLineEdit *testWidget = ensureTestWidget(); testWidget->setText(insertString); QCOMPARE(testWidget->text(), insertString); } @@ -1540,6 +1558,7 @@ void tst_QLineEdit::textMask_data() void tst_QLineEdit::textMask() { QFETCH( QString, insertString ); + QLineEdit *testWidget = ensureTestWidget(); testWidget->setInputMask( "#" ); testWidget->setText( insertString ); QCOMPARE( testWidget->text(), insertString ); @@ -1547,6 +1566,7 @@ void tst_QLineEdit::textMask() void tst_QLineEdit::setText() { + QLineEdit *testWidget = ensureTestWidget(); QSignalSpy editedSpy(testWidget, SIGNAL(textEdited(QString))); QSignalSpy changedSpy(testWidget, SIGNAL(textChanged(QString))); testWidget->setText("hello"); @@ -1616,7 +1636,7 @@ void tst_QLineEdit::displayText_data() m << bool(use_setText); s = key_mode_str + "Password"; m = QLineEdit::Password; - QChar passChar = qApp->style()->styleHint(QStyle::SH_LineEdit_PasswordCharacter, 0, testWidget); + QChar passChar = qApp->style()->styleHint(QStyle::SH_LineEdit_PasswordCharacter, 0, m_testWidget); QString input; QString pass; input = "Hello World"; @@ -1648,6 +1668,7 @@ void tst_QLineEdit::displayText() QFETCH(QLineEdit::EchoMode, mode); //QFETCH(bool, use_setText); Currently unused. + QLineEdit *testWidget = ensureTestWidget(); testWidget->setEchoMode(mode); testWidget->setText(insertString); QCOMPARE(testWidget->displayText(), expectedString); @@ -1657,11 +1678,15 @@ void tst_QLineEdit::displayText() void tst_QLineEdit::passwordEchoOnEdit() { QStyleOptionFrameV2 opt; + QLineEdit *testWidget = ensureTestWidget(); QChar fillChar = testWidget->style()->styleHint(QStyle::SH_LineEdit_PasswordCharacter, &opt, testWidget); testWidget->setEchoMode(QLineEdit::PasswordEchoOnEdit); testWidget->setFocus(); + centerOnScreen(testWidget); + testWidget->show(); testWidget->raise(); + QVERIFY(QTest::qWaitForWindowExposed(testWidget)); QTRY_VERIFY(testWidget->hasFocus()); QTest::keyPress(testWidget, '0'); @@ -1686,6 +1711,7 @@ void tst_QLineEdit::passwordEchoOnEdit() void tst_QLineEdit::passwordEchoDelay() { + QLineEdit *testWidget = ensureTestWidget(); int delay = qGuiApp->styleHints()->passwordMaskDelay(); #if defined QT_BUILD_INTERNAL QLineEditPrivate *priv = QLineEditPrivate::get(testWidget); @@ -1701,7 +1727,10 @@ void tst_QLineEdit::passwordEchoDelay() testWidget->setEchoMode(QLineEdit::Password); testWidget->setFocus(); + centerOnScreen(testWidget); + testWidget->show(); testWidget->raise(); + QVERIFY(QTest::qWaitForWindowExposed(testWidget)); QTRY_VERIFY(testWidget->hasFocus()); QTest::keyPress(testWidget, '0'); @@ -1760,6 +1789,7 @@ void tst_QLineEdit::maxLength_mask() QFETCH(QString, mask); QFETCH(int, expectedLength); + QLineEdit *testWidget = ensureTestWidget(); testWidget->setInputMask(mask); QCOMPARE(testWidget->maxLength(), expectedLength); @@ -1792,6 +1822,7 @@ void tst_QLineEdit::maxLength() QFETCH(bool, use_setText); // in some cases we set the maxLength _before_ entering the text. + QLineEdit *testWidget = ensureTestWidget(); if (!insertBeforeSettingMaxLength) testWidget->setMaxLength(length); @@ -1823,6 +1854,7 @@ void tst_QLineEdit::maxLength() void tst_QLineEdit::isReadOnly() { + QLineEdit *testWidget = ensureTestWidget(); QVERIFY(!testWidget->isReadOnly()); // start with a basic text @@ -1866,6 +1898,7 @@ void tst_QLineEdit::noCursorBlinkWhenReadOnly() if (cursorFlashTime == 0) return; BlinkTestLineEdit le; + centerOnScreen(&le); le.show(); le.setFocus(); QTest::qWaitForWindowActive(&le); @@ -1931,6 +1964,7 @@ void tst_QLineEdit::psKeyClick(QTestEventList &keys, Qt::Key key, Qt::KeyboardMo void tst_QLineEdit::cursorPosition() { + QLineEdit *testWidget = ensureTestWidget(); QVERIFY(testWidget->cursorPosition() == 0); // start with a basic text @@ -2018,7 +2052,7 @@ void tst_QLineEdit::cursorPositionChanged_data() QTestEventList keys; keys.addKeyClick(Qt::Key_A); - QTest::newRow("a") << keys << 0 << 1; + QTest::newRow("a") << keys << -1 << 1; keys.clear(); keys.addKeyClick(Qt::Key_A); @@ -2149,6 +2183,7 @@ void tst_QLineEdit::cursorPositionChanged() lastCursorPos = 0; newCursorPos = 0; + QLineEdit *testWidget = ensureTestWidget(); input.simulate(testWidget); QCOMPARE(lastCursorPos, lastPos); QCOMPARE(newCursorPos, newPos); @@ -2159,6 +2194,7 @@ void tst_QLineEdit::selectedText() QString testString = "Abc defg hijklmno, p 'qrst' uvw xyz"; // start with a basic text + QLineEdit *testWidget = ensureTestWidget(); testWidget->setText(testString); selection_count = 0; @@ -2228,6 +2264,7 @@ void tst_QLineEdit::textChangedAndTextEdited() changed_count = 0; edited_count = 0; + QLineEdit *testWidget = ensureTestWidget(); QTest::keyClick(testWidget, Qt::Key_A); QCOMPARE(changed_count, 1); QVERIFY(edited_count == changed_count); @@ -2286,6 +2323,7 @@ void tst_QLineEdit::returnPressed() { return_count = 0; + QLineEdit *testWidget = ensureTestWidget(); QTest::keyClick(testWidget, Qt::Key_Return); QVERIFY(return_count == 1); return_count = 0; @@ -2434,6 +2472,7 @@ void tst_QLineEdit::returnPressed_maskvalidator() QFETCH(bool, returnPressed); QEXPECT_FAIL("mask '999', intfix validator(0,999), input '12'", "QIntValidator has changed behaviour. Does not accept spaces. Task 43082.", Abort); + QLineEdit *testWidget = ensureTestWidget(); testWidget->setInputMask(inputMask); if (hasValidator) @@ -2454,6 +2493,7 @@ void tst_QLineEdit::onReturnPressed() void tst_QLineEdit::setValidator() { // Verify that we can set and re-set a validator. + QLineEdit *testWidget = ensureTestWidget(); QVERIFY(!testWidget->validator()); QIntValidator iv1(0); @@ -2604,6 +2644,7 @@ void tst_QLineEdit::setValidator_QIntValidator() QFETCH(bool, is_valid); QIntValidator intValidator(mini, maxi, 0); + QLineEdit *testWidget = ensureTestWidget(); testWidget->setValidator(&intValidator); QVERIFY(testWidget->text().isEmpty()); //qDebug("1 input: '" + input + "' Exp: '" + expectedText + "'"); @@ -2640,6 +2681,7 @@ void tst_QLineEdit::frame_data() void tst_QLineEdit::frame() { + QLineEdit *testWidget = ensureTestWidget(); testWidget->setFrame(false); // verify that the editor is shown without a frame #ifndef NO_PIXMAP_TESTS @@ -2677,6 +2719,7 @@ void tst_QLineEdit::setAlignment_data() void tst_QLineEdit::setAlignment() { + QLineEdit *testWidget = ensureTestWidget(); testWidget->setText("left"); testWidget->setAlignment(Qt::AlignLeft); #ifndef NO_PIXMAP_TESTS @@ -2716,6 +2759,7 @@ void tst_QLineEdit::setAlignment() void tst_QLineEdit::isModified() { + QLineEdit *testWidget = ensureTestWidget(); QVERIFY(!testWidget->isModified()); testWidget->setText("bla"); QVERIFY(!testWidget->isModified()); @@ -2750,6 +2794,7 @@ void tst_QLineEdit::isModified() void tst_QLineEdit::edited() { + QLineEdit *testWidget = ensureTestWidget(); QVERIFY(!testWidget->isModified()); testWidget->setText("bla"); QVERIFY(!testWidget->isModified()); @@ -2781,6 +2826,7 @@ void tst_QLineEdit::edited() void tst_QLineEdit::insert() { + QLineEdit *testWidget = ensureTestWidget(); testWidget->insert("This"); testWidget->insert(" is"); testWidget->insert(" a"); @@ -2857,6 +2903,7 @@ void tst_QLineEdit::setSelection() QFETCH(QString, expectedText); QFETCH(bool, expectedHasSelectedText); + QLineEdit *testWidget = ensureTestWidget(); testWidget->setText(text); testWidget->setSelection(start, length); QCOMPARE(testWidget->hasSelectedText(), expectedHasSelectedText); @@ -2872,6 +2919,7 @@ void tst_QLineEdit::cut() QSKIP("Autotests run from cron and pasteboard don't get along quite ATM"); // test newlines in cut'n'paste + QLineEdit *testWidget = ensureTestWidget(); testWidget->setText("A\nB\nC\n"); testWidget->setSelection(0, 6); testWidget->cut(); @@ -2967,6 +3015,7 @@ void tst_QLineEdit::inputMaskAndValidator() QFETCH(QString, validateText); QFETCH(int, validatePos); + QLineEdit *testWidget = ensureTestWidget(); InputMaskValidator imv(testWidget); testWidget->setValidator(&imv); @@ -2980,6 +3029,7 @@ void tst_QLineEdit::inputMaskAndValidator() void tst_QLineEdit::maxLengthAndInputMask() { // Really a test for #30447 + QLineEdit *testWidget = ensureTestWidget(); QVERIFY(testWidget->inputMask().isNull()); testWidget->setMaxLength(10); QVERIFY(testWidget->maxLength() == 10); @@ -3019,6 +3069,7 @@ Q_DECLARE_METATYPE(LineEdit::State); void tst_QLineEdit::returnPressedKeyEvent() { LineEdit lineedit; + centerOnScreen(&lineedit); lineedit.show(); QCOMPARE((int)lineedit.state, (int)LineEdit::Other); QTest::keyClick(&lineedit, Qt::Key_Enter); @@ -3035,6 +3086,7 @@ void tst_QLineEdit::returnPressedKeyEvent() void tst_QLineEdit::keepSelectionOnTabFocusIn() { + QLineEdit *testWidget = ensureTestWidget(); testWidget->setText("hello world"); { QFocusEvent e(QEvent::FocusIn, Qt::TabFocusReason); @@ -3052,6 +3104,7 @@ void tst_QLineEdit::keepSelectionOnTabFocusIn() void tst_QLineEdit::readOnlyStyleOption() { + QLineEdit *testWidget = ensureTestWidget(); bool wasReadOnly = testWidget->isReadOnly(); QStyle *oldStyle = testWidget->style(); @@ -3074,6 +3127,7 @@ void tst_QLineEdit::readOnlyStyleOption() void tst_QLineEdit::validateOnFocusOut() { + QLineEdit *testWidget = ensureTestWidget(); QSignalSpy editingFinishedSpy(testWidget, SIGNAL(editingFinished())); testWidget->setValidator(new QIntValidator(100, 999, 0)); QTest::keyPress(testWidget, '1'); @@ -3083,8 +3137,11 @@ void tst_QLineEdit::validateOnFocusOut() QCOMPARE(editingFinishedSpy.count(), 0); testWidget->setFocus(); + centerOnScreen(testWidget); + testWidget->show(); testWidget->activateWindow(); - QTRY_VERIFY(testWidget->hasFocus()); + QVERIFY(QTest::qWaitForWindowActive(testWidget)); + QVERIFY(testWidget->hasFocus()); QTest::keyPress(testWidget, '0'); QTRY_COMPARE(testWidget->text(), QString("100")); @@ -3095,6 +3152,7 @@ void tst_QLineEdit::validateOnFocusOut() void tst_QLineEdit::editInvalidText() { + QLineEdit *testWidget = ensureTestWidget(); testWidget->clear(); testWidget->setValidator(new QIntValidator(0, 120, 0)); testWidget->setText("1234"); @@ -3122,6 +3180,7 @@ void tst_QLineEdit::editInvalidText() void tst_QLineEdit::charWithAltOrCtrlModifier() { + QLineEdit *testWidget = ensureTestWidget(); testWidget->clear(); QCOMPARE(testWidget->text(), QString("")); QTest::keyPress(testWidget, Qt::Key_Plus); @@ -3136,6 +3195,7 @@ void tst_QLineEdit::charWithAltOrCtrlModifier() void tst_QLineEdit::leftKeyOnSelectedText() { + QLineEdit *testWidget = ensureTestWidget(); testWidget->clear(); testWidget->setText("0123"); testWidget->setCursorPosition(4); @@ -3158,6 +3218,7 @@ void tst_QLineEdit::leftKeyOnSelectedText() void tst_QLineEdit::inlineCompletion() { + QLineEdit *testWidget = ensureTestWidget(); testWidget->clear(); QStandardItemModel *model = new QStandardItemModel; QStandardItem *root = model->invisibleRootItem(); @@ -3172,6 +3233,9 @@ void tst_QLineEdit::inlineCompletion() QCompleter *completer = new QCompleter(model); completer->setCompletionMode(QCompleter::InlineCompletion); completer->setCaseSensitivity(Qt::CaseInsensitive); + centerOnScreen(testWidget); + testWidget->show(); + QTest::qWaitForWindowExposed(testWidget); testWidget->setFocus(); QTRY_COMPARE(qApp->activeWindow(), (QWidget*)testWidget); testWidget->setCompleter(completer); @@ -3238,6 +3302,7 @@ void tst_QLineEdit::inlineCompletion() void tst_QLineEdit::noTextEditedOnClear() { + QLineEdit *testWidget = ensureTestWidget(); testWidget->setText("Test"); QSignalSpy textEditedSpy(testWidget, SIGNAL(textEdited(QString))); testWidget->clear(); @@ -3301,6 +3366,7 @@ void tst_QLineEdit::textMargin() sizeHint.setHeight(sizeHint.height() + top +bottom); QCOMPARE(testWidget.sizeHint(), sizeHint); testWidget.setFrame(false); + centerOnScreen(&tlw); tlw.show(); int l; @@ -3320,6 +3386,7 @@ void tst_QLineEdit::textMargin() #ifndef QTEST_NO_CURSOR void tst_QLineEdit::cursor() { + QLineEdit *testWidget = ensureTestWidget(); testWidget->setReadOnly(false); QCOMPARE(testWidget->cursor().shape(), Qt::IBeamCursor); testWidget->setReadOnly(true); @@ -3559,12 +3626,16 @@ void tst_QLineEdit::task233101_cursorPosAfterInputMethod() void tst_QLineEdit::task241436_passwordEchoOnEditRestoreEchoMode() { QStyleOptionFrameV2 opt; + QLineEdit *testWidget = ensureTestWidget(); QChar fillChar = testWidget->style()->styleHint(QStyle::SH_LineEdit_PasswordCharacter, &opt, testWidget); testWidget->setEchoMode(QLineEdit::PasswordEchoOnEdit); testWidget->setFocus(); + centerOnScreen(testWidget); + testWidget->show(); QApplication::setActiveWindow(testWidget); - QTRY_VERIFY(testWidget->hasFocus()); + QVERIFY(QTest::qWaitForWindowActive(testWidget)); + QVERIFY(testWidget->hasFocus()); QTest::keyPress(testWidget, '0'); QCOMPARE(testWidget->displayText(), QString("0")); @@ -3588,6 +3659,7 @@ void tst_QLineEdit::task241436_passwordEchoOnEditRestoreEchoMode() void tst_QLineEdit::task248948_redoRemovedSelection() { + QLineEdit *testWidget = ensureTestWidget(); testWidget->setText("a"); testWidget->selectAll(); QTest::keyPress(testWidget, Qt::Key_Delete); @@ -3602,12 +3674,15 @@ void tst_QLineEdit::taskQTBUG_4401_enterKeyClearsPassword() { QString password("Wanna guess?"); + QLineEdit *testWidget = ensureTestWidget(); testWidget->setText(password); testWidget->setEchoMode(QLineEdit::PasswordEchoOnEdit); testWidget->setFocus(); testWidget->selectAll(); + centerOnScreen(testWidget); + testWidget->show(); QApplication::setActiveWindow(testWidget); - QTRY_VERIFY(testWidget->hasFocus()); + QVERIFY(QTest::qWaitForWindowActive(testWidget)); QTest::keyPress(testWidget, Qt::Key_Enter); QTRY_COMPARE(testWidget->text(), password); @@ -3617,6 +3692,7 @@ void tst_QLineEdit::taskQTBUG_4679_moveToStartEndOfBlock() { #ifdef Q_OS_MAC const QString text("there are no blocks for lineEdit"); + QLineEdit *testWidget = ensureTestWidget(); testWidget->setText(text); testWidget->setCursorPosition(5); QCOMPARE(testWidget->cursorPosition(), 5); @@ -3632,6 +3708,7 @@ void tst_QLineEdit::taskQTBUG_4679_selectToStartEndOfBlock() { #ifdef Q_OS_MAC const QString text("there are no blocks for lineEdit, select all"); + QLineEdit *testWidget = ensureTestWidget(); testWidget->setText(text); testWidget->setCursorPosition(5); QCOMPARE(testWidget->cursorPosition(), 5); @@ -3901,6 +3978,7 @@ void tst_QLineEdit::bidiLogicalMovement() void tst_QLineEdit::selectAndCursorPosition() { + QLineEdit *testWidget = ensureTestWidget(); testWidget->setText("This is a long piece of text"); testWidget->setSelection(0, 5); @@ -3911,6 +3989,10 @@ void tst_QLineEdit::selectAndCursorPosition() void tst_QLineEdit::inputMethod() { + QLineEdit *testWidget = ensureTestWidget(); + centerOnScreen(testWidget); + testWidget->show(); + QVERIFY(QTest::qWaitForWindowExposed(testWidget)); // widget accepts input QInputMethodQueryEvent queryEvent(Qt::ImEnabled); QApplication::sendEvent(testWidget, &queryEvent); @@ -3945,6 +4027,7 @@ void tst_QLineEdit::inputMethod() void tst_QLineEdit::inputMethodSelection() { + QLineEdit *testWidget = ensureTestWidget(); testWidget->setText("Lorem ipsum dolor sit amet, consectetur adipiscing elit."); testWidget->setSelection(0,0); QSignalSpy selectionSpy(testWidget, SIGNAL(selectionChanged())); @@ -3992,6 +4075,7 @@ void tst_QLineEdit::inputMethodQueryImHints_data() void tst_QLineEdit::inputMethodQueryImHints() { QFETCH(Qt::InputMethodHints, hints); + QLineEdit *testWidget = ensureTestWidget(); testWidget->setInputMethodHints(hints); QVariant value = testWidget->inputMethodQuery(Qt::ImHints); @@ -4034,7 +4118,7 @@ void tst_QLineEdit::undoRedoAndEchoModes() QFETCH(QStringList, expected); // create some history for the QLineEdit - testWidget->clear(); + QLineEdit *testWidget = ensureTestWidget(); testWidget->setEchoMode(QLineEdit::EchoMode(echoMode)); testWidget->insert(input.at(0)); testWidget->selectAll(); -- cgit v1.2.3 From ee7536876cee007efef4b8d7e861721f88af1a19 Mon Sep 17 00:00:00 2001 From: Thiago Macieira Date: Thu, 10 Oct 2013 19:43:22 -0700 Subject: Add the UTF16-to-Latin1 in-place converter This is only possible for two important reasons: 1) QString and QByteArray d pointers are both done with QArrayData and that class does not care that the alignof(T) changes from 2 to 1, so we can give the pointer from QString to QByteArray (after adapting the allocated size, which is now double) 2) conversion from UTF16 to Latin1 always has fewer bytes (exactly half) Change-Id: I17b2690c910f3de8db55156c6d6b5f55be06d827 Reviewed-by: Konstantin Ritt Reviewed-by: Olivier Goffart --- tests/auto/corelib/tools/qstring/tst_qstring.cpp | 8 ++++++++ 1 file changed, 8 insertions(+) (limited to 'tests') diff --git a/tests/auto/corelib/tools/qstring/tst_qstring.cpp b/tests/auto/corelib/tools/qstring/tst_qstring.cpp index 9a3aaebaaf..a0edc16718 100644 --- a/tests/auto/corelib/tools/qstring/tst_qstring.cpp +++ b/tests/auto/corelib/tools/qstring/tst_qstring.cpp @@ -3882,6 +3882,14 @@ void tst_QString::toLatin1Roundtrip() // and back: QCOMPARE(QString::fromLatin1(latin1, latin1.length()).length(), unicodedst.length()); QCOMPARE(QString::fromLatin1(latin1, latin1.length()), unicodedst); + + // try the rvalue version of toLatin1() + QString s = unicodesrc; + QCOMPARE(qMove(s).toLatin1(), latin1); + + // and verify that the moved-from object can still be used + s = "foo"; + s.clear(); } void tst_QString::stringRef_toLatin1Roundtrip_data() -- cgit v1.2.3 From 746dddeb9f95b45d23256177efe2b474ef104640 Mon Sep 17 00:00:00 2001 From: Peter Hartmann Date: Wed, 11 Dec 2013 11:16:08 +0100 Subject: QNetworkCookie: allow cookies for IPv4 domains If the domain is an IP address, we should not do any magic regarding leading dots etc. Task-number: QTBUG-35022 Change-Id: I7722de4e6027666dde27e9e37b6353e3da775d94 Reviewed-by: Thiago Macieira Reviewed-by: Richard J. Moore --- .../auto/network/access/qnetworkcookiejar/tst_qnetworkcookiejar.cpp | 5 +++++ 1 file changed, 5 insertions(+) (limited to 'tests') diff --git a/tests/auto/network/access/qnetworkcookiejar/tst_qnetworkcookiejar.cpp b/tests/auto/network/access/qnetworkcookiejar/tst_qnetworkcookiejar.cpp index 4ee4b67ec0..25d91d63f5 100644 --- a/tests/auto/network/access/qnetworkcookiejar/tst_qnetworkcookiejar.cpp +++ b/tests/auto/network/access/qnetworkcookiejar/tst_qnetworkcookiejar.cpp @@ -211,6 +211,11 @@ void tst_QNetworkCookieJar::setCookiesFromUrl_data() result += cookie; QTest::newRow("effective-tld2-accepted") << preset << cookie << "http://www.gobiernoelectronico.ar" << result << true; + result.clear(); + preset.clear(); + cookie.setDomain("127.0.0.1"); + result += cookie; + QTest::newRow("IPv4-address-as-domain") << preset << cookie << "http://127.0.0.1/" << result << true; // setting the defaults: finalCookie = cookie; -- cgit v1.2.3 From ae293c1cb220847194fba6dcebdbb9194837bb56 Mon Sep 17 00:00:00 2001 From: Peter Hartmann Date: Tue, 26 Nov 2013 13:58:47 -0500 Subject: QNetworkCookie: allow cookies for IPv6 domains For IPv6 addresses don't call toAce as it returns the empty string. We should reflect the behavior of browsers here, which all accept cookies from IPv6 addresses. Original-patch-by: David Tapuska Task-number: QTBUG-35022 Change-Id: Ic00369e923d044ec459822b2405865c13e4185b6 Reviewed-by: Thiago Macieira Reviewed-by: Richard J. Moore --- .../auto/network/access/qnetworkcookiejar/tst_qnetworkcookiejar.cpp | 6 ++++++ 1 file changed, 6 insertions(+) (limited to 'tests') diff --git a/tests/auto/network/access/qnetworkcookiejar/tst_qnetworkcookiejar.cpp b/tests/auto/network/access/qnetworkcookiejar/tst_qnetworkcookiejar.cpp index 25d91d63f5..bcfe9f090f 100644 --- a/tests/auto/network/access/qnetworkcookiejar/tst_qnetworkcookiejar.cpp +++ b/tests/auto/network/access/qnetworkcookiejar/tst_qnetworkcookiejar.cpp @@ -217,6 +217,12 @@ void tst_QNetworkCookieJar::setCookiesFromUrl_data() result += cookie; QTest::newRow("IPv4-address-as-domain") << preset << cookie << "http://127.0.0.1/" << result << true; + result.clear(); + preset.clear(); + cookie.setDomain("fe80::250:56ff:fec0:1"); + result += cookie; + QTest::newRow("IPv6-address-as-domain") << preset << cookie << "http://[fe80::250:56ff:fec0:1]/" << result << true; + // setting the defaults: finalCookie = cookie; finalCookie.setPath("/something/"); -- cgit v1.2.3 From 863810eb28175d0266dd9d69516539c8c5f2e912 Mon Sep 17 00:00:00 2001 From: Andrew Knight Date: Fri, 13 Dec 2013 13:45:30 +0200 Subject: d3dcompiler_qt: Remove directory creation inside the proxy library Use of mkpath/mkdir is removed in order to make the proxy less invasive when there is no compiler service running. Creation of the directory structure is fully the service's responsibility. Service availability is now only checked once, at the first invocation of D3DCompile, as it is expected to be started before the application. Change-Id: Ib8c4f062c418497c2253daf524654e1db30dae47 Reviewed-by: Friedemann Kleint --- tests/auto/other/d3dcompiler/tst_d3dcompiler.cpp | 29 +++++++++++++++++------- 1 file changed, 21 insertions(+), 8 deletions(-) (limited to 'tests') diff --git a/tests/auto/other/d3dcompiler/tst_d3dcompiler.cpp b/tests/auto/other/d3dcompiler/tst_d3dcompiler.cpp index 1a3f4f4592..f86c965d84 100644 --- a/tests/auto/other/d3dcompiler/tst_d3dcompiler.cpp +++ b/tests/auto/other/d3dcompiler/tst_d3dcompiler.cpp @@ -153,11 +153,12 @@ QString tst_d3dcompiler::blobPath() if (qEnvironmentVariableIsSet("QT_D3DCOMPILER_DIR")) path.setPath(qgetenv("QT_D3DCOMPILER_DIR")); else - path.setPath(QStandardPaths::writableLocation(QStandardPaths::DataLocation)); + path.setPath(QStandardPaths::writableLocation(QStandardPaths::DataLocation) + QStringLiteral("/d3dcompiler")); - path.mkdir(QStringLiteral("d3dcompiler")); + path.mkdir(QStringLiteral("binary")); + path.mkdir(QStringLiteral("source")); - return path.absoluteFilePath(QStringLiteral("d3dcompiler/")); + return path.absolutePath(); } void tst_d3dcompiler::initTestCase() @@ -177,7 +178,12 @@ void tst_d3dcompiler::cleanup() FreeLibrary(d3dcompiler_win); QDir path(blobPath()); - path.removeRecursively(); + foreach (const QString &entry, path.entryList(QStringList(), QDir::Files|QDir::NoDotAndDotDot)) + path.remove(entry); + foreach (const QString &entry, path.entryList(QStringList(), QDir::Dirs|QDir::NoDotAndDotDot)) { + QDir dir(path.absoluteFilePath(entry + QStringLiteral("/"))); + dir.removeRecursively(); + } } void tst_d3dcompiler::service_data() @@ -188,8 +194,9 @@ void tst_d3dcompiler::service_data() // Don't test the default case, as it would clutter the AppData directory //QTest::newRow("default") << QByteArrayLiteral("") << true << E_ABORT; - QTest::newRow("temporary") << tempDir.path().toUtf8() << true << E_ABORT; + QTest::newRow("temporary") << QFile::encodeName(tempDir.path()) << true << E_ABORT; QTest::newRow("invalid") << QByteArrayLiteral("ZZ:\\") << false << S_OK; + QTest::newRow("empty") << QByteArrayLiteral("") << false << S_OK; } void tst_d3dcompiler::service() @@ -254,6 +261,8 @@ void tst_d3dcompiler::service() void tst_d3dcompiler::offlineCompile() { + qputenv("QT_D3DCOMPILER_DIR", QFile::encodeName(tempDir.path())); + for (int i = 0; compilerDlls[i]; ++i) { d3dcompiler_win = loadLibrary(compilerDlls[i]); if (d3dcompiler_win) @@ -271,7 +280,8 @@ void tst_d3dcompiler::offlineCompile() QVERIFY(shader); QDir outputPath(blobPath()); - QVERIFY(outputPath.mkpath(QStringLiteral("binary"))); + QVERIFY(outputPath.exists()); + QVERIFY(outputPath.exists(QStringLiteral("binary"))); outputPath.cd(QStringLiteral("binary")); QFile output(outputPath.absoluteFilePath(QCryptographicHash::hash(data, QCryptographicHash::Sha1).toHex())); QVERIFY(output.open(QFile::WriteOnly)); @@ -291,6 +301,8 @@ void tst_d3dcompiler::offlineCompile() void tst_d3dcompiler::onlineCompile() { + qputenv("QT_D3DCOMPILER_DIR", QFile::encodeName(tempDir.path())); + QByteArray data(hlsl); const QDir path = blobPath(); @@ -313,8 +325,9 @@ void tst_d3dcompiler::onlineCompile() runner.start(); // Wait for source to appear - QVERIFY(path.mkpath(QStringLiteral("source"))); - QVERIFY(path.mkpath(QStringLiteral("binary"))); + QVERIFY(path.exists()); + QVERIFY(path.exists(QStringLiteral("source"))); + QVERIFY(path.exists(QStringLiteral("binary"))); const QByteArray hash = QCryptographicHash::hash(data, QCryptographicHash::Sha1).toHex(); QFile input(path.absoluteFilePath(QStringLiteral("source/") + hash)); -- cgit v1.2.3 From 13c246ee119fdb10d91f509b968a221d4fc1d8ba Mon Sep 17 00:00:00 2001 From: David Faure Date: Wed, 11 Sep 2013 00:41:31 +0200 Subject: QAbstractSocket: fix setReadBufferSize from readyRead slot. In a slot connected to readyRead, if the app detects that the buffer size is too small and increases it, it expects that readyRead() will be emitted again. setReadBufferSize() doesn't re-enable the socket notifier when calling from within readyRead, and readyRead itself was missing the code to do it. Change-Id: Ia00a3066ad3ba09d5cfae0716adc5691ae96c3fa Done-with: Thiago Reviewed-by: Peter Hartmann Reviewed-by: Thiago Macieira --- .../network/socket/qtcpsocket/tst_qtcpsocket.cpp | 53 ++++++++++++++++++++++ 1 file changed, 53 insertions(+) (limited to 'tests') diff --git a/tests/auto/network/socket/qtcpsocket/tst_qtcpsocket.cpp b/tests/auto/network/socket/qtcpsocket/tst_qtcpsocket.cpp index f4eac0d6b8..e589d520cb 100644 --- a/tests/auto/network/socket/qtcpsocket/tst_qtcpsocket.cpp +++ b/tests/auto/network/socket/qtcpsocket/tst_qtcpsocket.cpp @@ -189,6 +189,7 @@ private slots: void connectToMultiIP(); void moveToThread0(); void increaseReadBufferSize(); + void increaseReadBufferSizeFromSlot(); void taskQtBug5799ConnectionErrorWaitForConnected(); void taskQtBug5799ConnectionErrorEventLoop(); void taskQtBug7054TimeoutErrorResetting(); @@ -225,6 +226,7 @@ protected slots: #endif void earlySocketBytesSent(qint64 bytes); void earlySocketReadyRead(); + void slotIncreaseReadBufferSizeReadyRead(); private: QByteArray expectedReplyIMAP(); @@ -2459,6 +2461,57 @@ void tst_QTcpSocket::increaseReadBufferSize() delete active; } +void tst_QTcpSocket::increaseReadBufferSizeFromSlot() // like KIO's socketconnectionbackend +{ + QFETCH_GLOBAL(bool, setProxy); + if (setProxy) + return; //proxy not useful for localhost test case + QTcpServer server; + QTcpSocket *active = newSocket(); + connect(active, SIGNAL(readyRead()), SLOT(slotIncreaseReadBufferSizeReadyRead())); + + // connect two sockets to each other: + QVERIFY(server.listen(QHostAddress::LocalHost)); + active->connectToHost("127.0.0.1", server.serverPort()); + QVERIFY(active->waitForConnected(5000)); + QVERIFY(server.waitForNewConnection(5000)); + + QTcpSocket *passive = server.nextPendingConnection(); + QVERIFY(passive); + + // now write 512 bytes of data on one end + QByteArray data(512, 'a'); + passive->write(data); + QVERIFY2(passive->waitForBytesWritten(5000), "Network timeout"); + + // set the read buffer size to less than what was written, + // and increase it from the slot, first to 384 then to 1024. + active->setReadBufferSize(256); + enterLoop(10); + QVERIFY2(!timeout(), "Network timeout"); + QCOMPARE(active->bytesAvailable(), qint64(data.size())); + + // drain it and compare + QCOMPARE(active->readAll(), data); + + delete active; +} + +void tst_QTcpSocket::slotIncreaseReadBufferSizeReadyRead() +{ + QTcpSocket *socket = qobject_cast(sender()); + const int currentBufferSize = socket->readBufferSize(); + QCOMPARE(currentBufferSize, socket->bytesAvailable()); + if (currentBufferSize == 256) + socket->setReadBufferSize(384); + else if (currentBufferSize == 384) + socket->setReadBufferSize(512); + else if (currentBufferSize == 512) + exitLoopSlot(); + else // should not happen + qFatal("buffer size was %d", currentBufferSize); +} + void tst_QTcpSocket::taskQtBug5799ConnectionErrorWaitForConnected() { QFETCH_GLOBAL(bool, setProxy); -- cgit v1.2.3 From 106316198d78e97ceaf3bd62203518bd85a45fda Mon Sep 17 00:00:00 2001 From: Marcel Krems Date: Mon, 16 Dec 2013 23:26:44 +0100 Subject: Enable QSqlError to handle alphanumeric error codes. Some database systems (like PostgreSQL) use alphanumeric error codes. Introduce a new method nativeErrorCode() which replaces number(). If the error code cannot be converted to int, number() will return 0. Task-number: QTBUG-142 Change-Id: Ic7fba841737674b75c0c01c2263f51d2041da497 Reviewed-by: Mark Brand --- tests/auto/sql/kernel/qsqldatabase/tst_databases.h | 8 ++++---- tests/auto/sql/kernel/qsqlerror/tst_qsqlerror.cpp | 18 ++++++++++++++++++ 2 files changed, 22 insertions(+), 4 deletions(-) (limited to 'tests') diff --git a/tests/auto/sql/kernel/qsqldatabase/tst_databases.h b/tests/auto/sql/kernel/qsqldatabase/tst_databases.h index 69ecbcb019..59a16bc569 100644 --- a/tests/auto/sql/kernel/qsqldatabase/tst_databases.h +++ b/tests/auto/sql/kernel/qsqldatabase/tst_databases.h @@ -515,8 +515,8 @@ public: static QByteArray printError( const QSqlError& err ) { QString result; - if(err.number() > 0) - result += '(' + QString::number(err.number()) + ") "; + if (!err.nativeErrorCode().isEmpty()) + result += '(' + err.nativeErrorCode() + ") "; result += '\''; if(!err.driverText().isEmpty()) result += err.driverText() + "' || '"; @@ -527,8 +527,8 @@ public: static QByteArray printError( const QSqlError& err, const QSqlDatabase& db ) { QString result(dbToString(db) + ": "); - if(err.number() > 0) - result += '(' + QString::number(err.number()) + ") "; + if (!err.nativeErrorCode().isEmpty()) + result += '(' + err.nativeErrorCode() + ") "; result += '\''; if(!err.driverText().isEmpty()) result += err.driverText() + "' || '"; diff --git a/tests/auto/sql/kernel/qsqlerror/tst_qsqlerror.cpp b/tests/auto/sql/kernel/qsqlerror/tst_qsqlerror.cpp index bee4441c0f..9763e3e7e6 100644 --- a/tests/auto/sql/kernel/qsqlerror/tst_qsqlerror.cpp +++ b/tests/auto/sql/kernel/qsqlerror/tst_qsqlerror.cpp @@ -120,6 +120,24 @@ void tst_QSqlError::construction() QSqlError obj4; QVERIFY(!obj4.isValid()); + + QSqlError obj5(QStringLiteral("drivertext"), QStringLiteral("databasetext"), + QSqlError::UnknownError, QStringLiteral("123")); + QCOMPARE(obj5.driverText(), QString("drivertext")); + QCOMPARE(obj5.databaseText(), QString("databasetext")); + QCOMPARE(obj5.type(), QSqlError::UnknownError); + QCOMPARE(obj5.number(), 123); + QCOMPARE(obj5.nativeErrorCode(), QStringLiteral("123")); + QVERIFY(obj5.isValid()); + + QSqlError obj6(QStringLiteral("drivertext"), QStringLiteral("databasetext"), + QSqlError::UnknownError, QStringLiteral("Err123")); + QCOMPARE(obj6.driverText(), QString("drivertext")); + QCOMPARE(obj6.databaseText(), QString("databasetext")); + QCOMPARE(obj6.type(), QSqlError::UnknownError); + QCOMPARE(obj6.number(), 0); + QCOMPARE(obj6.nativeErrorCode(), QStringLiteral("Err123")); + QVERIFY(obj6.isValid()); } void tst_QSqlError::operators() -- cgit v1.2.3 From 2b287c7c210ac708c0f8872e51517e0d46380ad3 Mon Sep 17 00:00:00 2001 From: Simon Hausmann Date: Mon, 23 Dec 2013 15:16:08 +0100 Subject: Fix regression in property handling with enums from gadgets When declaring a Q_PROPERTY(SomeType::SomeEnum foo ...) and SomeType is not a QObject but a gadget, then we must still include SomeType's meta object in the list of related meta objects. Task-number: QTBUG-35657 Change-Id: I46195140cb5d180c4f03bb1fe06a876e3fe11267 Reviewed-by: Olivier Goffart --- tests/auto/tools/moc/moc.pro | 4 +- tests/auto/tools/moc/qtbug-35657-gadget.h | 51 ++++++++++++++++++++ .../auto/tools/moc/related-metaobjects-in-gadget.h | 54 ++++++++++++++++++++++ tests/auto/tools/moc/tst_moc.cpp | 11 +++++ 4 files changed, 119 insertions(+), 1 deletion(-) create mode 100644 tests/auto/tools/moc/qtbug-35657-gadget.h create mode 100644 tests/auto/tools/moc/related-metaobjects-in-gadget.h (limited to 'tests') diff --git a/tests/auto/tools/moc/moc.pro b/tests/auto/tools/moc/moc.pro index c68d48b813..320887637d 100644 --- a/tests/auto/tools/moc/moc.pro +++ b/tests/auto/tools/moc/moc.pro @@ -25,7 +25,9 @@ HEADERS += using-namespaces.h no-keywords.h task87883.h c-comments.h backslash-n function-with-attributes.h \ plugin_metadata.h \ single-quote-digit-separator-n3781.h \ - related-metaobjects-in-namespaces.h + related-metaobjects-in-namespaces.h \ + qtbug-35657-gadget.h \ + related-metaobjects-in-gadget.h if(*-g++*|*-icc*|*-clang*|*-llvm):!irix-*:!win32-*: HEADERS += os9-newlines.h win-newlines.h diff --git a/tests/auto/tools/moc/qtbug-35657-gadget.h b/tests/auto/tools/moc/qtbug-35657-gadget.h new file mode 100644 index 0000000000..1f25ce1b1d --- /dev/null +++ b/tests/auto/tools/moc/qtbug-35657-gadget.h @@ -0,0 +1,51 @@ +/**************************************************************************** +** +** Copyright (C) 2013 Digia Plc and/or its subsidiary(-ies). +** Contact: http://www.qt-project.org/legal +** +** This file is part of the test suite of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:LGPL$ +** 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 Digia. For licensing terms and +** conditions see http://qt.digia.com/licensing. For further information +** use the contact form at http://qt.digia.com/contact-us. +** +** 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, Digia gives you certain additional +** rights. These rights are described in the Digia Qt LGPL Exception +** version 1.1, included in the file LGPL_EXCEPTION.txt in this package. +** +** GNU General Public License Usage +** Alternatively, this file may be used under the terms of the GNU +** General Public License version 3.0 as published by the Free Software +** Foundation and appearing in the file LICENSE.GPL included in the +** packaging of this file. Please review the following information to +** ensure the GNU General Public License version 3.0 requirements will be +** met: http://www.gnu.org/copyleft/gpl.html. +** +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +#include + +namespace QTBUG_35657 { + class A { + Q_GADGET + Q_ENUMS(SomeEnum) + public: + enum SomeEnum { SomeEnumValue = 0 }; + }; +} diff --git a/tests/auto/tools/moc/related-metaobjects-in-gadget.h b/tests/auto/tools/moc/related-metaobjects-in-gadget.h new file mode 100644 index 0000000000..5665a79251 --- /dev/null +++ b/tests/auto/tools/moc/related-metaobjects-in-gadget.h @@ -0,0 +1,54 @@ +/**************************************************************************** +** +** Copyright (C) 2013 Digia Plc and/or its subsidiary(-ies). +** Contact: http://www.qt-project.org/legal +** +** This file is part of the test suite of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:LGPL$ +** 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 Digia. For licensing terms and +** conditions see http://qt.digia.com/licensing. For further information +** use the contact form at http://qt.digia.com/contact-us. +** +** 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, Digia gives you certain additional +** rights. These rights are described in the Digia Qt LGPL Exception +** version 1.1, included in the file LGPL_EXCEPTION.txt in this package. +** +** GNU General Public License Usage +** Alternatively, this file may be used under the terms of the GNU +** General Public License version 3.0 as published by the Free Software +** Foundation and appearing in the file LICENSE.GPL included in the +** packaging of this file. Please review the following information to +** ensure the GNU General Public License version 3.0 requirements will be +** met: http://www.gnu.org/copyleft/gpl.html. +** +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +#include +#include "qtbug-35657-gadget.h" + +namespace QTBUG_35657 { + class B : public QObject + { + Q_OBJECT + Q_PROPERTY(A::SomeEnum blah READ blah) + public: + + A::SomeEnum blah() const { return A::SomeEnumValue; } + }; +} diff --git a/tests/auto/tools/moc/tst_moc.cpp b/tests/auto/tools/moc/tst_moc.cpp index 46f3e5a42a..e0e6129075 100644 --- a/tests/auto/tools/moc/tst_moc.cpp +++ b/tests/auto/tools/moc/tst_moc.cpp @@ -77,6 +77,7 @@ #include "parse-defines.h" #include "related-metaobjects-in-namespaces.h" +#include "related-metaobjects-in-gadget.h" QT_USE_NAMESPACE @@ -571,6 +572,7 @@ private slots: void QTBUG32933_relatedObjectsDontIncludeItself(); void writeEnumFromUnrelatedClass(); void relatedMetaObjectsWithinNamespaces(); + void relatedMetaObjectsInGadget(); signals: void sigWithUnsignedArg(unsigned foo); @@ -3162,6 +3164,15 @@ void tst_Moc::relatedMetaObjectsWithinNamespaces() QVERIFY(testMo->d.relatedMetaObjects[0] == relatedMo); } +void tst_Moc::relatedMetaObjectsInGadget() +{ + const QMetaObject *relatedMo = &QTBUG_35657::A::staticMetaObject; + + const QMetaObject *testMo = &QTBUG_35657::B::staticMetaObject; + QVERIFY(testMo->d.relatedMetaObjects); + QVERIFY(testMo->d.relatedMetaObjects[0] == relatedMo); +} + QTEST_MAIN(tst_Moc) // the generated code must compile with QT_NO_KEYWORDS -- cgit v1.2.3 From bdd3ead8270dfde12b0b4eb57125a22e51ee88ce Mon Sep 17 00:00:00 2001 From: Liang Qi Date: Fri, 3 Jan 2014 14:11:27 +0100 Subject: OSX: support fake fullscreen and etc * Fix QCocoaWindow::setGeometry() to respect WindowFrameInclusive * Support fake fullscreen on 10.6 or WindowFullscreenButtonHint was not set on 10.7 and later * Fix tst_qwindow on 10.6 and later Task-number: QTBUG-23059 Task-number: QTBUG-34629 Change-Id: I6e032ca55b45674388b00506a424d3bd7ece429f Reviewed-by: Gabriel de Dietrich --- tests/auto/gui/kernel/qwindow/tst_qwindow.cpp | 36 ++++++++++++++++++++------- 1 file changed, 27 insertions(+), 9 deletions(-) (limited to 'tests') diff --git a/tests/auto/gui/kernel/qwindow/tst_qwindow.cpp b/tests/auto/gui/kernel/qwindow/tst_qwindow.cpp index 259c840ae7..76b3a4f6cc 100644 --- a/tests/auto/gui/kernel/qwindow/tst_qwindow.cpp +++ b/tests/auto/gui/kernel/qwindow/tst_qwindow.cpp @@ -61,6 +61,7 @@ private slots: void eventOrderOnShow(); void resizeEventAfterResize(); void mapGlobal(); + void positioning_data(); void positioning(); void isExposed(); void isActive(); @@ -93,7 +94,6 @@ private: QTouchDevice *touchDevice; }; - void tst_QWindow::mapGlobal() { QWindow a; @@ -116,10 +116,10 @@ void tst_QWindow::mapGlobal() class Window : public QWindow { public: - Window() + Window(const Qt::WindowFlags flags = Qt::Window | Qt::WindowTitleHint | Qt::WindowMinMaxButtonsHint | Qt::WindowCloseButtonHint) { reset(); - setFlags(Qt::Window | Qt::WindowTitleHint | Qt::WindowMinMaxButtonsHint | Qt::WindowCloseButtonHint); + setFlags(flags); } void reset() @@ -188,6 +188,23 @@ void tst_QWindow::resizeEventAfterResize() QTRY_COMPARE(window.received(QEvent::Resize), 2); } +void tst_QWindow::positioning_data() +{ + QTest::addColumn("windowflags"); + QTest::addColumn("resizecount"); + + QTest::newRow("default") << int(Qt::Window | Qt::WindowTitleHint | Qt::WindowMinMaxButtonsHint | Qt::WindowCloseButtonHint | Qt::WindowFullscreenButtonHint) +#if defined(Q_OS_OSX) && MAC_OS_X_VERSION_MAX_ALLOWED < MAC_OS_X_VERSION_10_7 + << 4; +#else + << 3; +#endif + +#ifdef Q_OS_OSX + QTest::newRow("fake") << int(Qt::Window | Qt::WindowTitleHint | Qt::WindowMinMaxButtonsHint | Qt::WindowCloseButtonHint) << 4; +#endif +} + void tst_QWindow::positioning() { if (!QGuiApplicationPrivate::platformIntegration()->hasCapability( @@ -200,7 +217,9 @@ void tst_QWindow::positioning() const QSize size = QSize(300, 40); const QRect geometry(QPoint(80, 80), size); - Window window; + QFETCH(int, windowflags); + QFETCH(int, resizecount); + Window window((Qt::WindowFlags)windowflags); window.setGeometry(QRect(QPoint(20, 20), size)); window.setFramePosition(QPoint(40, 40)); // Move window around before show, size must not change. QCOMPARE(window.geometry().size(), size); @@ -223,14 +242,13 @@ void tst_QWindow::positioning() window.setWindowState(Qt::WindowFullScreen); QCoreApplication::processEvents(); -#ifdef Q_OS_OSX - QEXPECT_FAIL("", "Multiple failures in this test on Mac OS X, see QTBUG-23059", Abort); -#endif QTRY_COMPARE(window.received(QEvent::Resize), 2); + QTest::qWait(2000); + window.setWindowState(Qt::WindowNoState); QCoreApplication::processEvents(); - QTRY_COMPARE(window.received(QEvent::Resize), 3); + QTRY_COMPARE(window.received(QEvent::Resize), resizecount); QTRY_COMPARE(originalPos, window.position()); QTRY_COMPARE(originalFramePos, window.framePosition()); @@ -239,7 +257,7 @@ void tst_QWindow::positioning() // if our positioning is actually fully respected by the window manager // test whether it correctly handles frame positioning as well if (originalPos == geometry.topLeft() && (originalMargins.top() != 0 || originalMargins.left() != 0)) { - QPoint framePos = QGuiApplication::primaryScreen()->availableVirtualGeometry().topLeft() + QPoint(40, 40); + QPoint framePos = QPlatformScreen::platformScreenForWindow(&window)->availableGeometry().topLeft() + QPoint(40, 40); window.reset(); window.setFramePosition(framePos); -- cgit v1.2.3 From 4d5906989a43621065cd489013fe6a0c205761fd Mon Sep 17 00:00:00 2001 From: Frederik Gladhorn Date: Thu, 2 Jan 2014 14:58:22 +0100 Subject: Update tests to normalizes the paths by using script. The newly added generate_expected_output.py was used to get the expected output into a more reproducible state. Change-Id: I1ca75c8e0c5778d25c1df531bd298007aac0ff4a Reviewed-by: Friedemann Kleint --- .../testlib/selftests/expected_badxml.lightxml | 8 +-- tests/auto/testlib/selftests/expected_badxml.txt | 8 +-- tests/auto/testlib/selftests/expected_badxml.xml | 8 +-- .../selftests/expected_benchlibcounting.lightxml | 4 +- .../selftests/expected_benchlibcounting.txt | 4 +- .../selftests/expected_benchlibcounting.xml | 4 +- .../expected_benchlibtickcounter.lightxml | 5 +- .../selftests/expected_benchlibtickcounter.txt | 4 +- .../selftests/expected_benchlibtickcounter.xml | 2 +- .../selftests/expected_benchlibwalltime.lightxml | 17 +++--- .../selftests/expected_benchlibwalltime.txt | 12 ++-- .../selftests/expected_benchlibwalltime.xml | 6 +- .../testlib/selftests/expected_cmptest.lightxml | 40 ++++++------- tests/auto/testlib/selftests/expected_cmptest.txt | 40 ++++++------- tests/auto/testlib/selftests/expected_cmptest.xml | 40 ++++++------- .../selftests/expected_commandlinedata.lightxml | 12 ++-- .../testlib/selftests/expected_commandlinedata.txt | 12 ++-- .../testlib/selftests/expected_commandlinedata.xml | 12 ++-- .../testlib/selftests/expected_counting.lightxml | 32 +++++----- tests/auto/testlib/selftests/expected_counting.txt | 32 +++++----- tests/auto/testlib/selftests/expected_counting.xml | 32 +++++----- .../testlib/selftests/expected_datatable.lightxml | 26 ++++----- .../auto/testlib/selftests/expected_datatable.txt | 26 ++++----- .../auto/testlib/selftests/expected_datatable.xml | 26 ++++----- .../testlib/selftests/expected_datetime.lightxml | 6 +- tests/auto/testlib/selftests/expected_datetime.txt | 6 +- tests/auto/testlib/selftests/expected_datetime.xml | 6 +- .../selftests/expected_exceptionthrow.lightxml | 2 +- .../testlib/selftests/expected_exceptionthrow.txt | 2 +- .../testlib/selftests/expected_exceptionthrow.xml | 2 +- .../testlib/selftests/expected_expectfail.lightxml | 28 ++++----- .../auto/testlib/selftests/expected_expectfail.txt | 28 ++++----- .../auto/testlib/selftests/expected_expectfail.xml | 28 ++++----- .../selftests/expected_failcleanup.lightxml | 2 +- .../testlib/selftests/expected_failcleanup.txt | 2 +- .../testlib/selftests/expected_failcleanup.xml | 2 +- .../testlib/selftests/expected_failinit.lightxml | 2 +- tests/auto/testlib/selftests/expected_failinit.txt | 2 +- tests/auto/testlib/selftests/expected_failinit.xml | 2 +- .../selftests/expected_failinitdata.lightxml | 2 +- .../testlib/selftests/expected_failinitdata.txt | 2 +- .../testlib/selftests/expected_failinitdata.xml | 2 +- .../selftests/expected_findtestdata.lightxml | 2 +- .../testlib/selftests/expected_findtestdata.txt | 2 +- .../testlib/selftests/expected_findtestdata.xml | 2 +- tests/auto/testlib/selftests/expected_float.txt | 12 ++-- .../testlib/selftests/expected_globaldata.lightxml | 8 +-- .../auto/testlib/selftests/expected_globaldata.txt | 8 +-- .../auto/testlib/selftests/expected_globaldata.xml | 8 +-- .../testlib/selftests/expected_longstring.lightxml | 2 +- .../auto/testlib/selftests/expected_longstring.txt | 2 +- .../auto/testlib/selftests/expected_longstring.xml | 2 +- tests/auto/testlib/selftests/expected_silent.txt | 4 +- .../testlib/selftests/expected_singleskip.lightxml | 2 +- .../auto/testlib/selftests/expected_singleskip.txt | 2 +- .../auto/testlib/selftests/expected_singleskip.xml | 2 +- .../auto/testlib/selftests/expected_skip.lightxml | 6 +- tests/auto/testlib/selftests/expected_skip.txt | 6 +- tests/auto/testlib/selftests/expected_skip.xml | 6 +- .../selftests/expected_skipcleanup.lightxml | 2 +- .../testlib/selftests/expected_skipcleanup.txt | 2 +- .../testlib/selftests/expected_skipcleanup.xml | 2 +- .../testlib/selftests/expected_skipinit.lightxml | 2 +- tests/auto/testlib/selftests/expected_skipinit.txt | 2 +- tests/auto/testlib/selftests/expected_skipinit.xml | 2 +- .../selftests/expected_skipinitdata.lightxml | 2 +- .../testlib/selftests/expected_skipinitdata.txt | 2 +- .../testlib/selftests/expected_skipinitdata.xml | 2 +- .../testlib/selftests/expected_strcmp.lightxml | 16 ++--- tests/auto/testlib/selftests/expected_strcmp.txt | 16 ++--- tests/auto/testlib/selftests/expected_strcmp.xml | 16 ++--- .../testlib/selftests/expected_subtest.lightxml | 4 +- tests/auto/testlib/selftests/expected_subtest.txt | 4 +- tests/auto/testlib/selftests/expected_subtest.xml | 4 +- .../testlib/selftests/expected_verbose1.lightxml | 32 +++++----- tests/auto/testlib/selftests/expected_verbose1.txt | 32 +++++----- tests/auto/testlib/selftests/expected_verbose1.xml | 32 +++++----- .../testlib/selftests/expected_verbose2.lightxml | 68 +++++++++++----------- tests/auto/testlib/selftests/expected_verbose2.txt | 68 +++++++++++----------- tests/auto/testlib/selftests/expected_verbose2.xml | 68 +++++++++++----------- .../expected_verifyexceptionthrown.lightxml | 12 ++-- .../selftests/expected_verifyexceptionthrown.txt | 12 ++-- .../selftests/expected_verifyexceptionthrown.xml | 12 ++-- .../auto/testlib/selftests/expected_xunit.lightxml | 14 ++--- tests/auto/testlib/selftests/expected_xunit.txt | 14 ++--- tests/auto/testlib/selftests/expected_xunit.xml | 14 ++--- 86 files changed, 533 insertions(+), 537 deletions(-) (limited to 'tests') diff --git a/tests/auto/testlib/selftests/expected_badxml.lightxml b/tests/auto/testlib/selftests/expected_badxml.lightxml index 08ba497efa..222c396059 100644 --- a/tests/auto/testlib/selftests/expected_badxml.lightxml +++ b/tests/auto/testlib/selftests/expected_badxml.lightxml @@ -10,7 +10,7 @@ text ]]]> more text]]> - + text ]]]> more text]]> @@ -26,7 +26,7 @@ - + @@ -42,7 +42,7 @@ open < tags < text]]> - + open < tags < text]]> @@ -58,7 +58,7 @@ " mixed ]]]> up > " in < the ]]]> hopes < of triggering "< ]]]> bugs]]> - + " mixed ]]]> up > " in < the ]]]> hopes < of triggering "< ]]]> bugs]]> diff --git a/tests/auto/testlib/selftests/expected_badxml.txt b/tests/auto/testlib/selftests/expected_badxml.txt index 0458401b44..3c65231529 100644 --- a/tests/auto/testlib/selftests/expected_badxml.txt +++ b/tests/auto/testlib/selftests/expected_badxml.txt @@ -3,28 +3,28 @@ Config: Using QtTest library @INSERT_QT_VERSION_HERE@, Qt @INSERT_QT_VERSION_HER PASS : tst_BadXml::initTestCase() QDEBUG : tst_BadXml::badDataTag(fail end cdata ]]> text ]]> more text) a message FAIL! : tst_BadXml::badDataTag(fail end cdata ]]> text ]]> more text) a failure - Loc: [/home/user/dev/qt5/qtbase/tests/auto/testlib/selftests/badxml/tst_badxml.cpp(111)] + Loc: [tst_badxml.cpp(111)] QDEBUG : tst_BadXml::badDataTag(pass end cdata ]]> text ]]> more text) a message PASS : tst_BadXml::badDataTag(pass end cdata ]]> text ]]> more text) RESULT : tst_BadXml::badDataTag():"pass end cdata ]]> text ]]> more text": 0 events per iteration (total: 0, iterations: 1) QDEBUG : tst_BadXml::badDataTag(fail quotes " text" more text) a message FAIL! : tst_BadXml::badDataTag(fail quotes " text" more text) a failure - Loc: [/home/user/dev/qt5/qtbase/tests/auto/testlib/selftests/badxml/tst_badxml.cpp(111)] + Loc: [tst_badxml.cpp(111)] QDEBUG : tst_BadXml::badDataTag(pass quotes " text" more text) a message PASS : tst_BadXml::badDataTag(pass quotes " text" more text) RESULT : tst_BadXml::badDataTag():"pass quotes " text" more text": 0 events per iteration (total: 0, iterations: 1) QDEBUG : tst_BadXml::badDataTag(fail xml close > open < tags < text) a message FAIL! : tst_BadXml::badDataTag(fail xml close > open < tags < text) a failure - Loc: [/home/user/dev/qt5/qtbase/tests/auto/testlib/selftests/badxml/tst_badxml.cpp(111)] + Loc: [tst_badxml.cpp(111)] QDEBUG : tst_BadXml::badDataTag(pass xml close > open < tags < text) a message PASS : tst_BadXml::badDataTag(pass xml close > open < tags < text) RESULT : tst_BadXml::badDataTag():"pass xml close > open < tags < text": 0 events per iteration (total: 0, iterations: 1) QDEBUG : tst_BadXml::badDataTag(fail all > " mixed ]]> up > " in < the ]]> hopes < of triggering "< ]]> bugs) a message FAIL! : tst_BadXml::badDataTag(fail all > " mixed ]]> up > " in < the ]]> hopes < of triggering "< ]]> bugs) a failure - Loc: [/home/user/dev/qt5/qtbase/tests/auto/testlib/selftests/badxml/tst_badxml.cpp(111)] + Loc: [tst_badxml.cpp(111)] QDEBUG : tst_BadXml::badDataTag(pass all > " mixed ]]> up > " in < the ]]> hopes < of triggering "< ]]> bugs) a message PASS : tst_BadXml::badDataTag(pass all > " mixed ]]> up > " in < the ]]> hopes < of triggering "< ]]> bugs) RESULT : tst_BadXml::badDataTag():"pass all > " mixed ]]> up > " in < the ]]> hopes < of triggering "< ]]> bugs": diff --git a/tests/auto/testlib/selftests/expected_badxml.xml b/tests/auto/testlib/selftests/expected_badxml.xml index 97e917602e..4b180dbd01 100644 --- a/tests/auto/testlib/selftests/expected_badxml.xml +++ b/tests/auto/testlib/selftests/expected_badxml.xml @@ -12,7 +12,7 @@ text ]]]> more text]]> - + text ]]]> more text]]> @@ -28,7 +28,7 @@ - + @@ -44,7 +44,7 @@ open < tags < text]]> - + open < tags < text]]> @@ -60,7 +60,7 @@ " mixed ]]]> up > " in < the ]]]> hopes < of triggering "< ]]]> bugs]]> - + " mixed ]]]> up > " in < the ]]]> hopes < of triggering "< ]]]> bugs]]> diff --git a/tests/auto/testlib/selftests/expected_benchlibcounting.lightxml b/tests/auto/testlib/selftests/expected_benchlibcounting.lightxml index 5c436a53e0..f9e5924eef 100644 --- a/tests/auto/testlib/selftests/expected_benchlibcounting.lightxml +++ b/tests/auto/testlib/selftests/expected_benchlibcounting.lightxml @@ -10,12 +10,12 @@ - + - + diff --git a/tests/auto/testlib/selftests/expected_benchlibcounting.txt b/tests/auto/testlib/selftests/expected_benchlibcounting.txt index 23dd19d2cd..8be8206afc 100644 --- a/tests/auto/testlib/selftests/expected_benchlibcounting.txt +++ b/tests/auto/testlib/selftests/expected_benchlibcounting.txt @@ -5,9 +5,9 @@ PASS : tst_BenchlibCounting::passingBenchmark() RESULT : tst_BenchlibCounting::passingBenchmark(): 0 events per iteration (total: 0, iterations: 1) SKIP : tst_BenchlibCounting::skippingBenchmark() This is a skipping benchmark - Loc: [/home/user/dev/qt5/qtbase/tests/auto/testlib/selftests/benchlibcounting/tst_benchlibcounting.cpp(64)] + Loc: [tst_benchlibcounting.cpp(64)] FAIL! : tst_BenchlibCounting::failingBenchmark() This is a failing benchmark - Loc: [/home/user/dev/qt5/qtbase/tests/auto/testlib/selftests/benchlibcounting/tst_benchlibcounting.cpp(71)] + Loc: [tst_benchlibcounting.cpp(71)] PASS : tst_BenchlibCounting::cleanupTestCase() Totals: 3 passed, 1 failed, 1 skipped ********* Finished testing of tst_BenchlibCounting ********* diff --git a/tests/auto/testlib/selftests/expected_benchlibcounting.xml b/tests/auto/testlib/selftests/expected_benchlibcounting.xml index 1e0f4531e2..f3e674e7a3 100644 --- a/tests/auto/testlib/selftests/expected_benchlibcounting.xml +++ b/tests/auto/testlib/selftests/expected_benchlibcounting.xml @@ -12,12 +12,12 @@ - + - + diff --git a/tests/auto/testlib/selftests/expected_benchlibtickcounter.lightxml b/tests/auto/testlib/selftests/expected_benchlibtickcounter.lightxml index 845fd9c161..665ba58689 100644 --- a/tests/auto/testlib/selftests/expected_benchlibtickcounter.lightxml +++ b/tests/auto/testlib/selftests/expected_benchlibtickcounter.lightxml @@ -6,9 +6,8 @@ - - - + + diff --git a/tests/auto/testlib/selftests/expected_benchlibtickcounter.txt b/tests/auto/testlib/selftests/expected_benchlibtickcounter.txt index 9519e1d340..ee2f0f28c4 100644 --- a/tests/auto/testlib/selftests/expected_benchlibtickcounter.txt +++ b/tests/auto/testlib/selftests/expected_benchlibtickcounter.txt @@ -1,9 +1,9 @@ ********* Start testing of tst_BenchlibTickCounter ********* Config: Using QtTest library @INSERT_QT_VERSION_HERE@, Qt @INSERT_QT_VERSION_HERE@ PASS : tst_BenchlibTickCounter::initTestCase() -RESULT : tst_BenchlibTickCounter::threeBillionTicks(): - 3,000,000,000 ticks per iteration (total: 3000000000, iterations: 1) PASS : tst_BenchlibTickCounter::threeBillionTicks() +RESULT : tst_BenchlibTickCounter::threeBillionTicks(): + 3,000,005,772 CPU ticks per iteration (total: 3,000,005,772, iterations: 1) PASS : tst_BenchlibTickCounter::cleanupTestCase() Totals: 3 passed, 0 failed, 0 skipped ********* Finished testing of tst_BenchlibTickCounter ********* diff --git a/tests/auto/testlib/selftests/expected_benchlibtickcounter.xml b/tests/auto/testlib/selftests/expected_benchlibtickcounter.xml index 8c9d823485..695b8f2134 100644 --- a/tests/auto/testlib/selftests/expected_benchlibtickcounter.xml +++ b/tests/auto/testlib/selftests/expected_benchlibtickcounter.xml @@ -8,8 +8,8 @@ - + diff --git a/tests/auto/testlib/selftests/expected_benchlibwalltime.lightxml b/tests/auto/testlib/selftests/expected_benchlibwalltime.lightxml index f1d89328ef..f9311e943e 100644 --- a/tests/auto/testlib/selftests/expected_benchlibwalltime.lightxml +++ b/tests/auto/testlib/selftests/expected_benchlibwalltime.lightxml @@ -3,22 +3,19 @@ @INSERT_QT_VERSION_HERE@ - + - - - + + - - - + + - - - + + diff --git a/tests/auto/testlib/selftests/expected_benchlibwalltime.txt b/tests/auto/testlib/selftests/expected_benchlibwalltime.txt index b0e78ae78d..f1e353703b 100644 --- a/tests/auto/testlib/selftests/expected_benchlibwalltime.txt +++ b/tests/auto/testlib/selftests/expected_benchlibwalltime.txt @@ -1,15 +1,15 @@ ********* Start testing of tst_BenchlibWalltime ********* Config: Using QtTest library @INSERT_QT_VERSION_HERE@, Qt @INSERT_QT_VERSION_HERE@ PASS : tst_BenchlibWalltime::initTestCase() -RESULT : tst_BenchlibWalltime::waitForOneThousand(): - 1,000 msec per iteration (total: 1000, iterations: 1) PASS : tst_BenchlibWalltime::waitForOneThousand() -RESULT : tst_BenchlibWalltime::waitForFourThousand(): - 4,000 msec per iteration (total: 4000, iterations: 1) +RESULT : tst_BenchlibWalltime::waitForOneThousand(): + 1,006 msecs per iteration (total: 1,006, iterations: 1) PASS : tst_BenchlibWalltime::waitForFourThousand() -RESULT : tst_BenchlibWalltime::qbenchmark_once(): - 0 msec per iteration (total: 0, iterations: 1) +RESULT : tst_BenchlibWalltime::waitForFourThousand(): + 4,008 msecs per iteration (total: 4,008, iterations: 1) PASS : tst_BenchlibWalltime::qbenchmark_once() +RESULT : tst_BenchlibWalltime::qbenchmark_once(): + 0 msecs per iteration (total: 0, iterations: 1) PASS : tst_BenchlibWalltime::cleanupTestCase() Totals: 5 passed, 0 failed, 0 skipped ********* Finished testing of tst_BenchlibWalltime ********* diff --git a/tests/auto/testlib/selftests/expected_benchlibwalltime.xml b/tests/auto/testlib/selftests/expected_benchlibwalltime.xml index 69d025b9cf..41b39eb925 100644 --- a/tests/auto/testlib/selftests/expected_benchlibwalltime.xml +++ b/tests/auto/testlib/selftests/expected_benchlibwalltime.xml @@ -8,16 +8,16 @@ - + - + - + diff --git a/tests/auto/testlib/selftests/expected_cmptest.lightxml b/tests/auto/testlib/selftests/expected_cmptest.lightxml index 99e2e825c0..aebff4de61 100644 --- a/tests/auto/testlib/selftests/expected_cmptest.lightxml +++ b/tests/auto/testlib/selftests/expected_cmptest.lightxml @@ -12,7 +12,7 @@ - + - + - + - + ) @@ -47,31 +47,31 @@ - + - + - + - + - + - + - + @@ -96,13 +96,13 @@ - + - + - + - + @@ -126,13 +126,13 @@ - + - + - + - + - + diff --git a/tests/auto/testlib/selftests/expected_cmptest.txt b/tests/auto/testlib/selftests/expected_cmptest.txt index 504507f032..b3d34d49de 100644 --- a/tests/auto/testlib/selftests/expected_cmptest.txt +++ b/tests/auto/testlib/selftests/expected_cmptest.txt @@ -6,86 +6,86 @@ PASS : tst_Cmptest::compare_pointerfuncs() FAIL! : tst_Cmptest::compare_tostring(int, string) Compared values are not the same Actual (actual) : QVariant(int,123) Expected (expected): QVariant(QString,hi) - Loc: [/home/user/dev/qt5/qtbase/tests/auto/testlib/selftests/cmptest/tst_cmptest.cpp(214)] + Loc: [tst_cmptest.cpp(219)] PASS : tst_Cmptest::compare_tostring(both invalid) FAIL! : tst_Cmptest::compare_tostring(null hash, invalid) Compared values are not the same Actual (actual) : QVariant(QVariantHash) Expected (expected): QVariant() - Loc: [/home/user/dev/qt5/qtbase/tests/auto/testlib/selftests/cmptest/tst_cmptest.cpp(214)] + Loc: [tst_cmptest.cpp(219)] FAIL! : tst_Cmptest::compare_tostring(string, null user type) Compared values are not the same Actual (actual) : QVariant(QString,A simple string) Expected (expected): QVariant(PhonyClass) - Loc: [/home/user/dev/qt5/qtbase/tests/auto/testlib/selftests/cmptest/tst_cmptest.cpp(214)] + Loc: [tst_cmptest.cpp(219)] FAIL! : tst_Cmptest::compare_tostring(both non-null user type) Compared values are not the same Actual (actual) : QVariant(PhonyClass,) Expected (expected): QVariant(PhonyClass,) - Loc: [/home/user/dev/qt5/qtbase/tests/auto/testlib/selftests/cmptest/tst_cmptest.cpp(214)] + Loc: [tst_cmptest.cpp(219)] PASS : tst_Cmptest::compareQStringLists(empty lists) PASS : tst_Cmptest::compareQStringLists(equal lists) FAIL! : tst_Cmptest::compareQStringLists(last item different) Compared lists differ at index 2. Actual (opA): 'string3' Expected (opB): 'DIFFERS' - Loc: [/home/user/dev/qt5/qtbase/tests/auto/testlib/selftests/cmptest/tst_cmptest.cpp(308)] + Loc: [tst_cmptest.cpp(313)] FAIL! : tst_Cmptest::compareQStringLists(second-last item different) Compared lists differ at index 2. Actual (opA): 'string3' Expected (opB): 'DIFFERS' - Loc: [/home/user/dev/qt5/qtbase/tests/auto/testlib/selftests/cmptest/tst_cmptest.cpp(308)] + Loc: [tst_cmptest.cpp(313)] FAIL! : tst_Cmptest::compareQStringLists(prefix) Compared lists have different sizes. Actual (opA) size: '2' Expected (opB) size: '1' - Loc: [/home/user/dev/qt5/qtbase/tests/auto/testlib/selftests/cmptest/tst_cmptest.cpp(308)] + Loc: [tst_cmptest.cpp(313)] FAIL! : tst_Cmptest::compareQStringLists(short list second) Compared lists have different sizes. Actual (opA) size: '12' Expected (opB) size: '1' - Loc: [/home/user/dev/qt5/qtbase/tests/auto/testlib/selftests/cmptest/tst_cmptest.cpp(308)] + Loc: [tst_cmptest.cpp(313)] FAIL! : tst_Cmptest::compareQStringLists(short list first) Compared lists have different sizes. Actual (opA) size: '1' Expected (opB) size: '12' - Loc: [/home/user/dev/qt5/qtbase/tests/auto/testlib/selftests/cmptest/tst_cmptest.cpp(308)] + Loc: [tst_cmptest.cpp(313)] FAIL! : tst_Cmptest::compareQListInt() Compared lists differ at index 2. Actual (int1): '3' Expected (int2): '4' - Loc: [/home/user/dev/qt5/qtbase/tests/auto/testlib/selftests/cmptest/tst_cmptest.cpp(316)] + Loc: [tst_cmptest.cpp(320)] FAIL! : tst_Cmptest::compareQListDouble() Compared lists differ at index 0. Actual (double1): '1.5' Expected (double2): '1' - Loc: [/home/user/dev/qt5/qtbase/tests/auto/testlib/selftests/cmptest/tst_cmptest.cpp(323)] + Loc: [tst_cmptest.cpp(327)] PASS : tst_Cmptest::compareQPixmaps(both null) FAIL! : tst_Cmptest::compareQPixmaps(one null) Compared QPixmaps differ. Actual (opA).isNull(): 1 Expected (opB).isNull(): 0 - Loc: [/home/user/dev/qt5/qtbase/tests/auto/testlib/selftests/cmptest/tst_cmptest.cpp(333)] + Loc: [tst_cmptest.cpp(353)] FAIL! : tst_Cmptest::compareQPixmaps(other null) Compared QPixmaps differ. Actual (opA).isNull(): 0 Expected (opB).isNull(): 1 - Loc: [/home/user/dev/qt5/qtbase/tests/auto/testlib/selftests/cmptest/tst_cmptest.cpp(333)] + Loc: [tst_cmptest.cpp(353)] PASS : tst_Cmptest::compareQPixmaps(equal) FAIL! : tst_Cmptest::compareQPixmaps(different size) Compared QPixmaps differ in size. Actual (opA): 11x20 Expected (opB): 20x20 - Loc: [/home/user/dev/qt5/qtbase/tests/auto/testlib/selftests/cmptest/tst_cmptest.cpp(333)] + Loc: [tst_cmptest.cpp(353)] FAIL! : tst_Cmptest::compareQPixmaps(different pixels) Compared values are not the same - Loc: [/home/user/dev/qt5/qtbase/tests/auto/testlib/selftests/cmptest/tst_cmptest.cpp(333)] + Loc: [tst_cmptest.cpp(353)] PASS : tst_Cmptest::compareQImages(both null) FAIL! : tst_Cmptest::compareQImages(one null) Compared QImages differ. Actual (opA).isNull(): 1 Expected (opB).isNull(): 0 - Loc: [/home/user/dev/qt5/qtbase/tests/auto/testlib/selftests/cmptest/tst_cmptest.cpp(360)] + Loc: [tst_cmptest.cpp(380)] FAIL! : tst_Cmptest::compareQImages(other null) Compared QImages differ. Actual (opA).isNull(): 0 Expected (opB).isNull(): 1 - Loc: [/home/user/dev/qt5/qtbase/tests/auto/testlib/selftests/cmptest/tst_cmptest.cpp(360)] + Loc: [tst_cmptest.cpp(380)] PASS : tst_Cmptest::compareQImages(equal) FAIL! : tst_Cmptest::compareQImages(different size) Compared QImages differ in size. Actual (opA): 11x20 Expected (opB): 20x20 - Loc: [/home/user/dev/qt5/qtbase/tests/auto/testlib/selftests/cmptest/tst_cmptest.cpp(360)] + Loc: [tst_cmptest.cpp(380)] FAIL! : tst_Cmptest::compareQImages(different format) Compared QImages differ in format. Actual (opA): 6 Expected (opB): 3 - Loc: [/home/user/dev/qt5/qtbase/tests/auto/testlib/selftests/cmptest/tst_cmptest.cpp(360)] + Loc: [tst_cmptest.cpp(380)] FAIL! : tst_Cmptest::compareQImages(different pixels) Compared values are not the same - Loc: [/home/user/dev/qt5/qtbase/tests/auto/testlib/selftests/cmptest/tst_cmptest.cpp(360)] + Loc: [tst_cmptest.cpp(380)] PASS : tst_Cmptest::cleanupTestCase() Totals: 11 passed, 20 failed, 0 skipped ********* Finished testing of tst_Cmptest ********* diff --git a/tests/auto/testlib/selftests/expected_cmptest.xml b/tests/auto/testlib/selftests/expected_cmptest.xml index df35058acc..8a9f64d877 100644 --- a/tests/auto/testlib/selftests/expected_cmptest.xml +++ b/tests/auto/testlib/selftests/expected_cmptest.xml @@ -14,7 +14,7 @@ - + - + - + - + ) @@ -49,31 +49,31 @@ - + - + - + - + - + - + - + @@ -98,13 +98,13 @@ - + - + - + - + @@ -128,13 +128,13 @@ - + - + - + - + - + diff --git a/tests/auto/testlib/selftests/expected_commandlinedata.lightxml b/tests/auto/testlib/selftests/expected_commandlinedata.lightxml index 37eb5f5a2b..65062970f0 100644 --- a/tests/auto/testlib/selftests/expected_commandlinedata.lightxml +++ b/tests/auto/testlib/selftests/expected_commandlinedata.lightxml @@ -6,35 +6,35 @@ - + - + - + - + - + @@ -43,7 +43,7 @@ - + diff --git a/tests/auto/testlib/selftests/expected_commandlinedata.txt b/tests/auto/testlib/selftests/expected_commandlinedata.txt index 7c16267b74..509f6a2de5 100644 --- a/tests/auto/testlib/selftests/expected_commandlinedata.txt +++ b/tests/auto/testlib/selftests/expected_commandlinedata.txt @@ -4,23 +4,23 @@ INFO : tst_DataTable::initTestCase() entering PASS : tst_DataTable::initTestCase() INFO : tst_DataTable::fiveTablePasses() entering INFO : tst_DataTable::fiveTablePasses(fiveTablePasses_data1) QVERIFY(test) - Loc: [/home/user/dev/qt5/qtbase/tests/auto/testlib/selftests/commandlinedata/tst_commandlinedata.cpp(65)] + Loc: [tst_commandlinedata.cpp(65)] PASS : tst_DataTable::fiveTablePasses(fiveTablePasses_data1) INFO : tst_DataTable::fiveTablePasses(fiveTablePasses_data2) QVERIFY(test) - Loc: [/home/user/dev/qt5/qtbase/tests/auto/testlib/selftests/commandlinedata/tst_commandlinedata.cpp(65)] + Loc: [tst_commandlinedata.cpp(65)] PASS : tst_DataTable::fiveTablePasses(fiveTablePasses_data2) INFO : tst_DataTable::fiveTablePasses(fiveTablePasses_data3) QVERIFY(test) - Loc: [/home/user/dev/qt5/qtbase/tests/auto/testlib/selftests/commandlinedata/tst_commandlinedata.cpp(65)] + Loc: [tst_commandlinedata.cpp(65)] PASS : tst_DataTable::fiveTablePasses(fiveTablePasses_data3) INFO : tst_DataTable::fiveTablePasses(fiveTablePasses_data4) QVERIFY(test) - Loc: [/home/user/dev/qt5/qtbase/tests/auto/testlib/selftests/commandlinedata/tst_commandlinedata.cpp(65)] + Loc: [tst_commandlinedata.cpp(65)] PASS : tst_DataTable::fiveTablePasses(fiveTablePasses_data4) INFO : tst_DataTable::fiveTablePasses(fiveTablePasses_data5) QVERIFY(test) - Loc: [/home/user/dev/qt5/qtbase/tests/auto/testlib/selftests/commandlinedata/tst_commandlinedata.cpp(65)] + Loc: [tst_commandlinedata.cpp(65)] PASS : tst_DataTable::fiveTablePasses(fiveTablePasses_data5) INFO : tst_DataTable::fiveTablePasses() entering INFO : tst_DataTable::fiveTablePasses(fiveTablePasses_data1) QVERIFY(test) - Loc: [/home/user/dev/qt5/qtbase/tests/auto/testlib/selftests/commandlinedata/tst_commandlinedata.cpp(65)] + Loc: [tst_commandlinedata.cpp(65)] PASS : tst_DataTable::fiveTablePasses(fiveTablePasses_data1) INFO : tst_DataTable::cleanupTestCase() entering PASS : tst_DataTable::cleanupTestCase() diff --git a/tests/auto/testlib/selftests/expected_commandlinedata.xml b/tests/auto/testlib/selftests/expected_commandlinedata.xml index 76e297801c..70ad6bbe0d 100644 --- a/tests/auto/testlib/selftests/expected_commandlinedata.xml +++ b/tests/auto/testlib/selftests/expected_commandlinedata.xml @@ -8,35 +8,35 @@ - + - + - + - + - + @@ -45,7 +45,7 @@ - + diff --git a/tests/auto/testlib/selftests/expected_counting.lightxml b/tests/auto/testlib/selftests/expected_counting.lightxml index 799a7d7b17..5b0e947340 100644 --- a/tests/auto/testlib/selftests/expected_counting.lightxml +++ b/tests/auto/testlib/selftests/expected_counting.lightxml @@ -17,7 +17,7 @@ - + @@ -26,13 +26,13 @@ - + - + @@ -41,27 +41,27 @@ - + - + - + - + - + @@ -70,21 +70,21 @@ - + - + - + - + @@ -93,7 +93,7 @@ - + @@ -109,7 +109,7 @@ - + @@ -121,7 +121,7 @@ - + @@ -137,7 +137,7 @@ - + diff --git a/tests/auto/testlib/selftests/expected_counting.txt b/tests/auto/testlib/selftests/expected_counting.txt index 51b9402d3a..cdabf6770e 100644 --- a/tests/auto/testlib/selftests/expected_counting.txt +++ b/tests/auto/testlib/selftests/expected_counting.txt @@ -5,49 +5,49 @@ PASS : tst_Counting::testPassPass(row 1) PASS : tst_Counting::testPassPass(row 2) PASS : tst_Counting::testPassSkip(row 1) SKIP : tst_Counting::testPassSkip(row 2) Skipping - Loc: [/home/user/dev/qt5/qtbase/tests/auto/testlib/selftests/counting/tst_counting.cpp(118)] + Loc: [tst_counting.cpp(118)] PASS : tst_Counting::testPassFail(row 1) FAIL! : tst_Counting::testPassFail(row 2) 'false' returned FALSE. () - Loc: [/home/user/dev/qt5/qtbase/tests/auto/testlib/selftests/counting/tst_counting.cpp(115)] + Loc: [tst_counting.cpp(115)] SKIP : tst_Counting::testSkipPass(row 1) Skipping - Loc: [/home/user/dev/qt5/qtbase/tests/auto/testlib/selftests/counting/tst_counting.cpp(118)] + Loc: [tst_counting.cpp(118)] PASS : tst_Counting::testSkipPass(row 2) SKIP : tst_Counting::testSkipSkip(row 1) Skipping - Loc: [/home/user/dev/qt5/qtbase/tests/auto/testlib/selftests/counting/tst_counting.cpp(118)] + Loc: [tst_counting.cpp(118)] SKIP : tst_Counting::testSkipSkip(row 2) Skipping - Loc: [/home/user/dev/qt5/qtbase/tests/auto/testlib/selftests/counting/tst_counting.cpp(118)] + Loc: [tst_counting.cpp(118)] SKIP : tst_Counting::testSkipFail(row 1) Skipping - Loc: [/home/user/dev/qt5/qtbase/tests/auto/testlib/selftests/counting/tst_counting.cpp(118)] + Loc: [tst_counting.cpp(118)] FAIL! : tst_Counting::testSkipFail(row 2) 'false' returned FALSE. () - Loc: [/home/user/dev/qt5/qtbase/tests/auto/testlib/selftests/counting/tst_counting.cpp(115)] + Loc: [tst_counting.cpp(115)] FAIL! : tst_Counting::testFailPass(row 1) 'false' returned FALSE. () - Loc: [/home/user/dev/qt5/qtbase/tests/auto/testlib/selftests/counting/tst_counting.cpp(115)] + Loc: [tst_counting.cpp(115)] PASS : tst_Counting::testFailPass(row 2) FAIL! : tst_Counting::testFailSkip(row 1) 'false' returned FALSE. () - Loc: [/home/user/dev/qt5/qtbase/tests/auto/testlib/selftests/counting/tst_counting.cpp(115)] + Loc: [tst_counting.cpp(115)] SKIP : tst_Counting::testFailSkip(row 2) Skipping - Loc: [/home/user/dev/qt5/qtbase/tests/auto/testlib/selftests/counting/tst_counting.cpp(118)] + Loc: [tst_counting.cpp(118)] FAIL! : tst_Counting::testFailFail(row 1) 'false' returned FALSE. () - Loc: [/home/user/dev/qt5/qtbase/tests/auto/testlib/selftests/counting/tst_counting.cpp(115)] + Loc: [tst_counting.cpp(115)] FAIL! : tst_Counting::testFailFail(row 2) 'false' returned FALSE. () - Loc: [/home/user/dev/qt5/qtbase/tests/auto/testlib/selftests/counting/tst_counting.cpp(115)] + Loc: [tst_counting.cpp(115)] PASS : tst_Counting::testFailInInit(before) FAIL! : tst_Counting::testFailInInit(fail) Fail in init() - Loc: [/home/user/dev/qt5/qtbase/tests/auto/testlib/selftests/counting/tst_counting.cpp(234)] + Loc: [tst_counting.cpp(234)] PASS : tst_Counting::testFailInInit(after) PASS : tst_Counting::testFailInCleanup(before) QDEBUG : tst_Counting::testFailInCleanup(fail) This test function should execute and then QFAIL in cleanup() FAIL! : tst_Counting::testFailInCleanup(fail) Fail in cleanup() - Loc: [/home/user/dev/qt5/qtbase/tests/auto/testlib/selftests/counting/tst_counting.cpp(242)] + Loc: [tst_counting.cpp(242)] PASS : tst_Counting::testFailInCleanup(after) PASS : tst_Counting::testSkipInInit(before) SKIP : tst_Counting::testSkipInInit(skip) Skip in init() - Loc: [/home/user/dev/qt5/qtbase/tests/auto/testlib/selftests/counting/tst_counting.cpp(236)] + Loc: [tst_counting.cpp(236)] PASS : tst_Counting::testSkipInInit(after) PASS : tst_Counting::testSkipInCleanup(before) QDEBUG : tst_Counting::testSkipInCleanup(skip) This test function should execute and then QSKIP in cleanup() SKIP : tst_Counting::testSkipInCleanup(skip) Skip in cleanup() - Loc: [/home/user/dev/qt5/qtbase/tests/auto/testlib/selftests/counting/tst_counting.cpp(244)] + Loc: [tst_counting.cpp(244)] PASS : tst_Counting::testSkipInCleanup(after) PASS : tst_Counting::cleanupTestCase() Totals: 16 passed, 8 failed, 8 skipped diff --git a/tests/auto/testlib/selftests/expected_counting.xml b/tests/auto/testlib/selftests/expected_counting.xml index 8177a2dc7f..661a617aa0 100644 --- a/tests/auto/testlib/selftests/expected_counting.xml +++ b/tests/auto/testlib/selftests/expected_counting.xml @@ -19,7 +19,7 @@ - + @@ -28,13 +28,13 @@ - + - + @@ -43,27 +43,27 @@ - + - + - + - + - + @@ -72,21 +72,21 @@ - + - + - + - + @@ -95,7 +95,7 @@ - + @@ -111,7 +111,7 @@ - + @@ -123,7 +123,7 @@ - + @@ -139,7 +139,7 @@ - + diff --git a/tests/auto/testlib/selftests/expected_datatable.lightxml b/tests/auto/testlib/selftests/expected_datatable.lightxml index 83ac0c0b5d..b1442cfc10 100644 --- a/tests/auto/testlib/selftests/expected_datatable.lightxml +++ b/tests/auto/testlib/selftests/expected_datatable.lightxml @@ -29,29 +29,29 @@ - + - + - + - + - + - + @@ -81,7 +81,7 @@ - + @@ -93,7 +93,7 @@ - + @@ -105,23 +105,23 @@ - + - + - + - + - + diff --git a/tests/auto/testlib/selftests/expected_datatable.txt b/tests/auto/testlib/selftests/expected_datatable.txt index 24b39becd2..63118b5d33 100644 --- a/tests/auto/testlib/selftests/expected_datatable.txt +++ b/tests/auto/testlib/selftests/expected_datatable.txt @@ -9,17 +9,17 @@ PASS : tst_DataTable::fiveTablePasses(fiveTablePasses_data 3) PASS : tst_DataTable::fiveTablePasses(fiveTablePasses_data 4) PASS : tst_DataTable::fiveTablePasses(fiveTablePasses_data 5) FAIL! : tst_DataTable::fiveTableFailures(fiveTableFailures_data 1) 'test' returned FALSE. () - Loc: [/home/user/dev/qt5/qtbase/tests/auto/testlib/selftests/datatable/tst_datatable.cpp(91)] + Loc: [tst_datatable.cpp(91)] FAIL! : tst_DataTable::fiveTableFailures(fiveTableFailures_data 2) 'test' returned FALSE. () - Loc: [/home/user/dev/qt5/qtbase/tests/auto/testlib/selftests/datatable/tst_datatable.cpp(91)] + Loc: [tst_datatable.cpp(91)] FAIL! : tst_DataTable::fiveTableFailures(fiveTableFailures_data 3) 'test' returned FALSE. () - Loc: [/home/user/dev/qt5/qtbase/tests/auto/testlib/selftests/datatable/tst_datatable.cpp(91)] + Loc: [tst_datatable.cpp(91)] FAIL! : tst_DataTable::fiveTableFailures(fiveTableFailures_data 4) 'test' returned FALSE. () - Loc: [/home/user/dev/qt5/qtbase/tests/auto/testlib/selftests/datatable/tst_datatable.cpp(91)] + Loc: [tst_datatable.cpp(91)] FAIL! : tst_DataTable::fiveTableFailures(fiveTableFailures_data 5) 'test' returned FALSE. () - Loc: [/home/user/dev/qt5/qtbase/tests/auto/testlib/selftests/datatable/tst_datatable.cpp(91)] + Loc: [tst_datatable.cpp(91)] FAIL! : tst_DataTable::startsWithFailure(startsWithFailure_data 1) 'test' returned FALSE. () - Loc: [/home/user/dev/qt5/qtbase/tests/auto/testlib/selftests/datatable/tst_datatable.cpp(91)] + Loc: [tst_datatable.cpp(91)] PASS : tst_DataTable::startsWithFailure(startsWithFailure_data 2) PASS : tst_DataTable::startsWithFailure(startsWithFailure_data 3) PASS : tst_DataTable::startsWithFailure(startsWithFailure_data 4) @@ -29,23 +29,23 @@ PASS : tst_DataTable::endsWithFailure(endsWithFailure 2) PASS : tst_DataTable::endsWithFailure(endsWithFailure 3) PASS : tst_DataTable::endsWithFailure(endsWithFailure 4) FAIL! : tst_DataTable::endsWithFailure(endsWithFailure 5) 'test' returned FALSE. () - Loc: [/home/user/dev/qt5/qtbase/tests/auto/testlib/selftests/datatable/tst_datatable.cpp(91)] + Loc: [tst_datatable.cpp(91)] PASS : tst_DataTable::failureInMiddle(failureInMiddle_data 1) PASS : tst_DataTable::failureInMiddle(failureInMiddle_data 2) FAIL! : tst_DataTable::failureInMiddle(failureInMiddle_data 3) 'test' returned FALSE. () - Loc: [/home/user/dev/qt5/qtbase/tests/auto/testlib/selftests/datatable/tst_datatable.cpp(91)] + Loc: [tst_datatable.cpp(91)] PASS : tst_DataTable::failureInMiddle(failureInMiddle_data 4) PASS : tst_DataTable::failureInMiddle(failureInMiddle_data 5) FAIL! : tst_DataTable::fiveIsolatedFailures(fiveIsolatedFailures_data 1) '!test' returned FALSE. () - Loc: [/home/user/dev/qt5/qtbase/tests/auto/testlib/selftests/datatable/tst_datatable.cpp(173)] + Loc: [tst_datatable.cpp(173)] FAIL! : tst_DataTable::fiveIsolatedFailures(fiveIsolatedFailures_data 2) '!test' returned FALSE. () - Loc: [/home/user/dev/qt5/qtbase/tests/auto/testlib/selftests/datatable/tst_datatable.cpp(173)] + Loc: [tst_datatable.cpp(173)] FAIL! : tst_DataTable::fiveIsolatedFailures(fiveIsolatedFailures_data 3) '!test' returned FALSE. () - Loc: [/home/user/dev/qt5/qtbase/tests/auto/testlib/selftests/datatable/tst_datatable.cpp(173)] + Loc: [tst_datatable.cpp(173)] FAIL! : tst_DataTable::fiveIsolatedFailures(fiveIsolatedFailures_data 4) '!test' returned FALSE. () - Loc: [/home/user/dev/qt5/qtbase/tests/auto/testlib/selftests/datatable/tst_datatable.cpp(173)] + Loc: [tst_datatable.cpp(173)] FAIL! : tst_DataTable::fiveIsolatedFailures(fiveIsolatedFailures_data 5) '!test' returned FALSE. () - Loc: [/home/user/dev/qt5/qtbase/tests/auto/testlib/selftests/datatable/tst_datatable.cpp(173)] + Loc: [tst_datatable.cpp(173)] PASS : tst_DataTable::cleanupTestCase() Totals: 21 passed, 13 failed, 0 skipped ********* Finished testing of tst_DataTable ********* diff --git a/tests/auto/testlib/selftests/expected_datatable.xml b/tests/auto/testlib/selftests/expected_datatable.xml index 2579ff24cc..c98e1ee44a 100644 --- a/tests/auto/testlib/selftests/expected_datatable.xml +++ b/tests/auto/testlib/selftests/expected_datatable.xml @@ -31,29 +31,29 @@ - + - + - + - + - + - + @@ -83,7 +83,7 @@ - + @@ -95,7 +95,7 @@ - + @@ -107,23 +107,23 @@ - + - + - + - + - + diff --git a/tests/auto/testlib/selftests/expected_datetime.lightxml b/tests/auto/testlib/selftests/expected_datetime.lightxml index 183744b2e2..0594f4627d 100644 --- a/tests/auto/testlib/selftests/expected_datetime.lightxml +++ b/tests/auto/testlib/selftests/expected_datetime.lightxml @@ -6,7 +6,7 @@ - + @@ -16,13 +16,13 @@ - + - + - + @@ -18,13 +18,13 @@ - + - + - + diff --git a/tests/auto/testlib/selftests/expected_exceptionthrow.txt b/tests/auto/testlib/selftests/expected_exceptionthrow.txt index ecbc7da01a..671e609230 100644 --- a/tests/auto/testlib/selftests/expected_exceptionthrow.txt +++ b/tests/auto/testlib/selftests/expected_exceptionthrow.txt @@ -2,6 +2,6 @@ Config: Using QtTest library @INSERT_QT_VERSION_HERE@, Qt @INSERT_QT_VERSION_HERE@ PASS : tst_Exception::initTestCase() FAIL! : tst_Exception::throwException() Caught unhandled exception - Loc: [/home/user/dev/qt5/qtbase/src/testlib/qtestcase.cpp(1220)] + Loc: [/home/frederik/dev/qt/qt-src-dev/qtbase/src/testlib/qtestcase.cpp(2229)] Totals: 1 passed, 1 failed, 0 skipped ********* Finished testing of tst_Exception ********* diff --git a/tests/auto/testlib/selftests/expected_exceptionthrow.xml b/tests/auto/testlib/selftests/expected_exceptionthrow.xml index ab0f9a917e..015f7f5f4b 100644 --- a/tests/auto/testlib/selftests/expected_exceptionthrow.xml +++ b/tests/auto/testlib/selftests/expected_exceptionthrow.xml @@ -8,7 +8,7 @@ - + diff --git a/tests/auto/testlib/selftests/expected_expectfail.lightxml b/tests/auto/testlib/selftests/expected_expectfail.lightxml index 55bd9578a8..3f262c6228 100644 --- a/tests/auto/testlib/selftests/expected_expectfail.lightxml +++ b/tests/auto/testlib/selftests/expected_expectfail.lightxml @@ -9,7 +9,7 @@ - + @@ -21,21 +21,21 @@ - + - + - + - + @@ -47,14 +47,14 @@ - + - + @@ -69,14 +69,14 @@ - + - + @@ -90,14 +90,14 @@ - + - + @@ -116,12 +116,12 @@ - + - + @@ -130,7 +130,7 @@ - + diff --git a/tests/auto/testlib/selftests/expected_expectfail.txt b/tests/auto/testlib/selftests/expected_expectfail.txt index abd1cdc32c..39f3c17f70 100644 --- a/tests/auto/testlib/selftests/expected_expectfail.txt +++ b/tests/auto/testlib/selftests/expected_expectfail.txt @@ -3,52 +3,52 @@ Config: Using QtTest library @INSERT_QT_VERSION_HERE@, Qt @INSERT_QT_VERSION_HER PASS : tst_ExpectFail::initTestCase() QDEBUG : tst_ExpectFail::xfailAndContinue() begin XFAIL : tst_ExpectFail::xfailAndContinue() This should xfail - Loc: [/home/user/dev/qt5/qtbase/tests/auto/testlib/selftests/expectfail/tst_expectfail.cpp(78)] + Loc: [tst_expectfail.cpp(78)] QDEBUG : tst_ExpectFail::xfailAndContinue() after PASS : tst_ExpectFail::xfailAndContinue() QDEBUG : tst_ExpectFail::xfailAndAbort() begin XFAIL : tst_ExpectFail::xfailAndAbort() This should xfail - Loc: [/home/user/dev/qt5/qtbase/tests/auto/testlib/selftests/expectfail/tst_expectfail.cpp(86)] + Loc: [tst_expectfail.cpp(86)] PASS : tst_ExpectFail::xfailAndAbort() FAIL! : tst_ExpectFail::xfailTwice() Already expecting a fail - Loc: [/home/user/dev/qt5/qtbase/tests/auto/testlib/selftests/expectfail/tst_expectfail.cpp(96)] + Loc: [tst_expectfail.cpp(96)] XFAIL : tst_ExpectFail::xfailWithQString() A string - Loc: [/home/user/dev/qt5/qtbase/tests/auto/testlib/selftests/expectfail/tst_expectfail.cpp(105)] + Loc: [tst_expectfail.cpp(105)] XFAIL : tst_ExpectFail::xfailWithQString() Bug 5 (The message) - Loc: [/home/user/dev/qt5/qtbase/tests/auto/testlib/selftests/expectfail/tst_expectfail.cpp(110)] + Loc: [tst_expectfail.cpp(110)] PASS : tst_ExpectFail::xfailWithQString() PASS : tst_ExpectFail::xfailDataDrivenWithQVerify(Pass 1) PASS : tst_ExpectFail::xfailDataDrivenWithQVerify(Pass 2) XFAIL : tst_ExpectFail::xfailDataDrivenWithQVerify(Abort) This test should xfail - Loc: [/home/user/dev/qt5/qtbase/tests/auto/testlib/selftests/expectfail/tst_expectfail.cpp(139)] + Loc: [tst_expectfail.cpp(139)] PASS : tst_ExpectFail::xfailDataDrivenWithQVerify(Abort) XFAIL : tst_ExpectFail::xfailDataDrivenWithQVerify(Continue) This test should xfail - Loc: [/home/user/dev/qt5/qtbase/tests/auto/testlib/selftests/expectfail/tst_expectfail.cpp(139)] + Loc: [tst_expectfail.cpp(139)] PASS : tst_ExpectFail::xfailDataDrivenWithQVerify(Continue) PASS : tst_ExpectFail::xfailDataDrivenWithQCompare(Pass 1) PASS : tst_ExpectFail::xfailDataDrivenWithQCompare(Pass 2) XFAIL : tst_ExpectFail::xfailDataDrivenWithQCompare(Abort) This test should xfail - Loc: [/home/user/dev/qt5/qtbase/tests/auto/testlib/selftests/expectfail/tst_expectfail.cpp(173)] + Loc: [tst_expectfail.cpp(173)] PASS : tst_ExpectFail::xfailDataDrivenWithQCompare(Abort) XFAIL : tst_ExpectFail::xfailDataDrivenWithQCompare(Continue) This test should xfail - Loc: [/home/user/dev/qt5/qtbase/tests/auto/testlib/selftests/expectfail/tst_expectfail.cpp(173)] + Loc: [tst_expectfail.cpp(173)] PASS : tst_ExpectFail::xfailDataDrivenWithQCompare(Continue) PASS : tst_ExpectFail::xfailOnWrongRow(right row) XFAIL : tst_ExpectFail::xfailOnAnyRow(first row) This test should xfail - Loc: [/home/user/dev/qt5/qtbase/tests/auto/testlib/selftests/expectfail/tst_expectfail.cpp(208)] + Loc: [tst_expectfail.cpp(208)] PASS : tst_ExpectFail::xfailOnAnyRow(first row) XFAIL : tst_ExpectFail::xfailOnAnyRow(second row) This test should xfail - Loc: [/home/user/dev/qt5/qtbase/tests/auto/testlib/selftests/expectfail/tst_expectfail.cpp(208)] + Loc: [tst_expectfail.cpp(208)] PASS : tst_ExpectFail::xfailOnAnyRow(second row) FAIL! : tst_ExpectFail::xfailWithoutVerify(first row) QEXPECT_FAIL was called without any subsequent verification statements FAIL! : tst_ExpectFail::xfailWithoutVerify(second row) QEXPECT_FAIL was called without any subsequent verification statements XPASS : tst_ExpectFail::xpass() 'true' returned TRUE unexpectedly. () - Loc: [/home/user/dev/qt5/qtbase/tests/auto/testlib/selftests/expectfail/tst_expectfail.cpp(228)] + Loc: [tst_expectfail.cpp(228)] XPASS : tst_ExpectFail::xpassDataDrivenWithQVerify(XPass) 'true' returned TRUE unexpectedly. () - Loc: [/home/user/dev/qt5/qtbase/tests/auto/testlib/selftests/expectfail/tst_expectfail.cpp(250)] + Loc: [tst_expectfail.cpp(250)] PASS : tst_ExpectFail::xpassDataDrivenWithQVerify(Pass) XPASS : tst_ExpectFail::xpassDataDrivenWithQCompare(XPass) QCOMPARE(1, 1) returned TRUE unexpectedly. - Loc: [/home/user/dev/qt5/qtbase/tests/auto/testlib/selftests/expectfail/tst_expectfail.cpp(271)] + Loc: [tst_expectfail.cpp(271)] PASS : tst_ExpectFail::xpassDataDrivenWithQCompare(Pass) PASS : tst_ExpectFail::cleanupTestCase() Totals: 18 passed, 6 failed, 0 skipped diff --git a/tests/auto/testlib/selftests/expected_expectfail.xml b/tests/auto/testlib/selftests/expected_expectfail.xml index 58a48197b0..31b61d8db2 100644 --- a/tests/auto/testlib/selftests/expected_expectfail.xml +++ b/tests/auto/testlib/selftests/expected_expectfail.xml @@ -11,7 +11,7 @@ - + @@ -23,21 +23,21 @@ - + - + - + - + @@ -49,14 +49,14 @@ - + - + @@ -71,14 +71,14 @@ - + - + @@ -92,14 +92,14 @@ - + - + @@ -118,12 +118,12 @@ - + - + @@ -132,7 +132,7 @@ - + diff --git a/tests/auto/testlib/selftests/expected_failcleanup.lightxml b/tests/auto/testlib/selftests/expected_failcleanup.lightxml index 83ce7a7b15..4ceff4eba8 100644 --- a/tests/auto/testlib/selftests/expected_failcleanup.lightxml +++ b/tests/auto/testlib/selftests/expected_failcleanup.lightxml @@ -9,7 +9,7 @@ - + diff --git a/tests/auto/testlib/selftests/expected_failcleanup.txt b/tests/auto/testlib/selftests/expected_failcleanup.txt index 1d9405b326..59d0c26794 100644 --- a/tests/auto/testlib/selftests/expected_failcleanup.txt +++ b/tests/auto/testlib/selftests/expected_failcleanup.txt @@ -3,6 +3,6 @@ Config: Using QtTest library @INSERT_QT_VERSION_HERE@, Qt @INSERT_QT_VERSION_HER PASS : tst_FailCleanup::initTestCase() PASS : tst_FailCleanup::aTestFunction() FAIL! : tst_FailCleanup::cleanupTestCase() 'false' returned FALSE. (Fail inside cleanupTestCase) - Loc: [/home/user/dev/qt5/qtbase/tests/auto/testlib/selftests/failcleanup/tst_failcleanup.cpp(59)] + Loc: [tst_failcleanup.cpp(59)] Totals: 2 passed, 1 failed, 0 skipped ********* Finished testing of tst_FailCleanup ********* diff --git a/tests/auto/testlib/selftests/expected_failcleanup.xml b/tests/auto/testlib/selftests/expected_failcleanup.xml index 13633a8a0d..79a66771cd 100644 --- a/tests/auto/testlib/selftests/expected_failcleanup.xml +++ b/tests/auto/testlib/selftests/expected_failcleanup.xml @@ -11,7 +11,7 @@ - + diff --git a/tests/auto/testlib/selftests/expected_failinit.lightxml b/tests/auto/testlib/selftests/expected_failinit.lightxml index f80d8075ca..e10b3a476b 100644 --- a/tests/auto/testlib/selftests/expected_failinit.lightxml +++ b/tests/auto/testlib/selftests/expected_failinit.lightxml @@ -3,7 +3,7 @@ @INSERT_QT_VERSION_HERE@ - + diff --git a/tests/auto/testlib/selftests/expected_failinit.txt b/tests/auto/testlib/selftests/expected_failinit.txt index a6cf55b2e2..2265898d69 100644 --- a/tests/auto/testlib/selftests/expected_failinit.txt +++ b/tests/auto/testlib/selftests/expected_failinit.txt @@ -1,7 +1,7 @@ ********* Start testing of tst_FailInit ********* Config: Using QtTest library @INSERT_QT_VERSION_HERE@, Qt @INSERT_QT_VERSION_HERE@ FAIL! : tst_FailInit::initTestCase() 'false' returned FALSE. () - Loc: [tst_failinit.cpp(22)] + Loc: [tst_failinit.cpp(55)] PASS : tst_FailInit::cleanupTestCase() Totals: 1 passed, 1 failed, 0 skipped ********* Finished testing of tst_FailInit ********* diff --git a/tests/auto/testlib/selftests/expected_failinit.xml b/tests/auto/testlib/selftests/expected_failinit.xml index 4ab455c966..3911253f61 100644 --- a/tests/auto/testlib/selftests/expected_failinit.xml +++ b/tests/auto/testlib/selftests/expected_failinit.xml @@ -5,7 +5,7 @@ @INSERT_QT_VERSION_HERE@ - + diff --git a/tests/auto/testlib/selftests/expected_failinitdata.lightxml b/tests/auto/testlib/selftests/expected_failinitdata.lightxml index 11ba1f0c2e..743bc0d045 100644 --- a/tests/auto/testlib/selftests/expected_failinitdata.lightxml +++ b/tests/auto/testlib/selftests/expected_failinitdata.lightxml @@ -3,7 +3,7 @@ @INSERT_QT_VERSION_HERE@ - + diff --git a/tests/auto/testlib/selftests/expected_failinitdata.txt b/tests/auto/testlib/selftests/expected_failinitdata.txt index 40b36526ba..982db4b2c2 100644 --- a/tests/auto/testlib/selftests/expected_failinitdata.txt +++ b/tests/auto/testlib/selftests/expected_failinitdata.txt @@ -1,6 +1,6 @@ ********* Start testing of tst_FailInitData ********* Config: Using QtTest library @INSERT_QT_VERSION_HERE@, Qt @INSERT_QT_VERSION_HERE@ FAIL! : tst_FailInitData::initTestCase() 'false' returned FALSE. () - Loc: [/home/user/dev/qt5/qtbase/tests/auto/testlib/selftests/failinitdata/tst_failinitdata.cpp(23)] + Loc: [tst_failinitdata.cpp(56)] Totals: 0 passed, 1 failed, 0 skipped ********* Finished testing of tst_FailInitData ********* diff --git a/tests/auto/testlib/selftests/expected_failinitdata.xml b/tests/auto/testlib/selftests/expected_failinitdata.xml index e4da823112..6d5b386a3e 100644 --- a/tests/auto/testlib/selftests/expected_failinitdata.xml +++ b/tests/auto/testlib/selftests/expected_failinitdata.xml @@ -5,7 +5,7 @@ @INSERT_QT_VERSION_HERE@ - + diff --git a/tests/auto/testlib/selftests/expected_findtestdata.lightxml b/tests/auto/testlib/selftests/expected_findtestdata.lightxml index f1944c4897..bf69bcb845 100644 --- a/tests/auto/testlib/selftests/expected_findtestdata.lightxml +++ b/tests/auto/testlib/selftests/expected_findtestdata.lightxml @@ -6,7 +6,7 @@ - + diff --git a/tests/auto/testlib/selftests/expected_findtestdata.txt b/tests/auto/testlib/selftests/expected_findtestdata.txt index 22c2e851d4..d92b167d3e 100644 --- a/tests/auto/testlib/selftests/expected_findtestdata.txt +++ b/tests/auto/testlib/selftests/expected_findtestdata.txt @@ -2,7 +2,7 @@ Config: Using QtTest library @INSERT_QT_VERSION_HERE@, Qt @INSERT_QT_VERSION_HERE@ PASS : FindTestData::initTestCase() WARNING: FindTestData::paths() testdata testfile could not be located! - Loc: [findtestdata.cpp(131)] + Loc: [findtestdata.cpp(154)] PASS : FindTestData::paths() PASS : FindTestData::cleanupTestCase() Totals: 3 passed, 0 failed, 0 skipped diff --git a/tests/auto/testlib/selftests/expected_findtestdata.xml b/tests/auto/testlib/selftests/expected_findtestdata.xml index dd1fc08f68..8770730c76 100644 --- a/tests/auto/testlib/selftests/expected_findtestdata.xml +++ b/tests/auto/testlib/selftests/expected_findtestdata.xml @@ -8,7 +8,7 @@ - + diff --git a/tests/auto/testlib/selftests/expected_float.txt b/tests/auto/testlib/selftests/expected_float.txt index da98f9c19d..6d0588981c 100644 --- a/tests/auto/testlib/selftests/expected_float.txt +++ b/tests/auto/testlib/selftests/expected_float.txt @@ -5,28 +5,28 @@ PASS : tst_float::floatComparisons(should SUCCEED 1) FAIL! : tst_float::floatComparisons(should FAIL 1) Compared floats are not the same (fuzzy compare) Actual (operandLeft) : 1 Expected (operandRight): 3 - Loc: [/home/user/dev/qt5/qtbase/tests/auto/testlib/selftests/float/tst_float.cpp(61)] + Loc: [tst_float.cpp(61)] FAIL! : tst_float::floatComparisons(should FAIL 2) Compared floats are not the same (fuzzy compare) Actual (operandLeft) : 1e-07 Expected (operandRight): 3e-07 - Loc: [/home/user/dev/qt5/qtbase/tests/auto/testlib/selftests/float/tst_float.cpp(61)] + Loc: [tst_float.cpp(61)] FAIL! : tst_float::floatComparisons(should FAIL 3) Compared floats are not the same (fuzzy compare) Actual (operandLeft) : 99998 Expected (operandRight): 99999 - Loc: [/home/user/dev/qt5/qtbase/tests/auto/testlib/selftests/float/tst_float.cpp(61)] + Loc: [tst_float.cpp(61)] PASS : tst_float::floatComparisons(should SUCCEED 2) FAIL! : tst_float::compareFloatTests(1e0) Compared floats are not the same (fuzzy compare) Actual (t1): 1 Expected (t3): 3 - Loc: [/home/user/dev/qt5/qtbase/tests/auto/testlib/selftests/float/tst_float.cpp(104)] + Loc: [tst_float.cpp(109)] FAIL! : tst_float::compareFloatTests(1e-7) Compared floats are not the same (fuzzy compare) Actual (t1): 1e-07 Expected (t3): 3e-07 - Loc: [/home/user/dev/qt5/qtbase/tests/auto/testlib/selftests/float/tst_float.cpp(104)] + Loc: [tst_float.cpp(109)] FAIL! : tst_float::compareFloatTests(1e+7) Compared floats are not the same (fuzzy compare) Actual (t1): 1e+07 Expected (t3): 3e+07 - Loc: [/home/user/dev/qt5/qtbase/tests/auto/testlib/selftests/float/tst_float.cpp(104)] + Loc: [tst_float.cpp(109)] PASS : tst_float::cleanupTestCase() Totals: 4 passed, 6 failed, 0 skipped ********* Finished testing of tst_float ********* diff --git a/tests/auto/testlib/selftests/expected_globaldata.lightxml b/tests/auto/testlib/selftests/expected_globaldata.lightxml index 0fc9d527fb..86418a4935 100644 --- a/tests/auto/testlib/selftests/expected_globaldata.lightxml +++ b/tests/auto/testlib/selftests/expected_globaldata.lightxml @@ -87,7 +87,7 @@ - + @@ -97,7 +97,7 @@ - + @@ -109,7 +109,7 @@ - + @@ -153,7 +153,7 @@ - + diff --git a/tests/auto/testlib/selftests/expected_globaldata.txt b/tests/auto/testlib/selftests/expected_globaldata.txt index 4e3544dbe0..a7c18e765b 100644 --- a/tests/auto/testlib/selftests/expected_globaldata.txt +++ b/tests/auto/testlib/selftests/expected_globaldata.txt @@ -23,14 +23,14 @@ QDEBUG : tst_globaldata::testGlobal(2:local 2) local: true QDEBUG : tst_globaldata::testGlobal(2:local 2) cleanup testGlobal local 2 PASS : tst_globaldata::testGlobal(2:local 2) SKIP : tst_globaldata::skip(1) skipping - Loc: [/home/user/dev/qt5/qtbase/tests/auto/testlib/selftests/globaldata/tst_globaldata.cpp(129)] + Loc: [tst_globaldata.cpp(129)] QDEBUG : tst_globaldata::skipLocal(1:local 1) init skipLocal local 1 SKIP : tst_globaldata::skipLocal(1:local 1) skipping - Loc: [/home/user/dev/qt5/qtbase/tests/auto/testlib/selftests/globaldata/tst_globaldata.cpp(149)] + Loc: [tst_globaldata.cpp(149)] QDEBUG : tst_globaldata::skipLocal(1:local 1) cleanup skipLocal local 1 QDEBUG : tst_globaldata::skipLocal(1:local 2) init skipLocal local 2 SKIP : tst_globaldata::skipLocal(1:local 2) skipping - Loc: [/home/user/dev/qt5/qtbase/tests/auto/testlib/selftests/globaldata/tst_globaldata.cpp(149)] + Loc: [tst_globaldata.cpp(149)] QDEBUG : tst_globaldata::skipLocal(1:local 2) cleanup skipLocal local 2 QDEBUG : tst_globaldata::skipSingle(1:local 1) init skipSingle local 1 QDEBUG : tst_globaldata::skipSingle(1:local 1) global: false local: false @@ -42,7 +42,7 @@ QDEBUG : tst_globaldata::skipSingle(1:local 2) cleanup skipSingle local 2 PASS : tst_globaldata::skipSingle(1:local 2) QDEBUG : tst_globaldata::skipSingle(2:local 1) init skipSingle local 1 SKIP : tst_globaldata::skipSingle(2:local 1) skipping - Loc: [/home/user/dev/qt5/qtbase/tests/auto/testlib/selftests/globaldata/tst_globaldata.cpp(143)] + Loc: [tst_globaldata.cpp(143)] QDEBUG : tst_globaldata::skipSingle(2:local 1) cleanup skipSingle local 1 QDEBUG : tst_globaldata::skipSingle(2:local 2) init skipSingle local 2 QDEBUG : tst_globaldata::skipSingle(2:local 2) global: true local: true diff --git a/tests/auto/testlib/selftests/expected_globaldata.xml b/tests/auto/testlib/selftests/expected_globaldata.xml index cf2534e34a..10fd4fd571 100644 --- a/tests/auto/testlib/selftests/expected_globaldata.xml +++ b/tests/auto/testlib/selftests/expected_globaldata.xml @@ -89,7 +89,7 @@ - + @@ -99,7 +99,7 @@ - + @@ -111,7 +111,7 @@ - + @@ -155,7 +155,7 @@ - + diff --git a/tests/auto/testlib/selftests/expected_longstring.lightxml b/tests/auto/testlib/selftests/expected_longstring.lightxml index 80c528e0d7..2b3a585bf2 100644 --- a/tests/auto/testlib/selftests/expected_longstring.lightxml +++ b/tests/auto/testlib/selftests/expected_longstring.lightxml @@ -6,7 +6,7 @@ - + - + - + diff --git a/tests/auto/testlib/selftests/expected_singleskip.txt b/tests/auto/testlib/selftests/expected_singleskip.txt index 46b40e5791..ba5415a216 100644 --- a/tests/auto/testlib/selftests/expected_singleskip.txt +++ b/tests/auto/testlib/selftests/expected_singleskip.txt @@ -2,7 +2,7 @@ Config: Using QtTest library @INSERT_QT_VERSION_HERE@, Qt @INSERT_QT_VERSION_HERE@ PASS : tst_SingleSkip::initTestCase() SKIP : tst_SingleSkip::myTest() skipping test - Loc: [/home/user/dev/qt5/qtbase/tests/auto/testlib/selftests/singleskip/tst_singleskip.cpp(56)] + Loc: [tst_singleskip.cpp(56)] PASS : tst_SingleSkip::cleanupTestCase() Totals: 2 passed, 0 failed, 1 skipped ********* Finished testing of tst_SingleSkip ********* diff --git a/tests/auto/testlib/selftests/expected_singleskip.xml b/tests/auto/testlib/selftests/expected_singleskip.xml index 393344b478..7ebffb04cb 100644 --- a/tests/auto/testlib/selftests/expected_singleskip.xml +++ b/tests/auto/testlib/selftests/expected_singleskip.xml @@ -8,7 +8,7 @@ - + diff --git a/tests/auto/testlib/selftests/expected_skip.lightxml b/tests/auto/testlib/selftests/expected_skip.lightxml index b01570e275..44428fbf3c 100644 --- a/tests/auto/testlib/selftests/expected_skip.lightxml +++ b/tests/auto/testlib/selftests/expected_skip.lightxml @@ -6,17 +6,17 @@ - + - + - + diff --git a/tests/auto/testlib/selftests/expected_skip.txt b/tests/auto/testlib/selftests/expected_skip.txt index ef96d08d83..9a79e35de3 100644 --- a/tests/auto/testlib/selftests/expected_skip.txt +++ b/tests/auto/testlib/selftests/expected_skip.txt @@ -2,11 +2,11 @@ Config: Using QtTest library @INSERT_QT_VERSION_HERE@, Qt @INSERT_QT_VERSION_HERE@ PASS : tst_Skip::initTestCase() SKIP : tst_Skip::test() skipping all - Loc: [/home/user/dev/qt5/qtbase/tests/auto/testlib/selftests/skip/tst_skip.cpp(68)] + Loc: [tst_skip.cpp(68)] SKIP : tst_Skip::emptytest() skipping all - Loc: [/home/user/dev/qt5/qtbase/tests/auto/testlib/selftests/skip/tst_skip.cpp(78)] + Loc: [tst_skip.cpp(78)] SKIP : tst_Skip::singleSkip(local 1) skipping one - Loc: [/home/user/dev/qt5/qtbase/tests/auto/testlib/selftests/skip/tst_skip.cpp(97)] + Loc: [tst_skip.cpp(97)] QDEBUG : tst_Skip::singleSkip(local 2) this line should only be reached once (true) PASS : tst_Skip::singleSkip(local 2) PASS : tst_Skip::cleanupTestCase() diff --git a/tests/auto/testlib/selftests/expected_skip.xml b/tests/auto/testlib/selftests/expected_skip.xml index 0f010860d4..a4e6bc96fe 100644 --- a/tests/auto/testlib/selftests/expected_skip.xml +++ b/tests/auto/testlib/selftests/expected_skip.xml @@ -8,17 +8,17 @@ - + - + - + diff --git a/tests/auto/testlib/selftests/expected_skipcleanup.lightxml b/tests/auto/testlib/selftests/expected_skipcleanup.lightxml index d2bc3b766e..14ce937497 100644 --- a/tests/auto/testlib/selftests/expected_skipcleanup.lightxml +++ b/tests/auto/testlib/selftests/expected_skipcleanup.lightxml @@ -9,7 +9,7 @@ - + diff --git a/tests/auto/testlib/selftests/expected_skipcleanup.txt b/tests/auto/testlib/selftests/expected_skipcleanup.txt index 52845c355e..35c5d3dccb 100644 --- a/tests/auto/testlib/selftests/expected_skipcleanup.txt +++ b/tests/auto/testlib/selftests/expected_skipcleanup.txt @@ -3,6 +3,6 @@ Config: Using QtTest library @INSERT_QT_VERSION_HERE@, Qt @INSERT_QT_VERSION_HER PASS : tst_SkipCleanup::initTestCase() PASS : tst_SkipCleanup::aTestFunction() SKIP : tst_SkipCleanup::cleanupTestCase() Skip inside cleanupTestCase. - Loc: [/home/user/dev/qt5/qtbase/tests/auto/testlib/selftests/skipcleanup/tst_skipcleanup.cpp(59)] + Loc: [tst_skipcleanup.cpp(59)] Totals: 2 passed, 0 failed, 1 skipped ********* Finished testing of tst_SkipCleanup ********* diff --git a/tests/auto/testlib/selftests/expected_skipcleanup.xml b/tests/auto/testlib/selftests/expected_skipcleanup.xml index e6c5d85783..77a02a7d65 100644 --- a/tests/auto/testlib/selftests/expected_skipcleanup.xml +++ b/tests/auto/testlib/selftests/expected_skipcleanup.xml @@ -11,7 +11,7 @@ - + diff --git a/tests/auto/testlib/selftests/expected_skipinit.lightxml b/tests/auto/testlib/selftests/expected_skipinit.lightxml index b5a73d614a..4150838d2f 100644 --- a/tests/auto/testlib/selftests/expected_skipinit.lightxml +++ b/tests/auto/testlib/selftests/expected_skipinit.lightxml @@ -3,7 +3,7 @@ @INSERT_QT_VERSION_HERE@ - + diff --git a/tests/auto/testlib/selftests/expected_skipinit.txt b/tests/auto/testlib/selftests/expected_skipinit.txt index dcd0322e9d..f3de6cd2df 100644 --- a/tests/auto/testlib/selftests/expected_skipinit.txt +++ b/tests/auto/testlib/selftests/expected_skipinit.txt @@ -1,7 +1,7 @@ ********* Start testing of tst_SkipInit ********* Config: Using QtTest library @INSERT_QT_VERSION_HERE@, Qt @INSERT_QT_VERSION_HERE@ SKIP : tst_SkipInit::initTestCase() Skip inside initTestCase. This should skip all tests in the class. - Loc: [/home/user/dev/qt5/qtbase/tests/auto/testlib/selftests/skipinit/tst_skipinit.cpp(55)] + Loc: [tst_skipinit.cpp(55)] PASS : tst_SkipInit::cleanupTestCase() Totals: 1 passed, 0 failed, 1 skipped ********* Finished testing of tst_SkipInit ********* diff --git a/tests/auto/testlib/selftests/expected_skipinit.xml b/tests/auto/testlib/selftests/expected_skipinit.xml index bc6b7d12f8..d9a595192e 100644 --- a/tests/auto/testlib/selftests/expected_skipinit.xml +++ b/tests/auto/testlib/selftests/expected_skipinit.xml @@ -5,7 +5,7 @@ @INSERT_QT_VERSION_HERE@ - + diff --git a/tests/auto/testlib/selftests/expected_skipinitdata.lightxml b/tests/auto/testlib/selftests/expected_skipinitdata.lightxml index cd820240fd..051292f04b 100644 --- a/tests/auto/testlib/selftests/expected_skipinitdata.lightxml +++ b/tests/auto/testlib/selftests/expected_skipinitdata.lightxml @@ -3,7 +3,7 @@ @INSERT_QT_VERSION_HERE@ - + diff --git a/tests/auto/testlib/selftests/expected_skipinitdata.txt b/tests/auto/testlib/selftests/expected_skipinitdata.txt index 1010f97689..912ab8cd6d 100644 --- a/tests/auto/testlib/selftests/expected_skipinitdata.txt +++ b/tests/auto/testlib/selftests/expected_skipinitdata.txt @@ -1,6 +1,6 @@ ********* Start testing of tst_SkipInitData ********* Config: Using QtTest library @INSERT_QT_VERSION_HERE@, Qt @INSERT_QT_VERSION_HERE@ SKIP : tst_SkipInitData::initTestCase() Skip inside initTestCase_data. This should skip all tests in the class. - Loc: [/home/user/dev/qt5/qtbase/tests/auto/testlib/selftests/skipinitdata/tst_skipinitdata.cpp(56)] + Loc: [tst_skipinitdata.cpp(56)] Totals: 0 passed, 0 failed, 1 skipped ********* Finished testing of tst_SkipInitData ********* diff --git a/tests/auto/testlib/selftests/expected_skipinitdata.xml b/tests/auto/testlib/selftests/expected_skipinitdata.xml index eb42569598..8c5fbd8fc4 100644 --- a/tests/auto/testlib/selftests/expected_skipinitdata.xml +++ b/tests/auto/testlib/selftests/expected_skipinitdata.xml @@ -5,7 +5,7 @@ @INSERT_QT_VERSION_HERE@ - + diff --git a/tests/auto/testlib/selftests/expected_strcmp.lightxml b/tests/auto/testlib/selftests/expected_strcmp.lightxml index 4c30c9f801..6ad7e7b997 100644 --- a/tests/auto/testlib/selftests/expected_strcmp.lightxml +++ b/tests/auto/testlib/selftests/expected_strcmp.lightxml @@ -9,44 +9,44 @@ - + - + - + - + - + - + - + - + diff --git a/tests/auto/testlib/selftests/expected_strcmp.txt b/tests/auto/testlib/selftests/expected_strcmp.txt index f3ad169fb7..4bd3844d08 100644 --- a/tests/auto/testlib/selftests/expected_strcmp.txt +++ b/tests/auto/testlib/selftests/expected_strcmp.txt @@ -3,31 +3,31 @@ Config: Using QtTest library @INSERT_QT_VERSION_HERE@, Qt @INSERT_QT_VERSION_HER PASS : tst_StrCmp::initTestCase() PASS : tst_StrCmp::compareCharStars() XFAIL : tst_StrCmp::compareByteArray() Next test should fail - Loc: [./tst_strcmp.cpp(55)] + Loc: [tst_strcmp.cpp(88)] XFAIL : tst_StrCmp::compareByteArray() Next test should fail - Loc: [./tst_strcmp.cpp(62)] + Loc: [tst_strcmp.cpp(95)] XFAIL : tst_StrCmp::compareByteArray() Next test should fail - Loc: [./tst_strcmp.cpp(69)] + Loc: [tst_strcmp.cpp(102)] FAIL! : tst_StrCmp::compareByteArray() Compared values are not the same Actual (a): 42 42 42 42 42 42 42 42 42 42 42 42 42 42 42 42 42 42 42 42 42 42 42 42 42 42 42 42 42 42 42 42 42 42 42 42 42 42 42 42 42 42 42 42 42 42 42 42 42 42 ... Expected (b): 41 41 41 41 41 41 41 41 41 41 41 41 41 41 41 41 41 41 41 41 41 41 41 41 41 41 41 41 41 41 41 41 41 41 41 41 41 41 41 41 41 41 41 41 41 41 41 41 41 41 ... - Loc: [./tst_strcmp.cpp(76)] + Loc: [tst_strcmp.cpp(109)] FAIL! : tst_StrCmp::failByteArray() Compared values are not the same Actual (QByteArray("abc")): 61 62 63 Expected (QByteArray("cba")): 63 62 61 - Loc: [./tst_strcmp.cpp(82)] + Loc: [tst_strcmp.cpp(115)] FAIL! : tst_StrCmp::failByteArrayNull() Compared values are not the same Actual (QByteArray("foo")): 66 6F 6F Expected (QByteArray()) : - Loc: [./tst_strcmp.cpp(88)] + Loc: [tst_strcmp.cpp(121)] FAIL! : tst_StrCmp::failByteArrayEmpty() Compared values are not the same Actual (QByteArray("")) : Expected (QByteArray("foo")): 66 6F 6F - Loc: [./tst_strcmp.cpp(93)] + Loc: [tst_strcmp.cpp(126)] FAIL! : tst_StrCmp::failByteArraySingleChars() Compared values are not the same Actual (QByteArray("6")): 36 Expected (QByteArray("7")): 37 - Loc: [./tst_strcmp.cpp(100)] + Loc: [tst_strcmp.cpp(133)] PASS : tst_StrCmp::cleanupTestCase() Totals: 3 passed, 5 failed, 0 skipped ********* Finished testing of tst_StrCmp ********* diff --git a/tests/auto/testlib/selftests/expected_strcmp.xml b/tests/auto/testlib/selftests/expected_strcmp.xml index db9ed34bb8..72ecd4277a 100644 --- a/tests/auto/testlib/selftests/expected_strcmp.xml +++ b/tests/auto/testlib/selftests/expected_strcmp.xml @@ -11,44 +11,44 @@ - + - + - + - + - + - + - + - + diff --git a/tests/auto/testlib/selftests/expected_subtest.lightxml b/tests/auto/testlib/selftests/expected_subtest.lightxml index 45d0a71a3e..40a14663ba 100644 --- a/tests/auto/testlib/selftests/expected_subtest.lightxml +++ b/tests/auto/testlib/selftests/expected_subtest.lightxml @@ -119,7 +119,7 @@ - + - + - + - + - + @@ -26,13 +26,13 @@ - + - + @@ -41,27 +41,27 @@ - + - + - + - + - + @@ -70,21 +70,21 @@ - + - + - + - + @@ -93,7 +93,7 @@ - + @@ -109,7 +109,7 @@ - + @@ -121,7 +121,7 @@ - + @@ -137,7 +137,7 @@ - + diff --git a/tests/auto/testlib/selftests/expected_verbose1.txt b/tests/auto/testlib/selftests/expected_verbose1.txt index 23962a0ff6..1711a33004 100644 --- a/tests/auto/testlib/selftests/expected_verbose1.txt +++ b/tests/auto/testlib/selftests/expected_verbose1.txt @@ -8,60 +8,60 @@ PASS : tst_Counting::testPassPass(row 2) INFO : tst_Counting::testPassSkip() entering PASS : tst_Counting::testPassSkip(row 1) SKIP : tst_Counting::testPassSkip(row 2) Skipping - Loc: [/home/user/dev/qt5/qtbase/tests/auto/testlib/selftests/counting/tst_counting.cpp(118)] + Loc: [../counting/tst_counting.cpp(118)] INFO : tst_Counting::testPassFail() entering PASS : tst_Counting::testPassFail(row 1) FAIL! : tst_Counting::testPassFail(row 2) 'false' returned FALSE. () - Loc: [/home/user/dev/qt5/qtbase/tests/auto/testlib/selftests/counting/tst_counting.cpp(115)] + Loc: [../counting/tst_counting.cpp(115)] INFO : tst_Counting::testSkipPass() entering SKIP : tst_Counting::testSkipPass(row 1) Skipping - Loc: [/home/user/dev/qt5/qtbase/tests/auto/testlib/selftests/counting/tst_counting.cpp(118)] + Loc: [../counting/tst_counting.cpp(118)] PASS : tst_Counting::testSkipPass(row 2) INFO : tst_Counting::testSkipSkip() entering SKIP : tst_Counting::testSkipSkip(row 1) Skipping - Loc: [/home/user/dev/qt5/qtbase/tests/auto/testlib/selftests/counting/tst_counting.cpp(118)] + Loc: [../counting/tst_counting.cpp(118)] SKIP : tst_Counting::testSkipSkip(row 2) Skipping - Loc: [/home/user/dev/qt5/qtbase/tests/auto/testlib/selftests/counting/tst_counting.cpp(118)] + Loc: [../counting/tst_counting.cpp(118)] INFO : tst_Counting::testSkipFail() entering SKIP : tst_Counting::testSkipFail(row 1) Skipping - Loc: [/home/user/dev/qt5/qtbase/tests/auto/testlib/selftests/counting/tst_counting.cpp(118)] + Loc: [../counting/tst_counting.cpp(118)] FAIL! : tst_Counting::testSkipFail(row 2) 'false' returned FALSE. () - Loc: [/home/user/dev/qt5/qtbase/tests/auto/testlib/selftests/counting/tst_counting.cpp(115)] + Loc: [../counting/tst_counting.cpp(115)] INFO : tst_Counting::testFailPass() entering FAIL! : tst_Counting::testFailPass(row 1) 'false' returned FALSE. () - Loc: [/home/user/dev/qt5/qtbase/tests/auto/testlib/selftests/counting/tst_counting.cpp(115)] + Loc: [../counting/tst_counting.cpp(115)] PASS : tst_Counting::testFailPass(row 2) INFO : tst_Counting::testFailSkip() entering FAIL! : tst_Counting::testFailSkip(row 1) 'false' returned FALSE. () - Loc: [/home/user/dev/qt5/qtbase/tests/auto/testlib/selftests/counting/tst_counting.cpp(115)] + Loc: [../counting/tst_counting.cpp(115)] SKIP : tst_Counting::testFailSkip(row 2) Skipping - Loc: [/home/user/dev/qt5/qtbase/tests/auto/testlib/selftests/counting/tst_counting.cpp(118)] + Loc: [../counting/tst_counting.cpp(118)] INFO : tst_Counting::testFailFail() entering FAIL! : tst_Counting::testFailFail(row 1) 'false' returned FALSE. () - Loc: [/home/user/dev/qt5/qtbase/tests/auto/testlib/selftests/counting/tst_counting.cpp(115)] + Loc: [../counting/tst_counting.cpp(115)] FAIL! : tst_Counting::testFailFail(row 2) 'false' returned FALSE. () - Loc: [/home/user/dev/qt5/qtbase/tests/auto/testlib/selftests/counting/tst_counting.cpp(115)] + Loc: [../counting/tst_counting.cpp(115)] INFO : tst_Counting::testFailInInit() entering PASS : tst_Counting::testFailInInit(before) FAIL! : tst_Counting::testFailInInit(fail) Fail in init() - Loc: [/home/user/dev/qt5/qtbase/tests/auto/testlib/selftests/counting/tst_counting.cpp(234)] + Loc: [../counting/tst_counting.cpp(234)] PASS : tst_Counting::testFailInInit(after) INFO : tst_Counting::testFailInCleanup() entering PASS : tst_Counting::testFailInCleanup(before) QDEBUG : tst_Counting::testFailInCleanup(fail) This test function should execute and then QFAIL in cleanup() FAIL! : tst_Counting::testFailInCleanup(fail) Fail in cleanup() - Loc: [/home/user/dev/qt5/qtbase/tests/auto/testlib/selftests/counting/tst_counting.cpp(242)] + Loc: [../counting/tst_counting.cpp(242)] PASS : tst_Counting::testFailInCleanup(after) INFO : tst_Counting::testSkipInInit() entering PASS : tst_Counting::testSkipInInit(before) SKIP : tst_Counting::testSkipInInit(skip) Skip in init() - Loc: [/home/user/dev/qt5/qtbase/tests/auto/testlib/selftests/counting/tst_counting.cpp(236)] + Loc: [../counting/tst_counting.cpp(236)] PASS : tst_Counting::testSkipInInit(after) INFO : tst_Counting::testSkipInCleanup() entering PASS : tst_Counting::testSkipInCleanup(before) QDEBUG : tst_Counting::testSkipInCleanup(skip) This test function should execute and then QSKIP in cleanup() SKIP : tst_Counting::testSkipInCleanup(skip) Skip in cleanup() - Loc: [/home/user/dev/qt5/qtbase/tests/auto/testlib/selftests/counting/tst_counting.cpp(244)] + Loc: [../counting/tst_counting.cpp(244)] PASS : tst_Counting::testSkipInCleanup(after) INFO : tst_Counting::cleanupTestCase() entering PASS : tst_Counting::cleanupTestCase() diff --git a/tests/auto/testlib/selftests/expected_verbose1.xml b/tests/auto/testlib/selftests/expected_verbose1.xml index 8177a2dc7f..7da3b42130 100644 --- a/tests/auto/testlib/selftests/expected_verbose1.xml +++ b/tests/auto/testlib/selftests/expected_verbose1.xml @@ -19,7 +19,7 @@ - + @@ -28,13 +28,13 @@ - + - + @@ -43,27 +43,27 @@ - + - + - + - + - + @@ -72,21 +72,21 @@ - + - + - + - + @@ -95,7 +95,7 @@ - + @@ -111,7 +111,7 @@ - + @@ -123,7 +123,7 @@ - + @@ -139,7 +139,7 @@ - + diff --git a/tests/auto/testlib/selftests/expected_verbose2.lightxml b/tests/auto/testlib/selftests/expected_verbose2.lightxml index 4e5f9952b8..44b79fd8ba 100644 --- a/tests/auto/testlib/selftests/expected_verbose2.lightxml +++ b/tests/auto/testlib/selftests/expected_verbose2.lightxml @@ -6,22 +6,22 @@ - + - + - + - + @@ -30,53 +30,53 @@ - + - + - + - + - + - + - + - + - + - + @@ -85,43 +85,43 @@ - + - + - + - + - + - + - + - + - + @@ -130,33 +130,33 @@ - + - + - + - + - + - + - + @@ -165,7 +165,7 @@ - + @@ -181,7 +181,7 @@ - + @@ -193,7 +193,7 @@ - + @@ -209,7 +209,7 @@ - + diff --git a/tests/auto/testlib/selftests/expected_verbose2.txt b/tests/auto/testlib/selftests/expected_verbose2.txt index d8c6e4a218..068e7357e8 100644 --- a/tests/auto/testlib/selftests/expected_verbose2.txt +++ b/tests/auto/testlib/selftests/expected_verbose2.txt @@ -4,100 +4,100 @@ INFO : tst_Counting::initTestCase() entering PASS : tst_Counting::initTestCase() INFO : tst_Counting::testPassPass() entering INFO : tst_Counting::testPassPass(row 1) QVERIFY(true) - Loc: [/home/user/dev/qt5/qtbase/tests/auto/testlib/selftests/counting/tst_counting.cpp(111)] + Loc: [../counting/tst_counting.cpp(111)] INFO : tst_Counting::testPassPass(row 1) QCOMPARE(2 + 1, 3) - Loc: [/home/user/dev/qt5/qtbase/tests/auto/testlib/selftests/counting/tst_counting.cpp(112)] + Loc: [../counting/tst_counting.cpp(112)] PASS : tst_Counting::testPassPass(row 1) INFO : tst_Counting::testPassPass(row 2) QVERIFY(true) - Loc: [/home/user/dev/qt5/qtbase/tests/auto/testlib/selftests/counting/tst_counting.cpp(111)] + Loc: [../counting/tst_counting.cpp(111)] INFO : tst_Counting::testPassPass(row 2) QCOMPARE(2 + 1, 3) - Loc: [/home/user/dev/qt5/qtbase/tests/auto/testlib/selftests/counting/tst_counting.cpp(112)] + Loc: [../counting/tst_counting.cpp(112)] PASS : tst_Counting::testPassPass(row 2) INFO : tst_Counting::testPassSkip() entering INFO : tst_Counting::testPassSkip(row 1) QVERIFY(true) - Loc: [/home/user/dev/qt5/qtbase/tests/auto/testlib/selftests/counting/tst_counting.cpp(111)] + Loc: [../counting/tst_counting.cpp(111)] INFO : tst_Counting::testPassSkip(row 1) QCOMPARE(2 + 1, 3) - Loc: [/home/user/dev/qt5/qtbase/tests/auto/testlib/selftests/counting/tst_counting.cpp(112)] + Loc: [../counting/tst_counting.cpp(112)] PASS : tst_Counting::testPassSkip(row 1) SKIP : tst_Counting::testPassSkip(row 2) Skipping - Loc: [/home/user/dev/qt5/qtbase/tests/auto/testlib/selftests/counting/tst_counting.cpp(118)] + Loc: [../counting/tst_counting.cpp(118)] INFO : tst_Counting::testPassFail() entering INFO : tst_Counting::testPassFail(row 1) QVERIFY(true) - Loc: [/home/user/dev/qt5/qtbase/tests/auto/testlib/selftests/counting/tst_counting.cpp(111)] + Loc: [../counting/tst_counting.cpp(111)] INFO : tst_Counting::testPassFail(row 1) QCOMPARE(2 + 1, 3) - Loc: [/home/user/dev/qt5/qtbase/tests/auto/testlib/selftests/counting/tst_counting.cpp(112)] + Loc: [../counting/tst_counting.cpp(112)] PASS : tst_Counting::testPassFail(row 1) INFO : tst_Counting::testPassFail(row 2) QVERIFY(false) - Loc: [/home/user/dev/qt5/qtbase/tests/auto/testlib/selftests/counting/tst_counting.cpp(115)] + Loc: [../counting/tst_counting.cpp(115)] FAIL! : tst_Counting::testPassFail(row 2) 'false' returned FALSE. () - Loc: [/home/user/dev/qt5/qtbase/tests/auto/testlib/selftests/counting/tst_counting.cpp(115)] + Loc: [../counting/tst_counting.cpp(115)] INFO : tst_Counting::testSkipPass() entering SKIP : tst_Counting::testSkipPass(row 1) Skipping - Loc: [/home/user/dev/qt5/qtbase/tests/auto/testlib/selftests/counting/tst_counting.cpp(118)] + Loc: [../counting/tst_counting.cpp(118)] INFO : tst_Counting::testSkipPass(row 2) QVERIFY(true) - Loc: [/home/user/dev/qt5/qtbase/tests/auto/testlib/selftests/counting/tst_counting.cpp(111)] + Loc: [../counting/tst_counting.cpp(111)] INFO : tst_Counting::testSkipPass(row 2) QCOMPARE(2 + 1, 3) - Loc: [/home/user/dev/qt5/qtbase/tests/auto/testlib/selftests/counting/tst_counting.cpp(112)] + Loc: [../counting/tst_counting.cpp(112)] PASS : tst_Counting::testSkipPass(row 2) INFO : tst_Counting::testSkipSkip() entering SKIP : tst_Counting::testSkipSkip(row 1) Skipping - Loc: [/home/user/dev/qt5/qtbase/tests/auto/testlib/selftests/counting/tst_counting.cpp(118)] + Loc: [../counting/tst_counting.cpp(118)] SKIP : tst_Counting::testSkipSkip(row 2) Skipping - Loc: [/home/user/dev/qt5/qtbase/tests/auto/testlib/selftests/counting/tst_counting.cpp(118)] + Loc: [../counting/tst_counting.cpp(118)] INFO : tst_Counting::testSkipFail() entering SKIP : tst_Counting::testSkipFail(row 1) Skipping - Loc: [/home/user/dev/qt5/qtbase/tests/auto/testlib/selftests/counting/tst_counting.cpp(118)] + Loc: [../counting/tst_counting.cpp(118)] INFO : tst_Counting::testSkipFail(row 2) QVERIFY(false) - Loc: [/home/user/dev/qt5/qtbase/tests/auto/testlib/selftests/counting/tst_counting.cpp(115)] + Loc: [../counting/tst_counting.cpp(115)] FAIL! : tst_Counting::testSkipFail(row 2) 'false' returned FALSE. () - Loc: [/home/user/dev/qt5/qtbase/tests/auto/testlib/selftests/counting/tst_counting.cpp(115)] + Loc: [../counting/tst_counting.cpp(115)] INFO : tst_Counting::testFailPass() entering INFO : tst_Counting::testFailPass(row 1) QVERIFY(false) - Loc: [/home/user/dev/qt5/qtbase/tests/auto/testlib/selftests/counting/tst_counting.cpp(115)] + Loc: [../counting/tst_counting.cpp(115)] FAIL! : tst_Counting::testFailPass(row 1) 'false' returned FALSE. () - Loc: [/home/user/dev/qt5/qtbase/tests/auto/testlib/selftests/counting/tst_counting.cpp(115)] + Loc: [../counting/tst_counting.cpp(115)] INFO : tst_Counting::testFailPass(row 2) QVERIFY(true) - Loc: [/home/user/dev/qt5/qtbase/tests/auto/testlib/selftests/counting/tst_counting.cpp(111)] + Loc: [../counting/tst_counting.cpp(111)] INFO : tst_Counting::testFailPass(row 2) QCOMPARE(2 + 1, 3) - Loc: [/home/user/dev/qt5/qtbase/tests/auto/testlib/selftests/counting/tst_counting.cpp(112)] + Loc: [../counting/tst_counting.cpp(112)] PASS : tst_Counting::testFailPass(row 2) INFO : tst_Counting::testFailSkip() entering INFO : tst_Counting::testFailSkip(row 1) QVERIFY(false) - Loc: [/home/user/dev/qt5/qtbase/tests/auto/testlib/selftests/counting/tst_counting.cpp(115)] + Loc: [../counting/tst_counting.cpp(115)] FAIL! : tst_Counting::testFailSkip(row 1) 'false' returned FALSE. () - Loc: [/home/user/dev/qt5/qtbase/tests/auto/testlib/selftests/counting/tst_counting.cpp(115)] + Loc: [../counting/tst_counting.cpp(115)] SKIP : tst_Counting::testFailSkip(row 2) Skipping - Loc: [/home/user/dev/qt5/qtbase/tests/auto/testlib/selftests/counting/tst_counting.cpp(118)] + Loc: [../counting/tst_counting.cpp(118)] INFO : tst_Counting::testFailFail() entering INFO : tst_Counting::testFailFail(row 1) QVERIFY(false) - Loc: [/home/user/dev/qt5/qtbase/tests/auto/testlib/selftests/counting/tst_counting.cpp(115)] + Loc: [../counting/tst_counting.cpp(115)] FAIL! : tst_Counting::testFailFail(row 1) 'false' returned FALSE. () - Loc: [/home/user/dev/qt5/qtbase/tests/auto/testlib/selftests/counting/tst_counting.cpp(115)] + Loc: [../counting/tst_counting.cpp(115)] INFO : tst_Counting::testFailFail(row 2) QVERIFY(false) - Loc: [/home/user/dev/qt5/qtbase/tests/auto/testlib/selftests/counting/tst_counting.cpp(115)] + Loc: [../counting/tst_counting.cpp(115)] FAIL! : tst_Counting::testFailFail(row 2) 'false' returned FALSE. () - Loc: [/home/user/dev/qt5/qtbase/tests/auto/testlib/selftests/counting/tst_counting.cpp(115)] + Loc: [../counting/tst_counting.cpp(115)] INFO : tst_Counting::testFailInInit() entering PASS : tst_Counting::testFailInInit(before) FAIL! : tst_Counting::testFailInInit(fail) Fail in init() - Loc: [/home/user/dev/qt5/qtbase/tests/auto/testlib/selftests/counting/tst_counting.cpp(234)] + Loc: [../counting/tst_counting.cpp(234)] PASS : tst_Counting::testFailInInit(after) INFO : tst_Counting::testFailInCleanup() entering PASS : tst_Counting::testFailInCleanup(before) QDEBUG : tst_Counting::testFailInCleanup(fail) This test function should execute and then QFAIL in cleanup() FAIL! : tst_Counting::testFailInCleanup(fail) Fail in cleanup() - Loc: [/home/user/dev/qt5/qtbase/tests/auto/testlib/selftests/counting/tst_counting.cpp(242)] + Loc: [../counting/tst_counting.cpp(242)] PASS : tst_Counting::testFailInCleanup(after) INFO : tst_Counting::testSkipInInit() entering PASS : tst_Counting::testSkipInInit(before) SKIP : tst_Counting::testSkipInInit(skip) Skip in init() - Loc: [/home/user/dev/qt5/qtbase/tests/auto/testlib/selftests/counting/tst_counting.cpp(236)] + Loc: [../counting/tst_counting.cpp(236)] PASS : tst_Counting::testSkipInInit(after) INFO : tst_Counting::testSkipInCleanup() entering PASS : tst_Counting::testSkipInCleanup(before) QDEBUG : tst_Counting::testSkipInCleanup(skip) This test function should execute and then QSKIP in cleanup() SKIP : tst_Counting::testSkipInCleanup(skip) Skip in cleanup() - Loc: [/home/user/dev/qt5/qtbase/tests/auto/testlib/selftests/counting/tst_counting.cpp(244)] + Loc: [../counting/tst_counting.cpp(244)] PASS : tst_Counting::testSkipInCleanup(after) INFO : tst_Counting::cleanupTestCase() entering PASS : tst_Counting::cleanupTestCase() diff --git a/tests/auto/testlib/selftests/expected_verbose2.xml b/tests/auto/testlib/selftests/expected_verbose2.xml index bf5e7c7570..542372327c 100644 --- a/tests/auto/testlib/selftests/expected_verbose2.xml +++ b/tests/auto/testlib/selftests/expected_verbose2.xml @@ -8,22 +8,22 @@ - + - + - + - + @@ -32,53 +32,53 @@ - + - + - + - + - + - + - + - + - + - + @@ -87,43 +87,43 @@ - + - + - + - + - + - + - + - + - + @@ -132,33 +132,33 @@ - + - + - + - + - + - + - + @@ -167,7 +167,7 @@ - + @@ -183,7 +183,7 @@ - + @@ -195,7 +195,7 @@ - + @@ -211,7 +211,7 @@ - + diff --git a/tests/auto/testlib/selftests/expected_verifyexceptionthrown.lightxml b/tests/auto/testlib/selftests/expected_verifyexceptionthrown.lightxml index 6ef857c6d0..3118eb628e 100644 --- a/tests/auto/testlib/selftests/expected_verifyexceptionthrown.lightxml +++ b/tests/auto/testlib/selftests/expected_verifyexceptionthrown.lightxml @@ -15,32 +15,32 @@ - + - + - + - + - + - + diff --git a/tests/auto/testlib/selftests/expected_verifyexceptionthrown.txt b/tests/auto/testlib/selftests/expected_verifyexceptionthrown.txt index 5c40f62dd2..04db60eccd 100644 --- a/tests/auto/testlib/selftests/expected_verifyexceptionthrown.txt +++ b/tests/auto/testlib/selftests/expected_verifyexceptionthrown.txt @@ -5,17 +5,17 @@ PASS : tst_VerifyExceptionThrown::testCorrectStdTypes() PASS : tst_VerifyExceptionThrown::testCorrectStdExceptions() PASS : tst_VerifyExceptionThrown::testCorrectMyExceptions() FAIL! : tst_VerifyExceptionThrown::testFailInt() Expected exception of type double to be thrown but unknown exception caught - Loc: [/home/user/dev/qt5/qtbase/tests/auto/testlib/selftests/verifyexceptionthrown/tst_verifyexceptionthrown.cpp(128)] + Loc: [tst_verifyexceptionthrown.cpp(128)] FAIL! : tst_VerifyExceptionThrown::testFailStdString() Expected exception of type char* to be thrown but unknown exception caught - Loc: [/home/user/dev/qt5/qtbase/tests/auto/testlib/selftests/verifyexceptionthrown/tst_verifyexceptionthrown.cpp(133)] + Loc: [tst_verifyexceptionthrown.cpp(133)] FAIL! : tst_VerifyExceptionThrown::testFailStdRuntimeError() Expected exception of type std::runtime_error to be thrown but std::exception caught with message: logic error - Loc: [/home/user/dev/qt5/qtbase/tests/auto/testlib/selftests/verifyexceptionthrown/tst_verifyexceptionthrown.cpp(138)] + Loc: [tst_verifyexceptionthrown.cpp(138)] FAIL! : tst_VerifyExceptionThrown::testFailMyException() Expected exception of type MyBaseException to be thrown but std::exception caught with message: logic error - Loc: [/home/user/dev/qt5/qtbase/tests/auto/testlib/selftests/verifyexceptionthrown/tst_verifyexceptionthrown.cpp(143)] + Loc: [tst_verifyexceptionthrown.cpp(143)] FAIL! : tst_VerifyExceptionThrown::testFailMyDerivedException() Expected exception of type std::runtime_error to be thrown but std::exception caught with message: MyDerivedException - Loc: [/home/user/dev/qt5/qtbase/tests/auto/testlib/selftests/verifyexceptionthrown/tst_verifyexceptionthrown.cpp(148)] + Loc: [tst_verifyexceptionthrown.cpp(148)] FAIL! : tst_VerifyExceptionThrown::testFailNoException() Expected exception of type std::exception to be thrown but no exception caught - Loc: [/home/user/dev/qt5/qtbase/tests/auto/testlib/selftests/verifyexceptionthrown/tst_verifyexceptionthrown.cpp(153)] + Loc: [tst_verifyexceptionthrown.cpp(153)] PASS : tst_VerifyExceptionThrown::cleanupTestCase() Totals: 5 passed, 6 failed, 0 skipped ********* Finished testing of tst_VerifyExceptionThrown ********* diff --git a/tests/auto/testlib/selftests/expected_verifyexceptionthrown.xml b/tests/auto/testlib/selftests/expected_verifyexceptionthrown.xml index df261b72c4..a533934d4b 100644 --- a/tests/auto/testlib/selftests/expected_verifyexceptionthrown.xml +++ b/tests/auto/testlib/selftests/expected_verifyexceptionthrown.xml @@ -17,32 +17,32 @@ - + - + - + - + - + - + diff --git a/tests/auto/testlib/selftests/expected_xunit.lightxml b/tests/auto/testlib/selftests/expected_xunit.lightxml index 0615f6fd61..b9194ce41f 100644 --- a/tests/auto/testlib/selftests/expected_xunit.lightxml +++ b/tests/auto/testlib/selftests/expected_xunit.lightxml @@ -6,7 +6,7 @@ - + @@ -15,36 +15,36 @@ ]]> - + - + - + - + - + - + diff --git a/tests/auto/testlib/selftests/expected_xunit.txt b/tests/auto/testlib/selftests/expected_xunit.txt index 722db18de4..f0b14752f0 100644 --- a/tests/auto/testlib/selftests/expected_xunit.txt +++ b/tests/auto/testlib/selftests/expected_xunit.txt @@ -2,25 +2,25 @@ Config: Using QtTest library @INSERT_QT_VERSION_HERE@, Qt @INSERT_QT_VERSION_HERE@ PASS : tst_Xunit::initTestCase() WARNING: tst_Xunit::testFunc1() just a QWARN() ! - Loc: [/home/user/dev/qt5/qtbase/tests/auto/testlib/selftests/xunit/tst_xunit.cpp(67)] + Loc: [tst_xunit.cpp(67)] PASS : tst_Xunit::testFunc1() QDEBUG : tst_Xunit::testFunc2() a qDebug() call with comment-ending stuff --> FAIL! : tst_Xunit::testFunc2() Compared values are not the same Actual (2): 2 Expected (3): 3 - Loc: [/home/user/dev/qt5/qtbase/tests/auto/testlib/selftests/xunit/tst_xunit.cpp(74)] + Loc: [tst_xunit.cpp(74)] SKIP : tst_Xunit::testFunc3() skipping this function! - Loc: [/home/user/dev/qt5/qtbase/tests/auto/testlib/selftests/xunit/tst_xunit.cpp(79)] + Loc: [tst_xunit.cpp(79)] FAIL! : tst_Xunit::testFunc4() a forced failure! - Loc: [/home/user/dev/qt5/qtbase/tests/auto/testlib/selftests/xunit/tst_xunit.cpp(84)] + Loc: [tst_xunit.cpp(84)] XFAIL : tst_Xunit::testFunc5() this failure is expected - Loc: [/home/user/dev/qt5/qtbase/tests/auto/testlib/selftests/xunit/tst_xunit.cpp(98)] + Loc: [tst_xunit.cpp(98)] PASS : tst_Xunit::testFunc5() XFAIL : tst_Xunit::testFunc6() this failure is also expected - Loc: [/home/user/dev/qt5/qtbase/tests/auto/testlib/selftests/xunit/tst_xunit.cpp(104)] + Loc: [tst_xunit.cpp(104)] PASS : tst_Xunit::testFunc6() XPASS : tst_Xunit::testFunc7() 'true' returned TRUE unexpectedly. () - Loc: [/home/user/dev/qt5/qtbase/tests/auto/testlib/selftests/xunit/tst_xunit.cpp(110)] + Loc: [tst_xunit.cpp(110)] PASS : tst_Xunit::cleanupTestCase() Totals: 5 passed, 3 failed, 1 skipped ********* Finished testing of tst_Xunit ********* diff --git a/tests/auto/testlib/selftests/expected_xunit.xml b/tests/auto/testlib/selftests/expected_xunit.xml index e5d2876e20..948023e32c 100644 --- a/tests/auto/testlib/selftests/expected_xunit.xml +++ b/tests/auto/testlib/selftests/expected_xunit.xml @@ -8,7 +8,7 @@ - + @@ -17,36 +17,36 @@ ]]> - + - + - + - + - + - + -- cgit v1.2.3 From a34f37cc712a69f74477c16cb8c83730ea599608 Mon Sep 17 00:00:00 2001 From: Frederik Gladhorn Date: Thu, 12 Dec 2013 17:27:52 +0100 Subject: Add a way to reproduce testlib selftest data This makes testlib a lot more hackable since when the output is changed in a defined way we can regenerate the expected output (eg adding the test duration which will be a follow-up patch). Note that the script does not work properly on Windows and not all benchmarks work, but at least it reduces the work of adapting files to a few lines. Change-Id: I910387cd92ff82aa629747a3a3033dae17fbd711 Reviewed-by: Friedemann Kleint --- .../testlib/selftests/generate_expected_output.py | 119 +++++++++++++++++++++ 1 file changed, 119 insertions(+) create mode 100755 tests/auto/testlib/selftests/generate_expected_output.py (limited to 'tests') diff --git a/tests/auto/testlib/selftests/generate_expected_output.py b/tests/auto/testlib/selftests/generate_expected_output.py new file mode 100755 index 0000000000..bf1e808e22 --- /dev/null +++ b/tests/auto/testlib/selftests/generate_expected_output.py @@ -0,0 +1,119 @@ +#!/usr/bin/env python3 +############################################################################# +## +## Copyright (C) 2013 Digia Plc and/or its subsidiary(-ies). +## Contact: http://www.qt-project.org/legal +## +## This file is part of the release tools of the Qt Toolkit. +## +## $QT_BEGIN_LICENSE:LGPL$ +## 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 Digia. For licensing terms and +## conditions see http://qt.digia.com/licensing. For further information +## use the contact form at http://qt.digia.com/contact-us. +## +## 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, Digia gives you certain additional +## rights. These rights are described in the Digia Qt LGPL Exception +## version 1.1, included in the file LGPL_EXCEPTION.txt in this package. +## +## GNU General Public License Usage +## Alternatively, this file may be used under the terms of the GNU +## General Public License version 3.0 as published by the Free Software +## Foundation and appearing in the file LICENSE.GPL included in the +## packaging of this file. Please review the following information to +## ensure the GNU General Public License version 3.0 requirements will be +## met: http://www.gnu.org/copyleft/gpl.html. +## +## +## $QT_END_LICENSE$ +## +############################################################################# + +#regenerate all test's output + +import os +import sys +import subprocess +import re + +formats = ['xml', 'txt', 'xunitxml', 'lightxml'] + +qtver = subprocess.check_output(['qmake', '-query', 'QT_VERSION']).strip().decode('utf-8') +rootPath = os.getcwd() + +isWindows = sys.platform == 'win32' + +replacements = [ + (qtver, r'@INSERT_QT_VERSION_HERE@'), + (rootPath.encode('unicode-escape').decode('utf-8'), r''), + (r'', r''), +] + +extraArgs = { + "commandlinedata": "fiveTablePasses fiveTablePasses:fiveTablePasses_data1 -v2", + "benchlibcallgrind": "-callgrind", + "benchlibeventcounter": "-eventcounter", + "benchliboptions": "-eventcounter", + "benchlibtickcounter": "-tickcounter", + "badxml": "-eventcounter", + "benchlibcounting": "-eventcounter", + "printdatatags": "-datatags", + "printdatatagswithglobaltags": "-datatags", + "silent": "-silent", + "verbose1": "-v1", + "verbose2": "-v2", +} + +# Replace all occurrences of searchExp in one file +def replaceInFile(file): + import sys + import fileinput + for line in fileinput.input(file, inplace=1): + for searchExp, replaceExp in replacements: + line = re.sub(searchExp, replaceExp, line) + sys.stdout.write(line) + +def subdirs(): + for path in os.listdir('.'): + if os.path.isdir('./' + path): + yield path + +def getTestForPath(path): + if isWindows: + testpath = path + '\\' + path + '.exe' + else: + testpath = path + '/' + path + return testpath + +def generateTestData(testname): + print(" running " + testname) + for format in formats: + cmd = [getTestForPath(testname) + ' -' + format + ' ' + extraArgs.get(testname, '')] + result = 'expected_' + testname + '.' + format + data = subprocess.Popen(cmd, stdout=subprocess.PIPE, shell=True).communicate()[0] + out = open(result, 'w') + out.write(data.decode('utf-8')) + out.close() + replaceInFile(result) + +if isWindows: + print("This script does not work on Windows.") + exit() + +print("Generating test results for: " + qtver + " in: " + rootPath) +for path in subdirs(): + if os.path.isfile(getTestForPath(path)): + generateTestData(path) + else: + print("Warning: directory " + path + " contains no test executable") -- cgit v1.2.3 From a90972e8f88dbe6bd43a15559e12c26ec9ba646d Mon Sep 17 00:00:00 2001 From: Andrew Knight Date: Mon, 6 Jan 2014 22:41:17 +0200 Subject: WinRT: Enable accessibility by default While there is no implementation for accessibility yet, enabling it allows the interfaces to be used and an accessibility plugin to be developed for this platform. IAccessible2 and MSAA bridge autotests are disabled for this platform. Change-Id: I2bfd07f6b21ca469b27d88ef11df723ac8ff8202 Reviewed-by: Friedemann Kleint Reviewed-by: Oliver Wolff --- tests/auto/other/qaccessibility/qaccessibility.pro | 5 +++-- tests/auto/other/qaccessibility/tst_qaccessibility.cpp | 4 +++- 2 files changed, 6 insertions(+), 3 deletions(-) (limited to 'tests') diff --git a/tests/auto/other/qaccessibility/qaccessibility.pro b/tests/auto/other/qaccessibility/qaccessibility.pro index 70f6633195..e6c5bb1149 100644 --- a/tests/auto/other/qaccessibility/qaccessibility.pro +++ b/tests/auto/other/qaccessibility/qaccessibility.pro @@ -13,10 +13,11 @@ wince*: { } win32 { - !*g++ { + !*g++:!winrt { include(../../../../src/3rdparty/iaccessible2/iaccessible2.pri) DEFINES += QT_SUPPORTS_IACCESSIBLE2 } - LIBS += -loleacc -loleaut32 -lole32 -luuid + LIBS += -luuid + !winphone: LIBS += -loleacc -loleaut32 -lole32 } DEFINES += QT_DISABLE_DEPRECATED_BEFORE=0 diff --git a/tests/auto/other/qaccessibility/tst_qaccessibility.cpp b/tests/auto/other/qaccessibility/tst_qaccessibility.cpp index 73bf4aab6a..dc3f266025 100644 --- a/tests/auto/other/qaccessibility/tst_qaccessibility.cpp +++ b/tests/auto/other/qaccessibility/tst_qaccessibility.cpp @@ -43,7 +43,9 @@ #include #ifdef Q_OS_WIN # include +#ifndef Q_OS_WINRT # include +#endif # include # include # ifdef QT_SUPPORTS_IACCESSIBLE2 @@ -3366,7 +3368,7 @@ void tst_QAccessibility::bridgeTest() { // For now this is a simple test to see if the bridge is working at all. // Ideally it should be extended to test all aspects of the bridge. -#ifdef Q_OS_WIN +#if defined(Q_OS_WIN) && !defined(Q_OS_WINRT) // First, test MSAA part of bridge QWidget *window = new QWidget; QVBoxLayout *lay = new QVBoxLayout(window); -- cgit v1.2.3 From dcbb16a45212d263496df1e5875da6205e4f5f53 Mon Sep 17 00:00:00 2001 From: Laszlo Agocs Date: Mon, 30 Dec 2013 14:37:22 +0100 Subject: Add takeTexture() to QOpenGLFramebufferObject Add an API that allows to retrieve and detach the texture from the framebuffer object. The next bind() call will then create and attach a new texture. [ChangeLog][QtGui][QOpenGLFramebufferObject] Added takeTexture() for retrieving and detaching the texture from the framebuffer object. Task-number: QTBUG-35881 Change-Id: I2cca37f5872c1685b1238047f8b912e6534ab781 Reviewed-by: Gunnar Sletta --- tests/auto/gui/qopengl/tst_qopengl.cpp | 50 ++++++++++++++++++++++++++++++++++ 1 file changed, 50 insertions(+) (limited to 'tests') diff --git a/tests/auto/gui/qopengl/tst_qopengl.cpp b/tests/auto/gui/qopengl/tst_qopengl.cpp index 4defbe181f..e39380a095 100644 --- a/tests/auto/gui/qopengl/tst_qopengl.cpp +++ b/tests/auto/gui/qopengl/tst_qopengl.cpp @@ -66,6 +66,8 @@ private slots: void multiGroupSharedResourceCleanupCustom(); void fboSimpleRendering_data(); void fboSimpleRendering(); + void fboTextureOwnership_data(); + void fboTextureOwnership(); void fboRendering_data(); void fboRendering(); void fboHandleNulledAfterContextDestroyed(); @@ -429,6 +431,54 @@ void tst_QOpenGL::fboSimpleRendering() delete fbo; } +void tst_QOpenGL::fboTextureOwnership_data() +{ + common_data(); +} + +void tst_QOpenGL::fboTextureOwnership() +{ + QFETCH(int, surfaceClass); + QScopedPointer surface(createSurface(surfaceClass)); + + QOpenGLContext ctx; + QVERIFY(ctx.create()); + + ctx.makeCurrent(surface.data()); + + if (!QOpenGLFramebufferObject::hasOpenGLFramebufferObjects()) + QSKIP("QOpenGLFramebufferObject not supported on this platform"); + + QOpenGLFramebufferObjectFormat fboFormat; + fboFormat.setAttachment(QOpenGLFramebufferObject::NoAttachment); + + QOpenGLFramebufferObject *fbo = new QOpenGLFramebufferObject(200, 100, fboFormat); + QVERIFY(fbo->texture() != 0); + fbo->bind(); + + // pull out the texture + GLuint texture = fbo->takeTexture(); + QVERIFY(texture != 0); + QVERIFY(fbo->texture() == 0); + + // verify that the next bind() creates a new texture + fbo->bind(); + QVERIFY(fbo->texture() != 0 && fbo->texture() != texture); + + glClearColor(1.0, 0.0, 0.0, 1.0); + glClear(GL_COLOR_BUFFER_BIT); + glFinish(); + + QImage fb = fbo->toImage().convertToFormat(QImage::Format_RGB32); + QImage reference(fb.size(), QImage::Format_RGB32); + reference.fill(0xffff0000); + + QFUZZY_COMPARE_IMAGES(fb, reference); + + glDeleteTextures(1, &texture); + delete fbo; +} + void tst_QOpenGL::fboRendering_data() { common_data(); -- cgit v1.2.3 From 15ff120b027ea4ebac4791e234f03fb561c0735b Mon Sep 17 00:00:00 2001 From: Frederik Gladhorn Date: Thu, 2 Jan 2014 14:51:21 +0100 Subject: Update testlib selftest units MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit The units that were supposed to have variance were completely off in the test leading to all benchmarks with slight variance being completely flaky. Change-Id: Ib76593813974adee462b3f03be9370d2248d770c Reviewed-by: Friedemann Kleint Reviewed-by: Jędrzej Nowacki Reviewed-by: Jason McDonald --- tests/auto/testlib/selftests/tst_selftests.cpp | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) (limited to 'tests') diff --git a/tests/auto/testlib/selftests/tst_selftests.cpp b/tests/auto/testlib/selftests/tst_selftests.cpp index 1a8e336b55..7b578e28ea 100644 --- a/tests/auto/testlib/selftests/tst_selftests.cpp +++ b/tests/auto/testlib/selftests/tst_selftests.cpp @@ -99,13 +99,13 @@ inline bool qCompare // Now check the value. Some variance is allowed, and how much depends on // the measured unit. qreal variance = 0.; - if (r1.unit == "msec") { + if (r1.unit == "msecs" || r1.unit == "WalltimeMilliseconds") { variance = 0.1; } else if (r1.unit == "instruction reads") { variance = 0.001; } - else if (r1.unit == "ticks") { + else if (r1.unit == "CPU ticks" || r1.unit == "CPUTicks") { variance = 0.001; } if (variance == 0.) { -- cgit v1.2.3 From 8f80ff338ee53a2e66e55fd04c39c883c5f2d031 Mon Sep 17 00:00:00 2001 From: Frederik Gladhorn Date: Thu, 2 Jan 2014 14:53:36 +0100 Subject: Make output when failing a test for diff in line numbers more verbose Change-Id: I536ffddffe40f9f6bbcd75f312a5f902763e1131 Reviewed-by: Jason McDonald --- tests/auto/testlib/selftests/tst_selftests.cpp | 12 +++++++++++- 1 file changed, 11 insertions(+), 1 deletion(-) (limited to 'tests') diff --git a/tests/auto/testlib/selftests/tst_selftests.cpp b/tests/auto/testlib/selftests/tst_selftests.cpp index 7b578e28ea..15aec85bdf 100644 --- a/tests/auto/testlib/selftests/tst_selftests.cpp +++ b/tests/auto/testlib/selftests/tst_selftests.cpp @@ -637,9 +637,19 @@ void tst_Selftests::doRunSubTest(QString const& subdir, QStringList const& logge .arg(loggers.at(n)))); } } else { - QVERIFY2(res.count() == exp.count(), + if (res.count() != exp.count()) { + qDebug() << "<<<<<<"; + foreach (const QByteArray &line, res) + qDebug() << line; + qDebug() << "======"; + foreach (const QByteArray &line, exp) + qDebug() << line; + qDebug() << ">>>>>>"; + + QVERIFY2(res.count() == exp.count(), qPrintable(QString::fromLatin1("Mismatch in line count: %1 != %2 (%3).") .arg(res.count()).arg(exp.count()).arg(loggers.at(n)))); + } } // By this point, we should have loaded a non-empty expected data file. -- cgit v1.2.3 From b28764c641e4fef19d5e800b7537439fb2054914 Mon Sep 17 00:00:00 2001 From: Allan Sandfeld Jensen Date: Fri, 3 Jan 2014 14:46:07 +0100 Subject: Inplace versions of QImage rgbSwapped() and mirrored() for rvalue refs Adds inplace version of QImage::rgbSwapped() and QImage::mirrored() that can be used on temporary QImage objects when supported by the compiler. [ChangeLog][QtGui][QImage]Rvalue qualified mirrored and rgbSwapped methods for inline conversions Change-Id: I4ffb658bf620dfc472d9db14c1aa70291c1fd842 Reviewed-by: Gunnar Sletta --- tests/auto/gui/image/qimage/qimage.pro | 1 + tests/auto/gui/image/qimage/tst_qimage.cpp | 251 +++++++++++++++++++++++++++++ 2 files changed, 252 insertions(+) (limited to 'tests') diff --git a/tests/auto/gui/image/qimage/qimage.pro b/tests/auto/gui/image/qimage/qimage.pro index 467a59ec9f..117e34653d 100644 --- a/tests/auto/gui/image/qimage/qimage.pro +++ b/tests/auto/gui/image/qimage/qimage.pro @@ -4,5 +4,6 @@ TARGET = tst_qimage SOURCES += tst_qimage.cpp QT += core-private gui-private testlib +contains(QT_CONFIG, c++11): CONFIG += c++11 TESTDATA += images/* diff --git a/tests/auto/gui/image/qimage/tst_qimage.cpp b/tests/auto/gui/image/qimage/tst_qimage.cpp index 7fdb2f4cba..5016abff4f 100644 --- a/tests/auto/gui/image/qimage/tst_qimage.cpp +++ b/tests/auto/gui/image/qimage/tst_qimage.cpp @@ -149,6 +149,17 @@ private slots: void rgbSwapped_data(); void rgbSwapped(); + void mirrored_data(); + void mirrored(); + + void inplaceRgbSwapped_data(); + void inplaceRgbSwapped(); + + void inplaceMirrored_data(); + void inplaceMirrored(); + + void inplaceDoubleConversion(); + void deepCopyWhenPaintingActive(); void scaled_QTBUG19157(); @@ -2106,6 +2117,246 @@ void tst_QImage::rgbSwapped() QCOMPARE(memcmp(image.constBits(), imageSwappedTwice.constBits(), image.byteCount()), 0); } +void tst_QImage::mirrored_data() +{ + QTest::addColumn("format"); + QTest::addColumn("swap_vertical"); + QTest::addColumn("swap_horizontal"); + + QTest::newRow("Format_RGB32, vertical") << QImage::Format_RGB32 << true << false; + QTest::newRow("Format_ARGB32, vertical") << QImage::Format_ARGB32 << true << false; + QTest::newRow("Format_ARGB32_Premultiplied, vertical") << QImage::Format_ARGB32_Premultiplied << true << false; + QTest::newRow("Format_RGB16, vertical") << QImage::Format_RGB16 << true << false; + QTest::newRow("Format_ARGB8565_Premultiplied, vertical") << QImage::Format_ARGB8565_Premultiplied << true << false; + QTest::newRow("Format_ARGB6666_Premultiplied, vertical") << QImage::Format_ARGB6666_Premultiplied << true << false; + QTest::newRow("Format_ARGB4444_Premultiplied, vertical") << QImage::Format_ARGB4444_Premultiplied << true << false; + QTest::newRow("Format_RGB666, vertical") << QImage::Format_RGB666 << true << false; + QTest::newRow("Format_RGB555, vertical") << QImage::Format_RGB555 << true << false; + QTest::newRow("Format_ARGB8555_Premultiplied, vertical") << QImage::Format_ARGB8555_Premultiplied << true << false; + QTest::newRow("Format_RGB888, vertical") << QImage::Format_RGB888 << true << false; + QTest::newRow("Format_RGB444, vertical") << QImage::Format_RGB444 << true << false; + QTest::newRow("Format_RGBX8888, vertical") << QImage::Format_RGBX8888 << true << false; + QTest::newRow("Format_RGBA8888_Premultiplied, vertical") << QImage::Format_RGBA8888_Premultiplied << true << false; + QTest::newRow("Format_Indexed8, vertical") << QImage::Format_Indexed8 << true << false; + QTest::newRow("Format_Mono, vertical") << QImage::Format_Mono << true << false; + + QTest::newRow("Format_ARGB32_Premultiplied, horizontal") << QImage::Format_ARGB32_Premultiplied << false << true; + QTest::newRow("Format_RGB888, horizontal") << QImage::Format_RGB888 << false << true; + QTest::newRow("Format_RGB16, horizontal") << QImage::Format_RGB16 << false << true; + QTest::newRow("Format_Indexed8, horizontal") << QImage::Format_Indexed8 << false << true; + QTest::newRow("Format_Mono, horizontal") << QImage::Format_Mono << false << true; + + QTest::newRow("Format_ARGB32_Premultiplied, horizontal+vertical") << QImage::Format_ARGB32_Premultiplied << true << true; + QTest::newRow("Format_RGB888, horizontal+vertical") << QImage::Format_RGB888 << true << true; + QTest::newRow("Format_RGB16, horizontal+vertical") << QImage::Format_RGB16 << true << true; + QTest::newRow("Format_Indexed8, horizontal+vertical") << QImage::Format_Indexed8 << true << true; + QTest::newRow("Format_Mono, horizontal+vertical") << QImage::Format_Mono << true << true; +} + +void tst_QImage::mirrored() +{ + QFETCH(QImage::Format, format); + QFETCH(bool, swap_vertical); + QFETCH(bool, swap_horizontal); + + QImage image(16, 16, format); + + switch (format) { + case QImage::Format_Mono: + for (int i = 0; i < image.height(); ++i) { + ushort* scanLine = (ushort*)image.scanLine(i); + *scanLine = (i % 2) ? 0x5555U : 0xCCCCU; + } + break; + case QImage::Format_Indexed8: + for (int i = 0; i < image.height(); ++i) { + for (int j = 0; j < image.width(); ++j) { + image.setColor(i*16+j, qRgb(j*16, i*16, 0)); + image.setPixel(j, i, i*16+j); + } + } + break; + default: + for (int i = 0; i < image.height(); ++i) + for (int j = 0; j < image.width(); ++j) + image.setPixel(j, i, qRgb(j*16, i*16, 0)); + break; + } + + QImage imageMirrored = image.mirrored(swap_horizontal, swap_vertical); + + for (int i = 0; i < image.height(); ++i) { + int mirroredI = swap_vertical ? (image.height() - i - 1) : i; + for (int j = 0; j < image.width(); ++j) { + QRgb referenceColor = image.pixel(j, i); + int mirroredJ = swap_horizontal ? (image.width() - j - 1) : j; + QRgb mirroredColor = imageMirrored.pixel(mirroredJ, mirroredI); + QCOMPARE(mirroredColor, referenceColor); + } + } + + QImage imageMirroredTwice = imageMirrored.mirrored(swap_horizontal, swap_vertical); + + QCOMPARE(image, imageMirroredTwice); + + if (format != QImage::Format_Mono) + QCOMPARE(memcmp(image.constBits(), imageMirroredTwice.constBits(), image.byteCount()), 0); + else { + for (int i = 0; i < image.height(); ++i) + for (int j = 0; j < image.width(); ++j) + QCOMPARE(image.pixel(j,i), imageMirroredTwice.pixel(j,i)); + } +} + +void tst_QImage::inplaceRgbSwapped_data() +{ + QTest::addColumn("format"); + + QTest::newRow("Format_ARGB32_Premultiplied") << QImage::Format_ARGB32_Premultiplied; + QTest::newRow("Format_RGBA8888") << QImage::Format_RGBA8888; + QTest::newRow("Format_RGB888") << QImage::Format_RGB888; + QTest::newRow("Format_RGB16") << QImage::Format_RGB16; + QTest::newRow("Format_Indexed8") << QImage::Format_Indexed8; +} + +void tst_QImage::inplaceRgbSwapped() +{ +#if defined(Q_COMPILER_REF_QUALIFIERS) + QFETCH(QImage::Format, format); + + QImage image(64, 1, format); + image.fill(0); + + QVector testColor(image.width()); + for (int i = 0; i < image.width(); ++i) + testColor[i] = qRgb(i * 2, i * 3, 255 - i * 4); + + if (format == QImage::Format_Indexed8) { + for (int i = 0; i < image.width(); ++i) { + image.setColor(i, testColor[i]); + image.setPixel(i, 0, i); + } + } else { + for (int i = 0; i < image.width(); ++i) + image.setPixel(i, 0, testColor[i]); + } + + const uchar* orginalPtr = image.constScanLine(0); + QImage imageSwapped = std::move(image).rgbSwapped(); + + for (int i = 0; i < imageSwapped.width(); ++i) { + QRgb referenceColor = testColor[i]; + QRgb swappedColor = imageSwapped.pixel(i, 0); + QCOMPARE(qRed(swappedColor) & 0xf8, qBlue(referenceColor) & 0xf8); + QCOMPARE(qGreen(swappedColor) & 0xf8, qGreen(referenceColor) & 0xf8); + QCOMPARE(qBlue(swappedColor) & 0xf8, qRed(referenceColor) & 0xf8); + } + + QCOMPARE(imageSwapped.constScanLine(0), orginalPtr); +#endif +} + + +void tst_QImage::inplaceMirrored_data() +{ + QTest::addColumn("format"); + QTest::addColumn("swap_vertical"); + QTest::addColumn("swap_horizontal"); + + QTest::newRow("Format_ARGB32, vertical") << QImage::Format_ARGB32 << true << false; + QTest::newRow("Format_RGB888, vertical") << QImage::Format_RGB888 << true << false; + QTest::newRow("Format_RGB16, vertical") << QImage::Format_RGB16 << true << false; + QTest::newRow("Format_Indexed8, vertical") << QImage::Format_Indexed8 << true << false; + QTest::newRow("Format_Mono, vertical") << QImage::Format_Mono << true << false; + + QTest::newRow("Format_ARGB32, horizontal") << QImage::Format_ARGB32 << false << true; + QTest::newRow("Format_RGB888, horizontal") << QImage::Format_RGB888 << false << true; + QTest::newRow("Format_RGB16, horizontal") << QImage::Format_RGB16 << false << true; + QTest::newRow("Format_Indexed8, horizontal") << QImage::Format_Indexed8 << false << true; + QTest::newRow("Format_Mono, horizontal") << QImage::Format_Mono << false << true; + + QTest::newRow("Format_ARGB32, horizontal+vertical") << QImage::Format_ARGB32 << true << true; + QTest::newRow("Format_RGB888, horizontal+vertical") << QImage::Format_RGB888 << true << true; + QTest::newRow("Format_RGB16, horizontal+vertical") << QImage::Format_RGB16 << true << true; + QTest::newRow("Format_Indexed8, horizontal+vertical") << QImage::Format_Indexed8 << true << true; + QTest::newRow("Format_Mono, horizontal+vertical") << QImage::Format_Mono << true << true; +} + +void tst_QImage::inplaceMirrored() +{ +#if defined(Q_COMPILER_REF_QUALIFIERS) + QFETCH(QImage::Format, format); + QFETCH(bool, swap_vertical); + QFETCH(bool, swap_horizontal); + + QImage image(16, 16, format); + + switch (format) { + case QImage::Format_Mono: + for (int i = 0; i < image.height(); ++i) { + ushort* scanLine = (ushort*)image.scanLine(i); + *scanLine = (i % 2) ? 0x0fffU : 0xf000U; + } + break; + case QImage::Format_Indexed8: + for (int i = 0; i < image.height(); ++i) { + for (int j = 0; j < image.width(); ++j) { + image.setColor(i*16+j, qRgb(j*16, i*16, 0)); + image.setPixel(j, i, i*16+j); + } + } + break; + default: + for (int i = 0; i < image.height(); ++i) + for (int j = 0; j < image.width(); ++j) + image.setPixel(j, i, qRgb(j*16, i*16, 0)); + } + + const uchar* originalPtr = image.constScanLine(0); + + QImage imageMirrored = std::move(image).mirrored(swap_horizontal, swap_vertical); + if (format != QImage::Format_Mono) { + for (int i = 0; i < imageMirrored.height(); ++i) { + int mirroredI = swap_vertical ? (imageMirrored.height() - i - 1) : i; + for (int j = 0; j < imageMirrored.width(); ++j) { + int mirroredJ = swap_horizontal ? (imageMirrored.width() - j - 1) : j; + QRgb mirroredColor = imageMirrored.pixel(mirroredJ, mirroredI); + QCOMPARE(qRed(mirroredColor) & 0xF8, j * 16); + QCOMPARE(qGreen(mirroredColor) & 0xF8, i * 16); + } + } + } else { + for (int i = 0; i < imageMirrored.height(); ++i) { + ushort* scanLine = (ushort*)imageMirrored.scanLine(i); + ushort expect; + if (swap_vertical && swap_horizontal) + expect = (i % 2) ? 0x000fU : 0xfff0U; + else if (swap_vertical) + expect = (i % 2) ? 0xf000U : 0x0fffU; + else + expect = (i % 2) ? 0xfff0U : 0x000fU; + QCOMPARE(*scanLine, expect); + } + } + QCOMPARE(imageMirrored.constScanLine(0), originalPtr); +#endif +} + +void tst_QImage::inplaceDoubleConversion() +{ +#if defined(Q_COMPILER_REF_QUALIFIERS) + QImage image1(32, 32, QImage::Format_ARGB32); + QImage image2(32, 32, QImage::Format_ARGB32); + image1.fill(0); + image2.fill(0); + const uchar* originalPtr1 = image1.constScanLine(0); + const uchar* originalPtr2 = image2.constScanLine(0); + + QCOMPARE(std::move(image1).rgbSwapped().mirrored().constScanLine(0), originalPtr1); + QCOMPARE(std::move(image2).mirrored().rgbSwapped().constScanLine(0), originalPtr2); +#endif +} + void tst_QImage::deepCopyWhenPaintingActive() { QImage image(64, 64, QImage::Format_ARGB32_Premultiplied); -- cgit v1.2.3 From 3867bc5a10f0b798154025265efacd2f53ace06e Mon Sep 17 00:00:00 2001 From: Tomasz Olszak Date: Wed, 8 Jan 2014 17:12:28 +0100 Subject: Send DynamicPropertyChange event only when value is changed. According to docs DynamicPropertyChange event should be sent from setProperty function only when property is added, removed or changed. Change-Id: I080a27a4119a63580b03172f4b5b367338c6f440 Reviewed-by: Olivier Goffart --- tests/auto/corelib/kernel/qobject/tst_qobject.cpp | 3 +++ 1 file changed, 3 insertions(+) (limited to 'tests') diff --git a/tests/auto/corelib/kernel/qobject/tst_qobject.cpp b/tests/auto/corelib/kernel/qobject/tst_qobject.cpp index a5b5b659ea..8875998433 100644 --- a/tests/auto/corelib/kernel/qobject/tst_qobject.cpp +++ b/tests/auto/corelib/kernel/qobject/tst_qobject.cpp @@ -2950,6 +2950,9 @@ void tst_QObject::dynamicProperties() QVERIFY(!obj.setProperty("myuserproperty", "Hello")); QCOMPARE(obj.changedDynamicProperties.count(), 1); QCOMPARE(obj.changedDynamicProperties.first(), QByteArray("myuserproperty")); + //check if there is no redundant DynamicPropertyChange events + QVERIFY(!obj.setProperty("myuserproperty", "Hello")); + QCOMPARE(obj.changedDynamicProperties.count(), 1); obj.changedDynamicProperties.clear(); QCOMPARE(obj.property("myuserproperty").toString(), QString("Hello")); -- cgit v1.2.3 From 48f1ebc0404983381ddd2cc2a3b5ecc1a12785c3 Mon Sep 17 00:00:00 2001 From: hjk Date: Wed, 4 Dec 2013 14:11:39 +0100 Subject: Add QVarLengthArray::{indexOf,lastIndexOf,contains} functions [ChangeLog][QtCore][QVarLengthArray] Added the indexOf, lastIndexOf and contains functions to QVarLengthArray. These functions make the class more similar to QVector. Change-Id: I9bd2b22bd8b7151c2d17aede36e5f2126570600b Reviewed-by: Oswald Buddenhagen Reviewed-by: Olivier Goffart --- .../tools/qvarlengtharray/tst_qvarlengtharray.cpp | 65 ++++++++++++++++++++++ 1 file changed, 65 insertions(+) (limited to 'tests') diff --git a/tests/auto/corelib/tools/qvarlengtharray/tst_qvarlengtharray.cpp b/tests/auto/corelib/tools/qvarlengtharray/tst_qvarlengtharray.cpp index c19080e345..1507fc7007 100644 --- a/tests/auto/corelib/tools/qvarlengtharray/tst_qvarlengtharray.cpp +++ b/tests/auto/corelib/tools/qvarlengtharray/tst_qvarlengtharray.cpp @@ -59,6 +59,9 @@ private slots: void first(); void last(); void squeeze(); + void indexOf(); + void lastIndexOf(); + void contains(); }; int fooCtor = 0; @@ -677,5 +680,67 @@ void tst_QVarLengthArray::squeeze() QCOMPARE(list.capacity(), sizeOnHeap); } +void tst_QVarLengthArray::indexOf() +{ + QVarLengthArray myvec; + myvec << "A" << "B" << "C" << "B" << "A"; + + QVERIFY(myvec.indexOf("B") == 1); + QVERIFY(myvec.indexOf("B", 1) == 1); + QVERIFY(myvec.indexOf("B", 2) == 3); + QVERIFY(myvec.indexOf("X") == -1); + QVERIFY(myvec.indexOf("X", 2) == -1); + + // add an X + myvec << "X"; + QVERIFY(myvec.indexOf("X") == 5); + QVERIFY(myvec.indexOf("X", 5) == 5); + QVERIFY(myvec.indexOf("X", 6) == -1); + + // remove first A + myvec.remove(0); + QVERIFY(myvec.indexOf("A") == 3); + QVERIFY(myvec.indexOf("A", 3) == 3); + QVERIFY(myvec.indexOf("A", 4) == -1); +} + +void tst_QVarLengthArray::lastIndexOf() +{ + QVarLengthArray myvec; + myvec << "A" << "B" << "C" << "B" << "A"; + + QVERIFY(myvec.lastIndexOf("B") == 3); + QVERIFY(myvec.lastIndexOf("B", 2) == 1); + QVERIFY(myvec.lastIndexOf("X") == -1); + QVERIFY(myvec.lastIndexOf("X", 2) == -1); + + // add an X + myvec << "X"; + QVERIFY(myvec.lastIndexOf("X") == 5); + QVERIFY(myvec.lastIndexOf("X", 5) == 5); + QVERIFY(myvec.lastIndexOf("X", 3) == -1); + + // remove first A + myvec.remove(0); + QVERIFY(myvec.lastIndexOf("A") == 3); + QVERIFY(myvec.lastIndexOf("A", 3) == 3); + QVERIFY(myvec.lastIndexOf("A", 2) == -1); +} + +void tst_QVarLengthArray::contains() +{ + QVarLengthArray myvec; + myvec << "aaa" << "bbb" << "ccc"; + + QVERIFY(myvec.contains(QLatin1String("aaa"))); + QVERIFY(myvec.contains(QLatin1String("bbb"))); + QVERIFY(myvec.contains(QLatin1String("ccc"))); + QVERIFY(!myvec.contains(QLatin1String("I don't exist"))); + + // add it and make sure it does :) + myvec.append(QLatin1String("I don't exist")); + QVERIFY(myvec.contains(QLatin1String("I don't exist"))); +} + QTEST_APPLESS_MAIN(tst_QVarLengthArray) #include "tst_qvarlengtharray.moc" -- cgit v1.2.3 From 0efc6e92d8008127c162e3c2721e6f4364aae8ab Mon Sep 17 00:00:00 2001 From: Jan Arve Saether Date: Thu, 9 Jan 2014 12:45:14 +0100 Subject: Use the default height (not 0) if only width is specified If width was specified, but not height (or vice versa) the actual window size was not as expected: * The window width was not the width specified. * The window height became 0. This was unexpected, since if both width and height was not specified it would fallback to becoming 160x160 (on Windows). However, with the advent of https://codereview.qt-project.org/71999 both width and height might receive sensible defaults based on the content of the ApplicationWindow, which would mean that it might be reasonable to expect that you only need to specify one size component of the window. This also fixes an assertion in file ..\..\..\3rdparty\angle\src\libGLESv2\renderer\SwapChain9.cpp, line 81 The assertion happened when a window was created with 0 height (but valid width), and then its height got increased, causing it to become visible. Change-Id: Ia9e730418e35d679907bdcc59b00c3c988216c32 Reviewed-by: Shawn Rutledge --- tests/auto/gui/kernel/qwindow/tst_qwindow.cpp | 27 +++++++++++++++++++++++++++ 1 file changed, 27 insertions(+) (limited to 'tests') diff --git a/tests/auto/gui/kernel/qwindow/tst_qwindow.cpp b/tests/auto/gui/kernel/qwindow/tst_qwindow.cpp index 76b3a4f6cc..7e6313295b 100644 --- a/tests/auto/gui/kernel/qwindow/tst_qwindow.cpp +++ b/tests/auto/gui/kernel/qwindow/tst_qwindow.cpp @@ -82,6 +82,7 @@ private slots: void windowModality_QTBUG27039(); void visibility(); void mask(); + void initialSize(); void initTestCase() { @@ -1186,6 +1187,32 @@ void tst_QWindow::mask() QCOMPARE(window.mask(), mask); } +void tst_QWindow::initialSize() +{ + QSize defaultSize(0,0); + { + Window w; + w.show(); + QTRY_VERIFY(w.width() > 0); + QTRY_VERIFY(w.height() > 0); + defaultSize = QSize(w.width(), w.height()); + } + { + Window w; + w.setWidth(200); + w.show(); + QTRY_COMPARE(w.width(), 200); + QTRY_VERIFY(w.height() > 0); + } + { + Window w; + w.resize(200, 42); + w.show(); + QTRY_COMPARE(w.width(), 200); + QTRY_COMPARE(w.height(), 42); + } +} + #include QTEST_MAIN(tst_QWindow) -- cgit v1.2.3 From 955d0df8736577eea0061e61a924104e34d3915d Mon Sep 17 00:00:00 2001 From: Christian Loose Date: Mon, 23 Sep 2013 20:40:52 +0200 Subject: Add option NoCancelButtonOnLastPage to QWizard Add support to hide the cancel button on the last page of a wizard. This is useful for wizards where the last page is used as a summary page that should not be cancelled. [ChangeLog][QtWidgets][QWizard] Added NoCancelButtonOnLastPage option. Task-number: QTBUG-7484 Change-Id: I282bda55a8dec9cde6439a9285d79e0a5c6df96a Reviewed-by: Marc Mutz --- tests/auto/widgets/dialogs/qwizard/tst_qwizard.cpp | 45 ++++++++++++++++++++++ 1 file changed, 45 insertions(+) (limited to 'tests') diff --git a/tests/auto/widgets/dialogs/qwizard/tst_qwizard.cpp b/tests/auto/widgets/dialogs/qwizard/tst_qwizard.cpp index a711bc28e3..25a82050e3 100644 --- a/tests/auto/widgets/dialogs/qwizard/tst_qwizard.cpp +++ b/tests/auto/widgets/dialogs/qwizard/tst_qwizard.cpp @@ -90,6 +90,7 @@ private slots: void setOption_HaveNextButtonOnLastPage(); void setOption_HaveFinishButtonOnEarlyPages(); void setOption_NoCancelButton(); + void setOption_NoCancelButtonOnLastPage(); void setOption_CancelButtonOnLeft(); void setOption_HaveHelpButton(); void setOption_HelpButtonOnRight(); @@ -1423,6 +1424,50 @@ void tst_QWizard::setOption_NoCancelButton() } } +void tst_QWizard::setOption_NoCancelButtonOnLastPage() +{ + for (int i = 0; i < 2; ++i) { + QWizard wizard; + wizard.setOption(QWizard::NoCancelButton, false); + wizard.setOption(QWizard::NoCancelButtonOnLastPage, true); + wizard.addPage(new QWizardPage); + wizard.addPage(new QWizardPage); + wizard.page(1)->setFinalPage(true); // changes nothing (final != last in general) + wizard.addPage(new QWizardPage); + + wizard.setStartId(1); + wizard.show(); + qApp->processEvents(); + + QVERIFY(wizard.button(QWizard::CancelButton)->isVisible()); + + wizard.next(); + qApp->processEvents(); + QVERIFY(!wizard.button(QWizard::CancelButton)->isVisible()); + + wizard.next(); + qApp->processEvents(); + QVERIFY(!wizard.button(QWizard::CancelButton)->isVisible()); + + wizard.back(); + qApp->processEvents(); + QVERIFY(wizard.button(QWizard::CancelButton)->isVisible()); + + wizard.next(); + qApp->processEvents(); + QVERIFY(!wizard.button(QWizard::CancelButton)->isVisible()); + + wizard.setOption(QWizard::NoCancelButtonOnLastPage, false); + QVERIFY(wizard.button(QWizard::CancelButton)->isVisible()); + + wizard.setOption(QWizard::NoCancelButtonOnLastPage, true); + QVERIFY(!wizard.button(QWizard::CancelButton)->isVisible()); + + wizard.addPage(new QWizardPage); + QVERIFY(!wizard.button(QWizard::CancelButton)->isVisible()); // this is maybe wrong + } +} + void tst_QWizard::setOption_CancelButtonOnLeft() { for (int i = 0; i < 2; ++i) { -- cgit v1.2.3 From 8dd47e34b9b96ac27a99cdcf10b8aec506882fc2 Mon Sep 17 00:00:00 2001 From: Thiago Macieira Date: Sun, 20 Oct 2013 17:43:46 +0100 Subject: Add a new UTF-8 decoder, similar to the encoder we've just added Like before, this is taken from the existing QUrl code and is optimized for ASCII handling (for the same reasons). And like previously, make QString::fromUtf8 use a stateless version of the codec, which is faster. There's a small change in behavior in the decoding: we insert a U+FFFD for each byte that cannot be decoded properly. Previously, it would "eat" all bad high-bit bytes and replace them all with one single U+FFFD. Either behavior is allowed by the UTF-8 specifications, even though this new behavior will cause misalignment in the Bradley Kuhn sample UTF-8 text. Change-Id: Ib1b1f0b4291293bab345acaf376e00204ed87565 Reviewed-by: Olivier Goffart Reviewed-by: Thiago Macieira --- .../corelib/codecs/qtextcodec/tst_qtextcodec.cpp | 76 +++++++++------------- .../qxmlsimplereader/xmldocs/not-wf/sa/170.xml.ref | 2 +- 2 files changed, 30 insertions(+), 48 deletions(-) (limited to 'tests') diff --git a/tests/auto/corelib/codecs/qtextcodec/tst_qtextcodec.cpp b/tests/auto/corelib/codecs/qtextcodec/tst_qtextcodec.cpp index 8e1b3cf3b2..12b81ee7d4 100644 --- a/tests/auto/corelib/codecs/qtextcodec/tst_qtextcodec.cpp +++ b/tests/auto/corelib/codecs/qtextcodec/tst_qtextcodec.cpp @@ -456,7 +456,7 @@ void tst_QTextCodec::flagF7808080() const //QVERIFY(!codec->canEncode(QChar(0x1C0000))); QTextCodec::ConverterState state(QTextCodec::ConvertInvalidToNull); - QVERIFY(codec->toUnicode(input.constData(), input.length(), &state) == QChar(0)); + QCOMPARE(codec->toUnicode(input.constData(), input.length(), &state), QString(input.size(), QChar(0))); } void tst_QTextCodec::nonFlaggedEFBFBF() const @@ -689,8 +689,7 @@ void tst_QTextCodec::utf8Codec_data() utf8 += char(0xbf); utf8 += char(0xbf); utf8 += char(0xbf); - str.clear(); - str += QChar(QChar::ReplacementCharacter); + str = fromInvalidUtf8Sequence(utf8); QTest::newRow("http://www.w3.org/2001/06/utf-8-wrong/UTF-8-test.html 2.2.4") << utf8 << str << -1; // 2.2.5 U+03FFFFFF (not a valid Unicode character) @@ -755,8 +754,7 @@ void tst_QTextCodec::utf8Codec_data() utf8 += char(0x90); utf8 += char(0x80); utf8 += char(0x80); - str.clear(); - str += QChar(QChar::ReplacementCharacter); + str = fromInvalidUtf8Sequence(utf8); QTest::newRow("http://www.w3.org/2001/06/utf-8-wrong/UTF-8-test.html 2.3.5") << utf8 << str << -1; // 3.1.1 @@ -1244,7 +1242,7 @@ void tst_QTextCodec::utf8Codec_data() utf8.clear(); utf8 += char(0xc0); utf8 += char(0xaf); - str = QChar(QChar::ReplacementCharacter); + str = fromInvalidUtf8Sequence(utf8); QTest::newRow("http://www.w3.org/2001/06/utf-8-wrong/UTF-8-test.html 4.1.1") << utf8 << str << -1; // 4.1.2 @@ -1252,7 +1250,7 @@ void tst_QTextCodec::utf8Codec_data() utf8 += char(0xe0); utf8 += char(0x80); utf8 += char(0xaf); - str = QChar(QChar::ReplacementCharacter); + str = fromInvalidUtf8Sequence(utf8); QTest::newRow("http://www.w3.org/2001/06/utf-8-wrong/UTF-8-test.html 4.1.2") << utf8 << str << -1; // 4.1.3 @@ -1261,7 +1259,7 @@ void tst_QTextCodec::utf8Codec_data() utf8 += char(0x80); utf8 += char(0x80); utf8 += char(0xaf); - str = QChar(QChar::ReplacementCharacter); + str = fromInvalidUtf8Sequence(utf8); QTest::newRow("http://www.w3.org/2001/06/utf-8-wrong/UTF-8-test.html 4.1.3") << utf8 << str << -1; // 4.1.4 @@ -1289,7 +1287,7 @@ void tst_QTextCodec::utf8Codec_data() utf8.clear(); utf8 += char(0xc1); utf8 += char(0xbf); - str = QChar(QChar::ReplacementCharacter); + str = fromInvalidUtf8Sequence(utf8); QTest::newRow("http://www.w3.org/2001/06/utf-8-wrong/UTF-8-test.html 4.2.1") << utf8 << str << -1; // 4.2.2 @@ -1297,7 +1295,7 @@ void tst_QTextCodec::utf8Codec_data() utf8 += char(0xe0); utf8 += char(0x9f); utf8 += char(0xbf); - str = QChar(QChar::ReplacementCharacter); + str = fromInvalidUtf8Sequence(utf8); QTest::newRow("http://www.w3.org/2001/06/utf-8-wrong/UTF-8-test.html 4.2.2") << utf8 << str << -1; // 4.2.3 @@ -1306,7 +1304,7 @@ void tst_QTextCodec::utf8Codec_data() utf8 += char(0x8f); utf8 += char(0xbf); utf8 += char(0xbf); - str = QChar(QChar::ReplacementCharacter); + str = fromInvalidUtf8Sequence(utf8); QTest::newRow("http://www.w3.org/2001/06/utf-8-wrong/UTF-8-test.html 4.2.3") << utf8 << str << -1; // 4.2.4 @@ -1334,7 +1332,7 @@ void tst_QTextCodec::utf8Codec_data() utf8.clear(); utf8 += char(0xc0); utf8 += char(0x80); - str = QChar(QChar::ReplacementCharacter); + str = fromInvalidUtf8Sequence(utf8); QTest::newRow("http://www.w3.org/2001/06/utf-8-wrong/UTF-8-test.html 4.3.1") << utf8 << str << -1; // 4.3.2 @@ -1342,7 +1340,7 @@ void tst_QTextCodec::utf8Codec_data() utf8 += char(0xe0); utf8 += char(0x80); utf8 += char(0x80); - str = QChar(QChar::ReplacementCharacter); + str = fromInvalidUtf8Sequence(utf8); QTest::newRow("http://www.w3.org/2001/06/utf-8-wrong/UTF-8-test.html 4.3.2") << utf8 << str << -1; // 4.3.3 @@ -1351,7 +1349,7 @@ void tst_QTextCodec::utf8Codec_data() utf8 += char(0x80); utf8 += char(0x80); utf8 += char(0x80); - str = QChar(QChar::ReplacementCharacter); + str = fromInvalidUtf8Sequence(utf8); QTest::newRow("http://www.w3.org/2001/06/utf-8-wrong/UTF-8-test.html 4.3.3") << utf8 << str << -1; // 4.3.4 @@ -1380,7 +1378,7 @@ void tst_QTextCodec::utf8Codec_data() utf8 += char(0xed); utf8 += char(0xa0); utf8 += char(0x80); - str = QChar(QChar::ReplacementCharacter); + str = fromInvalidUtf8Sequence(utf8); QTest::newRow("http://www.w3.org/2001/06/utf-8-wrong/UTF-8-test.html 5.1.1") << utf8 << str << -1; // 5.1.2 @@ -1388,7 +1386,7 @@ void tst_QTextCodec::utf8Codec_data() utf8 += char(0xed); utf8 += char(0xad); utf8 += char(0xbf); - str = QChar(QChar::ReplacementCharacter); + str = fromInvalidUtf8Sequence(utf8); QTest::newRow("http://www.w3.org/2001/06/utf-8-wrong/UTF-8-test.html 5.1.2") << utf8 << str << -1; // 5.1.3 @@ -1396,7 +1394,7 @@ void tst_QTextCodec::utf8Codec_data() utf8 += char(0xed); utf8 += char(0xae); utf8 += char(0x80); - str = QChar(QChar::ReplacementCharacter); + str = fromInvalidUtf8Sequence(utf8); QTest::newRow("http://www.w3.org/2001/06/utf-8-wrong/UTF-8-test.html 5.1.3") << utf8 << str << -1; // 5.1.4 @@ -1404,7 +1402,7 @@ void tst_QTextCodec::utf8Codec_data() utf8 += char(0xed); utf8 += char(0xaf); utf8 += char(0xbf); - str = QChar(QChar::ReplacementCharacter); + str = fromInvalidUtf8Sequence(utf8); QTest::newRow("http://www.w3.org/2001/06/utf-8-wrong/UTF-8-test.html 5.1.4") << utf8 << str << -1; // 5.1.5 @@ -1412,7 +1410,7 @@ void tst_QTextCodec::utf8Codec_data() utf8 += char(0xed); utf8 += char(0xb0); utf8 += char(0x80); - str = QChar(QChar::ReplacementCharacter); + str = fromInvalidUtf8Sequence(utf8); QTest::newRow("http://www.w3.org/2001/06/utf-8-wrong/UTF-8-test.html 5.1.5") << utf8 << str << -1; // 5.1.6 @@ -1420,7 +1418,7 @@ void tst_QTextCodec::utf8Codec_data() utf8 += char(0xed); utf8 += char(0xbe); utf8 += char(0x80); - str = QChar(QChar::ReplacementCharacter); + str = fromInvalidUtf8Sequence(utf8); QTest::newRow("http://www.w3.org/2001/06/utf-8-wrong/UTF-8-test.html 5.1.6") << utf8 << str << -1; // 5.1.7 @@ -1428,7 +1426,7 @@ void tst_QTextCodec::utf8Codec_data() utf8 += char(0xed); utf8 += char(0xbf); utf8 += char(0xbf); - str = QChar(QChar::ReplacementCharacter); + str = fromInvalidUtf8Sequence(utf8); QTest::newRow("http://www.w3.org/2001/06/utf-8-wrong/UTF-8-test.html 5.1.7") << utf8 << str << -1; // 5.2.1 @@ -1439,9 +1437,7 @@ void tst_QTextCodec::utf8Codec_data() utf8 += char(0xed); utf8 += char(0xb0); utf8 += char(0x80); - str.clear(); - str += QChar(QChar::ReplacementCharacter); - str += QChar(QChar::ReplacementCharacter); + str = fromInvalidUtf8Sequence(utf8); QTest::newRow("http://www.w3.org/2001/06/utf-8-wrong/UTF-8-test.html 5.2.1") << utf8 << str << -1; // 5.2.2 @@ -1452,9 +1448,7 @@ void tst_QTextCodec::utf8Codec_data() utf8 += char(0xed); utf8 += char(0xbf); utf8 += char(0xbf); - str.clear(); - str += QChar(QChar::ReplacementCharacter); - str += QChar(QChar::ReplacementCharacter); + str = fromInvalidUtf8Sequence(utf8); QTest::newRow("http://www.w3.org/2001/06/utf-8-wrong/UTF-8-test.html 5.2.2") << utf8 << str << -1; // 5.2.3 @@ -1465,9 +1459,7 @@ void tst_QTextCodec::utf8Codec_data() utf8 += char(0xed); utf8 += char(0xb0); utf8 += char(0x80); - str.clear(); - str += QChar(QChar::ReplacementCharacter); - str += QChar(QChar::ReplacementCharacter); + str = fromInvalidUtf8Sequence(utf8); QTest::newRow("http://www.w3.org/2001/06/utf-8-wrong/UTF-8-test.html 5.2.3") << utf8 << str << -1; // 5.2.4 @@ -1478,9 +1470,7 @@ void tst_QTextCodec::utf8Codec_data() utf8 += char(0xed); utf8 += char(0xbf); utf8 += char(0xbf); - str.clear(); - str += QChar(QChar::ReplacementCharacter); - str += QChar(QChar::ReplacementCharacter); + str = fromInvalidUtf8Sequence(utf8); QTest::newRow("http://www.w3.org/2001/06/utf-8-wrong/UTF-8-test.html 5.2.4") << utf8 << str << -1; // 5.2.5 @@ -1491,9 +1481,7 @@ void tst_QTextCodec::utf8Codec_data() utf8 += char(0xed); utf8 += char(0xb0); utf8 += char(0x80); - str.clear(); - str += QChar(QChar::ReplacementCharacter); - str += QChar(QChar::ReplacementCharacter); + str = fromInvalidUtf8Sequence(utf8); QTest::newRow("http://www.w3.org/2001/06/utf-8-wrong/UTF-8-test.html 5.2.5") << utf8 << str << -1; // 5.2.6 @@ -1504,9 +1492,7 @@ void tst_QTextCodec::utf8Codec_data() utf8 += char(0xed); utf8 += char(0xbf); utf8 += char(0xbf); - str.clear(); - str += QChar(QChar::ReplacementCharacter); - str += QChar(QChar::ReplacementCharacter); + str = fromInvalidUtf8Sequence(utf8); QTest::newRow("http://www.w3.org/2001/06/utf-8-wrong/UTF-8-test.html 5.2.6") << utf8 << str << -1; // 5.2.7 @@ -1517,9 +1503,7 @@ void tst_QTextCodec::utf8Codec_data() utf8 += char(0xed); utf8 += char(0xb0); utf8 += char(0x80); - str.clear(); - str += QChar(QChar::ReplacementCharacter); - str += QChar(QChar::ReplacementCharacter); + str = fromInvalidUtf8Sequence(utf8); QTest::newRow("http://www.w3.org/2001/06/utf-8-wrong/UTF-8-test.html 5.2.7") << utf8 << str << -1; // 5.2.8 @@ -1530,9 +1514,7 @@ void tst_QTextCodec::utf8Codec_data() utf8 += char(0xed); utf8 += char(0xbf); utf8 += char(0xbf); - str.clear(); - str += QChar(QChar::ReplacementCharacter); - str += QChar(QChar::ReplacementCharacter); + str = fromInvalidUtf8Sequence(utf8); QTest::newRow("http://www.w3.org/2001/06/utf-8-wrong/UTF-8-test.html 5.2.8") << utf8 << str << -1; // 5.3.1 - non-character code @@ -1541,7 +1523,7 @@ void tst_QTextCodec::utf8Codec_data() utf8 += char(0xbf); utf8 += char(0xbe); //str = QChar(QChar::ReplacementCharacter); - str = QString::fromUtf8(utf8); + str = QChar(0xfffe); QTest::newRow("http://www.w3.org/2001/06/utf-8-wrong/UTF-8-test.html 5.3.1") << utf8 << str << -1; // 5.3.2 - non-character code @@ -1550,7 +1532,7 @@ void tst_QTextCodec::utf8Codec_data() utf8 += char(0xbf); utf8 += char(0xbf); //str = QChar(QChar::ReplacementCharacter); - str = QString::fromUtf8(utf8); + str = QChar(0xffff); QTest::newRow("http://www.w3.org/2001/06/utf-8-wrong/UTF-8-test.html 5.3.2") << utf8 << str << -1; } diff --git a/tests/auto/xml/sax/qxmlsimplereader/xmldocs/not-wf/sa/170.xml.ref b/tests/auto/xml/sax/qxmlsimplereader/xmldocs/not-wf/sa/170.xml.ref index eca786f688..87336aa00f 100644 --- a/tests/auto/xml/sax/qxmlsimplereader/xmldocs/not-wf/sa/170.xml.ref +++ b/tests/auto/xml/sax/qxmlsimplereader/xmldocs/not-wf/sa/170.xml.ref @@ -1,6 +1,6 @@ setDocumentLocator(locator={columnNumber=1, lineNumber=1}) startDocument() startElement(namespaceURI="", localName="doc", qName="doc", atts=[]) - characters(ch="�") + characters(ch="����") endElement(namespaceURI="", localName="doc", qName="doc") endDocument() -- cgit v1.2.3 From cd750c86d62152855d7f1105a5a4dd86d8ff8797 Mon Sep 17 00:00:00 2001 From: Thiago Macieira Date: Sat, 19 Oct 2013 23:04:47 -0400 Subject: Use the new UTF-8 codec in QJsonDocument The encoder is in qjsonwriter.cpp, which requires special handling for ASCII due to the use of escape sequences. The decoder is in qjsonparser.cpp, which only scan one character at a time. As a side-effect, the JSON parser now reports the UTF-8 error in the first character with error, instead of the last. This is probably what should have been expected. Change-Id: I52e5bc30d71466b6a36098b4150c61b2e385d8e9 Reviewed-by: Thiago Macieira --- tests/auto/corelib/json/tst_qtjson.cpp | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) (limited to 'tests') diff --git a/tests/auto/corelib/json/tst_qtjson.cpp b/tests/auto/corelib/json/tst_qtjson.cpp index a8534bf6f0..8ff6c8be6b 100644 --- a/tests/auto/corelib/json/tst_qtjson.cpp +++ b/tests/auto/corelib/json/tst_qtjson.cpp @@ -1546,7 +1546,7 @@ void tst_QtJson::fromJsonErrors() QJsonDocument doc = QJsonDocument::fromJson(json, &error); QVERIFY(doc.isEmpty()); QCOMPARE(error.error, QJsonParseError::IllegalUTF8String); - QCOMPARE(error.offset, 14); + QCOMPARE(error.offset, 12); } { QJsonParseError error; @@ -1570,7 +1570,7 @@ void tst_QtJson::fromJsonErrors() QJsonDocument doc = QJsonDocument::fromJson(json, &error); QVERIFY(doc.isEmpty()); QCOMPARE(error.error, QJsonParseError::IllegalUTF8String); - QCOMPARE(error.offset, 15); + QCOMPARE(error.offset, 13); } { QJsonParseError error; -- cgit v1.2.3 From 019588f30792132d9eca5dab11278547b287804e Mon Sep 17 00:00:00 2001 From: Frederik Gladhorn Date: Thu, 24 Oct 2013 20:10:37 +0200 Subject: Testlib: Add test duration to xml output [ChangeLog][QtTest] Added test duration to xml output. When running tests with xml output a new tag of the form is added to each test function and the test as a whole. Change-Id: Ibc4db066b6acf5fac6c578f5e5ca5ce4b5d8ea8e Reviewed-by: Sergio Ahumada Reviewed-by: Jason McDonald --- tests/auto/testlib/selftests/expected_assert.lightxml | 4 ++++ tests/auto/testlib/selftests/expected_assert.xml | 4 ++++ tests/auto/testlib/selftests/expected_badxml.lightxml | 6 ++++++ tests/auto/testlib/selftests/expected_badxml.xml | 6 ++++++ .../testlib/selftests/expected_benchlibcounting.lightxml | 6 ++++++ .../auto/testlib/selftests/expected_benchlibcounting.xml | 6 ++++++ .../selftests/expected_benchlibeventcounter.lightxml | 4 ++++ .../testlib/selftests/expected_benchlibeventcounter.xml | 4 ++++ .../selftests/expected_benchlibtickcounter.lightxml | 4 ++++ .../testlib/selftests/expected_benchlibtickcounter.xml | 4 ++++ .../testlib/selftests/expected_benchlibwalltime.lightxml | 6 ++++++ .../auto/testlib/selftests/expected_benchlibwalltime.xml | 6 ++++++ tests/auto/testlib/selftests/expected_cmptest.lightxml | 11 +++++++++++ tests/auto/testlib/selftests/expected_cmptest.xml | 11 +++++++++++ .../testlib/selftests/expected_commandlinedata.lightxml | 5 +++++ .../auto/testlib/selftests/expected_commandlinedata.xml | 5 +++++ tests/auto/testlib/selftests/expected_counting.lightxml | 16 ++++++++++++++++ tests/auto/testlib/selftests/expected_counting.xml | 16 ++++++++++++++++ tests/auto/testlib/selftests/expected_datatable.lightxml | 11 +++++++++++ tests/auto/testlib/selftests/expected_datatable.xml | 11 +++++++++++ tests/auto/testlib/selftests/expected_datetime.lightxml | 5 +++++ tests/auto/testlib/selftests/expected_datetime.xml | 5 +++++ .../testlib/selftests/expected_exceptionthrow.lightxml | 3 +++ tests/auto/testlib/selftests/expected_exceptionthrow.xml | 3 +++ .../auto/testlib/selftests/expected_expectfail.lightxml | 15 +++++++++++++++ tests/auto/testlib/selftests/expected_expectfail.xml | 15 +++++++++++++++ .../auto/testlib/selftests/expected_failcleanup.lightxml | 4 ++++ tests/auto/testlib/selftests/expected_failcleanup.xml | 4 ++++ tests/auto/testlib/selftests/expected_failinit.lightxml | 3 +++ tests/auto/testlib/selftests/expected_failinit.xml | 3 +++ .../testlib/selftests/expected_failinitdata.lightxml | 2 ++ tests/auto/testlib/selftests/expected_failinitdata.xml | 2 ++ .../auto/testlib/selftests/expected_fetchbogus.lightxml | 3 +++ tests/auto/testlib/selftests/expected_fetchbogus.xml | 3 +++ .../testlib/selftests/expected_findtestdata.lightxml | 4 ++++ tests/auto/testlib/selftests/expected_findtestdata.xml | 4 ++++ .../auto/testlib/selftests/expected_globaldata.lightxml | 7 +++++++ tests/auto/testlib/selftests/expected_globaldata.xml | 7 +++++++ .../auto/testlib/selftests/expected_longstring.lightxml | 4 ++++ tests/auto/testlib/selftests/expected_longstring.xml | 4 ++++ .../auto/testlib/selftests/expected_maxwarnings.lightxml | 4 ++++ tests/auto/testlib/selftests/expected_maxwarnings.xml | 4 ++++ .../auto/testlib/selftests/expected_singleskip.lightxml | 4 ++++ tests/auto/testlib/selftests/expected_singleskip.xml | 4 ++++ tests/auto/testlib/selftests/expected_skip.lightxml | 6 ++++++ tests/auto/testlib/selftests/expected_skip.xml | 6 ++++++ .../auto/testlib/selftests/expected_skipcleanup.lightxml | 4 ++++ tests/auto/testlib/selftests/expected_skipcleanup.xml | 4 ++++ tests/auto/testlib/selftests/expected_skipinit.lightxml | 3 +++ tests/auto/testlib/selftests/expected_skipinit.xml | 3 +++ .../testlib/selftests/expected_skipinitdata.lightxml | 2 ++ tests/auto/testlib/selftests/expected_skipinitdata.xml | 2 ++ tests/auto/testlib/selftests/expected_strcmp.lightxml | 9 +++++++++ tests/auto/testlib/selftests/expected_strcmp.xml | 9 +++++++++ tests/auto/testlib/selftests/expected_subtest.lightxml | 6 ++++++ tests/auto/testlib/selftests/expected_subtest.xml | 6 ++++++ tests/auto/testlib/selftests/expected_verbose1.lightxml | 16 ++++++++++++++++ tests/auto/testlib/selftests/expected_verbose1.xml | 16 ++++++++++++++++ tests/auto/testlib/selftests/expected_verbose2.lightxml | 16 ++++++++++++++++ tests/auto/testlib/selftests/expected_verbose2.xml | 16 ++++++++++++++++ .../selftests/expected_verifyexceptionthrown.lightxml | 12 ++++++++++++ .../testlib/selftests/expected_verifyexceptionthrown.xml | 12 ++++++++++++ tests/auto/testlib/selftests/expected_warnings.lightxml | 7 +++++++ tests/auto/testlib/selftests/expected_warnings.xml | 7 +++++++ tests/auto/testlib/selftests/expected_xunit.lightxml | 10 ++++++++++ tests/auto/testlib/selftests/expected_xunit.xml | 10 ++++++++++ tests/auto/testlib/selftests/tst_selftests.cpp | 6 ++++++ 67 files changed, 450 insertions(+) (limited to 'tests') diff --git a/tests/auto/testlib/selftests/expected_assert.lightxml b/tests/auto/testlib/selftests/expected_assert.lightxml index c2cc1da7ab..d2d4ae5153 100644 --- a/tests/auto/testlib/selftests/expected_assert.lightxml +++ b/tests/auto/testlib/selftests/expected_assert.lightxml @@ -4,9 +4,11 @@ + + @@ -15,4 +17,6 @@ + + diff --git a/tests/auto/testlib/selftests/expected_assert.xml b/tests/auto/testlib/selftests/expected_assert.xml index 8dc20628af..9e5ea760ae 100644 --- a/tests/auto/testlib/selftests/expected_assert.xml +++ b/tests/auto/testlib/selftests/expected_assert.xml @@ -6,9 +6,11 @@ + + @@ -17,5 +19,7 @@ + + diff --git a/tests/auto/testlib/selftests/expected_badxml.lightxml b/tests/auto/testlib/selftests/expected_badxml.lightxml index 222c396059..15981b12be 100644 --- a/tests/auto/testlib/selftests/expected_badxml.lightxml +++ b/tests/auto/testlib/selftests/expected_badxml.lightxml @@ -4,6 +4,7 @@ + @@ -70,6 +71,7 @@ " mixed ]]]> up > " in < the ]]]> hopes < of triggering "< ]]]> bugs]]> + @@ -100,12 +102,16 @@ + + + + diff --git a/tests/auto/testlib/selftests/expected_badxml.xml b/tests/auto/testlib/selftests/expected_badxml.xml index 4b180dbd01..c3330a6b97 100644 --- a/tests/auto/testlib/selftests/expected_badxml.xml +++ b/tests/auto/testlib/selftests/expected_badxml.xml @@ -6,6 +6,7 @@ + @@ -72,6 +73,7 @@ " mixed ]]]> up > " in < the ]]]> hopes < of triggering "< ]]]> bugs]]> + @@ -102,13 +104,17 @@ + + + + diff --git a/tests/auto/testlib/selftests/expected_benchlibcounting.lightxml b/tests/auto/testlib/selftests/expected_benchlibcounting.lightxml index f9e5924eef..08872be733 100644 --- a/tests/auto/testlib/selftests/expected_benchlibcounting.lightxml +++ b/tests/auto/testlib/selftests/expected_benchlibcounting.lightxml @@ -4,21 +4,27 @@ + + + + + + diff --git a/tests/auto/testlib/selftests/expected_benchlibcounting.xml b/tests/auto/testlib/selftests/expected_benchlibcounting.xml index f3e674e7a3..ee6fd98ef2 100644 --- a/tests/auto/testlib/selftests/expected_benchlibcounting.xml +++ b/tests/auto/testlib/selftests/expected_benchlibcounting.xml @@ -6,22 +6,28 @@ + + + + + + diff --git a/tests/auto/testlib/selftests/expected_benchlibeventcounter.lightxml b/tests/auto/testlib/selftests/expected_benchlibeventcounter.lightxml index 3cb59d209b..cba91a374f 100644 --- a/tests/auto/testlib/selftests/expected_benchlibeventcounter.lightxml +++ b/tests/auto/testlib/selftests/expected_benchlibeventcounter.lightxml @@ -4,6 +4,7 @@ + @@ -34,7 +35,10 @@ + + + diff --git a/tests/auto/testlib/selftests/expected_benchlibeventcounter.xml b/tests/auto/testlib/selftests/expected_benchlibeventcounter.xml index cead0adf8c..7d28975ead 100644 --- a/tests/auto/testlib/selftests/expected_benchlibeventcounter.xml +++ b/tests/auto/testlib/selftests/expected_benchlibeventcounter.xml @@ -6,6 +6,7 @@ + @@ -36,8 +37,11 @@ + + + diff --git a/tests/auto/testlib/selftests/expected_benchlibtickcounter.lightxml b/tests/auto/testlib/selftests/expected_benchlibtickcounter.lightxml index 665ba58689..97422240d9 100644 --- a/tests/auto/testlib/selftests/expected_benchlibtickcounter.lightxml +++ b/tests/auto/testlib/selftests/expected_benchlibtickcounter.lightxml @@ -4,11 +4,15 @@ + + + + diff --git a/tests/auto/testlib/selftests/expected_benchlibtickcounter.xml b/tests/auto/testlib/selftests/expected_benchlibtickcounter.xml index 695b8f2134..24c2e51084 100644 --- a/tests/auto/testlib/selftests/expected_benchlibtickcounter.xml +++ b/tests/auto/testlib/selftests/expected_benchlibtickcounter.xml @@ -6,12 +6,16 @@ + + + + diff --git a/tests/auto/testlib/selftests/expected_benchlibwalltime.lightxml b/tests/auto/testlib/selftests/expected_benchlibwalltime.lightxml index f9311e943e..b2e819b26d 100644 --- a/tests/auto/testlib/selftests/expected_benchlibwalltime.lightxml +++ b/tests/auto/testlib/selftests/expected_benchlibwalltime.lightxml @@ -4,19 +4,25 @@ + + + + + + diff --git a/tests/auto/testlib/selftests/expected_benchlibwalltime.xml b/tests/auto/testlib/selftests/expected_benchlibwalltime.xml index 41b39eb925..6ae355783a 100644 --- a/tests/auto/testlib/selftests/expected_benchlibwalltime.xml +++ b/tests/auto/testlib/selftests/expected_benchlibwalltime.xml @@ -6,20 +6,26 @@ + + + + + + diff --git a/tests/auto/testlib/selftests/expected_cmptest.lightxml b/tests/auto/testlib/selftests/expected_cmptest.lightxml index aebff4de61..a83a971d8a 100644 --- a/tests/auto/testlib/selftests/expected_cmptest.lightxml +++ b/tests/auto/testlib/selftests/expected_cmptest.lightxml @@ -4,12 +4,15 @@ + + + @@ -39,6 +42,7 @@ Actual (actual) : QVariant(PhonyClass,) Expected (expected): QVariant(PhonyClass,)]]> + @@ -77,6 +81,7 @@ Actual (opA) size: '1' Expected (opB) size: '12']]> + @@ -84,6 +89,7 @@ Actual (int1): '3' Expected (int2): '4']]> + @@ -91,6 +97,7 @@ Actual (double1): '1.5' Expected (double2): '1']]> + @@ -121,6 +128,7 @@ + @@ -157,7 +165,10 @@ + + + diff --git a/tests/auto/testlib/selftests/expected_cmptest.xml b/tests/auto/testlib/selftests/expected_cmptest.xml index 8a9f64d877..08a40fb466 100644 --- a/tests/auto/testlib/selftests/expected_cmptest.xml +++ b/tests/auto/testlib/selftests/expected_cmptest.xml @@ -6,12 +6,15 @@ + + + @@ -41,6 +44,7 @@ Actual (actual) : QVariant(PhonyClass,) Expected (expected): QVariant(PhonyClass,)]]> + @@ -79,6 +83,7 @@ Actual (opA) size: '1' Expected (opB) size: '12']]> + @@ -86,6 +91,7 @@ Actual (int1): '3' Expected (int2): '4']]> + @@ -93,6 +99,7 @@ Actual (double1): '1.5' Expected (double2): '1']]> + @@ -123,6 +130,7 @@ + @@ -159,8 +167,11 @@ + + + diff --git a/tests/auto/testlib/selftests/expected_commandlinedata.lightxml b/tests/auto/testlib/selftests/expected_commandlinedata.lightxml index 65062970f0..c11017f022 100644 --- a/tests/auto/testlib/selftests/expected_commandlinedata.lightxml +++ b/tests/auto/testlib/selftests/expected_commandlinedata.lightxml @@ -4,6 +4,7 @@ + @@ -41,6 +42,7 @@ + @@ -50,7 +52,10 @@ + + + diff --git a/tests/auto/testlib/selftests/expected_commandlinedata.xml b/tests/auto/testlib/selftests/expected_commandlinedata.xml index 70ad6bbe0d..20dc0c6a7c 100644 --- a/tests/auto/testlib/selftests/expected_commandlinedata.xml +++ b/tests/auto/testlib/selftests/expected_commandlinedata.xml @@ -6,6 +6,7 @@ + @@ -43,6 +44,7 @@ + @@ -52,8 +54,11 @@ + + + diff --git a/tests/auto/testlib/selftests/expected_counting.lightxml b/tests/auto/testlib/selftests/expected_counting.lightxml index 5b0e947340..e5fe1ee3cf 100644 --- a/tests/auto/testlib/selftests/expected_counting.lightxml +++ b/tests/auto/testlib/selftests/expected_counting.lightxml @@ -4,6 +4,7 @@ + @@ -12,6 +13,7 @@ + @@ -21,6 +23,7 @@ + @@ -30,6 +33,7 @@ + @@ -39,6 +43,7 @@ + @@ -49,6 +54,7 @@ + @@ -59,6 +65,7 @@ + @@ -68,6 +75,7 @@ + @@ -78,6 +86,7 @@ + @@ -88,6 +97,7 @@ + @@ -100,6 +110,7 @@ + @@ -116,6 +127,7 @@ + @@ -128,6 +140,7 @@ + @@ -144,7 +157,10 @@ + + + diff --git a/tests/auto/testlib/selftests/expected_counting.xml b/tests/auto/testlib/selftests/expected_counting.xml index 661a617aa0..e015dddcc6 100644 --- a/tests/auto/testlib/selftests/expected_counting.xml +++ b/tests/auto/testlib/selftests/expected_counting.xml @@ -6,6 +6,7 @@ + @@ -14,6 +15,7 @@ + @@ -23,6 +25,7 @@ + @@ -32,6 +35,7 @@ + @@ -41,6 +45,7 @@ + @@ -51,6 +56,7 @@ + @@ -61,6 +67,7 @@ + @@ -70,6 +77,7 @@ + @@ -80,6 +88,7 @@ + @@ -90,6 +99,7 @@ + @@ -102,6 +112,7 @@ + @@ -118,6 +129,7 @@ + @@ -130,6 +142,7 @@ + @@ -146,8 +159,11 @@ + + + diff --git a/tests/auto/testlib/selftests/expected_datatable.lightxml b/tests/auto/testlib/selftests/expected_datatable.lightxml index b1442cfc10..6cc2d1c46f 100644 --- a/tests/auto/testlib/selftests/expected_datatable.lightxml +++ b/tests/auto/testlib/selftests/expected_datatable.lightxml @@ -4,12 +4,15 @@ + + + @@ -27,6 +30,7 @@ + @@ -49,6 +53,7 @@ + @@ -67,6 +72,7 @@ + @@ -85,6 +91,7 @@ + @@ -103,6 +110,7 @@ + @@ -125,7 +133,10 @@ + + + diff --git a/tests/auto/testlib/selftests/expected_datatable.xml b/tests/auto/testlib/selftests/expected_datatable.xml index c98e1ee44a..79963db0a4 100644 --- a/tests/auto/testlib/selftests/expected_datatable.xml +++ b/tests/auto/testlib/selftests/expected_datatable.xml @@ -6,12 +6,15 @@ + + + @@ -29,6 +32,7 @@ + @@ -51,6 +55,7 @@ + @@ -69,6 +74,7 @@ + @@ -87,6 +93,7 @@ + @@ -105,6 +112,7 @@ + @@ -127,8 +135,11 @@ + + + diff --git a/tests/auto/testlib/selftests/expected_datetime.lightxml b/tests/auto/testlib/selftests/expected_datetime.lightxml index 0594f4627d..02c60d04f9 100644 --- a/tests/auto/testlib/selftests/expected_datetime.lightxml +++ b/tests/auto/testlib/selftests/expected_datetime.lightxml @@ -4,6 +4,7 @@ + @@ -11,6 +12,7 @@ Actual (local): 2000/05/03 04:03:04.000[local time] Expected (utc) : 2000/05/03 04:03:04.000[UTC]]]> + @@ -31,7 +33,10 @@ + + + diff --git a/tests/auto/testlib/selftests/expected_datetime.xml b/tests/auto/testlib/selftests/expected_datetime.xml index c132a1fcf6..03aec4430e 100644 --- a/tests/auto/testlib/selftests/expected_datetime.xml +++ b/tests/auto/testlib/selftests/expected_datetime.xml @@ -6,6 +6,7 @@ + @@ -13,6 +14,7 @@ Actual (local): 2000/05/03 04:03:04.000[local time] Expected (utc) : 2000/05/03 04:03:04.000[UTC]]]> + @@ -33,8 +35,11 @@ + + + diff --git a/tests/auto/testlib/selftests/expected_exceptionthrow.lightxml b/tests/auto/testlib/selftests/expected_exceptionthrow.lightxml index 81c33cb26e..6c9675a2aa 100644 --- a/tests/auto/testlib/selftests/expected_exceptionthrow.lightxml +++ b/tests/auto/testlib/selftests/expected_exceptionthrow.lightxml @@ -4,9 +4,12 @@ + + + diff --git a/tests/auto/testlib/selftests/expected_exceptionthrow.xml b/tests/auto/testlib/selftests/expected_exceptionthrow.xml index 015f7f5f4b..87d9d2d431 100644 --- a/tests/auto/testlib/selftests/expected_exceptionthrow.xml +++ b/tests/auto/testlib/selftests/expected_exceptionthrow.xml @@ -6,10 +6,13 @@ + + + diff --git a/tests/auto/testlib/selftests/expected_expectfail.lightxml b/tests/auto/testlib/selftests/expected_expectfail.lightxml index 3f262c6228..e5fcca5875 100644 --- a/tests/auto/testlib/selftests/expected_expectfail.lightxml +++ b/tests/auto/testlib/selftests/expected_expectfail.lightxml @@ -4,6 +4,7 @@ + @@ -16,6 +17,7 @@ + @@ -25,11 +27,13 @@ + + @@ -39,6 +43,7 @@ + @@ -61,6 +66,7 @@ + @@ -83,11 +89,13 @@ + + @@ -104,6 +112,7 @@ + @@ -114,11 +123,13 @@ + + @@ -128,6 +139,7 @@ + @@ -137,7 +149,10 @@ + + + diff --git a/tests/auto/testlib/selftests/expected_expectfail.xml b/tests/auto/testlib/selftests/expected_expectfail.xml index 31b61d8db2..14fee2129e 100644 --- a/tests/auto/testlib/selftests/expected_expectfail.xml +++ b/tests/auto/testlib/selftests/expected_expectfail.xml @@ -6,6 +6,7 @@ + @@ -18,6 +19,7 @@ + @@ -27,11 +29,13 @@ + + @@ -41,6 +45,7 @@ + @@ -63,6 +68,7 @@ + @@ -85,11 +91,13 @@ + + @@ -106,6 +114,7 @@ + @@ -116,11 +125,13 @@ + + @@ -130,6 +141,7 @@ + @@ -139,8 +151,11 @@ + + + diff --git a/tests/auto/testlib/selftests/expected_failcleanup.lightxml b/tests/auto/testlib/selftests/expected_failcleanup.lightxml index 4ceff4eba8..cfc18ef5da 100644 --- a/tests/auto/testlib/selftests/expected_failcleanup.lightxml +++ b/tests/auto/testlib/selftests/expected_failcleanup.lightxml @@ -4,12 +4,16 @@ + + + + diff --git a/tests/auto/testlib/selftests/expected_failcleanup.xml b/tests/auto/testlib/selftests/expected_failcleanup.xml index 79a66771cd..3aa7aa265d 100644 --- a/tests/auto/testlib/selftests/expected_failcleanup.xml +++ b/tests/auto/testlib/selftests/expected_failcleanup.xml @@ -6,13 +6,17 @@ + + + + diff --git a/tests/auto/testlib/selftests/expected_failinit.lightxml b/tests/auto/testlib/selftests/expected_failinit.lightxml index e10b3a476b..c0d193998d 100644 --- a/tests/auto/testlib/selftests/expected_failinit.lightxml +++ b/tests/auto/testlib/selftests/expected_failinit.lightxml @@ -6,7 +6,10 @@ + + + diff --git a/tests/auto/testlib/selftests/expected_failinit.xml b/tests/auto/testlib/selftests/expected_failinit.xml index 3911253f61..70ad613f3f 100644 --- a/tests/auto/testlib/selftests/expected_failinit.xml +++ b/tests/auto/testlib/selftests/expected_failinit.xml @@ -8,8 +8,11 @@ + + + diff --git a/tests/auto/testlib/selftests/expected_failinitdata.lightxml b/tests/auto/testlib/selftests/expected_failinitdata.lightxml index 743bc0d045..285471470f 100644 --- a/tests/auto/testlib/selftests/expected_failinitdata.lightxml +++ b/tests/auto/testlib/selftests/expected_failinitdata.lightxml @@ -6,4 +6,6 @@ + + diff --git a/tests/auto/testlib/selftests/expected_failinitdata.xml b/tests/auto/testlib/selftests/expected_failinitdata.xml index 6d5b386a3e..e86e102202 100644 --- a/tests/auto/testlib/selftests/expected_failinitdata.xml +++ b/tests/auto/testlib/selftests/expected_failinitdata.xml @@ -8,5 +8,7 @@ + + diff --git a/tests/auto/testlib/selftests/expected_fetchbogus.lightxml b/tests/auto/testlib/selftests/expected_fetchbogus.lightxml index 1812c0e6b5..c5587cf031 100644 --- a/tests/auto/testlib/selftests/expected_fetchbogus.lightxml +++ b/tests/auto/testlib/selftests/expected_fetchbogus.lightxml @@ -4,6 +4,7 @@ + @@ -14,4 +15,6 @@ + + diff --git a/tests/auto/testlib/selftests/expected_fetchbogus.xml b/tests/auto/testlib/selftests/expected_fetchbogus.xml index ee33a85dc4..40295bdebc 100644 --- a/tests/auto/testlib/selftests/expected_fetchbogus.xml +++ b/tests/auto/testlib/selftests/expected_fetchbogus.xml @@ -6,6 +6,7 @@ + @@ -16,5 +17,7 @@ + + diff --git a/tests/auto/testlib/selftests/expected_findtestdata.lightxml b/tests/auto/testlib/selftests/expected_findtestdata.lightxml index bf69bcb845..4c1c7298ed 100644 --- a/tests/auto/testlib/selftests/expected_findtestdata.lightxml +++ b/tests/auto/testlib/selftests/expected_findtestdata.lightxml @@ -4,13 +4,17 @@ + + + + diff --git a/tests/auto/testlib/selftests/expected_findtestdata.xml b/tests/auto/testlib/selftests/expected_findtestdata.xml index 8770730c76..b1f33abaf6 100644 --- a/tests/auto/testlib/selftests/expected_findtestdata.xml +++ b/tests/auto/testlib/selftests/expected_findtestdata.xml @@ -6,14 +6,18 @@ + + + + diff --git a/tests/auto/testlib/selftests/expected_globaldata.lightxml b/tests/auto/testlib/selftests/expected_globaldata.lightxml index 86418a4935..fd128d2c61 100644 --- a/tests/auto/testlib/selftests/expected_globaldata.lightxml +++ b/tests/auto/testlib/selftests/expected_globaldata.lightxml @@ -7,6 +7,7 @@ + @@ -85,12 +86,14 @@ + + @@ -117,6 +120,7 @@ + @@ -176,10 +180,13 @@ + + + diff --git a/tests/auto/testlib/selftests/expected_globaldata.xml b/tests/auto/testlib/selftests/expected_globaldata.xml index 10fd4fd571..0867619fde 100644 --- a/tests/auto/testlib/selftests/expected_globaldata.xml +++ b/tests/auto/testlib/selftests/expected_globaldata.xml @@ -9,6 +9,7 @@ + @@ -87,12 +88,14 @@ + + @@ -119,6 +122,7 @@ + @@ -178,11 +182,14 @@ + + + diff --git a/tests/auto/testlib/selftests/expected_longstring.lightxml b/tests/auto/testlib/selftests/expected_longstring.lightxml index 2b3a585bf2..45c6d3f78d 100644 --- a/tests/auto/testlib/selftests/expected_longstring.lightxml +++ b/tests/auto/testlib/selftests/expected_longstring.lightxml @@ -4,6 +4,7 @@ + @@ -17,7 +18,10 @@ Curabitur ligula sapien, tincidunt non, euismod vitae, posuere imperdiet, leo. M Aenean posuere, tortor sed cursus feugiat, nunc augue blandit nunc, eu sollicitudin urna dolor sagittis lacus. Donec elit libero, sodales nec, volutpat a, suscipit non, turpis. Nullam sagittis. Suspendisse pulvinar, augue ac venenatis condimentum, sem libero volutpat nibh, nec pellentesque velit pede quis nunc. Vestibulum ante ipsum primis in faucibus orci luctus et ultrices posuere cubilia Curae; Fusce id purus. Ut varius tincidunt libero. Phasellus dolor. Maecenas vestibulum mollis diam. Pellentesque ut neque. Pellentesque habitant morbi tristique senectus et netus et malesuada fames ac turpis egestas.]]> + + + diff --git a/tests/auto/testlib/selftests/expected_longstring.xml b/tests/auto/testlib/selftests/expected_longstring.xml index dd60dcd94c..efc29d6def 100644 --- a/tests/auto/testlib/selftests/expected_longstring.xml +++ b/tests/auto/testlib/selftests/expected_longstring.xml @@ -6,6 +6,7 @@ + @@ -19,8 +20,11 @@ Curabitur ligula sapien, tincidunt non, euismod vitae, posuere imperdiet, leo. M Aenean posuere, tortor sed cursus feugiat, nunc augue blandit nunc, eu sollicitudin urna dolor sagittis lacus. Donec elit libero, sodales nec, volutpat a, suscipit non, turpis. Nullam sagittis. Suspendisse pulvinar, augue ac venenatis condimentum, sem libero volutpat nibh, nec pellentesque velit pede quis nunc. Vestibulum ante ipsum primis in faucibus orci luctus et ultrices posuere cubilia Curae; Fusce id purus. Ut varius tincidunt libero. Phasellus dolor. Maecenas vestibulum mollis diam. Pellentesque ut neque. Pellentesque habitant morbi tristique senectus et netus et malesuada fames ac turpis egestas.]]> + + + diff --git a/tests/auto/testlib/selftests/expected_maxwarnings.lightxml b/tests/auto/testlib/selftests/expected_maxwarnings.lightxml index 054108fe6d..ce6d828eb2 100644 --- a/tests/auto/testlib/selftests/expected_maxwarnings.lightxml +++ b/tests/auto/testlib/selftests/expected_maxwarnings.lightxml @@ -4,6 +4,7 @@ + @@ -6013,7 +6014,10 @@ + + + diff --git a/tests/auto/testlib/selftests/expected_maxwarnings.xml b/tests/auto/testlib/selftests/expected_maxwarnings.xml index d5845ebf1d..758af9d6d5 100644 --- a/tests/auto/testlib/selftests/expected_maxwarnings.xml +++ b/tests/auto/testlib/selftests/expected_maxwarnings.xml @@ -6,6 +6,7 @@ + @@ -6015,8 +6016,11 @@ + + + diff --git a/tests/auto/testlib/selftests/expected_singleskip.lightxml b/tests/auto/testlib/selftests/expected_singleskip.lightxml index 0581f8d974..685396a243 100644 --- a/tests/auto/testlib/selftests/expected_singleskip.lightxml +++ b/tests/auto/testlib/selftests/expected_singleskip.lightxml @@ -4,12 +4,16 @@ + + + + diff --git a/tests/auto/testlib/selftests/expected_singleskip.xml b/tests/auto/testlib/selftests/expected_singleskip.xml index 7ebffb04cb..c10626ca41 100644 --- a/tests/auto/testlib/selftests/expected_singleskip.xml +++ b/tests/auto/testlib/selftests/expected_singleskip.xml @@ -6,13 +6,17 @@ + + + + diff --git a/tests/auto/testlib/selftests/expected_skip.lightxml b/tests/auto/testlib/selftests/expected_skip.lightxml index 44428fbf3c..408bc44871 100644 --- a/tests/auto/testlib/selftests/expected_skip.lightxml +++ b/tests/auto/testlib/selftests/expected_skip.lightxml @@ -4,16 +4,19 @@ + + + @@ -27,7 +30,10 @@ + + + diff --git a/tests/auto/testlib/selftests/expected_skip.xml b/tests/auto/testlib/selftests/expected_skip.xml index a4e6bc96fe..b220722b6c 100644 --- a/tests/auto/testlib/selftests/expected_skip.xml +++ b/tests/auto/testlib/selftests/expected_skip.xml @@ -6,16 +6,19 @@ + + + @@ -29,8 +32,11 @@ + + + diff --git a/tests/auto/testlib/selftests/expected_skipcleanup.lightxml b/tests/auto/testlib/selftests/expected_skipcleanup.lightxml index 14ce937497..49c9d148f5 100644 --- a/tests/auto/testlib/selftests/expected_skipcleanup.lightxml +++ b/tests/auto/testlib/selftests/expected_skipcleanup.lightxml @@ -4,12 +4,16 @@ + + + + diff --git a/tests/auto/testlib/selftests/expected_skipcleanup.xml b/tests/auto/testlib/selftests/expected_skipcleanup.xml index 77a02a7d65..0bf1fe53a3 100644 --- a/tests/auto/testlib/selftests/expected_skipcleanup.xml +++ b/tests/auto/testlib/selftests/expected_skipcleanup.xml @@ -6,13 +6,17 @@ + + + + diff --git a/tests/auto/testlib/selftests/expected_skipinit.lightxml b/tests/auto/testlib/selftests/expected_skipinit.lightxml index 4150838d2f..e06c745205 100644 --- a/tests/auto/testlib/selftests/expected_skipinit.lightxml +++ b/tests/auto/testlib/selftests/expected_skipinit.lightxml @@ -6,7 +6,10 @@ + + + diff --git a/tests/auto/testlib/selftests/expected_skipinit.xml b/tests/auto/testlib/selftests/expected_skipinit.xml index d9a595192e..6a62b93614 100644 --- a/tests/auto/testlib/selftests/expected_skipinit.xml +++ b/tests/auto/testlib/selftests/expected_skipinit.xml @@ -8,8 +8,11 @@ + + + diff --git a/tests/auto/testlib/selftests/expected_skipinitdata.lightxml b/tests/auto/testlib/selftests/expected_skipinitdata.lightxml index 051292f04b..41abd5dccd 100644 --- a/tests/auto/testlib/selftests/expected_skipinitdata.lightxml +++ b/tests/auto/testlib/selftests/expected_skipinitdata.lightxml @@ -6,4 +6,6 @@ + + diff --git a/tests/auto/testlib/selftests/expected_skipinitdata.xml b/tests/auto/testlib/selftests/expected_skipinitdata.xml index 8c5fbd8fc4..8efe12195e 100644 --- a/tests/auto/testlib/selftests/expected_skipinitdata.xml +++ b/tests/auto/testlib/selftests/expected_skipinitdata.xml @@ -8,5 +8,7 @@ + + diff --git a/tests/auto/testlib/selftests/expected_strcmp.lightxml b/tests/auto/testlib/selftests/expected_strcmp.lightxml index 6ad7e7b997..f0d266d400 100644 --- a/tests/auto/testlib/selftests/expected_strcmp.lightxml +++ b/tests/auto/testlib/selftests/expected_strcmp.lightxml @@ -4,9 +4,11 @@ + + @@ -23,6 +25,7 @@ Actual (a): 42 42 42 42 42 42 42 42 42 42 42 42 42 42 42 42 42 42 42 42 42 42 42 42 42 42 42 42 42 42 42 42 42 42 42 42 42 42 42 42 42 42 42 42 42 42 42 42 42 42 ... Expected (b): 41 41 41 41 41 41 41 41 41 41 41 41 41 41 41 41 41 41 41 41 41 41 41 41 41 41 41 41 41 41 41 41 41 41 41 41 41 41 41 41 41 41 41 41 41 41 41 41 41 41 ...]]> + @@ -30,6 +33,7 @@ Actual (QByteArray("abc")): 61 62 63 Expected (QByteArray("cba")): 63 62 61]]> + @@ -37,6 +41,7 @@ Actual (QByteArray("foo")): 66 6F 6F Expected (QByteArray()) : ]]> + @@ -44,6 +49,7 @@ Actual (QByteArray("")) : Expected (QByteArray("foo")): 66 6F 6F]]> + @@ -51,7 +57,10 @@ Actual (QByteArray("6")): 36 Expected (QByteArray("7")): 37]]> + + + diff --git a/tests/auto/testlib/selftests/expected_strcmp.xml b/tests/auto/testlib/selftests/expected_strcmp.xml index 72ecd4277a..20ffee0611 100644 --- a/tests/auto/testlib/selftests/expected_strcmp.xml +++ b/tests/auto/testlib/selftests/expected_strcmp.xml @@ -6,9 +6,11 @@ + + @@ -25,6 +27,7 @@ Actual (a): 42 42 42 42 42 42 42 42 42 42 42 42 42 42 42 42 42 42 42 42 42 42 42 42 42 42 42 42 42 42 42 42 42 42 42 42 42 42 42 42 42 42 42 42 42 42 42 42 42 42 ... Expected (b): 41 41 41 41 41 41 41 41 41 41 41 41 41 41 41 41 41 41 41 41 41 41 41 41 41 41 41 41 41 41 41 41 41 41 41 41 41 41 41 41 41 41 41 41 41 41 41 41 41 41 ...]]> + @@ -32,6 +35,7 @@ Actual (QByteArray("abc")): 61 62 63 Expected (QByteArray("cba")): 63 62 61]]> + @@ -39,6 +43,7 @@ Actual (QByteArray("foo")): 66 6F 6F Expected (QByteArray()) : ]]> + @@ -46,6 +51,7 @@ Actual (QByteArray("")) : Expected (QByteArray("foo")): 66 6F 6F]]> + @@ -53,8 +59,11 @@ Actual (QByteArray("6")): 36 Expected (QByteArray("7")): 37]]> + + + diff --git a/tests/auto/testlib/selftests/expected_subtest.lightxml b/tests/auto/testlib/selftests/expected_subtest.lightxml index 40a14663ba..90cfacbe0b 100644 --- a/tests/auto/testlib/selftests/expected_subtest.lightxml +++ b/tests/auto/testlib/selftests/expected_subtest.lightxml @@ -7,6 +7,7 @@ + @@ -19,6 +20,7 @@ + @@ -84,6 +86,7 @@ + @@ -147,10 +150,13 @@ + + + diff --git a/tests/auto/testlib/selftests/expected_subtest.xml b/tests/auto/testlib/selftests/expected_subtest.xml index 58fda7222e..cda4df01f3 100644 --- a/tests/auto/testlib/selftests/expected_subtest.xml +++ b/tests/auto/testlib/selftests/expected_subtest.xml @@ -9,6 +9,7 @@ + @@ -21,6 +22,7 @@ + @@ -86,6 +88,7 @@ + @@ -149,11 +152,14 @@ + + + diff --git a/tests/auto/testlib/selftests/expected_verbose1.lightxml b/tests/auto/testlib/selftests/expected_verbose1.lightxml index 3daa1231fe..45dca139fa 100644 --- a/tests/auto/testlib/selftests/expected_verbose1.lightxml +++ b/tests/auto/testlib/selftests/expected_verbose1.lightxml @@ -4,6 +4,7 @@ + @@ -12,6 +13,7 @@ + @@ -21,6 +23,7 @@ + @@ -30,6 +33,7 @@ + @@ -39,6 +43,7 @@ + @@ -49,6 +54,7 @@ + @@ -59,6 +65,7 @@ + @@ -68,6 +75,7 @@ + @@ -78,6 +86,7 @@ + @@ -88,6 +97,7 @@ + @@ -100,6 +110,7 @@ + @@ -116,6 +127,7 @@ + @@ -128,6 +140,7 @@ + @@ -144,7 +157,10 @@ + + + diff --git a/tests/auto/testlib/selftests/expected_verbose1.xml b/tests/auto/testlib/selftests/expected_verbose1.xml index 7da3b42130..7a182183c1 100644 --- a/tests/auto/testlib/selftests/expected_verbose1.xml +++ b/tests/auto/testlib/selftests/expected_verbose1.xml @@ -6,6 +6,7 @@ + @@ -14,6 +15,7 @@ + @@ -23,6 +25,7 @@ + @@ -32,6 +35,7 @@ + @@ -41,6 +45,7 @@ + @@ -51,6 +56,7 @@ + @@ -61,6 +67,7 @@ + @@ -70,6 +77,7 @@ + @@ -80,6 +88,7 @@ + @@ -90,6 +99,7 @@ + @@ -102,6 +112,7 @@ + @@ -118,6 +129,7 @@ + @@ -130,6 +142,7 @@ + @@ -146,8 +159,11 @@ + + + diff --git a/tests/auto/testlib/selftests/expected_verbose2.lightxml b/tests/auto/testlib/selftests/expected_verbose2.lightxml index 44b79fd8ba..0ead76884c 100644 --- a/tests/auto/testlib/selftests/expected_verbose2.lightxml +++ b/tests/auto/testlib/selftests/expected_verbose2.lightxml @@ -4,6 +4,7 @@ + @@ -28,6 +29,7 @@ + @@ -45,6 +47,7 @@ + @@ -66,6 +69,7 @@ + @@ -83,6 +87,7 @@ + @@ -93,6 +98,7 @@ + @@ -107,6 +113,7 @@ + @@ -128,6 +135,7 @@ + @@ -142,6 +150,7 @@ + @@ -160,6 +169,7 @@ + @@ -172,6 +182,7 @@ + @@ -188,6 +199,7 @@ + @@ -200,6 +212,7 @@ + @@ -216,7 +229,10 @@ + + + diff --git a/tests/auto/testlib/selftests/expected_verbose2.xml b/tests/auto/testlib/selftests/expected_verbose2.xml index 542372327c..6d592f4a52 100644 --- a/tests/auto/testlib/selftests/expected_verbose2.xml +++ b/tests/auto/testlib/selftests/expected_verbose2.xml @@ -6,6 +6,7 @@ + @@ -30,6 +31,7 @@ + @@ -47,6 +49,7 @@ + @@ -68,6 +71,7 @@ + @@ -85,6 +89,7 @@ + @@ -95,6 +100,7 @@ + @@ -109,6 +115,7 @@ + @@ -130,6 +137,7 @@ + @@ -144,6 +152,7 @@ + @@ -162,6 +171,7 @@ + @@ -174,6 +184,7 @@ + @@ -190,6 +201,7 @@ + @@ -202,6 +214,7 @@ + @@ -218,8 +231,11 @@ + + + diff --git a/tests/auto/testlib/selftests/expected_verifyexceptionthrown.lightxml b/tests/auto/testlib/selftests/expected_verifyexceptionthrown.lightxml index 3118eb628e..fb8f61503e 100644 --- a/tests/auto/testlib/selftests/expected_verifyexceptionthrown.lightxml +++ b/tests/auto/testlib/selftests/expected_verifyexceptionthrown.lightxml @@ -4,46 +4,58 @@ + + + + + + + + + + + + diff --git a/tests/auto/testlib/selftests/expected_verifyexceptionthrown.xml b/tests/auto/testlib/selftests/expected_verifyexceptionthrown.xml index a533934d4b..a89528cfb8 100644 --- a/tests/auto/testlib/selftests/expected_verifyexceptionthrown.xml +++ b/tests/auto/testlib/selftests/expected_verifyexceptionthrown.xml @@ -6,47 +6,59 @@ + + + + + + + + + + + + diff --git a/tests/auto/testlib/selftests/expected_warnings.lightxml b/tests/auto/testlib/selftests/expected_warnings.lightxml index 2ad9e97449..bbc96b7010 100644 --- a/tests/auto/testlib/selftests/expected_warnings.lightxml +++ b/tests/auto/testlib/selftests/expected_warnings.lightxml @@ -4,6 +4,7 @@ + @@ -31,6 +32,7 @@ + @@ -42,6 +44,7 @@ + @@ -50,6 +53,7 @@ + @@ -76,7 +80,10 @@ + + + diff --git a/tests/auto/testlib/selftests/expected_warnings.xml b/tests/auto/testlib/selftests/expected_warnings.xml index 14a45ca4fd..acb80e4f2a 100644 --- a/tests/auto/testlib/selftests/expected_warnings.xml +++ b/tests/auto/testlib/selftests/expected_warnings.xml @@ -6,6 +6,7 @@ + @@ -33,6 +34,7 @@ + @@ -44,6 +46,7 @@ + @@ -52,6 +55,7 @@ + @@ -78,8 +82,11 @@ + + + diff --git a/tests/auto/testlib/selftests/expected_xunit.lightxml b/tests/auto/testlib/selftests/expected_xunit.lightxml index b9194ce41f..6660cf4e7a 100644 --- a/tests/auto/testlib/selftests/expected_xunit.lightxml +++ b/tests/auto/testlib/selftests/expected_xunit.lightxml @@ -4,12 +4,14 @@ + + @@ -20,34 +22,42 @@ Actual (2): 2 Expected (3): 3]]> + + + + + + + + diff --git a/tests/auto/testlib/selftests/expected_xunit.xml b/tests/auto/testlib/selftests/expected_xunit.xml index 948023e32c..af9fe1f502 100644 --- a/tests/auto/testlib/selftests/expected_xunit.xml +++ b/tests/auto/testlib/selftests/expected_xunit.xml @@ -6,12 +6,14 @@ + + @@ -22,35 +24,43 @@ Actual (2): 2 Expected (3): 3]]> + + + + + + + + diff --git a/tests/auto/testlib/selftests/tst_selftests.cpp b/tests/auto/testlib/selftests/tst_selftests.cpp index 15aec85bdf..97083d8d61 100644 --- a/tests/auto/testlib/selftests/tst_selftests.cpp +++ b/tests/auto/testlib/selftests/tst_selftests.cpp @@ -68,6 +68,7 @@ private: QList allLoggerSets() const; QTemporaryDir tempDir; + QRegularExpression durationRegExp; }; struct BenchmarkResult @@ -301,6 +302,7 @@ QList tst_Selftests::allLoggerSets() const tst_Selftests::tst_Selftests() : tempDir(QDir::tempPath() + "/tst_selftests.XXXXXX") + , durationRegExp("") {} void tst_Selftests::initTestCase() @@ -714,6 +716,10 @@ void tst_Selftests::doRunSubTest(QString const& subdir, QStringList const& logge QVERIFY2(error.isEmpty(), qPrintable(QString("Expected line didn't parse as benchmark result: %1\nLine: %2").arg(error).arg(expected))); QCOMPARE(actualResult, expectedResult); + } else if (line.startsWith(" Date: Sun, 12 Jan 2014 11:45:56 +0200 Subject: Update the internal CLDR tables up to v.24 Change-Id: I9c0b110e36dd80c6a0b7275aa13bc548419aca9c Reviewed-by: Lars Knoll Reviewed-by: John Layt Reviewed-by: Mehdi Fekari --- tests/auto/corelib/tools/qlocale/tst_qlocale.cpp | 24 ++++++++++++------------ 1 file changed, 12 insertions(+), 12 deletions(-) (limited to 'tests') diff --git a/tests/auto/corelib/tools/qlocale/tst_qlocale.cpp b/tests/auto/corelib/tools/qlocale/tst_qlocale.cpp index 1bac5f39e7..23ee807774 100644 --- a/tests/auto/corelib/tools/qlocale/tst_qlocale.cpp +++ b/tests/auto/corelib/tools/qlocale/tst_qlocale.cpp @@ -1172,9 +1172,9 @@ void tst_QLocale::formatDateTime_data() QTest::newRow("5no_NO") << "no_NO" << QDateTime(QDate(1974, 1, 1), QTime(15, 14, 13)) << "dd/MM/yyy z" << "01/01/74y 0"; QTest::newRow("6no_NO") << "no_NO" << QDateTime(QDate(1974, 12, 2), QTime(15, 14, 13)) - << "ddd/MMM/yy AP" << "man./des./74 PM"; + << "ddd/MMM/yy AP" << "man./des./74 P.M."; QTest::newRow("7no_NO") << "no_NO" << QDateTime(QDate(1974, 12, 2), QTime(15, 14, 13)) - << "dddd/MMMM/y apa" << "mandag/desember/y pmpm"; + << "dddd/MMMM/y apa" << "mandag/desember/y p.m.p.m."; QTest::newRow("8no_NO") << "no_NO" << QDateTime(QDate(1974, 12, 2), QTime(15, 14, 13)) << "ddddd/MMMMM/yy ss" << "mandag2/desember12/74 13"; QTest::newRow("9no_NO") << "no_NO" << QDateTime(QDate(1974, 12, 1), QTime(15, 14, 13)) @@ -1864,8 +1864,8 @@ void tst_QLocale::ampm() QCOMPARE(id.pmText(), QLatin1String("PM")); QLocale ta("ta_LK"); - QCOMPARE(ta.amText(), QLatin1String("AM")); - QCOMPARE(ta.pmText(), QLatin1String("PM")); + QCOMPARE(ta.amText(), QString::fromUtf8("முற்பகல்")); + QCOMPARE(ta.pmText(), QString::fromUtf8("பிற்பகல்")); } void tst_QLocale::dateFormat() @@ -1897,9 +1897,9 @@ void tst_QLocale::timeFormat() QCOMPARE(c.timeFormat(QLocale::NarrowFormat), c.timeFormat(QLocale::ShortFormat)); const QLocale no("no_NO"); - QCOMPARE(no.timeFormat(QLocale::NarrowFormat), QLatin1String("HH:mm")); - QCOMPARE(no.timeFormat(QLocale::ShortFormat), QLatin1String("HH:mm")); - QCOMPARE(no.timeFormat(QLocale::LongFormat), QLatin1String("'kl'. HH:mm:ss t")); + QCOMPARE(no.timeFormat(QLocale::NarrowFormat), QLatin1String("HH.mm")); + QCOMPARE(no.timeFormat(QLocale::ShortFormat), QLatin1String("HH.mm")); + QCOMPARE(no.timeFormat(QLocale::LongFormat), QLatin1String("HH.mm.ss t")); const QLocale id("id_ID"); QCOMPARE(id.timeFormat(QLocale::ShortFormat), QLatin1String("HH.mm")); @@ -1921,9 +1921,9 @@ void tst_QLocale::dateTimeFormat() QCOMPARE(c.dateTimeFormat(QLocale::NarrowFormat), c.dateTimeFormat(QLocale::ShortFormat)); const QLocale no("no_NO"); - QCOMPARE(no.dateTimeFormat(QLocale::NarrowFormat), QLatin1String("dd.MM.yy HH:mm")); - QCOMPARE(no.dateTimeFormat(QLocale::ShortFormat), QLatin1String("dd.MM.yy HH:mm")); - QCOMPARE(no.dateTimeFormat(QLocale::LongFormat), QLatin1String("dddd d. MMMM yyyy 'kl'. HH:mm:ss t")); + QCOMPARE(no.dateTimeFormat(QLocale::NarrowFormat), QLatin1String("dd.MM.yy HH.mm")); + QCOMPARE(no.dateTimeFormat(QLocale::ShortFormat), QLatin1String("dd.MM.yy HH.mm")); + QCOMPARE(no.dateTimeFormat(QLocale::LongFormat), QLatin1String("dddd d. MMMM yyyy HH.mm.ss t")); } void tst_QLocale::monthName() @@ -2001,9 +2001,9 @@ void tst_QLocale::currency() const QLocale en_US("en_US"); QCOMPARE(en_US.toCurrencyString(qulonglong(1234)), QString("$1,234")); - QCOMPARE(en_US.toCurrencyString(qlonglong(-1234)), QString("($1,234)")); + QCOMPARE(en_US.toCurrencyString(qlonglong(-1234)), QString("$-1,234")); QCOMPARE(en_US.toCurrencyString(double(1234.56)), QString("$1,234.56")); - QCOMPARE(en_US.toCurrencyString(double(-1234.56)), QString("($1,234.56)")); + QCOMPARE(en_US.toCurrencyString(double(-1234.56)), QString("$-1,234.56")); const QLocale ru_RU("ru_RU"); QCOMPARE(ru_RU.toCurrencyString(qulonglong(1234)), QString::fromUtf8("1" "\xc2\xa0" "234\xc2\xa0\xd1\x80\xd1\x83\xd0\xb1.")); -- cgit v1.2.3 From 882bf3475c8926abe62ed71e6719458b024caac0 Mon Sep 17 00:00:00 2001 From: Oswald Buddenhagen Date: Mon, 13 Jan 2014 15:48:44 +0100 Subject: expand tabs and related whitespace fixes in *.{cpp,h,qdoc} the diff -w for this commit is empty. Started-by: Thiago Macieira Change-Id: I77bb84e71c63ce75e0709e5b94bee18e3ce6ab9e Reviewed-by: Thiago Macieira --- tests/auto/gui/image/qimage/tst_qimage.cpp | 18 +- .../qstandarditemmodel/tst_qstandarditemmodel.cpp | 2 +- .../gui/kernel/qkeysequence/tst_qkeysequence.cpp | 26 +- .../gui/kernel/qmouseevent/tst_qmouseevent.cpp | 24 +- .../qmouseevent_modal/tst_qmouseevent_modal.cpp | 8 +- tests/auto/gui/painting/qpainter/tst_qpainter.cpp | 52 +- .../painting/qpainter/utils/createImages/main.cpp | 100 +- tests/auto/gui/painting/qpen/tst_qpen.cpp | 24 +- tests/auto/gui/painting/qpolygon/tst_qpolygon.cpp | 10 +- tests/auto/gui/painting/qregion/tst_qregion.cpp | 186 +-- tests/auto/gui/painting/qwmatrix/tst_qwmatrix.cpp | 218 +-- tests/auto/gui/text/qfont/tst_qfont.cpp | 158 +- .../gui/text/qfontdatabase/tst_qfontdatabase.cpp | 10 +- .../gui/text/qfontmetrics/tst_qfontmetrics.cpp | 2 +- tests/auto/gui/text/qtextdocument/common.h | 10 +- .../tst_qtextdocumentfragment.cpp | 198 +-- .../auto/gui/text/qtextlayout/tst_qtextlayout.cpp | 110 +- tests/auto/gui/text/qtextlist/tst_qtextlist.cpp | 2 +- .../text/qtextpiecetable/tst_qtextpiecetable.cpp | 180 +-- .../qnetworksession/test/tst_qnetworksession.cpp | 12 +- .../network/socket/qtcpsocket/stressTest/Test.h | 2 +- tests/auto/other/atwrapper/atWrapperAutotest.cpp | 2 +- tests/auto/other/collections/tst_collections.cpp | 1628 ++++++++++---------- tests/auto/other/qcomplextext/tst_qcomplextext.cpp | 58 +- tests/auto/other/qfocusevent/tst_qfocusevent.cpp | 4 +- .../sql/kernel/qsqldatabase/tst_qsqldatabase.cpp | 224 +-- tests/auto/sql/kernel/qsqlquery/tst_qsqlquery.cpp | 2 +- .../auto/sql/kernel/qsqlrecord/tst_qsqlrecord.cpp | 98 +- .../models/qsqlquerymodel/tst_qsqlquerymodel.cpp | 16 +- tests/auto/widgets/dialogs/qdialog/tst_qdialog.cpp | 2 +- .../dialogs/qfiledialog2/tst_qfiledialog2.cpp | 4 +- .../qfilesystemmodel/tst_qfilesystemmodel.cpp | 10 +- .../dialogs/qfontdialog/tst_qfontdialog.cpp | 10 +- .../dialogs/qinputdialog/tst_qinputdialog.cpp | 4 +- tests/auto/widgets/dialogs/qwizard/tst_qwizard.cpp | 2 +- .../tst_qgraphicsgridlayout.cpp | 2 +- .../tst_qgraphicslinearlayout.cpp | 4 +- .../tst_qgraphicsproxywidget.cpp | 36 +- .../qabstractitemview/tst_qabstractitemview.cpp | 8 +- .../itemviews/qlistwidget/tst_qlistwidget.cpp | 28 +- .../itemviews/qtableview/tst_qtableview.cpp | 22 +- .../itemviews/qtreewidget/tst_qtreewidget.cpp | 26 +- .../kernel/qapplication/tst_qapplication.cpp | 90 +- .../widgets/kernel/qformlayout/tst_qformlayout.cpp | 2 +- .../widgets/kernel/qgridlayout/tst_qgridlayout.cpp | 4 +- .../widgets/kernel/qshortcut/tst_qshortcut.cpp | 318 ++-- tests/auto/widgets/kernel/qwidget/tst_qwidget.cpp | 42 +- .../qabstractbutton/tst_qabstractbutton.cpp | 2 +- .../qcalendarwidget/tst_qcalendarwidget.cpp | 2 +- .../widgets/qdockwidget/tst_qdockwidget.cpp | 18 +- .../widgets/qdoublespinbox/tst_qdoublespinbox.cpp | 2 +- tests/auto/widgets/widgets/qlabel/tst_qlabel.cpp | 4 +- .../widgets/widgets/qlineedit/tst_qlineedit.cpp | 2 +- .../widgets/qmainwindow/tst_qmainwindow.cpp | 6 +- .../auto/widgets/widgets/qmenubar/tst_qmenubar.cpp | 56 +- .../widgets/qpushbutton/tst_qpushbutton.cpp | 6 +- .../auto/widgets/widgets/qtoolbox/tst_qtoolbox.cpp | 6 +- .../xml/sax/qxmlsimplereader/parser/parser.cpp | 284 ++-- .../auto/xml/sax/qxmlsimplereader/parser/parser.h | 16 +- .../sax/qxmlsimplereader/tst_qxmlsimplereader.cpp | 82 +- .../qgraphicsview/chiptester/chiptester.cpp | 20 +- .../qgraphicsview/chiptester/chiptester.h | 6 +- tests/manual/bearerex/bearerex.cpp | 16 +- 63 files changed, 2263 insertions(+), 2263 deletions(-) (limited to 'tests') diff --git a/tests/auto/gui/image/qimage/tst_qimage.cpp b/tests/auto/gui/image/qimage/tst_qimage.cpp index 5016abff4f..254428958e 100644 --- a/tests/auto/gui/image/qimage/tst_qimage.cpp +++ b/tests/auto/gui/image/qimage/tst_qimage.cpp @@ -194,9 +194,9 @@ void tst_QImage::create() #if !defined(Q_OS_WINCE) QT_TRY { #endif - //QImage image(7000000, 7000000, 8, 256, QImage::IgnoreEndian); - QImage image(7000000, 7000000, QImage::Format_Indexed8); - image.setColorCount(256); + //QImage image(7000000, 7000000, 8, 256, QImage::IgnoreEndian); + QImage image(7000000, 7000000, QImage::Format_Indexed8); + image.setColorCount(256); cr = !image.isNull(); #if !defined(Q_OS_WINCE) } QT_CATCH (...) { @@ -309,16 +309,16 @@ void tst_QImage::formatHandlersInput() bool formatSupported = false; for (QList::Iterator it = formats.begin(); it != formats.end(); ++it) { if (*it == testFormat.toLower()) { - formatSupported = true; - break; - } + formatSupported = true; + break; + } } if (formatSupported) { // qDebug(QImage::imageFormat(testFile)); - QCOMPARE(testFormat.toLatin1().toLower(), QImageReader::imageFormat(testFile)); + QCOMPARE(testFormat.toLatin1().toLower(), QImageReader::imageFormat(testFile)); } else { - QString msg = "Format not supported : "; - QSKIP(QString(msg + testFormat).toLatin1()); + QString msg = "Format not supported : "; + QSKIP(QString(msg + testFormat).toLatin1()); } } diff --git a/tests/auto/gui/itemmodels/qstandarditemmodel/tst_qstandarditemmodel.cpp b/tests/auto/gui/itemmodels/qstandarditemmodel/tst_qstandarditemmodel.cpp index 085dfd0461..761f6371db 100644 --- a/tests/auto/gui/itemmodels/qstandarditemmodel/tst_qstandarditemmodel.cpp +++ b/tests/auto/gui/itemmodels/qstandarditemmodel/tst_qstandarditemmodel.cpp @@ -1468,7 +1468,7 @@ static QModelIndex indexFromText(QStandardItemModel *model, const QString &text) struct FriendlyTreeView : public QTreeView { friend class tst_QStandardItemModel; - Q_DECLARE_PRIVATE(QTreeView) + Q_DECLARE_PRIVATE(QTreeView) }; #endif diff --git a/tests/auto/gui/kernel/qkeysequence/tst_qkeysequence.cpp b/tests/auto/gui/kernel/qkeysequence/tst_qkeysequence.cpp index bd7bd3a464..161a1692ca 100644 --- a/tests/auto/gui/kernel/qkeysequence/tst_qkeysequence.cpp +++ b/tests/auto/gui/kernel/qkeysequence/tst_qkeysequence.cpp @@ -528,7 +528,7 @@ void tst_QKeySequence::toStringFromKeycode() void tst_QKeySequence::streamOperators_data() { - operatorQString_data(); + operatorQString_data(); } void tst_QKeySequence::streamOperators() @@ -536,21 +536,21 @@ void tst_QKeySequence::streamOperators() QFETCH( int, modifiers ); QFETCH( int, keycode ); - QByteArray data; - QKeySequence refK( modifiers | keycode ); - QKeySequence orgK( "Ctrl+A" ); - QKeySequence copyOrgK = orgK; - QVERIFY( copyOrgK == orgK ); + QByteArray data; + QKeySequence refK( modifiers | keycode ); + QKeySequence orgK( "Ctrl+A" ); + QKeySequence copyOrgK = orgK; + QVERIFY( copyOrgK == orgK ); - QDataStream in(&data, QIODevice::WriteOnly); - in << refK; - QDataStream out(&data, QIODevice::ReadOnly); - out >> orgK; + QDataStream in(&data, QIODevice::WriteOnly); + in << refK; + QDataStream out(&data, QIODevice::ReadOnly); + out >> orgK; - QVERIFY( orgK == refK ); + QVERIFY( orgK == refK ); - // check if detached - QVERIFY( orgK != copyOrgK ); + // check if detached + QVERIFY( orgK != copyOrgK ); } diff --git a/tests/auto/gui/kernel/qmouseevent/tst_qmouseevent.cpp b/tests/auto/gui/kernel/qmouseevent/tst_qmouseevent.cpp index 424b5fea3a..828c1fc41f 100644 --- a/tests/auto/gui/kernel/qmouseevent/tst_qmouseevent.cpp +++ b/tests/auto/gui/kernel/qmouseevent/tst_qmouseevent.cpp @@ -61,21 +61,21 @@ public: protected: void mousePressEvent(QMouseEvent *e) { - QWindow::mousePressEvent(e); - mousePressButton = e->button(); - mousePressButtons = e->buttons(); - mousePressModifiers = e->modifiers(); - mousePressEventRecieved = true; - e->accept(); + QWindow::mousePressEvent(e); + mousePressButton = e->button(); + mousePressButtons = e->buttons(); + mousePressModifiers = e->modifiers(); + mousePressEventRecieved = true; + e->accept(); } void mouseReleaseEvent(QMouseEvent *e) { - QWindow::mouseReleaseEvent(e); - mouseReleaseButton = e->button(); - mouseReleaseButtons = e->buttons(); - mouseReleaseModifiers = e->modifiers(); - mouseReleaseEventRecieved = true; - e->accept(); + QWindow::mouseReleaseEvent(e); + mouseReleaseButton = e->button(); + mouseReleaseButtons = e->buttons(); + mouseReleaseModifiers = e->modifiers(); + mouseReleaseEventRecieved = true; + e->accept(); } }; diff --git a/tests/auto/gui/kernel/qmouseevent_modal/tst_qmouseevent_modal.cpp b/tests/auto/gui/kernel/qmouseevent_modal/tst_qmouseevent_modal.cpp index ef800bd995..48f079a24e 100644 --- a/tests/auto/gui/kernel/qmouseevent_modal/tst_qmouseevent_modal.cpp +++ b/tests/auto/gui/kernel/qmouseevent_modal/tst_qmouseevent_modal.cpp @@ -183,9 +183,9 @@ TstWidget::TstWidget() connect( pb, SIGNAL(pressed()), this, SLOT(buttonPressed()) ); -// QScrollBar *sb = new QScrollBar( Qt::Horizontal, this ); +// QScrollBar *sb = new QScrollBar( Qt::Horizontal, this ); -// sb->setGeometry( 5, pb->geometry().bottom() + 5, 100, sb->sizeHint().height() ); +// sb->setGeometry( 5, pb->geometry().bottom() + 5, 100, sb->sizeHint().height() ); d = new TstDialog( pb, this , 0 ); } @@ -218,8 +218,8 @@ void TstDialog::releaseMouse() void TstDialog::closeDialog() { if ( isVisible() ) { - c++; - accept(); + c++; + accept(); } } diff --git a/tests/auto/gui/painting/qpainter/tst_qpainter.cpp b/tests/auto/gui/painting/qpainter/tst_qpainter.cpp index 27c0f6e66a..d288665c44 100644 --- a/tests/auto/gui/painting/qpainter/tst_qpainter.cpp +++ b/tests/auto/gui/painting/qpainter/tst_qpainter.cpp @@ -511,7 +511,7 @@ void tst_QPainter::drawPixmap_comp() bool different = false; for (int y=0; y off) || (qAbs(qAlpha(pix) - qAlpha(expected)) > off); } - if (diff && !different) - qDebug( "Different at %d,%d pixel [%d,%d,%d,%d] expected [%d,%d,%d,%d]", x, y, + if (diff && !different) + qDebug( "Different at %d,%d pixel [%d,%d,%d,%d] expected [%d,%d,%d,%d]", x, y, qRed(result.pixel(x, y)), qGreen(result.pixel(x, y)), qBlue(result.pixel(x, y)), qAlpha(result.pixel(x, y)), qRed(expected), qGreen(expected), qBlue(expected), qAlpha(expected)); - different |= diff; + different |= diff; } QVERIFY(!different); @@ -560,24 +560,24 @@ void tst_QPainter::saveAndRestore_data() QRect viewport = p.viewport(); QTest::newRow("Original") << font << pen << brush << backgroundColor << int(backgroundMode) - << brushOrigin << clipRegion << window << viewport; + << brushOrigin << clipRegion << window << viewport; QFont font2 = font; font2.setPointSize( 24 ); QTest::newRow("Modified font.pointSize, brush, backgroundColor, backgroundMode") << font2 << pen << QBrush(Qt::red) << QColor(Qt::blue) << int(Qt::TransparentMode) - << brushOrigin << clipRegion << window << viewport; + << brushOrigin << clipRegion << window << viewport; font2 = font; font2.setPixelSize( 20 ); QTest::newRow("Modified font.pixelSize, brushOrigin, pos") << font2 << pen << brush << backgroundColor << int(backgroundMode) - << QPoint( 50, 32 ) << clipRegion << window << viewport; + << QPoint( 50, 32 ) << clipRegion << window << viewport; QTest::newRow("Modified clipRegion, window, viewport") << font << pen << brush << backgroundColor << int(backgroundMode) - << brushOrigin << clipRegion.subtracted(QRect(10,10,50,30)) - << QRect(-500, -500, 500, 500 ) << QRect( 0, 0, 50, 50 ); + << brushOrigin << clipRegion.subtracted(QRect(10,10,50,30)) + << QRect(-500, -500, 500, 500 ) << QRect( 0, 0, 50, 50 ); } void tst_QPainter::saveAndRestore() @@ -662,13 +662,13 @@ QBitmap tst_QPainter::getBitmap( const QString &dir, const QString &filename, bo return QBitmap(); } if ( mask ) { - QBitmap mask; - QString maskFilename = dir + QString( "/%1-mask.xbm" ).arg( filename ); - if ( !mask.load( maskFilename ) ) { - QWARN(QString("Could not load mask '%1'").arg(maskFilename).toLatin1()); - return QBitmap(); - } - bm.setMask( mask ); + QBitmap mask; + QString maskFilename = dir + QString( "/%1-mask.xbm" ).arg( filename ); + if (!mask.load(maskFilename)) { + QWARN(QString("Could not load mask '%1'").arg(maskFilename).toLatin1()); + return QBitmap(); + } + bm.setMask( mask ); } return bm; } @@ -698,17 +698,17 @@ static QRect getPaintedSize(const QImage &image, const QColor &background) uint color = background.rgba(); for ( int y = 0; y < image.height(); ++y ) { - for ( int x = 0; x < image.width(); ++x ) { + for (int x = 0; x < image.width(); ++x) { QRgb pixel = image.pixel( x, y ); - if ( pixel != color && x < xmin ) - xmin = x; - if ( pixel != color && x > xmax ) - xmax = x; - if ( pixel != color && y < ymin ) - ymin = y; - if ( pixel != color && y > ymax ) - ymax = y; - } + if (pixel != color && x < xmin) + xmin = x; + if (pixel != color && x > xmax) + xmax = x; + if (pixel != color && y < ymin) + ymin = y; + if (pixel != color && y > ymax) + ymax = y; + } } return QRect(xmin, ymin, xmax - xmin + 1, ymax - ymin + 1); diff --git a/tests/auto/gui/painting/qpainter/utils/createImages/main.cpp b/tests/auto/gui/painting/qpainter/utils/createImages/main.cpp index 11ce8b947b..a6bf4eca8b 100644 --- a/tests/auto/gui/painting/qpainter/utils/createImages/main.cpp +++ b/tests/auto/gui/painting/qpainter/utils/createImages/main.cpp @@ -61,15 +61,15 @@ static QPixmap createDestPixmap() QPainter painter; painter.begin( &pm ); for ( int i=0; i 0 ) { - QBitmap mask( totalSize, totalSize, true ); - QPainter painter; - painter.begin( &mask ); - painter.setPen( QPen( Qt::color1, 1 ) ); - painter.setBrush( Qt::color1 ); - painter.drawRect( border, border, size, size ); - painter.end(); - bm.setMask( mask ); + QBitmap mask(totalSize, totalSize, true); + QPainter painter; + painter.begin(&mask); + painter.setPen(QPen(Qt::color1, 1)); + painter.setBrush(Qt::color1); + painter.drawRect(border, border, size, size); + painter.end(); + bm.setMask(mask); } return bm; } @@ -146,49 +146,49 @@ int main( int argc, char **argv ) // input for tst_QPainter::drawLine_rop_bitmap() { - QBitmap dst = createDestBitmap(); - dst.save( "../../drawLine_rop_bitmap/dst.xbm", "XBM" ); + QBitmap dst = createDestBitmap(); + dst.save("../../drawLine_rop_bitmap/dst.xbm", "XBM"); } // input for tst_QPainter::drawPixmap_rop_bitmap() { - QBitmap dst = createDestBitmap(); - QBitmap src1 = createSrcBitmap( 4, 2 ); - QBitmap src2 = createSrcBitmap( 4, 0 ); - dst.save( "../../drawPixmap_rop_bitmap/dst.xbm", "XBM" ); - src1.save( "../../drawPixmap_rop_bitmap/src1.xbm", "XBM" ); - src1.mask()->save( "../../drawPixmap_rop_bitmap/src1-mask.xbm", "XBM" ); - src2.save( "../../drawPixmap_rop_bitmap/src2.xbm", "XBM" ); + QBitmap dst = createDestBitmap(); + QBitmap src1 = createSrcBitmap(4, 2); + QBitmap src2 = createSrcBitmap(4, 0); + dst.save("../../drawPixmap_rop_bitmap/dst.xbm", "XBM"); + src1.save("../../drawPixmap_rop_bitmap/src1.xbm", "XBM"); + src1.mask()->save("../../drawPixmap_rop_bitmap/src1-mask.xbm", "XBM"); + src2.save("../../drawPixmap_rop_bitmap/src2.xbm", "XBM"); } // input for tst_QPainter::drawPixmap_rop() { - QPixmap dst1 = createDestPixmap(); - QPixmap dst2 = createDestPixmap(); - dst2.resize( 32, 32 ); - QBitmap src1 = createSrcBitmap( 32, 0 ); + QPixmap dst1 = createDestPixmap(); + QPixmap dst2 = createDestPixmap(); + dst2.resize(32, 32); + QBitmap src1 = createSrcBitmap(32, 0); - QBitmap src_tmp = createSrcBitmap( 32, 0 ).xForm( QWMatrix( 1, 0, 0, -1, 0, 0 ) ); - src_tmp.resize( 32, 48 ); - QBitmap src2 = src_tmp.xForm( QWMatrix( 1, 0, 0, -1, 0, 0 ) ); - QBitmap mask( 32, 48, true ); - { - QPainter painter; - painter.begin( &mask ); - painter.setPen( QPen( Qt::color1, 1 ) ); - painter.setBrush( Qt::color1 ); - painter.drawRect( 0, 16, 32, 32 ); - painter.end(); - } - src2.setMask( mask ); + QBitmap src_tmp = createSrcBitmap(32, 0).xForm(QWMatrix(1, 0, 0, -1, 0, 0)); + src_tmp.resize(32, 48); + QBitmap src2 = src_tmp.xForm(QWMatrix(1, 0, 0, -1, 0, 0)); + QBitmap mask(32, 48, true); + { + QPainter painter; + painter.begin(&mask); + painter.setPen(QPen(Qt::color1, 1)); + painter.setBrush(Qt::color1); + painter.drawRect(0, 16, 32, 32); + painter.end(); + } + src2.setMask(mask); - QBitmap src3 = createSrcBitmap( 32, 0 ).xForm( QWMatrix( 1, 0, 0, -1, 0, 0 ) ); + QBitmap src3 = createSrcBitmap(32, 0).xForm(QWMatrix(1, 0, 0, -1, 0, 0)); - dst1.save( "../../drawPixmap_rop/dst1.png", "PNG" ); - dst2.save( "../../drawPixmap_rop/dst2.png", "PNG" ); - src1.save( "../../drawPixmap_rop/src1.xbm", "XBM" ); - src2.save( "../../drawPixmap_rop/src2.xbm", "XBM" ); - src2.mask()->save( "../../drawPixmap_rop/src2-mask.xbm", "XBM" ); - src3.save( "../../drawPixmap_rop/src3.xbm", "XBM" ); + dst1.save("../../drawPixmap_rop/dst1.png", "PNG"); + dst2.save("../../drawPixmap_rop/dst2.png", "PNG"); + src1.save("../../drawPixmap_rop/src1.xbm", "XBM"); + src2.save("../../drawPixmap_rop/src2.xbm", "XBM"); + src2.mask()->save("../../drawPixmap_rop/src2-mask.xbm", "XBM"); + src3.save("../../drawPixmap_rop/src3.xbm", "XBM"); } } diff --git a/tests/auto/gui/painting/qpen/tst_qpen.cpp b/tests/auto/gui/painting/qpen/tst_qpen.cpp index 1444c4fc16..07c996d026 100644 --- a/tests/auto/gui/painting/qpen/tst_qpen.cpp +++ b/tests/auto/gui/painting/qpen/tst_qpen.cpp @@ -114,23 +114,23 @@ void tst_QPen::operator_eq_eq_data() QTest::addColumn("isEqual"); QTest::newRow("differentColor") << QPen(Qt::red) - << QPen(Qt::blue) - << false; + << QPen(Qt::blue) + << false; QTest::newRow("differentWidth") << QPen(Qt::red, 2) - << QPen(Qt::red, 3) - << false; + << QPen(Qt::red, 3) + << false; QTest::newRow("differentPenStyle") << QPen(Qt::red, 2, Qt::DashLine) - << QPen(Qt::red, 2, Qt::DotLine) - << false; + << QPen(Qt::red, 2, Qt::DotLine) + << false; QTest::newRow("differentCapStyle") << QPen(Qt::red, 2, Qt::DashLine, Qt::RoundCap, Qt::BevelJoin) - << QPen(Qt::red, 2, Qt::DashLine, Qt::SquareCap, Qt::BevelJoin) - << false; + << QPen(Qt::red, 2, Qt::DashLine, Qt::SquareCap, Qt::BevelJoin) + << false; QTest::newRow("differentJoinStyle") << QPen(Qt::red, 2, Qt::DashLine, Qt::RoundCap, Qt::BevelJoin) - << QPen(Qt::red, 2, Qt::DashLine, Qt::RoundCap, Qt::MiterJoin) - << false; + << QPen(Qt::red, 2, Qt::DashLine, Qt::RoundCap, Qt::MiterJoin) + << false; QTest::newRow("same") << QPen(Qt::red, 2, Qt::DashLine, Qt::RoundCap, Qt::BevelJoin) - << QPen(Qt::red, 2, Qt::DashLine, Qt::RoundCap, Qt::BevelJoin) - << true; + << QPen(Qt::red, 2, Qt::DashLine, Qt::RoundCap, Qt::BevelJoin) + << true; } diff --git a/tests/auto/gui/painting/qpolygon/tst_qpolygon.cpp b/tests/auto/gui/painting/qpolygon/tst_qpolygon.cpp index 4a659a3159..07670b2ae2 100644 --- a/tests/auto/gui/painting/qpolygon/tst_qpolygon.cpp +++ b/tests/auto/gui/painting/qpolygon/tst_qpolygon.cpp @@ -77,11 +77,11 @@ void tst_QPolygon::makeEllipse() // make sure that all points are R+-1 away from the center bool err = false; for (i = 1; i < pa.size(); i++) { - QPoint p = pa.at( i ); - double r = sqrt( pow( double(p.x() - R), 2.0 ) + pow( double(p.y() - R), 2.0 ) ); - // ### too strict ? at least from visual inspection it looks - // quite odd around the main axes. 2.0 passes easily. - err |= ( qAbs( r - double(R) ) > 2.0 ); + QPoint p = pa.at(i); + double r = sqrt(pow(double(p.x() - R), 2.0) + pow(double(p.y() - R), 2.0)); + // ### too strict ? at least from visual inspection it looks + // quite odd around the main axes. 2.0 passes easily. + err |= (qAbs(r - double(R)) > 2.0); } QVERIFY( !err ); } diff --git a/tests/auto/gui/painting/qregion/tst_qregion.cpp b/tests/auto/gui/painting/qregion/tst_qregion.cpp index c099611755..121d98e653 100644 --- a/tests/auto/gui/painting/qregion/tst_qregion.cpp +++ b/tests/auto/gui/painting/qregion/tst_qregion.cpp @@ -109,19 +109,19 @@ tst_QRegion::tst_QRegion() void tst_QRegion::boundingRect() { { - QRect rect; - QRegion region( rect ); - QCOMPARE( region.boundingRect(), rect ); + QRect rect; + QRegion region(rect); + QCOMPARE(region.boundingRect(), rect); } { - QRect rect( 10, -20, 30, 40 ); - QRegion region( rect ); - QCOMPARE( region.boundingRect(), rect ); + QRect rect(10, -20, 30, 40); + QRegion region(rect); + QCOMPARE(region.boundingRect(), rect); } { - QRect rect(15,25,10,10); - QRegion region( rect ); - QCOMPARE( region.boundingRect(), rect ); + QRect rect(15,25,10,10); + QRegion region(rect); + QCOMPARE(region.boundingRect(), rect); } } @@ -129,75 +129,75 @@ void tst_QRegion::boundingRect() void tst_QRegion::rects() { { - QRect rect; - QRegion region( rect ); - QVERIFY( region.isEmpty() ); - QVERIFY( region.rects().isEmpty() ); + QRect rect; + QRegion region(rect); + QVERIFY(region.isEmpty()); + QVERIFY(region.rects().isEmpty()); } { - QRect rect( 10, -20, 30, 40 ); - QRegion region( rect ); - QCOMPARE( region.rects().count(), 1 ); - QCOMPARE( region.rects()[0], rect ); + QRect rect(10, -20, 30, 40); + QRegion region(rect); + QCOMPARE(region.rects().count(), 1); + QCOMPARE(region.rects()[0], rect); } { - QRect r( QPoint(10, 10), QPoint(40, 40) ); - QRegion region( r ); - QVERIFY( region.contains( QPoint(10,10) ) ); - QVERIFY( region.contains( QPoint(20,40) ) ); - QVERIFY( region.contains( QPoint(40,20) ) ); - QVERIFY( !region.contains( QPoint(20,41) ) ); - QVERIFY( !region.contains( QPoint(41,20) ) ); + QRect r(QPoint(10, 10), QPoint(40, 40)); + QRegion region(r); + QVERIFY(region.contains(QPoint(10,10))); + QVERIFY(region.contains(QPoint(20,40))); + QVERIFY(region.contains(QPoint(40,20))); + QVERIFY(!region.contains(QPoint(20,41))); + QVERIFY(!region.contains(QPoint(41,20))); } { - QRect r( 10, 10, 30, 30 ); - QRegion region( r ); - QVERIFY( region.contains( QPoint(10,10) ) ); - QVERIFY( region.contains( QPoint(20,39) ) ); - QVERIFY( region.contains( QPoint(39,20) ) ); - QVERIFY( !region.contains( QPoint(20,40) ) ); - QVERIFY( !region.contains( QPoint(40,20) ) ); + QRect r(10, 10, 30, 30); + QRegion region(r); + QVERIFY(region.contains(QPoint(10,10))); + QVERIFY(region.contains(QPoint(20,39))); + QVERIFY(region.contains(QPoint(39,20))); + QVERIFY(!region.contains(QPoint(20,40))); + QVERIFY(!region.contains(QPoint(40,20))); } } void tst_QRegion::swap() { - QRegion r1(QRect( 0, 0,10,10)); + QRegion r1(QRect(0, 0,10,10)); QRegion r2(QRect(10,10,10,10)); r1.swap(r2); QCOMPARE(r1.rects().front(), QRect(10,10,10,10)); - QCOMPARE(r2.rects().front(), QRect( 0, 0,10,10)); + QCOMPARE(r2.rects().front(), QRect(0, 0,10,10)); } void tst_QRegion::setRects() { { - QRegion region; - region.setRects( 0, 0 ); - QVERIFY( region.rects().isEmpty() ); + QRegion region; + region.setRects(0, 0); + QVERIFY(region.rects().isEmpty()); } { - QRegion region; - QRect rect; - region.setRects( &rect, 0 ); + QRegion region; + QRect rect; + region.setRects(&rect, 0); QVERIFY(region.isEmpty()); QVERIFY(region == QRegion()); - QVERIFY(!region.boundingRect().isValid()); - QVERIFY(region.rects().isEmpty()); + QVERIFY(!region.boundingRect().isValid()); + QVERIFY(region.rects().isEmpty()); } { - QRegion region; - QRect rect; - region.setRects( &rect, 1 ); - QVERIFY( !region.boundingRect().isValid() ); - QVERIFY( region.rects().isEmpty() ); + QRegion region; + QRect rect; + region.setRects(&rect, 1); + QVERIFY(!region.boundingRect().isValid()); + QVERIFY(region.rects().isEmpty()); } { - QRegion region; - QRect rect( 10, -20, 30, 40 ); - region.setRects( &rect, 1 ); - QCOMPARE( region.rects().count(), 1 ); - QCOMPARE( region.rects()[0], rect ); + QRegion region; + QRect rect(10, -20, 30, 40); + region.setRects(&rect, 1); + QCOMPARE(region.rects().count(), 1); + QCOMPARE(region.rects()[0], rect); } } @@ -242,30 +242,30 @@ void tst_QRegion::polygonRegion() { QPolygon pa; { - QRegion region ( pa ); - QVERIFY( region.isEmpty() ); + QRegion region (pa); + QVERIFY(region.isEmpty()); } { - pa.setPoints( 8, 10, 10, // a____________b - 40, 10, // | | - 40, 20, // |___ ___| - 30, 20, // | | - 30, 40, // | | - 20, 40, // | | - 20, 20, // |____c - 10, 20 ); + pa.setPoints(8, 10, 10, // a____________b + 40, 10, // | | + 40, 20, // |___ ___| + 30, 20, // | | + 30, 40, // | | + 20, 40, // | | + 20, 20, // |____c + 10, 20); - QRegion region ( pa ); - QVERIFY( !region.isEmpty() ); + QRegion region (pa); + QVERIFY(!region.isEmpty()); - // These should not be inside the circle - QVERIFY( !region.contains( QPoint( 9, 9 ) ) ); - QVERIFY( !region.contains( QPoint( 30, 41 ) ) ); - QVERIFY( !region.contains( QPoint( 41, 10 ) ) ); - QVERIFY( !region.contains( QPoint( 31, 21 ) ) ); + // These should not be inside the circle + QVERIFY(!region.contains(QPoint( 9, 9))); + QVERIFY(!region.contains(QPoint(30, 41))); + QVERIFY(!region.contains(QPoint(41, 10))); + QVERIFY(!region.contains(QPoint(31, 21))); - // These should be inside - QVERIFY( region.contains( QPoint( 10, 10 ) ) ); // Upper-left (a) + // These should be inside + QVERIFY(region.contains(QPoint(10, 10))); // Upper-left (a) } } @@ -317,8 +317,8 @@ void tst_QRegion::emptyPolygonRegion() static const char *circle_xpm[] = { "20 20 2 1", - " c #FFFFFF", - ". c #000000", + " c #FFFFFF", + ". c #000000", " ...... ", " .......... ", " .............. ", @@ -345,29 +345,29 @@ void tst_QRegion::bitmapRegion() { QBitmap circle; { - QRegion region( circle ); - QVERIFY( region.isEmpty() ); + QRegion region(circle); + QVERIFY(region.isEmpty()); } { - circle = QPixmap( circle_xpm ); - QRegion region( circle ); - - //// These should not be inside the circe - QVERIFY( !region.contains( QPoint( 2, 2 ) ) ); - QVERIFY( !region.contains( QPoint( 2, 17 ) ) ); - QVERIFY( !region.contains( QPoint( 17, 2 ) ) ); - QVERIFY( !region.contains( QPoint( 17, 17 ) ) ); - - //// These should be inside - QVERIFY( region.contains( QPoint( 3, 3 ) ) ); - QVERIFY( region.contains( QPoint( 3, 16 ) ) ); - QVERIFY( region.contains( QPoint( 16, 3 ) ) ); - QVERIFY( region.contains( QPoint( 16, 16 ) ) ); - - QVERIFY( region.contains( QPoint( 0, 10 ) ) ); // Mid-left - QVERIFY( region.contains( QPoint( 10, 0 ) ) ); // Mid-top - QVERIFY( region.contains( QPoint( 19, 10 ) ) ); // Mid-right - QVERIFY( region.contains( QPoint( 10, 19 ) ) ); // Mid-bottom + circle = QPixmap(circle_xpm); + QRegion region(circle); + + //// These should not be inside the circe + QVERIFY(!region.contains(QPoint(2, 2))); + QVERIFY(!region.contains(QPoint(2, 17))); + QVERIFY(!region.contains(QPoint(17, 2))); + QVERIFY(!region.contains(QPoint(17, 17))); + + //// These should be inside + QVERIFY(region.contains(QPoint(3, 3))); + QVERIFY(region.contains(QPoint(3, 16))); + QVERIFY(region.contains(QPoint(16, 3))); + QVERIFY(region.contains(QPoint(16, 16))); + + QVERIFY(region.contains(QPoint(0, 10))); // Mid-left + QVERIFY(region.contains(QPoint(10, 0))); // Mid-top + QVERIFY(region.contains(QPoint(19, 10))); // Mid-right + QVERIFY(region.contains(QPoint(10, 19))); // Mid-bottom } } diff --git a/tests/auto/gui/painting/qwmatrix/tst_qwmatrix.cpp b/tests/auto/gui/painting/qwmatrix/tst_qwmatrix.cpp index 4c73676329..c62ca3fa38 100644 --- a/tests/auto/gui/painting/qwmatrix/tst_qwmatrix.cpp +++ b/tests/auto/gui/painting/qwmatrix/tst_qwmatrix.cpp @@ -112,47 +112,47 @@ void tst_QWMatrix::mapping_data() //next we fill it with data // identity - QTest::newRow( "identity" ) << QMatrix( 1, 0, 0, 1, 0, 0 ) - << QRect( 10, 20, 30, 40 ) - << QPolygon( QRect( 10, 20, 30, 40 ) ); + QTest::newRow( "identity" ) << QMatrix( 1, 0, 0, 1, 0, 0 ) + << QRect( 10, 20, 30, 40 ) + << QPolygon( QRect( 10, 20, 30, 40 ) ); // scaling QTest::newRow( "scale 0" ) << QMatrix( 2, 0, 0, 2, 0, 0 ) - << QRect( 10, 20, 30, 40 ) - << QPolygon( QRect( 20, 40, 60, 80 ) ); + << QRect( 10, 20, 30, 40 ) + << QPolygon( QRect( 20, 40, 60, 80 ) ); QTest::newRow( "scale 1" ) << QMatrix( 10, 0, 0, 10, 0, 0 ) - << QRect( 10, 20, 30, 40 ) - << QPolygon( QRect( 100, 200, 300, 400 ) ); + << QRect( 10, 20, 30, 40 ) + << QPolygon( QRect( 100, 200, 300, 400 ) ); // mirroring - QTest::newRow( "mirror 0" ) << QMatrix( -1, 0, 0, 1, 0, 0 ) - << QRect( 10, 20, 30, 40 ) - << QPolygon( QRect( -40, 20, 30, 40 ) ); - QTest::newRow( "mirror 1" ) << QMatrix( 1, 0, 0, -1, 0, 0 ) - << QRect( 10, 20, 30, 40 ) - << QPolygon( QRect( 10, -60, 30, 40 ) ); - QTest::newRow( "mirror 2" ) << QMatrix( -1, 0, 0, -1, 0, 0 ) - << QRect( 10, 20, 30, 40 ) - << QPolygon( QRect( -40, -60, 30, 40 ) ); - QTest::newRow( "mirror 3" ) << QMatrix( -2, 0, 0, -2, 0, 0 ) - << QRect( 10, 20, 30, 40 ) - << QPolygon( QRect( -80, -120, 60, 80 ) ); - QTest::newRow( "mirror 4" ) << QMatrix( -10, 0, 0, -10, 0, 0 ) - << QRect( 10, 20, 30, 40 ) - << QPolygon( QRect( -400, -600, 300, 400 ) ); - QTest::newRow( "mirror 5" ) << QMatrix( -1, 0, 0, 1, 0, 0 ) - << QRect( 0, 0, 30, 40 ) - << QPolygon( QRect( -30, 0, 30, 40 ) ); - QTest::newRow( "mirror 6" ) << QMatrix( 1, 0, 0, -1, 0, 0 ) - << QRect( 0, 0, 30, 40 ) - << QPolygon( QRect( 0, -40, 30, 40 ) ); - QTest::newRow( "mirror 7" ) << QMatrix( -1, 0, 0, -1, 0, 0 ) - << QRect( 0, 0, 30, 40 ) - << QPolygon( QRect( -30, -40, 30, 40 ) ); - QTest::newRow( "mirror 8" ) << QMatrix( -2, 0, 0, -2, 0, 0 ) - << QRect( 0, 0, 30, 40 ) - << QPolygon( QRect( -60, -80, 60, 80 ) ); - QTest::newRow( "mirror 9" ) << QMatrix( -10, 0, 0, -10, 0, 0 ) - << QRect( 0, 0, 30, 40 ) - << QPolygon( QRect( -300, -400, 300, 400 ) ); + QTest::newRow( "mirror 0" ) << QMatrix( -1, 0, 0, 1, 0, 0 ) + << QRect( 10, 20, 30, 40 ) + << QPolygon( QRect( -40, 20, 30, 40 ) ); + QTest::newRow( "mirror 1" ) << QMatrix( 1, 0, 0, -1, 0, 0 ) + << QRect( 10, 20, 30, 40 ) + << QPolygon( QRect( 10, -60, 30, 40 ) ); + QTest::newRow( "mirror 2" ) << QMatrix( -1, 0, 0, -1, 0, 0 ) + << QRect( 10, 20, 30, 40 ) + << QPolygon( QRect( -40, -60, 30, 40 ) ); + QTest::newRow( "mirror 3" ) << QMatrix( -2, 0, 0, -2, 0, 0 ) + << QRect( 10, 20, 30, 40 ) + << QPolygon( QRect( -80, -120, 60, 80 ) ); + QTest::newRow( "mirror 4" ) << QMatrix( -10, 0, 0, -10, 0, 0 ) + << QRect( 10, 20, 30, 40 ) + << QPolygon( QRect( -400, -600, 300, 400 ) ); + QTest::newRow( "mirror 5" ) << QMatrix( -1, 0, 0, 1, 0, 0 ) + << QRect( 0, 0, 30, 40 ) + << QPolygon( QRect( -30, 0, 30, 40 ) ); + QTest::newRow( "mirror 6" ) << QMatrix( 1, 0, 0, -1, 0, 0 ) + << QRect( 0, 0, 30, 40 ) + << QPolygon( QRect( 0, -40, 30, 40 ) ); + QTest::newRow( "mirror 7" ) << QMatrix( -1, 0, 0, -1, 0, 0 ) + << QRect( 0, 0, 30, 40 ) + << QPolygon( QRect( -30, -40, 30, 40 ) ); + QTest::newRow( "mirror 8" ) << QMatrix( -2, 0, 0, -2, 0, 0 ) + << QRect( 0, 0, 30, 40 ) + << QPolygon( QRect( -60, -80, 60, 80 ) ); + QTest::newRow( "mirror 9" ) << QMatrix( -10, 0, 0, -10, 0, 0 ) + << QRect( 0, 0, 30, 40 ) + << QPolygon( QRect( -300, -400, 300, 400 ) ); #if (defined(Q_OS_WIN) || defined(Q_OS_WINCE)) && !defined(M_PI) #define M_PI 3.14159265897932384626433832795f @@ -161,126 +161,126 @@ void tst_QWMatrix::mapping_data() // rotations float deg = 0.; QTest::newRow( "rot 0 a" ) << QMatrix( cos( M_PI*deg/180. ), -sin( M_PI*deg/180. ), - sin( M_PI*deg/180. ), cos( M_PI*deg/180. ), 0, 0 ) - << QRect( 0, 0, 30, 40 ) - << QPolygon ( QRect( 0, 0, 30, 40 ) ); + sin( M_PI*deg/180. ), cos( M_PI*deg/180. ), 0, 0 ) + << QRect( 0, 0, 30, 40 ) + << QPolygon ( QRect( 0, 0, 30, 40 ) ); deg = 0.00001f; QTest::newRow( "rot 0 b" ) << QMatrix( cos( M_PI*deg/180. ), -sin( M_PI*deg/180. ), - sin( M_PI*deg/180. ), cos( M_PI*deg/180. ), 0, 0 ) - << QRect( 0, 0, 30, 40 ) - << QPolygon ( QRect( 0, 0, 30, 40 ) ); + sin( M_PI*deg/180. ), cos( M_PI*deg/180. ), 0, 0 ) + << QRect( 0, 0, 30, 40 ) + << QPolygon ( QRect( 0, 0, 30, 40 ) ); deg = 0.; QTest::newRow( "rot 0 c" ) << QMatrix( cos( M_PI*deg/180. ), -sin( M_PI*deg/180. ), - sin( M_PI*deg/180. ), cos( M_PI*deg/180. ), 0, 0 ) - << QRect( 10, 20, 30, 40 ) - << QPolygon ( QRect( 10, 20, 30, 40 ) ); + sin( M_PI*deg/180. ), cos( M_PI*deg/180. ), 0, 0 ) + << QRect( 10, 20, 30, 40 ) + << QPolygon ( QRect( 10, 20, 30, 40 ) ); deg = 0.00001f; QTest::newRow( "rot 0 d" ) << QMatrix( cos( M_PI*deg/180. ), -sin( M_PI*deg/180. ), - sin( M_PI*deg/180. ), cos( M_PI*deg/180. ), 0, 0 ) - << QRect( 10, 20, 30, 40 ) - << QPolygon ( QRect( 10, 20, 30, 40 ) ); + sin( M_PI*deg/180. ), cos( M_PI*deg/180. ), 0, 0 ) + << QRect( 10, 20, 30, 40 ) + << QPolygon ( QRect( 10, 20, 30, 40 ) ); #if 0 // rotations deg = 90.; QTest::newRow( "rotscale 90 a" ) << QMatrix( 10*cos( M_PI*deg/180. ), -10*sin( M_PI*deg/180. ), - 10*sin( M_PI*deg/180. ), 10*cos( M_PI*deg/180. ), 0, 0 ) - << QRect( 0, 0, 30, 40 ) - << QPolygon( QRect( 0, -299, 400, 300 ) ); + 10*sin( M_PI*deg/180. ), 10*cos( M_PI*deg/180. ), 0, 0 ) + << QRect( 0, 0, 30, 40 ) + << QPolygon( QRect( 0, -299, 400, 300 ) ); deg = 90.00001; QTest::newRow( "rotscale 90 b" ) << QMatrix( 10*cos( M_PI*deg/180. ), -10*sin( M_PI*deg/180. ), - 10*sin( M_PI*deg/180. ), 10*cos( M_PI*deg/180. ), 0, 0 ) - << QRect( 0, 0, 30, 40 ) - << QPolygon( QRect( 0, -299, 400, 300 ) ); + 10*sin( M_PI*deg/180. ), 10*cos( M_PI*deg/180. ), 0, 0 ) + << QRect( 0, 0, 30, 40 ) + << QPolygon( QRect( 0, -299, 400, 300 ) ); deg = 90.; QTest::newRow( "rotscale 90 c" ) << QMatrix( 10*cos( M_PI*deg/180. ), -10*sin( M_PI*deg/180. ), - 10*sin( M_PI*deg/180. ), 10*cos( M_PI*deg/180. ), 0, 0 ) - << QRect( 10, 20, 30, 40 ) - << QPolygon( QRect( 200, -399, 400, 300 ) ); + 10*sin( M_PI*deg/180. ), 10*cos( M_PI*deg/180. ), 0, 0 ) + << QRect( 10, 20, 30, 40 ) + << QPolygon( QRect( 200, -399, 400, 300 ) ); deg = 90.00001; QTest::newRow( "rotscale 90 d" ) << QMatrix( 10*cos( M_PI*deg/180. ), -10*sin( M_PI*deg/180. ), - 10*sin( M_PI*deg/180. ), 10*cos( M_PI*deg/180. ), 0, 0 ) - << QRect( 10, 20, 30, 40 ) - << QPolygon( QRect( 200, -399, 400, 300 ) ); + 10*sin( M_PI*deg/180. ), 10*cos( M_PI*deg/180. ), 0, 0 ) + << QRect( 10, 20, 30, 40 ) + << QPolygon( QRect( 200, -399, 400, 300 ) ); deg = 180.; QTest::newRow( "rotscale 180 a" ) << QMatrix( 10*cos( M_PI*deg/180. ), -10*sin( M_PI*deg/180. ), - 10*sin( M_PI*deg/180. ), 10*cos( M_PI*deg/180. ), 0, 0 ) - << QRect( 0, 0, 30, 40 ) - << QPolygon( QRect( -299, -399, 300, 400 ) ); + 10*sin( M_PI*deg/180. ), 10*cos( M_PI*deg/180. ), 0, 0 ) + << QRect( 0, 0, 30, 40 ) + << QPolygon( QRect( -299, -399, 300, 400 ) ); deg = 180.000001; QTest::newRow( "rotscale 180 b" ) << QMatrix( 10*cos( M_PI*deg/180. ), -10*sin( M_PI*deg/180. ), - 10*sin( M_PI*deg/180. ), 10*cos( M_PI*deg/180. ), 0, 0 ) - << QRect( 0, 0, 30, 40 ) - << QPolygon( QRect( -299, -399, 300, 400 ) ); + 10*sin( M_PI*deg/180. ), 10*cos( M_PI*deg/180. ), 0, 0 ) + << QRect( 0, 0, 30, 40 ) + << QPolygon( QRect( -299, -399, 300, 400 ) ); deg = 180.; QTest::newRow( "rotscale 180 c" ) << QMatrix( 10*cos( M_PI*deg/180. ), -10*sin( M_PI*deg/180. ), - 10*sin( M_PI*deg/180. ), 10*cos( M_PI*deg/180. ), 0, 0 ) - << QRect( 10, 20, 30, 40 ) - << QPolygon( QRect( -399, -599, 300, 400 ) ); + 10*sin( M_PI*deg/180. ), 10*cos( M_PI*deg/180. ), 0, 0 ) + << QRect( 10, 20, 30, 40 ) + << QPolygon( QRect( -399, -599, 300, 400 ) ); deg = 180.000001; QTest::newRow( "rotscale 180 d" ) << QMatrix( 10*cos( M_PI*deg/180. ), -10*sin( M_PI*deg/180. ), - 10*sin( M_PI*deg/180. ), 10*cos( M_PI*deg/180. ), 0, 0 ) - << QRect( 10, 20, 30, 40 ) - << QPolygon( QRect( -399, -599, 300, 400 ) ); + 10*sin( M_PI*deg/180. ), 10*cos( M_PI*deg/180. ), 0, 0 ) + << QRect( 10, 20, 30, 40 ) + << QPolygon( QRect( -399, -599, 300, 400 ) ); deg = 270.; QTest::newRow( "rotscale 270 a" ) << QMatrix( 10*cos( M_PI*deg/180. ), -10*sin( M_PI*deg/180. ), - 10*sin( M_PI*deg/180. ), 10*cos( M_PI*deg/180. ), 0, 0 ) - << QRect( 0, 0, 30, 40 ) - << QPolygon( QRect( -399, 00, 400, 300 ) ); + 10*sin( M_PI*deg/180. ), 10*cos( M_PI*deg/180. ), 0, 0 ) + << QRect( 0, 0, 30, 40 ) + << QPolygon( QRect( -399, 00, 400, 300 ) ); deg = 270.0000001; QTest::newRow( "rotscale 270 b" ) << QMatrix( 10*cos( M_PI*deg/180. ), -10*sin( M_PI*deg/180. ), - 10*sin( M_PI*deg/180. ), 10*cos( M_PI*deg/180. ), 0, 0 ) - << QRect( 0, 0, 30, 40 ) - << QPolygon( QRect( -399, 00, 400, 300 ) ); + 10*sin( M_PI*deg/180. ), 10*cos( M_PI*deg/180. ), 0, 0 ) + << QRect( 0, 0, 30, 40 ) + << QPolygon( QRect( -399, 00, 400, 300 ) ); deg = 270.; QTest::newRow( "rotscale 270 c" ) << QMatrix( 10*cos( M_PI*deg/180. ), -10*sin( M_PI*deg/180. ), - 10*sin( M_PI*deg/180. ), 10*cos( M_PI*deg/180. ), 0, 0 ) - << QRect( 10, 20, 30, 40 ) - << QPolygon( QRect( -599, 100, 400, 300 ) ); + 10*sin( M_PI*deg/180. ), 10*cos( M_PI*deg/180. ), 0, 0 ) + << QRect( 10, 20, 30, 40 ) + << QPolygon( QRect( -599, 100, 400, 300 ) ); deg = 270.000001; QTest::newRow( "rotscale 270 d" ) << QMatrix( 10*cos( M_PI*deg/180. ), -10*sin( M_PI*deg/180. ), - 10*sin( M_PI*deg/180. ), 10*cos( M_PI*deg/180. ), 0, 0 ) - << QRect( 10, 20, 30, 40 ) - << QPolygon( QRect( -599, 100, 400, 300 ) ); + 10*sin( M_PI*deg/180. ), 10*cos( M_PI*deg/180. ), 0, 0 ) + << QRect( 10, 20, 30, 40 ) + << QPolygon( QRect( -599, 100, 400, 300 ) ); // rotations that are not multiples of 90 degrees. mapRect returns the bounding rect here. deg = 45; QTest::newRow( "rot 45 a" ) << QMatrix( cos( M_PI*deg/180. ), -sin( M_PI*deg/180. ), - sin( M_PI*deg/180. ), cos( M_PI*deg/180. ), 0, 0 ) - << QRect( 0, 0, 10, 10 ) - << QPolygon( QRect( 0, -7, 14, 14 ) ); + sin( M_PI*deg/180. ), cos( M_PI*deg/180. ), 0, 0 ) + << QRect( 0, 0, 10, 10 ) + << QPolygon( QRect( 0, -7, 14, 14 ) ); QTest::newRow( "rot 45 b" ) << QMatrix( cos( M_PI*deg/180. ), -sin( M_PI*deg/180. ), - sin( M_PI*deg/180. ), cos( M_PI*deg/180. ), 0, 0 ) - << QRect( 10, 20, 30, 40 ) - << QPolygon( QRect( 21, -14, 49, 49 ) ); + sin( M_PI*deg/180. ), cos( M_PI*deg/180. ), 0, 0 ) + << QRect( 10, 20, 30, 40 ) + << QPolygon( QRect( 21, -14, 49, 49 ) ); QTest::newRow( "rot 45 c" ) << QMatrix( 10*cos( M_PI*deg/180. ), -10*sin( M_PI*deg/180. ), - 10*sin( M_PI*deg/180. ), 10*cos( M_PI*deg/180. ), 0, 0 ) - << QRect( 0, 0, 10, 10 ) - << QPolygon( QRect( 0, -70, 141, 141 ) ); + 10*sin( M_PI*deg/180. ), 10*cos( M_PI*deg/180. ), 0, 0 ) + << QRect( 0, 0, 10, 10 ) + << QPolygon( QRect( 0, -70, 141, 141 ) ); QTest::newRow( "rot 45 d" ) << QMatrix( 10*cos( M_PI*deg/180. ), -10*sin( M_PI*deg/180. ), - 10*sin( M_PI*deg/180. ), 10*cos( M_PI*deg/180. ), 0, 0 ) - << QRect( 10, 20, 30, 40 ) - << QPolygon( QRect( 212, -141, 495, 495 ) ); + 10*sin( M_PI*deg/180. ), 10*cos( M_PI*deg/180. ), 0, 0 ) + << QRect( 10, 20, 30, 40 ) + << QPolygon( QRect( 212, -141, 495, 495 ) ); deg = -45; QTest::newRow( "rot -45 a" ) << QMatrix( cos( M_PI*deg/180. ), -sin( M_PI*deg/180. ), - sin( M_PI*deg/180. ), cos( M_PI*deg/180. ), 0, 0 ) - << QRect( 0, 0, 10, 10 ) - << QPolygon( QRect( -7, 0, 14, 14 ) ); + sin( M_PI*deg/180. ), cos( M_PI*deg/180. ), 0, 0 ) + << QRect( 0, 0, 10, 10 ) + << QPolygon( QRect( -7, 0, 14, 14 ) ); QTest::newRow( "rot -45 b" ) << QMatrix( cos( M_PI*deg/180. ), -sin( M_PI*deg/180. ), - sin( M_PI*deg/180. ), cos( M_PI*deg/180. ), 0, 0 ) - << QRect( 10, 20, 30, 40 ) - << QPolygon( QRect( -35, 21, 49, 49 ) ); + sin( M_PI*deg/180. ), cos( M_PI*deg/180. ), 0, 0 ) + << QRect( 10, 20, 30, 40 ) + << QPolygon( QRect( -35, 21, 49, 49 ) ); QTest::newRow( "rot -45 c" ) << QMatrix( 10*cos( M_PI*deg/180. ), -10*sin( M_PI*deg/180. ), - 10*sin( M_PI*deg/180. ), 10*cos( M_PI*deg/180. ), 0, 0 ) - << QRect( 0, 0, 10, 10 ) - << QPolygon( QRect( -70, 0, 141, 141 ) ); + 10*sin( M_PI*deg/180. ), 10*cos( M_PI*deg/180. ), 0, 0 ) + << QRect( 0, 0, 10, 10 ) + << QPolygon( QRect( -70, 0, 141, 141 ) ); QTest::newRow( "rot -45 d" ) << QMatrix( 10*cos( M_PI*deg/180. ), -10*sin( M_PI*deg/180. ), - 10*sin( M_PI*deg/180. ), 10*cos( M_PI*deg/180. ), 0, 0 ) - << QRect( 10, 20, 30, 40 ) - << QPolygon( QRect( -353, 212, 495, 495 ) ); + 10*sin( M_PI*deg/180. ), 10*cos( M_PI*deg/180. ), 0, 0 ) + << QRect( 10, 20, 30, 40 ) + << QPolygon( QRect( -353, 212, 495, 495 ) ); #endif } diff --git a/tests/auto/gui/text/qfont/tst_qfont.cpp b/tests/auto/gui/text/qfont/tst_qfont.cpp index aa5fa10a33..a7248869ed 100644 --- a/tests/auto/gui/text/qfont/tst_qfont.cpp +++ b/tests/auto/gui/text/qfont/tst_qfont.cpp @@ -316,25 +316,25 @@ void tst_QFont::italicOblique() QStringList::ConstIterator f_it, f_end = families.end(); for (f_it = families.begin(); f_it != f_end; ++f_it) { - QString family = *f_it; - QStringList styles = fdb.styles(family); - QVERIFY(!styles.isEmpty()); - QStringList::ConstIterator s_it, s_end = styles.end(); - for (s_it = styles.begin(); s_it != s_end; ++s_it) { - QString style = *s_it; - - if (fdb.isSmoothlyScalable(family, style)) { - if (style.contains("Oblique")) { - style.replace("Oblique", "Italic"); - } else if (style.contains("Italic")) { - style.replace("Italic", "Oblique"); - } else { - continue; - } - QFont f = fdb.font(family, style, 12); - QVERIFY(f.italic()); - } - } + QString family = *f_it; + QStringList styles = fdb.styles(family); + QVERIFY(!styles.isEmpty()); + QStringList::ConstIterator s_it, s_end = styles.end(); + for (s_it = styles.begin(); s_it != s_end; ++s_it) { + QString style = *s_it; + + if (fdb.isSmoothlyScalable(family, style)) { + if (style.contains("Oblique")) { + style.replace("Oblique", "Italic"); + } else if (style.contains("Italic")) { + style.replace("Italic", "Oblique"); + } else { + continue; + } + QFont f = fdb.font(family, style, 12); + QVERIFY(f.italic()); + } + } } } @@ -342,16 +342,16 @@ void tst_QFont::compare() { QFont font; { - QFont font2 = font; - font2.setPointSize( 24 ); - QVERIFY( font != font2 ); - QCOMPARE(font < font2,!(font2 < font)); + QFont font2 = font; + font2.setPointSize(24); + QVERIFY(font != font2); + QCOMPARE(font < font2,!(font2 < font)); } { - QFont font2 = font; - font2.setPixelSize( 24 ); - QVERIFY( font != font2 ); - QCOMPARE(font < font2,!(font2 < font)); + QFont font2 = font; + font2.setPixelSize(24); + QVERIFY(font != font2); + QCOMPARE(font < font2,!(font2 < font)); } font.setPointSize(12); @@ -361,69 +361,69 @@ void tst_QFont::compare() font.setStrikeOut(false); font.setOverline(false); { - QFont font2 = font; - font2.setPointSize( 24 ); - QVERIFY( font != font2 ); - QCOMPARE(font < font2,!(font2 < font)); + QFont font2 = font; + font2.setPointSize(24); + QVERIFY(font != font2); + QCOMPARE(font < font2,!(font2 < font)); } { - QFont font2 = font; - font2.setPixelSize( 24 ); - QVERIFY( font != font2 ); - QCOMPARE(font < font2,!(font2 < font)); + QFont font2 = font; + font2.setPixelSize(24); + QVERIFY(font != font2); + QCOMPARE(font < font2,!(font2 < font)); } { - QFont font2 = font; - - font2.setItalic(true); - QVERIFY( font != font2 ); - QCOMPARE(font < font2,!(font2 < font)); - font2.setItalic(false); - QVERIFY( font == font2 ); - QVERIFY(!(font < font2)); - - font2.setWeight(QFont::Bold); - QVERIFY( font != font2 ); - QCOMPARE(font < font2,!(font2 < font)); - font2.setWeight(QFont::Normal); - QVERIFY( font == font2 ); - QVERIFY(!(font < font2)); - - font.setUnderline(true); - QVERIFY( font != font2 ); - QCOMPARE(font < font2,!(font2 < font)); - font.setUnderline(false); - QVERIFY( font == font2 ); - QVERIFY(!(font < font2)); - - font.setStrikeOut(true); - QVERIFY( font != font2 ); - QCOMPARE(font < font2,!(font2 < font)); - font.setStrikeOut(false); - QVERIFY( font == font2 ); - QVERIFY(!(font < font2)); - - font.setOverline(true); - QVERIFY( font != font2 ); - QCOMPARE(font < font2,!(font2 < font)); - font.setOverline(false); - QVERIFY( font == font2 ); - QVERIFY(!(font < font2)); + QFont font2 = font; + + font2.setItalic(true); + QVERIFY(font != font2); + QCOMPARE(font < font2,!(font2 < font)); + font2.setItalic(false); + QVERIFY(font == font2); + QVERIFY(!(font < font2)); + + font2.setWeight(QFont::Bold); + QVERIFY(font != font2); + QCOMPARE(font < font2,!(font2 < font)); + font2.setWeight(QFont::Normal); + QVERIFY(font == font2); + QVERIFY(!(font < font2)); + + font.setUnderline(true); + QVERIFY(font != font2); + QCOMPARE(font < font2,!(font2 < font)); + font.setUnderline(false); + QVERIFY(font == font2); + QVERIFY(!(font < font2)); + + font.setStrikeOut(true); + QVERIFY(font != font2); + QCOMPARE(font < font2,!(font2 < font)); + font.setStrikeOut(false); + QVERIFY(font == font2); + QVERIFY(!(font < font2)); + + font.setOverline(true); + QVERIFY(font != font2); + QCOMPARE(font < font2,!(font2 < font)); + font.setOverline(false); + QVERIFY(font == font2); + QVERIFY(!(font < font2)); font.setCapitalization(QFont::SmallCaps); - QVERIFY( font != font2 ); - QCOMPARE(font < font2,!(font2 < font)); + QVERIFY(font != font2); + QCOMPARE(font < font2,!(font2 < font)); font.setCapitalization(QFont::MixedCase); - QVERIFY( font == font2 ); - QVERIFY(!(font < font2)); + QVERIFY(font == font2); + QVERIFY(!(font < font2)); } #if defined(Q_WS_X11) { - QFont font1, font2; - font1.setRawName("-Adobe-Helvetica-medium-r-normal--12-120-75-75-p-67-iso8859-1"); - font2.setRawName("-Adobe-Helvetica-medium-r-normal--24-240-75-75-p-130-iso8859-1"); - QVERIFY(font1 != font2); + QFont font1, font2; + font1.setRawName("-Adobe-Helvetica-medium-r-normal--12-120-75-75-p-67-iso8859-1"); + font2.setRawName("-Adobe-Helvetica-medium-r-normal--24-240-75-75-p-130-iso8859-1"); + QVERIFY(font1 != font2); } #endif } diff --git a/tests/auto/gui/text/qfontdatabase/tst_qfontdatabase.cpp b/tests/auto/gui/text/qfontdatabase/tst_qfontdatabase.cpp index 104d3465f2..fa5c81a2f0 100644 --- a/tests/auto/gui/text/qfontdatabase/tst_qfontdatabase.cpp +++ b/tests/auto/gui/text/qfontdatabase/tst_qfontdatabase.cpp @@ -124,11 +124,11 @@ void tst_QFontDatabase::styles() QStringList styles = fdb.styles( font ); QStringList::Iterator it = styles.begin(); while ( it != styles.end() ) { - QString style = *it; - QString trimmed = style.trimmed(); - ++it; + QString style = *it; + QString trimmed = style.trimmed(); + ++it; - QCOMPARE( style, trimmed ); + QCOMPARE(style, trimmed); } } @@ -160,7 +160,7 @@ void tst_QFontDatabase::fixedPitch() QFontDatabase fdb; if (!fdb.families().contains(font)) - QSKIP( "Font not installed"); + QSKIP("Font not installed"); QCOMPARE(fdb.isFixedPitch(font), fixedPitch); diff --git a/tests/auto/gui/text/qfontmetrics/tst_qfontmetrics.cpp b/tests/auto/gui/text/qfontmetrics/tst_qfontmetrics.cpp index cddec5b6e7..7adaac9fac 100644 --- a/tests/auto/gui/text/qfontmetrics/tst_qfontmetrics.cpp +++ b/tests/auto/gui/text/qfontmetrics/tst_qfontmetrics.cpp @@ -163,7 +163,7 @@ void tst_QFontMetrics::metrics() fontmetrics.lineSpacing()); } } - } + } } } diff --git a/tests/auto/gui/text/qtextdocument/common.h b/tests/auto/gui/text/qtextdocument/common.h index 8fb5fe2499..184b2f7ec7 100644 --- a/tests/auto/gui/text/qtextdocument/common.h +++ b/tests/auto/gui/text/qtextdocument/common.h @@ -79,11 +79,11 @@ public: int l; void expect(int from, int oldLength, int length) { - f = from; - o = oldLength; - l = length; - error = false; - called = false; + f = from; + o = oldLength; + l = length; + error = false; + called = false; } bool error; bool called; diff --git a/tests/auto/gui/text/qtextdocumentfragment/tst_qtextdocumentfragment.cpp b/tests/auto/gui/text/qtextdocumentfragment/tst_qtextdocumentfragment.cpp index 9f9b6acb02..009b536d7e 100644 --- a/tests/auto/gui/text/qtextdocumentfragment/tst_qtextdocumentfragment.cpp +++ b/tests/auto/gui/text/qtextdocumentfragment/tst_qtextdocumentfragment.cpp @@ -360,8 +360,8 @@ void tst_QTextDocumentFragment::listCopying2() cursor.movePosition(QTextCursor::Start); int listItemCount = 0; do { - if (cursor.currentList()) - listItemCount++; + if (cursor.currentList()) + listItemCount++; } while (cursor.movePosition(QTextCursor::NextBlock)); QCOMPARE(listItemCount, 4); @@ -378,35 +378,35 @@ void tst_QTextDocumentFragment::tableCopying() // as the pasiveness of the tablemanager. QTextDocumentFragment fragment; { - QTextDocument doc; - QTextCursor cursor(&doc); + QTextDocument doc; + QTextCursor cursor(&doc); - QTextTableFormat fmt; - QTextTable *table = cursor.insertTable(2, 2, fmt); + QTextTableFormat fmt; + QTextTable *table = cursor.insertTable(2, 2, fmt); - table->cellAt(0, 0).firstCursorPosition().insertText("First Cell"); - table->cellAt(0, 1).firstCursorPosition().insertText("Second Cell"); - table->cellAt(1, 0).firstCursorPosition().insertText("Third Cell"); - table->cellAt(1, 1).firstCursorPosition().insertText("Fourth Cell"); + table->cellAt(0, 0).firstCursorPosition().insertText("First Cell"); + table->cellAt(0, 1).firstCursorPosition().insertText("Second Cell"); + table->cellAt(1, 0).firstCursorPosition().insertText("Third Cell"); + table->cellAt(1, 1).firstCursorPosition().insertText("Fourth Cell"); - fragment = QTextDocumentFragment(&doc); + fragment = QTextDocumentFragment(&doc); } { - QTextDocument doc; - QTextCursor cursor(&doc); + QTextDocument doc; + QTextCursor cursor(&doc); - cursor.insertText("FooBar"); - cursor.insertBlock(); - cursor.movePosition(QTextCursor::Left); + cursor.insertText("FooBar"); + cursor.insertBlock(); + cursor.movePosition(QTextCursor::Left); - cursor.insertFragment(fragment); - cursor.movePosition(QTextCursor::Start); - cursor.movePosition(QTextCursor::NextBlock); + cursor.insertFragment(fragment); + cursor.movePosition(QTextCursor::Start); + cursor.movePosition(QTextCursor::NextBlock); - QTextTable *table = cursor.currentTable(); - QVERIFY(table); - QCOMPARE(table->rows(), 2); - QCOMPARE(table->columns(), 2); + QTextTable *table = cursor.currentTable(); + QVERIFY(table); + QCOMPARE(table->rows(), 2); + QCOMPARE(table->columns(), 2); } } @@ -488,91 +488,91 @@ void tst_QTextDocumentFragment::tableImport() void tst_QTextDocumentFragment::tableImport2() { { - const char html[] = "" - "" - "" - "" - "
First CellSecond Cell
Third CellFourth Cell
"; - - QTextDocument doc; - QTextCursor cursor(&doc); - cursor.insertFragment(QTextDocumentFragment::fromHtml(QByteArray::fromRawData(html, sizeof(html) / sizeof(html[0])))); - - cursor.movePosition(QTextCursor::Start); - cursor.movePosition(QTextCursor::NextBlock); - QTextTable *table = cursor.currentTable(); - QVERIFY(table); - QCOMPARE(table->columns(), 2); - QCOMPARE(table->rows(), 2); + const char html[] = "" + "" + "" + "" + "
First CellSecond Cell
Third CellFourth Cell
"; + + QTextDocument doc; + QTextCursor cursor(&doc); + cursor.insertFragment(QTextDocumentFragment::fromHtml(QByteArray::fromRawData(html, sizeof(html) / sizeof(html[0])))); + + cursor.movePosition(QTextCursor::Start); + cursor.movePosition(QTextCursor::NextBlock); + QTextTable *table = cursor.currentTable(); + QVERIFY(table); + QCOMPARE(table->columns(), 2); + QCOMPARE(table->rows(), 2); } { - const char html[] = "" - "" - "" - "" - "
First CellSecond Cell
Third Cell" - " " - " " - " " - " " - "
First Nested CellSecond Nested Cell
Third Nested CellFourth Nested Cell
Fifth Nested CellSixth Nested Cell
"; - - QTextDocument doc; - QTextCursor cursor(&doc); - cursor.insertFragment(QTextDocumentFragment::fromHtml(QByteArray::fromRawData(html, sizeof(html) / sizeof(html[0])))); - - cursor.movePosition(QTextCursor::Start); - cursor.movePosition(QTextCursor::NextBlock); - QTextTable *table = cursor.currentTable(); - QVERIFY(table); - QCOMPARE(table->columns(), 2); - QCOMPARE(table->rows(), 2); + const char html[] = "" + "" + "" + "" + "
First CellSecond Cell
Third Cell" + " " + " " + " " + " " + "
First Nested CellSecond Nested Cell
Third Nested CellFourth Nested Cell
Fifth Nested CellSixth Nested Cell
"; + + QTextDocument doc; + QTextCursor cursor(&doc); + cursor.insertFragment(QTextDocumentFragment::fromHtml(QByteArray::fromRawData(html, sizeof(html) / sizeof(html[0])))); + + cursor.movePosition(QTextCursor::Start); + cursor.movePosition(QTextCursor::NextBlock); + QTextTable *table = cursor.currentTable(); + QVERIFY(table); + QCOMPARE(table->columns(), 2); + QCOMPARE(table->rows(), 2); /* - QTextCursor fourthCell = table->cellAt(1, 1).firstCursorPosition(); - fourthCell.movePosition(QTextCursor::NextBlock); - table = fourthCell.currentTable(); - QVERIFY(table); - QVERIFY(table != cursor.currentTable()); - QCOMPARE(table->columns(), 2); - QCOMPARE(table->rows(), 3); + QTextCursor fourthCell = table->cellAt(1, 1).firstCursorPosition(); + fourthCell.movePosition(QTextCursor::NextBlock); + table = fourthCell.currentTable(); + QVERIFY(table); + QVERIFY(table != cursor.currentTable()); + QCOMPARE(table->columns(), 2); + QCOMPARE(table->rows(), 3); */ } { - const char buggyHtml[] = "" - "" - "
First CellSecond Cell" - "
Third CellFourth Cell" - "
"; - - QTextDocument doc; - QTextCursor cursor(&doc); - cursor.insertFragment(QTextDocumentFragment::fromHtml(QByteArray::fromRawData(buggyHtml, sizeof(buggyHtml) / sizeof(buggyHtml[0])))); - - cursor.movePosition(QTextCursor::Start); - cursor.movePosition(QTextCursor::NextBlock); - QTextTable *table = cursor.currentTable(); - QVERIFY(table); - QCOMPARE(table->columns(), 2); - QCOMPARE(table->rows(), 2); + const char buggyHtml[] = "" + "" + "
First CellSecond Cell" + "
Third CellFourth Cell" + "
"; + + QTextDocument doc; + QTextCursor cursor(&doc); + cursor.insertFragment(QTextDocumentFragment::fromHtml(QByteArray::fromRawData(buggyHtml, sizeof(buggyHtml) / sizeof(buggyHtml[0])))); + + cursor.movePosition(QTextCursor::Start); + cursor.movePosition(QTextCursor::NextBlock); + QTextTable *table = cursor.currentTable(); + QVERIFY(table); + QCOMPARE(table->columns(), 2); + QCOMPARE(table->rows(), 2); } { - const char buggyHtml[] = "" - "" - "
First CellSecond Cell" - "
Third CellFourth Cell" - "
"; - - QTextDocument doc; - QTextCursor cursor(&doc); - cursor.insertFragment(QTextDocumentFragment::fromHtml(QByteArray::fromRawData(buggyHtml, sizeof(buggyHtml) / sizeof(buggyHtml[0])))); - - cursor.movePosition(QTextCursor::Start); - cursor.movePosition(QTextCursor::NextBlock); - QTextTable *table = cursor.currentTable(); - QVERIFY(table); - QCOMPARE(table->columns(), 2); - QCOMPARE(table->rows(), 2); + const char buggyHtml[] = "" + "" + "
First CellSecond Cell" + "
Third CellFourth Cell" + "
"; + + QTextDocument doc; + QTextCursor cursor(&doc); + cursor.insertFragment(QTextDocumentFragment::fromHtml(QByteArray::fromRawData(buggyHtml, sizeof(buggyHtml) / sizeof(buggyHtml[0])))); + + cursor.movePosition(QTextCursor::Start); + cursor.movePosition(QTextCursor::NextBlock); + QTextTable *table = cursor.currentTable(); + QVERIFY(table); + QCOMPARE(table->columns(), 2); + QCOMPARE(table->rows(), 2); } } diff --git a/tests/auto/gui/text/qtextlayout/tst_qtextlayout.cpp b/tests/auto/gui/text/qtextlayout/tst_qtextlayout.cpp index 90137079f3..56d6711dc6 100644 --- a/tests/auto/gui/text/qtextlayout/tst_qtextlayout.cpp +++ b/tests/auto/gui/text/qtextlayout/tst_qtextlayout.cpp @@ -212,63 +212,63 @@ void tst_QTextLayout::lineBreaking() { #if 0 struct Breaks { - const char *utf8; - uchar breaks[32]; + const char *utf8; + uchar breaks[32]; }; Breaks brks[] = { - { "11", { false, 0xff } }, - { "aa", { false, 0xff } }, - { "++", { false, 0xff } }, - { "--", { false, 0xff } }, - { "((", { false, 0xff } }, - { "))", { false, 0xff } }, - { "..", { false, 0xff } }, - { "\"\"", { false, 0xff } }, - { "$$", { false, 0xff } }, - { "!!", { false, 0xff } }, - { "??", { false, 0xff } }, - { ",,", { false, 0xff } }, - - { ")()", { true, false, 0xff } }, - { "?!?", { false, false, 0xff } }, - { ".,.", { false, false, 0xff } }, - { "+-+", { false, false, 0xff } }, - { "+=+", { false, false, 0xff } }, - { "+(+", { false, false, 0xff } }, - { "+)+", { false, false, 0xff } }, - - { "a b", { false, true, 0xff } }, - { "a(b", { false, false, 0xff } }, - { "a)b", { false, false, 0xff } }, - { "a-b", { false, true, 0xff } }, - { "a.b", { false, false, 0xff } }, - { "a+b", { false, false, 0xff } }, - { "a?b", { false, false, 0xff } }, - { "a!b", { false, false, 0xff } }, - { "a$b", { false, false, 0xff } }, - { "a,b", { false, false, 0xff } }, - { "a/b", { false, false, 0xff } }, - { "1/2", { false, false, 0xff } }, - { "./.", { false, false, 0xff } }, - { ",/,", { false, false, 0xff } }, - { "!/!", { false, false, 0xff } }, - { "\\/\\", { false, false, 0xff } }, - { "1 2", { false, true, 0xff } }, - { "1(2", { false, false, 0xff } }, - { "1)2", { false, false, 0xff } }, - { "1-2", { false, false, 0xff } }, - { "1.2", { false, false, 0xff } }, - { "1+2", { false, false, 0xff } }, - { "1?2", { false, true, 0xff } }, - { "1!2", { false, true, 0xff } }, - { "1$2", { false, false, 0xff } }, - { "1,2", { false, false, 0xff } }, - { "1/2", { false, false, 0xff } }, - { "\330\260\331\216\331\204\331\220\331\203\331\216", { false, false, false, false, false, 0xff } }, - { "\330\247\331\204\331\205 \330\247\331\204\331\205", { false, false, false, true, false, false, 0xff } }, - { "1#2", { false, false, 0xff } }, - { "!#!", { false, false, 0xff } }, - { 0, {} } + { "11", { false, 0xff } }, + { "aa", { false, 0xff } }, + { "++", { false, 0xff } }, + { "--", { false, 0xff } }, + { "((", { false, 0xff } }, + { "))", { false, 0xff } }, + { "..", { false, 0xff } }, + { "\"\"", { false, 0xff } }, + { "$$", { false, 0xff } }, + { "!!", { false, 0xff } }, + { "??", { false, 0xff } }, + { ",,", { false, 0xff } }, + + { ")()", { true, false, 0xff } }, + { "?!?", { false, false, 0xff } }, + { ".,.", { false, false, 0xff } }, + { "+-+", { false, false, 0xff } }, + { "+=+", { false, false, 0xff } }, + { "+(+", { false, false, 0xff } }, + { "+)+", { false, false, 0xff } }, + + { "a b", { false, true, 0xff } }, + { "a(b", { false, false, 0xff } }, + { "a)b", { false, false, 0xff } }, + { "a-b", { false, true, 0xff } }, + { "a.b", { false, false, 0xff } }, + { "a+b", { false, false, 0xff } }, + { "a?b", { false, false, 0xff } }, + { "a!b", { false, false, 0xff } }, + { "a$b", { false, false, 0xff } }, + { "a,b", { false, false, 0xff } }, + { "a/b", { false, false, 0xff } }, + { "1/2", { false, false, 0xff } }, + { "./.", { false, false, 0xff } }, + { ",/,", { false, false, 0xff } }, + { "!/!", { false, false, 0xff } }, + { "\\/\\", { false, false, 0xff } }, + { "1 2", { false, true, 0xff } }, + { "1(2", { false, false, 0xff } }, + { "1)2", { false, false, 0xff } }, + { "1-2", { false, false, 0xff } }, + { "1.2", { false, false, 0xff } }, + { "1+2", { false, false, 0xff } }, + { "1?2", { false, true, 0xff } }, + { "1!2", { false, true, 0xff } }, + { "1$2", { false, false, 0xff } }, + { "1,2", { false, false, 0xff } }, + { "1/2", { false, false, 0xff } }, + { "\330\260\331\216\331\204\331\220\331\203\331\216", { false, false, false, false, false, 0xff } }, + { "\330\247\331\204\331\205 \330\247\331\204\331\205", { false, false, false, true, false, false, 0xff } }, + { "1#2", { false, false, 0xff } }, + { "!#!", { false, false, 0xff } }, + { 0, {} } }; Breaks *b = brks; while (b->utf8) { diff --git a/tests/auto/gui/text/qtextlist/tst_qtextlist.cpp b/tests/auto/gui/text/qtextlist/tst_qtextlist.cpp index 10a25ba437..0628cc66d1 100644 --- a/tests/auto/gui/text/qtextlist/tst_qtextlist.cpp +++ b/tests/auto/gui/text/qtextlist/tst_qtextlist.cpp @@ -119,7 +119,7 @@ void tst_QTextList::autoNumbering() QVERIFY(list); for (int i = 0; i < 27; ++i) - cursor.insertBlock(); + cursor.insertBlock(); QVERIFY(list->count() == 28); diff --git a/tests/auto/gui/text/qtextpiecetable/tst_qtextpiecetable.cpp b/tests/auto/gui/text/qtextpiecetable/tst_qtextpiecetable.cpp index 3359cc8d32..5efb532233 100644 --- a/tests/auto/gui/text/qtextpiecetable/tst_qtextpiecetable.cpp +++ b/tests/auto/gui/text/qtextpiecetable/tst_qtextpiecetable.cpp @@ -158,12 +158,12 @@ void tst_QTextPieceTable::insertion3() { QString compare; for (int i = 0; i < 20000; ++i) { - int pos = rand() % (i+1); - QChar c((unsigned short)(i & 0xff) + 1); - QString str; - str += c; - table->insert(pos, str, charFormatIndex); - compare.insert(pos, str); + int pos = rand() % (i+1); + QChar c((unsigned short)(i & 0xff) + 1); + QString str; + str += c; + table->insert(pos, str, charFormatIndex); + compare.insert(pos, str); } QVERIFY(table->plainText() == compare); } @@ -172,17 +172,17 @@ void tst_QTextPieceTable::insertion4() { QString compare; for (int i = 0; i < 20000; ++i) { - int pos = rand() % (i+1); - QChar c((unsigned short)((i % 26) + (i>25?'A':'a'))); - QString str; - str += c; - str += c; - table->insert(pos, str, charFormatIndex); - compare.insert(pos, str); - // if (table->text() != compare) { - // qDebug("compare failed: i=%d (current char=%c) insert at %d\nexpected '%s'\ngot '%s'", i, (i % 26) + (i>25?'A':'a'), pos, compare.latin1(), table->text().latin1()); - // exit(12); - // } + int pos = rand() % (i+1); + QChar c((unsigned short)((i % 26) + (i>25?'A':'a'))); + QString str; + str += c; + str += c; + table->insert(pos, str, charFormatIndex); + compare.insert(pos, str); +// if (table->text() != compare) { +// qDebug("compare failed: i=%d (current char=%c) insert at %d\nexpected '%s'\ngot '%s'", i, (i % 26) + (i>25?'A':'a'), pos, compare.latin1(), table->text().latin1()); +// exit(12); +// } } QVERIFY(table->plainText() == compare); } @@ -191,23 +191,23 @@ void tst_QTextPieceTable::insertion5() { QString compare; for (int i = 0; i < 20000; ++i) { - int pos = rand() % (i+1); - QChar c((unsigned short)((i % 26) + (i>25?'A':'a'))); - QString str; - str += c; - str += c; - if (c == 'a') { - table->insertBlock(pos, blockFormatIndex, charFormatIndex); - str = QChar(QChar::ParagraphSeparator); - } else { - table->insert(pos, str, charFormatIndex); - } - compare.insert(pos, str); + int pos = rand() % (i+1); + QChar c((unsigned short)((i % 26) + (i>25?'A':'a'))); + QString str; + str += c; + str += c; + if (c == 'a') { + table->insertBlock(pos, blockFormatIndex, charFormatIndex); + str = QChar(QChar::ParagraphSeparator); + } else { + table->insert(pos, str, charFormatIndex); + } + compare.insert(pos, str); } QVERIFY(table->plainText() == compare); for (QTextBlock it = table->blocksBegin(); it != table->blocksEnd(); it = it.next()) { - QTextDocumentPrivate::FragmentIterator fit = table->find(it.position()); - QVERIFY(fit.position() == it.position()); + QTextDocumentPrivate::FragmentIterator fit = table->find(it.position()); + QVERIFY(fit.position() == it.position()); } } @@ -249,24 +249,24 @@ void tst_QTextPieceTable::removal3() QString compare; int l = 0; for (int i = 0; i < 20000; ++i) { - bool remove = l && (rand() % 2); - int pos = rand() % (remove ? l : (l+1)); - QChar c((unsigned short)((i % 26) + (i>25?'A':'a'))); - QString str; - str += c; - str += c; - if (remove && pos < table->length()) { - compare.remove(pos, 1); - table->remove(pos, 1); - } else { - compare.insert(pos, str); - table->insert(pos, str, charFormatIndex); - } - l += remove ? -1 : 2; - // if (table->text() != compare) { - // qDebug("compare failed: i=%d (current char=%c) insert at %d\nexpected '%s'\ngot '%s'", i, (i % 26) + (i>25?'A':'a'), pos, compare.latin1(), table->text().latin1()); - // exit(12); - // } + bool remove = l && (rand() % 2); + int pos = rand() % (remove ? l : (l+1)); + QChar c((unsigned short)((i % 26) + (i>25?'A':'a'))); + QString str; + str += c; + str += c; + if (remove && pos < table->length()) { + compare.remove(pos, 1); + table->remove(pos, 1); + } else { + compare.insert(pos, str); + table->insert(pos, str, charFormatIndex); + } + l += remove ? -1 : 2; +// if (table->text() != compare) { +// qDebug("compare failed: i=%d (current char=%c) insert at %d\nexpected '%s'\ngot '%s'", i, (i % 26) + (i>25?'A':'a'), pos, compare.latin1(), table->text().latin1()); +// exit(12); +// } } QVERIFY(table->plainText() == compare); } @@ -276,31 +276,31 @@ void tst_QTextPieceTable::removal4() QString compare; int l = 0; for (int i = 0; i < 20000; ++i) { - bool remove = l && (rand() % 2); - int pos = (l > 1) ? rand() % (remove ? l-1 : l) : 0; - QChar c((unsigned short)((i % 26) + (i>25?'A':'a'))); - QString str; - if (c != 'a') { - str += c; - str += c; - } else { - str = QChar(QChar::ParagraphSeparator); - } - if (remove && pos < table->length() - 1) { - compare.remove(pos, 1); - table->remove(pos, 1); - } else { - if (str[0] == QChar(QChar::ParagraphSeparator)) - table->insertBlock(pos, blockFormatIndex, charFormatIndex); - else - table->insert(pos, str, charFormatIndex); - compare.insert(pos, str); - } - l += remove ? -1 : 2; -// if (table->plainText() != compare) { -// qDebug("compare failed: i=%d (current char=%c) insert at %d\nexpected '%s'\ngot '%s'", i, (i % 26) + (i>25?'A':'a'), pos, compare.latin1(), table->plainText().latin1()); -// exit(12); -// } + bool remove = l && (rand() % 2); + int pos = (l > 1) ? rand() % (remove ? l-1 : l) : 0; + QChar c((unsigned short)((i % 26) + (i>25?'A':'a'))); + QString str; + if (c != 'a') { + str += c; + str += c; + } else { + str = QChar(QChar::ParagraphSeparator); + } + if (remove && pos < table->length() - 1) { + compare.remove(pos, 1); + table->remove(pos, 1); + } else { + if (str[0] == QChar(QChar::ParagraphSeparator)) + table->insertBlock(pos, blockFormatIndex, charFormatIndex); + else + table->insert(pos, str, charFormatIndex); + compare.insert(pos, str); + } + l += remove ? -1 : 2; +// if (table->plainText() != compare) { +// qDebug("compare failed: i=%d (current char=%c) insert at %d\nexpected '%s'\ngot '%s'", i, (i % 26) + (i>25?'A':'a'), pos, compare.latin1(), table->plainText().latin1()); +// exit(12); +// } } QVERIFY(table->plainText() == compare); } @@ -490,27 +490,27 @@ void tst_QTextPieceTable::undoRedo11() QString compare; int l = 0; for (int i = 0; i < loops; ++i) { - bool remove = l && (rand() % 2); - int pos = (l > 1) ? rand() % (remove ? l-1 : l) : 0; - QChar c((unsigned short)((i % 26) + (i>25?'A':'a'))); - QString str; - str += c; - str += c; - if (remove) { - compare.remove(pos, 1); - table->remove(pos, 1); - } else { - compare.insert(pos, str); - table->insert(pos, str, charFormatIndex); - } - l += remove ? -1 : 2; + bool remove = l && (rand() % 2); + int pos = (l > 1) ? rand() % (remove ? l-1 : l) : 0; + QChar c((unsigned short)((i % 26) + (i>25?'A':'a'))); + QString str; + str += c; + str += c; + if (remove) { + compare.remove(pos, 1); + table->remove(pos, 1); + } else { + compare.insert(pos, str); + table->insert(pos, str, charFormatIndex); + } + l += remove ? -1 : 2; } QVERIFY(table->plainText() == compare); for (int i = 0; i < loops; ++i) - table->undo(); + table->undo(); QVERIFY(table->plainText() == QString("")); for (int i = 0; i < loops; ++i) - table->redo(); + table->redo(); QVERIFY(table->plainText() == compare); } diff --git a/tests/auto/network/bearer/qnetworksession/test/tst_qnetworksession.cpp b/tests/auto/network/bearer/qnetworksession/test/tst_qnetworksession.cpp index 5dede11e5b..8d222965eb 100644 --- a/tests/auto/network/bearer/qnetworksession/test/tst_qnetworksession.cpp +++ b/tests/auto/network/bearer/qnetworksession/test/tst_qnetworksession.cpp @@ -749,7 +749,7 @@ void tst_QNetworkSession::sessionOpenCloseStop() } else if (state == QNetworkSession::Disconnected) { QTRY_VERIFY_WITH_TIMEOUT(!errorSpy.isEmpty(), TestTimeOut); QTRY_VERIFY_WITH_TIMEOUT(session2.state() == QNetworkSession::Disconnected, TestTimeOut); - } else if (state == QNetworkSession::Connected) { + } else if (state == QNetworkSession::Connected) { QTRY_VERIFY_WITH_TIMEOUT(errorSpy.isEmpty(),TestTimeOut); if (stateChangedSpy.count() > 1) { @@ -1121,13 +1121,13 @@ bool openSession(QNetworkSession *session) { } if (session->configuration().state() != QNetworkConfiguration::Active) { qDebug("tst_QNetworkSession::openSession() failure: session's configuration is not in 'Active' -state."); - qDebug() << "tst_QNetworkSession::openSession() state is: " << session->configuration().state(); + qDebug() << "tst_QNetworkSession::openSession() state is: " << session->configuration().state(); result = false; } if (result == false) { - qDebug() << "tst_QNetworkSession::openSession() opening session failed."; + qDebug() << "tst_QNetworkSession::openSession() opening session failed."; } else { - qDebug() << "tst_QNetworkSession::openSession() opening session succeeded."; + qDebug() << "tst_QNetworkSession::openSession() opening session succeeded."; } qDebug() << "tst_QNetworkSession::openSession() name of the configuration is: " << session->configuration().name(); qDebug() << "tst_QNetworkSession::openSession() configuration state is: " << session->configuration().state(); @@ -1196,9 +1196,9 @@ bool closeSession(QNetworkSession *session, bool lastSessionOnConfiguration) { result = false; } if (result == false) { - qDebug() << "tst_QNetworkSession::closeSession() closing session failed."; + qDebug() << "tst_QNetworkSession::closeSession() closing session failed."; } else { - qDebug() << "tst_QNetworkSession::closeSession() closing session succeeded."; + qDebug() << "tst_QNetworkSession::closeSession() closing session succeeded."; } qDebug() << "tst_QNetworkSession::closeSession() name of the configuration is: " << session->configuration().name(); qDebug() << "tst_QNetworkSession::closeSession() configuration state is: " << session->configuration().state(); diff --git a/tests/auto/network/socket/qtcpsocket/stressTest/Test.h b/tests/auto/network/socket/qtcpsocket/stressTest/Test.h index 1982244c1e..20ccf0d0cd 100644 --- a/tests/auto/network/socket/qtcpsocket/stressTest/Test.h +++ b/tests/auto/network/socket/qtcpsocket/stressTest/Test.h @@ -92,4 +92,4 @@ public: }; //------------------------------------------------------------------------------ -#endif // TEST_H +#endif // TEST_H diff --git a/tests/auto/other/atwrapper/atWrapperAutotest.cpp b/tests/auto/other/atwrapper/atWrapperAutotest.cpp index 7ece62806c..63116574b5 100644 --- a/tests/auto/other/atwrapper/atWrapperAutotest.cpp +++ b/tests/auto/other/atwrapper/atWrapperAutotest.cpp @@ -70,7 +70,7 @@ void atWrapperAutotest::runTest() atWrapper wrapper; if (!wrapper.runAutoTests()) - QSKIP("Arthur not tested on this machine"); + QSKIP("Arthur not tested on this machine"); QVERIFY(true); } diff --git a/tests/auto/other/collections/tst_collections.cpp b/tests/auto/other/collections/tst_collections.cpp index df622602c3..17ed9c8a45 100644 --- a/tests/auto/other/collections/tst_collections.cpp +++ b/tests/auto/other/collections/tst_collections.cpp @@ -210,231 +210,231 @@ void tst_Collections::typeinfo() void tst_Collections::list() { { - QList list; - QVERIFY(list.isEmpty()); - list.append(1); - QVERIFY(list.size() == 1); + QList list; + QVERIFY(list.isEmpty()); + list.append(1); + QVERIFY(list.size() == 1); - QVERIFY(*list.begin() == 1); + QVERIFY(*list.begin() == 1); - list.push_back(2); - list += (3); - list << 4 << 5 << 6; - QVERIFY(!list.isEmpty()); - QVERIFY(list.size() == 6); - QVERIFY(list.end() - list.begin() == list.size()); + list.push_back(2); + list += (3); + list << 4 << 5 << 6; + QVERIFY(!list.isEmpty()); + QVERIFY(list.size() == 6); + QVERIFY(list.end() - list.begin() == list.size()); #if !defined(Q_CC_MSVC) && !defined(Q_CC_SUN) - QVERIFY(std::binary_search(list.begin(), list.end(), 2) == true); - QVERIFY(std::binary_search(list.begin(), list.end(), 9) == false); + QVERIFY(std::binary_search(list.begin(), list.end(), 2) == true); + QVERIFY(std::binary_search(list.begin(), list.end(), 9) == false); #endif - QVERIFY(qBinaryFind(list.begin(), list.end(), 2) == list.begin() + 1); - QVERIFY(qLowerBound(list.begin(), list.end(), 2) == list.begin() + 1); + QVERIFY(qBinaryFind(list.begin(), list.end(), 2) == list.begin() + 1); + QVERIFY(qLowerBound(list.begin(), list.end(), 2) == list.begin() + 1); QVERIFY(qUpperBound(list.begin(), list.end(), 2) == list.begin() + 2); - QVERIFY(qBinaryFind(list.begin(), list.end(), 9) == list.end()); - QVERIFY(qLowerBound(list.begin(), list.end(), 9) == list.end()); + QVERIFY(qBinaryFind(list.begin(), list.end(), 9) == list.end()); + QVERIFY(qLowerBound(list.begin(), list.end(), 9) == list.end()); QVERIFY(qUpperBound(list.begin(), list.end(), 9) == list.end()); - { - int sum = 0; - QListIterator i(list); - while (i.hasNext()) - sum += i.next(); - QVERIFY(sum == 21); - } - - { - QList list1; + { + int sum = 0; + QListIterator i(list); + while (i.hasNext()) + sum += i.next(); + QVERIFY(sum == 21); + } + + { + QList list1; list1 << 1 << 2 << 3 << 5 << 7 << 8 << 9; - QList list2 = list1; + QList list2 = list1; - QMutableListIterator i1(list1); + QMutableListIterator i1(list1); while (i1.hasNext()) { - if (i1.next() % 2 != 0) - i1.remove(); - } + if (i1.next() % 2 != 0) + i1.remove(); + } - QMutableListIterator i2(list2); + QMutableListIterator i2(list2); i2.toBack(); while (i2.hasPrevious()) { - if (i2.previous() % 2 != 0) - i2.remove(); + if (i2.previous() % 2 != 0) + i2.remove(); } QVERIFY(list1.size() == 2); QVERIFY(list2.size() == 2); QVERIFY(list1 == list2); } - { - int sum = 0; - for (int i = 0; i < list.size(); ++i) - sum += list[i]; - QVERIFY(sum == 21); - } - { - int sum = 0; - QList::const_iterator i = list.begin(); - while (i != list.end()) - sum += *i++; - QVERIFY(sum == 21); - } - { - int sum = 0; - QList::ConstIterator i = list.begin(); - while (i != list.end()) - sum += *i++; - QVERIFY(sum == 21); - } - { - QList::Iterator i = list.begin(); + { + int sum = 0; + for (int i = 0; i < list.size(); ++i) + sum += list[i]; + QVERIFY(sum == 21); + } + { + int sum = 0; + QList::const_iterator i = list.begin(); + while (i != list.end()) + sum += *i++; + QVERIFY(sum == 21); + } + { + int sum = 0; + QList::ConstIterator i = list.begin(); + while (i != list.end()) + sum += *i++; + QVERIFY(sum == 21); + } + { + QList::Iterator i = list.begin(); i += 2; QCOMPARE(*i, 3); i -= 1; QCOMPARE(*i, 2); - } - { - QList::ConstIterator i = list.begin(); + } + { + QList::ConstIterator i = list.begin(); i += 2; QCOMPARE(*i, 3); i -= 1; QCOMPARE(*i, 2); - } - { - int sum = 0; - int i; - for (i = 0; i < list.size(); ++i) - list[i] = list[i] +1; - for (i = 0; i < list.size(); ++i) - sum += list[i]; - QVERIFY(sum == 21 + list.size()); - } - { - int sum = 0; - int i; - for (i = 0; i < list.size(); ++i) - --list[i]; - for (i = 0; i < list.size(); ++i) - sum += list[i]; - QVERIFY(sum == 21); - } - { - QMutableListIterator i(list); - while (i.hasNext()) - i.setValue(2*i.next()); - } - { - int sum = 0; - QListIterator i(list); - i.toBack(); - while (i.hasPrevious()) - sum += i.previous(); - QVERIFY(sum == 2*21); - } - { - QMutableListIterator i(list); - i.toBack(); - while (i.hasPrevious()) - i.setValue(2*i.previous()); - } - { - int sum = 0; - QListIterator i(list); - i.toBack(); - while (i.hasPrevious()) - sum += i.previous(); - QVERIFY(sum == 2*2*21); - } - { - QMutableListIterator i(list); - while (i.hasNext()) { - int a = i.next(); - i.insert(a); - } - } - { - int sum = 0; - QList::iterator i = list.begin(); - while (i != list.end()) - sum += *i++; - QVERIFY(sum == 2*2*2*21); - } - { - int duplicates = 0; - QListIterator i(list); - while (i.hasNext()) { - int a = i.next(); - if (i.hasNext() && a == i.peekNext()) - duplicates++; - } - QVERIFY(duplicates == 6); - } - { - int duplicates = 0; - QListIterator i(list); - i.toBack(); - while (i.hasPrevious()) { - int a = i.previous(); - if (i.hasPrevious() && a == i.peekPrevious()) - duplicates++; - } - QVERIFY(duplicates == 6); - } - { - QMutableListIterator i(list); - while (i.hasNext()) { - int a = i.next(); - if (i.hasNext() && - i.peekNext() == a) - i.remove(); - } - } - { - int duplicates = 0; - QMutableListIterator i = list; - i.toBack(); - while (i.hasPrevious()) { - int a = i.previous(); - if (i.hasPrevious() && a == i.peekPrevious()) - duplicates++; - } - QVERIFY(duplicates == 0); - } - { - QVERIFY(list.size() == 6); - QMutableListIterator i = list; - while (i.hasNext()) { - int a = i.peekNext(); - i.insert(42); - QVERIFY(i.peekPrevious() == 42 && i.peekNext() == a); - i.next(); - } - QVERIFY(list.size() == 12); - i.toFront(); - while (i.findNext(42)) - i.remove(); - } - { - QList l; - l << 4 << 8 << 12 << 16 << 20 << 24; - QVERIFY(l == list); - QList copy = list; - list += list; - QVERIFY(l != list && l.size() == list.size()/2 && l == copy); - l += copy; - QVERIFY(l == list); - list = copy; - } - { - QList copy = list; - list << 8; - QVERIFY(list.indexOf(8) == 1); - QVERIFY(list.indexOf(8, list.indexOf(8)+1) == 6); - int a = list.indexOf(8); - QVERIFY(list.count(8) == 2); - int r = list.removeAll(8); - QVERIFY(r == 2); - list.insert(a, 8); - QVERIFY(list == copy); - } + } + { + int sum = 0; + int i; + for (i = 0; i < list.size(); ++i) + list[i] = list[i] +1; + for (i = 0; i < list.size(); ++i) + sum += list[i]; + QVERIFY(sum == 21 + list.size()); + } + { + int sum = 0; + int i; + for (i = 0; i < list.size(); ++i) + --list[i]; + for (i = 0; i < list.size(); ++i) + sum += list[i]; + QVERIFY(sum == 21); + } + { + QMutableListIterator i(list); + while (i.hasNext()) + i.setValue(2*i.next()); + } + { + int sum = 0; + QListIterator i(list); + i.toBack(); + while (i.hasPrevious()) + sum += i.previous(); + QVERIFY(sum == 2*21); + } + { + QMutableListIterator i(list); + i.toBack(); + while (i.hasPrevious()) + i.setValue(2*i.previous()); + } + { + int sum = 0; + QListIterator i(list); + i.toBack(); + while (i.hasPrevious()) + sum += i.previous(); + QVERIFY(sum == 2*2*21); + } + { + QMutableListIterator i(list); + while (i.hasNext()) { + int a = i.next(); + i.insert(a); + } + } + { + int sum = 0; + QList::iterator i = list.begin(); + while (i != list.end()) + sum += *i++; + QVERIFY(sum == 2*2*2*21); + } + { + int duplicates = 0; + QListIterator i(list); + while (i.hasNext()) { + int a = i.next(); + if (i.hasNext() && a == i.peekNext()) + duplicates++; + } + QVERIFY(duplicates == 6); + } + { + int duplicates = 0; + QListIterator i(list); + i.toBack(); + while (i.hasPrevious()) { + int a = i.previous(); + if (i.hasPrevious() && a == i.peekPrevious()) + duplicates++; + } + QVERIFY(duplicates == 6); + } + { + QMutableListIterator i(list); + while (i.hasNext()) { + int a = i.next(); + if (i.hasNext() && + i.peekNext() == a) + i.remove(); + } + } + { + int duplicates = 0; + QMutableListIterator i = list; + i.toBack(); + while (i.hasPrevious()) { + int a = i.previous(); + if (i.hasPrevious() && a == i.peekPrevious()) + duplicates++; + } + QVERIFY(duplicates == 0); + } + { + QVERIFY(list.size() == 6); + QMutableListIterator i = list; + while (i.hasNext()) { + int a = i.peekNext(); + i.insert(42); + QVERIFY(i.peekPrevious() == 42 && i.peekNext() == a); + i.next(); + } + QVERIFY(list.size() == 12); + i.toFront(); + while (i.findNext(42)) + i.remove(); + } + { + QList l; + l << 4 << 8 << 12 << 16 << 20 << 24; + QVERIFY(l == list); + QList copy = list; + list += list; + QVERIFY(l != list && l.size() == list.size()/2 && l == copy); + l += copy; + QVERIFY(l == list); + list = copy; + } + { + QList copy = list; + list << 8; + QVERIFY(list.indexOf(8) == 1); + QVERIFY(list.indexOf(8, list.indexOf(8)+1) == 6); + int a = list.indexOf(8); + QVERIFY(list.count(8) == 2); + int r = list.removeAll(8); + QVERIFY(r == 2); + list.insert(a, 8); + QVERIFY(list == copy); + } { QList list; list << "one" << "two" << "three" << "four" << "five" << "six"; @@ -458,73 +458,73 @@ void tst_Collections::list() QVERIFY(!list.removeOne("one")); QVERIFY(list.isEmpty()); } - { - QList copy = list; - list << 8; - QVERIFY(list.lastIndexOf(8) == 6); - QVERIFY(list.lastIndexOf(8, list.lastIndexOf(8)-1) == 1); - list = copy; - } - { - QList copy = list; - list.insert(3, 999); - QVERIFY(list[3] == 999); - list.replace(3, 222); - QVERIFY(list[3] == 222); - QVERIFY(list.contains(222) && ! list.contains(999)); - list.removeAt(3); - list = copy; - QVERIFY(list == copy); - } - { - list.clear(); - QVERIFY(list.isEmpty()); - QVERIFY(list.begin() == list.end()); - QListIterator i(list); - QVERIFY(!i.hasNext() && !i.hasPrevious()); - } - { - QList l1; - QList l2; - l1 << 1 << 2 << 3; - l2 << 4 << 5 << 6; - QList l3 = l1 + l2; - l1 += l2; - QVERIFY(l3 == l1); - } - { - QList list; - QVERIFY(list.isEmpty()); - list.append(1); - QList list2; - list2 = list; - list2.clear(); - QVERIFY(list2.size() == 0); - QVERIFY(list.size() == 1); - } - { - QList list; - list.append(1); - list = list; - QVERIFY(list.size() == 1); - } + { + QList copy = list; + list << 8; + QVERIFY(list.lastIndexOf(8) == 6); + QVERIFY(list.lastIndexOf(8, list.lastIndexOf(8)-1) == 1); + list = copy; + } + { + QList copy = list; + list.insert(3, 999); + QVERIFY(list[3] == 999); + list.replace(3, 222); + QVERIFY(list[3] == 222); + QVERIFY(list.contains(222) && ! list.contains(999)); + list.removeAt(3); + list = copy; + QVERIFY(list == copy); + } + { + list.clear(); + QVERIFY(list.isEmpty()); + QVERIFY(list.begin() == list.end()); + QListIterator i(list); + QVERIFY(!i.hasNext() && !i.hasPrevious()); + } + { + QList l1; + QList l2; + l1 << 1 << 2 << 3; + l2 << 4 << 5 << 6; + QList l3 = l1 + l2; + l1 += l2; + QVERIFY(l3 == l1); + } + { + QList list; + QVERIFY(list.isEmpty()); + list.append(1); + QList list2; + list2 = list; + list2.clear(); + QVERIFY(list2.size() == 0); + QVERIFY(list.size() == 1); + } + { + QList list; + list.append(1); + list = list; + QVERIFY(list.size() == 1); + } } { - QList list; - list.append(0); - list.append((void*)42); - QCOMPARE(list.size(), 2); - QCOMPARE(list.at(0), (void*)0); - QCOMPARE(list.at(1), (void*)42); + QList list; + list.append(0); + list.append((void*)42); + QCOMPARE(list.size(), 2); + QCOMPARE(list.at(0), (void*)0); + QCOMPARE(list.at(1), (void*)42); } { - QVector vector(5); + QVector vector(5); vector[0] = "99"; vector[4] ="100"; QList list = vector.toList(); - QVERIFY(list.size() == 5); + QVERIFY(list.size() == 5); QVERIFY(list.at(0) == "99"); QVERIFY(list.at(4) == "100"); list[0] = "10"; @@ -783,145 +783,145 @@ void tst_Collections::list() void tst_Collections::linkedList() { { - QLinkedList list; - QVERIFY(list.isEmpty()); - list.append(1); - list.push_back(2); - list += (3); - list << 4 << 5 << 6; - QVERIFY(!list.isEmpty()); - QVERIFY(list.size() == 6); - { - int sum = 0; - QLinkedListIterator i = list; - while (i.hasNext()) { - sum += i.next(); - } - QVERIFY(sum == 21); - } - { - int sum = 0; - QLinkedList::const_iterator i = list.begin(); - while (i != list.end()) - sum += *i++; - QVERIFY(sum == 21); - } - { - QMutableLinkedListIterator i = list; - while (i.hasNext()) - i.setValue(2*i.next()); - } - { - int sum = 0; - QLinkedListIterator i = list; - i.toBack(); - while (i.hasPrevious()) - sum += i.previous(); - QVERIFY(sum == 2*21); - } - { - QMutableLinkedListIterator i = list; - i.toBack(); - while (i.hasPrevious()) - i.setValue(2*i.previous()); - } - { - int sum = 0; - QLinkedListIterator i = list; - i.toBack(); - while (i.hasPrevious()) - sum += i.previous(); - QVERIFY(sum == 2*2*21); - } - { - QMutableLinkedListIterator i = list; - while (i.hasNext()) { - int a = i.next(); - i.insert(a); - } - } - { - int sum = 0; - QLinkedList::iterator i = list.begin(); - while (i != list.end()) - sum += *i++; - QVERIFY(sum == 2*2*2*21); - } - { - int duplicates = 0; - QLinkedListIterator i = list; - while (i.hasNext()) { - int a = i.next(); - if (i.hasNext() && a == i.peekNext()) - duplicates++; - } - QVERIFY(duplicates == 6); - } - { - int duplicates = 0; - QLinkedListIterator i = list; - i.toBack(); - while (i.hasPrevious()) { - int a = i.previous(); - if (i.hasPrevious() && a == i.peekPrevious()) - duplicates++; - } - QVERIFY(duplicates == 6); - } - { - QMutableLinkedListIterator i = list; - while (i.hasNext()) { - int a = i.next(); - if (i.hasNext() && - i.peekNext() == a) - i.remove(); - } - } - { - int duplicates = 0; - QMutableLinkedListIterator i = list; - i.toBack(); - while (i.hasPrevious()) { - int a = i.previous(); - if (i.hasPrevious() && a == i.peekPrevious()) - duplicates++; - } - QVERIFY(duplicates == 0); - } - { - QVERIFY(list.size() == 6); - QMutableLinkedListIterator i = list; - while (i.hasNext()) { - int a = i.peekNext(); - i.insert(42); - QVERIFY(i.peekPrevious() == 42 && i.peekNext() == a); - i.next(); - } - QVERIFY(list.size() == 12); - i.toFront(); - while (i.findNext(42)) - i.remove(); - } - { - QLinkedList l; - l << 4 << 8 << 12 << 16 << 20 << 24; - QVERIFY(l == list); - QLinkedList copy = list; - list += list; - QVERIFY(l != list && l.size() == list.size()/2 && l == copy); - l += copy; - QVERIFY(l == list); - list = copy; - } - { - QLinkedList copy = list; - list.prepend(999); - list.append(999); - QVERIFY(list.contains(999)); - QVERIFY(list.count(999) == 2); - list.removeAll(999); - QVERIFY(list == copy); - } + QLinkedList list; + QVERIFY(list.isEmpty()); + list.append(1); + list.push_back(2); + list += (3); + list << 4 << 5 << 6; + QVERIFY(!list.isEmpty()); + QVERIFY(list.size() == 6); + { + int sum = 0; + QLinkedListIterator i = list; + while (i.hasNext()) { + sum += i.next(); + } + QVERIFY(sum == 21); + } + { + int sum = 0; + QLinkedList::const_iterator i = list.begin(); + while (i != list.end()) + sum += *i++; + QVERIFY(sum == 21); + } + { + QMutableLinkedListIterator i = list; + while (i.hasNext()) + i.setValue(2*i.next()); + } + { + int sum = 0; + QLinkedListIterator i = list; + i.toBack(); + while (i.hasPrevious()) + sum += i.previous(); + QVERIFY(sum == 2*21); + } + { + QMutableLinkedListIterator i = list; + i.toBack(); + while (i.hasPrevious()) + i.setValue(2*i.previous()); + } + { + int sum = 0; + QLinkedListIterator i = list; + i.toBack(); + while (i.hasPrevious()) + sum += i.previous(); + QVERIFY(sum == 2*2*21); + } + { + QMutableLinkedListIterator i = list; + while (i.hasNext()) { + int a = i.next(); + i.insert(a); + } + } + { + int sum = 0; + QLinkedList::iterator i = list.begin(); + while (i != list.end()) + sum += *i++; + QVERIFY(sum == 2*2*2*21); + } + { + int duplicates = 0; + QLinkedListIterator i = list; + while (i.hasNext()) { + int a = i.next(); + if (i.hasNext() && a == i.peekNext()) + duplicates++; + } + QVERIFY(duplicates == 6); + } + { + int duplicates = 0; + QLinkedListIterator i = list; + i.toBack(); + while (i.hasPrevious()) { + int a = i.previous(); + if (i.hasPrevious() && a == i.peekPrevious()) + duplicates++; + } + QVERIFY(duplicates == 6); + } + { + QMutableLinkedListIterator i = list; + while (i.hasNext()) { + int a = i.next(); + if (i.hasNext() && + i.peekNext() == a) + i.remove(); + } + } + { + int duplicates = 0; + QMutableLinkedListIterator i = list; + i.toBack(); + while (i.hasPrevious()) { + int a = i.previous(); + if (i.hasPrevious() && a == i.peekPrevious()) + duplicates++; + } + QVERIFY(duplicates == 0); + } + { + QVERIFY(list.size() == 6); + QMutableLinkedListIterator i = list; + while (i.hasNext()) { + int a = i.peekNext(); + i.insert(42); + QVERIFY(i.peekPrevious() == 42 && i.peekNext() == a); + i.next(); + } + QVERIFY(list.size() == 12); + i.toFront(); + while (i.findNext(42)) + i.remove(); + } + { + QLinkedList l; + l << 4 << 8 << 12 << 16 << 20 << 24; + QVERIFY(l == list); + QLinkedList copy = list; + list += list; + QVERIFY(l != list && l.size() == list.size()/2 && l == copy); + l += copy; + QVERIFY(l == list); + list = copy; + } + { + QLinkedList copy = list; + list.prepend(999); + list.append(999); + QVERIFY(list.contains(999)); + QVERIFY(list.count(999) == 2); + list.removeAll(999); + QVERIFY(list == copy); + } { QLinkedList list; list << "one" << "two" << "three" << "four" << "five" << "six"; @@ -946,12 +946,12 @@ void tst_Collections::linkedList() QVERIFY(list.isEmpty()); } { - list.clear(); - QVERIFY(list.isEmpty()); - QVERIFY(list.begin() == list.end()); - QLinkedListIterator i(list); - QVERIFY(!i.hasNext() && !i.hasPrevious()); - } + list.clear(); + QVERIFY(list.isEmpty()); + QVERIFY(list.begin() == list.end()); + QLinkedListIterator i(list); + QVERIFY(!i.hasNext() && !i.hasPrevious()); + } } { @@ -1102,7 +1102,7 @@ void tst_Collections::vector() dummy = new LargeStatic; vector.append(LargeStatic()); } - delete dummy; + delete dummy; } QVERIFY(LargeStatic::count == originalLargeStaticCount); @@ -1364,11 +1364,11 @@ void tst_Collections::byteArray() ba1 += ba1; QCOMPARE(ba1, QByteArray("yyyyyy")); - ba1.remove(1, -1); // do nothing - QCOMPARE(ba1, QByteArray("yyyyyy")); + ba1.remove(1, -1); // do nothing + QCOMPARE(ba1, QByteArray("yyyyyy")); - ba1.replace(0, -1, "ZZZ"); - QCOMPARE(ba1, QByteArray("ZZZyyyyyy")); + ba1.replace(0, -1, "ZZZ"); + QCOMPARE(ba1, QByteArray("ZZZyyyyyy")); } }; @@ -1382,16 +1382,16 @@ void tst_Collections::stack() i.toBack(); int sum = 0; while (i.hasPrevious()) - sum += i.previous(); + sum += i.previous(); QVERIFY(sum == 6); sum = 0; for (QStack::iterator i = stack.begin(); i != stack.end(); ++i) - sum += *i; + sum += *i; QVERIFY(sum == 6); while (!stack.isEmpty()) - sum -= stack.pop(); + sum -= stack.pop(); QVERIFY(sum == 0); } @@ -1403,194 +1403,194 @@ void tst_Collections::hash() const char *monde = "monde"; { - typedef QHash Hash; - Hash hash; - QString key; - for (int i = 0; i < 10; ++i) { - key[0] = i + '0'; - for (int j = 0; j < 10; ++j) { - key[1] = j + '0'; - hash.insert(key, "V" + key); - } - } - - for (int i = 0; i < 10; ++i) { - key[0] = i + '0'; - for (int j = 0; j < 10; ++j) { - key[1] = j + '0'; - hash.remove(key); - } - } + typedef QHash Hash; + Hash hash; + QString key; + for (int i = 0; i < 10; ++i) { + key[0] = i + '0'; + for (int j = 0; j < 10; ++j) { + key[1] = j + '0'; + hash.insert(key, "V" + key); + } + } + + for (int i = 0; i < 10; ++i) { + key[0] = i + '0'; + for (int j = 0; j < 10; ++j) { + key[1] = j + '0'; + hash.remove(key); + } + } } { - typedef QHash Hash; - Hash hash; - hash.insert(1, hello); - hash.insert(2, world); - - QVERIFY(hash.size() == 2); - QVERIFY(!hash.isEmpty()); - - { - Hash hash2 = hash; - hash2 = hash; - hash = hash2; - hash2 = hash2; - hash = hash; - hash2.clear(); - hash2 = hash2; - QVERIFY(hash2.size() == 0); - QVERIFY(hash2.isEmpty()); - } - QVERIFY(hash.size() == 2); - - { - Hash hash2 = hash; - hash2[1] = allo; - hash2[2] = monde; - - QVERIFY(hash2[1] == allo); - QVERIFY(hash2[2] == monde); - QVERIFY(hash[1] == hello); - QVERIFY(hash[2] == world); - - hash2[1] = hash[1]; - hash2[2] = hash[2]; - - QVERIFY(hash2[1] == hello); - QVERIFY(hash2[2] == world); - - hash[1] = hash[1]; - QVERIFY(hash[1] == hello); - } - - { - Hash hash2 = hash; - hash2.detach(); - hash2.remove(1); - QVERIFY(hash2.size() == 1); - hash2.remove(1); - QVERIFY(hash2.size() == 1); - hash2.remove(0); - QVERIFY(hash2.size() == 1); - hash2.remove(2); - QVERIFY(hash2.size() == 0); - QVERIFY(hash.size() == 2); - } - - hash.detach(); - - { - Hash::iterator it1 = hash.find(1); - QVERIFY(it1 != hash.end()); - - Hash::iterator it2 = hash.find(0); - QVERIFY(it2 != hash.begin()); - QVERIFY(it2 == hash.end()); - - *it1 = monde; - QVERIFY(*it1 == monde); - QVERIFY(hash[1] == monde); - - *it1 = hello; - QVERIFY(*it1 == hello); - QVERIFY(hash[1] == hello); - - hash[1] = monde; - QVERIFY(it1.key() == 1); - QVERIFY(it1.value() == monde); - QVERIFY(*it1 == monde); - QVERIFY(hash[1] == monde); - - hash[1] = hello; - QVERIFY(*it1 == hello); - QVERIFY(hash[1] == hello); - } - - { - const Hash hash2 = hash; - - Hash::const_iterator it1 = hash2.find(1); - QVERIFY(it1 != hash2.end()); - QVERIFY(it1.key() == 1); - QVERIFY(it1.value() == hello); - QVERIFY(*it1 == hello); - - Hash::const_iterator it2 = hash2.find(2); - QVERIFY(it1 != it2); - QVERIFY(it1 != hash2.end()); - QVERIFY(it2 != hash2.end()); - - int count = 0; - it1 = hash2.begin(); - while (it1 != hash2.end()) { - count++; - ++it1; - } - QVERIFY(count == 2); - - count = 0; - it1 = hash.begin(); - while (it1 != hash.end()) { - count++; - ++it1; - } - QVERIFY(count == 2); - } - - { - QVERIFY(hash.contains(1)); - QVERIFY(hash.contains(2)); - QVERIFY(!hash.contains(0)); - QVERIFY(!hash.contains(3)); - } - - { - QVERIFY(hash.value(1) == hello); - QVERIFY(hash.value(2) == world); - QVERIFY(hash.value(3) == 0); - QVERIFY(hash.value(1, allo) == hello); - QVERIFY(hash.value(2, allo) == world); - QVERIFY(hash.value(3, allo) == allo); - QVERIFY(hash.value(0, monde) == monde); - } - - { - QHash hash; - for (int i = 0; i < 10; i++) - hash.insert(i, LargeStatic()); - QVERIFY(LargeStatic::count == 10); - hash.remove(7); - QVERIFY(LargeStatic::count == 9); - - } - QVERIFY(LargeStatic::count == 0); - { - QHash hash; - QVERIFY(((const QHash*) &hash)->operator[](7) == 0); - } - - { - /* + typedef QHash Hash; + Hash hash; + hash.insert(1, hello); + hash.insert(2, world); + + QVERIFY(hash.size() == 2); + QVERIFY(!hash.isEmpty()); + + { + Hash hash2 = hash; + hash2 = hash; + hash = hash2; + hash2 = hash2; + hash = hash; + hash2.clear(); + hash2 = hash2; + QVERIFY(hash2.size() == 0); + QVERIFY(hash2.isEmpty()); + } + QVERIFY(hash.size() == 2); + + { + Hash hash2 = hash; + hash2[1] = allo; + hash2[2] = monde; + + QVERIFY(hash2[1] == allo); + QVERIFY(hash2[2] == monde); + QVERIFY(hash[1] == hello); + QVERIFY(hash[2] == world); + + hash2[1] = hash[1]; + hash2[2] = hash[2]; + + QVERIFY(hash2[1] == hello); + QVERIFY(hash2[2] == world); + + hash[1] = hash[1]; + QVERIFY(hash[1] == hello); + } + + { + Hash hash2 = hash; + hash2.detach(); + hash2.remove(1); + QVERIFY(hash2.size() == 1); + hash2.remove(1); + QVERIFY(hash2.size() == 1); + hash2.remove(0); + QVERIFY(hash2.size() == 1); + hash2.remove(2); + QVERIFY(hash2.size() == 0); + QVERIFY(hash.size() == 2); + } + + hash.detach(); + + { + Hash::iterator it1 = hash.find(1); + QVERIFY(it1 != hash.end()); + + Hash::iterator it2 = hash.find(0); + QVERIFY(it2 != hash.begin()); + QVERIFY(it2 == hash.end()); + + *it1 = monde; + QVERIFY(*it1 == monde); + QVERIFY(hash[1] == monde); + + *it1 = hello; + QVERIFY(*it1 == hello); + QVERIFY(hash[1] == hello); + + hash[1] = monde; + QVERIFY(it1.key() == 1); + QVERIFY(it1.value() == monde); + QVERIFY(*it1 == monde); + QVERIFY(hash[1] == monde); + + hash[1] = hello; + QVERIFY(*it1 == hello); + QVERIFY(hash[1] == hello); + } + + { + const Hash hash2 = hash; + + Hash::const_iterator it1 = hash2.find(1); + QVERIFY(it1 != hash2.end()); + QVERIFY(it1.key() == 1); + QVERIFY(it1.value() == hello); + QVERIFY(*it1 == hello); + + Hash::const_iterator it2 = hash2.find(2); + QVERIFY(it1 != it2); + QVERIFY(it1 != hash2.end()); + QVERIFY(it2 != hash2.end()); + + int count = 0; + it1 = hash2.begin(); + while (it1 != hash2.end()) { + count++; + ++it1; + } + QVERIFY(count == 2); + + count = 0; + it1 = hash.begin(); + while (it1 != hash.end()) { + count++; + ++it1; + } + QVERIFY(count == 2); + } + + { + QVERIFY(hash.contains(1)); + QVERIFY(hash.contains(2)); + QVERIFY(!hash.contains(0)); + QVERIFY(!hash.contains(3)); + } + + { + QVERIFY(hash.value(1) == hello); + QVERIFY(hash.value(2) == world); + QVERIFY(hash.value(3) == 0); + QVERIFY(hash.value(1, allo) == hello); + QVERIFY(hash.value(2, allo) == world); + QVERIFY(hash.value(3, allo) == allo); + QVERIFY(hash.value(0, monde) == monde); + } + + { + QHash hash; + for (int i = 0; i < 10; i++) + hash.insert(i, LargeStatic()); + QVERIFY(LargeStatic::count == 10); + hash.remove(7); + QVERIFY(LargeStatic::count == 9); + + } + QVERIFY(LargeStatic::count == 0); + { + QHash hash; + QVERIFY(((const QHash*) &hash)->operator[](7) == 0); + } + + { + /* This test relies on a certain implementation of QHash. If you change the way QHash works internally, change this test as well. */ - QHash hash; + QHash hash; for (int i = 0; i < 1000; ++i) - hash.insert(i, i); - QVERIFY(hash.capacity() == 1031); + hash.insert(i, i); + QVERIFY(hash.capacity() == 1031); hash.squeeze(); QVERIFY(hash.capacity() == 521); - hash.insert(12345, 12345); + hash.insert(12345, 12345); QVERIFY(hash.capacity() == 1031); - for (int j = 0; j < 900; ++j) - hash.remove(j); + for (int j = 0; j < 900; ++j) + hash.remove(j); QVERIFY(hash.capacity() == 257); - hash.squeeze(); + hash.squeeze(); QVERIFY(hash.capacity() == 67); hash.reserve(0); } @@ -1643,211 +1643,211 @@ void tst_Collections::map() const char *monde = "monde"; { - typedef QMap Map; - Map map; - map.insert(1, hello); - map.insert(2, world); - - QVERIFY(*map.begin() == hello); - - QVERIFY(map.size() == 2); - QVERIFY(!map.isEmpty()); - - { - Map map2 = map; - map2 = map; - map = map2; - map2 = map2; - map = map; - map2.clear(); - map2 = map2; - QVERIFY(map2.size() == 0); - QVERIFY(map2.isEmpty()); - } - QVERIFY(map.size() == 2); - - { - Map map2 = map; - map2[1] = allo; - map2[2] = monde; - - QVERIFY(map2[1] == allo); - QVERIFY(map2[2] == monde); - QVERIFY(map[1] == hello); - QVERIFY(map[2] == world); - - map2[1] = map[1]; - map2[2] = map[2]; - - QVERIFY(map2[1] == hello); - QVERIFY(map2[2] == world); - - map[1] = map[1]; - QVERIFY(map[1] == hello); - } - - { - Map map2 = map; - map2.detach(); - map2.remove(1); - QVERIFY(map2.size() == 1); - map2.remove(1); - QVERIFY(map2.size() == 1); - map2.remove(0); - QVERIFY(map2.size() == 1); - map2.remove(2); - QVERIFY(map2.size() == 0); - QVERIFY(map.size() == 2); - } - - map.detach(); - - { - Map::iterator it1 = map.find(1); - QVERIFY(it1 == map.begin()); - QVERIFY(it1 != map.end()); - - Map::iterator it2 = map.find(0); - QVERIFY(it2 != map.begin()); - QVERIFY(it2 == map.end()); - - *it1 = monde; - QVERIFY(*it1 == monde); - QVERIFY(map[1] == monde); - - *it1 = hello; - QVERIFY(*it1 == hello); - QVERIFY(map[1] == hello); - - map[1] = monde; - QVERIFY(it1.key() == 1); - QVERIFY(it1.value() == monde); - QVERIFY(*it1 == monde); - QVERIFY(map[1] == monde); - - map[1] = hello; - QVERIFY(*it1 == hello); - QVERIFY(map[1] == hello); - - *++it1 = allo; - QVERIFY(*it1 == allo); - QVERIFY(map[2] == allo); - *it1 = world; - - ++it1; - QVERIFY(it1 == map.end()); - - int count = 0; - it1 = map.begin(); - while (it1 != map.end()) { - count++; - ++it1; - } - QVERIFY(count == 2); - } - - { - const Map map2 = map; - - Map::const_iterator it1 = map2.find(1); - QVERIFY(it1 != map2.end()); - QVERIFY(it1.key() == 1); - QVERIFY(it1.value() == hello); - QVERIFY(*it1 == hello); - ++it1; - - Map::const_iterator it2 = map2.find(2); - QVERIFY(it1 == it2); - ++it1; - QVERIFY(it1 == map2.end()); - QVERIFY(it2 != map2.end()); - QVERIFY(it1 != it2); - - int count = 0; - it1 = map2.begin(); - while (it1 != map2.end()) { - count++; - ++it1; - } - QVERIFY(count == 2); - - count = 0; - it1 = map.begin(); - while (it1 != map.end()) { - count++; - ++it1; - } - QVERIFY(count == 2); - } - - { - QVERIFY(map.contains(1)); - QVERIFY(map.contains(2)); - QVERIFY(!map.contains(0)); - QVERIFY(!map.contains(3)); - } - - { - QVERIFY(map.value(1) == hello); - QVERIFY(map.value(2) == world); - QVERIFY(map.value(3) == 0); - QVERIFY(map.value(1, allo) == hello); - QVERIFY(map.value(2, allo) == world); - QVERIFY(map.value(3, allo) == allo); - QVERIFY(map.value(0, monde) == monde); - } - int originalLargeStaticCount = LargeStatic::count; - { - QMap map; - for (int i = 0; i < 10; i++) - map.insert(i, LargeStatic()); + typedef QMap Map; + Map map; + map.insert(1, hello); + map.insert(2, world); + + QVERIFY(*map.begin() == hello); + + QVERIFY(map.size() == 2); + QVERIFY(!map.isEmpty()); + + { + Map map2 = map; + map2 = map; + map = map2; + map2 = map2; + map = map; + map2.clear(); + map2 = map2; + QVERIFY(map2.size() == 0); + QVERIFY(map2.isEmpty()); + } + QVERIFY(map.size() == 2); + + { + Map map2 = map; + map2[1] = allo; + map2[2] = monde; + + QVERIFY(map2[1] == allo); + QVERIFY(map2[2] == monde); + QVERIFY(map[1] == hello); + QVERIFY(map[2] == world); + + map2[1] = map[1]; + map2[2] = map[2]; + + QVERIFY(map2[1] == hello); + QVERIFY(map2[2] == world); + + map[1] = map[1]; + QVERIFY(map[1] == hello); + } + + { + Map map2 = map; + map2.detach(); + map2.remove(1); + QVERIFY(map2.size() == 1); + map2.remove(1); + QVERIFY(map2.size() == 1); + map2.remove(0); + QVERIFY(map2.size() == 1); + map2.remove(2); + QVERIFY(map2.size() == 0); + QVERIFY(map.size() == 2); + } + + map.detach(); + + { + Map::iterator it1 = map.find(1); + QVERIFY(it1 == map.begin()); + QVERIFY(it1 != map.end()); + + Map::iterator it2 = map.find(0); + QVERIFY(it2 != map.begin()); + QVERIFY(it2 == map.end()); + + *it1 = monde; + QVERIFY(*it1 == monde); + QVERIFY(map[1] == monde); + + *it1 = hello; + QVERIFY(*it1 == hello); + QVERIFY(map[1] == hello); + + map[1] = monde; + QVERIFY(it1.key() == 1); + QVERIFY(it1.value() == monde); + QVERIFY(*it1 == monde); + QVERIFY(map[1] == monde); + + map[1] = hello; + QVERIFY(*it1 == hello); + QVERIFY(map[1] == hello); + + *++it1 = allo; + QVERIFY(*it1 == allo); + QVERIFY(map[2] == allo); + *it1 = world; + + ++it1; + QVERIFY(it1 == map.end()); + + int count = 0; + it1 = map.begin(); + while (it1 != map.end()) { + count++; + ++it1; + } + QVERIFY(count == 2); + } + + { + const Map map2 = map; + + Map::const_iterator it1 = map2.find(1); + QVERIFY(it1 != map2.end()); + QVERIFY(it1.key() == 1); + QVERIFY(it1.value() == hello); + QVERIFY(*it1 == hello); + ++it1; + + Map::const_iterator it2 = map2.find(2); + QVERIFY(it1 == it2); + ++it1; + QVERIFY(it1 == map2.end()); + QVERIFY(it2 != map2.end()); + QVERIFY(it1 != it2); + + int count = 0; + it1 = map2.begin(); + while (it1 != map2.end()) { + count++; + ++it1; + } + QVERIFY(count == 2); + + count = 0; + it1 = map.begin(); + while (it1 != map.end()) { + count++; + ++it1; + } + QVERIFY(count == 2); + } + + { + QVERIFY(map.contains(1)); + QVERIFY(map.contains(2)); + QVERIFY(!map.contains(0)); + QVERIFY(!map.contains(3)); + } + + { + QVERIFY(map.value(1) == hello); + QVERIFY(map.value(2) == world); + QVERIFY(map.value(3) == 0); + QVERIFY(map.value(1, allo) == hello); + QVERIFY(map.value(2, allo) == world); + QVERIFY(map.value(3, allo) == allo); + QVERIFY(map.value(0, monde) == monde); + } + int originalLargeStaticCount = LargeStatic::count; + { + QMap map; + for (int i = 0; i < 10; i++) + map.insert(i, LargeStatic()); QVERIFY(LargeStatic::count == (originalLargeStaticCount + 10)); - map.remove(7); - QVERIFY(LargeStatic::count == (originalLargeStaticCount + 9)); - - } - QVERIFY(LargeStatic::count == originalLargeStaticCount); - { - QMap map; - QVERIFY(((const QMap*) &map)->operator[](7) == 0); - } - - { - QMap map; - map[0] = 1; - map[1] = 2; - map[2] = 4; - map[3] = 8; - int sum = 0; - int sumkey = 0; - QMapIterator i = map; - while (i.hasNext()) { - sum += i.next().value(); - sumkey += i.key(); - } - QVERIFY(sum == 15); - QVERIFY(sumkey == 6); - } - { - QMap map; - map[0] = 1; - map[1] = 2; - map[2] = 4; - map[3] = 8; - int sum = 0; - QMutableMapIterator i = map; - while(i.hasNext()) - if (i.next().key() == 2) - i.remove(); - i.toFront(); - while(i.hasNext()) { - sum += i.next().value(); + map.remove(7); + QVERIFY(LargeStatic::count == (originalLargeStaticCount + 9)); + + } + QVERIFY(LargeStatic::count == originalLargeStaticCount); + { + QMap map; + QVERIFY(((const QMap*) &map)->operator[](7) == 0); + } + + { + QMap map; + map[0] = 1; + map[1] = 2; + map[2] = 4; + map[3] = 8; + int sum = 0; + int sumkey = 0; + QMapIterator i = map; + while (i.hasNext()) { + sum += i.next().value(); + sumkey += i.key(); + } + QVERIFY(sum == 15); + QVERIFY(sumkey == 6); + } + { + QMap map; + map[0] = 1; + map[1] = 2; + map[2] = 4; + map[3] = 8; + int sum = 0; + QMutableMapIterator i = map; + while (i.hasNext()) + if (i.next().key() == 2) + i.remove(); + i.toFront(); + while (i.hasNext()) { + sum += i.next().value(); i.setValue(10); i.value() += 22; QVERIFY(i.value() == 32); } - QVERIFY(sum == 11); - } + QVERIFY(sum == 11); + } { QMap map; map[0] = 1; @@ -2177,14 +2177,14 @@ void tst_Collections::qstring() QVERIFY(s == "stl rocks"); { - QString str("Bananas"); - QVERIFY(str.startsWith("Ban")); - QVERIFY(false == str.startsWith("Car")); + QString str("Bananas"); + QVERIFY(str.startsWith("Ban")); + QVERIFY(false == str.startsWith("Car")); } { - QString str("Bananas"); - QVERIFY(str.endsWith("anas")); - QVERIFY(false == str.endsWith("pple")); + QString str("Bananas"); + QVERIFY(str.endsWith("anas")); + QVERIFY(false == str.endsWith("pple")); } @@ -2257,7 +2257,7 @@ void tst_Collections::bitArray() QVERIFY(ba[4]); int sum = 0; for(int i = 0; i < 20; i++) - sum += ba.testBit(i) ? 1 : 0; + sum += ba.testBit(i) ? 1 : 0; QVERIFY(sum == 2); ba = QBitArray(7, true); @@ -2288,36 +2288,36 @@ int CacheFoo::counter = 0; void tst_Collections::cache() { { - QCache cache(120); - int i; - for (i = 0; i < 30; i++) { + QCache cache(120); + int i; + for (i = 0; i < 30; i++) { cache.object(10); - cache.insert(i, new CacheFoo(i), i); - } + cache.insert(i, new CacheFoo(i), i); + } - QVERIFY(cache.contains(10)); - QVERIFY(!cache.contains(1)); - QVERIFY(!cache.contains(2)); - delete cache.take(10); + QVERIFY(cache.contains(10)); + QVERIFY(!cache.contains(1)); + QVERIFY(!cache.contains(2)); + delete cache.take(10); } { - QCache cache(120); - int i; - QString two; - for (i = 0; i < 30; i++) { - QString s = QString::number(i); - cache.insert(i, new QString(s), i); - if (i == 2) - two = s; - } - QVERIFY(!cache.contains(3)); - QVERIFY(!cache.contains(2)); + QCache cache(120); + int i; + QString two; + for (i = 0; i < 30; i++) { + QString s = QString::number(i); + cache.insert(i, new QString(s), i); + if (i == 2) + two = s; + } + QVERIFY(!cache.contains(3)); + QVERIFY(!cache.contains(2)); } { - QCache cache(100); - cache.insert(2, new int(2)); - *cache[2] = 3; - QVERIFY(*cache.object(2) == 3); + QCache cache(100); + cache.insert(2, new int(2)); + *cache[2] = 3; + QVERIFY(*cache.object(2) == 3); } QVERIFY(CacheFoo::counter == 0); diff --git a/tests/auto/other/qcomplextext/tst_qcomplextext.cpp b/tests/auto/other/qcomplextext/tst_qcomplextext.cpp index ff440948a2..7eb8479372 100644 --- a/tests/auto/other/qcomplextext/tst_qcomplextext.cpp +++ b/tests/auto/other/qcomplextext/tst_qcomplextext.cpp @@ -102,12 +102,12 @@ void tst_QComplexText::bidiReorderString_data() const LV *data = logical_visual; while ( data->name ) { - //next we fill it with data - QTest::newRow( data->name ) - << QString::fromUtf8( data->logical ) - << QString::fromUtf8( data->visual ) - << (int) data->basicDir; - data++; + //next we fill it with data + QTest::newRow( data->name ) + << QString::fromUtf8( data->logical ) + << QString::fromUtf8( data->visual ) + << (int) data->basicDir; + data++; } } @@ -127,34 +127,34 @@ void tst_QComplexText::bidiReorderString() int nitems = e.layoutData->items.size(); int i; for (i = 0; i < nitems; ++i) { - //qDebug("item %d bidiLevel=%d", i, e.items[i].analysis.bidiLevel); - levels[i] = e.layoutData->items[i].analysis.bidiLevel; + //qDebug("item %d bidiLevel=%d", i, e.items[i].analysis.bidiLevel); + levels[i] = e.layoutData->items[i].analysis.bidiLevel; } e.bidiReorder(nitems, levels, visualOrder); QString visual; for (i = 0; i < nitems; ++i) { - QScriptItem &si = e.layoutData->items[visualOrder[i]]; - QString sub = logical.mid(si.position, e.length(visualOrder[i])); - if (si.analysis.bidiLevel % 2) { - // reverse sub - QChar *a = (QChar *)sub.unicode(); - QChar *b = a + sub.length() - 1; - while (a < b) { - QChar tmp = *a; - *a = *b; - *b = tmp; - ++a; - --b; - } - a = (QChar *)sub.unicode(); - b = a + sub.length(); - while (amirroredChar(); - ++a; - } - } - visual += sub; + QScriptItem &si = e.layoutData->items[visualOrder[i]]; + QString sub = logical.mid(si.position, e.length(visualOrder[i])); + if (si.analysis.bidiLevel % 2) { + // reverse sub + QChar *a = (QChar *)sub.unicode(); + QChar *b = a + sub.length() - 1; + while (a < b) { + QChar tmp = *a; + *a = *b; + *b = tmp; + ++a; + --b; + } + a = (QChar *)sub.unicode(); + b = a + sub.length(); + while (amirroredChar(); + ++a; + } + } + visual += sub; } // replace Unicode newline back with \n to compare. visual.replace(QChar(0x2028), QChar('\n')); diff --git a/tests/auto/other/qfocusevent/tst_qfocusevent.cpp b/tests/auto/other/qfocusevent/tst_qfocusevent.cpp index b194d08a65..df26407fe6 100644 --- a/tests/auto/other/qfocusevent/tst_qfocusevent.cpp +++ b/tests/auto/other/qfocusevent/tst_qfocusevent.cpp @@ -72,14 +72,14 @@ protected: { QLineEdit::focusInEvent( e ); focusInEventReason = e->reason(); - focusInEventGotFocus = e->gotFocus(); + focusInEventGotFocus = e->gotFocus(); focusInEventRecieved = true; } void focusOutEvent( QFocusEvent* e ) { QLineEdit::focusOutEvent( e ); focusOutEventReason = e->reason(); - focusOutEventLostFocus = !e->gotFocus(); + focusOutEventLostFocus = !e->gotFocus(); focusOutEventRecieved = true; } }; diff --git a/tests/auto/sql/kernel/qsqldatabase/tst_qsqldatabase.cpp b/tests/auto/sql/kernel/qsqldatabase/tst_qsqldatabase.cpp index 91ed7360c3..6e199d5a71 100644 --- a/tests/auto/sql/kernel/qsqldatabase/tst_qsqldatabase.cpp +++ b/tests/auto/sql/kernel/qsqldatabase/tst_qsqldatabase.cpp @@ -668,7 +668,7 @@ void tst_QSqlDatabase::testRecord(const FieldDef fieldDefs[], const QSqlRecord& } QVERIFY(!inf.field(i+1).isAutoValue()); -// qDebug(QString(" field: %1 type: %2 variant type: %3").arg(fieldDefs[ i ].fieldName()).arg(QVariant::typeToName(inf.field(i+1)->type())).arg(QVariant::typeToName(inf.field(i+1)->value().type()))); +// qDebug(QString(" field: %1 type: %2 variant type: %3").arg(fieldDefs[ i ].fieldName()).arg(QVariant::typeToName(inf.field(i+1)->type())).arg(QVariant::typeToName(inf.field(i+1)->value().type()))); } } @@ -692,28 +692,28 @@ void tst_QSqlDatabase::recordTDS() CHECK_DATABASE(db); static const FieldDef fieldDefs[] = { - FieldDef("tinyint", QVariant::Int, 255), - FieldDef("smallint", QVariant::Int, 32767), - FieldDef("int", QVariant::Int, 2147483647), - FieldDef("numeric(10,9)", QVariant::Double, 1.23456789), - FieldDef("decimal(10,9)", QVariant::Double, 1.23456789), - FieldDef("float(4)", QVariant::Double, 1.23456789), - FieldDef("double precision", QVariant::Double, 1.23456789), - FieldDef("real", QVariant::Double, 1.23456789), - FieldDef("smallmoney", QVariant::Double, 100.42), - FieldDef("money", QVariant::Double, 200.42), - // accuracy is that of a minute - FieldDef("smalldatetime", QVariant::DateTime, QDateTime(QDate::currentDate(), QTime(1, 2, 0, 0))), - // accuracy is that of a second - FieldDef("datetime", QVariant::DateTime, QDateTime(QDate::currentDate(), QTime(1, 2, 3, 0))), - FieldDef("char(20)", QVariant::String, "blah1"), - FieldDef("varchar(20)", QVariant::String, "blah2"), - FieldDef("nchar(20)", QVariant::String, "blah3"), - FieldDef("nvarchar(20)", QVariant::String, "blah4"), - FieldDef("text", QVariant::String, "blah5"), - FieldDef("bit", QVariant::Int, 1, false), + FieldDef("tinyint", QVariant::Int, 255), + FieldDef("smallint", QVariant::Int, 32767), + FieldDef("int", QVariant::Int, 2147483647), + FieldDef("numeric(10,9)", QVariant::Double, 1.23456789), + FieldDef("decimal(10,9)", QVariant::Double, 1.23456789), + FieldDef("float(4)", QVariant::Double, 1.23456789), + FieldDef("double precision", QVariant::Double, 1.23456789), + FieldDef("real", QVariant::Double, 1.23456789), + FieldDef("smallmoney", QVariant::Double, 100.42), + FieldDef("money", QVariant::Double, 200.42), + // accuracy is that of a minute + FieldDef("smalldatetime", QVariant::DateTime, QDateTime(QDate::currentDate(), QTime(1, 2, 0, 0))), + // accuracy is that of a second + FieldDef("datetime", QVariant::DateTime, QDateTime(QDate::currentDate(), QTime(1, 2, 3, 0))), + FieldDef("char(20)", QVariant::String, "blah1"), + FieldDef("varchar(20)", QVariant::String, "blah2"), + FieldDef("nchar(20)", QVariant::String, "blah3"), + FieldDef("nvarchar(20)", QVariant::String, "blah4"), + FieldDef("text", QVariant::String, "blah5"), + FieldDef("bit", QVariant::Int, 1, false), - FieldDef() + FieldDef() }; const int fieldCount = createFieldTable(fieldDefs, db); @@ -800,40 +800,40 @@ void tst_QSqlDatabase::recordPSQL() if (db.driver()->hasFeature(QSqlDriver::BLOB)) byteadef = FieldDef("bytea", QVariant::ByteArray, QByteArray("bl\\ah")); static FieldDef fieldDefs[] = { - FieldDef("bigint", QVariant::LongLong, Q_INT64_C(9223372036854775807)), - FieldDef("bigserial", QVariant::LongLong, 100, false), - FieldDef("bit", QVariant::String, "1"), // a bit in postgres is a bit-string - FieldDef("box", QVariant::String, "(5,6),(1,2)"), - FieldDef("char(20)", QVariant::String, "blah5678901234567890"), - FieldDef("varchar(20)", QVariant::String, "blah5678901234567890"), - FieldDef("cidr", QVariant::String, "12.123.0.0/24"), - FieldDef("circle", QVariant::String, "<(1,2),3>"), - FieldDef("date", QVariant::Date, QDate::currentDate()), - FieldDef("float8", QVariant::Double, 1.12345678912), - FieldDef("inet", QVariant::String, "12.123.12.23"), - FieldDef("integer", QVariant::Int, 2147483647), - FieldDef("interval", QVariant::String, "1 day 12:59:10"), -// LOL... you can create a "line" datatype in PostgreSQL <= 7.2.x but -// as soon as you want to insert data you get a "not implemented yet" error -// FieldDef("line", QVariant::Polygon, QPolygon(QRect(1, 2, 3, 4))), - FieldDef("lseg", QVariant::String, "[(1,1),(2,2)]"), - FieldDef("macaddr", QVariant::String, "08:00:2b:01:02:03"), - FieldDef("money", QVariant::String, "$12.23"), - FieldDef("numeric", QVariant::Double, 1.2345678912), - FieldDef("path", QVariant::String, "((1,2),(3,2),(3,5),(1,5))"), - FieldDef("point", QVariant::String, "(1,2)"), - FieldDef("polygon", QVariant::String, "((1,2),(3,2),(3,5),(1,5))"), - FieldDef("real", QVariant::Double, 1.1234), - FieldDef("smallint", QVariant::Int, 32767), - FieldDef("serial", QVariant::Int, 100, false), - FieldDef("text", QVariant::String, "blah"), - FieldDef("time(6)", QVariant::Time, QTime(1, 2, 3)), - FieldDef("timetz", QVariant::Time, QTime(1, 2, 3)), - FieldDef("timestamp(6)", QVariant::DateTime, QDateTime::currentDateTime()), - FieldDef("timestamptz", QVariant::DateTime, QDateTime::currentDateTime()), - byteadef, + FieldDef("bigint", QVariant::LongLong, Q_INT64_C(9223372036854775807)), + FieldDef("bigserial", QVariant::LongLong, 100, false), + FieldDef("bit", QVariant::String, "1"), // a bit in postgres is a bit-string + FieldDef("box", QVariant::String, "(5,6),(1,2)"), + FieldDef("char(20)", QVariant::String, "blah5678901234567890"), + FieldDef("varchar(20)", QVariant::String, "blah5678901234567890"), + FieldDef("cidr", QVariant::String, "12.123.0.0/24"), + FieldDef("circle", QVariant::String, "<(1,2),3>"), + FieldDef("date", QVariant::Date, QDate::currentDate()), + FieldDef("float8", QVariant::Double, 1.12345678912), + FieldDef("inet", QVariant::String, "12.123.12.23"), + FieldDef("integer", QVariant::Int, 2147483647), + FieldDef("interval", QVariant::String, "1 day 12:59:10"), +// LOL... you can create a "line" datatype in PostgreSQL <= 7.2.x but +// as soon as you want to insert data you get a "not implemented yet" error +// FieldDef("line", QVariant::Polygon, QPolygon(QRect(1, 2, 3, 4))), + FieldDef("lseg", QVariant::String, "[(1,1),(2,2)]"), + FieldDef("macaddr", QVariant::String, "08:00:2b:01:02:03"), + FieldDef("money", QVariant::String, "$12.23"), + FieldDef("numeric", QVariant::Double, 1.2345678912), + FieldDef("path", QVariant::String, "((1,2),(3,2),(3,5),(1,5))"), + FieldDef("point", QVariant::String, "(1,2)"), + FieldDef("polygon", QVariant::String, "((1,2),(3,2),(3,5),(1,5))"), + FieldDef("real", QVariant::Double, 1.1234), + FieldDef("smallint", QVariant::Int, 32767), + FieldDef("serial", QVariant::Int, 100, false), + FieldDef("text", QVariant::String, "blah"), + FieldDef("time(6)", QVariant::Time, QTime(1, 2, 3)), + FieldDef("timetz", QVariant::Time, QTime(1, 2, 3)), + FieldDef("timestamp(6)", QVariant::DateTime, QDateTime::currentDateTime()), + FieldDef("timestamptz", QVariant::DateTime, QDateTime::currentDateTime()), + byteadef, - FieldDef() + FieldDef() }; QSqlQuery q(db); @@ -853,17 +853,17 @@ void tst_QSqlDatabase::recordPSQL() commonFieldTest(fieldDefs, db, fieldCount); for (int i = 0; i < ITERATION_COUNT; ++i) { - // increase serial values - for (int i2 = 0; !fieldDefs[ i2 ].typeName.isNull(); ++i2) { - if (fieldDefs[ i2 ].typeName == "serial" || - fieldDefs[ i2 ].typeName == "bigserial") { - - FieldDef def = fieldDefs[ i2 ]; - def.val = def.val.toInt() + 1; - fieldDefs[ i2 ] = def; + // increase serial values + for (int i2 = 0; !fieldDefs[ i2 ].typeName.isNull(); ++i2) { + if (fieldDefs[ i2 ].typeName == "serial" || + fieldDefs[ i2 ].typeName == "bigserial") { + + FieldDef def = fieldDefs[ i2 ]; + def.val = def.val.toInt() + 1; + fieldDefs[ i2 ] = def; + } } } - } } void tst_QSqlDatabase::recordMySQL() @@ -890,34 +890,34 @@ void tst_QSqlDatabase::recordMySQL() static QDateTime dt(QDate::currentDate(), QTime(1, 2, 3, 0)); static const FieldDef fieldDefs[] = { - FieldDef("tinyint", QVariant::Int, 127), - FieldDef("tinyint unsigned", QVariant::UInt, 255), - FieldDef("smallint", QVariant::Int, 32767), - FieldDef("smallint unsigned", QVariant::UInt, 65535), - FieldDef("mediumint", QVariant::Int, 8388607), - FieldDef("mediumint unsigned", QVariant::UInt, 16777215), - FieldDef("integer", QVariant::Int, 2147483647), - FieldDef("integer unsigned", QVariant::UInt, 4294967295u), - FieldDef("bigint", QVariant::LongLong, Q_INT64_C(9223372036854775807)), - FieldDef("bigint unsigned", QVariant::ULongLong, Q_UINT64_C(18446744073709551615)), - FieldDef("float", QVariant::Double, 1.12345), - FieldDef("double", QVariant::Double, 1.123456789), - FieldDef("decimal(10, 9)", QVariant::Double,1.123456789), - FieldDef("numeric(5, 2)", QVariant::Double, 123.67), - FieldDef("date", QVariant::Date, QDate::currentDate()), - FieldDef("datetime", QVariant::DateTime, dt), - FieldDef("timestamp", QVariant::DateTime, dt, false), - FieldDef("time", QVariant::Time, dt.time()), - FieldDef("year", QVariant::Int, 2003), - FieldDef("char(20)", QVariant::String, "Blah"), - FieldDef("varchar(20)", QVariant::String, "BlahBlah"), - FieldDef("tinytext", QVariant::String, QString("blah5")), - FieldDef("text", QVariant::String, QString("blah6")), - FieldDef("mediumtext", QVariant::String, QString("blah7")), - FieldDef("longtext", QVariant::String, QString("blah8")), - // SET OF? + FieldDef("tinyint", QVariant::Int, 127), + FieldDef("tinyint unsigned", QVariant::UInt, 255), + FieldDef("smallint", QVariant::Int, 32767), + FieldDef("smallint unsigned", QVariant::UInt, 65535), + FieldDef("mediumint", QVariant::Int, 8388607), + FieldDef("mediumint unsigned", QVariant::UInt, 16777215), + FieldDef("integer", QVariant::Int, 2147483647), + FieldDef("integer unsigned", QVariant::UInt, 4294967295u), + FieldDef("bigint", QVariant::LongLong, Q_INT64_C(9223372036854775807)), + FieldDef("bigint unsigned", QVariant::ULongLong, Q_UINT64_C(18446744073709551615)), + FieldDef("float", QVariant::Double, 1.12345), + FieldDef("double", QVariant::Double, 1.123456789), + FieldDef("decimal(10, 9)", QVariant::Double, 1.123456789), + FieldDef("numeric(5, 2)", QVariant::Double, 123.67), + FieldDef("date", QVariant::Date, QDate::currentDate()), + FieldDef("datetime", QVariant::DateTime, dt), + FieldDef("timestamp", QVariant::DateTime, dt, false), + FieldDef("time", QVariant::Time, dt.time()), + FieldDef("year", QVariant::Int, 2003), + FieldDef("char(20)", QVariant::String, "Blah"), + FieldDef("varchar(20)", QVariant::String, "BlahBlah"), + FieldDef("tinytext", QVariant::String, QString("blah5")), + FieldDef("text", QVariant::String, QString("blah6")), + FieldDef("mediumtext", QVariant::String, QString("blah7")), + FieldDef("longtext", QVariant::String, QString("blah8")), + // SET OF? - FieldDef() + FieldDef() }; const int fieldCount = createFieldTable(fieldDefs, db); @@ -938,27 +938,27 @@ void tst_QSqlDatabase::recordDB2() CHECK_DATABASE(db); static const FieldDef fieldDefs[] = { - FieldDef("char(20)", QVariant::String, QString("Blah1")), - FieldDef("varchar(20)", QVariant::String, QString("Blah2")), - FieldDef("long varchar", QVariant::String, QString("Blah3")), - // using BOOLEAN results in "SQL0486N The BOOLEAN data type is currently only supported internally." -//X FieldDef("boolean" , QVariant::Bool, QVariant(true, 1)), - FieldDef("smallint", QVariant::Int, 32767), - FieldDef("integer", QVariant::Int, 2147483647), - FieldDef("bigint", QVariant::LongLong, Q_INT64_C(9223372036854775807)), - FieldDef("real", QVariant::Double, 1.12345), - FieldDef("double", QVariant::Double, 1.23456789), - FieldDef("float", QVariant::Double, 1.23456789), - FieldDef("decimal(10,9)", QVariant::Double, 1.234567891), - FieldDef("numeric(10,9)", QVariant::Double, 1.234567891), - FieldDef("date", QVariant::Date, QDate::currentDate()), - FieldDef("time", QVariant::Time, QTime(1, 2, 3)), - FieldDef("timestamp", QVariant::DateTime, QDateTime::currentDateTime()), -// FieldDef("graphic(20)", QVariant::String, QString("Blah4")), -// FieldDef("vargraphic(20)", QVariant::String, QString("Blah5")), -// FieldDef("long vargraphic", QVariant::String, QString("Blah6")), - //X FieldDef("datalink", QVariant::String, QString("DLVALUE('Blah10')")), - FieldDef() + FieldDef("char(20)", QVariant::String, QString("Blah1")), + FieldDef("varchar(20)", QVariant::String, QString("Blah2")), + FieldDef("long varchar", QVariant::String, QString("Blah3")), + // using BOOLEAN results in "SQL0486N The BOOLEAN data type is currently only supported internally." +//X FieldDef("boolean" , QVariant::Bool, QVariant(true, 1)), + FieldDef("smallint", QVariant::Int, 32767), + FieldDef("integer", QVariant::Int, 2147483647), + FieldDef("bigint", QVariant::LongLong, Q_INT64_C(9223372036854775807)), + FieldDef("real", QVariant::Double, 1.12345), + FieldDef("double", QVariant::Double, 1.23456789), + FieldDef("float", QVariant::Double, 1.23456789), + FieldDef("decimal(10,9)", QVariant::Double, 1.234567891), + FieldDef("numeric(10,9)", QVariant::Double, 1.234567891), + FieldDef("date", QVariant::Date, QDate::currentDate()), + FieldDef("time", QVariant::Time, QTime(1, 2, 3)), + FieldDef("timestamp", QVariant::DateTime, QDateTime::currentDateTime()), +// FieldDef("graphic(20)", QVariant::String, QString("Blah4")), +// FieldDef("vargraphic(20)", QVariant::String, QString("Blah5")), +// FieldDef("long vargraphic", QVariant::String, QString("Blah6")), + //X FieldDef("datalink", QVariant::String, QString("DLVALUE('Blah10')")), + FieldDef() }; const int fieldCount = createFieldTable(fieldDefs, db); diff --git a/tests/auto/sql/kernel/qsqlquery/tst_qsqlquery.cpp b/tests/auto/sql/kernel/qsqlquery/tst_qsqlquery.cpp index b74e02bcc4..38f561dbaa 100644 --- a/tests/auto/sql/kernel/qsqlquery/tst_qsqlquery.cpp +++ b/tests/auto/sql/kernel/qsqlquery/tst_qsqlquery.cpp @@ -2857,7 +2857,7 @@ void tst_QSqlQuery::task_250026() QVERIFY_SQL( q, next() ); QCOMPARE( q.value( 0 ).toString().length(), data258.length() ); QVERIFY_SQL( q, next() ); - QCOMPARE( q.value( 0 ).toString().length(), data1026.length() ); + QCOMPARE( q.value( 0 ).toString().length(), data1026.length() ); } void tst_QSqlQuery::task_205701() diff --git a/tests/auto/sql/kernel/qsqlrecord/tst_qsqlrecord.cpp b/tests/auto/sql/kernel/qsqlrecord/tst_qsqlrecord.cpp index b251e54cca..a76ecec84d 100644 --- a/tests/auto/sql/kernel/qsqlrecord/tst_qsqlrecord.cpp +++ b/tests/auto/sql/kernel/qsqlrecord/tst_qsqlrecord.cpp @@ -114,8 +114,8 @@ void tst_QSqlRecord::cleanup() { delete rec; for ( int i = 0; i < NUM_FIELDS; ++i ) { - delete fields[ i ]; - fields[ i ] = 0; + delete fields[ i ]; + fields[ i ] = 0; } rec = 0; } @@ -129,7 +129,7 @@ void tst_QSqlRecord::createTestRecord() fields[ 2 ] = new QSqlField( "double", QVariant::Double ); fields[ 3 ] = new QSqlField( "bool", QVariant::Bool ); for ( int i = 0; i < NUM_FIELDS; ++i ) - rec->append( *(fields[ i ] ) ); + rec->append( *(fields[ i ] ) ); } @@ -237,7 +237,7 @@ void tst_QSqlRecord::contains() { createTestRecord(); for ( int i = 0; i < NUM_FIELDS; ++i ) - QVERIFY( rec->contains( fields[ i ]->name() ) ); + QVERIFY( rec->contains( fields[ i ]->name() ) ); QVERIFY( !rec->contains( "__Harry__" ) ); } @@ -258,10 +258,10 @@ void tst_QSqlRecord::field() int i; for ( i = 0; i < NUM_FIELDS; ++i ) - QVERIFY( rec->field( i ) == *fields[ i ] ); + QVERIFY( rec->field( i ) == *fields[ i ] ); for ( i = 0; i < NUM_FIELDS; ++i ) - QVERIFY( rec->field( (fields[ i ] )->name() ) == *( fields[ i ] ) ); + QVERIFY( rec->field( (fields[ i ] )->name() ) == *( fields[ i ] ) ); QVERIFY( rec->indexOf( "_This should give a warning!_" ) == -1 ); } @@ -270,7 +270,7 @@ void tst_QSqlRecord::fieldName() createTestRecord(); for ( int i = 0; i < NUM_FIELDS; ++i ) - QVERIFY( rec->field( (fields[ i ] )->name() ) == *( fields[ i ] ) ); + QVERIFY( rec->field( (fields[ i ] )->name() ) == *( fields[ i ] ) ); QVERIFY( rec->fieldName( NUM_FIELDS ).isNull() ); } @@ -279,10 +279,10 @@ void tst_QSqlRecord::insert() QSqlRecord iRec; int i; for ( i = 0; i <= 100; ++i ) { - iRec.insert( i, QSqlField( QString::number( i ), QVariant::Int ) ); + iRec.insert( i, QSqlField( QString::number( i ), QVariant::Int ) ); } for ( i = 0; i <= 100; ++i ) { - QCOMPARE( iRec.fieldName( i ), QString::number( i ) ); + QCOMPARE( iRec.fieldName( i ), QString::number( i ) ); } // iRec.insert( 505, QSqlField( "Harry", QVariant::Double ) ); // QCOMPARE( iRec.fieldName( 505 ), (QString)"Harry" ); @@ -313,30 +313,30 @@ void tst_QSqlRecord::isGenerated() int i; for ( i = 0; i < NUM_FIELDS; ++i ) - QVERIFY( rec->isGenerated( i ) ); + QVERIFY( rec->isGenerated( i ) ); for ( i = 0; i < NUM_FIELDS; ++i ) - QVERIFY( rec->isGenerated( fields[ i ]->name() ) ); + QVERIFY( rec->isGenerated( fields[ i ]->name() ) ); for ( i = 0; i < NUM_FIELDS; ++i ) { - if ( i % 2 ) - rec->setGenerated( i, false ); + if ( i % 2 ) + rec->setGenerated( i, false ); } rec->setGenerated( NUM_FIELDS * 2, false ); // nothing should happen here for ( i = 0; i < NUM_FIELDS; ++i ) { - if ( i % 2 ) { - QVERIFY( !rec->isGenerated( i ) ); - } else { - QVERIFY( rec->isGenerated( i ) ); + if ( i % 2 ) { + QVERIFY( !rec->isGenerated( i ) ); + } else { + QVERIFY( rec->isGenerated( i ) ); } } for ( i = 0; i < NUM_FIELDS; ++i ) - if ( i % 2 ) { - QVERIFY( !rec->isGenerated( fields[ i ]->name() ) ); - } else { - QVERIFY( rec->isGenerated( fields[ i ]->name() ) ); + if ( i % 2 ) { + QVERIFY( !rec->isGenerated( fields[ i ]->name() ) ); + } else { + QVERIFY( rec->isGenerated( fields[ i ]->name() ) ); } rec->setGenerated( "_This should give a warning!_", false ); // nothing should happen here @@ -348,31 +348,31 @@ void tst_QSqlRecord::isNull() int i; for ( i = 0; i < NUM_FIELDS; ++i ) { - QVERIFY( rec->isNull( i ) ); - QVERIFY( rec->isNull( fields[ i ]->name() ) ); + QVERIFY( rec->isNull( i ) ); + QVERIFY( rec->isNull( fields[ i ]->name() ) ); } for ( i = 0; i < NUM_FIELDS; ++i ) { - if ( i % 2 ) - rec->setNull( i ); + if ( i % 2 ) + rec->setNull( i ); } rec->setNull( NUM_FIELDS ); // nothing should happen here for ( i = 0; i < NUM_FIELDS; ++i ) { - if ( i % 2 ) { - QVERIFY( rec->isNull( i ) ); - QVERIFY( rec->isNull( fields[ i ]->name() ) ); + if ( i % 2 ) { + QVERIFY( rec->isNull( i ) ); + QVERIFY( rec->isNull( fields[ i ]->name() ) ); } } for ( i = 0; i < NUM_FIELDS; ++i ) { - rec->setNull( fields[ i ]->name() ); + rec->setNull( fields[ i ]->name() ); } rec->setNull( "_This should give a warning!_" ); // nothing should happen here for ( i = 0; i < NUM_FIELDS; ++i ) { - QVERIFY( rec->isNull( i ) ); - QVERIFY( rec->isNull( fields[ i ]->name() ) ); + QVERIFY( rec->isNull( i ) ); + QVERIFY( rec->isNull( fields[ i ]->name() ) ); } } @@ -385,19 +385,19 @@ void tst_QSqlRecord::operator_Assign() buf3 = *rec; buf4 = *rec; for ( i = 0; i < NUM_FIELDS; ++i ) { - QVERIFY( buf2.field( i ) == *fields[ i ] ); - QVERIFY( buf3.field( i ) == *( fields[ i ] ) ); - QVERIFY( buf4.field( i ) == *( fields[ i ] ) ); + QVERIFY( buf2.field( i ) == *fields[ i ] ); + QVERIFY( buf3.field( i ) == *( fields[ i ] ) ); + QVERIFY( buf4.field( i ) == *( fields[ i ] ) ); } for ( i = 0; i < NUM_FIELDS; ++i ) - buf3.setNull( i ); + buf3.setNull( i ); buf3.remove( NUM_FIELDS - 1 ); QSqlRecord buf5 = buf3; for ( i = 0; i < NUM_FIELDS - 1; ++i ) { - QSqlField fi ( fields[ i ]->name(), fields[ i ]->type() ); - fi.clear(); - QVERIFY( buf5.field( i ) == fi ); - QVERIFY( buf5.isGenerated( i ) ); + QSqlField fi ( fields[ i ]->name(), fields[ i ]->type() ); + fi.clear(); + QVERIFY( buf5.field( i ) == fi ); + QVERIFY( buf5.isGenerated( i ) ); } } @@ -406,7 +406,7 @@ void tst_QSqlRecord::position() createTestRecord(); int i; for ( i = 0; i < NUM_FIELDS; ++i ) { - QCOMPARE( rec->indexOf( fields[ i ]->name() ), i ); + QCOMPARE( rec->indexOf( fields[ i ]->name() ), i ); } } @@ -415,15 +415,15 @@ void tst_QSqlRecord::remove() createTestRecord(); int i; for ( i = 0; i < NUM_FIELDS; ++i ) { - rec->setGenerated( i, false ); - QCOMPARE( (int)rec->count(), NUM_FIELDS - i ); - rec->remove( 0 ); - QCOMPARE( (int)rec->count(), NUM_FIELDS - i - 1 ); + rec->setGenerated( i, false ); + QCOMPARE( (int)rec->count(), NUM_FIELDS - i ); + rec->remove( 0 ); + QCOMPARE( (int)rec->count(), NUM_FIELDS - i - 1 ); } rec->remove( NUM_FIELDS * 2 ); // nothing should happen for ( i = 0; i < NUM_FIELDS; ++i ) { - rec->insert( i, QSqlField( fields[ i ]->name(), fields[ i ]->type() ) ); - QVERIFY( rec->isGenerated( i ) ); + rec->insert( i, QSqlField( fields[ i ]->name(), fields[ i ]->type() ) ); + QVERIFY( rec->isGenerated( i ) ); } } @@ -472,7 +472,7 @@ void tst_QSqlRecord::setValue() QFETCH( int, bval ); for ( i = 0; i < 4; ++i ) - rec->setNull( i ); + rec->setNull( i ); rec->setValue( 0, sval ); rec->setValue( 1, ival ); @@ -483,7 +483,7 @@ void tst_QSqlRecord::setValue() QVERIFY( rec->value( 2 ) == dval ); QVERIFY( rec->value( 3 ) == QVariant(bval) ); for ( i = 0; i < 4; ++i ) - QVERIFY( !rec->isNull( i ) ); + QVERIFY( !rec->isNull( i ) ); QSqlRecord rec2 = *rec; QVERIFY( rec2.value( 0 ) == sval ); @@ -495,7 +495,7 @@ void tst_QSqlRecord::setValue() QVERIFY( rec2.value( 0 ) == "__Harry__" ); for ( i = 0; i < 4; ++i ) - QVERIFY( !rec2.isNull( i ) ); + QVERIFY( !rec2.isNull( i ) ); QCOMPARE( rec->value( 0 ).toString(), sval ); QCOMPARE( rec->value( 1 ).toInt(), ival ); diff --git a/tests/auto/sql/models/qsqlquerymodel/tst_qsqlquerymodel.cpp b/tests/auto/sql/models/qsqlquerymodel/tst_qsqlquerymodel.cpp index c5eafb37fb..fe0f6abd9d 100644 --- a/tests/auto/sql/models/qsqlquerymodel/tst_qsqlquerymodel.cpp +++ b/tests/auto/sql/models/qsqlquerymodel/tst_qsqlquerymodel.cpp @@ -126,20 +126,20 @@ void tst_QSqlQueryModel::initTestCase() { dbs.open(); for (QStringList::ConstIterator it = dbs.dbNames.begin(); it != dbs.dbNames.end(); ++it) { - QSqlDatabase db = QSqlDatabase::database((*it)); - CHECK_DATABASE(db); - dropTestTables(db); //in case of leftovers - createTestTables(db); - populateTestTables(db); + QSqlDatabase db = QSqlDatabase::database((*it)); + CHECK_DATABASE(db); + dropTestTables(db); //in case of leftovers + createTestTables(db); + populateTestTables(db); } } void tst_QSqlQueryModel::cleanupTestCase() { for (QStringList::ConstIterator it = dbs.dbNames.begin(); it != dbs.dbNames.end(); ++it) { - QSqlDatabase db = QSqlDatabase::database((*it)); - CHECK_DATABASE(db); - dropTestTables(db); + QSqlDatabase db = QSqlDatabase::database((*it)); + CHECK_DATABASE(db); + dropTestTables(db); } dbs.close(); } diff --git a/tests/auto/widgets/dialogs/qdialog/tst_qdialog.cpp b/tests/auto/widgets/dialogs/qdialog/tst_qdialog.cpp index 1aab794e1b..d8833e232d 100644 --- a/tests/auto/widgets/dialogs/qdialog/tst_qdialog.cpp +++ b/tests/auto/widgets/dialogs/qdialog/tst_qdialog.cpp @@ -200,7 +200,7 @@ void tst_QDialog::showExtension() // show ((DummyDialog*)testWidget)->showExtension( true ); // while ( testWidget->size() == dlgSize ) -// qApp->processEvents(); +// qApp->processEvents(); QTEST( testWidget->size(), "result" ); diff --git a/tests/auto/widgets/dialogs/qfiledialog2/tst_qfiledialog2.cpp b/tests/auto/widgets/dialogs/qfiledialog2/tst_qfiledialog2.cpp index b9e6c82d84..217fb4c30b 100644 --- a/tests/auto/widgets/dialogs/qfiledialog2/tst_qfiledialog2.cpp +++ b/tests/auto/widgets/dialogs/qfiledialog2/tst_qfiledialog2.cpp @@ -310,10 +310,10 @@ void tst_QFileDialog2::unc() void tst_QFileDialog2::emptyUncPath() { QNonNativeFileDialog fd; - fd.show(); + fd.show(); QLineEdit *lineEdit = fd.findChild("fileNameEdit"); QVERIFY(lineEdit); - // press 'keys' for the input + // press 'keys' for the input for (int i = 0; i < 3 ; ++i) QTest::keyPress(lineEdit, Qt::Key_Backslash); QFileSystemModel *model = fd.findChild("qt_filesystem_model"); diff --git a/tests/auto/widgets/dialogs/qfilesystemmodel/tst_qfilesystemmodel.cpp b/tests/auto/widgets/dialogs/qfilesystemmodel/tst_qfilesystemmodel.cpp index 3a1f650351..b29bf44307 100644 --- a/tests/auto/widgets/dialogs/qfilesystemmodel/tst_qfilesystemmodel.cpp +++ b/tests/auto/widgets/dialogs/qfilesystemmodel/tst_qfilesystemmodel.cpp @@ -164,12 +164,12 @@ void tst_QFileSystemModel::cleanup() for (int i = 0; i < list.count(); ++i) { QFileInfo fi(dir.path() + '/' + list.at(i)); if (fi.exists() && fi.isFile()) { - QFile p(fi.absoluteFilePath()); + QFile p(fi.absoluteFilePath()); p.setPermissions(QFile::ReadUser | QFile::ReadOwner | QFile::ExeOwner | QFile::ExeUser | QFile::WriteUser | QFile::WriteOwner | QFile::WriteOther); - QFile dead(dir.path() + '/' + list.at(i)); - dead.remove(); - } - if (fi.exists() && fi.isDir()) + QFile dead(dir.path() + '/' + list.at(i)); + dead.remove(); + } + if (fi.exists() && fi.isDir()) QVERIFY(dir.rmdir(list.at(i))); } list = dir.entryList(QDir::AllEntries | QDir::System | QDir::Hidden | QDir::NoDotAndDotDot); diff --git a/tests/auto/widgets/dialogs/qfontdialog/tst_qfontdialog.cpp b/tests/auto/widgets/dialogs/qfontdialog/tst_qfontdialog.cpp index 1762e40a9d..6eb36115cb 100644 --- a/tests/auto/widgets/dialogs/qfontdialog/tst_qfontdialog.cpp +++ b/tests/auto/widgets/dialogs/qfontdialog/tst_qfontdialog.cpp @@ -108,11 +108,11 @@ void tst_QFontDialog::cleanup() void tst_QFontDialog::postKeyReturn() { QWidgetList list = QApplication::topLevelWidgets(); for (int i=0; i(list[i]); - if (dialog) { - QTest::keyClick( list[i], Qt::Key_Return, Qt::NoModifier ); - return; - } + QFontDialog *dialog = qobject_cast(list[i]); + if (dialog) { + QTest::keyClick( list[i], Qt::Key_Return, Qt::NoModifier ); + return; + } } } diff --git a/tests/auto/widgets/dialogs/qinputdialog/tst_qinputdialog.cpp b/tests/auto/widgets/dialogs/qinputdialog/tst_qinputdialog.cpp index 7d8077d77d..abd120db86 100644 --- a/tests/auto/widgets/dialogs/qinputdialog/tst_qinputdialog.cpp +++ b/tests/auto/widgets/dialogs/qinputdialog/tst_qinputdialog.cpp @@ -110,7 +110,7 @@ void testTypingValue( sbox->selectAll(); for (int i = 0; i < value.size(); ++i) { const QChar valChar = value[i]; - _keyClick(static_cast(sbox), valChar.toLatin1()); // ### always guaranteed to work? + _keyClick(static_cast(sbox), valChar.toLatin1()); // ### always guaranteed to work? if (sbox->hasAcceptableInput()) QVERIFY(okButton->isEnabled()); else @@ -123,7 +123,7 @@ void testTypingValue(QLineEdit *ledit, QPushButton *okButton, const QString &val ledit->selectAll(); for (int i = 0; i < value.size(); ++i) { const QChar valChar = value[i]; - _keyClick(ledit, valChar.toLatin1()); // ### always guaranteed to work? + _keyClick(ledit, valChar.toLatin1()); // ### always guaranteed to work? QVERIFY(ledit->hasAcceptableInput()); QVERIFY(okButton->isEnabled()); } diff --git a/tests/auto/widgets/dialogs/qwizard/tst_qwizard.cpp b/tests/auto/widgets/dialogs/qwizard/tst_qwizard.cpp index 25a82050e3..4c07b48c00 100644 --- a/tests/auto/widgets/dialogs/qwizard/tst_qwizard.cpp +++ b/tests/auto/widgets/dialogs/qwizard/tst_qwizard.cpp @@ -1812,7 +1812,7 @@ public: QWizardPage *page_to_delete = page(id); removePage(id); delete page_to_delete; - } + } } void applyOperations(const QList &operations) diff --git a/tests/auto/widgets/graphicsview/qgraphicsgridlayout/tst_qgraphicsgridlayout.cpp b/tests/auto/widgets/graphicsview/qgraphicsgridlayout/tst_qgraphicsgridlayout.cpp index 1ffb5c3b5c..78ab8027d8 100644 --- a/tests/auto/widgets/graphicsview/qgraphicsgridlayout/tst_qgraphicsgridlayout.cpp +++ b/tests/auto/widgets/graphicsview/qgraphicsgridlayout/tst_qgraphicsgridlayout.cpp @@ -2974,7 +2974,7 @@ void tst_QGraphicsGridLayout::geometries() void tst_QGraphicsGridLayout::avoidRecursionInInsertItem() { QGraphicsWidget window(0, Qt::Window); - QGraphicsGridLayout *layout = new QGraphicsGridLayout(&window); + QGraphicsGridLayout *layout = new QGraphicsGridLayout(&window); QCOMPARE(layout->count(), 0); QTest::ignoreMessage(QtWarningMsg, "QGraphicsGridLayout::addItem: cannot insert itself"); layout->addItem(layout, 0, 0); diff --git a/tests/auto/widgets/graphicsview/qgraphicslinearlayout/tst_qgraphicslinearlayout.cpp b/tests/auto/widgets/graphicsview/qgraphicslinearlayout/tst_qgraphicslinearlayout.cpp index 8f7a3a3255..6a3e69d0a8 100644 --- a/tests/auto/widgets/graphicsview/qgraphicslinearlayout/tst_qgraphicslinearlayout.cpp +++ b/tests/auto/widgets/graphicsview/qgraphicslinearlayout/tst_qgraphicslinearlayout.cpp @@ -774,7 +774,7 @@ void tst_QGraphicsLinearLayout::orientation() layout.setOrientation(orientation); QCOMPARE(layout.orientation(), orientation); - // important to resize to preferredsize when orientation is switched + // important to resize to preferredsize when orientation is switched widget->resize(widget->effectiveSizeHint(Qt::PreferredSize)); qApp->processEvents(); for (i = 0; i < positions.count(); ++i) { @@ -1561,7 +1561,7 @@ void tst_QGraphicsLinearLayout::removeLayout() void tst_QGraphicsLinearLayout::avoidRecursionInInsertItem() { QGraphicsWidget window(0, Qt::Window); - QGraphicsLinearLayout *layout = new QGraphicsLinearLayout(&window); + QGraphicsLinearLayout *layout = new QGraphicsLinearLayout(&window); QCOMPARE(layout->count(), 0); QTest::ignoreMessage(QtWarningMsg, "QGraphicsLinearLayout::insertItem: cannot insert itself"); layout->insertItem(0, layout); diff --git a/tests/auto/widgets/graphicsview/qgraphicsproxywidget/tst_qgraphicsproxywidget.cpp b/tests/auto/widgets/graphicsview/qgraphicsproxywidget/tst_qgraphicsproxywidget.cpp index 92de2c6733..d3f6c2db00 100644 --- a/tests/auto/widgets/graphicsview/qgraphicsproxywidget/tst_qgraphicsproxywidget.cpp +++ b/tests/auto/widgets/graphicsview/qgraphicsproxywidget/tst_qgraphicsproxywidget.cpp @@ -1230,17 +1230,17 @@ void tst_QGraphicsProxyWidget::mousePressReleaseEvent() view.resize(100, 100); if (hasWidget) { proxy->setWidget(widget); - proxy->show(); + proxy->show(); } proxy->setPos(50, 0); scene.addItem(proxy); proxy->setFocus(); QTest::mousePress(view.viewport(), Qt::LeftButton, 0, - view.mapFromScene(proxy->mapToScene(proxy->boundingRect().center()))); + view.mapFromScene(proxy->mapToScene(proxy->boundingRect().center()))); QTRY_COMPARE(spy.count(), 0); QTest::mouseRelease(view.viewport(), Qt::LeftButton, 0, - view.mapFromScene(proxy->mapToScene(proxy->boundingRect().center()))); + view.mapFromScene(proxy->mapToScene(proxy->boundingRect().center()))); QTRY_COMPARE(spy.count(), (hasWidget) ? 1 : 0); if (!hasWidget) @@ -1439,16 +1439,16 @@ class View : public QGraphicsView { public: View(QGraphicsScene *scene, QWidget *parent = 0) - : QGraphicsView(scene, parent), npaints(0) + : QGraphicsView(scene, parent), npaints(0) { } QRegion paintEventRegion; int npaints; protected: void paintEvent(QPaintEvent *event) { - ++npaints; - paintEventRegion += event->region(); - QGraphicsView::paintEvent(event); + ++npaints; + paintEventRegion += event->region(); + QGraphicsView::paintEvent(event); } }; @@ -1458,7 +1458,7 @@ class ScrollWidget : public QWidget public: ScrollWidget() : npaints(0) { - resize(200, 200); + resize(200, 200); } QRegion paintEventRegion; int npaints; @@ -1466,17 +1466,17 @@ public: public slots: void updateScroll() { - update(0, 0, 200, 10); - scroll(0, 10, QRect(0, 0, 100, 20)); + update(0, 0, 200, 10); + scroll(0, 10, QRect(0, 0, 100, 20)); } protected: void paintEvent(QPaintEvent *event) { - ++npaints; - paintEventRegion += event->region(); - QPainter painter(this); - painter.fillRect(event->rect(), Qt::blue); + ++npaints; + paintEventRegion += event->region(); + QPainter painter(this); + painter.fillRect(event->rect(), Qt::blue); } }; @@ -1502,7 +1502,7 @@ void tst_QGraphicsProxyWidget::scrollUpdate() // QRect(0, 12, 102, 10) is the scroll update, expanded (-2, -2, 2, 2), // intersected with the above update. QCOMPARE(view.paintEventRegion.rects(), - QVector() << QRect(0, 0, 200, 12) << QRect(0, 12, 102, 10)); + QVector() << QRect(0, 0, 200, 12) << QRect(0, 12, 102, 10)); QCOMPARE(widget->npaints, 2); QCOMPARE(widget->paintEventRegion.rects(), QVector() << QRect(0, 0, 200, 12) << QRect(0, 12, 102, 10)); @@ -2458,7 +2458,7 @@ void tst_QGraphicsProxyWidget::popup_basic() QComboBox *box = new QComboBox; box->setGeometry(0, 0, 320, 40); box->addItems(QStringList() << "monday" << "tuesday" << "wednesday" - << "thursday" << "saturday" << "sunday"); + << "thursday" << "saturday" << "sunday"); QCOMPARE(proxy->childItems().count(), 0); proxy->setWidget(box); proxy->show(); @@ -2472,7 +2472,7 @@ void tst_QGraphicsProxyWidget::popup_basic() QApplication::processEvents(); QTest::mousePress(view.viewport(), Qt::LeftButton, 0, - view.mapFromScene(proxy->mapToScene(proxy->boundingRect().center()))); + view.mapFromScene(proxy->mapToScene(proxy->boundingRect().center()))); QTRY_COMPARE(box->pos(), QPoint()); @@ -2511,7 +2511,7 @@ void tst_QGraphicsProxyWidget::popup_subwidget() QComboBox *box = new QComboBox; box->addItems(QStringList() << "monday" << "tuesday" << "wednesday" - << "thursday" << "saturday" << "sunday"); + << "thursday" << "saturday" << "sunday"); QVBoxLayout *layout = new QVBoxLayout; layout->addWidget(new QLineEdit("QLineEdit")); diff --git a/tests/auto/widgets/itemviews/qabstractitemview/tst_qabstractitemview.cpp b/tests/auto/widgets/itemviews/qabstractitemview/tst_qabstractitemview.cpp index 97ea7d7d32..e4167aacad 100644 --- a/tests/auto/widgets/itemviews/qabstractitemview/tst_qabstractitemview.cpp +++ b/tests/auto/widgets/itemviews/qabstractitemview/tst_qabstractitemview.cpp @@ -216,10 +216,10 @@ private slots: void persistentEditorFocus(); void setItemDelegate(); void setItemDelegate_data(); - // The dragAndDrop() test doesn't work, and is thus disabled on Mac and Windows - // for the following reasons: - // Mac: use of GetCurrentEventButtonState() in QDragManager::drag() - // Win: unknown reason + // The dragAndDrop() test doesn't work, and is thus disabled on Mac and Windows + // for the following reasons: + // Mac: use of GetCurrentEventButtonState() in QDragManager::drag() + // Win: unknown reason #if !defined(Q_OS_MAC) && !defined(Q_OS_WIN) #if 0 void dragAndDrop(); diff --git a/tests/auto/widgets/itemviews/qlistwidget/tst_qlistwidget.cpp b/tests/auto/widgets/itemviews/qlistwidget/tst_qlistwidget.cpp index 42975cfb5e..153144db63 100644 --- a/tests/auto/widgets/itemviews/qlistwidget/tst_qlistwidget.cpp +++ b/tests/auto/widgets/itemviews/qlistwidget/tst_qlistwidget.cpp @@ -1646,29 +1646,29 @@ void tst_QListWidget::QTBUG8086_currentItemChangedOnClick() class ItemDelegate : public QItemDelegate { public: - ItemDelegate(QObject *parent = 0) : QItemDelegate(parent) - {} - virtual QWidget *createEditor(QWidget *parent, const QStyleOptionViewItem &, const QModelIndex &) const - { - QLineEdit *lineEdit = new QLineEdit(parent); - lineEdit->setFrame(false); - QCompleter *completer = new QCompleter(QStringList() << "completer", lineEdit); - completer->setCompletionMode(QCompleter::InlineCompletion); - lineEdit->setCompleter(completer); - return lineEdit; - } + ItemDelegate(QObject *parent = 0) : QItemDelegate(parent) + {} + virtual QWidget *createEditor(QWidget *parent, const QStyleOptionViewItem &, const QModelIndex &) const + { + QLineEdit *lineEdit = new QLineEdit(parent); + lineEdit->setFrame(false); + QCompleter *completer = new QCompleter(QStringList() << "completer", lineEdit); + completer->setCompletionMode(QCompleter::InlineCompletion); + lineEdit->setCompleter(completer); + return lineEdit; + } }; void tst_QListWidget::QTBUG14363_completerWithAnyKeyPressedEditTriggers() { - QListWidget listWidget; - listWidget.setEditTriggers(QAbstractItemView::AnyKeyPressed); + QListWidget listWidget; + listWidget.setEditTriggers(QAbstractItemView::AnyKeyPressed); listWidget.setItemDelegate(new ItemDelegate); QListWidgetItem *item = new QListWidgetItem(QLatin1String("select an item (don't start editing)"), &listWidget); item->setFlags(Qt::ItemIsEnabled|Qt::ItemIsSelectable|Qt::ItemIsEditable); new QListWidgetItem(QLatin1String("try to type the letter 'c'"), &listWidget); new QListWidgetItem(QLatin1String("completer"), &listWidget); - listWidget.show(); + listWidget.show(); listWidget.setCurrentItem(item); qApp->setActiveWindow(&listWidget); QVERIFY(QTest::qWaitForWindowActive(&listWidget)); diff --git a/tests/auto/widgets/itemviews/qtableview/tst_qtableview.cpp b/tests/auto/widgets/itemviews/qtableview/tst_qtableview.cpp index 76ac6bcf19..f7613a59f3 100644 --- a/tests/auto/widgets/itemviews/qtableview/tst_qtableview.cpp +++ b/tests/auto/widgets/itemviews/qtableview/tst_qtableview.cpp @@ -1643,7 +1643,7 @@ void tst_QTableView::selection() view.setColumnWidth(c, columnWidth); view.setSelection(QRect(x, y, width, height), - QItemSelectionModel::SelectionFlags(command)); + QItemSelectionModel::SelectionFlags(command)); QCOMPARE(view.selectedIndexes().count(), selectedCount); } @@ -2950,7 +2950,7 @@ void tst_QTableView::span() if (hiddenRow > -1) { QModelIndex hidden = model.index(hiddenRow, columnCount - 1); - QVERIFY(view.isIndexHidden(hidden)); + QVERIFY(view.isIndexHidden(hidden)); } if (hiddenColumn > -1) { @@ -3597,7 +3597,7 @@ void tst_QTableView::task173773_updateVerticalHeader() void tst_QTableView::task227953_setRootIndex() { - QTableView tableView; + QTableView tableView; //model = tree with two items with tables as children QStandardItemModel model; @@ -3619,16 +3619,16 @@ void tst_QTableView::task227953_setRootIndex() //show the first 10 rows of the first table QModelIndex root = model.indexFromItem(&item1); - tableView.setRootIndex(root); - for (int i = 10; i != 40; ++i) { - tableView.setRowHidden(i, true); - } + tableView.setRootIndex(root); + for (int i = 10; i != 40; ++i) { + tableView.setRowHidden(i, true); + } QCOMPARE(tableView.verticalHeader()->count(), 40); QCOMPARE(tableView.verticalHeader()->hiddenSectionCount(), 30); - //show the first 10 rows of the second table - tableView.setRootIndex(model.indexFromItem(&item2)); + //show the first 10 rows of the second table + tableView.setRootIndex(model.indexFromItem(&item2)); QCOMPARE(tableView.verticalHeader()->count(), 10); QCOMPARE(tableView.verticalHeader()->hiddenSectionCount(), 0); @@ -3670,8 +3670,8 @@ void tst_QTableView::task248688_autoScrollNavigation() QTableView view; view.setModel(&model); - view.hideColumn(8); - view.hideRow(8); + view.hideColumn(8); + view.hideRow(8); view.show(); for (int r = 0; r < model.rowCount(); ++r) { if (view.isRowHidden(r)) diff --git a/tests/auto/widgets/itemviews/qtreewidget/tst_qtreewidget.cpp b/tests/auto/widgets/itemviews/qtreewidget/tst_qtreewidget.cpp index d2625c400a..dfa7592813 100644 --- a/tests/auto/widgets/itemviews/qtreewidget/tst_qtreewidget.cpp +++ b/tests/auto/widgets/itemviews/qtreewidget/tst_qtreewidget.cpp @@ -1467,14 +1467,14 @@ void tst_QTreeWidget::keyboardNavigation() QVector keymoves; keymoves << Qt::Key_Down << Qt::Key_Right << Qt::Key_Left - << Qt::Key_Down << Qt::Key_Down << Qt::Key_Down << Qt::Key_Down - << Qt::Key_Right - << Qt::Key_Up << Qt::Key_Left << Qt::Key_Left - << Qt::Key_Up << Qt::Key_Down << Qt::Key_Up << Qt::Key_Up - << Qt::Key_Up << Qt::Key_Up << Qt::Key_Up << Qt::Key_Up + << Qt::Key_Down << Qt::Key_Down << Qt::Key_Down << Qt::Key_Down + << Qt::Key_Right + << Qt::Key_Up << Qt::Key_Left << Qt::Key_Left + << Qt::Key_Up << Qt::Key_Down << Qt::Key_Up << Qt::Key_Up + << Qt::Key_Up << Qt::Key_Up << Qt::Key_Up << Qt::Key_Up << Qt::Key_Down << Qt::Key_Right << Qt::Key_Down << Qt::Key_Down << Qt::Key_Down << Qt::Key_Right << Qt::Key_Down << Qt::Key_Down - << Qt::Key_Left << Qt::Key_Left << Qt::Key_Up << Qt::Key_Down + << Qt::Key_Left << Qt::Key_Left << Qt::Key_Up << Qt::Key_Down << Qt::Key_Up << Qt::Key_Up << Qt::Key_Up << Qt::Key_Left << Qt::Key_Down << Qt::Key_Right << Qt::Key_Right << Qt::Key_Right << Qt::Key_Left << Qt::Key_Left << Qt::Key_Right << Qt::Key_Left; @@ -1499,16 +1499,16 @@ void tst_QTreeWidget::keyboardNavigation() switch (key) { case Qt::Key_Up: - if (row > 0) { + if (row > 0) { if (item->parent()) item = item->parent()->child(row - 1); else item = testWidget->topLevelItem(row - 1); - row -= 1; - } else if (item->parent()) { - item = item->parent(); - row = item->parent() ? item->parent()->indexOfChild(item) : testWidget->indexOfTopLevelItem(item); - } + row -= 1; + } else if (item->parent()) { + item = item->parent(); + row = item->parent() ? item->parent()->indexOfChild(item) : testWidget->indexOfTopLevelItem(item); + } break; case Qt::Key_Down: if (testWidget->isItemExpanded(item)) { @@ -1537,7 +1537,7 @@ void tst_QTreeWidget::keyboardNavigation() case Qt::Key_Right: if (checkScroll) QCOMPARE(scrollBar->value(), valueBeforeClick + scrollBar->singleStep()); - // windows style right will walk to the first child + // windows style right will walk to the first child if (testWidget->currentItem() != item) { QCOMPARE(testWidget->currentItem()->parent(), item); row = item->indexOfChild(testWidget->currentItem()); diff --git a/tests/auto/widgets/kernel/qapplication/tst_qapplication.cpp b/tests/auto/widgets/kernel/qapplication/tst_qapplication.cpp index e13dfe836f..9d7d3d1f34 100644 --- a/tests/auto/widgets/kernel/qapplication/tst_qapplication.cpp +++ b/tests/auto/widgets/kernel/qapplication/tst_qapplication.cpp @@ -288,7 +288,7 @@ public: TestApplication( int &argc, char **argv ) : QApplication( argc, argv) { - startTimer( 150 ); + startTimer( 150 ); } void timerEvent( QTimerEvent * ) @@ -338,24 +338,24 @@ void tst_QApplication::multiple() int i = 0; int argc = 0; - while ( i++ < 5 ) { - TestApplication app( argc, 0 ); - - if ( features.contains( "QFont" ) ) { - // create font and force loading - QFont font( "Arial", 12 ); - QFontInfo finfo( font ); - finfo.exactMatch(); - } - if ( features.contains( "QPixmap" ) ) { - QPixmap pix( 100, 100 ); - pix.fill( Qt::black ); - } - if ( features.contains( "QWidget" ) ) { - QWidget widget; - } - - QVERIFY(!app.exec()); + while (i++ < 5) { + TestApplication app(argc, 0); + + if (features.contains("QFont")) { + // create font and force loading + QFont font("Arial", 12); + QFontInfo finfo(font); + finfo.exactMatch(); + } + if (features.contains("QPixmap")) { + QPixmap pix(100, 100); + pix.fill(Qt::black); + } + if (features.contains("QWidget")) { + QWidget widget; + } + + QVERIFY(!app.exec()); } } @@ -384,29 +384,29 @@ void tst_QApplication::setFont_data() QFontDatabase fdb; QStringList families = fdb.families(); for (QStringList::const_iterator itr = families.begin(); - itr != families.end(); - ++itr) { - if (cnt < 3) { - QString family = *itr; - QStringList styles = fdb.styles(family); - if (styles.size() > 0) { - QString style = styles.first(); - QList sizes = fdb.pointSizes(family, style); - if (!sizes.size()) - sizes = fdb.standardSizes(); - if (sizes.size() > 0) { - QTest::newRow(QString("data%1a").arg(cnt).toLatin1().constData()) - << family - << sizes.first() + itr != families.end(); + ++itr) { + if (cnt < 3) { + QString family = *itr; + QStringList styles = fdb.styles(family); + if (styles.size() > 0) { + QString style = styles.first(); + QList sizes = fdb.pointSizes(family, style); + if (!sizes.size()) + sizes = fdb.standardSizes(); + if (sizes.size() > 0) { + QTest::newRow(QString("data%1a").arg(cnt).toLatin1().constData()) + << family + << sizes.first() << false; - QTest::newRow(QString("data%1b").arg(cnt).toLatin1().constData()) - << family - << sizes.first() + QTest::newRow(QString("data%1b").arg(cnt).toLatin1().constData()) + << family + << sizes.first() << true; } - } - } - ++cnt; + } + } + ++cnt; } QTest::newRow("nonexistingfont after") << "nosuchfont_probably_quiteunlikely" @@ -452,7 +452,7 @@ void tst_QApplication::args_data() QTest::newRow( "No arguments" ) << 0 << QString() << 0 << QString(); QTest::newRow( "App name, style" ) << 3 << "/usr/bin/appname -style windows" << 1 << "/usr/bin/appname"; QTest::newRow( "App name, style, arbitrary, reverse" ) << 5 << "/usr/bin/appname -style windows -arbitrary -reverse" - << 2 << "/usr/bin/appname -arbitrary"; + << 2 << "/usr/bin/appname -arbitrary"; } void tst_QApplication::task109149() @@ -491,14 +491,14 @@ static QString cstrings2QString( char **args ) { QString string; if ( !args ) - return string; + return string; int i = 0; while ( args[i] ) { - string += args[i]; - if ( args[i+1] ) - string += " "; - ++i; + string += args[i]; + if ( args[i+1] ) + string += " "; + ++i; } return string; } diff --git a/tests/auto/widgets/kernel/qformlayout/tst_qformlayout.cpp b/tests/auto/widgets/kernel/qformlayout/tst_qformlayout.cpp index d04b812878..9df7e1662d 100644 --- a/tests/auto/widgets/kernel/qformlayout/tst_qformlayout.cpp +++ b/tests/auto/widgets/kernel/qformlayout/tst_qformlayout.cpp @@ -263,7 +263,7 @@ void tst_QFormLayout::wrapping() { QWidget *w = new QWidget; QFormLayout *fl = new QFormLayout(w); - fl->setRowWrapPolicy(QFormLayout::WrapLongRows); + fl->setRowWrapPolicy(QFormLayout::WrapLongRows); QLineEdit *le = new QLineEdit; QLabel *lbl = new QLabel("A long label"); diff --git a/tests/auto/widgets/kernel/qgridlayout/tst_qgridlayout.cpp b/tests/auto/widgets/kernel/qgridlayout/tst_qgridlayout.cpp index e067b071e7..1003a9fb1f 100644 --- a/tests/auto/widgets/kernel/qgridlayout/tst_qgridlayout.cpp +++ b/tests/auto/widgets/kernel/qgridlayout/tst_qgridlayout.cpp @@ -974,8 +974,8 @@ QRect CustomLayoutStyle::subElementRect(SubElement sr, const QStyleOption *opt, case SE_GroupBoxLayoutItem: rect = opt->rect.adjusted(0, +10, 0, 0); break; - default: - break; + default: + break; } } if (rect.isNull()) diff --git a/tests/auto/widgets/kernel/qshortcut/tst_qshortcut.cpp b/tests/auto/widgets/kernel/qshortcut/tst_qshortcut.cpp index 962fd3a8ab..306b049467 100644 --- a/tests/auto/widgets/kernel/qshortcut/tst_qshortcut.cpp +++ b/tests/auto/widgets/kernel/qshortcut/tst_qshortcut.cpp @@ -160,7 +160,7 @@ class TestEdit : public QTextEdit Q_OBJECT public: TestEdit(QWidget *parent, const char *name) - : QTextEdit(parent) + : QTextEdit(parent) { setObjectName(name); } @@ -231,13 +231,13 @@ Qt::KeyboardModifiers tst_QShortcut::toButtons( int key ) { Qt::KeyboardModifiers result = Qt::NoModifier; if ( key & Qt::SHIFT ) - result |= Qt::ShiftModifier; + result |= Qt::ShiftModifier; if ( key & Qt::CTRL ) - result |= Qt::ControlModifier; - if ( key & Qt::META ) - result |= Qt::MetaModifier; - if ( key & Qt::ALT ) - result |= Qt::AltModifier; + result |= Qt::ControlModifier; + if ( key & Qt::META ) + result |= Qt::MetaModifier; + if ( key & Qt::ALT ) + result |= Qt::AltModifier; return result; } @@ -291,15 +291,15 @@ void tst_QShortcut::number_data() Shift + Qt::Key_Plus on Qt::Key_Pluss Qt::Key_Plus on Qt::Key_Pluss */ - QTest::newRow("N001 - slot1") << SetupAccel << TriggerSlot1 << QString("") << int(Qt::Key_M) << 0 << 0 << 0 << 0 << 0 << 0 << 0 << NoResult; + QTest::newRow("N001 - slot1") << SetupAccel << TriggerSlot1 << QString("") << int(Qt::Key_M) << 0 << 0 << 0 << 0 << 0 << 0 << 0 << NoResult; //commented out because the behaviour changed, those tests should be updated - //QTest::newRow("N001:Shift + M - [M]") << TestAccel << NoWidget << QString("") << int(Qt::SHIFT + Qt::Key_M) << int('M') << 0 << 0 << 0 << 0 << 0 << 0 << Slot1Triggered; - QTest::newRow("N001:M - [M]") << TestAccel << NoWidget << QString("") << int(Qt::Key_M) << int('m') << 0 << 0 << 0 << 0 << 0 << 0 << Slot1Triggered; - QTest::newRow("N001 - slot2") << SetupAccel << TriggerSlot2 << QString("") << int(Qt::Key_Plus) << int('+') << 0 << 0 << 0 << 0 << 0 << 0 << NoResult; + //QTest::newRow("N001:Shift + M - [M]") << TestAccel << NoWidget << QString("") << int(Qt::SHIFT + Qt::Key_M) << int('M') << 0 << 0 << 0 << 0 << 0 << 0 << Slot1Triggered; + QTest::newRow("N001:M - [M]") << TestAccel << NoWidget << QString("") << int(Qt::Key_M) << int('m') << 0 << 0 << 0 << 0 << 0 << 0 << Slot1Triggered; + QTest::newRow("N001 - slot2") << SetupAccel << TriggerSlot2 << QString("") << int(Qt::Key_Plus) << int('+') << 0 << 0 << 0 << 0 << 0 << 0 << NoResult; //commented out because the behaviour changed, those tests should be updated - //QTest::newRow("N001:Shift++ [+]") << TestAccel << NoWidget << QString("") << int(Qt::SHIFT + Qt::Key_Plus) << int('+') << 0 << 0 << 0 << 0 << 0 << 0 << Slot2Triggered; - QTest::newRow("N001:+ [+]") << TestAccel << NoWidget << QString("") << int(Qt::Key_Plus) << int('+') << 0 << 0 << 0 << 0 << 0 << 0 << Slot2Triggered; - QTest::newRow("N001 - clear") << ClearAll << NoWidget << QString("") << 0 << 0 << 0 << 0 << 0 << 0 << 0 << 0 << NoResult; // Clear all + //QTest::newRow("N001:Shift++ [+]") << TestAccel << NoWidget << QString("") << int(Qt::SHIFT + Qt::Key_Plus) << int('+') << 0 << 0 << 0 << 0 << 0 << 0 << Slot2Triggered; + QTest::newRow("N001:+ [+]") << TestAccel << NoWidget << QString("") << int(Qt::Key_Plus) << int('+') << 0 << 0 << 0 << 0 << 0 << 0 << Slot2Triggered; + QTest::newRow("N001 - clear") << ClearAll << NoWidget << QString("") << 0 << 0 << 0 << 0 << 0 << 0 << 0 << 0 << NoResult; // Clear all /* Testing Single Sequences Shift + Qt::Key_M on Shift + Qt::Key_M @@ -307,32 +307,32 @@ void tst_QShortcut::number_data() Shift + Qt::Key_Plus on Shift + Qt::Key_Pluss Qt::Key_Plus on Shift + Qt::Key_Pluss */ - QTest::newRow("N002 - slot1") << SetupAccel << TriggerSlot1 << QString("") << int(Qt::SHIFT + Qt::Key_M) << 0 << 0 << 0 << 0 << 0 << 0 << 0 << NoResult; - QTest::newRow("N002:Shift+M - [Shift+M]") << TestAccel << NoWidget << QString("") << int(Qt::SHIFT + Qt::Key_M) << int('M') << 0 << 0 << 0 << 0 << 0 << 0 << Slot1Triggered; - QTest::newRow("N002:M - [Shift+M]") << TestAccel << NoWidget << QString("") << int(Qt::Key_M) << int('m') << 0 << 0 << 0 << 0 << 0 << 0 << NoResult; - QTest::newRow("N002 - slot2") << SetupAccel << TriggerSlot2 << QString("") << int(Qt::SHIFT + Qt::Key_Plus) << 0 << 0 << 0 << 0 << 0 << 0 << 0 << NoResult; - QTest::newRow("N002:Shift++ [Shift++]") << TestAccel << NoWidget << QString("") << int(Qt::SHIFT + Qt::Key_Plus) << int('+') << 0 << 0 << 0 << 0 << 0 << 0 << Slot2Triggered; - QTest::newRow("N002:+ [Shift++]") << TestAccel << NoWidget << QString("") << int(Qt::Key_Plus) << int('+') << 0 << 0 << 0 << 0 << 0 << 0 << NoResult; - QTest::newRow("N002 - clear") << ClearAll << NoWidget << QString("") << 0 << 0 << 0 << 0 << 0 << 0 << 0 << 0 << NoResult; // Clear all + QTest::newRow("N002 - slot1") << SetupAccel << TriggerSlot1 << QString("") << int(Qt::SHIFT + Qt::Key_M) << 0 << 0 << 0 << 0 << 0 << 0 << 0 << NoResult; + QTest::newRow("N002:Shift+M - [Shift+M]") << TestAccel << NoWidget << QString("") << int(Qt::SHIFT + Qt::Key_M) << int('M') << 0 << 0 << 0 << 0 << 0 << 0 << Slot1Triggered; + QTest::newRow("N002:M - [Shift+M]") << TestAccel << NoWidget << QString("") << int(Qt::Key_M) << int('m') << 0 << 0 << 0 << 0 << 0 << 0 << NoResult; + QTest::newRow("N002 - slot2") << SetupAccel << TriggerSlot2 << QString("") << int(Qt::SHIFT + Qt::Key_Plus) << 0 << 0 << 0 << 0 << 0 << 0 << 0 << NoResult; + QTest::newRow("N002:Shift++ [Shift++]") << TestAccel << NoWidget << QString("") << int(Qt::SHIFT + Qt::Key_Plus) << int('+') << 0 << 0 << 0 << 0 << 0 << 0 << Slot2Triggered; + QTest::newRow("N002:+ [Shift++]") << TestAccel << NoWidget << QString("") << int(Qt::Key_Plus) << int('+') << 0 << 0 << 0 << 0 << 0 << 0 << NoResult; + QTest::newRow("N002 - clear") << ClearAll << NoWidget << QString("") << 0 << 0 << 0 << 0 << 0 << 0 << 0 << 0 << NoResult; // Clear all /* Testing Single Sequences Shift + Qt::Key_F1 on Qt::Key_F1 Qt::Key_F1 on Qt::Key_F1 */ - QTest::newRow("N003 - slot1") << SetupAccel << TriggerSlot1 << QString("") << int(Qt::Key_F1) << 0 << 0 << 0 << 0 << 0 << 0 << 0 << NoResult; + QTest::newRow("N003 - slot1") << SetupAccel << TriggerSlot1 << QString("") << int(Qt::Key_F1) << 0 << 0 << 0 << 0 << 0 << 0 << 0 << NoResult; //commented out because the behaviour changed, those tests should be updated - //QTest::newRow("N003:Shift+F1 - [F1]") << TestAccel << NoWidget << QString("") << int(Qt::SHIFT + Qt::Key_F1) << 0 << 0 << 0 << 0 << 0 << 0 << 0 << Slot1Triggered; - QTest::newRow("N003:F1 - [F1]") << TestAccel << NoWidget << QString("") << int(Qt::Key_F1) << 0 << 0 << 0 << 0 << 0 << 0 << 0 << Slot1Triggered; - QTest::newRow("N003 - clear") << ClearAll << NoWidget << QString("") << 0 << 0 << 0 << 0 << 0 << 0 << 0 << 0 << NoResult; // Clear all + //QTest::newRow("N003:Shift+F1 - [F1]") << TestAccel << NoWidget << QString("") << int(Qt::SHIFT + Qt::Key_F1) << 0 << 0 << 0 << 0 << 0 << 0 << 0 << Slot1Triggered; + QTest::newRow("N003:F1 - [F1]") << TestAccel << NoWidget << QString("") << int(Qt::Key_F1) << 0 << 0 << 0 << 0 << 0 << 0 << 0 << Slot1Triggered; + QTest::newRow("N003 - clear") << ClearAll << NoWidget << QString("") << 0 << 0 << 0 << 0 << 0 << 0 << 0 << 0 << NoResult; // Clear all /* Testing Single Sequences Shift + Qt::Key_F1 on Shift + Qt::Key_F1 Qt::Key_F1 on Shift + Qt::Key_F1 */ - QTest::newRow("N004 - slot1") << SetupAccel << TriggerSlot1 << QString("") << int(Qt::SHIFT + Qt::Key_F1) << 0 << 0 << 0 << 0 << 0 << 0 << 0 << NoResult; - QTest::newRow("N004:Shift+F1 - [Shift+F1]")<< TestAccel << NoWidget << QString("") << int(Qt::SHIFT + Qt::Key_F1) << 0 << 0 << 0 << 0 << 0 << 0 << 0 << Slot1Triggered; - QTest::newRow("N004:F1 - [Shift+F1]") << TestAccel << NoWidget << QString("") << int(Qt::Key_F1) << 0 << 0 << 0 << 0 << 0 << 0 << 0 << NoResult; - QTest::newRow("N004 - clear") << ClearAll << NoWidget << QString("") << 0 << 0 << 0 << 0 << 0 << 0 << 0 << 0 << NoResult; // Clear all + QTest::newRow("N004 - slot1") << SetupAccel << TriggerSlot1 << QString("") << int(Qt::SHIFT + Qt::Key_F1) << 0 << 0 << 0 << 0 << 0 << 0 << 0 << NoResult; + QTest::newRow("N004:Shift+F1 - [Shift+F1]") << TestAccel << NoWidget << QString("") << int(Qt::SHIFT + Qt::Key_F1) << 0 << 0 << 0 << 0 << 0 << 0 << 0 << Slot1Triggered; + QTest::newRow("N004:F1 - [Shift+F1]") << TestAccel << NoWidget << QString("") << int(Qt::Key_F1) << 0 << 0 << 0 << 0 << 0 << 0 << 0 << NoResult; + QTest::newRow("N004 - clear") << ClearAll << NoWidget << QString("") << 0 << 0 << 0 << 0 << 0 << 0 << 0 << 0 << NoResult; // Clear all /* Testing Single Sequences Qt::Key_Tab on Qt::Key_Tab @@ -340,14 +340,14 @@ void tst_QShortcut::number_data() Qt::Key_Backtab on Qt::Key_Tab Shift + Qt::Key_Backtab on Qt::Key_Tab */ - QTest::newRow("N005a - slot1") << SetupAccel << TriggerSlot1 << QString("")<< int(Qt::Key_Tab) << 0 << 0 << 0 << 0 << 0 << 0 << 0 << NoResult; - QTest::newRow("N005a:Tab - [Tab]") << TestAccel << NoWidget << QString("") << int(Qt::Key_Tab) << 0 << 0 << 0 << 0 << 0 << 0 << 0 << Slot1Triggered; + QTest::newRow("N005a - slot1") << SetupAccel << TriggerSlot1 << QString("") << int(Qt::Key_Tab) << 0 << 0 << 0 << 0 << 0 << 0 << 0 << NoResult; + QTest::newRow("N005a:Tab - [Tab]") << TestAccel << NoWidget << QString("") << int(Qt::Key_Tab) << 0 << 0 << 0 << 0 << 0 << 0 << 0 << Slot1Triggered; //commented out because the behaviour changed, those tests should be updated - //QTest::newRow("N005a:Shift+Tab - [Tab]") << TestAccel << NoWidget << QString("") << int(Qt::SHIFT + Qt::Key_Tab) << 0 << 0 << 0 << 0 << 0 << 0 << 0 << Slot1Triggered; + //QTest::newRow("N005a:Shift+Tab - [Tab]") << TestAccel << NoWidget << QString("") << int(Qt::SHIFT + Qt::Key_Tab) << 0 << 0 << 0 << 0 << 0 << 0 << 0 << Slot1Triggered; // (Shift+)BackTab != Tab, but Shift+BackTab == Shift+Tab - QTest::newRow("N005a:Backtab - [Tab]") << TestAccel << NoWidget << QString("") << int(Qt::Key_Backtab) << 0 << 0 << 0 << 0 << 0 << 0 << 0 << NoResult; - QTest::newRow("N005a:Shift+Backtab - [Tab]") << TestAccel << NoWidget << QString("") << int(Qt::SHIFT + Qt::Key_Backtab) << 0 << 0 << 0 << 0 << 0 << 0 << 0 << NoResult; - QTest::newRow("N005a - clear") << ClearAll << NoWidget << QString("") << 0 << 0 << 0 << 0 << 0 << 0 << 0 << 0 << NoResult; // Clear all + QTest::newRow("N005a:Backtab - [Tab]") << TestAccel << NoWidget << QString("") << int(Qt::Key_Backtab) << 0 << 0 << 0 << 0 << 0 << 0 << 0 << NoResult; + QTest::newRow("N005a:Shift+Backtab - [Tab]") << TestAccel << NoWidget << QString("") << int(Qt::SHIFT + Qt::Key_Backtab) << 0 << 0 << 0 << 0 << 0 << 0 << 0 << NoResult; + QTest::newRow("N005a - clear") << ClearAll << NoWidget << QString("") << 0 << 0 << 0 << 0 << 0 << 0 << 0 << 0 << NoResult; // Clear all /* Testing Single Sequences Qt::Key_Tab on Shift + Qt::Key_Tab @@ -355,12 +355,12 @@ void tst_QShortcut::number_data() Qt::Key_Backtab on Shift + Qt::Key_Tab Shift + Qt::Key_Backtab on Shift + Qt::Key_Tab */ - QTest::newRow("N005b - slot1") << SetupAccel << TriggerSlot1 << QString("")<< int(Qt::SHIFT + Qt::Key_Tab) << 0 << 0 << 0 << 0 << 0 << 0 << 0 << NoResult; - QTest::newRow("N005b:Tab - [Shift+Tab]") << TestAccel << NoWidget << QString("") << int(Qt::Key_Tab) << 0 << 0 << 0 << 0 << 0 << 0 << 0 << NoResult; - QTest::newRow("N005b:Shift+Tab - [Shift+Tab]") << TestAccel << NoWidget << QString("") << int(Qt::SHIFT + Qt::Key_Tab) << 0 << 0 << 0 << 0 << 0 << 0 << 0 << Slot1Triggered; - QTest::newRow("N005b:BackTab - [Shift+Tab]") << TestAccel << NoWidget << QString("") << int(Qt::Key_Backtab) << 0 << 0 << 0 << 0 << 0 << 0 << 0 << NoResult; - QTest::newRow("N005b:Shift+BackTab - [Shift+Tab]")<< TestAccel << NoWidget << QString("") << int(Qt::SHIFT + Qt::Key_Backtab) << 0 << 0 << 0 << 0 << 0 << 0 << 0 << Slot1Triggered; - QTest::newRow("N005b - clear") << ClearAll << NoWidget << QString("") << 0 << 0 << 0 << 0 << 0 << 0 << 0 << 0 << NoResult; // Clear all + QTest::newRow("N005b - slot1") << SetupAccel << TriggerSlot1 << QString("") << int(Qt::SHIFT + Qt::Key_Tab) << 0 << 0 << 0 << 0 << 0 << 0 << 0 << NoResult; + QTest::newRow("N005b:Tab - [Shift+Tab]") << TestAccel << NoWidget << QString("") << int(Qt::Key_Tab) << 0 << 0 << 0 << 0 << 0 << 0 << 0 << NoResult; + QTest::newRow("N005b:Shift+Tab - [Shift+Tab]") << TestAccel << NoWidget << QString("") << int(Qt::SHIFT + Qt::Key_Tab) << 0 << 0 << 0 << 0 << 0 << 0 << 0 << Slot1Triggered; + QTest::newRow("N005b:BackTab - [Shift+Tab]") << TestAccel << NoWidget << QString("") << int(Qt::Key_Backtab) << 0 << 0 << 0 << 0 << 0 << 0 << 0 << NoResult; + QTest::newRow("N005b:Shift+BackTab - [Shift+Tab]") << TestAccel << NoWidget << QString("") << int(Qt::SHIFT + Qt::Key_Backtab) << 0 << 0 << 0 << 0 << 0 << 0 << 0 << Slot1Triggered; + QTest::newRow("N005b - clear") << ClearAll << NoWidget << QString("") << 0 << 0 << 0 << 0 << 0 << 0 << 0 << 0 << NoResult; // Clear all /* Testing Single Sequences Qt::Key_Tab on Qt::Key_Backtab @@ -368,15 +368,15 @@ void tst_QShortcut::number_data() Qt::Key_Backtab on Qt::Key_Backtab Shift + Qt::Key_Backtab on Qt::Key_Backtab */ - QTest::newRow("N006a - slot1") << SetupAccel << TriggerSlot1 << QString("")<< int(Qt::Key_Backtab) << 0 << 0 << 0 << 0 << 0 << 0 << 0 << NoResult; - QTest::newRow("N006a:Tab - [BackTab]") << TestAccel << NoWidget << QString("") << int(Qt::Key_Tab) << 0 << 0 << 0 << 0 << 0 << 0 << 0 << NoResult; + QTest::newRow("N006a - slot1") << SetupAccel << TriggerSlot1 << QString("") << int(Qt::Key_Backtab) << 0 << 0 << 0 << 0 << 0 << 0 << 0 << NoResult; + QTest::newRow("N006a:Tab - [BackTab]") << TestAccel << NoWidget << QString("") << int(Qt::Key_Tab) << 0 << 0 << 0 << 0 << 0 << 0 << 0 << NoResult; // This should work, since platform dependent code will transform the // Shift+Tab into a Shift+BackTab, which should trigger the shortcut - QTest::newRow("N006a:Shift+Tab - [BackTab]") << TestAccel << NoWidget << QString("") << int(Qt::SHIFT + Qt::Key_Tab) << 0 << 0 << 0 << 0 << 0 << 0 << 0 << Slot1Triggered; //XFAIL - QTest::newRow("N006a:BackTab - [BackTab]") << TestAccel << NoWidget << QString("") << int(Qt::Key_Backtab) << 0 << 0 << 0 << 0 << 0 << 0 << 0 << Slot1Triggered; + QTest::newRow("N006a:Shift+Tab - [BackTab]") << TestAccel << NoWidget << QString("") << int(Qt::SHIFT + Qt::Key_Tab) << 0 << 0 << 0 << 0 << 0 << 0 << 0 << Slot1Triggered; //XFAIL + QTest::newRow("N006a:BackTab - [BackTab]") << TestAccel << NoWidget << QString("") << int(Qt::Key_Backtab) << 0 << 0 << 0 << 0 << 0 << 0 << 0 << Slot1Triggered; //commented out because the behaviour changed, those tests should be updated - //QTest::newRow("N006a:Shift+BackTab - [BackTab]") << TestAccel << NoWidget << QString("") << int(Qt::SHIFT + Qt::Key_Backtab) << 0 << 0 << 0 << 0 << 0 << 0 << 0 << Slot1Triggered; - QTest::newRow("N006a - clear") << ClearAll << NoWidget<< QString("") << 0 << 0 << 0 << 0 << 0 << 0 << 0 << 0 << NoResult; // Clear all + //QTest::newRow("N006a:Shift+BackTab - [BackTab]") << TestAccel << NoWidget << QString("") << int(Qt::SHIFT + Qt::Key_Backtab) << 0 << 0 << 0 << 0 << 0 << 0 << 0 << Slot1Triggered; + QTest::newRow("N006a - clear") << ClearAll << NoWidget<< QString("") << 0 << 0 << 0 << 0 << 0 << 0 << 0 << 0 << NoResult; // Clear all /* Testing Single Sequences Qt::Key_Tab on Shift + Qt::Key_Backtab @@ -384,12 +384,12 @@ void tst_QShortcut::number_data() Qt::Key_Backtab on Shift + Qt::Key_Backtab Shift + Qt::Key_Backtab on Shift + Qt::Key_Backtab */ - QTest::newRow("N006b - slot1") << SetupAccel << TriggerSlot1 << QString("")<< int(Qt::SHIFT + Qt::Key_Backtab) << 0 << 0 << 0 << 0 << 0 << 0 << 0 << NoResult; - QTest::newRow("N006b:Tab - [Shift+BackTab]") << TestAccel << NoWidget << QString("") << int(Qt::Key_Tab) << 0 << 0 << 0 << 0 << 0 << 0 << 0 << NoResult; - QTest::newRow("N006b:Shift+Tab - [Shift+BackTab]")<< TestAccel << NoWidget << QString("") << int(Qt::SHIFT + Qt::Key_Tab) << 0 << 0 << 0 << 0 << 0 << 0 << 0 << Slot1Triggered; - QTest::newRow("N006b:BackTab - [Shift+BackTab]") << TestAccel << NoWidget << QString("") << int(Qt::Key_Backtab) << 0 << 0 << 0 << 0 << 0 << 0 << 0 << NoResult; - QTest::newRow("N006b:Shift+BackTab - [Shift+BackTab]")<< TestAccel << NoWidget << QString("") << int(Qt::SHIFT + Qt::Key_Backtab) << 0 << 0 << 0 << 0 << 0 << 0 << 0 << Slot1Triggered; //XFAIL - QTest::newRow("N006b - clear") << ClearAll << NoWidget << QString("") << 0 << 0 << 0 << 0 << 0 << 0 << 0 << 0 << NoResult; // Clear all + QTest::newRow("N006b - slot1") << SetupAccel << TriggerSlot1 << QString("") << int(Qt::SHIFT + Qt::Key_Backtab) << 0 << 0 << 0 << 0 << 0 << 0 << 0 << NoResult; + QTest::newRow("N006b:Tab - [Shift+BackTab]") << TestAccel << NoWidget << QString("") << int(Qt::Key_Tab) << 0 << 0 << 0 << 0 << 0 << 0 << 0 << NoResult; + QTest::newRow("N006b:Shift+Tab - [Shift+BackTab]") << TestAccel << NoWidget << QString("") << int(Qt::SHIFT + Qt::Key_Tab) << 0 << 0 << 0 << 0 << 0 << 0 << 0 << Slot1Triggered; + QTest::newRow("N006b:BackTab - [Shift+BackTab]") << TestAccel << NoWidget << QString("") << int(Qt::Key_Backtab) << 0 << 0 << 0 << 0 << 0 << 0 << 0 << NoResult; + QTest::newRow("N006b:Shift+BackTab - [Shift+BackTab]") << TestAccel << NoWidget << QString("") << int(Qt::SHIFT + Qt::Key_Backtab) << 0 << 0 << 0 << 0 << 0 << 0 << 0 << Slot1Triggered; //XFAIL + QTest::newRow("N006b - clear") << ClearAll << NoWidget << QString("") << 0 << 0 << 0 << 0 << 0 << 0 << 0 << 0 << NoResult; // Clear all //=========================================== // [Shift + key] and [key] on shortcuts with @@ -400,11 +400,11 @@ void tst_QShortcut::number_data() Qt::Key_F1 Shift + Qt::Key_F1 */ - QTest::newRow("N007 - slot1") << SetupAccel << TriggerSlot1 << QString("") << int(Qt::Key_F1) << 0 << 0 << 0 << 0 << 0 << 0 << 0 << NoResult; - QTest::newRow("N007 - slot2") << SetupAccel << TriggerSlot2 << QString("") << int(Qt::SHIFT + Qt::Key_F1) << 0 << 0 << 0 << 0 << 0 << 0 << 0 << NoResult; - QTest::newRow("N007:F1") << TestAccel << NoWidget << QString("") << int(Qt::Key_F1) << 0 << 0 << 0 << 0 << 0 << 0 << 0 << Slot1Triggered; - QTest::newRow("N007:Shift + F1") << TestAccel << NoWidget << QString("") << int(Qt::SHIFT + Qt::Key_F1) << 0 << 0 << 0 << 0 << 0 << 0 << 0 << Slot2Triggered; - QTest::newRow("N007 - clear") << ClearAll << NoWidget << QString("") << 0 << 0 << 0 << 0 << 0 << 0 << 0 << 0 << NoResult; // Clear all + QTest::newRow("N007 - slot1") << SetupAccel << TriggerSlot1 << QString("") << int(Qt::Key_F1) << 0 << 0 << 0 << 0 << 0 << 0 << 0 << NoResult; + QTest::newRow("N007 - slot2") << SetupAccel << TriggerSlot2 << QString("") << int(Qt::SHIFT + Qt::Key_F1) << 0 << 0 << 0 << 0 << 0 << 0 << 0 << NoResult; + QTest::newRow("N007:F1") << TestAccel << NoWidget << QString("") << int(Qt::Key_F1) << 0 << 0 << 0 << 0 << 0 << 0 << 0 << Slot1Triggered; + QTest::newRow("N007:Shift + F1") << TestAccel << NoWidget << QString("") << int(Qt::SHIFT + Qt::Key_F1) << 0 << 0 << 0 << 0 << 0 << 0 << 0 << Slot2Triggered; + QTest::newRow("N007 - clear") << ClearAll << NoWidget << QString("") << 0 << 0 << 0 << 0 << 0 << 0 << 0 << 0 << NoResult; // Clear all /* Testing Single Sequences Qt::Key_M @@ -412,51 +412,51 @@ void tst_QShortcut::number_data() Ctrl + Qt::Key_M Alt + Qt::Key_M */ - QTest::newRow("N01 - slot1") << SetupAccel << TriggerSlot1 << QString("") << int(Qt::Key_M) << 0 << 0 << 0 << 0 << 0 << 0 << 0 << NoResult; - QTest::newRow("N02 - slot2") << SetupAccel << TriggerSlot2 << QString("") << int(Qt::SHIFT + Qt::Key_M) << int('M') << 0 << 0 << 0 << 0 << 0 << 0 << NoResult; - QTest::newRow("N03 - slot1") << SetupAccel << TriggerSlot1 << QString("") << int(Qt::CTRL + Qt::Key_M) << 0 << 0 << 0 << 0 << 0 << 0 << 0 << NoResult; - QTest::newRow("N04 - slot2") << SetupAccel << TriggerSlot2 << QString("") << int(Qt::ALT + Qt::Key_M) << 0 << 0 << 0 << 0 << 0 << 0 << 0 << NoResult; - QTest::newRow("N:Qt::Key_M") << TestAccel << NoWidget << QString("") << int(Qt::Key_M) << 0 << 0 << 0 << 0 << 0 << 0 << 0 << Slot1Triggered; - QTest::newRow("N:Shift+Qt::Key_M") << TestAccel << NoWidget << QString("") << int(Qt::SHIFT + Qt::Key_M) << int('M') << 0 << 0 << 0 << 0 << 0 << 0 << Slot2Triggered; - QTest::newRow("N:Ctrl+Qt::Key_M") << TestAccel << NoWidget << QString("") << int(Qt::CTRL + Qt::Key_M) << 0 << 0 << 0 << 0 << 0 << 0 << 0 << Slot1Triggered; - QTest::newRow("N:Alt+Qt::Key_M") << TestAccel << NoWidget << QString("") << int(Qt::ALT + Qt::Key_M) << 0 << 0 << 0 << 0 << 0 << 0 << 0 << Slot2Triggered; + QTest::newRow("N01 - slot1") << SetupAccel << TriggerSlot1 << QString("") << int(Qt::Key_M) << 0 << 0 << 0 << 0 << 0 << 0 << 0 << NoResult; + QTest::newRow("N02 - slot2") << SetupAccel << TriggerSlot2 << QString("") << int(Qt::SHIFT + Qt::Key_M) << int('M') << 0 << 0 << 0 << 0 << 0 << 0 << NoResult; + QTest::newRow("N03 - slot1") << SetupAccel << TriggerSlot1 << QString("") << int(Qt::CTRL + Qt::Key_M) << 0 << 0 << 0 << 0 << 0 << 0 << 0 << NoResult; + QTest::newRow("N04 - slot2") << SetupAccel << TriggerSlot2 << QString("") << int(Qt::ALT + Qt::Key_M) << 0 << 0 << 0 << 0 << 0 << 0 << 0 << NoResult; + QTest::newRow("N:Qt::Key_M") << TestAccel << NoWidget << QString("") << int(Qt::Key_M) << 0 << 0 << 0 << 0 << 0 << 0 << 0 << Slot1Triggered; + QTest::newRow("N:Shift+Qt::Key_M") << TestAccel << NoWidget << QString("") << int(Qt::SHIFT + Qt::Key_M) << int('M') << 0 << 0 << 0 << 0 << 0 << 0 << Slot2Triggered; + QTest::newRow("N:Ctrl+Qt::Key_M") << TestAccel << NoWidget << QString("") << int(Qt::CTRL + Qt::Key_M) << 0 << 0 << 0 << 0 << 0 << 0 << 0 << Slot1Triggered; + QTest::newRow("N:Alt+Qt::Key_M") << TestAccel << NoWidget << QString("") << int(Qt::ALT + Qt::Key_M) << 0 << 0 << 0 << 0 << 0 << 0 << 0 << Slot2Triggered; /* Testing Single Sequence Ambiguity Qt::Key_M on shortcut2 */ - QTest::newRow("N05 - slot2") << SetupAccel << TriggerSlot2 << QString("") << int(Qt::Key_M) << int('m') << 0 << 0 << 0 << 0 << 0 << 0 << NoResult; - QTest::newRow("N:Qt::Key_M on slot") << TestAccel << NoWidget << QString("") << int(Qt::Key_M) << int('m') << 0 << 0 << 0 << 0 << 0 << 0 << Ambiguous; - QTest::newRow("N05 - clear") << ClearAll << NoWidget << QString("") << 0 << 0 << 0 << 0 << 0 << 0 << 0 << 0 << NoResult; // Clear all + QTest::newRow("N05 - slot2") << SetupAccel << TriggerSlot2 << QString("") << int(Qt::Key_M) << int('m') << 0 << 0 << 0 << 0 << 0 << 0 << NoResult; + QTest::newRow("N:Qt::Key_M on slot") << TestAccel << NoWidget << QString("") << int(Qt::Key_M) << int('m') << 0 << 0 << 0 << 0 << 0 << 0 << Ambiguous; + QTest::newRow("N05 - clear") << ClearAll << NoWidget << QString("") << 0 << 0 << 0 << 0 << 0 << 0 << 0 << 0 << NoResult; // Clear all /* Testing Single Specialkeys Qt::Key_aring Qt::Key_Aring Qt::UNICODE_ACCEL + Qt::Key_K */ - QTest::newRow("N06 - slot1") << SetupAccel << TriggerSlot1 << QString("") << int(Qt::Key_Aring) << 0 << 0 << 0 << 0 << 0 << 0 << 0 << NoResult; - QTest::newRow("N07 - slot2") << SetupAccel << TriggerSlot2 << QString("") << int(Qt::SHIFT+Qt::Key_Aring) << 0 << 0 << 0 << 0 << 0 << 0 << 0 << NoResult; - QTest::newRow("N08 - slot2") << SetupAccel << TriggerSlot1 << QString("") << int(Qt::UNICODE_ACCEL + Qt::Key_K) << 0 << 0 << 0 << 0 << 0 << 0 << 0 << NoResult; + QTest::newRow("N06 - slot1") << SetupAccel << TriggerSlot1 << QString("") << int(Qt::Key_Aring) << 0 << 0 << 0 << 0 << 0 << 0 << 0 << NoResult; + QTest::newRow("N07 - slot2") << SetupAccel << TriggerSlot2 << QString("") << int(Qt::SHIFT+Qt::Key_Aring) << 0 << 0 << 0 << 0 << 0 << 0 << 0 << NoResult; + QTest::newRow("N08 - slot2") << SetupAccel << TriggerSlot1 << QString("") << int(Qt::UNICODE_ACCEL + Qt::Key_K) << 0 << 0 << 0 << 0 << 0 << 0 << 0 << NoResult; - QTest::newRow("N:Qt::Key_aring") << TestAccel << NoWidget << QString("") << int(Qt::Key_Aring) << 0 << 0 << 0 << 0 << 0 << 0 << 0 << Slot1Triggered; - QTest::newRow("N:Qt::Key_Aring") << TestAccel << NoWidget << QString("") << int(Qt::SHIFT+Qt::Key_Aring) << 0 << 0 << 0 << 0 << 0 << 0 << 0 << Slot2Triggered; - QTest::newRow("N:Qt::Key_aring - Text Form") << TestAccel << NoWidget << QString("") << 0 << 0xC5 << 0 << 0 << 0 << 0 << 0 << 0 << Slot1Triggered; - QTest::newRow("N:Qt::Key_Aring - Text Form") << TestAccel << NoWidget << QString("") << int(Qt::SHIFT+0) << 0xC5 << 0 << 0 << 0 << 0 << 0 << 0 << Slot2Triggered; - QTest::newRow("N:Qt::UNICODE_ACCEL + Qt::Key_K") << TestAccel << NoWidget << QString("") << int(Qt::UNICODE_ACCEL + Qt::Key_K) << int('k') << 0 << 0 << 0 << 0 << 0 << 0 << Slot1Triggered; - QTest::newRow("N09 - clear") << ClearAll << NoWidget << QString("") << 0 << 0 << 0 << 0 << 0 << 0 << 0 << 0 << NoResult; // Clear all + QTest::newRow("N:Qt::Key_aring") << TestAccel << NoWidget << QString("") << int(Qt::Key_Aring) << 0 << 0 << 0 << 0 << 0 << 0 << 0 << Slot1Triggered; + QTest::newRow("N:Qt::Key_Aring") << TestAccel << NoWidget << QString("") << int(Qt::SHIFT+Qt::Key_Aring) << 0 << 0 << 0 << 0 << 0 << 0 << 0 << Slot2Triggered; + QTest::newRow("N:Qt::Key_aring - Text Form") << TestAccel << NoWidget << QString("") << 0 << 0xC5 << 0 << 0 << 0 << 0 << 0 << 0 << Slot1Triggered; + QTest::newRow("N:Qt::Key_Aring - Text Form") << TestAccel << NoWidget << QString("") << int(Qt::SHIFT+0) << 0xC5 << 0 << 0 << 0 << 0 << 0 << 0 << Slot2Triggered; + QTest::newRow("N:Qt::UNICODE_ACCEL + Qt::Key_K")<< TestAccel << NoWidget << QString("") << int(Qt::UNICODE_ACCEL + Qt::Key_K) << int('k') << 0 << 0 << 0 << 0 << 0 << 0 << Slot1Triggered; + QTest::newRow("N09 - clear") << ClearAll << NoWidget << QString("") << 0 << 0 << 0 << 0 << 0 << 0 << 0 << 0 << NoResult; // Clear all /* Testing Multiple Sequences Qt::Key_M Qt::Key_I, Qt::Key_M Shift+Qt::Key_I, Qt::Key_M */ - QTest::newRow("N10 - slot1") << SetupAccel << TriggerSlot1 << QString("") << int(Qt::Key_M) << 0 << 0 << 0 << 0 << 0 << 0 << 0 << NoResult; - QTest::newRow("N11 - slot2") << SetupAccel << TriggerSlot2 << QString("") << int(Qt::Key_I) << 0 << int(Qt::Key_M) << 0 << 0 << 0 << 0 << 0 << NoResult; - QTest::newRow("N12 - slot1") << SetupAccel << TriggerSlot1 << QString("") << int(Qt::SHIFT + Qt::Key_I) << 0 << int(Qt::Key_M) << 0 << 0 << 0 << 0 << 0 << NoResult; - - QTest::newRow("N:Qt::Key_M (2)") << TestAccel << NoWidget << QString("") << int(Qt::Key_M) << int('m') << 0 << 0 << 0 << 0 << 0 << 0 << Slot1Triggered; - QTest::newRow("N:Qt::Key_I, Qt::Key_M") << TestAccel << NoWidget << QString("") << int(Qt::Key_I) << int('i') << int(Qt::Key_M) << int('m') << 0 << 0 << 0 << 0 << Slot2Triggered; - QTest::newRow("N:Shift+Qt::Key_I, Qt::Key_M") << TestAccel << NoWidget << QString("") << int(Qt::SHIFT + Qt::Key_I) << int('I') << int(Qt::Key_M) << int('m') << 0 << 0 << 0 << 0 << Slot1Triggered; - QTest::newRow("N13 - clear") << ClearAll << NoWidget << QString("") << 0 << 0 << 0 << 0 << 0 << 0 << 0 << 0 << NoResult; // Clear all + QTest::newRow("N10 - slot1") << SetupAccel << TriggerSlot1 << QString("") << int(Qt::Key_M) << 0 << 0 << 0 << 0 << 0 << 0 << 0 << NoResult; + QTest::newRow("N11 - slot2") << SetupAccel << TriggerSlot2 << QString("") << int(Qt::Key_I) << 0 << int(Qt::Key_M) << 0 << 0 << 0 << 0 << 0 << NoResult; + QTest::newRow("N12 - slot1") << SetupAccel << TriggerSlot1 << QString("") << int(Qt::SHIFT + Qt::Key_I) << 0 << int(Qt::Key_M) << 0 << 0 << 0 << 0 << 0 << NoResult; + + QTest::newRow("N:Qt::Key_M (2)") << TestAccel << NoWidget << QString("") << int(Qt::Key_M) << int('m') << 0 << 0 << 0 << 0 << 0 << 0 << Slot1Triggered; + QTest::newRow("N:Qt::Key_I, Qt::Key_M") << TestAccel << NoWidget << QString("") << int(Qt::Key_I) << int('i') << int(Qt::Key_M) << int('m') << 0 << 0 << 0 << 0 << Slot2Triggered; + QTest::newRow("N:Shift+Qt::Key_I, Qt::Key_M") << TestAccel << NoWidget << QString("") << int(Qt::SHIFT + Qt::Key_I) << int('I') << int(Qt::Key_M) << int('m') << 0 << 0 << 0 << 0 << Slot1Triggered; + QTest::newRow("N13 - clear") << ClearAll << NoWidget << QString("") << 0 << 0 << 0 << 0 << 0 << 0 << 0 << 0 << NoResult; // Clear all } // ------------------------------------------------------------------ @@ -478,15 +478,15 @@ void tst_QShortcut::text_data() Shift + Qt::Key_Plus on Qt::Key_Pluss Qt::Key_Plus on Qt::Key_Pluss */ - QTest::newRow("T001 - slot1") << SetupAccel << TriggerSlot1 << QString("M") << 0 << 0 << 0 << 0 << 0 << 0 << 0 << 0 << NoResult; + QTest::newRow("T001 - slot1") << SetupAccel << TriggerSlot1 << QString("M") << 0 << 0 << 0 << 0 << 0 << 0 << 0 << 0 << NoResult; //commented out because the behaviour changed, those tests should be updated - //QTest::newRow("T001:Shift+M - [M]") << TestAccel << NoWidget << QString("") << int(Qt::SHIFT + Qt::Key_M) << int('M') << 0 << 0 << 0 << 0 << 0 << 0 << Slot1Triggered; - QTest::newRow("T001:M - [M]") << TestAccel << NoWidget << QString("") << int(Qt::Key_M) << int('m') << 0 << 0 << 0 << 0 << 0 << 0 << Slot1Triggered; - QTest::newRow("T001 - slot2") << SetupAccel << TriggerSlot2 << QString("+") << 0 << 0 << 0 << 0 << 0 << 0 << 0 << 0 << NoResult; + //QTest::newRow("T001:Shift+M - [M]") << TestAccel << NoWidget << QString("") << int(Qt::SHIFT + Qt::Key_M) << int('M') << 0 << 0 << 0 << 0 << 0 << 0 << Slot1Triggered; + QTest::newRow("T001:M - [M]") << TestAccel << NoWidget << QString("") << int(Qt::Key_M) << int('m') << 0 << 0 << 0 << 0 << 0 << 0 << Slot1Triggered; + QTest::newRow("T001 - slot2") << SetupAccel << TriggerSlot2 << QString("+") << 0 << 0 << 0 << 0 << 0 << 0 << 0 << 0 << NoResult; //commented out because the behaviour changed, those tests should be updated - //QTest::newRow("T001:Shift++ [+]") << TestAccel << NoWidget << QString("") << int(Qt::SHIFT + Qt::Key_Plus) << int('+') << 0 << 0 << 0 << 0 << 0 << 0 << Slot2Triggered; - QTest::newRow("T001:+ [+]") << TestAccel << NoWidget << QString("") << int(Qt::Key_Plus) << int('+') << 0 << 0 << 0 << 0 << 0 << 0 << Slot2Triggered; - QTest::newRow("T001 - clear") << ClearAll << NoWidget << QString("") << 0 << 0 << 0 << 0 << 0 << 0 << 0 << 0 << NoResult; // Clear all + //QTest::newRow("T001:Shift++ [+]") << TestAccel << NoWidget << QString("") << int(Qt::SHIFT + Qt::Key_Plus) << int('+') << 0 << 0 << 0 << 0 << 0 << 0 << Slot2Triggered; + QTest::newRow("T001:+ [+]") << TestAccel << NoWidget << QString("") << int(Qt::Key_Plus) << int('+') << 0 << 0 << 0 << 0 << 0 << 0 << Slot2Triggered; + QTest::newRow("T001 - clear") << ClearAll << NoWidget << QString("") << 0 << 0 << 0 << 0 << 0 << 0 << 0 << 0 << NoResult; // Clear all /* Testing Single Sequences Shift + Qt::Key_M on Shift + Qt::Key_M @@ -496,44 +496,44 @@ void tst_QShortcut::text_data() Shift + Ctrl + Qt::Key_Plus on Ctrl + Qt::Key_Pluss Ctrl + Qt::Key_Plus on Ctrl + Qt::Key_Pluss */ - QTest::newRow("T002 - slot1") << SetupAccel << TriggerSlot1 << QString("Shift+M") << 0 << 0 << 0 << 0 << 0 << 0 << 0 << 0 << NoResult; - QTest::newRow("T002:Shift+M - [Shift+M]") << TestAccel << NoWidget << QString("") << int(Qt::SHIFT + Qt::Key_M) << int('M') << 0 << 0 << 0 << 0 << 0 << 0 << Slot1Triggered; - QTest::newRow("T002:M - [Shift+M]") << TestAccel << NoWidget << QString("") << int(Qt::Key_M) << int('m') << 0 << 0 << 0 << 0 << 0 << 0 << NoResult; - QTest::newRow("T002 - slot2") << SetupAccel << TriggerSlot2 << QString("Shift++") << 0 << 0 << 0 << 0 << 0 << 0 << 0 << 0 << NoResult; - QTest::newRow("T002:Shift++ [Shift++]") << TestAccel << NoWidget << QString("") << int(Qt::SHIFT + Qt::Key_Plus) << int('+') << 0 << 0 << 0 << 0 << 0 << 0 << Slot2Triggered; - QTest::newRow("T002:+ [Shift++]") << TestAccel << NoWidget << QString("") << int(Qt::Key_Plus) << int('+') << 0 << 0 << 0 << 0 << 0 << 0 << NoResult; - QTest::newRow("T002 - clear") << ClearAll << NoWidget << QString("") << 0 << 0 << 0 << 0 << 0 << 0 << 0 << 0 << NoResult; // Clear all + QTest::newRow("T002 - slot1") << SetupAccel << TriggerSlot1 << QString("Shift+M") << 0 << 0 << 0 << 0 << 0 << 0 << 0 << 0 << NoResult; + QTest::newRow("T002:Shift+M - [Shift+M]") << TestAccel << NoWidget << QString("") << int(Qt::SHIFT + Qt::Key_M) << int('M') << 0 << 0 << 0 << 0 << 0 << 0 << Slot1Triggered; + QTest::newRow("T002:M - [Shift+M]") << TestAccel << NoWidget << QString("") << int(Qt::Key_M) << int('m') << 0 << 0 << 0 << 0 << 0 << 0 << NoResult; + QTest::newRow("T002 - slot2") << SetupAccel << TriggerSlot2 << QString("Shift++") << 0 << 0 << 0 << 0 << 0 << 0 << 0 << 0 << NoResult; + QTest::newRow("T002:Shift++ [Shift++]") << TestAccel << NoWidget << QString("") << int(Qt::SHIFT + Qt::Key_Plus) << int('+') << 0 << 0 << 0 << 0 << 0 << 0 << Slot2Triggered; + QTest::newRow("T002:+ [Shift++]") << TestAccel << NoWidget << QString("") << int(Qt::Key_Plus) << int('+') << 0 << 0 << 0 << 0 << 0 << 0 << NoResult; + QTest::newRow("T002 - clear") << ClearAll << NoWidget << QString("") << 0 << 0 << 0 << 0 << 0 << 0 << 0 << 0 << NoResult; // Clear all /* Testing Single Sequences Shift + Ctrl + Qt::Key_Plus on Ctrl + Qt::Key_Plus Ctrl + Qt::Key_Plus on Ctrl + Qt::Key_Plus - Qt::Key_Plus on Ctrl + Qt::Key_Plus + Qt::Key_Plus on Ctrl + Qt::Key_Plus */ - QTest::newRow("T002b - slot1") << SetupAccel << TriggerSlot1 << QString("Ctrl++") << 0 << 0 << 0 << 0 << 0 << 0 << 0 << 0 << NoResult; + QTest::newRow("T002b - slot1") << SetupAccel << TriggerSlot1 << QString("Ctrl++") << 0 << 0 << 0 << 0 << 0 << 0 << 0 << 0 << NoResult; //commented out because the behaviour changed, those tests should be updated - //QTest::newRow("T002b:Shift+Ctrl++ [Ctrl++]")<< TestAccel << NoWidget << QString("") << int(Qt::SHIFT + Qt::CTRL + Qt::Key_Plus) << int('+') << 0 << 0 << 0 << 0 << 0 << 0 << Slot1Triggered; - QTest::newRow("T002b:Ctrl++ [Ctrl++]") << TestAccel << NoWidget << QString("") << int(Qt::CTRL + Qt::Key_Plus) << int('+') << 0 << 0 << 0 << 0 << 0 << 0 << Slot1Triggered; - QTest::newRow("T002b:+ [Ctrl++]") << TestAccel << NoWidget << QString("") << int(Qt::Key_Plus) << int('+') << 0 << 0 << 0 << 0 << 0 << 0 << NoResult; - QTest::newRow("T002b - clear") << ClearAll << NoWidget << QString("") << 0 << 0 << 0 << 0 << 0 << 0 << 0 << 0 << NoResult; // Clear all + //QTest::newRow("T002b:Shift+Ctrl++ [Ctrl++]")<< TestAccel << NoWidget << QString("") << int(Qt::SHIFT + Qt::CTRL + Qt::Key_Plus) << int('+') << 0 << 0 << 0 << 0 << 0 << 0 << Slot1Triggered; + QTest::newRow("T002b:Ctrl++ [Ctrl++]") << TestAccel << NoWidget << QString("") << int(Qt::CTRL + Qt::Key_Plus) << int('+') << 0 << 0 << 0 << 0 << 0 << 0 << Slot1Triggered; + QTest::newRow("T002b:+ [Ctrl++]") << TestAccel << NoWidget << QString("") << int(Qt::Key_Plus) << int('+') << 0 << 0 << 0 << 0 << 0 << 0 << NoResult; + QTest::newRow("T002b - clear") << ClearAll << NoWidget << QString("") << 0 << 0 << 0 << 0 << 0 << 0 << 0 << 0 << NoResult; // Clear all /* Testing Single Sequences Shift + Qt::Key_F1 on Qt::Key_F1 Qt::Key_F1 on Qt::Key_F1 */ - QTest::newRow("T003 - slot1") << SetupAccel << TriggerSlot1 << QString("F1") << 0 << 0 << 0 << 0 << 0 << 0 << 0 << 0 << NoResult; + QTest::newRow("T003 - slot1") << SetupAccel << TriggerSlot1 << QString("F1") << 0 << 0 << 0 << 0 << 0 << 0 << 0 << 0 << NoResult; //commented out because the behaviour changed, those tests should be updated - //QTest::newRow("T003:Shift+F1 - [F1]") << TestAccel << NoWidget << QString("") << int(Qt::SHIFT + Qt::Key_F1) << 0 << 0 << 0 << 0 << 0 << 0 << 0 << Slot1Triggered; - QTest::newRow("T003:F1 - [F1]") << TestAccel << NoWidget << QString("") << int(Qt::Key_F1) << 0 << 0 << 0 << 0 << 0 << 0 << 0 << Slot1Triggered; - QTest::newRow("T003 - clear") << ClearAll << NoWidget << QString("") << 0 << 0 << 0 << 0 << 0 << 0 << 0 << 0 << NoResult; // Clear all + //QTest::newRow("T003:Shift+F1 - [F1]") << TestAccel << NoWidget << QString("") << int(Qt::SHIFT + Qt::Key_F1) << 0 << 0 << 0 << 0 << 0 << 0 << 0 << Slot1Triggered; + QTest::newRow("T003:F1 - [F1]") << TestAccel << NoWidget << QString("") << int(Qt::Key_F1) << 0 << 0 << 0 << 0 << 0 << 0 << 0 << Slot1Triggered; + QTest::newRow("T003 - clear") << ClearAll << NoWidget << QString("") << 0 << 0 << 0 << 0 << 0 << 0 << 0 << 0 << NoResult; // Clear all /* Testing Single Sequences Shift + Qt::Key_F1 on Shift + Qt::Key_F1 Qt::Key_F1 on Shift + Qt::Key_F1 */ - QTest::newRow("T004 - slot1") << SetupAccel << TriggerSlot1 << QString("Shift+F1") << 0 << 0 << 0 << 0 << 0 << 0 << 0 << 0 << NoResult; - QTest::newRow("T004:Shift+F1 - [Shift+F1]")<< TestAccel << NoWidget << QString("") << int(Qt::SHIFT + Qt::Key_F1) << 0 << 0 << 0 << 0 << 0 << 0 << 0 << Slot1Triggered; - QTest::newRow("T004:F1 - [Shift+F1]") << TestAccel << NoWidget << QString("") << int(Qt::Key_F1) << 0 << 0 << 0 << 0 << 0 << 0 << 0 << NoResult; - QTest::newRow("T004 - clear") << ClearAll << NoWidget << QString("") << 0 << 0 << 0 << 0 << 0 << 0 << 0 << 0 << NoResult; // Clear all + QTest::newRow("T004 - slot1") << SetupAccel << TriggerSlot1 << QString("Shift+F1") << 0 << 0 << 0 << 0 << 0 << 0 << 0 << 0 << NoResult; + QTest::newRow("T004:Shift+F1 - [Shift+F1]") << TestAccel << NoWidget << QString("") << int(Qt::SHIFT + Qt::Key_F1) << 0 << 0 << 0 << 0 << 0 << 0 << 0 << Slot1Triggered; + QTest::newRow("T004:F1 - [Shift+F1]") << TestAccel << NoWidget << QString("") << int(Qt::Key_F1) << 0 << 0 << 0 << 0 << 0 << 0 << 0 << NoResult; + QTest::newRow("T004 - clear") << ClearAll << NoWidget << QString("") << 0 << 0 << 0 << 0 << 0 << 0 << 0 << 0 << NoResult; // Clear all //=========================================== // [Shift + key] and [key] on shortcuts with @@ -544,11 +544,11 @@ void tst_QShortcut::text_data() Qt::Key_F1 Shift + Qt::Key_F1 */ - QTest::newRow("T007 - slot1") << SetupAccel << TriggerSlot1 << QString("F1") << 0 << 0 << 0 << 0 << 0 << 0 << 0 << 0 << NoResult; - QTest::newRow("T007 - slot2") << SetupAccel << TriggerSlot2 << QString("Shift+F1") << 0 << 0 << 0 << 0 << 0 << 0 << 0 << 0 << NoResult; - QTest::newRow("T007:F1") << TestAccel << NoWidget << QString("") << int(Qt::Key_F1) << 0 << 0 << 0 << 0 << 0 << 0 << 0 << Slot1Triggered; - QTest::newRow("T007:Shift + F1") << TestAccel << NoWidget << QString("") << int(Qt::SHIFT + Qt::Key_F1) << 0 << 0 << 0 << 0 << 0 << 0 << 0 << Slot2Triggered; - QTest::newRow("T007 - clear") << ClearAll << NoWidget << QString("") << 0 << 0 << 0 << 0 << 0 << 0 << 0 << 0 << NoResult; // Clear all + QTest::newRow("T007 - slot1") << SetupAccel << TriggerSlot1 << QString("F1") << 0 << 0 << 0 << 0 << 0 << 0 << 0 << 0 << NoResult; + QTest::newRow("T007 - slot2") << SetupAccel << TriggerSlot2 << QString("Shift+F1") << 0 << 0 << 0 << 0 << 0 << 0 << 0 << 0 << NoResult; + QTest::newRow("T007:F1") << TestAccel << NoWidget << QString("") << int(Qt::Key_F1) << 0 << 0 << 0 << 0 << 0 << 0 << 0 << Slot1Triggered; + QTest::newRow("T007:Shift + F1") << TestAccel << NoWidget << QString("") << int(Qt::SHIFT + Qt::Key_F1) << 0 << 0 << 0 << 0 << 0 << 0 << 0 << Slot2Triggered; + QTest::newRow("T007 - clear") << ClearAll << NoWidget << QString("") << 0 << 0 << 0 << 0 << 0 << 0 << 0 << 0 << NoResult; // Clear all /* Testing Single Sequences Qt::Key_M @@ -556,22 +556,22 @@ void tst_QShortcut::text_data() Ctrl + Qt::Key_M Alt + Qt::Key_M */ - QTest::newRow("T01 - slot1") << SetupAccel << TriggerSlot1 << QString("M") << 0 << 0 << 0 << 0 << 0 << 0 << 0 << 0 << NoResult; - QTest::newRow("T02 - slot2") << SetupAccel << TriggerSlot2 << QString("Shift+M") << 0 << 0 << 0 << 0 << 0 << 0 << 0 << 0 << NoResult; - QTest::newRow("T03 - slot1") << SetupAccel << TriggerSlot1 << QString("Ctrl+M") << 0 << 0 << 0 << 0 << 0 << 0 << 0 << 0 << NoResult; - QTest::newRow("T04 - slot2") << SetupAccel << TriggerSlot2 << QString("Alt+M") << 0 << 0 << 0 << 0 << 0 << 0 << 0 << 0 << NoResult; + QTest::newRow("T01 - slot1") << SetupAccel << TriggerSlot1 << QString("M") << 0 << 0 << 0 << 0 << 0 << 0 << 0 << 0 << NoResult; + QTest::newRow("T02 - slot2") << SetupAccel << TriggerSlot2 << QString("Shift+M") << 0 << 0 << 0 << 0 << 0 << 0 << 0 << 0 << NoResult; + QTest::newRow("T03 - slot1") << SetupAccel << TriggerSlot1 << QString("Ctrl+M") << 0 << 0 << 0 << 0 << 0 << 0 << 0 << 0 << NoResult; + QTest::newRow("T04 - slot2") << SetupAccel << TriggerSlot2 << QString("Alt+M") << 0 << 0 << 0 << 0 << 0 << 0 << 0 << 0 << NoResult; - QTest::newRow("T:Qt::Key_M") << TestAccel << NoWidget << QString("") << int(Qt::Key_M) << int('m') << 0 << 0 << 0 << 0 << 0 << 0 << Slot1Triggered; - QTest::newRow("T:Shift + Qt::Key_M") << TestAccel << NoWidget << QString("") << int(Qt::SHIFT + Qt::Key_M) << int('M') << 0 << 0 << 0 << 0 << 0 << 0 << Slot2Triggered; - QTest::newRow("T:Ctrl + Qt::Key_M") << TestAccel << NoWidget << QString("") << int(Qt::CTRL + Qt::Key_M) << 0 << 0 << 0 << 0 << 0 << 0 << 0 << Slot1Triggered; - QTest::newRow("T:Alt + Qt::Key_M") << TestAccel << NoWidget << QString("") << int(Qt::ALT + Qt::Key_M) << 0 << 0 << 0 << 0 << 0 << 0 << 0 << Slot2Triggered; + QTest::newRow("T:Qt::Key_M") << TestAccel << NoWidget << QString("") << int(Qt::Key_M) << int('m') << 0 << 0 << 0 << 0 << 0 << 0 << Slot1Triggered; + QTest::newRow("T:Shift + Qt::Key_M") << TestAccel << NoWidget << QString("") << int(Qt::SHIFT + Qt::Key_M) << int('M') << 0 << 0 << 0 << 0 << 0 << 0 << Slot2Triggered; + QTest::newRow("T:Ctrl + Qt::Key_M") << TestAccel << NoWidget << QString("") << int(Qt::CTRL + Qt::Key_M) << 0 << 0 << 0 << 0 << 0 << 0 << 0 << Slot1Triggered; + QTest::newRow("T:Alt + Qt::Key_M") << TestAccel << NoWidget << QString("") << int(Qt::ALT + Qt::Key_M) << 0 << 0 << 0 << 0 << 0 << 0 << 0 << Slot2Triggered; /* Testing Single Sequence Ambiguity Qt::Key_M on shortcut2 */ - QTest::newRow("T05 - slot2") << SetupAccel << TriggerSlot2 << QString("M") << 0 << 0 << 0 << 0 << 0 << 0 << 0 << 0 << NoResult; - QTest::newRow("T:Qt::Key_M on TriggerSlot2") << TestAccel << NoWidget << QString("") << int(Qt::Key_M) << int('m') << 0 << 0 << 0 << 0 << 0 << 0 << Ambiguous; - QTest::newRow("T06 - clear") << ClearAll << NoWidget << QString("") << 0 << 0 << 0 << 0 << 0 << 0 << 0 << 0 << NoResult; // Clear all + QTest::newRow("T05 - slot2") << SetupAccel << TriggerSlot2 << QString("M") << 0 << 0 << 0 << 0 << 0 << 0 << 0 << 0 << NoResult; + QTest::newRow("T:Qt::Key_M on TriggerSlot2") << TestAccel << NoWidget << QString("") << int(Qt::Key_M) << int('m') << 0 << 0 << 0 << 0 << 0 << 0 << Ambiguous; + QTest::newRow("T06 - clear") << ClearAll << NoWidget << QString("") << 0 << 0 << 0 << 0 << 0 << 0 << 0 << 0 << NoResult; // Clear all /* Testing Single Specialkeys Qt::Key_aring @@ -581,26 +581,26 @@ void tst_QShortcut::text_data() /* see comments above on the #ifdef'ery */ QTest::newRow("T06 - slot1") << SetupAccel << TriggerSlot1 << QString::fromLatin1("\x0C5")<< 0 << 0 << 0 << 0 << 0 << 0 << 0 << 0 << NoResult; QTest::newRow("T07 - slot2") << SetupAccel << TriggerSlot2 << QString::fromLatin1("Shift+\x0C5")<< 0 << 0 << 0 << 0 << 0 << 0 << 0 << 0 << NoResult; - QTest::newRow("T08 - slot2") << SetupAccel << TriggerSlot1 << QString("K") << 0 << 0 << 0 << 0 << 0 << 0 << 0 << 0 << NoResult; - QTest::newRow("T:Qt::Key_aring") << TestAccel << NoWidget << QString("") << int(Qt::Key_Aring) << 0 << 0 << 0 << 0 << 0 << 0 << 0 << Slot1Triggered; - QTest::newRow("T:Qt::Key_Aring") << TestAccel << NoWidget << QString("") << int(Qt::SHIFT+Qt::Key_Aring) << 0 << 0 << 0 << 0 << 0 << 0 << 0 << Slot2Triggered; - QTest::newRow("T:Qt::Key_aring - Text Form") << TestAccel << NoWidget << QString("") << 0 << 0xC5 << 0 << 0 << 0 << 0 << 0 << 0 << Slot1Triggered; - QTest::newRow("T:Qt::Key_Aring - Text Form") << TestAccel << NoWidget << QString("") << int(Qt::SHIFT+0) << 0xC5 << 0 << 0 << 0 << 0 << 0 << 0 << Slot2Triggered; - QTest::newRow("T:Qt::UNICODE_ACCEL + Qt::Key_K") << TestAccel << NoWidget << QString("") << int(Qt::UNICODE_ACCEL + Qt::Key_K) << int('k') << 0 << 0 << 0 << 0 << 0 << 0 << Slot1Triggered; - QTest::newRow("T09 - clear") << ClearAll << NoWidget << QString("") << 0 << 0 << 0 << 0 << 0 << 0 << 0 << 0 << NoResult; // Clear all + QTest::newRow("T08 - slot2") << SetupAccel << TriggerSlot1 << QString("K") << 0 << 0 << 0 << 0 << 0 << 0 << 0 << 0 << NoResult; + QTest::newRow("T:Qt::Key_aring") << TestAccel << NoWidget << QString("") << int(Qt::Key_Aring) << 0 << 0 << 0 << 0 << 0 << 0 << 0 << Slot1Triggered; + QTest::newRow("T:Qt::Key_Aring") << TestAccel << NoWidget << QString("") << int(Qt::SHIFT+Qt::Key_Aring) << 0 << 0 << 0 << 0 << 0 << 0 << 0 << Slot2Triggered; + QTest::newRow("T:Qt::Key_aring - Text Form") << TestAccel << NoWidget << QString("") << 0 << 0xC5 << 0 << 0 << 0 << 0 << 0 << 0 << Slot1Triggered; + QTest::newRow("T:Qt::Key_Aring - Text Form") << TestAccel << NoWidget << QString("") << int(Qt::SHIFT+0) << 0xC5 << 0 << 0 << 0 << 0 << 0 << 0 << Slot2Triggered; + QTest::newRow("T:Qt::UNICODE_ACCEL + Qt::Key_K")<< TestAccel << NoWidget << QString("") << int(Qt::UNICODE_ACCEL + Qt::Key_K) << int('k') << 0 << 0 << 0 << 0 << 0 << 0 << Slot1Triggered; + QTest::newRow("T09 - clear") << ClearAll << NoWidget << QString("") << 0 << 0 << 0 << 0 << 0 << 0 << 0 << 0 << NoResult; // Clear all /* Testing Multiple Sequences Qt::Key_M Qt::Key_I, Qt::Key_M Shift+Qt::Key_I, Qt::Key_M */ - QTest::newRow("T10 - slot1") << SetupAccel << TriggerSlot1 << QString("M") << 0 << 0 << 0 << 0 << 0 << 0 << 0 << 0 << NoResult; - QTest::newRow("T11 - slot2") << SetupAccel << TriggerSlot2 << QString("I, M")<< 0 << 0 << 0 << 0 << 0 << 0 << 0 << 0 << NoResult; - QTest::newRow("T12 - slot1") << SetupAccel << TriggerSlot1 << QString("Shift+I, M")<< 0 << 0 << 0 << 0 << 0 << 0 << 0 << 0 << NoResult; - QTest::newRow("T:Qt::Key_M (2)") << TestAccel << NoWidget << QString("") << int(Qt::Key_M) << int('m') << 0 << 0 << 0 << 0 << 0 << 0 << Slot1Triggered; - QTest::newRow("T:Qt::Key_I, Qt::Key_M") << TestAccel << NoWidget << QString("") << int(Qt::Key_I) << int('i') << int(Qt::Key_M) << int('m') << 0 << 0 << 0 << 0 << Slot2Triggered; - QTest::newRow("T:Shift+Qt::Key_I, Qt::Key_M") << TestAccel << NoWidget << QString("") << int(Qt::SHIFT + Qt::Key_I) << int('I') << int(Qt::Key_M) << int('m') << 0 << 0 << 0 << 0 << Slot1Triggered; - QTest::newRow("T13 - clear") << ClearAll << NoWidget << QString("") << 0 << 0 << 0 << 0 << 0 << 0 << 0 << 0 << NoResult; // Clear all + QTest::newRow("T10 - slot1") << SetupAccel << TriggerSlot1 << QString("M") << 0 << 0 << 0 << 0 << 0 << 0 << 0 << 0 << NoResult; + QTest::newRow("T11 - slot2") << SetupAccel << TriggerSlot2 << QString("I, M")<< 0 << 0 << 0 << 0 << 0 << 0 << 0 << 0 << NoResult; + QTest::newRow("T12 - slot1") << SetupAccel << TriggerSlot1 << QString("Shift+I, M")<< 0 << 0 << 0 << 0 << 0 << 0 << 0 << 0 << NoResult; + QTest::newRow("T:Qt::Key_M (2)") << TestAccel << NoWidget << QString("") << int(Qt::Key_M) << int('m') << 0 << 0 << 0 << 0 << 0 << 0 << Slot1Triggered; + QTest::newRow("T:Qt::Key_I, Qt::Key_M") << TestAccel << NoWidget << QString("") << int(Qt::Key_I) << int('i') << int(Qt::Key_M) << int('m') << 0 << 0 << 0 << 0 << Slot2Triggered; + QTest::newRow("T:Shift+Qt::Key_I, Qt::Key_M") << TestAccel << NoWidget << QString("") << int(Qt::SHIFT + Qt::Key_I) << int('I') << int(Qt::Key_M) << int('m') << 0 << 0 << 0 << 0 << Slot1Triggered; + QTest::newRow("T13 - clear") << ClearAll << NoWidget << QString("") << 0 << 0 << 0 << 0 << 0 << 0 << 0 << 0 << NoResult; // Clear all } // ------------------------------------------------------------------ @@ -624,7 +624,7 @@ void tst_QShortcut::disabledItems() QPushButton pb2(mainW); pb1.setObjectName("pushbutton-1"); pb2.setObjectName("pushbutton-2"); - pb1.show(); // Must be show for QShortcutMap::correctSubWindow to trigger + pb1.show(); // Must be show for QShortcutMap::correctSubWindow to trigger pb2.show(); QShortcut *cut1 = setupShortcut(&pb1, "shortcut1-pb1", TriggerSlot1, "M"); @@ -700,21 +700,21 @@ void tst_QShortcut::disabledItems() sendKeyEvents( Qt::CTRL+Qt::Key_Q, 0 ); QCOMPARE( currentResult, NoResult ); if (over_330) - QCOMPARE( sbText, QString("Ctrl+K, Ctrl+Q not defined") ); + QCOMPARE( sbText, QString("Ctrl+K, Ctrl+Q not defined") ); currentResult = NoResult; sendKeyEvents( Qt::CTRL+Qt::Key_K, 0 ); sendKeyEvents( Qt::CTRL+Qt::Key_M, 0 ); QCOMPARE( currentResult, NoResult ); if (over_330) - QCOMPARE( sbText, QString::null ); + QCOMPARE( sbText, QString::null ); currentResult = NoResult; sendKeyEvents( Qt::CTRL+Qt::Key_K, 0 ); sendKeyEvents( Qt::CTRL+Qt::Key_L, 0 ); QCOMPARE( currentResult, Slot1Triggered ); if (over_330) - QCOMPARE( sbText, QString::null ); + QCOMPARE( sbText, QString::null ); #endif clearAllShortcuts(); cut1 = 0; @@ -876,7 +876,7 @@ void tst_QShortcut::ambiguousItems() QPushButton pb2(mainW); pb1.setObjectName("pushbutton-1"); pb2.setObjectName("pushbutton-2"); - pb1.show(); // Must be show for QShortcutMap::correctSubWindow to trigger + pb1.show(); // Must be show for QShortcutMap::correctSubWindow to trigger pb2.show(); setupShortcut(&pb1, "shortcut1-pb1", TriggerSlot1, "M"); @@ -915,7 +915,7 @@ void tst_QShortcut::unicodeCompare() QPushButton pb2(mainW); pb1.setObjectName("pushbutton-1"); pb2.setObjectName("pushbutton-2"); - pb1.show(); // Must be show for QShortcutMap::correctSubWindow to trigger + pb1.show(); // Must be show for QShortcutMap::correctSubWindow to trigger pb2.show(); QKeySequence ks1("Ctrl+M"); // Unicode @@ -1190,25 +1190,25 @@ void tst_QShortcut::sendKeyEvents(QWidget *w, int k1, QChar c1, int k2, QChar c2 if (k1 || c1.toLatin1()) { QString c(c1.unicode() == QChar::Null ? QString() : QString(c1)); QTest::sendKeyEvent(QTest::Press, w, static_cast(k1), c, b1); - QTest::sendKeyEvent(QTest::Release, w, static_cast(k1), c, b1); + QTest::sendKeyEvent(QTest::Release, w, static_cast(k1), c, b1); } if (k2 || c2.toLatin1()) { QString c(c2.unicode() == QChar::Null ? QString() : QString(c2)); - QTest::sendKeyEvent(QTest::Press, w, static_cast(k2), c, b2); - QTest::sendKeyEvent(QTest::Release, w, static_cast(k2), c, b2); + QTest::sendKeyEvent(QTest::Press, w, static_cast(k2), c, b2); + QTest::sendKeyEvent(QTest::Release, w, static_cast(k2), c, b2); } if (k3 || c3.toLatin1()) { QString c(c3.unicode() == QChar::Null ? QString() : QString(c3)); - QTest::sendKeyEvent(QTest::Press, w, static_cast(k3), c, b3); - QTest::sendKeyEvent(QTest::Release, w, static_cast(k3), c, b3); + QTest::sendKeyEvent(QTest::Press, w, static_cast(k3), c, b3); + QTest::sendKeyEvent(QTest::Release, w, static_cast(k3), c, b3); } if (k4 || c4.toLatin1()) { QString c(c4.unicode() == QChar::Null ? QString() : QString(c4)); - QTest::sendKeyEvent(QTest::Press, w, static_cast(k4), c, b4); - QTest::sendKeyEvent(QTest::Release, w, static_cast(k4), c, b4); + QTest::sendKeyEvent(QTest::Press, w, static_cast(k4), c, b4); + QTest::sendKeyEvent(QTest::Release, w, static_cast(k4), c, b4); } } @@ -1229,9 +1229,9 @@ void tst_QShortcut::testElement() QFETCH(tst_QShortcut::Result, result); if (action == ClearAll) { - clearAllShortcuts(); + clearAllShortcuts(); } else if (action == SetupAccel) { - setupShortcut(testWidget, txt, k1, k2, k3, k4); + setupShortcut(testWidget, txt, k1, k2, k3, k4); } else { sendKeyEvents(k1, c1, k2, c2, k3, c3, k4, c4); QCOMPARE(currentResult, result); diff --git a/tests/auto/widgets/kernel/qwidget/tst_qwidget.cpp b/tests/auto/widgets/kernel/qwidget/tst_qwidget.cpp index fc3b0d983c..38b629cad7 100644 --- a/tests/auto/widgets/kernel/qwidget/tst_qwidget.cpp +++ b/tests/auto/widgets/kernel/qwidget/tst_qwidget.cpp @@ -669,7 +669,7 @@ void tst_QWidget::cleanup() // Helper class... BezierViewer::BezierViewer( QWidget* parent) - : QWidget( parent ) + : QWidget(parent) { setObjectName(QLatin1String("TestWidget")); setWindowTitle(objectName()); @@ -689,9 +689,9 @@ void BezierViewer::paintEvent( QPaintEvent* ) { if ( points.size() != 4 ) { #if defined(QT_CHECK_RANGE) - qWarning( "QPolygon::bezier: The array must have 4 control points" ); + qWarning( "QPolygon::bezier: The array must have 4 control points" ); #endif - return; + return; } /* Calculate Bezier curve */ @@ -707,18 +707,18 @@ void BezierViewer::paintEvent( QPaintEvent* ) /* Scale Bezier curve vertices */ for ( QPolygonF::Iterator it = bezier.begin(); it != bezier.end(); ++it ) { - it->setX( (it->x()-br.x()) * scl + border ); - it->setY( (it->y()-br.y()) * scl + border ); + it->setX( (it->x()-br.x()) * scl + border ); + it->setY( (it->y()-br.y()) * scl + border ); } /* Draw grid */ painter.setPen( Qt::lightGray ); - int i; - for ( i = border; i <= pr.width(); i += scl ) { - painter.drawLine( i, 0, i, pr.height() ); + int i; + for ( i = border; i <= pr.width(); i += scl ) { + painter.drawLine( i, 0, i, pr.height() ); } for ( int j = border; j <= pr.height(); j += scl ) { - painter.drawLine( 0, j, pr.width(), j ); + painter.drawLine( 0, j, pr.width(), j ); } /* Write number of vertices */ @@ -736,17 +736,17 @@ void BezierViewer::paintEvent( QPaintEvent* ) /* Scale and draw control points */ painter.setPen( Qt::darkGreen ); for ( QPolygonF::Iterator p1 = points.begin(); p1 != points.end(); ++p1 ) { - int x = (p1->x()-br.x()) * scl + border; - int y = (p1->y()-br.y()) * scl + border; - painter.drawLine( x-4, y-4, x+4, y+4 ); - painter.drawLine( x+4, y-4, x-4, y+4 ); + int x = (p1->x()-br.x()) * scl + border; + int y = (p1->y()-br.y()) * scl + border; + painter.drawLine( x-4, y-4, x+4, y+4 ); + painter.drawLine( x+4, y-4, x-4, y+4 ); } /* Draw vertices */ painter.setPen( Qt::red ); painter.setBrush( Qt::red ); for ( QPolygonF::Iterator p2 = bezier.begin(); p2 != bezier.end(); ++p2 ) - painter.drawEllipse( p2->x()-1, p2->y()-1, 3, 3 ); + painter.drawEllipse( p2->x()-1, p2->y()-1, 3, 3 ); } void tst_QWidget::fontPropagation() @@ -1677,17 +1677,17 @@ public: Container() { box = new QVBoxLayout(this); - //(new QVBoxLayout(this))->setAutoAdd(true); + //(new QVBoxLayout(this))->setAutoAdd(true); } void tab() { - focusNextPrevChild(true); + focusNextPrevChild(true); } void backTab() { - focusNextPrevChild(false); + focusNextPrevChild(false); } }; @@ -1712,7 +1712,7 @@ public: setFocusProxy( lineEdit ); setFocusPolicy( Qt::StrongFocus ); - setTabOrder(lineEdit, button); + setTabOrder(lineEdit, button); } private: @@ -1761,9 +1761,9 @@ void tst_QWidget::setTabOrder() QTRY_VERIFY(lastEdit->hasFocus()); container.tab(); do { - QVERIFY(comp[current]->focusProxy()->hasFocus()); - container.tab(); - current--; + QVERIFY(comp[current]->focusProxy()->hasFocus()); + container.tab(); + current--; } while (current >= 0); QVERIFY(firstEdit->hasFocus()); diff --git a/tests/auto/widgets/widgets/qabstractbutton/tst_qabstractbutton.cpp b/tests/auto/widgets/widgets/qabstractbutton/tst_qabstractbutton.cpp index 93262722b9..523fac940d 100644 --- a/tests/auto/widgets/widgets/qabstractbutton/tst_qabstractbutton.cpp +++ b/tests/auto/widgets/widgets/qabstractbutton/tst_qabstractbutton.cpp @@ -419,7 +419,7 @@ void tst_QAbstractButton::setIcon() QPixmap p2( test2_xpm ); for ( int a = 0; a<5; a++ ) - testWidget->setIcon( p2 ); + testWidget->setIcon( p2 ); QCOMPARE( testWidget->icon().pixmap(12, 8), p2 ); diff --git a/tests/auto/widgets/widgets/qcalendarwidget/tst_qcalendarwidget.cpp b/tests/auto/widgets/widgets/qcalendarwidget/tst_qcalendarwidget.cpp index 14a8496b42..a3079cdaef 100644 --- a/tests/auto/widgets/widgets/qcalendarwidget/tst_qcalendarwidget.cpp +++ b/tests/auto/widgets/widgets/qcalendarwidget/tst_qcalendarwidget.cpp @@ -185,7 +185,7 @@ void tst_QCalendarWidget::buttonClickCheck() int month = object.monthShown(); QToolButton *button = object.findChild("qt_calendar_prevmonth"); QTest::mouseClick(button, Qt::LeftButton); - QCOMPARE(month > 1 ? month-1 : 12, object.monthShown()); + QCOMPARE(month > 1 ? month-1 : 12, object.monthShown()); button = object.findChild("qt_calendar_nextmonth"); QTest::mouseClick(button, Qt::LeftButton); QCOMPARE(month, object.monthShown()); diff --git a/tests/auto/widgets/widgets/qdockwidget/tst_qdockwidget.cpp b/tests/auto/widgets/widgets/qdockwidget/tst_qdockwidget.cpp index a4ad18c7a6..6551a88232 100644 --- a/tests/auto/widgets/widgets/qdockwidget/tst_qdockwidget.cpp +++ b/tests/auto/widgets/widgets/qdockwidget/tst_qdockwidget.cpp @@ -87,7 +87,7 @@ private slots: void task248604_infiniteResize(); void task258459_visibilityChanged(); void taskQTBUG_1665_closableChanged(); - void taskQTBUG_9758_undockedGeometry(); + void taskQTBUG_9758_undockedGeometry(); }; // Testing get/set functions @@ -588,7 +588,7 @@ void tst_QDockWidget::visibilityChanged() QCOMPARE(spy.count(), 0); mw.addDockWidget(Qt::RightDockWidgetArea, &dw2); - QTest::qWait(200); + QTest::qWait(200); QCOMPARE(spy.count(), 1); QCOMPARE(spy.at(0).at(0).toBool(), true); } @@ -758,19 +758,19 @@ void tst_QDockWidget::task169808_setFloating() } }; QMainWindow mw; - mw.setCentralWidget(new MyWidget); - QDockWidget *dw = new QDockWidget("my dock"); - dw->setWidget(new MyWidget); - mw.addDockWidget(Qt::LeftDockWidgetArea, dw); - dw->setFloating(true); - mw.show(); + mw.setCentralWidget(new MyWidget); + QDockWidget *dw = new QDockWidget("my dock"); + dw->setWidget(new MyWidget); + mw.addDockWidget(Qt::LeftDockWidgetArea, dw); + dw->setFloating(true); + mw.show(); QVERIFY(QTest::qWaitForWindowExposed(&mw)); QCOMPARE(dw->widget()->size(), dw->widget()->sizeHint()); //and now we try to test if the contents margin is taken into account dw->widget()->setSizePolicy(QSizePolicy::Fixed, QSizePolicy::Fixed); - dw->setFloating(false); + dw->setFloating(false); QVERIFY(QTest::qWaitForWindowExposed(&mw)); qApp->processEvents(); //leave time processing events diff --git a/tests/auto/widgets/widgets/qdoublespinbox/tst_qdoublespinbox.cpp b/tests/auto/widgets/widgets/qdoublespinbox/tst_qdoublespinbox.cpp index 49f058862d..6784ee477b 100644 --- a/tests/auto/widgets/widgets/qdoublespinbox/tst_qdoublespinbox.cpp +++ b/tests/auto/widgets/widgets/qdoublespinbox/tst_qdoublespinbox.cpp @@ -640,7 +640,7 @@ void tst_QDoubleSpinBox::setDecimals() QTest::keyClick(&spin, Qt::Key_1); QTest::keyClick(&spin, Qt::Key_1); QTest::keyClick(&spin, Qt::Key_1); - if (sizeof(qreal) == sizeof(float)) + if (sizeof(qreal) == sizeof(float)) QCOMPARE(spin.text().left(17), expected.left(17)); else QCOMPARE(spin.text(), expected); diff --git a/tests/auto/widgets/widgets/qlabel/tst_qlabel.cpp b/tests/auto/widgets/widgets/qlabel/tst_qlabel.cpp index 2fd15b891a..e3aa7fda51 100644 --- a/tests/auto/widgets/widgets/qlabel/tst_qlabel.cpp +++ b/tests/auto/widgets/widgets/qlabel/tst_qlabel.cpp @@ -189,9 +189,9 @@ void tst_QLabel::init() void tst_QLabel::cleanup() { if (QTest::currentTestFunction() == QLatin1String("setBuddy")) { - testWidget->show(); + testWidget->show(); - delete test_box; // this should delete tst_labl and test_edit as well. + delete test_box; // this should delete tst_labl and test_edit as well. } } diff --git a/tests/auto/widgets/widgets/qlineedit/tst_qlineedit.cpp b/tests/auto/widgets/widgets/qlineedit/tst_qlineedit.cpp index e9cc1e6abd..45167bac60 100644 --- a/tests/auto/widgets/widgets/qlineedit/tst_qlineedit.cpp +++ b/tests/auto/widgets/widgets/qlineedit/tst_qlineedit.cpp @@ -1468,7 +1468,7 @@ void tst_QLineEdit::undo_keypressevents() void tst_QLineEdit::QTBUG5786_undoPaste() { if (!PlatformClipboard::isAvailable()) - QSKIP("this machine doesn't support the clipboard"); + QSKIP("this machine doesn't support the clipboard"); QString initial("initial"); QString string("test"); QString additional("add"); diff --git a/tests/auto/widgets/widgets/qmainwindow/tst_qmainwindow.cpp b/tests/auto/widgets/widgets/qmainwindow/tst_qmainwindow.cpp index e5a9b570bb..d02b86bd8a 100644 --- a/tests/auto/widgets/widgets/qmainwindow/tst_qmainwindow.cpp +++ b/tests/auto/widgets/widgets/qmainwindow/tst_qmainwindow.cpp @@ -1340,8 +1340,8 @@ void tst_QMainWindow::restoreStateFromPreviousVersion() QCOMPARE(win.restoreState(ba), true); for( int i = 0; i < docks.size(); ++i) { - QCOMPARE( win.dockWidgetArea(docks[i]), Qt::DockWidgetArea(1 << i%4)); - } + QCOMPARE( win.dockWidgetArea(docks[i]), Qt::DockWidgetArea(1 << i%4)); + } } } @@ -1426,7 +1426,7 @@ public: QSize sizeHint() const { - return QSize(200, 200); + return QSize(200, 200); } }; diff --git a/tests/auto/widgets/widgets/qmenubar/tst_qmenubar.cpp b/tests/auto/widgets/widgets/qmenubar/tst_qmenubar.cpp index 2b8e735a0e..2e492f3a5c 100644 --- a/tests/auto/widgets/widgets/qmenubar/tst_qmenubar.cpp +++ b/tests/auto/widgets/widgets/qmenubar/tst_qmenubar.cpp @@ -173,22 +173,22 @@ const int RESET = 0; /*! Test plan: insertItem (all flavors and combinations) - removing menu items - clearing the menu - - check the common behaviour + emitted signals for: - accelerator keys - navigating tru the menu and then pressing ENTER - mouse clicks - mouse drags - combinations of key + mouse (if possible) - checked / unckecked state of menu options - active / inactive state + removing menu items + clearing the menu + + check the common behaviour + emitted signals for: + accelerator keys + navigating tru the menu and then pressing ENTER + mouse clicks + mouse drags + combinations of key + mouse (if possible) + checked / unckecked state of menu options + active / inactive state Can't test these without pixmap comparison... - show and hide - icons in a menu - pixmaps in a menu + show and hide + icons in a menu + pixmaps in a menu */ @@ -481,17 +481,17 @@ void tst_QMenuBar::removeItemAt() switch (removeIndex ) { case 0: - QCOMPARE( menuBarActions2.at(0)->text(), QString("Menu 2") ); - QCOMPARE( menuBarActions2.at(1)->text(), QString("Menu 3") ); - break; + QCOMPARE( menuBarActions2.at(0)->text(), QString("Menu 2") ); + QCOMPARE( menuBarActions2.at(1)->text(), QString("Menu 3") ); + break; case 1: - QCOMPARE( menuBarActions2.at(0)->text(), QString("Menu 1") ); - QCOMPARE( menuBarActions2.at(1)->text(), QString("Menu 3") ); - break; + QCOMPARE( menuBarActions2.at(0)->text(), QString("Menu 1") ); + QCOMPARE( menuBarActions2.at(1)->text(), QString("Menu 3") ); + break; case 2: - QCOMPARE( menuBarActions2.at(0)->text(), QString("Menu 1") ); - QCOMPARE( menuBarActions2.at(1)->text(), QString("Menu 2") ); - break; + QCOMPARE( menuBarActions2.at(0)->text(), QString("Menu 1") ); + QCOMPARE( menuBarActions2.at(1)->text(), QString("Menu 2") ); + break; } QVERIFY( menuBarActions2.size() == 2 ); @@ -827,7 +827,7 @@ void tst_QMenuBar::check_escKey() // void tst_QMenuBar::check_mouse1() // { // if (QSystem::curStyle() == "Motif") -// QSKIP("This fails in Motif due to a bug in the testing framework"); +// QSKIP("This fails in Motif due to a bug in the testing framework"); // QFETCH( QString, popup_item ); // QFETCH( int, itemA_count ); // QFETCH( int, itemB_count ); @@ -888,7 +888,7 @@ void tst_QMenuBar::check_escKey() // void tst_QMenuBar::check_mouse2() // { // if (QSystem::curStyle() == "Motif") -// QSKIP("This fails in Motif due to a bug in the testing framework"); +// QSKIP("This fails in Motif due to a bug in the testing framework"); // QFETCH( QString, label ); // QFETCH( int, itemA_count ); // QFETCH( int, itemB_count ); @@ -961,8 +961,8 @@ void tst_QMenuBar::allowActiveAndDisabled() void tst_QMenuBar::check_altPress() { if ( !qApp->style()->styleHint(QStyle::SH_MenuBar_AltKeyNavigation) ) { - QSKIP( QString( "this is not supposed to work in the %1 style. Skipping." ). - arg( qApp->style()->objectName() ).toLatin1()); + QSKIP(QString( "this is not supposed to work in the %1 style. Skipping." ). + arg(qApp->style()->objectName()).toLatin1()); } QMainWindow w; @@ -1141,7 +1141,7 @@ void tst_QMenuBar::task223138_triggered() void tst_QMenuBar::task256322_highlight() { QMainWindow win; - win.menuBar()->setNativeMenuBar(false); //we can't check the geometry of native menubars + win.menuBar()->setNativeMenuBar(false); //we can't check the geometry of native menubars QMenu menu; QAction *file = win.menuBar()->addMenu(&menu); file->setText("file"); diff --git a/tests/auto/widgets/widgets/qpushbutton/tst_qpushbutton.cpp b/tests/auto/widgets/widgets/qpushbutton/tst_qpushbutton.cpp index d336d00b3e..1eccdd768b 100644 --- a/tests/auto/widgets/widgets/qpushbutton/tst_qpushbutton.cpp +++ b/tests/auto/widgets/widgets/qpushbutton/tst_qpushbutton.cpp @@ -490,8 +490,8 @@ void tst_QPushButton::defaultAndAutoDefault() // Adding buttons to QDialog through a layout QDialog dialog; - QPushButton button3; - button3.setAutoDefault(false); + QPushButton button3; + button3.setAutoDefault(false); QPushButton button1; QVERIFY(!button1.autoDefault()); @@ -512,7 +512,7 @@ void tst_QPushButton::defaultAndAutoDefault() layout.addWidget(&button2, 0, 2); layout.addWidget(&button1, 0, 1); dialog.setLayout(&layout); - button3.setFocus(); + button3.setFocus(); QVERIFY(button1.autoDefault()); QVERIFY(button1.isDefault()); QVERIFY(button2.autoDefault()); diff --git a/tests/auto/widgets/widgets/qtoolbox/tst_qtoolbox.cpp b/tests/auto/widgets/widgets/qtoolbox/tst_qtoolbox.cpp index a00db02c0a..13d958c8ca 100644 --- a/tests/auto/widgets/widgets/qtoolbox/tst_qtoolbox.cpp +++ b/tests/auto/widgets/widgets/qtoolbox/tst_qtoolbox.cpp @@ -252,9 +252,9 @@ void tst_QToolBox::change() QVERIFY( lastItem ); for ( int c = 0; c < testWidget->count(); ++c ) { - QString label = "Item " + QString::number(c); - testWidget->setItemText(c, label); - QCOMPARE( testWidget->itemText(c), label ); + QString label = "Item " + QString::number(c); + testWidget->setItemText(c, label); + QCOMPARE( testWidget->itemText(c), label ); } testWidget->setCurrentIndex( 0 ); diff --git a/tests/auto/xml/sax/qxmlsimplereader/parser/parser.cpp b/tests/auto/xml/sax/qxmlsimplereader/parser/parser.cpp index c00a5c7caa..3dd733f61e 100644 --- a/tests/auto/xml/sax/qxmlsimplereader/parser/parser.cpp +++ b/tests/auto/xml/sax/qxmlsimplereader/parser/parser.cpp @@ -47,70 +47,70 @@ class ContentHandler : public QXmlDefaultHandler { - public: - ContentHandler(); - - // QXmlContentHandler methods - bool startDocument(); - bool endDocument(); - bool startElement(const QString &namespaceURI, - const QString &localName, - const QString &qName, - const QXmlAttributes & atts); - bool endElement(const QString &namespaceURI, - const QString &localName, - const QString &qName); - bool characters(const QString &ch); - void setDocumentLocator(QXmlLocator *locator); - bool startPrefixMapping (const QString &prefix, const QString & uri); - bool endPrefixMapping(const QString &prefix); - bool ignorableWhitespace (const QString & ch); - bool processingInstruction(const QString &target, const QString &data); - bool skippedEntity (const QString & name); - - // QXmlErrorHandler methods - bool warning (const QXmlParseException & exception); - bool error (const QXmlParseException & exception); - bool fatalError (const QXmlParseException & exception); - - // QXmlDTDHandler methods - bool notationDecl ( const QString & name, const QString & publicId, - const QString & systemId ); - bool unparsedEntityDecl ( const QString & name, - const QString & publicId, - const QString & systemId, - const QString & notationName ); - - // QXmlEntityResolver methods - bool resolveEntity ( const QString & publicId, - const QString & systemId, - QXmlInputSource *&); - - // QXmlLexicalHandler methods - bool startDTD ( const QString & name, const QString & publicId, const QString & systemId ); - bool endDTD (); - bool startEntity ( const QString & name ); - bool endEntity ( const QString & name ); - bool startCDATA (); - bool endCDATA (); - bool comment ( const QString & ch ); - - // QXmlDeclHandler methods - bool attributeDecl ( const QString & eName, const QString & aName, const QString & type, const QString & valueDefault, const QString & value ); - bool internalEntityDecl ( const QString & name, const QString & value ); - bool externalEntityDecl ( const QString & name, const QString & publicId, const QString & systemId ); - - - const QString &result() const { return m_result; } - const QString &errorMsg() const { return m_error_msg; } - - private: - QString nestPrefix() const { return QString().fill(' ', 3*m_nest); } - QString formatAttributes(const QXmlAttributes & atts); - QString escapeStr(const QString &s); - - unsigned m_nest; - QString m_result, m_error_msg; +public: + ContentHandler(); + + // QXmlContentHandler methods + bool startDocument(); + bool endDocument(); + bool startElement(const QString &namespaceURI, + const QString &localName, + const QString &qName, + const QXmlAttributes &atts); + bool endElement(const QString &namespaceURI, + const QString &localName, + const QString &qName); + bool characters(const QString &ch); + void setDocumentLocator(QXmlLocator *locator); + bool startPrefixMapping(const QString &prefix, const QString &uri); + bool endPrefixMapping(const QString &prefix); + bool ignorableWhitespace(const QString &ch); + bool processingInstruction(const QString &target, const QString &data); + bool skippedEntity(const QString &name); + + // QXmlErrorHandler methods + bool warning(const QXmlParseException &exception); + bool error(const QXmlParseException &exception); + bool fatalError(const QXmlParseException &exception); + + // QXmlDTDHandler methods + bool notationDecl(const QString &name, const QString &publicId, + const QString &systemId); + bool unparsedEntityDecl(const QString &name, + const QString &publicId, + const QString &systemId, + const QString ¬ationName); + + // QXmlEntityResolver methods + bool resolveEntity(const QString &publicId, + const QString &systemId, + QXmlInputSource *&); + + // QXmlLexicalHandler methods + bool startDTD (const QString &name, const QString &publicId, const QString &systemId); + bool endDTD(); + bool startEntity(const QString &name); + bool endEntity(const QString &name); + bool startCDATA(); + bool endCDATA(); + bool comment(const QString &ch); + + // QXmlDeclHandler methods + bool attributeDecl(const QString &eName, const QString &aName, const QString &type, const QString &valueDefault, const QString &value); + bool internalEntityDecl(const QString &name, const QString &value); + bool externalEntityDecl(const QString &name, const QString &publicId, const QString &systemId); + + + const QString &result() const { return m_result; } + const QString &errorMsg() const { return m_error_msg; } + +private: + QString nestPrefix() const { return QString().fill(' ', 3*m_nest); } + QString formatAttributes(const QXmlAttributes & atts); + QString escapeStr(const QString &s); + + unsigned m_nest; + QString m_result, m_error_msg; }; ContentHandler::ContentHandler() @@ -136,15 +136,15 @@ bool ContentHandler::endDocument() } bool ContentHandler::startElement(const QString &namespaceURI, - const QString &localName, - const QString &qName, - const QXmlAttributes & atts) + const QString &localName, + const QString &qName, + const QXmlAttributes &atts) { m_result += nestPrefix(); m_result += "startElement(namespaceURI=\"" + escapeStr(namespaceURI) - + "\", localName=\"" + escapeStr(localName) - + "\", qName=\"" + escapeStr(qName) - + "\", atts=[" + formatAttributes(atts) + "])\n"; + + "\", localName=\"" + escapeStr(localName) + + "\", qName=\"" + escapeStr(qName) + + "\", atts=[" + formatAttributes(atts) + "])\n"; ++m_nest; return true; } @@ -164,25 +164,25 @@ QString ContentHandler::formatAttributes(const QXmlAttributes &atts) { QString result; for (int i = 0, cnt = atts.count(); i < cnt; ++i) { - if (i != 0) result += ", "; - result += "{localName=\"" + escapeStr(atts.localName(i)) - + "\", qName=\"" + escapeStr(atts.qName(i)) - + "\", uri=\"" + escapeStr(atts.uri(i)) - + "\", type=\"" + escapeStr(atts.type(i)) - + "\", value=\"" + escapeStr(atts.value(i)) + "\"}"; + if (i != 0) result += ", "; + result += "{localName=\"" + escapeStr(atts.localName(i)) + + "\", qName=\"" + escapeStr(atts.qName(i)) + + "\", uri=\"" + escapeStr(atts.uri(i)) + + "\", type=\"" + escapeStr(atts.type(i)) + + "\", value=\"" + escapeStr(atts.value(i)) + "\"}"; } return result; } bool ContentHandler::endElement(const QString &namespaceURI, - const QString &localName, - const QString &qName) + const QString &localName, + const QString &qName) { --m_nest; m_result += nestPrefix(); m_result += "endElement(namespaceURI=\"" + escapeStr(namespaceURI) - + "\", localName=\"" + escapeStr(localName) - + "\", qName=\"" + escapeStr(qName) + "\")\n"; + + "\", localName=\"" + escapeStr(localName) + + "\", qName=\"" + escapeStr(qName) + "\")\n"; return true; } @@ -197,16 +197,16 @@ void ContentHandler::setDocumentLocator(QXmlLocator *locator) { m_result += nestPrefix(); m_result += "setDocumentLocator(locator={columnNumber=" - + QString::number(locator->columnNumber()) - + ", lineNumber=" + QString::number(locator->lineNumber()) - + "})\n"; + + QString::number(locator->columnNumber()) + + ", lineNumber=" + QString::number(locator->lineNumber()) + + "})\n"; } bool ContentHandler::startPrefixMapping (const QString &prefix, const QString & uri) { m_result += nestPrefix(); m_result += "startPrefixMapping(prefix=\"" + escapeStr(prefix) - + "\", uri=\"" + escapeStr(uri) + "\")\n"; + + "\", uri=\"" + escapeStr(uri) + "\")\n"; ++m_nest; return true; } @@ -230,7 +230,7 @@ bool ContentHandler::processingInstruction(const QString &target, const QString { m_result += nestPrefix(); m_result += "processingInstruction(target=\"" + escapeStr(target) - + "\", data=\"" + escapeStr(data) + "\")\n"; + + "\", data=\"" + escapeStr(data) + "\")\n"; return true; } @@ -249,13 +249,13 @@ bool ContentHandler::warning(const QXmlParseException & exception) .arg(exception.message()); m_result += nestPrefix(); m_result += "warning(exception={columnNumber=" - + QString::number(exception.columnNumber()) - + ", lineNumber=" - + QString::number(exception.lineNumber()) - + ", publicId=\"" + escapeStr(exception.publicId()) - + "\", systemId=\"" + escapeStr(exception.systemId()) - + "\", message=\"" + escapeStr(exception.message()) - + "\"})\n"; + + QString::number(exception.columnNumber()) + + ", lineNumber=" + + QString::number(exception.lineNumber()) + + ", publicId=\"" + escapeStr(exception.publicId()) + + "\", systemId=\"" + escapeStr(exception.systemId()) + + "\", message=\"" + escapeStr(exception.message()) + + "\"})\n"; return true; } @@ -267,13 +267,13 @@ bool ContentHandler::error(const QXmlParseException & exception) .arg(exception.message()); m_result += nestPrefix(); m_result += "error(exception={columnNumber=" - + QString::number(exception.columnNumber()) - + ", lineNumber=" - + QString::number(exception.lineNumber()) - + ", publicId=\"" + escapeStr(exception.publicId()) - + "\", systemId=\"" + escapeStr(exception.systemId()) - + "\", message=\"" + escapeStr(exception.message()) - + "\"})\n"; + + QString::number(exception.columnNumber()) + + ", lineNumber=" + + QString::number(exception.lineNumber()) + + ", publicId=\"" + escapeStr(exception.publicId()) + + "\", systemId=\"" + escapeStr(exception.systemId()) + + "\", message=\"" + escapeStr(exception.message()) + + "\"})\n"; return true; } @@ -285,49 +285,49 @@ bool ContentHandler::fatalError(const QXmlParseException & exception) .arg(exception.message()); m_result += nestPrefix(); m_result += "fatalError(exception={columnNumber=" - + QString::number(exception.columnNumber()) - + ", lineNumber=" - + QString::number(exception.lineNumber()) - + ", publicId=\"" + escapeStr(exception.publicId()) - + "\", systemId=\"" + escapeStr(exception.systemId()) - + "\", message=\"" + escapeStr(exception.message()) - + "\"})\n"; + + QString::number(exception.columnNumber()) + + ", lineNumber=" + + QString::number(exception.lineNumber()) + + ", publicId=\"" + escapeStr(exception.publicId()) + + "\", systemId=\"" + escapeStr(exception.systemId()) + + "\", message=\"" + escapeStr(exception.message()) + + "\"})\n"; return true; } -bool ContentHandler::notationDecl ( const QString & name, - const QString & publicId, - const QString & systemId ) +bool ContentHandler::notationDecl(const QString &name, + const QString &publicId, + const QString &systemId ) { m_result += nestPrefix(); m_result += "notationDecl(name=\"" + escapeStr(name) + "\", publicId=\"" - + escapeStr(publicId) + "\", systemId=\"" - + escapeStr(systemId) + "\")\n"; + + escapeStr(publicId) + "\", systemId=\"" + + escapeStr(systemId) + "\")\n"; return true; } -bool ContentHandler::unparsedEntityDecl ( const QString & name, - const QString & publicId, - const QString & systemId, - const QString & notationName ) +bool ContentHandler::unparsedEntityDecl(const QString &name, + const QString &publicId, + const QString &systemId, + const QString ¬ationName ) { m_result += nestPrefix(); m_result += "unparsedEntityDecl(name=\"" + escapeStr(name) - + "\", publicId=\"" + escapeStr(publicId) - + "\", systemId=\"" + escapeStr(systemId) - + "\", notationName=\"" + escapeStr(notationName) - + "\")\n"; + + "\", publicId=\"" + escapeStr(publicId) + + "\", systemId=\"" + escapeStr(systemId) + + "\", notationName=\"" + escapeStr(notationName) + + "\")\n"; return true; } -bool ContentHandler::resolveEntity(const QString & publicId, - const QString & systemId, - QXmlInputSource *&) +bool ContentHandler::resolveEntity(const QString &publicId, + const QString &systemId, + QXmlInputSource *&) { m_result += nestPrefix(); m_result += "resolveEntity(publicId=\"" + escapeStr(publicId) - + "\", systemId=\"" + escapeStr(systemId) - + "\", ret={})\n"; + + "\", systemId=\"" + escapeStr(systemId) + + "\", ret={})\n"; return true; } @@ -335,8 +335,8 @@ bool ContentHandler::startDTD ( const QString & name, const QString & publicId, { m_result += nestPrefix(); m_result += "startDTD(name=\"" + escapeStr(name) - + "\", publicId=\"" + escapeStr(publicId) - + "\", systemId=\"" + escapeStr(systemId) + "\")\n"; + + "\", publicId=\"" + escapeStr(publicId) + + "\", systemId=\"" + escapeStr(systemId) + "\")\n"; ++m_nest; return true; } @@ -388,37 +388,37 @@ bool ContentHandler::comment ( const QString & ch ) return true; } -bool ContentHandler::attributeDecl ( const QString & eName, - const QString & aName, - const QString & type, - const QString & valueDefault, - const QString & value ) +bool ContentHandler::attributeDecl(const QString &eName, + const QString &aName, + const QString &type, + const QString &valueDefault, + const QString &value) { m_result += nestPrefix(); m_result += "attributeDecl(eName=\"" + escapeStr(eName) + "\", aName=\"" - + escapeStr(aName) + "\", type=\"" + escapeStr(type) - + "\", valueDefault=\"" + escapeStr(valueDefault) - + "\", value=\"" + escapeStr(value) + "\")\n"; + + escapeStr(aName) + "\", type=\"" + escapeStr(type) + + "\", valueDefault=\"" + escapeStr(valueDefault) + + "\", value=\"" + escapeStr(value) + "\")\n"; return true; } -bool ContentHandler::internalEntityDecl ( const QString & name, - const QString & value ) +bool ContentHandler::internalEntityDecl(const QString &name, + const QString &value) { m_result += nestPrefix(); m_result += "internatlEntityDecl(name=\"" + escapeStr(name) - + "\", value=\"" + escapeStr(value) + "\")\n"; + + "\", value=\"" + escapeStr(value) + "\")\n"; return true; } -bool ContentHandler::externalEntityDecl ( const QString & name, - const QString & publicId, - const QString & systemId ) +bool ContentHandler::externalEntityDecl(const QString &name, + const QString &publicId, + const QString &systemId) { m_result += nestPrefix(); m_result += "externalEntityDecl(name=\"" + escapeStr(name) - + "\", publicId=\"" + escapeStr(publicId) - + "\", systemId=\"" + escapeStr(systemId) + "\")\n"; + + "\", publicId=\"" + escapeStr(publicId) + + "\", systemId=\"" + escapeStr(systemId) + "\")\n"; return true; } diff --git a/tests/auto/xml/sax/qxmlsimplereader/parser/parser.h b/tests/auto/xml/sax/qxmlsimplereader/parser/parser.h index b394f0f22d..e7af7b1cb5 100644 --- a/tests/auto/xml/sax/qxmlsimplereader/parser/parser.h +++ b/tests/auto/xml/sax/qxmlsimplereader/parser/parser.h @@ -49,16 +49,16 @@ class ContentHandler; class Parser : public QXmlSimpleReader { - public: - Parser(); - ~Parser(); +public: + Parser(); + ~Parser(); - bool parseFile(QFile *file); - QString result() const; - QString errorMsg() const; + bool parseFile(QFile *file); + QString result() const; + QString errorMsg() const; - private: - ContentHandler *handler; +private: + ContentHandler *handler; }; #endif diff --git a/tests/auto/xml/sax/qxmlsimplereader/tst_qxmlsimplereader.cpp b/tests/auto/xml/sax/qxmlsimplereader/tst_qxmlsimplereader.cpp index ed909946e6..6a3bcc7a7d 100644 --- a/tests/auto/xml/sax/qxmlsimplereader/tst_qxmlsimplereader.cpp +++ b/tests/auto/xml/sax/qxmlsimplereader/tst_qxmlsimplereader.cpp @@ -137,17 +137,17 @@ class tst_QXmlSimpleReader : public QObject Q_OBJECT public: - tst_QXmlSimpleReader(); - ~tst_QXmlSimpleReader(); + tst_QXmlSimpleReader(); + ~tst_QXmlSimpleReader(); private slots: void initTestCase(); - void testGoodXmlFile(); - void testGoodXmlFile_data(); - void testBadXmlFile(); - void testBadXmlFile_data(); - void testIncrementalParsing(); - void testIncrementalParsing_data(); + void testGoodXmlFile(); + void testGoodXmlFile_data(); + void testBadXmlFile(); + void testBadXmlFile_data(); + void testIncrementalParsing(); + void testIncrementalParsing_data(); void setDataQString(); void inputFromQIODevice(); void inputFromString(); @@ -278,8 +278,8 @@ static QStringList findXmlFiles(QString dir_name) QFileInfoList::const_iterator it = file_list.begin(); for (; it != file_list.end(); ++it) { - const QFileInfo &file_info = *it; - result.append(file_info.filePath()); + const QFileInfo &file_info = *it; + result.append(file_info.filePath()); } return result; @@ -289,21 +289,21 @@ static QStringList findXmlFiles(QString dir_name) void tst_QXmlSimpleReader::testGoodXmlFile_data() { const char * const good_data_dirs[] = { - "xmldocs/valid/sa", - "xmldocs/valid/not-sa", - "xmldocs/valid/ext-sa", - 0 + "xmldocs/valid/sa", + "xmldocs/valid/not-sa", + "xmldocs/valid/ext-sa", + 0 }; const char * const *d = good_data_dirs; QStringList good_file_list; for (; *d != 0; ++d) - good_file_list += findXmlFiles(*d); + good_file_list += findXmlFiles(*d); QTest::addColumn("file_name"); QStringList::const_iterator it = good_file_list.begin(); for (; it != good_file_list.end(); ++it) - QTest::newRow((*it).toLatin1()) << *it; + QTest::newRow((*it).toLatin1()) << *it; } void tst_QXmlSimpleReader::testGoodXmlFile() @@ -331,19 +331,19 @@ void tst_QXmlSimpleReader::testGoodXmlFile() void tst_QXmlSimpleReader::testBadXmlFile_data() { const char * const bad_data_dirs[] = { - "xmldocs/not-wf/sa", - 0 + "xmldocs/not-wf/sa", + 0 }; const char * const *d = bad_data_dirs; QStringList bad_file_list; for (; *d != 0; ++d) - bad_file_list += findXmlFiles(*d); + bad_file_list += findXmlFiles(*d); QTest::addColumn("file_name"); QStringList::const_iterator it = bad_file_list.begin(); for (; it != bad_file_list.end(); ++it) - QTest::newRow((*it).toLatin1()) << *it; + QTest::newRow((*it).toLatin1()) << *it; } void tst_QXmlSimpleReader::testBadXmlFile() @@ -413,31 +413,31 @@ void tst_QXmlSimpleReader::testIncrementalParsing_data() QTest::addColumn("chunkSize"); const char * const good_data_dirs[] = { - "xmldocs/valid/sa", - "xmldocs/valid/not-sa", - "xmldocs/valid/ext-sa", - 0 + "xmldocs/valid/sa", + "xmldocs/valid/not-sa", + "xmldocs/valid/ext-sa", + 0 }; const char * const *d = good_data_dirs; QStringList good_file_list; for (; *d != 0; ++d) - good_file_list += findXmlFiles(*d); + good_file_list += findXmlFiles(*d); for (int i=1; i<10; ++i) { - QStringList::const_iterator it = good_file_list.begin(); - for (; it != good_file_list.end(); ++it) { - if ( *it == "xmldocs/valid/sa/089.xml" ) - continue;// TODO: fails at the moment -- don't bother - if ( i==1 && ( - *it == "xmldocs/valid/sa/049.xml" || - *it == "xmldocs/valid/sa/050.xml" || - *it == "xmldocs/valid/sa/051.xml" || - *it == "xmldocs/valid/sa/052.xml" ) ) { - continue; // TODO: fails at the moment -- don't bother - } - QTest::newRow(QString("%1 %2").arg(*it).arg(i).toLatin1()) << *it << i; - } + QStringList::const_iterator it = good_file_list.begin(); + for (; it != good_file_list.end(); ++it) { + if ( *it == "xmldocs/valid/sa/089.xml" ) + continue;// TODO: fails at the moment -- don't bother + if ( i==1 && ( + *it == "xmldocs/valid/sa/049.xml" || + *it == "xmldocs/valid/sa/050.xml" || + *it == "xmldocs/valid/sa/051.xml" || + *it == "xmldocs/valid/sa/052.xml" ) ) { + continue; // TODO: fails at the moment -- don't bother + } + QTest::newRow(QString("%1 %2").arg(*it).arg(i).toLatin1()) << *it << i; + } } } @@ -459,7 +459,7 @@ void tst_QXmlSimpleReader::testIncrementalParsing() first = false; } else { QVERIFY(parser.parseContinue()); - } + } } // detect end of document QVERIFY(parser.parseContinue()); @@ -573,8 +573,8 @@ void tst_QXmlSimpleReader::inputFromSocket() const bool connectionSuccess = sock.waitForConnected(); if(!connectionSuccess) { - QTextStream out(stderr); - out << "QTcpSocket::errorString()" << sock.errorString(); + QTextStream out(stderr); + out << "QTcpSocket::errorString()" << sock.errorString(); } QVERIFY(connectionSuccess); diff --git a/tests/benchmarks/gui/graphicsview/qgraphicsview/chiptester/chiptester.cpp b/tests/benchmarks/gui/graphicsview/qgraphicsview/chiptester/chiptester.cpp index 4d6a8712fd..949965adf2 100644 --- a/tests/benchmarks/gui/graphicsview/qgraphicsview/chiptester/chiptester.cpp +++ b/tests/benchmarks/gui/graphicsview/qgraphicsview/chiptester/chiptester.cpp @@ -94,25 +94,25 @@ void ChipTester::paintEvent(QPaintEvent *event) { QGraphicsView::paintEvent(event); if (++npaints == 50) - eventLoop.quit(); + eventLoop.quit(); } void ChipTester::timerEvent(QTimerEvent *) { switch (operation) { case Rotate360: - rotate(1); - break; + rotate(1); + break; case ZoomInOut: { - qreal s = 0.05 + (npaints / 20.0); - setTransform(QTransform().scale(s, s)); - break; + qreal s = 0.05 + (npaints / 20.0); + setTransform(QTransform().scale(s, s)); + break; } case Translate: { - int offset = horizontalScrollBar()->minimum() - + (npaints % (horizontalScrollBar()->maximum() - horizontalScrollBar()->minimum())); - horizontalScrollBar()->setValue(offset); - break; + int offset = horizontalScrollBar()->minimum() + + (npaints % (horizontalScrollBar()->maximum() - horizontalScrollBar()->minimum())); + horizontalScrollBar()->setValue(offset); + break; } } } diff --git a/tests/benchmarks/gui/graphicsview/qgraphicsview/chiptester/chiptester.h b/tests/benchmarks/gui/graphicsview/qgraphicsview/chiptester/chiptester.h index 4e5b436f8d..38133f6078 100644 --- a/tests/benchmarks/gui/graphicsview/qgraphicsview/chiptester/chiptester.h +++ b/tests/benchmarks/gui/graphicsview/qgraphicsview/chiptester/chiptester.h @@ -57,9 +57,9 @@ class ChipTester : public QGraphicsView Q_OBJECT public: enum Operation { - Rotate360, - ZoomInOut, - Translate + Rotate360, + ZoomInOut, + Translate }; ChipTester(QWidget *parent = 0); diff --git a/tests/manual/bearerex/bearerex.cpp b/tests/manual/bearerex/bearerex.cpp index 185dbe123e..97a98bebc9 100644 --- a/tests/manual/bearerex/bearerex.cpp +++ b/tests/manual/bearerex/bearerex.cpp @@ -142,8 +142,8 @@ void BearerEx::on_showDetailsButton_clicked() } QNetworkConfiguration networkConfiguration = qvariant_cast(item->data(Qt::UserRole)); - DetailedInfoDialog infoDialog(&networkConfiguration,this); - infoDialog.exec(); + DetailedInfoDialog infoDialog(&networkConfiguration,this); + infoDialog.exec(); } void BearerEx::on_createSessionButton_clicked() @@ -236,12 +236,12 @@ DetailedInfoDialog::DetailedInfoDialog(QNetworkConfiguration* apNetworkConfigura rowCount = rowCount + apNetworkConfiguration->children().count(); } - tableWidget->setRowCount(rowCount); - tableWidget->setColumnWidth(1,250); - tableWidget->setItem(0, 0, new QTableWidgetItem(tr("Name"))); - tableWidget->setItem(0, 1, new QTableWidgetItem(apNetworkConfiguration->name())); - tableWidget->setItem(1, 0, new QTableWidgetItem(tr("Id"))); - tableWidget->setItem(1, 1, new QTableWidgetItem(apNetworkConfiguration->identifier())); + tableWidget->setRowCount(rowCount); + tableWidget->setColumnWidth(1,250); + tableWidget->setItem(0, 0, new QTableWidgetItem(tr("Name"))); + tableWidget->setItem(0, 1, new QTableWidgetItem(apNetworkConfiguration->name())); + tableWidget->setItem(1, 0, new QTableWidgetItem(tr("Id"))); + tableWidget->setItem(1, 1, new QTableWidgetItem(apNetworkConfiguration->identifier())); if (apNetworkConfiguration->type() == QNetworkConfiguration::ServiceNetwork) { for (int i=0; ichildren().count(); i++) { tableWidget->setItem(i+2, 0, new QTableWidgetItem(QString("IAP")+QString::number(i+1))); -- cgit v1.2.3 From a6046be428b39602089e1085e2e93d057059f70a Mon Sep 17 00:00:00 2001 From: Konstantin Ritt Date: Sun, 12 Jan 2014 15:53:08 +0200 Subject: Update UCD source files up to Unicode 6.3.0 Change-Id: I9ab58a659af1e758b172a24aa95bce1fea89c33d Reviewed-by: Lars Knoll --- .../corelib/tools/qchar/data/NormalizationTest.txt | 6 +- .../qtextboundaryfinder/data/GraphemeBreakTest.txt | 6 +- .../qtextboundaryfinder/data/LineBreakTest.txt | 18 +- .../qtextboundaryfinder/data/SentenceBreakTest.txt | 6 +- .../qtextboundaryfinder/data/WordBreakTest.txt | 978 ++++++++++++++------- 5 files changed, 654 insertions(+), 360 deletions(-) (limited to 'tests') diff --git a/tests/auto/corelib/tools/qchar/data/NormalizationTest.txt b/tests/auto/corelib/tools/qchar/data/NormalizationTest.txt index 806021a5a1..2dc2bd7aa3 100644 --- a/tests/auto/corelib/tools/qchar/data/NormalizationTest.txt +++ b/tests/auto/corelib/tools/qchar/data/NormalizationTest.txt @@ -1,8 +1,8 @@ -# NormalizationTest-6.2.0.txt -# Date: 2012-08-14, 17:54:58 GMT [MD] +# NormalizationTest-6.3.0.txt +# Date: 2012-12-20, 22:18:30 GMT [MD] # # Unicode Character Database -# Copyright (c) 1991-2012 Unicode, Inc. +# Copyright (c) 1991-2013 Unicode, Inc. # For terms of use, see http://www.unicode.org/terms_of_use.html # For documentation, see http://www.unicode.org/reports/tr44/ # diff --git a/tests/auto/corelib/tools/qtextboundaryfinder/data/GraphemeBreakTest.txt b/tests/auto/corelib/tools/qtextboundaryfinder/data/GraphemeBreakTest.txt index 90e15fed3e..88a98e7127 100644 --- a/tests/auto/corelib/tools/qtextboundaryfinder/data/GraphemeBreakTest.txt +++ b/tests/auto/corelib/tools/qtextboundaryfinder/data/GraphemeBreakTest.txt @@ -1,8 +1,8 @@ -# GraphemeBreakTest-6.2.0.txt -# Date: 2012-08-22, 12:41:15 GMT [MD] +# GraphemeBreakTest-6.3.0.txt +# Date: 2012-12-20, 22:18:29 GMT [MD] # # Unicode Character Database -# Copyright (c) 1991-2012 Unicode, Inc. +# Copyright (c) 1991-2013 Unicode, Inc. # For terms of use, see http://www.unicode.org/terms_of_use.html # For documentation, see http://www.unicode.org/reports/tr44/ # diff --git a/tests/auto/corelib/tools/qtextboundaryfinder/data/LineBreakTest.txt b/tests/auto/corelib/tools/qtextboundaryfinder/data/LineBreakTest.txt index ef6b44b559..339a43b7d2 100644 --- a/tests/auto/corelib/tools/qtextboundaryfinder/data/LineBreakTest.txt +++ b/tests/auto/corelib/tools/qtextboundaryfinder/data/LineBreakTest.txt @@ -1,8 +1,8 @@ -# LineBreakTest-6.2.0.txt -# Date: 2012-08-22, 12:41:17 GMT [MD] +# LineBreakTest-6.3.0.txt +# Date: 2012-12-20, 22:18:30 GMT [MD] # # Unicode Character Database -# Copyright (c) 1991-2012 Unicode, Inc. +# Copyright (c) 1991-2013 Unicode, Inc. # For terms of use, see http://www.unicode.org/terms_of_use.html # For documentation, see http://www.unicode.org/reports/tr44/ # @@ -6214,7 +6214,7 @@ × 3067 ÷ 4F7F ÷ # × [0.3] HIRAGANA LETTER DE (ID) ÷ [999.0] CJK UNIFIED IDEOGRAPH-4F7F (ID) ÷ [0.3] × 3059 ÷ 308B ÷ # × [0.3] HIRAGANA LETTER SU (ID) ÷ [999.0] HIRAGANA LETTER RU (ID) ÷ [0.3] × 306E ÷ 30D1 ÷ 30F3 ÷ # × [0.3] HIRAGANA LETTER NO (ID) ÷ [999.0] KATAKANA LETTER PA (ID) ÷ [999.0] KATAKANA LETTER N (ID) ÷ [0.3] -× 3046 ÷ 3000 ÷ 3048 ÷ 3000 ÷ 304A × 300D ÷ # × [0.3] HIRAGANA LETTER U (ID) ÷ [999.0] IDEOGRAPHIC SPACE (ID) ÷ [999.0] HIRAGANA LETTER E (ID) ÷ [999.0] IDEOGRAPHIC SPACE (ID) ÷ [999.0] HIRAGANA LETTER O (ID) × [13.02] RIGHT CORNER BRACKET (CL) ÷ [0.3] +× 3046 × 3000 ÷ 3048 × 3000 ÷ 304A × 300D ÷ # × [0.3] HIRAGANA LETTER U (ID) × [21.01] IDEOGRAPHIC SPACE (BA) ÷ [999.0] HIRAGANA LETTER E (ID) × [21.01] IDEOGRAPHIC SPACE (BA) ÷ [999.0] HIRAGANA LETTER O (ID) × [13.02] RIGHT CORNER BRACKET (CL) ÷ [0.3] × 308B × 0020 ÷ C740 ÷ C601 × 0020 ÷ 306B ÷ # × [0.3] HIRAGANA LETTER RU (ID) × [7.01] SPACE (SP) ÷ [18.0] HANGUL SYLLABLE EUN (H3) ÷ [999.0] HANGUL SYLLABLE YEONG (H3) × [7.01] SPACE (SP) ÷ [18.0] HIRAGANA LETTER NI (ID) ÷ [0.3] × 3057 × 3087 ÷ 3046 × 3002 ÷ # × [0.3] HIRAGANA LETTER SI (ID) × [21.03] HIRAGANA LETTER SMALL YO (CJ_NS) ÷ [999.0] HIRAGANA LETTER U (ID) × [13.02] IDEOGRAPHIC FULL STOP (CL) ÷ [0.3] × 30E0 ÷ 306E ÷ 4E00 ÷ # × [0.3] KATAKANA LETTER MU (ID) ÷ [999.0] HIRAGANA LETTER NO (ID) ÷ [999.0] CJK UNIFIED IDEOGRAPH-4E00 (ID) ÷ [0.3] @@ -6226,15 +6226,15 @@ × 0061 × 002E ÷ 0032 × 0020 ÷ # × [0.3] LATIN SMALL LETTER A (AL) × [13.02] FULL STOP (IS) ÷ [999.0] DIGIT TWO (NU) × [7.01] SPACE (SP) ÷ [0.3] × 0061 × 002E ÷ 0032 × 0020 ÷ 0915 ÷ # × [0.3] LATIN SMALL LETTER A (AL) × [13.02] FULL STOP (IS) ÷ [999.0] DIGIT TWO (NU) × [7.01] SPACE (SP) ÷ [18.0] DEVANAGARI LETTER KA (AL) ÷ [0.3] × 0061 × 002E ÷ 0032 × 0020 ÷ 672C ÷ # × [0.3] LATIN SMALL LETTER A (AL) × [13.02] FULL STOP (IS) ÷ [999.0] DIGIT TWO (NU) × [7.01] SPACE (SP) ÷ [18.0] CJK UNIFIED IDEOGRAPH-672C (ID) ÷ [0.3] -× 0061 × 002E ÷ 0032 ÷ 3000 ÷ 672C ÷ # × [0.3] LATIN SMALL LETTER A (AL) × [13.02] FULL STOP (IS) ÷ [999.0] DIGIT TWO (NU) ÷ [999.0] IDEOGRAPHIC SPACE (ID) ÷ [999.0] CJK UNIFIED IDEOGRAPH-672C (ID) ÷ [0.3] -× 0061 × 002E ÷ 0032 ÷ 3000 ÷ 307E ÷ # × [0.3] LATIN SMALL LETTER A (AL) × [13.02] FULL STOP (IS) ÷ [999.0] DIGIT TWO (NU) ÷ [999.0] IDEOGRAPHIC SPACE (ID) ÷ [999.0] HIRAGANA LETTER MA (ID) ÷ [0.3] -× 0061 × 002E ÷ 0032 ÷ 3000 ÷ 0033 ÷ # × [0.3] LATIN SMALL LETTER A (AL) × [13.02] FULL STOP (IS) ÷ [999.0] DIGIT TWO (NU) ÷ [999.0] IDEOGRAPHIC SPACE (ID) ÷ [999.0] DIGIT THREE (NU) ÷ [0.3] +× 0061 × 002E ÷ 0032 × 3000 ÷ 672C ÷ # × [0.3] LATIN SMALL LETTER A (AL) × [13.02] FULL STOP (IS) ÷ [999.0] DIGIT TWO (NU) × [21.01] IDEOGRAPHIC SPACE (BA) ÷ [999.0] CJK UNIFIED IDEOGRAPH-672C (ID) ÷ [0.3] +× 0061 × 002E ÷ 0032 × 3000 ÷ 307E ÷ # × [0.3] LATIN SMALL LETTER A (AL) × [13.02] FULL STOP (IS) ÷ [999.0] DIGIT TWO (NU) × [21.01] IDEOGRAPHIC SPACE (BA) ÷ [999.0] HIRAGANA LETTER MA (ID) ÷ [0.3] +× 0061 × 002E ÷ 0032 × 3000 ÷ 0033 ÷ # × [0.3] LATIN SMALL LETTER A (AL) × [13.02] FULL STOP (IS) ÷ [999.0] DIGIT TWO (NU) × [21.01] IDEOGRAPHIC SPACE (BA) ÷ [999.0] DIGIT THREE (NU) ÷ [0.3] × 0061 × 0062 × 002E × 0020 ÷ 0032 ÷ # × [0.3] LATIN SMALL LETTER A (AL) × [28.0] LATIN SMALL LETTER B (AL) × [13.02] FULL STOP (IS) × [7.01] SPACE (SP) ÷ [18.0] DIGIT TWO (NU) ÷ [0.3] × 0041 × 002E ÷ 0031 × 0020 ÷ BABB ÷ # × [0.3] LATIN CAPITAL LETTER A (AL) × [13.02] FULL STOP (IS) ÷ [999.0] DIGIT ONE (NU) × [7.01] SPACE (SP) ÷ [18.0] HANGUL SYLLABLE MOS (H3) ÷ [0.3] × BD24 ÷ C5B4 × 002E × 0020 ÷ 0041 × 002E ÷ 0032 × 0020 ÷ BCFC ÷ # × [0.3] HANGUL SYLLABLE BWASS (H3) ÷ [999.0] HANGUL SYLLABLE EO (H2) × [13.02] FULL STOP (IS) × [7.01] SPACE (SP) ÷ [18.0] LATIN CAPITAL LETTER A (AL) × [13.02] FULL STOP (IS) ÷ [999.0] DIGIT TWO (NU) × [7.01] SPACE (SP) ÷ [18.0] HANGUL SYLLABLE BOL (H3) ÷ [0.3] × BD10 ÷ C694 × 002E × 0020 ÷ 0041 × 002E ÷ 0033 × 0020 ÷ BABB ÷ # × [0.3] HANGUL SYLLABLE BWA (H2) ÷ [999.0] HANGUL SYLLABLE YO (H2) × [13.02] FULL STOP (IS) × [7.01] SPACE (SP) ÷ [18.0] LATIN CAPITAL LETTER A (AL) × [13.02] FULL STOP (IS) ÷ [999.0] DIGIT THREE (NU) × [7.01] SPACE (SP) ÷ [18.0] HANGUL SYLLABLE MOS (H3) ÷ [0.3] × C694 × 002E × 0020 ÷ 0041 × 002E ÷ 0034 × 0020 ÷ BABB ÷ # × [0.3] HANGUL SYLLABLE YO (H2) × [13.02] FULL STOP (IS) × [7.01] SPACE (SP) ÷ [18.0] LATIN CAPITAL LETTER A (AL) × [13.02] FULL STOP (IS) ÷ [999.0] DIGIT FOUR (NU) × [7.01] SPACE (SP) ÷ [18.0] HANGUL SYLLABLE MOS (H3) ÷ [0.3] -× 0061 × 002E ÷ 0032 ÷ 3000 ÷ 300C ÷ # × [0.3] LATIN SMALL LETTER A (AL) × [13.02] FULL STOP (IS) ÷ [999.0] DIGIT TWO (NU) ÷ [999.0] IDEOGRAPHIC SPACE (ID) ÷ [999.0] LEFT CORNER BRACKET (OP) ÷ [0.3] +× 0061 × 002E ÷ 0032 × 3000 ÷ 300C ÷ # × [0.3] LATIN SMALL LETTER A (AL) × [13.02] FULL STOP (IS) ÷ [999.0] DIGIT TWO (NU) × [21.01] IDEOGRAPHIC SPACE (BA) ÷ [999.0] LEFT CORNER BRACKET (OP) ÷ [0.3] × 306B ÷ 300C × 30D0 ÷ 0028 × 0062 × 0061 × 0029 × 300D ÷ 3084 ÷ 300C × 30B9 ÷ # × [0.3] HIRAGANA LETTER NI (ID) ÷ [999.0] LEFT CORNER BRACKET (OP) × [14.0] KATAKANA LETTER BA (ID) ÷ [999.0] LEFT PARENTHESIS (OP) × [14.0] LATIN SMALL LETTER B (AL) × [28.0] LATIN SMALL LETTER A (AL) × [13.02] RIGHT PARENTHESIS (CP) × [13.02] RIGHT CORNER BRACKET (CL) ÷ [999.0] HIRAGANA LETTER YA (ID) ÷ [999.0] LEFT CORNER BRACKET (OP) × [14.0] KATAKANA LETTER SU (ID) ÷ [0.3] × 308B ÷ 300C × 0055 × 004B ÷ 30DD ÷ 30F3 ÷ 30C9 × 300D × FF09 × 3001 ÷ 30A8 ÷ # × [0.3] HIRAGANA LETTER RU (ID) ÷ [999.0] LEFT CORNER BRACKET (OP) × [14.0] LATIN CAPITAL LETTER U (AL) × [28.0] LATIN CAPITAL LETTER K (AL) ÷ [999.0] KATAKANA LETTER PO (ID) ÷ [999.0] KATAKANA LETTER N (ID) ÷ [999.0] KATAKANA LETTER DO (ID) × [13.02] RIGHT CORNER BRACKET (CL) × [13.02] FULLWIDTH RIGHT PARENTHESIS (CL) × [13.02] IDEOGRAPHIC COMMA (CL) ÷ [999.0] KATAKANA LETTER E (ID) ÷ [0.3] × 306F × 3001 ÷ 300C × 003D × 0072 × 0061 × 006E × 0064 × 0028 × 0029 × 300D ÷ 3068 ÷ # × [0.3] HIRAGANA LETTER HA (ID) × [13.02] IDEOGRAPHIC COMMA (CL) ÷ [999.0] LEFT CORNER BRACKET (OP) × [14.0] EQUALS SIGN (AL) × [28.0] LATIN SMALL LETTER R (AL) × [28.0] LATIN SMALL LETTER A (AL) × [28.0] LATIN SMALL LETTER N (AL) × [28.0] LATIN SMALL LETTER D (AL) × [30.01] LEFT PARENTHESIS (OP) × [13.02] RIGHT PARENTHESIS (CP) × [13.02] RIGHT CORNER BRACKET (CL) ÷ [999.0] HIRAGANA LETTER TO (ID) ÷ [0.3] @@ -6243,7 +6243,7 @@ × 3066 ÷ 300C × BD24 ÷ C5B4 × 003F × 300D ÷ 3068 ÷ # × [0.3] HIRAGANA LETTER TE (ID) ÷ [999.0] LEFT CORNER BRACKET (OP) × [14.0] HANGUL SYLLABLE BWASS (H3) ÷ [999.0] HANGUL SYLLABLE EO (H2) × [13.01] QUESTION MARK (EX) × [13.02] RIGHT CORNER BRACKET (CL) ÷ [999.0] HIRAGANA LETTER TO (ID) ÷ [0.3] × 306E ÷ 300C × 305D ÷ # × [0.3] HIRAGANA LETTER NO (ID) ÷ [999.0] LEFT CORNER BRACKET (OP) × [14.0] HIRAGANA LETTER SO (ID) ÷ [0.3] × 306F ÷ 300C × 30A8 ÷ # × [0.3] HIRAGANA LETTER HA (ID) ÷ [999.0] LEFT CORNER BRACKET (OP) × [14.0] KATAKANA LETTER E (ID) ÷ [0.3] -× 4F8B × FF1A ÷ 300C × 3042 ÷ 3000 ÷ 3044 ÷ # × [0.3] CJK UNIFIED IDEOGRAPH-4F8B (ID) × [21.03] FULLWIDTH COLON (NS) ÷ [999.0] LEFT CORNER BRACKET (OP) × [14.0] HIRAGANA LETTER A (ID) ÷ [999.0] IDEOGRAPHIC SPACE (ID) ÷ [999.0] HIRAGANA LETTER I (ID) ÷ [0.3] +× 4F8B × FF1A ÷ 300C × 3042 × 3000 ÷ 3044 ÷ # × [0.3] CJK UNIFIED IDEOGRAPH-4F8B (ID) × [21.03] FULLWIDTH COLON (NS) ÷ [999.0] LEFT CORNER BRACKET (OP) × [14.0] HIRAGANA LETTER A (ID) × [21.01] IDEOGRAPHIC SPACE (BA) ÷ [999.0] HIRAGANA LETTER I (ID) ÷ [0.3] × 304F × 3001 ÷ 300C × D3C9 ÷ C591 ÷ C740 ÷ # × [0.3] HIRAGANA LETTER KU (ID) × [13.02] IDEOGRAPHIC COMMA (CL) ÷ [999.0] LEFT CORNER BRACKET (OP) × [14.0] HANGUL SYLLABLE PYEONG (H3) ÷ [999.0] HANGUL SYLLABLE YANG (H3) ÷ [999.0] HANGUL SYLLABLE EUN (H3) ÷ [0.3] × 306B ÷ 300C × C81C ÷ BAA9 ÷ 0028 × 984C ÷ 540D × 0029 ÷ C740 ÷ # × [0.3] HIRAGANA LETTER NI (ID) ÷ [999.0] LEFT CORNER BRACKET (OP) × [14.0] HANGUL SYLLABLE JE (H2) ÷ [999.0] HANGUL SYLLABLE MOG (H3) ÷ [999.0] LEFT PARENTHESIS (OP) × [14.0] CJK UNIFIED IDEOGRAPH-984C (ID) ÷ [999.0] CJK UNIFIED IDEOGRAPH-540D (ID) × [13.02] RIGHT PARENTHESIS (CP) ÷ [999.0] HANGUL SYLLABLE EUN (H3) ÷ [0.3] × 5178 ÷ 300E × 30A6 × 30A3 ÷ 30AD ÷ # × [0.3] CJK UNIFIED IDEOGRAPH-5178 (ID) ÷ [999.0] LEFT WHITE CORNER BRACKET (OP) × [14.0] KATAKANA LETTER U (ID) × [21.03] KATAKANA LETTER SMALL I (CJ_NS) ÷ [999.0] KATAKANA LETTER KI (ID) ÷ [0.3] diff --git a/tests/auto/corelib/tools/qtextboundaryfinder/data/SentenceBreakTest.txt b/tests/auto/corelib/tools/qtextboundaryfinder/data/SentenceBreakTest.txt index c2f79f1c66..eeba36c0e5 100644 --- a/tests/auto/corelib/tools/qtextboundaryfinder/data/SentenceBreakTest.txt +++ b/tests/auto/corelib/tools/qtextboundaryfinder/data/SentenceBreakTest.txt @@ -1,8 +1,8 @@ -# SentenceBreakTest-6.2.0.txt -# Date: 2012-08-22, 12:41:18 GMT [MD] +# SentenceBreakTest-6.3.0.txt +# Date: 2012-12-20, 22:18:42 GMT [MD] # # Unicode Character Database -# Copyright (c) 1991-2012 Unicode, Inc. +# Copyright (c) 1991-2013 Unicode, Inc. # For terms of use, see http://www.unicode.org/terms_of_use.html # For documentation, see http://www.unicode.org/reports/tr44/ # diff --git a/tests/auto/corelib/tools/qtextboundaryfinder/data/WordBreakTest.txt b/tests/auto/corelib/tools/qtextboundaryfinder/data/WordBreakTest.txt index 864dbcef18..953ee2b861 100644 --- a/tests/auto/corelib/tools/qtextboundaryfinder/data/WordBreakTest.txt +++ b/tests/auto/corelib/tools/qtextboundaryfinder/data/WordBreakTest.txt @@ -1,8 +1,8 @@ -# WordBreakTest-6.2.0.txt -# Date: 2012-08-22, 12:41:18 GMT [MD] +# WordBreakTest-6.3.0.txt +# Date: 2013-07-05, 14:09:03 GMT [MD] # # Unicode Character Database -# Copyright (c) 1991-2012 Unicode, Inc. +# Copyright (c) 1991-2013 Unicode, Inc. # For terms of use, see http://www.unicode.org/terms_of_use.html # For documentation, see http://www.unicode.org/reports/tr44/ # @@ -36,14 +36,20 @@ ÷ 0001 × 0308 ÷ 003A ÷ # ÷ [0.2] (Other) × [4.0] COMBINING DIAERESIS (Extend_FE) ÷ [999.0] COLON (MidLetter) ÷ [0.3] ÷ 0001 ÷ 002C ÷ # ÷ [0.2] (Other) ÷ [999.0] COMMA (MidNum) ÷ [0.3] ÷ 0001 × 0308 ÷ 002C ÷ # ÷ [0.2] (Other) × [4.0] COMBINING DIAERESIS (Extend_FE) ÷ [999.0] COMMA (MidNum) ÷ [0.3] -÷ 0001 ÷ 0027 ÷ # ÷ [0.2] (Other) ÷ [999.0] APOSTROPHE (MidNumLet) ÷ [0.3] -÷ 0001 × 0308 ÷ 0027 ÷ # ÷ [0.2] (Other) × [4.0] COMBINING DIAERESIS (Extend_FE) ÷ [999.0] APOSTROPHE (MidNumLet) ÷ [0.3] +÷ 0001 ÷ 002E ÷ # ÷ [0.2] (Other) ÷ [999.0] FULL STOP (MidNumLet) ÷ [0.3] +÷ 0001 × 0308 ÷ 002E ÷ # ÷ [0.2] (Other) × [4.0] COMBINING DIAERESIS (Extend_FE) ÷ [999.0] FULL STOP (MidNumLet) ÷ [0.3] ÷ 0001 ÷ 0030 ÷ # ÷ [0.2] (Other) ÷ [999.0] DIGIT ZERO (Numeric) ÷ [0.3] ÷ 0001 × 0308 ÷ 0030 ÷ # ÷ [0.2] (Other) × [4.0] COMBINING DIAERESIS (Extend_FE) ÷ [999.0] DIGIT ZERO (Numeric) ÷ [0.3] ÷ 0001 ÷ 005F ÷ # ÷ [0.2] (Other) ÷ [999.0] LOW LINE (ExtendNumLet) ÷ [0.3] ÷ 0001 × 0308 ÷ 005F ÷ # ÷ [0.2] (Other) × [4.0] COMBINING DIAERESIS (Extend_FE) ÷ [999.0] LOW LINE (ExtendNumLet) ÷ [0.3] ÷ 0001 ÷ 1F1E6 ÷ # ÷ [0.2] (Other) ÷ [999.0] REGIONAL INDICATOR SYMBOL LETTER A (Regional_Indicator) ÷ [0.3] ÷ 0001 × 0308 ÷ 1F1E6 ÷ # ÷ [0.2] (Other) × [4.0] COMBINING DIAERESIS (Extend_FE) ÷ [999.0] REGIONAL INDICATOR SYMBOL LETTER A (Regional_Indicator) ÷ [0.3] +÷ 0001 ÷ 05D0 ÷ # ÷ [0.2] (Other) ÷ [999.0] HEBREW LETTER ALEF (Hebrew_Letter) ÷ [0.3] +÷ 0001 × 0308 ÷ 05D0 ÷ # ÷ [0.2] (Other) × [4.0] COMBINING DIAERESIS (Extend_FE) ÷ [999.0] HEBREW LETTER ALEF (Hebrew_Letter) ÷ [0.3] +÷ 0001 ÷ 0022 ÷ # ÷ [0.2] (Other) ÷ [999.0] QUOTATION MARK (Double_Quote) ÷ [0.3] +÷ 0001 × 0308 ÷ 0022 ÷ # ÷ [0.2] (Other) × [4.0] COMBINING DIAERESIS (Extend_FE) ÷ [999.0] QUOTATION MARK (Double_Quote) ÷ [0.3] +÷ 0001 ÷ 0027 ÷ # ÷ [0.2] (Other) ÷ [999.0] APOSTROPHE (Single_Quote) ÷ [0.3] +÷ 0001 × 0308 ÷ 0027 ÷ # ÷ [0.2] (Other) × [4.0] COMBINING DIAERESIS (Extend_FE) ÷ [999.0] APOSTROPHE (Single_Quote) ÷ [0.3] ÷ 0001 × 00AD ÷ # ÷ [0.2] (Other) × [4.0] SOFT HYPHEN (Format_FE) ÷ [0.3] ÷ 0001 × 0308 × 00AD ÷ # ÷ [0.2] (Other) × [4.0] COMBINING DIAERESIS (Extend_FE) × [4.0] SOFT HYPHEN (Format_FE) ÷ [0.3] ÷ 0001 × 0300 ÷ # ÷ [0.2] (Other) × [4.0] COMBINING GRAVE ACCENT (Extend_FE) ÷ [0.3] @@ -52,16 +58,16 @@ ÷ 0001 × 0308 ÷ 0061 × 2060 ÷ # ÷ [0.2] (Other) × [4.0] COMBINING DIAERESIS (Extend_FE) ÷ [999.0] LATIN SMALL LETTER A (ALetter) × [4.0] WORD JOINER (Format_FE) ÷ [0.3] ÷ 0001 ÷ 0061 ÷ 003A ÷ # ÷ [0.2] (Other) ÷ [999.0] LATIN SMALL LETTER A (ALetter) ÷ [999.0] COLON (MidLetter) ÷ [0.3] ÷ 0001 × 0308 ÷ 0061 ÷ 003A ÷ # ÷ [0.2] (Other) × [4.0] COMBINING DIAERESIS (Extend_FE) ÷ [999.0] LATIN SMALL LETTER A (ALetter) ÷ [999.0] COLON (MidLetter) ÷ [0.3] -÷ 0001 ÷ 0061 ÷ 0027 ÷ # ÷ [0.2] (Other) ÷ [999.0] LATIN SMALL LETTER A (ALetter) ÷ [999.0] APOSTROPHE (MidNumLet) ÷ [0.3] -÷ 0001 × 0308 ÷ 0061 ÷ 0027 ÷ # ÷ [0.2] (Other) × [4.0] COMBINING DIAERESIS (Extend_FE) ÷ [999.0] LATIN SMALL LETTER A (ALetter) ÷ [999.0] APOSTROPHE (MidNumLet) ÷ [0.3] -÷ 0001 ÷ 0061 ÷ 0027 × 2060 ÷ # ÷ [0.2] (Other) ÷ [999.0] LATIN SMALL LETTER A (ALetter) ÷ [999.0] APOSTROPHE (MidNumLet) × [4.0] WORD JOINER (Format_FE) ÷ [0.3] -÷ 0001 × 0308 ÷ 0061 ÷ 0027 × 2060 ÷ # ÷ [0.2] (Other) × [4.0] COMBINING DIAERESIS (Extend_FE) ÷ [999.0] LATIN SMALL LETTER A (ALetter) ÷ [999.0] APOSTROPHE (MidNumLet) × [4.0] WORD JOINER (Format_FE) ÷ [0.3] +÷ 0001 ÷ 0061 ÷ 0027 ÷ # ÷ [0.2] (Other) ÷ [999.0] LATIN SMALL LETTER A (ALetter) ÷ [999.0] APOSTROPHE (Single_Quote) ÷ [0.3] +÷ 0001 × 0308 ÷ 0061 ÷ 0027 ÷ # ÷ [0.2] (Other) × [4.0] COMBINING DIAERESIS (Extend_FE) ÷ [999.0] LATIN SMALL LETTER A (ALetter) ÷ [999.0] APOSTROPHE (Single_Quote) ÷ [0.3] +÷ 0001 ÷ 0061 ÷ 0027 × 2060 ÷ # ÷ [0.2] (Other) ÷ [999.0] LATIN SMALL LETTER A (ALetter) ÷ [999.0] APOSTROPHE (Single_Quote) × [4.0] WORD JOINER (Format_FE) ÷ [0.3] +÷ 0001 × 0308 ÷ 0061 ÷ 0027 × 2060 ÷ # ÷ [0.2] (Other) × [4.0] COMBINING DIAERESIS (Extend_FE) ÷ [999.0] LATIN SMALL LETTER A (ALetter) ÷ [999.0] APOSTROPHE (Single_Quote) × [4.0] WORD JOINER (Format_FE) ÷ [0.3] ÷ 0001 ÷ 0061 ÷ 002C ÷ # ÷ [0.2] (Other) ÷ [999.0] LATIN SMALL LETTER A (ALetter) ÷ [999.0] COMMA (MidNum) ÷ [0.3] ÷ 0001 × 0308 ÷ 0061 ÷ 002C ÷ # ÷ [0.2] (Other) × [4.0] COMBINING DIAERESIS (Extend_FE) ÷ [999.0] LATIN SMALL LETTER A (ALetter) ÷ [999.0] COMMA (MidNum) ÷ [0.3] ÷ 0001 ÷ 0031 ÷ 003A ÷ # ÷ [0.2] (Other) ÷ [999.0] DIGIT ONE (Numeric) ÷ [999.0] COLON (MidLetter) ÷ [0.3] ÷ 0001 × 0308 ÷ 0031 ÷ 003A ÷ # ÷ [0.2] (Other) × [4.0] COMBINING DIAERESIS (Extend_FE) ÷ [999.0] DIGIT ONE (Numeric) ÷ [999.0] COLON (MidLetter) ÷ [0.3] -÷ 0001 ÷ 0031 ÷ 0027 ÷ # ÷ [0.2] (Other) ÷ [999.0] DIGIT ONE (Numeric) ÷ [999.0] APOSTROPHE (MidNumLet) ÷ [0.3] -÷ 0001 × 0308 ÷ 0031 ÷ 0027 ÷ # ÷ [0.2] (Other) × [4.0] COMBINING DIAERESIS (Extend_FE) ÷ [999.0] DIGIT ONE (Numeric) ÷ [999.0] APOSTROPHE (MidNumLet) ÷ [0.3] +÷ 0001 ÷ 0031 ÷ 0027 ÷ # ÷ [0.2] (Other) ÷ [999.0] DIGIT ONE (Numeric) ÷ [999.0] APOSTROPHE (Single_Quote) ÷ [0.3] +÷ 0001 × 0308 ÷ 0031 ÷ 0027 ÷ # ÷ [0.2] (Other) × [4.0] COMBINING DIAERESIS (Extend_FE) ÷ [999.0] DIGIT ONE (Numeric) ÷ [999.0] APOSTROPHE (Single_Quote) ÷ [0.3] ÷ 0001 ÷ 0031 ÷ 002C ÷ # ÷ [0.2] (Other) ÷ [999.0] DIGIT ONE (Numeric) ÷ [999.0] COMMA (MidNum) ÷ [0.3] ÷ 0001 × 0308 ÷ 0031 ÷ 002C ÷ # ÷ [0.2] (Other) × [4.0] COMBINING DIAERESIS (Extend_FE) ÷ [999.0] DIGIT ONE (Numeric) ÷ [999.0] COMMA (MidNum) ÷ [0.3] ÷ 0001 ÷ 0031 ÷ 002E × 2060 ÷ # ÷ [0.2] (Other) ÷ [999.0] DIGIT ONE (Numeric) ÷ [999.0] FULL STOP (MidNumLet) × [4.0] WORD JOINER (Format_FE) ÷ [0.3] @@ -82,14 +88,20 @@ ÷ 000D ÷ 0308 ÷ 003A ÷ # ÷ [0.2] (CR) ÷ [3.1] COMBINING DIAERESIS (Extend_FE) ÷ [999.0] COLON (MidLetter) ÷ [0.3] ÷ 000D ÷ 002C ÷ # ÷ [0.2] (CR) ÷ [3.1] COMMA (MidNum) ÷ [0.3] ÷ 000D ÷ 0308 ÷ 002C ÷ # ÷ [0.2] (CR) ÷ [3.1] COMBINING DIAERESIS (Extend_FE) ÷ [999.0] COMMA (MidNum) ÷ [0.3] -÷ 000D ÷ 0027 ÷ # ÷ [0.2] (CR) ÷ [3.1] APOSTROPHE (MidNumLet) ÷ [0.3] -÷ 000D ÷ 0308 ÷ 0027 ÷ # ÷ [0.2] (CR) ÷ [3.1] COMBINING DIAERESIS (Extend_FE) ÷ [999.0] APOSTROPHE (MidNumLet) ÷ [0.3] +÷ 000D ÷ 002E ÷ # ÷ [0.2] (CR) ÷ [3.1] FULL STOP (MidNumLet) ÷ [0.3] +÷ 000D ÷ 0308 ÷ 002E ÷ # ÷ [0.2] (CR) ÷ [3.1] COMBINING DIAERESIS (Extend_FE) ÷ [999.0] FULL STOP (MidNumLet) ÷ [0.3] ÷ 000D ÷ 0030 ÷ # ÷ [0.2] (CR) ÷ [3.1] DIGIT ZERO (Numeric) ÷ [0.3] ÷ 000D ÷ 0308 ÷ 0030 ÷ # ÷ [0.2] (CR) ÷ [3.1] COMBINING DIAERESIS (Extend_FE) ÷ [999.0] DIGIT ZERO (Numeric) ÷ [0.3] ÷ 000D ÷ 005F ÷ # ÷ [0.2] (CR) ÷ [3.1] LOW LINE (ExtendNumLet) ÷ [0.3] ÷ 000D ÷ 0308 ÷ 005F ÷ # ÷ [0.2] (CR) ÷ [3.1] COMBINING DIAERESIS (Extend_FE) ÷ [999.0] LOW LINE (ExtendNumLet) ÷ [0.3] ÷ 000D ÷ 1F1E6 ÷ # ÷ [0.2] (CR) ÷ [3.1] REGIONAL INDICATOR SYMBOL LETTER A (Regional_Indicator) ÷ [0.3] ÷ 000D ÷ 0308 ÷ 1F1E6 ÷ # ÷ [0.2] (CR) ÷ [3.1] COMBINING DIAERESIS (Extend_FE) ÷ [999.0] REGIONAL INDICATOR SYMBOL LETTER A (Regional_Indicator) ÷ [0.3] +÷ 000D ÷ 05D0 ÷ # ÷ [0.2] (CR) ÷ [3.1] HEBREW LETTER ALEF (Hebrew_Letter) ÷ [0.3] +÷ 000D ÷ 0308 ÷ 05D0 ÷ # ÷ [0.2] (CR) ÷ [3.1] COMBINING DIAERESIS (Extend_FE) ÷ [999.0] HEBREW LETTER ALEF (Hebrew_Letter) ÷ [0.3] +÷ 000D ÷ 0022 ÷ # ÷ [0.2] (CR) ÷ [3.1] QUOTATION MARK (Double_Quote) ÷ [0.3] +÷ 000D ÷ 0308 ÷ 0022 ÷ # ÷ [0.2] (CR) ÷ [3.1] COMBINING DIAERESIS (Extend_FE) ÷ [999.0] QUOTATION MARK (Double_Quote) ÷ [0.3] +÷ 000D ÷ 0027 ÷ # ÷ [0.2] (CR) ÷ [3.1] APOSTROPHE (Single_Quote) ÷ [0.3] +÷ 000D ÷ 0308 ÷ 0027 ÷ # ÷ [0.2] (CR) ÷ [3.1] COMBINING DIAERESIS (Extend_FE) ÷ [999.0] APOSTROPHE (Single_Quote) ÷ [0.3] ÷ 000D ÷ 00AD ÷ # ÷ [0.2] (CR) ÷ [3.1] SOFT HYPHEN (Format_FE) ÷ [0.3] ÷ 000D ÷ 0308 × 00AD ÷ # ÷ [0.2] (CR) ÷ [3.1] COMBINING DIAERESIS (Extend_FE) × [4.0] SOFT HYPHEN (Format_FE) ÷ [0.3] ÷ 000D ÷ 0300 ÷ # ÷ [0.2] (CR) ÷ [3.1] COMBINING GRAVE ACCENT (Extend_FE) ÷ [0.3] @@ -98,16 +110,16 @@ ÷ 000D ÷ 0308 ÷ 0061 × 2060 ÷ # ÷ [0.2] (CR) ÷ [3.1] COMBINING DIAERESIS (Extend_FE) ÷ [999.0] LATIN SMALL LETTER A (ALetter) × [4.0] WORD JOINER (Format_FE) ÷ [0.3] ÷ 000D ÷ 0061 ÷ 003A ÷ # ÷ [0.2] (CR) ÷ [3.1] LATIN SMALL LETTER A (ALetter) ÷ [999.0] COLON (MidLetter) ÷ [0.3] ÷ 000D ÷ 0308 ÷ 0061 ÷ 003A ÷ # ÷ [0.2] (CR) ÷ [3.1] COMBINING DIAERESIS (Extend_FE) ÷ [999.0] LATIN SMALL LETTER A (ALetter) ÷ [999.0] COLON (MidLetter) ÷ [0.3] -÷ 000D ÷ 0061 ÷ 0027 ÷ # ÷ [0.2] (CR) ÷ [3.1] LATIN SMALL LETTER A (ALetter) ÷ [999.0] APOSTROPHE (MidNumLet) ÷ [0.3] -÷ 000D ÷ 0308 ÷ 0061 ÷ 0027 ÷ # ÷ [0.2] (CR) ÷ [3.1] COMBINING DIAERESIS (Extend_FE) ÷ [999.0] LATIN SMALL LETTER A (ALetter) ÷ [999.0] APOSTROPHE (MidNumLet) ÷ [0.3] -÷ 000D ÷ 0061 ÷ 0027 × 2060 ÷ # ÷ [0.2] (CR) ÷ [3.1] LATIN SMALL LETTER A (ALetter) ÷ [999.0] APOSTROPHE (MidNumLet) × [4.0] WORD JOINER (Format_FE) ÷ [0.3] -÷ 000D ÷ 0308 ÷ 0061 ÷ 0027 × 2060 ÷ # ÷ [0.2] (CR) ÷ [3.1] COMBINING DIAERESIS (Extend_FE) ÷ [999.0] LATIN SMALL LETTER A (ALetter) ÷ [999.0] APOSTROPHE (MidNumLet) × [4.0] WORD JOINER (Format_FE) ÷ [0.3] +÷ 000D ÷ 0061 ÷ 0027 ÷ # ÷ [0.2] (CR) ÷ [3.1] LATIN SMALL LETTER A (ALetter) ÷ [999.0] APOSTROPHE (Single_Quote) ÷ [0.3] +÷ 000D ÷ 0308 ÷ 0061 ÷ 0027 ÷ # ÷ [0.2] (CR) ÷ [3.1] COMBINING DIAERESIS (Extend_FE) ÷ [999.0] LATIN SMALL LETTER A (ALetter) ÷ [999.0] APOSTROPHE (Single_Quote) ÷ [0.3] +÷ 000D ÷ 0061 ÷ 0027 × 2060 ÷ # ÷ [0.2] (CR) ÷ [3.1] LATIN SMALL LETTER A (ALetter) ÷ [999.0] APOSTROPHE (Single_Quote) × [4.0] WORD JOINER (Format_FE) ÷ [0.3] +÷ 000D ÷ 0308 ÷ 0061 ÷ 0027 × 2060 ÷ # ÷ [0.2] (CR) ÷ [3.1] COMBINING DIAERESIS (Extend_FE) ÷ [999.0] LATIN SMALL LETTER A (ALetter) ÷ [999.0] APOSTROPHE (Single_Quote) × [4.0] WORD JOINER (Format_FE) ÷ [0.3] ÷ 000D ÷ 0061 ÷ 002C ÷ # ÷ [0.2] (CR) ÷ [3.1] LATIN SMALL LETTER A (ALetter) ÷ [999.0] COMMA (MidNum) ÷ [0.3] ÷ 000D ÷ 0308 ÷ 0061 ÷ 002C ÷ # ÷ [0.2] (CR) ÷ [3.1] COMBINING DIAERESIS (Extend_FE) ÷ [999.0] LATIN SMALL LETTER A (ALetter) ÷ [999.0] COMMA (MidNum) ÷ [0.3] ÷ 000D ÷ 0031 ÷ 003A ÷ # ÷ [0.2] (CR) ÷ [3.1] DIGIT ONE (Numeric) ÷ [999.0] COLON (MidLetter) ÷ [0.3] ÷ 000D ÷ 0308 ÷ 0031 ÷ 003A ÷ # ÷ [0.2] (CR) ÷ [3.1] COMBINING DIAERESIS (Extend_FE) ÷ [999.0] DIGIT ONE (Numeric) ÷ [999.0] COLON (MidLetter) ÷ [0.3] -÷ 000D ÷ 0031 ÷ 0027 ÷ # ÷ [0.2] (CR) ÷ [3.1] DIGIT ONE (Numeric) ÷ [999.0] APOSTROPHE (MidNumLet) ÷ [0.3] -÷ 000D ÷ 0308 ÷ 0031 ÷ 0027 ÷ # ÷ [0.2] (CR) ÷ [3.1] COMBINING DIAERESIS (Extend_FE) ÷ [999.0] DIGIT ONE (Numeric) ÷ [999.0] APOSTROPHE (MidNumLet) ÷ [0.3] +÷ 000D ÷ 0031 ÷ 0027 ÷ # ÷ [0.2] (CR) ÷ [3.1] DIGIT ONE (Numeric) ÷ [999.0] APOSTROPHE (Single_Quote) ÷ [0.3] +÷ 000D ÷ 0308 ÷ 0031 ÷ 0027 ÷ # ÷ [0.2] (CR) ÷ [3.1] COMBINING DIAERESIS (Extend_FE) ÷ [999.0] DIGIT ONE (Numeric) ÷ [999.0] APOSTROPHE (Single_Quote) ÷ [0.3] ÷ 000D ÷ 0031 ÷ 002C ÷ # ÷ [0.2] (CR) ÷ [3.1] DIGIT ONE (Numeric) ÷ [999.0] COMMA (MidNum) ÷ [0.3] ÷ 000D ÷ 0308 ÷ 0031 ÷ 002C ÷ # ÷ [0.2] (CR) ÷ [3.1] COMBINING DIAERESIS (Extend_FE) ÷ [999.0] DIGIT ONE (Numeric) ÷ [999.0] COMMA (MidNum) ÷ [0.3] ÷ 000D ÷ 0031 ÷ 002E × 2060 ÷ # ÷ [0.2] (CR) ÷ [3.1] DIGIT ONE (Numeric) ÷ [999.0] FULL STOP (MidNumLet) × [4.0] WORD JOINER (Format_FE) ÷ [0.3] @@ -128,14 +140,20 @@ ÷ 000A ÷ 0308 ÷ 003A ÷ # ÷ [0.2] (LF) ÷ [3.1] COMBINING DIAERESIS (Extend_FE) ÷ [999.0] COLON (MidLetter) ÷ [0.3] ÷ 000A ÷ 002C ÷ # ÷ [0.2] (LF) ÷ [3.1] COMMA (MidNum) ÷ [0.3] ÷ 000A ÷ 0308 ÷ 002C ÷ # ÷ [0.2] (LF) ÷ [3.1] COMBINING DIAERESIS (Extend_FE) ÷ [999.0] COMMA (MidNum) ÷ [0.3] -÷ 000A ÷ 0027 ÷ # ÷ [0.2] (LF) ÷ [3.1] APOSTROPHE (MidNumLet) ÷ [0.3] -÷ 000A ÷ 0308 ÷ 0027 ÷ # ÷ [0.2] (LF) ÷ [3.1] COMBINING DIAERESIS (Extend_FE) ÷ [999.0] APOSTROPHE (MidNumLet) ÷ [0.3] +÷ 000A ÷ 002E ÷ # ÷ [0.2] (LF) ÷ [3.1] FULL STOP (MidNumLet) ÷ [0.3] +÷ 000A ÷ 0308 ÷ 002E ÷ # ÷ [0.2] (LF) ÷ [3.1] COMBINING DIAERESIS (Extend_FE) ÷ [999.0] FULL STOP (MidNumLet) ÷ [0.3] ÷ 000A ÷ 0030 ÷ # ÷ [0.2] (LF) ÷ [3.1] DIGIT ZERO (Numeric) ÷ [0.3] ÷ 000A ÷ 0308 ÷ 0030 ÷ # ÷ [0.2] (LF) ÷ [3.1] COMBINING DIAERESIS (Extend_FE) ÷ [999.0] DIGIT ZERO (Numeric) ÷ [0.3] ÷ 000A ÷ 005F ÷ # ÷ [0.2] (LF) ÷ [3.1] LOW LINE (ExtendNumLet) ÷ [0.3] ÷ 000A ÷ 0308 ÷ 005F ÷ # ÷ [0.2] (LF) ÷ [3.1] COMBINING DIAERESIS (Extend_FE) ÷ [999.0] LOW LINE (ExtendNumLet) ÷ [0.3] ÷ 000A ÷ 1F1E6 ÷ # ÷ [0.2] (LF) ÷ [3.1] REGIONAL INDICATOR SYMBOL LETTER A (Regional_Indicator) ÷ [0.3] ÷ 000A ÷ 0308 ÷ 1F1E6 ÷ # ÷ [0.2] (LF) ÷ [3.1] COMBINING DIAERESIS (Extend_FE) ÷ [999.0] REGIONAL INDICATOR SYMBOL LETTER A (Regional_Indicator) ÷ [0.3] +÷ 000A ÷ 05D0 ÷ # ÷ [0.2] (LF) ÷ [3.1] HEBREW LETTER ALEF (Hebrew_Letter) ÷ [0.3] +÷ 000A ÷ 0308 ÷ 05D0 ÷ # ÷ [0.2] (LF) ÷ [3.1] COMBINING DIAERESIS (Extend_FE) ÷ [999.0] HEBREW LETTER ALEF (Hebrew_Letter) ÷ [0.3] +÷ 000A ÷ 0022 ÷ # ÷ [0.2] (LF) ÷ [3.1] QUOTATION MARK (Double_Quote) ÷ [0.3] +÷ 000A ÷ 0308 ÷ 0022 ÷ # ÷ [0.2] (LF) ÷ [3.1] COMBINING DIAERESIS (Extend_FE) ÷ [999.0] QUOTATION MARK (Double_Quote) ÷ [0.3] +÷ 000A ÷ 0027 ÷ # ÷ [0.2] (LF) ÷ [3.1] APOSTROPHE (Single_Quote) ÷ [0.3] +÷ 000A ÷ 0308 ÷ 0027 ÷ # ÷ [0.2] (LF) ÷ [3.1] COMBINING DIAERESIS (Extend_FE) ÷ [999.0] APOSTROPHE (Single_Quote) ÷ [0.3] ÷ 000A ÷ 00AD ÷ # ÷ [0.2] (LF) ÷ [3.1] SOFT HYPHEN (Format_FE) ÷ [0.3] ÷ 000A ÷ 0308 × 00AD ÷ # ÷ [0.2] (LF) ÷ [3.1] COMBINING DIAERESIS (Extend_FE) × [4.0] SOFT HYPHEN (Format_FE) ÷ [0.3] ÷ 000A ÷ 0300 ÷ # ÷ [0.2] (LF) ÷ [3.1] COMBINING GRAVE ACCENT (Extend_FE) ÷ [0.3] @@ -144,16 +162,16 @@ ÷ 000A ÷ 0308 ÷ 0061 × 2060 ÷ # ÷ [0.2] (LF) ÷ [3.1] COMBINING DIAERESIS (Extend_FE) ÷ [999.0] LATIN SMALL LETTER A (ALetter) × [4.0] WORD JOINER (Format_FE) ÷ [0.3] ÷ 000A ÷ 0061 ÷ 003A ÷ # ÷ [0.2] (LF) ÷ [3.1] LATIN SMALL LETTER A (ALetter) ÷ [999.0] COLON (MidLetter) ÷ [0.3] ÷ 000A ÷ 0308 ÷ 0061 ÷ 003A ÷ # ÷ [0.2] (LF) ÷ [3.1] COMBINING DIAERESIS (Extend_FE) ÷ [999.0] LATIN SMALL LETTER A (ALetter) ÷ [999.0] COLON (MidLetter) ÷ [0.3] -÷ 000A ÷ 0061 ÷ 0027 ÷ # ÷ [0.2] (LF) ÷ [3.1] LATIN SMALL LETTER A (ALetter) ÷ [999.0] APOSTROPHE (MidNumLet) ÷ [0.3] -÷ 000A ÷ 0308 ÷ 0061 ÷ 0027 ÷ # ÷ [0.2] (LF) ÷ [3.1] COMBINING DIAERESIS (Extend_FE) ÷ [999.0] LATIN SMALL LETTER A (ALetter) ÷ [999.0] APOSTROPHE (MidNumLet) ÷ [0.3] -÷ 000A ÷ 0061 ÷ 0027 × 2060 ÷ # ÷ [0.2] (LF) ÷ [3.1] LATIN SMALL LETTER A (ALetter) ÷ [999.0] APOSTROPHE (MidNumLet) × [4.0] WORD JOINER (Format_FE) ÷ [0.3] -÷ 000A ÷ 0308 ÷ 0061 ÷ 0027 × 2060 ÷ # ÷ [0.2] (LF) ÷ [3.1] COMBINING DIAERESIS (Extend_FE) ÷ [999.0] LATIN SMALL LETTER A (ALetter) ÷ [999.0] APOSTROPHE (MidNumLet) × [4.0] WORD JOINER (Format_FE) ÷ [0.3] +÷ 000A ÷ 0061 ÷ 0027 ÷ # ÷ [0.2] (LF) ÷ [3.1] LATIN SMALL LETTER A (ALetter) ÷ [999.0] APOSTROPHE (Single_Quote) ÷ [0.3] +÷ 000A ÷ 0308 ÷ 0061 ÷ 0027 ÷ # ÷ [0.2] (LF) ÷ [3.1] COMBINING DIAERESIS (Extend_FE) ÷ [999.0] LATIN SMALL LETTER A (ALetter) ÷ [999.0] APOSTROPHE (Single_Quote) ÷ [0.3] +÷ 000A ÷ 0061 ÷ 0027 × 2060 ÷ # ÷ [0.2] (LF) ÷ [3.1] LATIN SMALL LETTER A (ALetter) ÷ [999.0] APOSTROPHE (Single_Quote) × [4.0] WORD JOINER (Format_FE) ÷ [0.3] +÷ 000A ÷ 0308 ÷ 0061 ÷ 0027 × 2060 ÷ # ÷ [0.2] (LF) ÷ [3.1] COMBINING DIAERESIS (Extend_FE) ÷ [999.0] LATIN SMALL LETTER A (ALetter) ÷ [999.0] APOSTROPHE (Single_Quote) × [4.0] WORD JOINER (Format_FE) ÷ [0.3] ÷ 000A ÷ 0061 ÷ 002C ÷ # ÷ [0.2] (LF) ÷ [3.1] LATIN SMALL LETTER A (ALetter) ÷ [999.0] COMMA (MidNum) ÷ [0.3] ÷ 000A ÷ 0308 ÷ 0061 ÷ 002C ÷ # ÷ [0.2] (LF) ÷ [3.1] COMBINING DIAERESIS (Extend_FE) ÷ [999.0] LATIN SMALL LETTER A (ALetter) ÷ [999.0] COMMA (MidNum) ÷ [0.3] ÷ 000A ÷ 0031 ÷ 003A ÷ # ÷ [0.2] (LF) ÷ [3.1] DIGIT ONE (Numeric) ÷ [999.0] COLON (MidLetter) ÷ [0.3] ÷ 000A ÷ 0308 ÷ 0031 ÷ 003A ÷ # ÷ [0.2] (LF) ÷ [3.1] COMBINING DIAERESIS (Extend_FE) ÷ [999.0] DIGIT ONE (Numeric) ÷ [999.0] COLON (MidLetter) ÷ [0.3] -÷ 000A ÷ 0031 ÷ 0027 ÷ # ÷ [0.2] (LF) ÷ [3.1] DIGIT ONE (Numeric) ÷ [999.0] APOSTROPHE (MidNumLet) ÷ [0.3] -÷ 000A ÷ 0308 ÷ 0031 ÷ 0027 ÷ # ÷ [0.2] (LF) ÷ [3.1] COMBINING DIAERESIS (Extend_FE) ÷ [999.0] DIGIT ONE (Numeric) ÷ [999.0] APOSTROPHE (MidNumLet) ÷ [0.3] +÷ 000A ÷ 0031 ÷ 0027 ÷ # ÷ [0.2] (LF) ÷ [3.1] DIGIT ONE (Numeric) ÷ [999.0] APOSTROPHE (Single_Quote) ÷ [0.3] +÷ 000A ÷ 0308 ÷ 0031 ÷ 0027 ÷ # ÷ [0.2] (LF) ÷ [3.1] COMBINING DIAERESIS (Extend_FE) ÷ [999.0] DIGIT ONE (Numeric) ÷ [999.0] APOSTROPHE (Single_Quote) ÷ [0.3] ÷ 000A ÷ 0031 ÷ 002C ÷ # ÷ [0.2] (LF) ÷ [3.1] DIGIT ONE (Numeric) ÷ [999.0] COMMA (MidNum) ÷ [0.3] ÷ 000A ÷ 0308 ÷ 0031 ÷ 002C ÷ # ÷ [0.2] (LF) ÷ [3.1] COMBINING DIAERESIS (Extend_FE) ÷ [999.0] DIGIT ONE (Numeric) ÷ [999.0] COMMA (MidNum) ÷ [0.3] ÷ 000A ÷ 0031 ÷ 002E × 2060 ÷ # ÷ [0.2] (LF) ÷ [3.1] DIGIT ONE (Numeric) ÷ [999.0] FULL STOP (MidNumLet) × [4.0] WORD JOINER (Format_FE) ÷ [0.3] @@ -174,14 +192,20 @@ ÷ 000B ÷ 0308 ÷ 003A ÷ # ÷ [0.2] (Newline) ÷ [3.1] COMBINING DIAERESIS (Extend_FE) ÷ [999.0] COLON (MidLetter) ÷ [0.3] ÷ 000B ÷ 002C ÷ # ÷ [0.2] (Newline) ÷ [3.1] COMMA (MidNum) ÷ [0.3] ÷ 000B ÷ 0308 ÷ 002C ÷ # ÷ [0.2] (Newline) ÷ [3.1] COMBINING DIAERESIS (Extend_FE) ÷ [999.0] COMMA (MidNum) ÷ [0.3] -÷ 000B ÷ 0027 ÷ # ÷ [0.2] (Newline) ÷ [3.1] APOSTROPHE (MidNumLet) ÷ [0.3] -÷ 000B ÷ 0308 ÷ 0027 ÷ # ÷ [0.2] (Newline) ÷ [3.1] COMBINING DIAERESIS (Extend_FE) ÷ [999.0] APOSTROPHE (MidNumLet) ÷ [0.3] +÷ 000B ÷ 002E ÷ # ÷ [0.2] (Newline) ÷ [3.1] FULL STOP (MidNumLet) ÷ [0.3] +÷ 000B ÷ 0308 ÷ 002E ÷ # ÷ [0.2] (Newline) ÷ [3.1] COMBINING DIAERESIS (Extend_FE) ÷ [999.0] FULL STOP (MidNumLet) ÷ [0.3] ÷ 000B ÷ 0030 ÷ # ÷ [0.2] (Newline) ÷ [3.1] DIGIT ZERO (Numeric) ÷ [0.3] ÷ 000B ÷ 0308 ÷ 0030 ÷ # ÷ [0.2] (Newline) ÷ [3.1] COMBINING DIAERESIS (Extend_FE) ÷ [999.0] DIGIT ZERO (Numeric) ÷ [0.3] ÷ 000B ÷ 005F ÷ # ÷ [0.2] (Newline) ÷ [3.1] LOW LINE (ExtendNumLet) ÷ [0.3] ÷ 000B ÷ 0308 ÷ 005F ÷ # ÷ [0.2] (Newline) ÷ [3.1] COMBINING DIAERESIS (Extend_FE) ÷ [999.0] LOW LINE (ExtendNumLet) ÷ [0.3] ÷ 000B ÷ 1F1E6 ÷ # ÷ [0.2] (Newline) ÷ [3.1] REGIONAL INDICATOR SYMBOL LETTER A (Regional_Indicator) ÷ [0.3] ÷ 000B ÷ 0308 ÷ 1F1E6 ÷ # ÷ [0.2] (Newline) ÷ [3.1] COMBINING DIAERESIS (Extend_FE) ÷ [999.0] REGIONAL INDICATOR SYMBOL LETTER A (Regional_Indicator) ÷ [0.3] +÷ 000B ÷ 05D0 ÷ # ÷ [0.2] (Newline) ÷ [3.1] HEBREW LETTER ALEF (Hebrew_Letter) ÷ [0.3] +÷ 000B ÷ 0308 ÷ 05D0 ÷ # ÷ [0.2] (Newline) ÷ [3.1] COMBINING DIAERESIS (Extend_FE) ÷ [999.0] HEBREW LETTER ALEF (Hebrew_Letter) ÷ [0.3] +÷ 000B ÷ 0022 ÷ # ÷ [0.2] (Newline) ÷ [3.1] QUOTATION MARK (Double_Quote) ÷ [0.3] +÷ 000B ÷ 0308 ÷ 0022 ÷ # ÷ [0.2] (Newline) ÷ [3.1] COMBINING DIAERESIS (Extend_FE) ÷ [999.0] QUOTATION MARK (Double_Quote) ÷ [0.3] +÷ 000B ÷ 0027 ÷ # ÷ [0.2] (Newline) ÷ [3.1] APOSTROPHE (Single_Quote) ÷ [0.3] +÷ 000B ÷ 0308 ÷ 0027 ÷ # ÷ [0.2] (Newline) ÷ [3.1] COMBINING DIAERESIS (Extend_FE) ÷ [999.0] APOSTROPHE (Single_Quote) ÷ [0.3] ÷ 000B ÷ 00AD ÷ # ÷ [0.2] (Newline) ÷ [3.1] SOFT HYPHEN (Format_FE) ÷ [0.3] ÷ 000B ÷ 0308 × 00AD ÷ # ÷ [0.2] (Newline) ÷ [3.1] COMBINING DIAERESIS (Extend_FE) × [4.0] SOFT HYPHEN (Format_FE) ÷ [0.3] ÷ 000B ÷ 0300 ÷ # ÷ [0.2] (Newline) ÷ [3.1] COMBINING GRAVE ACCENT (Extend_FE) ÷ [0.3] @@ -190,16 +214,16 @@ ÷ 000B ÷ 0308 ÷ 0061 × 2060 ÷ # ÷ [0.2] (Newline) ÷ [3.1] COMBINING DIAERESIS (Extend_FE) ÷ [999.0] LATIN SMALL LETTER A (ALetter) × [4.0] WORD JOINER (Format_FE) ÷ [0.3] ÷ 000B ÷ 0061 ÷ 003A ÷ # ÷ [0.2] (Newline) ÷ [3.1] LATIN SMALL LETTER A (ALetter) ÷ [999.0] COLON (MidLetter) ÷ [0.3] ÷ 000B ÷ 0308 ÷ 0061 ÷ 003A ÷ # ÷ [0.2] (Newline) ÷ [3.1] COMBINING DIAERESIS (Extend_FE) ÷ [999.0] LATIN SMALL LETTER A (ALetter) ÷ [999.0] COLON (MidLetter) ÷ [0.3] -÷ 000B ÷ 0061 ÷ 0027 ÷ # ÷ [0.2] (Newline) ÷ [3.1] LATIN SMALL LETTER A (ALetter) ÷ [999.0] APOSTROPHE (MidNumLet) ÷ [0.3] -÷ 000B ÷ 0308 ÷ 0061 ÷ 0027 ÷ # ÷ [0.2] (Newline) ÷ [3.1] COMBINING DIAERESIS (Extend_FE) ÷ [999.0] LATIN SMALL LETTER A (ALetter) ÷ [999.0] APOSTROPHE (MidNumLet) ÷ [0.3] -÷ 000B ÷ 0061 ÷ 0027 × 2060 ÷ # ÷ [0.2] (Newline) ÷ [3.1] LATIN SMALL LETTER A (ALetter) ÷ [999.0] APOSTROPHE (MidNumLet) × [4.0] WORD JOINER (Format_FE) ÷ [0.3] -÷ 000B ÷ 0308 ÷ 0061 ÷ 0027 × 2060 ÷ # ÷ [0.2] (Newline) ÷ [3.1] COMBINING DIAERESIS (Extend_FE) ÷ [999.0] LATIN SMALL LETTER A (ALetter) ÷ [999.0] APOSTROPHE (MidNumLet) × [4.0] WORD JOINER (Format_FE) ÷ [0.3] +÷ 000B ÷ 0061 ÷ 0027 ÷ # ÷ [0.2] (Newline) ÷ [3.1] LATIN SMALL LETTER A (ALetter) ÷ [999.0] APOSTROPHE (Single_Quote) ÷ [0.3] +÷ 000B ÷ 0308 ÷ 0061 ÷ 0027 ÷ # ÷ [0.2] (Newline) ÷ [3.1] COMBINING DIAERESIS (Extend_FE) ÷ [999.0] LATIN SMALL LETTER A (ALetter) ÷ [999.0] APOSTROPHE (Single_Quote) ÷ [0.3] +÷ 000B ÷ 0061 ÷ 0027 × 2060 ÷ # ÷ [0.2] (Newline) ÷ [3.1] LATIN SMALL LETTER A (ALetter) ÷ [999.0] APOSTROPHE (Single_Quote) × [4.0] WORD JOINER (Format_FE) ÷ [0.3] +÷ 000B ÷ 0308 ÷ 0061 ÷ 0027 × 2060 ÷ # ÷ [0.2] (Newline) ÷ [3.1] COMBINING DIAERESIS (Extend_FE) ÷ [999.0] LATIN SMALL LETTER A (ALetter) ÷ [999.0] APOSTROPHE (Single_Quote) × [4.0] WORD JOINER (Format_FE) ÷ [0.3] ÷ 000B ÷ 0061 ÷ 002C ÷ # ÷ [0.2] (Newline) ÷ [3.1] LATIN SMALL LETTER A (ALetter) ÷ [999.0] COMMA (MidNum) ÷ [0.3] ÷ 000B ÷ 0308 ÷ 0061 ÷ 002C ÷ # ÷ [0.2] (Newline) ÷ [3.1] COMBINING DIAERESIS (Extend_FE) ÷ [999.0] LATIN SMALL LETTER A (ALetter) ÷ [999.0] COMMA (MidNum) ÷ [0.3] ÷ 000B ÷ 0031 ÷ 003A ÷ # ÷ [0.2] (Newline) ÷ [3.1] DIGIT ONE (Numeric) ÷ [999.0] COLON (MidLetter) ÷ [0.3] ÷ 000B ÷ 0308 ÷ 0031 ÷ 003A ÷ # ÷ [0.2] (Newline) ÷ [3.1] COMBINING DIAERESIS (Extend_FE) ÷ [999.0] DIGIT ONE (Numeric) ÷ [999.0] COLON (MidLetter) ÷ [0.3] -÷ 000B ÷ 0031 ÷ 0027 ÷ # ÷ [0.2] (Newline) ÷ [3.1] DIGIT ONE (Numeric) ÷ [999.0] APOSTROPHE (MidNumLet) ÷ [0.3] -÷ 000B ÷ 0308 ÷ 0031 ÷ 0027 ÷ # ÷ [0.2] (Newline) ÷ [3.1] COMBINING DIAERESIS (Extend_FE) ÷ [999.0] DIGIT ONE (Numeric) ÷ [999.0] APOSTROPHE (MidNumLet) ÷ [0.3] +÷ 000B ÷ 0031 ÷ 0027 ÷ # ÷ [0.2] (Newline) ÷ [3.1] DIGIT ONE (Numeric) ÷ [999.0] APOSTROPHE (Single_Quote) ÷ [0.3] +÷ 000B ÷ 0308 ÷ 0031 ÷ 0027 ÷ # ÷ [0.2] (Newline) ÷ [3.1] COMBINING DIAERESIS (Extend_FE) ÷ [999.0] DIGIT ONE (Numeric) ÷ [999.0] APOSTROPHE (Single_Quote) ÷ [0.3] ÷ 000B ÷ 0031 ÷ 002C ÷ # ÷ [0.2] (Newline) ÷ [3.1] DIGIT ONE (Numeric) ÷ [999.0] COMMA (MidNum) ÷ [0.3] ÷ 000B ÷ 0308 ÷ 0031 ÷ 002C ÷ # ÷ [0.2] (Newline) ÷ [3.1] COMBINING DIAERESIS (Extend_FE) ÷ [999.0] DIGIT ONE (Numeric) ÷ [999.0] COMMA (MidNum) ÷ [0.3] ÷ 000B ÷ 0031 ÷ 002E × 2060 ÷ # ÷ [0.2] (Newline) ÷ [3.1] DIGIT ONE (Numeric) ÷ [999.0] FULL STOP (MidNumLet) × [4.0] WORD JOINER (Format_FE) ÷ [0.3] @@ -220,14 +244,20 @@ ÷ 3031 × 0308 ÷ 003A ÷ # ÷ [0.2] VERTICAL KANA REPEAT MARK (Katakana) × [4.0] COMBINING DIAERESIS (Extend_FE) ÷ [999.0] COLON (MidLetter) ÷ [0.3] ÷ 3031 ÷ 002C ÷ # ÷ [0.2] VERTICAL KANA REPEAT MARK (Katakana) ÷ [999.0] COMMA (MidNum) ÷ [0.3] ÷ 3031 × 0308 ÷ 002C ÷ # ÷ [0.2] VERTICAL KANA REPEAT MARK (Katakana) × [4.0] COMBINING DIAERESIS (Extend_FE) ÷ [999.0] COMMA (MidNum) ÷ [0.3] -÷ 3031 ÷ 0027 ÷ # ÷ [0.2] VERTICAL KANA REPEAT MARK (Katakana) ÷ [999.0] APOSTROPHE (MidNumLet) ÷ [0.3] -÷ 3031 × 0308 ÷ 0027 ÷ # ÷ [0.2] VERTICAL KANA REPEAT MARK (Katakana) × [4.0] COMBINING DIAERESIS (Extend_FE) ÷ [999.0] APOSTROPHE (MidNumLet) ÷ [0.3] +÷ 3031 ÷ 002E ÷ # ÷ [0.2] VERTICAL KANA REPEAT MARK (Katakana) ÷ [999.0] FULL STOP (MidNumLet) ÷ [0.3] +÷ 3031 × 0308 ÷ 002E ÷ # ÷ [0.2] VERTICAL KANA REPEAT MARK (Katakana) × [4.0] COMBINING DIAERESIS (Extend_FE) ÷ [999.0] FULL STOP (MidNumLet) ÷ [0.3] ÷ 3031 ÷ 0030 ÷ # ÷ [0.2] VERTICAL KANA REPEAT MARK (Katakana) ÷ [999.0] DIGIT ZERO (Numeric) ÷ [0.3] ÷ 3031 × 0308 ÷ 0030 ÷ # ÷ [0.2] VERTICAL KANA REPEAT MARK (Katakana) × [4.0] COMBINING DIAERESIS (Extend_FE) ÷ [999.0] DIGIT ZERO (Numeric) ÷ [0.3] ÷ 3031 × 005F ÷ # ÷ [0.2] VERTICAL KANA REPEAT MARK (Katakana) × [13.1] LOW LINE (ExtendNumLet) ÷ [0.3] ÷ 3031 × 0308 × 005F ÷ # ÷ [0.2] VERTICAL KANA REPEAT MARK (Katakana) × [4.0] COMBINING DIAERESIS (Extend_FE) × [13.1] LOW LINE (ExtendNumLet) ÷ [0.3] ÷ 3031 ÷ 1F1E6 ÷ # ÷ [0.2] VERTICAL KANA REPEAT MARK (Katakana) ÷ [999.0] REGIONAL INDICATOR SYMBOL LETTER A (Regional_Indicator) ÷ [0.3] ÷ 3031 × 0308 ÷ 1F1E6 ÷ # ÷ [0.2] VERTICAL KANA REPEAT MARK (Katakana) × [4.0] COMBINING DIAERESIS (Extend_FE) ÷ [999.0] REGIONAL INDICATOR SYMBOL LETTER A (Regional_Indicator) ÷ [0.3] +÷ 3031 ÷ 05D0 ÷ # ÷ [0.2] VERTICAL KANA REPEAT MARK (Katakana) ÷ [999.0] HEBREW LETTER ALEF (Hebrew_Letter) ÷ [0.3] +÷ 3031 × 0308 ÷ 05D0 ÷ # ÷ [0.2] VERTICAL KANA REPEAT MARK (Katakana) × [4.0] COMBINING DIAERESIS (Extend_FE) ÷ [999.0] HEBREW LETTER ALEF (Hebrew_Letter) ÷ [0.3] +÷ 3031 ÷ 0022 ÷ # ÷ [0.2] VERTICAL KANA REPEAT MARK (Katakana) ÷ [999.0] QUOTATION MARK (Double_Quote) ÷ [0.3] +÷ 3031 × 0308 ÷ 0022 ÷ # ÷ [0.2] VERTICAL KANA REPEAT MARK (Katakana) × [4.0] COMBINING DIAERESIS (Extend_FE) ÷ [999.0] QUOTATION MARK (Double_Quote) ÷ [0.3] +÷ 3031 ÷ 0027 ÷ # ÷ [0.2] VERTICAL KANA REPEAT MARK (Katakana) ÷ [999.0] APOSTROPHE (Single_Quote) ÷ [0.3] +÷ 3031 × 0308 ÷ 0027 ÷ # ÷ [0.2] VERTICAL KANA REPEAT MARK (Katakana) × [4.0] COMBINING DIAERESIS (Extend_FE) ÷ [999.0] APOSTROPHE (Single_Quote) ÷ [0.3] ÷ 3031 × 00AD ÷ # ÷ [0.2] VERTICAL KANA REPEAT MARK (Katakana) × [4.0] SOFT HYPHEN (Format_FE) ÷ [0.3] ÷ 3031 × 0308 × 00AD ÷ # ÷ [0.2] VERTICAL KANA REPEAT MARK (Katakana) × [4.0] COMBINING DIAERESIS (Extend_FE) × [4.0] SOFT HYPHEN (Format_FE) ÷ [0.3] ÷ 3031 × 0300 ÷ # ÷ [0.2] VERTICAL KANA REPEAT MARK (Katakana) × [4.0] COMBINING GRAVE ACCENT (Extend_FE) ÷ [0.3] @@ -236,16 +266,16 @@ ÷ 3031 × 0308 ÷ 0061 × 2060 ÷ # ÷ [0.2] VERTICAL KANA REPEAT MARK (Katakana) × [4.0] COMBINING DIAERESIS (Extend_FE) ÷ [999.0] LATIN SMALL LETTER A (ALetter) × [4.0] WORD JOINER (Format_FE) ÷ [0.3] ÷ 3031 ÷ 0061 ÷ 003A ÷ # ÷ [0.2] VERTICAL KANA REPEAT MARK (Katakana) ÷ [999.0] LATIN SMALL LETTER A (ALetter) ÷ [999.0] COLON (MidLetter) ÷ [0.3] ÷ 3031 × 0308 ÷ 0061 ÷ 003A ÷ # ÷ [0.2] VERTICAL KANA REPEAT MARK (Katakana) × [4.0] COMBINING DIAERESIS (Extend_FE) ÷ [999.0] LATIN SMALL LETTER A (ALetter) ÷ [999.0] COLON (MidLetter) ÷ [0.3] -÷ 3031 ÷ 0061 ÷ 0027 ÷ # ÷ [0.2] VERTICAL KANA REPEAT MARK (Katakana) ÷ [999.0] LATIN SMALL LETTER A (ALetter) ÷ [999.0] APOSTROPHE (MidNumLet) ÷ [0.3] -÷ 3031 × 0308 ÷ 0061 ÷ 0027 ÷ # ÷ [0.2] VERTICAL KANA REPEAT MARK (Katakana) × [4.0] COMBINING DIAERESIS (Extend_FE) ÷ [999.0] LATIN SMALL LETTER A (ALetter) ÷ [999.0] APOSTROPHE (MidNumLet) ÷ [0.3] -÷ 3031 ÷ 0061 ÷ 0027 × 2060 ÷ # ÷ [0.2] VERTICAL KANA REPEAT MARK (Katakana) ÷ [999.0] LATIN SMALL LETTER A (ALetter) ÷ [999.0] APOSTROPHE (MidNumLet) × [4.0] WORD JOINER (Format_FE) ÷ [0.3] -÷ 3031 × 0308 ÷ 0061 ÷ 0027 × 2060 ÷ # ÷ [0.2] VERTICAL KANA REPEAT MARK (Katakana) × [4.0] COMBINING DIAERESIS (Extend_FE) ÷ [999.0] LATIN SMALL LETTER A (ALetter) ÷ [999.0] APOSTROPHE (MidNumLet) × [4.0] WORD JOINER (Format_FE) ÷ [0.3] +÷ 3031 ÷ 0061 ÷ 0027 ÷ # ÷ [0.2] VERTICAL KANA REPEAT MARK (Katakana) ÷ [999.0] LATIN SMALL LETTER A (ALetter) ÷ [999.0] APOSTROPHE (Single_Quote) ÷ [0.3] +÷ 3031 × 0308 ÷ 0061 ÷ 0027 ÷ # ÷ [0.2] VERTICAL KANA REPEAT MARK (Katakana) × [4.0] COMBINING DIAERESIS (Extend_FE) ÷ [999.0] LATIN SMALL LETTER A (ALetter) ÷ [999.0] APOSTROPHE (Single_Quote) ÷ [0.3] +÷ 3031 ÷ 0061 ÷ 0027 × 2060 ÷ # ÷ [0.2] VERTICAL KANA REPEAT MARK (Katakana) ÷ [999.0] LATIN SMALL LETTER A (ALetter) ÷ [999.0] APOSTROPHE (Single_Quote) × [4.0] WORD JOINER (Format_FE) ÷ [0.3] +÷ 3031 × 0308 ÷ 0061 ÷ 0027 × 2060 ÷ # ÷ [0.2] VERTICAL KANA REPEAT MARK (Katakana) × [4.0] COMBINING DIAERESIS (Extend_FE) ÷ [999.0] LATIN SMALL LETTER A (ALetter) ÷ [999.0] APOSTROPHE (Single_Quote) × [4.0] WORD JOINER (Format_FE) ÷ [0.3] ÷ 3031 ÷ 0061 ÷ 002C ÷ # ÷ [0.2] VERTICAL KANA REPEAT MARK (Katakana) ÷ [999.0] LATIN SMALL LETTER A (ALetter) ÷ [999.0] COMMA (MidNum) ÷ [0.3] ÷ 3031 × 0308 ÷ 0061 ÷ 002C ÷ # ÷ [0.2] VERTICAL KANA REPEAT MARK (Katakana) × [4.0] COMBINING DIAERESIS (Extend_FE) ÷ [999.0] LATIN SMALL LETTER A (ALetter) ÷ [999.0] COMMA (MidNum) ÷ [0.3] ÷ 3031 ÷ 0031 ÷ 003A ÷ # ÷ [0.2] VERTICAL KANA REPEAT MARK (Katakana) ÷ [999.0] DIGIT ONE (Numeric) ÷ [999.0] COLON (MidLetter) ÷ [0.3] ÷ 3031 × 0308 ÷ 0031 ÷ 003A ÷ # ÷ [0.2] VERTICAL KANA REPEAT MARK (Katakana) × [4.0] COMBINING DIAERESIS (Extend_FE) ÷ [999.0] DIGIT ONE (Numeric) ÷ [999.0] COLON (MidLetter) ÷ [0.3] -÷ 3031 ÷ 0031 ÷ 0027 ÷ # ÷ [0.2] VERTICAL KANA REPEAT MARK (Katakana) ÷ [999.0] DIGIT ONE (Numeric) ÷ [999.0] APOSTROPHE (MidNumLet) ÷ [0.3] -÷ 3031 × 0308 ÷ 0031 ÷ 0027 ÷ # ÷ [0.2] VERTICAL KANA REPEAT MARK (Katakana) × [4.0] COMBINING DIAERESIS (Extend_FE) ÷ [999.0] DIGIT ONE (Numeric) ÷ [999.0] APOSTROPHE (MidNumLet) ÷ [0.3] +÷ 3031 ÷ 0031 ÷ 0027 ÷ # ÷ [0.2] VERTICAL KANA REPEAT MARK (Katakana) ÷ [999.0] DIGIT ONE (Numeric) ÷ [999.0] APOSTROPHE (Single_Quote) ÷ [0.3] +÷ 3031 × 0308 ÷ 0031 ÷ 0027 ÷ # ÷ [0.2] VERTICAL KANA REPEAT MARK (Katakana) × [4.0] COMBINING DIAERESIS (Extend_FE) ÷ [999.0] DIGIT ONE (Numeric) ÷ [999.0] APOSTROPHE (Single_Quote) ÷ [0.3] ÷ 3031 ÷ 0031 ÷ 002C ÷ # ÷ [0.2] VERTICAL KANA REPEAT MARK (Katakana) ÷ [999.0] DIGIT ONE (Numeric) ÷ [999.0] COMMA (MidNum) ÷ [0.3] ÷ 3031 × 0308 ÷ 0031 ÷ 002C ÷ # ÷ [0.2] VERTICAL KANA REPEAT MARK (Katakana) × [4.0] COMBINING DIAERESIS (Extend_FE) ÷ [999.0] DIGIT ONE (Numeric) ÷ [999.0] COMMA (MidNum) ÷ [0.3] ÷ 3031 ÷ 0031 ÷ 002E × 2060 ÷ # ÷ [0.2] VERTICAL KANA REPEAT MARK (Katakana) ÷ [999.0] DIGIT ONE (Numeric) ÷ [999.0] FULL STOP (MidNumLet) × [4.0] WORD JOINER (Format_FE) ÷ [0.3] @@ -266,14 +296,20 @@ ÷ 0041 × 0308 ÷ 003A ÷ # ÷ [0.2] LATIN CAPITAL LETTER A (ALetter) × [4.0] COMBINING DIAERESIS (Extend_FE) ÷ [999.0] COLON (MidLetter) ÷ [0.3] ÷ 0041 ÷ 002C ÷ # ÷ [0.2] LATIN CAPITAL LETTER A (ALetter) ÷ [999.0] COMMA (MidNum) ÷ [0.3] ÷ 0041 × 0308 ÷ 002C ÷ # ÷ [0.2] LATIN CAPITAL LETTER A (ALetter) × [4.0] COMBINING DIAERESIS (Extend_FE) ÷ [999.0] COMMA (MidNum) ÷ [0.3] -÷ 0041 ÷ 0027 ÷ # ÷ [0.2] LATIN CAPITAL LETTER A (ALetter) ÷ [999.0] APOSTROPHE (MidNumLet) ÷ [0.3] -÷ 0041 × 0308 ÷ 0027 ÷ # ÷ [0.2] LATIN CAPITAL LETTER A (ALetter) × [4.0] COMBINING DIAERESIS (Extend_FE) ÷ [999.0] APOSTROPHE (MidNumLet) ÷ [0.3] +÷ 0041 ÷ 002E ÷ # ÷ [0.2] LATIN CAPITAL LETTER A (ALetter) ÷ [999.0] FULL STOP (MidNumLet) ÷ [0.3] +÷ 0041 × 0308 ÷ 002E ÷ # ÷ [0.2] LATIN CAPITAL LETTER A (ALetter) × [4.0] COMBINING DIAERESIS (Extend_FE) ÷ [999.0] FULL STOP (MidNumLet) ÷ [0.3] ÷ 0041 × 0030 ÷ # ÷ [0.2] LATIN CAPITAL LETTER A (ALetter) × [9.0] DIGIT ZERO (Numeric) ÷ [0.3] ÷ 0041 × 0308 × 0030 ÷ # ÷ [0.2] LATIN CAPITAL LETTER A (ALetter) × [4.0] COMBINING DIAERESIS (Extend_FE) × [9.0] DIGIT ZERO (Numeric) ÷ [0.3] ÷ 0041 × 005F ÷ # ÷ [0.2] LATIN CAPITAL LETTER A (ALetter) × [13.1] LOW LINE (ExtendNumLet) ÷ [0.3] ÷ 0041 × 0308 × 005F ÷ # ÷ [0.2] LATIN CAPITAL LETTER A (ALetter) × [4.0] COMBINING DIAERESIS (Extend_FE) × [13.1] LOW LINE (ExtendNumLet) ÷ [0.3] ÷ 0041 ÷ 1F1E6 ÷ # ÷ [0.2] LATIN CAPITAL LETTER A (ALetter) ÷ [999.0] REGIONAL INDICATOR SYMBOL LETTER A (Regional_Indicator) ÷ [0.3] ÷ 0041 × 0308 ÷ 1F1E6 ÷ # ÷ [0.2] LATIN CAPITAL LETTER A (ALetter) × [4.0] COMBINING DIAERESIS (Extend_FE) ÷ [999.0] REGIONAL INDICATOR SYMBOL LETTER A (Regional_Indicator) ÷ [0.3] +÷ 0041 × 05D0 ÷ # ÷ [0.2] LATIN CAPITAL LETTER A (ALetter) × [5.0] HEBREW LETTER ALEF (Hebrew_Letter) ÷ [0.3] +÷ 0041 × 0308 × 05D0 ÷ # ÷ [0.2] LATIN CAPITAL LETTER A (ALetter) × [4.0] COMBINING DIAERESIS (Extend_FE) × [5.0] HEBREW LETTER ALEF (Hebrew_Letter) ÷ [0.3] +÷ 0041 ÷ 0022 ÷ # ÷ [0.2] LATIN CAPITAL LETTER A (ALetter) ÷ [999.0] QUOTATION MARK (Double_Quote) ÷ [0.3] +÷ 0041 × 0308 ÷ 0022 ÷ # ÷ [0.2] LATIN CAPITAL LETTER A (ALetter) × [4.0] COMBINING DIAERESIS (Extend_FE) ÷ [999.0] QUOTATION MARK (Double_Quote) ÷ [0.3] +÷ 0041 ÷ 0027 ÷ # ÷ [0.2] LATIN CAPITAL LETTER A (ALetter) ÷ [999.0] APOSTROPHE (Single_Quote) ÷ [0.3] +÷ 0041 × 0308 ÷ 0027 ÷ # ÷ [0.2] LATIN CAPITAL LETTER A (ALetter) × [4.0] COMBINING DIAERESIS (Extend_FE) ÷ [999.0] APOSTROPHE (Single_Quote) ÷ [0.3] ÷ 0041 × 00AD ÷ # ÷ [0.2] LATIN CAPITAL LETTER A (ALetter) × [4.0] SOFT HYPHEN (Format_FE) ÷ [0.3] ÷ 0041 × 0308 × 00AD ÷ # ÷ [0.2] LATIN CAPITAL LETTER A (ALetter) × [4.0] COMBINING DIAERESIS (Extend_FE) × [4.0] SOFT HYPHEN (Format_FE) ÷ [0.3] ÷ 0041 × 0300 ÷ # ÷ [0.2] LATIN CAPITAL LETTER A (ALetter) × [4.0] COMBINING GRAVE ACCENT (Extend_FE) ÷ [0.3] @@ -282,16 +318,16 @@ ÷ 0041 × 0308 × 0061 × 2060 ÷ # ÷ [0.2] LATIN CAPITAL LETTER A (ALetter) × [4.0] COMBINING DIAERESIS (Extend_FE) × [5.0] LATIN SMALL LETTER A (ALetter) × [4.0] WORD JOINER (Format_FE) ÷ [0.3] ÷ 0041 × 0061 ÷ 003A ÷ # ÷ [0.2] LATIN CAPITAL LETTER A (ALetter) × [5.0] LATIN SMALL LETTER A (ALetter) ÷ [999.0] COLON (MidLetter) ÷ [0.3] ÷ 0041 × 0308 × 0061 ÷ 003A ÷ # ÷ [0.2] LATIN CAPITAL LETTER A (ALetter) × [4.0] COMBINING DIAERESIS (Extend_FE) × [5.0] LATIN SMALL LETTER A (ALetter) ÷ [999.0] COLON (MidLetter) ÷ [0.3] -÷ 0041 × 0061 ÷ 0027 ÷ # ÷ [0.2] LATIN CAPITAL LETTER A (ALetter) × [5.0] LATIN SMALL LETTER A (ALetter) ÷ [999.0] APOSTROPHE (MidNumLet) ÷ [0.3] -÷ 0041 × 0308 × 0061 ÷ 0027 ÷ # ÷ [0.2] LATIN CAPITAL LETTER A (ALetter) × [4.0] COMBINING DIAERESIS (Extend_FE) × [5.0] LATIN SMALL LETTER A (ALetter) ÷ [999.0] APOSTROPHE (MidNumLet) ÷ [0.3] -÷ 0041 × 0061 ÷ 0027 × 2060 ÷ # ÷ [0.2] LATIN CAPITAL LETTER A (ALetter) × [5.0] LATIN SMALL LETTER A (ALetter) ÷ [999.0] APOSTROPHE (MidNumLet) × [4.0] WORD JOINER (Format_FE) ÷ [0.3] -÷ 0041 × 0308 × 0061 ÷ 0027 × 2060 ÷ # ÷ [0.2] LATIN CAPITAL LETTER A (ALetter) × [4.0] COMBINING DIAERESIS (Extend_FE) × [5.0] LATIN SMALL LETTER A (ALetter) ÷ [999.0] APOSTROPHE (MidNumLet) × [4.0] WORD JOINER (Format_FE) ÷ [0.3] +÷ 0041 × 0061 ÷ 0027 ÷ # ÷ [0.2] LATIN CAPITAL LETTER A (ALetter) × [5.0] LATIN SMALL LETTER A (ALetter) ÷ [999.0] APOSTROPHE (Single_Quote) ÷ [0.3] +÷ 0041 × 0308 × 0061 ÷ 0027 ÷ # ÷ [0.2] LATIN CAPITAL LETTER A (ALetter) × [4.0] COMBINING DIAERESIS (Extend_FE) × [5.0] LATIN SMALL LETTER A (ALetter) ÷ [999.0] APOSTROPHE (Single_Quote) ÷ [0.3] +÷ 0041 × 0061 ÷ 0027 × 2060 ÷ # ÷ [0.2] LATIN CAPITAL LETTER A (ALetter) × [5.0] LATIN SMALL LETTER A (ALetter) ÷ [999.0] APOSTROPHE (Single_Quote) × [4.0] WORD JOINER (Format_FE) ÷ [0.3] +÷ 0041 × 0308 × 0061 ÷ 0027 × 2060 ÷ # ÷ [0.2] LATIN CAPITAL LETTER A (ALetter) × [4.0] COMBINING DIAERESIS (Extend_FE) × [5.0] LATIN SMALL LETTER A (ALetter) ÷ [999.0] APOSTROPHE (Single_Quote) × [4.0] WORD JOINER (Format_FE) ÷ [0.3] ÷ 0041 × 0061 ÷ 002C ÷ # ÷ [0.2] LATIN CAPITAL LETTER A (ALetter) × [5.0] LATIN SMALL LETTER A (ALetter) ÷ [999.0] COMMA (MidNum) ÷ [0.3] ÷ 0041 × 0308 × 0061 ÷ 002C ÷ # ÷ [0.2] LATIN CAPITAL LETTER A (ALetter) × [4.0] COMBINING DIAERESIS (Extend_FE) × [5.0] LATIN SMALL LETTER A (ALetter) ÷ [999.0] COMMA (MidNum) ÷ [0.3] ÷ 0041 × 0031 ÷ 003A ÷ # ÷ [0.2] LATIN CAPITAL LETTER A (ALetter) × [9.0] DIGIT ONE (Numeric) ÷ [999.0] COLON (MidLetter) ÷ [0.3] ÷ 0041 × 0308 × 0031 ÷ 003A ÷ # ÷ [0.2] LATIN CAPITAL LETTER A (ALetter) × [4.0] COMBINING DIAERESIS (Extend_FE) × [9.0] DIGIT ONE (Numeric) ÷ [999.0] COLON (MidLetter) ÷ [0.3] -÷ 0041 × 0031 ÷ 0027 ÷ # ÷ [0.2] LATIN CAPITAL LETTER A (ALetter) × [9.0] DIGIT ONE (Numeric) ÷ [999.0] APOSTROPHE (MidNumLet) ÷ [0.3] -÷ 0041 × 0308 × 0031 ÷ 0027 ÷ # ÷ [0.2] LATIN CAPITAL LETTER A (ALetter) × [4.0] COMBINING DIAERESIS (Extend_FE) × [9.0] DIGIT ONE (Numeric) ÷ [999.0] APOSTROPHE (MidNumLet) ÷ [0.3] +÷ 0041 × 0031 ÷ 0027 ÷ # ÷ [0.2] LATIN CAPITAL LETTER A (ALetter) × [9.0] DIGIT ONE (Numeric) ÷ [999.0] APOSTROPHE (Single_Quote) ÷ [0.3] +÷ 0041 × 0308 × 0031 ÷ 0027 ÷ # ÷ [0.2] LATIN CAPITAL LETTER A (ALetter) × [4.0] COMBINING DIAERESIS (Extend_FE) × [9.0] DIGIT ONE (Numeric) ÷ [999.0] APOSTROPHE (Single_Quote) ÷ [0.3] ÷ 0041 × 0031 ÷ 002C ÷ # ÷ [0.2] LATIN CAPITAL LETTER A (ALetter) × [9.0] DIGIT ONE (Numeric) ÷ [999.0] COMMA (MidNum) ÷ [0.3] ÷ 0041 × 0308 × 0031 ÷ 002C ÷ # ÷ [0.2] LATIN CAPITAL LETTER A (ALetter) × [4.0] COMBINING DIAERESIS (Extend_FE) × [9.0] DIGIT ONE (Numeric) ÷ [999.0] COMMA (MidNum) ÷ [0.3] ÷ 0041 × 0031 ÷ 002E × 2060 ÷ # ÷ [0.2] LATIN CAPITAL LETTER A (ALetter) × [9.0] DIGIT ONE (Numeric) ÷ [999.0] FULL STOP (MidNumLet) × [4.0] WORD JOINER (Format_FE) ÷ [0.3] @@ -312,14 +348,20 @@ ÷ 003A × 0308 ÷ 003A ÷ # ÷ [0.2] COLON (MidLetter) × [4.0] COMBINING DIAERESIS (Extend_FE) ÷ [999.0] COLON (MidLetter) ÷ [0.3] ÷ 003A ÷ 002C ÷ # ÷ [0.2] COLON (MidLetter) ÷ [999.0] COMMA (MidNum) ÷ [0.3] ÷ 003A × 0308 ÷ 002C ÷ # ÷ [0.2] COLON (MidLetter) × [4.0] COMBINING DIAERESIS (Extend_FE) ÷ [999.0] COMMA (MidNum) ÷ [0.3] -÷ 003A ÷ 0027 ÷ # ÷ [0.2] COLON (MidLetter) ÷ [999.0] APOSTROPHE (MidNumLet) ÷ [0.3] -÷ 003A × 0308 ÷ 0027 ÷ # ÷ [0.2] COLON (MidLetter) × [4.0] COMBINING DIAERESIS (Extend_FE) ÷ [999.0] APOSTROPHE (MidNumLet) ÷ [0.3] +÷ 003A ÷ 002E ÷ # ÷ [0.2] COLON (MidLetter) ÷ [999.0] FULL STOP (MidNumLet) ÷ [0.3] +÷ 003A × 0308 ÷ 002E ÷ # ÷ [0.2] COLON (MidLetter) × [4.0] COMBINING DIAERESIS (Extend_FE) ÷ [999.0] FULL STOP (MidNumLet) ÷ [0.3] ÷ 003A ÷ 0030 ÷ # ÷ [0.2] COLON (MidLetter) ÷ [999.0] DIGIT ZERO (Numeric) ÷ [0.3] ÷ 003A × 0308 ÷ 0030 ÷ # ÷ [0.2] COLON (MidLetter) × [4.0] COMBINING DIAERESIS (Extend_FE) ÷ [999.0] DIGIT ZERO (Numeric) ÷ [0.3] ÷ 003A ÷ 005F ÷ # ÷ [0.2] COLON (MidLetter) ÷ [999.0] LOW LINE (ExtendNumLet) ÷ [0.3] ÷ 003A × 0308 ÷ 005F ÷ # ÷ [0.2] COLON (MidLetter) × [4.0] COMBINING DIAERESIS (Extend_FE) ÷ [999.0] LOW LINE (ExtendNumLet) ÷ [0.3] ÷ 003A ÷ 1F1E6 ÷ # ÷ [0.2] COLON (MidLetter) ÷ [999.0] REGIONAL INDICATOR SYMBOL LETTER A (Regional_Indicator) ÷ [0.3] ÷ 003A × 0308 ÷ 1F1E6 ÷ # ÷ [0.2] COLON (MidLetter) × [4.0] COMBINING DIAERESIS (Extend_FE) ÷ [999.0] REGIONAL INDICATOR SYMBOL LETTER A (Regional_Indicator) ÷ [0.3] +÷ 003A ÷ 05D0 ÷ # ÷ [0.2] COLON (MidLetter) ÷ [999.0] HEBREW LETTER ALEF (Hebrew_Letter) ÷ [0.3] +÷ 003A × 0308 ÷ 05D0 ÷ # ÷ [0.2] COLON (MidLetter) × [4.0] COMBINING DIAERESIS (Extend_FE) ÷ [999.0] HEBREW LETTER ALEF (Hebrew_Letter) ÷ [0.3] +÷ 003A ÷ 0022 ÷ # ÷ [0.2] COLON (MidLetter) ÷ [999.0] QUOTATION MARK (Double_Quote) ÷ [0.3] +÷ 003A × 0308 ÷ 0022 ÷ # ÷ [0.2] COLON (MidLetter) × [4.0] COMBINING DIAERESIS (Extend_FE) ÷ [999.0] QUOTATION MARK (Double_Quote) ÷ [0.3] +÷ 003A ÷ 0027 ÷ # ÷ [0.2] COLON (MidLetter) ÷ [999.0] APOSTROPHE (Single_Quote) ÷ [0.3] +÷ 003A × 0308 ÷ 0027 ÷ # ÷ [0.2] COLON (MidLetter) × [4.0] COMBINING DIAERESIS (Extend_FE) ÷ [999.0] APOSTROPHE (Single_Quote) ÷ [0.3] ÷ 003A × 00AD ÷ # ÷ [0.2] COLON (MidLetter) × [4.0] SOFT HYPHEN (Format_FE) ÷ [0.3] ÷ 003A × 0308 × 00AD ÷ # ÷ [0.2] COLON (MidLetter) × [4.0] COMBINING DIAERESIS (Extend_FE) × [4.0] SOFT HYPHEN (Format_FE) ÷ [0.3] ÷ 003A × 0300 ÷ # ÷ [0.2] COLON (MidLetter) × [4.0] COMBINING GRAVE ACCENT (Extend_FE) ÷ [0.3] @@ -328,16 +370,16 @@ ÷ 003A × 0308 ÷ 0061 × 2060 ÷ # ÷ [0.2] COLON (MidLetter) × [4.0] COMBINING DIAERESIS (Extend_FE) ÷ [999.0] LATIN SMALL LETTER A (ALetter) × [4.0] WORD JOINER (Format_FE) ÷ [0.3] ÷ 003A ÷ 0061 ÷ 003A ÷ # ÷ [0.2] COLON (MidLetter) ÷ [999.0] LATIN SMALL LETTER A (ALetter) ÷ [999.0] COLON (MidLetter) ÷ [0.3] ÷ 003A × 0308 ÷ 0061 ÷ 003A ÷ # ÷ [0.2] COLON (MidLetter) × [4.0] COMBINING DIAERESIS (Extend_FE) ÷ [999.0] LATIN SMALL LETTER A (ALetter) ÷ [999.0] COLON (MidLetter) ÷ [0.3] -÷ 003A ÷ 0061 ÷ 0027 ÷ # ÷ [0.2] COLON (MidLetter) ÷ [999.0] LATIN SMALL LETTER A (ALetter) ÷ [999.0] APOSTROPHE (MidNumLet) ÷ [0.3] -÷ 003A × 0308 ÷ 0061 ÷ 0027 ÷ # ÷ [0.2] COLON (MidLetter) × [4.0] COMBINING DIAERESIS (Extend_FE) ÷ [999.0] LATIN SMALL LETTER A (ALetter) ÷ [999.0] APOSTROPHE (MidNumLet) ÷ [0.3] -÷ 003A ÷ 0061 ÷ 0027 × 2060 ÷ # ÷ [0.2] COLON (MidLetter) ÷ [999.0] LATIN SMALL LETTER A (ALetter) ÷ [999.0] APOSTROPHE (MidNumLet) × [4.0] WORD JOINER (Format_FE) ÷ [0.3] -÷ 003A × 0308 ÷ 0061 ÷ 0027 × 2060 ÷ # ÷ [0.2] COLON (MidLetter) × [4.0] COMBINING DIAERESIS (Extend_FE) ÷ [999.0] LATIN SMALL LETTER A (ALetter) ÷ [999.0] APOSTROPHE (MidNumLet) × [4.0] WORD JOINER (Format_FE) ÷ [0.3] +÷ 003A ÷ 0061 ÷ 0027 ÷ # ÷ [0.2] COLON (MidLetter) ÷ [999.0] LATIN SMALL LETTER A (ALetter) ÷ [999.0] APOSTROPHE (Single_Quote) ÷ [0.3] +÷ 003A × 0308 ÷ 0061 ÷ 0027 ÷ # ÷ [0.2] COLON (MidLetter) × [4.0] COMBINING DIAERESIS (Extend_FE) ÷ [999.0] LATIN SMALL LETTER A (ALetter) ÷ [999.0] APOSTROPHE (Single_Quote) ÷ [0.3] +÷ 003A ÷ 0061 ÷ 0027 × 2060 ÷ # ÷ [0.2] COLON (MidLetter) ÷ [999.0] LATIN SMALL LETTER A (ALetter) ÷ [999.0] APOSTROPHE (Single_Quote) × [4.0] WORD JOINER (Format_FE) ÷ [0.3] +÷ 003A × 0308 ÷ 0061 ÷ 0027 × 2060 ÷ # ÷ [0.2] COLON (MidLetter) × [4.0] COMBINING DIAERESIS (Extend_FE) ÷ [999.0] LATIN SMALL LETTER A (ALetter) ÷ [999.0] APOSTROPHE (Single_Quote) × [4.0] WORD JOINER (Format_FE) ÷ [0.3] ÷ 003A ÷ 0061 ÷ 002C ÷ # ÷ [0.2] COLON (MidLetter) ÷ [999.0] LATIN SMALL LETTER A (ALetter) ÷ [999.0] COMMA (MidNum) ÷ [0.3] ÷ 003A × 0308 ÷ 0061 ÷ 002C ÷ # ÷ [0.2] COLON (MidLetter) × [4.0] COMBINING DIAERESIS (Extend_FE) ÷ [999.0] LATIN SMALL LETTER A (ALetter) ÷ [999.0] COMMA (MidNum) ÷ [0.3] ÷ 003A ÷ 0031 ÷ 003A ÷ # ÷ [0.2] COLON (MidLetter) ÷ [999.0] DIGIT ONE (Numeric) ÷ [999.0] COLON (MidLetter) ÷ [0.3] ÷ 003A × 0308 ÷ 0031 ÷ 003A ÷ # ÷ [0.2] COLON (MidLetter) × [4.0] COMBINING DIAERESIS (Extend_FE) ÷ [999.0] DIGIT ONE (Numeric) ÷ [999.0] COLON (MidLetter) ÷ [0.3] -÷ 003A ÷ 0031 ÷ 0027 ÷ # ÷ [0.2] COLON (MidLetter) ÷ [999.0] DIGIT ONE (Numeric) ÷ [999.0] APOSTROPHE (MidNumLet) ÷ [0.3] -÷ 003A × 0308 ÷ 0031 ÷ 0027 ÷ # ÷ [0.2] COLON (MidLetter) × [4.0] COMBINING DIAERESIS (Extend_FE) ÷ [999.0] DIGIT ONE (Numeric) ÷ [999.0] APOSTROPHE (MidNumLet) ÷ [0.3] +÷ 003A ÷ 0031 ÷ 0027 ÷ # ÷ [0.2] COLON (MidLetter) ÷ [999.0] DIGIT ONE (Numeric) ÷ [999.0] APOSTROPHE (Single_Quote) ÷ [0.3] +÷ 003A × 0308 ÷ 0031 ÷ 0027 ÷ # ÷ [0.2] COLON (MidLetter) × [4.0] COMBINING DIAERESIS (Extend_FE) ÷ [999.0] DIGIT ONE (Numeric) ÷ [999.0] APOSTROPHE (Single_Quote) ÷ [0.3] ÷ 003A ÷ 0031 ÷ 002C ÷ # ÷ [0.2] COLON (MidLetter) ÷ [999.0] DIGIT ONE (Numeric) ÷ [999.0] COMMA (MidNum) ÷ [0.3] ÷ 003A × 0308 ÷ 0031 ÷ 002C ÷ # ÷ [0.2] COLON (MidLetter) × [4.0] COMBINING DIAERESIS (Extend_FE) ÷ [999.0] DIGIT ONE (Numeric) ÷ [999.0] COMMA (MidNum) ÷ [0.3] ÷ 003A ÷ 0031 ÷ 002E × 2060 ÷ # ÷ [0.2] COLON (MidLetter) ÷ [999.0] DIGIT ONE (Numeric) ÷ [999.0] FULL STOP (MidNumLet) × [4.0] WORD JOINER (Format_FE) ÷ [0.3] @@ -358,14 +400,20 @@ ÷ 002C × 0308 ÷ 003A ÷ # ÷ [0.2] COMMA (MidNum) × [4.0] COMBINING DIAERESIS (Extend_FE) ÷ [999.0] COLON (MidLetter) ÷ [0.3] ÷ 002C ÷ 002C ÷ # ÷ [0.2] COMMA (MidNum) ÷ [999.0] COMMA (MidNum) ÷ [0.3] ÷ 002C × 0308 ÷ 002C ÷ # ÷ [0.2] COMMA (MidNum) × [4.0] COMBINING DIAERESIS (Extend_FE) ÷ [999.0] COMMA (MidNum) ÷ [0.3] -÷ 002C ÷ 0027 ÷ # ÷ [0.2] COMMA (MidNum) ÷ [999.0] APOSTROPHE (MidNumLet) ÷ [0.3] -÷ 002C × 0308 ÷ 0027 ÷ # ÷ [0.2] COMMA (MidNum) × [4.0] COMBINING DIAERESIS (Extend_FE) ÷ [999.0] APOSTROPHE (MidNumLet) ÷ [0.3] +÷ 002C ÷ 002E ÷ # ÷ [0.2] COMMA (MidNum) ÷ [999.0] FULL STOP (MidNumLet) ÷ [0.3] +÷ 002C × 0308 ÷ 002E ÷ # ÷ [0.2] COMMA (MidNum) × [4.0] COMBINING DIAERESIS (Extend_FE) ÷ [999.0] FULL STOP (MidNumLet) ÷ [0.3] ÷ 002C ÷ 0030 ÷ # ÷ [0.2] COMMA (MidNum) ÷ [999.0] DIGIT ZERO (Numeric) ÷ [0.3] ÷ 002C × 0308 ÷ 0030 ÷ # ÷ [0.2] COMMA (MidNum) × [4.0] COMBINING DIAERESIS (Extend_FE) ÷ [999.0] DIGIT ZERO (Numeric) ÷ [0.3] ÷ 002C ÷ 005F ÷ # ÷ [0.2] COMMA (MidNum) ÷ [999.0] LOW LINE (ExtendNumLet) ÷ [0.3] ÷ 002C × 0308 ÷ 005F ÷ # ÷ [0.2] COMMA (MidNum) × [4.0] COMBINING DIAERESIS (Extend_FE) ÷ [999.0] LOW LINE (ExtendNumLet) ÷ [0.3] ÷ 002C ÷ 1F1E6 ÷ # ÷ [0.2] COMMA (MidNum) ÷ [999.0] REGIONAL INDICATOR SYMBOL LETTER A (Regional_Indicator) ÷ [0.3] ÷ 002C × 0308 ÷ 1F1E6 ÷ # ÷ [0.2] COMMA (MidNum) × [4.0] COMBINING DIAERESIS (Extend_FE) ÷ [999.0] REGIONAL INDICATOR SYMBOL LETTER A (Regional_Indicator) ÷ [0.3] +÷ 002C ÷ 05D0 ÷ # ÷ [0.2] COMMA (MidNum) ÷ [999.0] HEBREW LETTER ALEF (Hebrew_Letter) ÷ [0.3] +÷ 002C × 0308 ÷ 05D0 ÷ # ÷ [0.2] COMMA (MidNum) × [4.0] COMBINING DIAERESIS (Extend_FE) ÷ [999.0] HEBREW LETTER ALEF (Hebrew_Letter) ÷ [0.3] +÷ 002C ÷ 0022 ÷ # ÷ [0.2] COMMA (MidNum) ÷ [999.0] QUOTATION MARK (Double_Quote) ÷ [0.3] +÷ 002C × 0308 ÷ 0022 ÷ # ÷ [0.2] COMMA (MidNum) × [4.0] COMBINING DIAERESIS (Extend_FE) ÷ [999.0] QUOTATION MARK (Double_Quote) ÷ [0.3] +÷ 002C ÷ 0027 ÷ # ÷ [0.2] COMMA (MidNum) ÷ [999.0] APOSTROPHE (Single_Quote) ÷ [0.3] +÷ 002C × 0308 ÷ 0027 ÷ # ÷ [0.2] COMMA (MidNum) × [4.0] COMBINING DIAERESIS (Extend_FE) ÷ [999.0] APOSTROPHE (Single_Quote) ÷ [0.3] ÷ 002C × 00AD ÷ # ÷ [0.2] COMMA (MidNum) × [4.0] SOFT HYPHEN (Format_FE) ÷ [0.3] ÷ 002C × 0308 × 00AD ÷ # ÷ [0.2] COMMA (MidNum) × [4.0] COMBINING DIAERESIS (Extend_FE) × [4.0] SOFT HYPHEN (Format_FE) ÷ [0.3] ÷ 002C × 0300 ÷ # ÷ [0.2] COMMA (MidNum) × [4.0] COMBINING GRAVE ACCENT (Extend_FE) ÷ [0.3] @@ -374,66 +422,72 @@ ÷ 002C × 0308 ÷ 0061 × 2060 ÷ # ÷ [0.2] COMMA (MidNum) × [4.0] COMBINING DIAERESIS (Extend_FE) ÷ [999.0] LATIN SMALL LETTER A (ALetter) × [4.0] WORD JOINER (Format_FE) ÷ [0.3] ÷ 002C ÷ 0061 ÷ 003A ÷ # ÷ [0.2] COMMA (MidNum) ÷ [999.0] LATIN SMALL LETTER A (ALetter) ÷ [999.0] COLON (MidLetter) ÷ [0.3] ÷ 002C × 0308 ÷ 0061 ÷ 003A ÷ # ÷ [0.2] COMMA (MidNum) × [4.0] COMBINING DIAERESIS (Extend_FE) ÷ [999.0] LATIN SMALL LETTER A (ALetter) ÷ [999.0] COLON (MidLetter) ÷ [0.3] -÷ 002C ÷ 0061 ÷ 0027 ÷ # ÷ [0.2] COMMA (MidNum) ÷ [999.0] LATIN SMALL LETTER A (ALetter) ÷ [999.0] APOSTROPHE (MidNumLet) ÷ [0.3] -÷ 002C × 0308 ÷ 0061 ÷ 0027 ÷ # ÷ [0.2] COMMA (MidNum) × [4.0] COMBINING DIAERESIS (Extend_FE) ÷ [999.0] LATIN SMALL LETTER A (ALetter) ÷ [999.0] APOSTROPHE (MidNumLet) ÷ [0.3] -÷ 002C ÷ 0061 ÷ 0027 × 2060 ÷ # ÷ [0.2] COMMA (MidNum) ÷ [999.0] LATIN SMALL LETTER A (ALetter) ÷ [999.0] APOSTROPHE (MidNumLet) × [4.0] WORD JOINER (Format_FE) ÷ [0.3] -÷ 002C × 0308 ÷ 0061 ÷ 0027 × 2060 ÷ # ÷ [0.2] COMMA (MidNum) × [4.0] COMBINING DIAERESIS (Extend_FE) ÷ [999.0] LATIN SMALL LETTER A (ALetter) ÷ [999.0] APOSTROPHE (MidNumLet) × [4.0] WORD JOINER (Format_FE) ÷ [0.3] +÷ 002C ÷ 0061 ÷ 0027 ÷ # ÷ [0.2] COMMA (MidNum) ÷ [999.0] LATIN SMALL LETTER A (ALetter) ÷ [999.0] APOSTROPHE (Single_Quote) ÷ [0.3] +÷ 002C × 0308 ÷ 0061 ÷ 0027 ÷ # ÷ [0.2] COMMA (MidNum) × [4.0] COMBINING DIAERESIS (Extend_FE) ÷ [999.0] LATIN SMALL LETTER A (ALetter) ÷ [999.0] APOSTROPHE (Single_Quote) ÷ [0.3] +÷ 002C ÷ 0061 ÷ 0027 × 2060 ÷ # ÷ [0.2] COMMA (MidNum) ÷ [999.0] LATIN SMALL LETTER A (ALetter) ÷ [999.0] APOSTROPHE (Single_Quote) × [4.0] WORD JOINER (Format_FE) ÷ [0.3] +÷ 002C × 0308 ÷ 0061 ÷ 0027 × 2060 ÷ # ÷ [0.2] COMMA (MidNum) × [4.0] COMBINING DIAERESIS (Extend_FE) ÷ [999.0] LATIN SMALL LETTER A (ALetter) ÷ [999.0] APOSTROPHE (Single_Quote) × [4.0] WORD JOINER (Format_FE) ÷ [0.3] ÷ 002C ÷ 0061 ÷ 002C ÷ # ÷ [0.2] COMMA (MidNum) ÷ [999.0] LATIN SMALL LETTER A (ALetter) ÷ [999.0] COMMA (MidNum) ÷ [0.3] ÷ 002C × 0308 ÷ 0061 ÷ 002C ÷ # ÷ [0.2] COMMA (MidNum) × [4.0] COMBINING DIAERESIS (Extend_FE) ÷ [999.0] LATIN SMALL LETTER A (ALetter) ÷ [999.0] COMMA (MidNum) ÷ [0.3] ÷ 002C ÷ 0031 ÷ 003A ÷ # ÷ [0.2] COMMA (MidNum) ÷ [999.0] DIGIT ONE (Numeric) ÷ [999.0] COLON (MidLetter) ÷ [0.3] ÷ 002C × 0308 ÷ 0031 ÷ 003A ÷ # ÷ [0.2] COMMA (MidNum) × [4.0] COMBINING DIAERESIS (Extend_FE) ÷ [999.0] DIGIT ONE (Numeric) ÷ [999.0] COLON (MidLetter) ÷ [0.3] -÷ 002C ÷ 0031 ÷ 0027 ÷ # ÷ [0.2] COMMA (MidNum) ÷ [999.0] DIGIT ONE (Numeric) ÷ [999.0] APOSTROPHE (MidNumLet) ÷ [0.3] -÷ 002C × 0308 ÷ 0031 ÷ 0027 ÷ # ÷ [0.2] COMMA (MidNum) × [4.0] COMBINING DIAERESIS (Extend_FE) ÷ [999.0] DIGIT ONE (Numeric) ÷ [999.0] APOSTROPHE (MidNumLet) ÷ [0.3] +÷ 002C ÷ 0031 ÷ 0027 ÷ # ÷ [0.2] COMMA (MidNum) ÷ [999.0] DIGIT ONE (Numeric) ÷ [999.0] APOSTROPHE (Single_Quote) ÷ [0.3] +÷ 002C × 0308 ÷ 0031 ÷ 0027 ÷ # ÷ [0.2] COMMA (MidNum) × [4.0] COMBINING DIAERESIS (Extend_FE) ÷ [999.0] DIGIT ONE (Numeric) ÷ [999.0] APOSTROPHE (Single_Quote) ÷ [0.3] ÷ 002C ÷ 0031 ÷ 002C ÷ # ÷ [0.2] COMMA (MidNum) ÷ [999.0] DIGIT ONE (Numeric) ÷ [999.0] COMMA (MidNum) ÷ [0.3] ÷ 002C × 0308 ÷ 0031 ÷ 002C ÷ # ÷ [0.2] COMMA (MidNum) × [4.0] COMBINING DIAERESIS (Extend_FE) ÷ [999.0] DIGIT ONE (Numeric) ÷ [999.0] COMMA (MidNum) ÷ [0.3] ÷ 002C ÷ 0031 ÷ 002E × 2060 ÷ # ÷ [0.2] COMMA (MidNum) ÷ [999.0] DIGIT ONE (Numeric) ÷ [999.0] FULL STOP (MidNumLet) × [4.0] WORD JOINER (Format_FE) ÷ [0.3] ÷ 002C × 0308 ÷ 0031 ÷ 002E × 2060 ÷ # ÷ [0.2] COMMA (MidNum) × [4.0] COMBINING DIAERESIS (Extend_FE) ÷ [999.0] DIGIT ONE (Numeric) ÷ [999.0] FULL STOP (MidNumLet) × [4.0] WORD JOINER (Format_FE) ÷ [0.3] -÷ 0027 ÷ 0001 ÷ # ÷ [0.2] APOSTROPHE (MidNumLet) ÷ [999.0] (Other) ÷ [0.3] -÷ 0027 × 0308 ÷ 0001 ÷ # ÷ [0.2] APOSTROPHE (MidNumLet) × [4.0] COMBINING DIAERESIS (Extend_FE) ÷ [999.0] (Other) ÷ [0.3] -÷ 0027 ÷ 000D ÷ # ÷ [0.2] APOSTROPHE (MidNumLet) ÷ [3.2] (CR) ÷ [0.3] -÷ 0027 × 0308 ÷ 000D ÷ # ÷ [0.2] APOSTROPHE (MidNumLet) × [4.0] COMBINING DIAERESIS (Extend_FE) ÷ [3.2] (CR) ÷ [0.3] -÷ 0027 ÷ 000A ÷ # ÷ [0.2] APOSTROPHE (MidNumLet) ÷ [3.2] (LF) ÷ [0.3] -÷ 0027 × 0308 ÷ 000A ÷ # ÷ [0.2] APOSTROPHE (MidNumLet) × [4.0] COMBINING DIAERESIS (Extend_FE) ÷ [3.2] (LF) ÷ [0.3] -÷ 0027 ÷ 000B ÷ # ÷ [0.2] APOSTROPHE (MidNumLet) ÷ [3.2] (Newline) ÷ [0.3] -÷ 0027 × 0308 ÷ 000B ÷ # ÷ [0.2] APOSTROPHE (MidNumLet) × [4.0] COMBINING DIAERESIS (Extend_FE) ÷ [3.2] (Newline) ÷ [0.3] -÷ 0027 ÷ 3031 ÷ # ÷ [0.2] APOSTROPHE (MidNumLet) ÷ [999.0] VERTICAL KANA REPEAT MARK (Katakana) ÷ [0.3] -÷ 0027 × 0308 ÷ 3031 ÷ # ÷ [0.2] APOSTROPHE (MidNumLet) × [4.0] COMBINING DIAERESIS (Extend_FE) ÷ [999.0] VERTICAL KANA REPEAT MARK (Katakana) ÷ [0.3] -÷ 0027 ÷ 0041 ÷ # ÷ [0.2] APOSTROPHE (MidNumLet) ÷ [999.0] LATIN CAPITAL LETTER A (ALetter) ÷ [0.3] -÷ 0027 × 0308 ÷ 0041 ÷ # ÷ [0.2] APOSTROPHE (MidNumLet) × [4.0] COMBINING DIAERESIS (Extend_FE) ÷ [999.0] LATIN CAPITAL LETTER A (ALetter) ÷ [0.3] -÷ 0027 ÷ 003A ÷ # ÷ [0.2] APOSTROPHE (MidNumLet) ÷ [999.0] COLON (MidLetter) ÷ [0.3] -÷ 0027 × 0308 ÷ 003A ÷ # ÷ [0.2] APOSTROPHE (MidNumLet) × [4.0] COMBINING DIAERESIS (Extend_FE) ÷ [999.0] COLON (MidLetter) ÷ [0.3] -÷ 0027 ÷ 002C ÷ # ÷ [0.2] APOSTROPHE (MidNumLet) ÷ [999.0] COMMA (MidNum) ÷ [0.3] -÷ 0027 × 0308 ÷ 002C ÷ # ÷ [0.2] APOSTROPHE (MidNumLet) × [4.0] COMBINING DIAERESIS (Extend_FE) ÷ [999.0] COMMA (MidNum) ÷ [0.3] -÷ 0027 ÷ 0027 ÷ # ÷ [0.2] APOSTROPHE (MidNumLet) ÷ [999.0] APOSTROPHE (MidNumLet) ÷ [0.3] -÷ 0027 × 0308 ÷ 0027 ÷ # ÷ [0.2] APOSTROPHE (MidNumLet) × [4.0] COMBINING DIAERESIS (Extend_FE) ÷ [999.0] APOSTROPHE (MidNumLet) ÷ [0.3] -÷ 0027 ÷ 0030 ÷ # ÷ [0.2] APOSTROPHE (MidNumLet) ÷ [999.0] DIGIT ZERO (Numeric) ÷ [0.3] -÷ 0027 × 0308 ÷ 0030 ÷ # ÷ [0.2] APOSTROPHE (MidNumLet) × [4.0] COMBINING DIAERESIS (Extend_FE) ÷ [999.0] DIGIT ZERO (Numeric) ÷ [0.3] -÷ 0027 ÷ 005F ÷ # ÷ [0.2] APOSTROPHE (MidNumLet) ÷ [999.0] LOW LINE (ExtendNumLet) ÷ [0.3] -÷ 0027 × 0308 ÷ 005F ÷ # ÷ [0.2] APOSTROPHE (MidNumLet) × [4.0] COMBINING DIAERESIS (Extend_FE) ÷ [999.0] LOW LINE (ExtendNumLet) ÷ [0.3] -÷ 0027 ÷ 1F1E6 ÷ # ÷ [0.2] APOSTROPHE (MidNumLet) ÷ [999.0] REGIONAL INDICATOR SYMBOL LETTER A (Regional_Indicator) ÷ [0.3] -÷ 0027 × 0308 ÷ 1F1E6 ÷ # ÷ [0.2] APOSTROPHE (MidNumLet) × [4.0] COMBINING DIAERESIS (Extend_FE) ÷ [999.0] REGIONAL INDICATOR SYMBOL LETTER A (Regional_Indicator) ÷ [0.3] -÷ 0027 × 00AD ÷ # ÷ [0.2] APOSTROPHE (MidNumLet) × [4.0] SOFT HYPHEN (Format_FE) ÷ [0.3] -÷ 0027 × 0308 × 00AD ÷ # ÷ [0.2] APOSTROPHE (MidNumLet) × [4.0] COMBINING DIAERESIS (Extend_FE) × [4.0] SOFT HYPHEN (Format_FE) ÷ [0.3] -÷ 0027 × 0300 ÷ # ÷ [0.2] APOSTROPHE (MidNumLet) × [4.0] COMBINING GRAVE ACCENT (Extend_FE) ÷ [0.3] -÷ 0027 × 0308 × 0300 ÷ # ÷ [0.2] APOSTROPHE (MidNumLet) × [4.0] COMBINING DIAERESIS (Extend_FE) × [4.0] COMBINING GRAVE ACCENT (Extend_FE) ÷ [0.3] -÷ 0027 ÷ 0061 × 2060 ÷ # ÷ [0.2] APOSTROPHE (MidNumLet) ÷ [999.0] LATIN SMALL LETTER A (ALetter) × [4.0] WORD JOINER (Format_FE) ÷ [0.3] -÷ 0027 × 0308 ÷ 0061 × 2060 ÷ # ÷ [0.2] APOSTROPHE (MidNumLet) × [4.0] COMBINING DIAERESIS (Extend_FE) ÷ [999.0] LATIN SMALL LETTER A (ALetter) × [4.0] WORD JOINER (Format_FE) ÷ [0.3] -÷ 0027 ÷ 0061 ÷ 003A ÷ # ÷ [0.2] APOSTROPHE (MidNumLet) ÷ [999.0] LATIN SMALL LETTER A (ALetter) ÷ [999.0] COLON (MidLetter) ÷ [0.3] -÷ 0027 × 0308 ÷ 0061 ÷ 003A ÷ # ÷ [0.2] APOSTROPHE (MidNumLet) × [4.0] COMBINING DIAERESIS (Extend_FE) ÷ [999.0] LATIN SMALL LETTER A (ALetter) ÷ [999.0] COLON (MidLetter) ÷ [0.3] -÷ 0027 ÷ 0061 ÷ 0027 ÷ # ÷ [0.2] APOSTROPHE (MidNumLet) ÷ [999.0] LATIN SMALL LETTER A (ALetter) ÷ [999.0] APOSTROPHE (MidNumLet) ÷ [0.3] -÷ 0027 × 0308 ÷ 0061 ÷ 0027 ÷ # ÷ [0.2] APOSTROPHE (MidNumLet) × [4.0] COMBINING DIAERESIS (Extend_FE) ÷ [999.0] LATIN SMALL LETTER A (ALetter) ÷ [999.0] APOSTROPHE (MidNumLet) ÷ [0.3] -÷ 0027 ÷ 0061 ÷ 0027 × 2060 ÷ # ÷ [0.2] APOSTROPHE (MidNumLet) ÷ [999.0] LATIN SMALL LETTER A (ALetter) ÷ [999.0] APOSTROPHE (MidNumLet) × [4.0] WORD JOINER (Format_FE) ÷ [0.3] -÷ 0027 × 0308 ÷ 0061 ÷ 0027 × 2060 ÷ # ÷ [0.2] APOSTROPHE (MidNumLet) × [4.0] COMBINING DIAERESIS (Extend_FE) ÷ [999.0] LATIN SMALL LETTER A (ALetter) ÷ [999.0] APOSTROPHE (MidNumLet) × [4.0] WORD JOINER (Format_FE) ÷ [0.3] -÷ 0027 ÷ 0061 ÷ 002C ÷ # ÷ [0.2] APOSTROPHE (MidNumLet) ÷ [999.0] LATIN SMALL LETTER A (ALetter) ÷ [999.0] COMMA (MidNum) ÷ [0.3] -÷ 0027 × 0308 ÷ 0061 ÷ 002C ÷ # ÷ [0.2] APOSTROPHE (MidNumLet) × [4.0] COMBINING DIAERESIS (Extend_FE) ÷ [999.0] LATIN SMALL LETTER A (ALetter) ÷ [999.0] COMMA (MidNum) ÷ [0.3] -÷ 0027 ÷ 0031 ÷ 003A ÷ # ÷ [0.2] APOSTROPHE (MidNumLet) ÷ [999.0] DIGIT ONE (Numeric) ÷ [999.0] COLON (MidLetter) ÷ [0.3] -÷ 0027 × 0308 ÷ 0031 ÷ 003A ÷ # ÷ [0.2] APOSTROPHE (MidNumLet) × [4.0] COMBINING DIAERESIS (Extend_FE) ÷ [999.0] DIGIT ONE (Numeric) ÷ [999.0] COLON (MidLetter) ÷ [0.3] -÷ 0027 ÷ 0031 ÷ 0027 ÷ # ÷ [0.2] APOSTROPHE (MidNumLet) ÷ [999.0] DIGIT ONE (Numeric) ÷ [999.0] APOSTROPHE (MidNumLet) ÷ [0.3] -÷ 0027 × 0308 ÷ 0031 ÷ 0027 ÷ # ÷ [0.2] APOSTROPHE (MidNumLet) × [4.0] COMBINING DIAERESIS (Extend_FE) ÷ [999.0] DIGIT ONE (Numeric) ÷ [999.0] APOSTROPHE (MidNumLet) ÷ [0.3] -÷ 0027 ÷ 0031 ÷ 002C ÷ # ÷ [0.2] APOSTROPHE (MidNumLet) ÷ [999.0] DIGIT ONE (Numeric) ÷ [999.0] COMMA (MidNum) ÷ [0.3] -÷ 0027 × 0308 ÷ 0031 ÷ 002C ÷ # ÷ [0.2] APOSTROPHE (MidNumLet) × [4.0] COMBINING DIAERESIS (Extend_FE) ÷ [999.0] DIGIT ONE (Numeric) ÷ [999.0] COMMA (MidNum) ÷ [0.3] -÷ 0027 ÷ 0031 ÷ 002E × 2060 ÷ # ÷ [0.2] APOSTROPHE (MidNumLet) ÷ [999.0] DIGIT ONE (Numeric) ÷ [999.0] FULL STOP (MidNumLet) × [4.0] WORD JOINER (Format_FE) ÷ [0.3] -÷ 0027 × 0308 ÷ 0031 ÷ 002E × 2060 ÷ # ÷ [0.2] APOSTROPHE (MidNumLet) × [4.0] COMBINING DIAERESIS (Extend_FE) ÷ [999.0] DIGIT ONE (Numeric) ÷ [999.0] FULL STOP (MidNumLet) × [4.0] WORD JOINER (Format_FE) ÷ [0.3] +÷ 002E ÷ 0001 ÷ # ÷ [0.2] FULL STOP (MidNumLet) ÷ [999.0] (Other) ÷ [0.3] +÷ 002E × 0308 ÷ 0001 ÷ # ÷ [0.2] FULL STOP (MidNumLet) × [4.0] COMBINING DIAERESIS (Extend_FE) ÷ [999.0] (Other) ÷ [0.3] +÷ 002E ÷ 000D ÷ # ÷ [0.2] FULL STOP (MidNumLet) ÷ [3.2] (CR) ÷ [0.3] +÷ 002E × 0308 ÷ 000D ÷ # ÷ [0.2] FULL STOP (MidNumLet) × [4.0] COMBINING DIAERESIS (Extend_FE) ÷ [3.2] (CR) ÷ [0.3] +÷ 002E ÷ 000A ÷ # ÷ [0.2] FULL STOP (MidNumLet) ÷ [3.2] (LF) ÷ [0.3] +÷ 002E × 0308 ÷ 000A ÷ # ÷ [0.2] FULL STOP (MidNumLet) × [4.0] COMBINING DIAERESIS (Extend_FE) ÷ [3.2] (LF) ÷ [0.3] +÷ 002E ÷ 000B ÷ # ÷ [0.2] FULL STOP (MidNumLet) ÷ [3.2] (Newline) ÷ [0.3] +÷ 002E × 0308 ÷ 000B ÷ # ÷ [0.2] FULL STOP (MidNumLet) × [4.0] COMBINING DIAERESIS (Extend_FE) ÷ [3.2] (Newline) ÷ [0.3] +÷ 002E ÷ 3031 ÷ # ÷ [0.2] FULL STOP (MidNumLet) ÷ [999.0] VERTICAL KANA REPEAT MARK (Katakana) ÷ [0.3] +÷ 002E × 0308 ÷ 3031 ÷ # ÷ [0.2] FULL STOP (MidNumLet) × [4.0] COMBINING DIAERESIS (Extend_FE) ÷ [999.0] VERTICAL KANA REPEAT MARK (Katakana) ÷ [0.3] +÷ 002E ÷ 0041 ÷ # ÷ [0.2] FULL STOP (MidNumLet) ÷ [999.0] LATIN CAPITAL LETTER A (ALetter) ÷ [0.3] +÷ 002E × 0308 ÷ 0041 ÷ # ÷ [0.2] FULL STOP (MidNumLet) × [4.0] COMBINING DIAERESIS (Extend_FE) ÷ [999.0] LATIN CAPITAL LETTER A (ALetter) ÷ [0.3] +÷ 002E ÷ 003A ÷ # ÷ [0.2] FULL STOP (MidNumLet) ÷ [999.0] COLON (MidLetter) ÷ [0.3] +÷ 002E × 0308 ÷ 003A ÷ # ÷ [0.2] FULL STOP (MidNumLet) × [4.0] COMBINING DIAERESIS (Extend_FE) ÷ [999.0] COLON (MidLetter) ÷ [0.3] +÷ 002E ÷ 002C ÷ # ÷ [0.2] FULL STOP (MidNumLet) ÷ [999.0] COMMA (MidNum) ÷ [0.3] +÷ 002E × 0308 ÷ 002C ÷ # ÷ [0.2] FULL STOP (MidNumLet) × [4.0] COMBINING DIAERESIS (Extend_FE) ÷ [999.0] COMMA (MidNum) ÷ [0.3] +÷ 002E ÷ 002E ÷ # ÷ [0.2] FULL STOP (MidNumLet) ÷ [999.0] FULL STOP (MidNumLet) ÷ [0.3] +÷ 002E × 0308 ÷ 002E ÷ # ÷ [0.2] FULL STOP (MidNumLet) × [4.0] COMBINING DIAERESIS (Extend_FE) ÷ [999.0] FULL STOP (MidNumLet) ÷ [0.3] +÷ 002E ÷ 0030 ÷ # ÷ [0.2] FULL STOP (MidNumLet) ÷ [999.0] DIGIT ZERO (Numeric) ÷ [0.3] +÷ 002E × 0308 ÷ 0030 ÷ # ÷ [0.2] FULL STOP (MidNumLet) × [4.0] COMBINING DIAERESIS (Extend_FE) ÷ [999.0] DIGIT ZERO (Numeric) ÷ [0.3] +÷ 002E ÷ 005F ÷ # ÷ [0.2] FULL STOP (MidNumLet) ÷ [999.0] LOW LINE (ExtendNumLet) ÷ [0.3] +÷ 002E × 0308 ÷ 005F ÷ # ÷ [0.2] FULL STOP (MidNumLet) × [4.0] COMBINING DIAERESIS (Extend_FE) ÷ [999.0] LOW LINE (ExtendNumLet) ÷ [0.3] +÷ 002E ÷ 1F1E6 ÷ # ÷ [0.2] FULL STOP (MidNumLet) ÷ [999.0] REGIONAL INDICATOR SYMBOL LETTER A (Regional_Indicator) ÷ [0.3] +÷ 002E × 0308 ÷ 1F1E6 ÷ # ÷ [0.2] FULL STOP (MidNumLet) × [4.0] COMBINING DIAERESIS (Extend_FE) ÷ [999.0] REGIONAL INDICATOR SYMBOL LETTER A (Regional_Indicator) ÷ [0.3] +÷ 002E ÷ 05D0 ÷ # ÷ [0.2] FULL STOP (MidNumLet) ÷ [999.0] HEBREW LETTER ALEF (Hebrew_Letter) ÷ [0.3] +÷ 002E × 0308 ÷ 05D0 ÷ # ÷ [0.2] FULL STOP (MidNumLet) × [4.0] COMBINING DIAERESIS (Extend_FE) ÷ [999.0] HEBREW LETTER ALEF (Hebrew_Letter) ÷ [0.3] +÷ 002E ÷ 0022 ÷ # ÷ [0.2] FULL STOP (MidNumLet) ÷ [999.0] QUOTATION MARK (Double_Quote) ÷ [0.3] +÷ 002E × 0308 ÷ 0022 ÷ # ÷ [0.2] FULL STOP (MidNumLet) × [4.0] COMBINING DIAERESIS (Extend_FE) ÷ [999.0] QUOTATION MARK (Double_Quote) ÷ [0.3] +÷ 002E ÷ 0027 ÷ # ÷ [0.2] FULL STOP (MidNumLet) ÷ [999.0] APOSTROPHE (Single_Quote) ÷ [0.3] +÷ 002E × 0308 ÷ 0027 ÷ # ÷ [0.2] FULL STOP (MidNumLet) × [4.0] COMBINING DIAERESIS (Extend_FE) ÷ [999.0] APOSTROPHE (Single_Quote) ÷ [0.3] +÷ 002E × 00AD ÷ # ÷ [0.2] FULL STOP (MidNumLet) × [4.0] SOFT HYPHEN (Format_FE) ÷ [0.3] +÷ 002E × 0308 × 00AD ÷ # ÷ [0.2] FULL STOP (MidNumLet) × [4.0] COMBINING DIAERESIS (Extend_FE) × [4.0] SOFT HYPHEN (Format_FE) ÷ [0.3] +÷ 002E × 0300 ÷ # ÷ [0.2] FULL STOP (MidNumLet) × [4.0] COMBINING GRAVE ACCENT (Extend_FE) ÷ [0.3] +÷ 002E × 0308 × 0300 ÷ # ÷ [0.2] FULL STOP (MidNumLet) × [4.0] COMBINING DIAERESIS (Extend_FE) × [4.0] COMBINING GRAVE ACCENT (Extend_FE) ÷ [0.3] +÷ 002E ÷ 0061 × 2060 ÷ # ÷ [0.2] FULL STOP (MidNumLet) ÷ [999.0] LATIN SMALL LETTER A (ALetter) × [4.0] WORD JOINER (Format_FE) ÷ [0.3] +÷ 002E × 0308 ÷ 0061 × 2060 ÷ # ÷ [0.2] FULL STOP (MidNumLet) × [4.0] COMBINING DIAERESIS (Extend_FE) ÷ [999.0] LATIN SMALL LETTER A (ALetter) × [4.0] WORD JOINER (Format_FE) ÷ [0.3] +÷ 002E ÷ 0061 ÷ 003A ÷ # ÷ [0.2] FULL STOP (MidNumLet) ÷ [999.0] LATIN SMALL LETTER A (ALetter) ÷ [999.0] COLON (MidLetter) ÷ [0.3] +÷ 002E × 0308 ÷ 0061 ÷ 003A ÷ # ÷ [0.2] FULL STOP (MidNumLet) × [4.0] COMBINING DIAERESIS (Extend_FE) ÷ [999.0] LATIN SMALL LETTER A (ALetter) ÷ [999.0] COLON (MidLetter) ÷ [0.3] +÷ 002E ÷ 0061 ÷ 0027 ÷ # ÷ [0.2] FULL STOP (MidNumLet) ÷ [999.0] LATIN SMALL LETTER A (ALetter) ÷ [999.0] APOSTROPHE (Single_Quote) ÷ [0.3] +÷ 002E × 0308 ÷ 0061 ÷ 0027 ÷ # ÷ [0.2] FULL STOP (MidNumLet) × [4.0] COMBINING DIAERESIS (Extend_FE) ÷ [999.0] LATIN SMALL LETTER A (ALetter) ÷ [999.0] APOSTROPHE (Single_Quote) ÷ [0.3] +÷ 002E ÷ 0061 ÷ 0027 × 2060 ÷ # ÷ [0.2] FULL STOP (MidNumLet) ÷ [999.0] LATIN SMALL LETTER A (ALetter) ÷ [999.0] APOSTROPHE (Single_Quote) × [4.0] WORD JOINER (Format_FE) ÷ [0.3] +÷ 002E × 0308 ÷ 0061 ÷ 0027 × 2060 ÷ # ÷ [0.2] FULL STOP (MidNumLet) × [4.0] COMBINING DIAERESIS (Extend_FE) ÷ [999.0] LATIN SMALL LETTER A (ALetter) ÷ [999.0] APOSTROPHE (Single_Quote) × [4.0] WORD JOINER (Format_FE) ÷ [0.3] +÷ 002E ÷ 0061 ÷ 002C ÷ # ÷ [0.2] FULL STOP (MidNumLet) ÷ [999.0] LATIN SMALL LETTER A (ALetter) ÷ [999.0] COMMA (MidNum) ÷ [0.3] +÷ 002E × 0308 ÷ 0061 ÷ 002C ÷ # ÷ [0.2] FULL STOP (MidNumLet) × [4.0] COMBINING DIAERESIS (Extend_FE) ÷ [999.0] LATIN SMALL LETTER A (ALetter) ÷ [999.0] COMMA (MidNum) ÷ [0.3] +÷ 002E ÷ 0031 ÷ 003A ÷ # ÷ [0.2] FULL STOP (MidNumLet) ÷ [999.0] DIGIT ONE (Numeric) ÷ [999.0] COLON (MidLetter) ÷ [0.3] +÷ 002E × 0308 ÷ 0031 ÷ 003A ÷ # ÷ [0.2] FULL STOP (MidNumLet) × [4.0] COMBINING DIAERESIS (Extend_FE) ÷ [999.0] DIGIT ONE (Numeric) ÷ [999.0] COLON (MidLetter) ÷ [0.3] +÷ 002E ÷ 0031 ÷ 0027 ÷ # ÷ [0.2] FULL STOP (MidNumLet) ÷ [999.0] DIGIT ONE (Numeric) ÷ [999.0] APOSTROPHE (Single_Quote) ÷ [0.3] +÷ 002E × 0308 ÷ 0031 ÷ 0027 ÷ # ÷ [0.2] FULL STOP (MidNumLet) × [4.0] COMBINING DIAERESIS (Extend_FE) ÷ [999.0] DIGIT ONE (Numeric) ÷ [999.0] APOSTROPHE (Single_Quote) ÷ [0.3] +÷ 002E ÷ 0031 ÷ 002C ÷ # ÷ [0.2] FULL STOP (MidNumLet) ÷ [999.0] DIGIT ONE (Numeric) ÷ [999.0] COMMA (MidNum) ÷ [0.3] +÷ 002E × 0308 ÷ 0031 ÷ 002C ÷ # ÷ [0.2] FULL STOP (MidNumLet) × [4.0] COMBINING DIAERESIS (Extend_FE) ÷ [999.0] DIGIT ONE (Numeric) ÷ [999.0] COMMA (MidNum) ÷ [0.3] +÷ 002E ÷ 0031 ÷ 002E × 2060 ÷ # ÷ [0.2] FULL STOP (MidNumLet) ÷ [999.0] DIGIT ONE (Numeric) ÷ [999.0] FULL STOP (MidNumLet) × [4.0] WORD JOINER (Format_FE) ÷ [0.3] +÷ 002E × 0308 ÷ 0031 ÷ 002E × 2060 ÷ # ÷ [0.2] FULL STOP (MidNumLet) × [4.0] COMBINING DIAERESIS (Extend_FE) ÷ [999.0] DIGIT ONE (Numeric) ÷ [999.0] FULL STOP (MidNumLet) × [4.0] WORD JOINER (Format_FE) ÷ [0.3] ÷ 0030 ÷ 0001 ÷ # ÷ [0.2] DIGIT ZERO (Numeric) ÷ [999.0] (Other) ÷ [0.3] ÷ 0030 × 0308 ÷ 0001 ÷ # ÷ [0.2] DIGIT ZERO (Numeric) × [4.0] COMBINING DIAERESIS (Extend_FE) ÷ [999.0] (Other) ÷ [0.3] ÷ 0030 ÷ 000D ÷ # ÷ [0.2] DIGIT ZERO (Numeric) ÷ [3.2] (CR) ÷ [0.3] @@ -450,14 +504,20 @@ ÷ 0030 × 0308 ÷ 003A ÷ # ÷ [0.2] DIGIT ZERO (Numeric) × [4.0] COMBINING DIAERESIS (Extend_FE) ÷ [999.0] COLON (MidLetter) ÷ [0.3] ÷ 0030 ÷ 002C ÷ # ÷ [0.2] DIGIT ZERO (Numeric) ÷ [999.0] COMMA (MidNum) ÷ [0.3] ÷ 0030 × 0308 ÷ 002C ÷ # ÷ [0.2] DIGIT ZERO (Numeric) × [4.0] COMBINING DIAERESIS (Extend_FE) ÷ [999.0] COMMA (MidNum) ÷ [0.3] -÷ 0030 ÷ 0027 ÷ # ÷ [0.2] DIGIT ZERO (Numeric) ÷ [999.0] APOSTROPHE (MidNumLet) ÷ [0.3] -÷ 0030 × 0308 ÷ 0027 ÷ # ÷ [0.2] DIGIT ZERO (Numeric) × [4.0] COMBINING DIAERESIS (Extend_FE) ÷ [999.0] APOSTROPHE (MidNumLet) ÷ [0.3] +÷ 0030 ÷ 002E ÷ # ÷ [0.2] DIGIT ZERO (Numeric) ÷ [999.0] FULL STOP (MidNumLet) ÷ [0.3] +÷ 0030 × 0308 ÷ 002E ÷ # ÷ [0.2] DIGIT ZERO (Numeric) × [4.0] COMBINING DIAERESIS (Extend_FE) ÷ [999.0] FULL STOP (MidNumLet) ÷ [0.3] ÷ 0030 × 0030 ÷ # ÷ [0.2] DIGIT ZERO (Numeric) × [8.0] DIGIT ZERO (Numeric) ÷ [0.3] ÷ 0030 × 0308 × 0030 ÷ # ÷ [0.2] DIGIT ZERO (Numeric) × [4.0] COMBINING DIAERESIS (Extend_FE) × [8.0] DIGIT ZERO (Numeric) ÷ [0.3] ÷ 0030 × 005F ÷ # ÷ [0.2] DIGIT ZERO (Numeric) × [13.1] LOW LINE (ExtendNumLet) ÷ [0.3] ÷ 0030 × 0308 × 005F ÷ # ÷ [0.2] DIGIT ZERO (Numeric) × [4.0] COMBINING DIAERESIS (Extend_FE) × [13.1] LOW LINE (ExtendNumLet) ÷ [0.3] ÷ 0030 ÷ 1F1E6 ÷ # ÷ [0.2] DIGIT ZERO (Numeric) ÷ [999.0] REGIONAL INDICATOR SYMBOL LETTER A (Regional_Indicator) ÷ [0.3] ÷ 0030 × 0308 ÷ 1F1E6 ÷ # ÷ [0.2] DIGIT ZERO (Numeric) × [4.0] COMBINING DIAERESIS (Extend_FE) ÷ [999.0] REGIONAL INDICATOR SYMBOL LETTER A (Regional_Indicator) ÷ [0.3] +÷ 0030 × 05D0 ÷ # ÷ [0.2] DIGIT ZERO (Numeric) × [10.0] HEBREW LETTER ALEF (Hebrew_Letter) ÷ [0.3] +÷ 0030 × 0308 × 05D0 ÷ # ÷ [0.2] DIGIT ZERO (Numeric) × [4.0] COMBINING DIAERESIS (Extend_FE) × [10.0] HEBREW LETTER ALEF (Hebrew_Letter) ÷ [0.3] +÷ 0030 ÷ 0022 ÷ # ÷ [0.2] DIGIT ZERO (Numeric) ÷ [999.0] QUOTATION MARK (Double_Quote) ÷ [0.3] +÷ 0030 × 0308 ÷ 0022 ÷ # ÷ [0.2] DIGIT ZERO (Numeric) × [4.0] COMBINING DIAERESIS (Extend_FE) ÷ [999.0] QUOTATION MARK (Double_Quote) ÷ [0.3] +÷ 0030 ÷ 0027 ÷ # ÷ [0.2] DIGIT ZERO (Numeric) ÷ [999.0] APOSTROPHE (Single_Quote) ÷ [0.3] +÷ 0030 × 0308 ÷ 0027 ÷ # ÷ [0.2] DIGIT ZERO (Numeric) × [4.0] COMBINING DIAERESIS (Extend_FE) ÷ [999.0] APOSTROPHE (Single_Quote) ÷ [0.3] ÷ 0030 × 00AD ÷ # ÷ [0.2] DIGIT ZERO (Numeric) × [4.0] SOFT HYPHEN (Format_FE) ÷ [0.3] ÷ 0030 × 0308 × 00AD ÷ # ÷ [0.2] DIGIT ZERO (Numeric) × [4.0] COMBINING DIAERESIS (Extend_FE) × [4.0] SOFT HYPHEN (Format_FE) ÷ [0.3] ÷ 0030 × 0300 ÷ # ÷ [0.2] DIGIT ZERO (Numeric) × [4.0] COMBINING GRAVE ACCENT (Extend_FE) ÷ [0.3] @@ -466,16 +526,16 @@ ÷ 0030 × 0308 × 0061 × 2060 ÷ # ÷ [0.2] DIGIT ZERO (Numeric) × [4.0] COMBINING DIAERESIS (Extend_FE) × [10.0] LATIN SMALL LETTER A (ALetter) × [4.0] WORD JOINER (Format_FE) ÷ [0.3] ÷ 0030 × 0061 ÷ 003A ÷ # ÷ [0.2] DIGIT ZERO (Numeric) × [10.0] LATIN SMALL LETTER A (ALetter) ÷ [999.0] COLON (MidLetter) ÷ [0.3] ÷ 0030 × 0308 × 0061 ÷ 003A ÷ # ÷ [0.2] DIGIT ZERO (Numeric) × [4.0] COMBINING DIAERESIS (Extend_FE) × [10.0] LATIN SMALL LETTER A (ALetter) ÷ [999.0] COLON (MidLetter) ÷ [0.3] -÷ 0030 × 0061 ÷ 0027 ÷ # ÷ [0.2] DIGIT ZERO (Numeric) × [10.0] LATIN SMALL LETTER A (ALetter) ÷ [999.0] APOSTROPHE (MidNumLet) ÷ [0.3] -÷ 0030 × 0308 × 0061 ÷ 0027 ÷ # ÷ [0.2] DIGIT ZERO (Numeric) × [4.0] COMBINING DIAERESIS (Extend_FE) × [10.0] LATIN SMALL LETTER A (ALetter) ÷ [999.0] APOSTROPHE (MidNumLet) ÷ [0.3] -÷ 0030 × 0061 ÷ 0027 × 2060 ÷ # ÷ [0.2] DIGIT ZERO (Numeric) × [10.0] LATIN SMALL LETTER A (ALetter) ÷ [999.0] APOSTROPHE (MidNumLet) × [4.0] WORD JOINER (Format_FE) ÷ [0.3] -÷ 0030 × 0308 × 0061 ÷ 0027 × 2060 ÷ # ÷ [0.2] DIGIT ZERO (Numeric) × [4.0] COMBINING DIAERESIS (Extend_FE) × [10.0] LATIN SMALL LETTER A (ALetter) ÷ [999.0] APOSTROPHE (MidNumLet) × [4.0] WORD JOINER (Format_FE) ÷ [0.3] +÷ 0030 × 0061 ÷ 0027 ÷ # ÷ [0.2] DIGIT ZERO (Numeric) × [10.0] LATIN SMALL LETTER A (ALetter) ÷ [999.0] APOSTROPHE (Single_Quote) ÷ [0.3] +÷ 0030 × 0308 × 0061 ÷ 0027 ÷ # ÷ [0.2] DIGIT ZERO (Numeric) × [4.0] COMBINING DIAERESIS (Extend_FE) × [10.0] LATIN SMALL LETTER A (ALetter) ÷ [999.0] APOSTROPHE (Single_Quote) ÷ [0.3] +÷ 0030 × 0061 ÷ 0027 × 2060 ÷ # ÷ [0.2] DIGIT ZERO (Numeric) × [10.0] LATIN SMALL LETTER A (ALetter) ÷ [999.0] APOSTROPHE (Single_Quote) × [4.0] WORD JOINER (Format_FE) ÷ [0.3] +÷ 0030 × 0308 × 0061 ÷ 0027 × 2060 ÷ # ÷ [0.2] DIGIT ZERO (Numeric) × [4.0] COMBINING DIAERESIS (Extend_FE) × [10.0] LATIN SMALL LETTER A (ALetter) ÷ [999.0] APOSTROPHE (Single_Quote) × [4.0] WORD JOINER (Format_FE) ÷ [0.3] ÷ 0030 × 0061 ÷ 002C ÷ # ÷ [0.2] DIGIT ZERO (Numeric) × [10.0] LATIN SMALL LETTER A (ALetter) ÷ [999.0] COMMA (MidNum) ÷ [0.3] ÷ 0030 × 0308 × 0061 ÷ 002C ÷ # ÷ [0.2] DIGIT ZERO (Numeric) × [4.0] COMBINING DIAERESIS (Extend_FE) × [10.0] LATIN SMALL LETTER A (ALetter) ÷ [999.0] COMMA (MidNum) ÷ [0.3] ÷ 0030 × 0031 ÷ 003A ÷ # ÷ [0.2] DIGIT ZERO (Numeric) × [8.0] DIGIT ONE (Numeric) ÷ [999.0] COLON (MidLetter) ÷ [0.3] ÷ 0030 × 0308 × 0031 ÷ 003A ÷ # ÷ [0.2] DIGIT ZERO (Numeric) × [4.0] COMBINING DIAERESIS (Extend_FE) × [8.0] DIGIT ONE (Numeric) ÷ [999.0] COLON (MidLetter) ÷ [0.3] -÷ 0030 × 0031 ÷ 0027 ÷ # ÷ [0.2] DIGIT ZERO (Numeric) × [8.0] DIGIT ONE (Numeric) ÷ [999.0] APOSTROPHE (MidNumLet) ÷ [0.3] -÷ 0030 × 0308 × 0031 ÷ 0027 ÷ # ÷ [0.2] DIGIT ZERO (Numeric) × [4.0] COMBINING DIAERESIS (Extend_FE) × [8.0] DIGIT ONE (Numeric) ÷ [999.0] APOSTROPHE (MidNumLet) ÷ [0.3] +÷ 0030 × 0031 ÷ 0027 ÷ # ÷ [0.2] DIGIT ZERO (Numeric) × [8.0] DIGIT ONE (Numeric) ÷ [999.0] APOSTROPHE (Single_Quote) ÷ [0.3] +÷ 0030 × 0308 × 0031 ÷ 0027 ÷ # ÷ [0.2] DIGIT ZERO (Numeric) × [4.0] COMBINING DIAERESIS (Extend_FE) × [8.0] DIGIT ONE (Numeric) ÷ [999.0] APOSTROPHE (Single_Quote) ÷ [0.3] ÷ 0030 × 0031 ÷ 002C ÷ # ÷ [0.2] DIGIT ZERO (Numeric) × [8.0] DIGIT ONE (Numeric) ÷ [999.0] COMMA (MidNum) ÷ [0.3] ÷ 0030 × 0308 × 0031 ÷ 002C ÷ # ÷ [0.2] DIGIT ZERO (Numeric) × [4.0] COMBINING DIAERESIS (Extend_FE) × [8.0] DIGIT ONE (Numeric) ÷ [999.0] COMMA (MidNum) ÷ [0.3] ÷ 0030 × 0031 ÷ 002E × 2060 ÷ # ÷ [0.2] DIGIT ZERO (Numeric) × [8.0] DIGIT ONE (Numeric) ÷ [999.0] FULL STOP (MidNumLet) × [4.0] WORD JOINER (Format_FE) ÷ [0.3] @@ -496,14 +556,20 @@ ÷ 005F × 0308 ÷ 003A ÷ # ÷ [0.2] LOW LINE (ExtendNumLet) × [4.0] COMBINING DIAERESIS (Extend_FE) ÷ [999.0] COLON (MidLetter) ÷ [0.3] ÷ 005F ÷ 002C ÷ # ÷ [0.2] LOW LINE (ExtendNumLet) ÷ [999.0] COMMA (MidNum) ÷ [0.3] ÷ 005F × 0308 ÷ 002C ÷ # ÷ [0.2] LOW LINE (ExtendNumLet) × [4.0] COMBINING DIAERESIS (Extend_FE) ÷ [999.0] COMMA (MidNum) ÷ [0.3] -÷ 005F ÷ 0027 ÷ # ÷ [0.2] LOW LINE (ExtendNumLet) ÷ [999.0] APOSTROPHE (MidNumLet) ÷ [0.3] -÷ 005F × 0308 ÷ 0027 ÷ # ÷ [0.2] LOW LINE (ExtendNumLet) × [4.0] COMBINING DIAERESIS (Extend_FE) ÷ [999.0] APOSTROPHE (MidNumLet) ÷ [0.3] +÷ 005F ÷ 002E ÷ # ÷ [0.2] LOW LINE (ExtendNumLet) ÷ [999.0] FULL STOP (MidNumLet) ÷ [0.3] +÷ 005F × 0308 ÷ 002E ÷ # ÷ [0.2] LOW LINE (ExtendNumLet) × [4.0] COMBINING DIAERESIS (Extend_FE) ÷ [999.0] FULL STOP (MidNumLet) ÷ [0.3] ÷ 005F × 0030 ÷ # ÷ [0.2] LOW LINE (ExtendNumLet) × [13.2] DIGIT ZERO (Numeric) ÷ [0.3] ÷ 005F × 0308 × 0030 ÷ # ÷ [0.2] LOW LINE (ExtendNumLet) × [4.0] COMBINING DIAERESIS (Extend_FE) × [13.2] DIGIT ZERO (Numeric) ÷ [0.3] ÷ 005F × 005F ÷ # ÷ [0.2] LOW LINE (ExtendNumLet) × [13.1] LOW LINE (ExtendNumLet) ÷ [0.3] ÷ 005F × 0308 × 005F ÷ # ÷ [0.2] LOW LINE (ExtendNumLet) × [4.0] COMBINING DIAERESIS (Extend_FE) × [13.1] LOW LINE (ExtendNumLet) ÷ [0.3] ÷ 005F ÷ 1F1E6 ÷ # ÷ [0.2] LOW LINE (ExtendNumLet) ÷ [999.0] REGIONAL INDICATOR SYMBOL LETTER A (Regional_Indicator) ÷ [0.3] ÷ 005F × 0308 ÷ 1F1E6 ÷ # ÷ [0.2] LOW LINE (ExtendNumLet) × [4.0] COMBINING DIAERESIS (Extend_FE) ÷ [999.0] REGIONAL INDICATOR SYMBOL LETTER A (Regional_Indicator) ÷ [0.3] +÷ 005F × 05D0 ÷ # ÷ [0.2] LOW LINE (ExtendNumLet) × [13.2] HEBREW LETTER ALEF (Hebrew_Letter) ÷ [0.3] +÷ 005F × 0308 × 05D0 ÷ # ÷ [0.2] LOW LINE (ExtendNumLet) × [4.0] COMBINING DIAERESIS (Extend_FE) × [13.2] HEBREW LETTER ALEF (Hebrew_Letter) ÷ [0.3] +÷ 005F ÷ 0022 ÷ # ÷ [0.2] LOW LINE (ExtendNumLet) ÷ [999.0] QUOTATION MARK (Double_Quote) ÷ [0.3] +÷ 005F × 0308 ÷ 0022 ÷ # ÷ [0.2] LOW LINE (ExtendNumLet) × [4.0] COMBINING DIAERESIS (Extend_FE) ÷ [999.0] QUOTATION MARK (Double_Quote) ÷ [0.3] +÷ 005F ÷ 0027 ÷ # ÷ [0.2] LOW LINE (ExtendNumLet) ÷ [999.0] APOSTROPHE (Single_Quote) ÷ [0.3] +÷ 005F × 0308 ÷ 0027 ÷ # ÷ [0.2] LOW LINE (ExtendNumLet) × [4.0] COMBINING DIAERESIS (Extend_FE) ÷ [999.0] APOSTROPHE (Single_Quote) ÷ [0.3] ÷ 005F × 00AD ÷ # ÷ [0.2] LOW LINE (ExtendNumLet) × [4.0] SOFT HYPHEN (Format_FE) ÷ [0.3] ÷ 005F × 0308 × 00AD ÷ # ÷ [0.2] LOW LINE (ExtendNumLet) × [4.0] COMBINING DIAERESIS (Extend_FE) × [4.0] SOFT HYPHEN (Format_FE) ÷ [0.3] ÷ 005F × 0300 ÷ # ÷ [0.2] LOW LINE (ExtendNumLet) × [4.0] COMBINING GRAVE ACCENT (Extend_FE) ÷ [0.3] @@ -512,16 +578,16 @@ ÷ 005F × 0308 × 0061 × 2060 ÷ # ÷ [0.2] LOW LINE (ExtendNumLet) × [4.0] COMBINING DIAERESIS (Extend_FE) × [13.2] LATIN SMALL LETTER A (ALetter) × [4.0] WORD JOINER (Format_FE) ÷ [0.3] ÷ 005F × 0061 ÷ 003A ÷ # ÷ [0.2] LOW LINE (ExtendNumLet) × [13.2] LATIN SMALL LETTER A (ALetter) ÷ [999.0] COLON (MidLetter) ÷ [0.3] ÷ 005F × 0308 × 0061 ÷ 003A ÷ # ÷ [0.2] LOW LINE (ExtendNumLet) × [4.0] COMBINING DIAERESIS (Extend_FE) × [13.2] LATIN SMALL LETTER A (ALetter) ÷ [999.0] COLON (MidLetter) ÷ [0.3] -÷ 005F × 0061 ÷ 0027 ÷ # ÷ [0.2] LOW LINE (ExtendNumLet) × [13.2] LATIN SMALL LETTER A (ALetter) ÷ [999.0] APOSTROPHE (MidNumLet) ÷ [0.3] -÷ 005F × 0308 × 0061 ÷ 0027 ÷ # ÷ [0.2] LOW LINE (ExtendNumLet) × [4.0] COMBINING DIAERESIS (Extend_FE) × [13.2] LATIN SMALL LETTER A (ALetter) ÷ [999.0] APOSTROPHE (MidNumLet) ÷ [0.3] -÷ 005F × 0061 ÷ 0027 × 2060 ÷ # ÷ [0.2] LOW LINE (ExtendNumLet) × [13.2] LATIN SMALL LETTER A (ALetter) ÷ [999.0] APOSTROPHE (MidNumLet) × [4.0] WORD JOINER (Format_FE) ÷ [0.3] -÷ 005F × 0308 × 0061 ÷ 0027 × 2060 ÷ # ÷ [0.2] LOW LINE (ExtendNumLet) × [4.0] COMBINING DIAERESIS (Extend_FE) × [13.2] LATIN SMALL LETTER A (ALetter) ÷ [999.0] APOSTROPHE (MidNumLet) × [4.0] WORD JOINER (Format_FE) ÷ [0.3] +÷ 005F × 0061 ÷ 0027 ÷ # ÷ [0.2] LOW LINE (ExtendNumLet) × [13.2] LATIN SMALL LETTER A (ALetter) ÷ [999.0] APOSTROPHE (Single_Quote) ÷ [0.3] +÷ 005F × 0308 × 0061 ÷ 0027 ÷ # ÷ [0.2] LOW LINE (ExtendNumLet) × [4.0] COMBINING DIAERESIS (Extend_FE) × [13.2] LATIN SMALL LETTER A (ALetter) ÷ [999.0] APOSTROPHE (Single_Quote) ÷ [0.3] +÷ 005F × 0061 ÷ 0027 × 2060 ÷ # ÷ [0.2] LOW LINE (ExtendNumLet) × [13.2] LATIN SMALL LETTER A (ALetter) ÷ [999.0] APOSTROPHE (Single_Quote) × [4.0] WORD JOINER (Format_FE) ÷ [0.3] +÷ 005F × 0308 × 0061 ÷ 0027 × 2060 ÷ # ÷ [0.2] LOW LINE (ExtendNumLet) × [4.0] COMBINING DIAERESIS (Extend_FE) × [13.2] LATIN SMALL LETTER A (ALetter) ÷ [999.0] APOSTROPHE (Single_Quote) × [4.0] WORD JOINER (Format_FE) ÷ [0.3] ÷ 005F × 0061 ÷ 002C ÷ # ÷ [0.2] LOW LINE (ExtendNumLet) × [13.2] LATIN SMALL LETTER A (ALetter) ÷ [999.0] COMMA (MidNum) ÷ [0.3] ÷ 005F × 0308 × 0061 ÷ 002C ÷ # ÷ [0.2] LOW LINE (ExtendNumLet) × [4.0] COMBINING DIAERESIS (Extend_FE) × [13.2] LATIN SMALL LETTER A (ALetter) ÷ [999.0] COMMA (MidNum) ÷ [0.3] ÷ 005F × 0031 ÷ 003A ÷ # ÷ [0.2] LOW LINE (ExtendNumLet) × [13.2] DIGIT ONE (Numeric) ÷ [999.0] COLON (MidLetter) ÷ [0.3] ÷ 005F × 0308 × 0031 ÷ 003A ÷ # ÷ [0.2] LOW LINE (ExtendNumLet) × [4.0] COMBINING DIAERESIS (Extend_FE) × [13.2] DIGIT ONE (Numeric) ÷ [999.0] COLON (MidLetter) ÷ [0.3] -÷ 005F × 0031 ÷ 0027 ÷ # ÷ [0.2] LOW LINE (ExtendNumLet) × [13.2] DIGIT ONE (Numeric) ÷ [999.0] APOSTROPHE (MidNumLet) ÷ [0.3] -÷ 005F × 0308 × 0031 ÷ 0027 ÷ # ÷ [0.2] LOW LINE (ExtendNumLet) × [4.0] COMBINING DIAERESIS (Extend_FE) × [13.2] DIGIT ONE (Numeric) ÷ [999.0] APOSTROPHE (MidNumLet) ÷ [0.3] +÷ 005F × 0031 ÷ 0027 ÷ # ÷ [0.2] LOW LINE (ExtendNumLet) × [13.2] DIGIT ONE (Numeric) ÷ [999.0] APOSTROPHE (Single_Quote) ÷ [0.3] +÷ 005F × 0308 × 0031 ÷ 0027 ÷ # ÷ [0.2] LOW LINE (ExtendNumLet) × [4.0] COMBINING DIAERESIS (Extend_FE) × [13.2] DIGIT ONE (Numeric) ÷ [999.0] APOSTROPHE (Single_Quote) ÷ [0.3] ÷ 005F × 0031 ÷ 002C ÷ # ÷ [0.2] LOW LINE (ExtendNumLet) × [13.2] DIGIT ONE (Numeric) ÷ [999.0] COMMA (MidNum) ÷ [0.3] ÷ 005F × 0308 × 0031 ÷ 002C ÷ # ÷ [0.2] LOW LINE (ExtendNumLet) × [4.0] COMBINING DIAERESIS (Extend_FE) × [13.2] DIGIT ONE (Numeric) ÷ [999.0] COMMA (MidNum) ÷ [0.3] ÷ 005F × 0031 ÷ 002E × 2060 ÷ # ÷ [0.2] LOW LINE (ExtendNumLet) × [13.2] DIGIT ONE (Numeric) ÷ [999.0] FULL STOP (MidNumLet) × [4.0] WORD JOINER (Format_FE) ÷ [0.3] @@ -542,14 +608,20 @@ ÷ 1F1E6 × 0308 ÷ 003A ÷ # ÷ [0.2] REGIONAL INDICATOR SYMBOL LETTER A (Regional_Indicator) × [4.0] COMBINING DIAERESIS (Extend_FE) ÷ [999.0] COLON (MidLetter) ÷ [0.3] ÷ 1F1E6 ÷ 002C ÷ # ÷ [0.2] REGIONAL INDICATOR SYMBOL LETTER A (Regional_Indicator) ÷ [999.0] COMMA (MidNum) ÷ [0.3] ÷ 1F1E6 × 0308 ÷ 002C ÷ # ÷ [0.2] REGIONAL INDICATOR SYMBOL LETTER A (Regional_Indicator) × [4.0] COMBINING DIAERESIS (Extend_FE) ÷ [999.0] COMMA (MidNum) ÷ [0.3] -÷ 1F1E6 ÷ 0027 ÷ # ÷ [0.2] REGIONAL INDICATOR SYMBOL LETTER A (Regional_Indicator) ÷ [999.0] APOSTROPHE (MidNumLet) ÷ [0.3] -÷ 1F1E6 × 0308 ÷ 0027 ÷ # ÷ [0.2] REGIONAL INDICATOR SYMBOL LETTER A (Regional_Indicator) × [4.0] COMBINING DIAERESIS (Extend_FE) ÷ [999.0] APOSTROPHE (MidNumLet) ÷ [0.3] +÷ 1F1E6 ÷ 002E ÷ # ÷ [0.2] REGIONAL INDICATOR SYMBOL LETTER A (Regional_Indicator) ÷ [999.0] FULL STOP (MidNumLet) ÷ [0.3] +÷ 1F1E6 × 0308 ÷ 002E ÷ # ÷ [0.2] REGIONAL INDICATOR SYMBOL LETTER A (Regional_Indicator) × [4.0] COMBINING DIAERESIS (Extend_FE) ÷ [999.0] FULL STOP (MidNumLet) ÷ [0.3] ÷ 1F1E6 ÷ 0030 ÷ # ÷ [0.2] REGIONAL INDICATOR SYMBOL LETTER A (Regional_Indicator) ÷ [999.0] DIGIT ZERO (Numeric) ÷ [0.3] ÷ 1F1E6 × 0308 ÷ 0030 ÷ # ÷ [0.2] REGIONAL INDICATOR SYMBOL LETTER A (Regional_Indicator) × [4.0] COMBINING DIAERESIS (Extend_FE) ÷ [999.0] DIGIT ZERO (Numeric) ÷ [0.3] ÷ 1F1E6 ÷ 005F ÷ # ÷ [0.2] REGIONAL INDICATOR SYMBOL LETTER A (Regional_Indicator) ÷ [999.0] LOW LINE (ExtendNumLet) ÷ [0.3] ÷ 1F1E6 × 0308 ÷ 005F ÷ # ÷ [0.2] REGIONAL INDICATOR SYMBOL LETTER A (Regional_Indicator) × [4.0] COMBINING DIAERESIS (Extend_FE) ÷ [999.0] LOW LINE (ExtendNumLet) ÷ [0.3] ÷ 1F1E6 × 1F1E6 ÷ # ÷ [0.2] REGIONAL INDICATOR SYMBOL LETTER A (Regional_Indicator) × [13.3] REGIONAL INDICATOR SYMBOL LETTER A (Regional_Indicator) ÷ [0.3] ÷ 1F1E6 × 0308 × 1F1E6 ÷ # ÷ [0.2] REGIONAL INDICATOR SYMBOL LETTER A (Regional_Indicator) × [4.0] COMBINING DIAERESIS (Extend_FE) × [13.3] REGIONAL INDICATOR SYMBOL LETTER A (Regional_Indicator) ÷ [0.3] +÷ 1F1E6 ÷ 05D0 ÷ # ÷ [0.2] REGIONAL INDICATOR SYMBOL LETTER A (Regional_Indicator) ÷ [999.0] HEBREW LETTER ALEF (Hebrew_Letter) ÷ [0.3] +÷ 1F1E6 × 0308 ÷ 05D0 ÷ # ÷ [0.2] REGIONAL INDICATOR SYMBOL LETTER A (Regional_Indicator) × [4.0] COMBINING DIAERESIS (Extend_FE) ÷ [999.0] HEBREW LETTER ALEF (Hebrew_Letter) ÷ [0.3] +÷ 1F1E6 ÷ 0022 ÷ # ÷ [0.2] REGIONAL INDICATOR SYMBOL LETTER A (Regional_Indicator) ÷ [999.0] QUOTATION MARK (Double_Quote) ÷ [0.3] +÷ 1F1E6 × 0308 ÷ 0022 ÷ # ÷ [0.2] REGIONAL INDICATOR SYMBOL LETTER A (Regional_Indicator) × [4.0] COMBINING DIAERESIS (Extend_FE) ÷ [999.0] QUOTATION MARK (Double_Quote) ÷ [0.3] +÷ 1F1E6 ÷ 0027 ÷ # ÷ [0.2] REGIONAL INDICATOR SYMBOL LETTER A (Regional_Indicator) ÷ [999.0] APOSTROPHE (Single_Quote) ÷ [0.3] +÷ 1F1E6 × 0308 ÷ 0027 ÷ # ÷ [0.2] REGIONAL INDICATOR SYMBOL LETTER A (Regional_Indicator) × [4.0] COMBINING DIAERESIS (Extend_FE) ÷ [999.0] APOSTROPHE (Single_Quote) ÷ [0.3] ÷ 1F1E6 × 00AD ÷ # ÷ [0.2] REGIONAL INDICATOR SYMBOL LETTER A (Regional_Indicator) × [4.0] SOFT HYPHEN (Format_FE) ÷ [0.3] ÷ 1F1E6 × 0308 × 00AD ÷ # ÷ [0.2] REGIONAL INDICATOR SYMBOL LETTER A (Regional_Indicator) × [4.0] COMBINING DIAERESIS (Extend_FE) × [4.0] SOFT HYPHEN (Format_FE) ÷ [0.3] ÷ 1F1E6 × 0300 ÷ # ÷ [0.2] REGIONAL INDICATOR SYMBOL LETTER A (Regional_Indicator) × [4.0] COMBINING GRAVE ACCENT (Extend_FE) ÷ [0.3] @@ -558,20 +630,176 @@ ÷ 1F1E6 × 0308 ÷ 0061 × 2060 ÷ # ÷ [0.2] REGIONAL INDICATOR SYMBOL LETTER A (Regional_Indicator) × [4.0] COMBINING DIAERESIS (Extend_FE) ÷ [999.0] LATIN SMALL LETTER A (ALetter) × [4.0] WORD JOINER (Format_FE) ÷ [0.3] ÷ 1F1E6 ÷ 0061 ÷ 003A ÷ # ÷ [0.2] REGIONAL INDICATOR SYMBOL LETTER A (Regional_Indicator) ÷ [999.0] LATIN SMALL LETTER A (ALetter) ÷ [999.0] COLON (MidLetter) ÷ [0.3] ÷ 1F1E6 × 0308 ÷ 0061 ÷ 003A ÷ # ÷ [0.2] REGIONAL INDICATOR SYMBOL LETTER A (Regional_Indicator) × [4.0] COMBINING DIAERESIS (Extend_FE) ÷ [999.0] LATIN SMALL LETTER A (ALetter) ÷ [999.0] COLON (MidLetter) ÷ [0.3] -÷ 1F1E6 ÷ 0061 ÷ 0027 ÷ # ÷ [0.2] REGIONAL INDICATOR SYMBOL LETTER A (Regional_Indicator) ÷ [999.0] LATIN SMALL LETTER A (ALetter) ÷ [999.0] APOSTROPHE (MidNumLet) ÷ [0.3] -÷ 1F1E6 × 0308 ÷ 0061 ÷ 0027 ÷ # ÷ [0.2] REGIONAL INDICATOR SYMBOL LETTER A (Regional_Indicator) × [4.0] COMBINING DIAERESIS (Extend_FE) ÷ [999.0] LATIN SMALL LETTER A (ALetter) ÷ [999.0] APOSTROPHE (MidNumLet) ÷ [0.3] -÷ 1F1E6 ÷ 0061 ÷ 0027 × 2060 ÷ # ÷ [0.2] REGIONAL INDICATOR SYMBOL LETTER A (Regional_Indicator) ÷ [999.0] LATIN SMALL LETTER A (ALetter) ÷ [999.0] APOSTROPHE (MidNumLet) × [4.0] WORD JOINER (Format_FE) ÷ [0.3] -÷ 1F1E6 × 0308 ÷ 0061 ÷ 0027 × 2060 ÷ # ÷ [0.2] REGIONAL INDICATOR SYMBOL LETTER A (Regional_Indicator) × [4.0] COMBINING DIAERESIS (Extend_FE) ÷ [999.0] LATIN SMALL LETTER A (ALetter) ÷ [999.0] APOSTROPHE (MidNumLet) × [4.0] WORD JOINER (Format_FE) ÷ [0.3] +÷ 1F1E6 ÷ 0061 ÷ 0027 ÷ # ÷ [0.2] REGIONAL INDICATOR SYMBOL LETTER A (Regional_Indicator) ÷ [999.0] LATIN SMALL LETTER A (ALetter) ÷ [999.0] APOSTROPHE (Single_Quote) ÷ [0.3] +÷ 1F1E6 × 0308 ÷ 0061 ÷ 0027 ÷ # ÷ [0.2] REGIONAL INDICATOR SYMBOL LETTER A (Regional_Indicator) × [4.0] COMBINING DIAERESIS (Extend_FE) ÷ [999.0] LATIN SMALL LETTER A (ALetter) ÷ [999.0] APOSTROPHE (Single_Quote) ÷ [0.3] +÷ 1F1E6 ÷ 0061 ÷ 0027 × 2060 ÷ # ÷ [0.2] REGIONAL INDICATOR SYMBOL LETTER A (Regional_Indicator) ÷ [999.0] LATIN SMALL LETTER A (ALetter) ÷ [999.0] APOSTROPHE (Single_Quote) × [4.0] WORD JOINER (Format_FE) ÷ [0.3] +÷ 1F1E6 × 0308 ÷ 0061 ÷ 0027 × 2060 ÷ # ÷ [0.2] REGIONAL INDICATOR SYMBOL LETTER A (Regional_Indicator) × [4.0] COMBINING DIAERESIS (Extend_FE) ÷ [999.0] LATIN SMALL LETTER A (ALetter) ÷ [999.0] APOSTROPHE (Single_Quote) × [4.0] WORD JOINER (Format_FE) ÷ [0.3] ÷ 1F1E6 ÷ 0061 ÷ 002C ÷ # ÷ [0.2] REGIONAL INDICATOR SYMBOL LETTER A (Regional_Indicator) ÷ [999.0] LATIN SMALL LETTER A (ALetter) ÷ [999.0] COMMA (MidNum) ÷ [0.3] ÷ 1F1E6 × 0308 ÷ 0061 ÷ 002C ÷ # ÷ [0.2] REGIONAL INDICATOR SYMBOL LETTER A (Regional_Indicator) × [4.0] COMBINING DIAERESIS (Extend_FE) ÷ [999.0] LATIN SMALL LETTER A (ALetter) ÷ [999.0] COMMA (MidNum) ÷ [0.3] ÷ 1F1E6 ÷ 0031 ÷ 003A ÷ # ÷ [0.2] REGIONAL INDICATOR SYMBOL LETTER A (Regional_Indicator) ÷ [999.0] DIGIT ONE (Numeric) ÷ [999.0] COLON (MidLetter) ÷ [0.3] ÷ 1F1E6 × 0308 ÷ 0031 ÷ 003A ÷ # ÷ [0.2] REGIONAL INDICATOR SYMBOL LETTER A (Regional_Indicator) × [4.0] COMBINING DIAERESIS (Extend_FE) ÷ [999.0] DIGIT ONE (Numeric) ÷ [999.0] COLON (MidLetter) ÷ [0.3] -÷ 1F1E6 ÷ 0031 ÷ 0027 ÷ # ÷ [0.2] REGIONAL INDICATOR SYMBOL LETTER A (Regional_Indicator) ÷ [999.0] DIGIT ONE (Numeric) ÷ [999.0] APOSTROPHE (MidNumLet) ÷ [0.3] -÷ 1F1E6 × 0308 ÷ 0031 ÷ 0027 ÷ # ÷ [0.2] REGIONAL INDICATOR SYMBOL LETTER A (Regional_Indicator) × [4.0] COMBINING DIAERESIS (Extend_FE) ÷ [999.0] DIGIT ONE (Numeric) ÷ [999.0] APOSTROPHE (MidNumLet) ÷ [0.3] +÷ 1F1E6 ÷ 0031 ÷ 0027 ÷ # ÷ [0.2] REGIONAL INDICATOR SYMBOL LETTER A (Regional_Indicator) ÷ [999.0] DIGIT ONE (Numeric) ÷ [999.0] APOSTROPHE (Single_Quote) ÷ [0.3] +÷ 1F1E6 × 0308 ÷ 0031 ÷ 0027 ÷ # ÷ [0.2] REGIONAL INDICATOR SYMBOL LETTER A (Regional_Indicator) × [4.0] COMBINING DIAERESIS (Extend_FE) ÷ [999.0] DIGIT ONE (Numeric) ÷ [999.0] APOSTROPHE (Single_Quote) ÷ [0.3] ÷ 1F1E6 ÷ 0031 ÷ 002C ÷ # ÷ [0.2] REGIONAL INDICATOR SYMBOL LETTER A (Regional_Indicator) ÷ [999.0] DIGIT ONE (Numeric) ÷ [999.0] COMMA (MidNum) ÷ [0.3] ÷ 1F1E6 × 0308 ÷ 0031 ÷ 002C ÷ # ÷ [0.2] REGIONAL INDICATOR SYMBOL LETTER A (Regional_Indicator) × [4.0] COMBINING DIAERESIS (Extend_FE) ÷ [999.0] DIGIT ONE (Numeric) ÷ [999.0] COMMA (MidNum) ÷ [0.3] ÷ 1F1E6 ÷ 0031 ÷ 002E × 2060 ÷ # ÷ [0.2] REGIONAL INDICATOR SYMBOL LETTER A (Regional_Indicator) ÷ [999.0] DIGIT ONE (Numeric) ÷ [999.0] FULL STOP (MidNumLet) × [4.0] WORD JOINER (Format_FE) ÷ [0.3] ÷ 1F1E6 × 0308 ÷ 0031 ÷ 002E × 2060 ÷ # ÷ [0.2] REGIONAL INDICATOR SYMBOL LETTER A (Regional_Indicator) × [4.0] COMBINING DIAERESIS (Extend_FE) ÷ [999.0] DIGIT ONE (Numeric) ÷ [999.0] FULL STOP (MidNumLet) × [4.0] WORD JOINER (Format_FE) ÷ [0.3] +÷ 05D0 ÷ 0001 ÷ # ÷ [0.2] HEBREW LETTER ALEF (Hebrew_Letter) ÷ [999.0] (Other) ÷ [0.3] +÷ 05D0 × 0308 ÷ 0001 ÷ # ÷ [0.2] HEBREW LETTER ALEF (Hebrew_Letter) × [4.0] COMBINING DIAERESIS (Extend_FE) ÷ [999.0] (Other) ÷ [0.3] +÷ 05D0 ÷ 000D ÷ # ÷ [0.2] HEBREW LETTER ALEF (Hebrew_Letter) ÷ [3.2] (CR) ÷ [0.3] +÷ 05D0 × 0308 ÷ 000D ÷ # ÷ [0.2] HEBREW LETTER ALEF (Hebrew_Letter) × [4.0] COMBINING DIAERESIS (Extend_FE) ÷ [3.2] (CR) ÷ [0.3] +÷ 05D0 ÷ 000A ÷ # ÷ [0.2] HEBREW LETTER ALEF (Hebrew_Letter) ÷ [3.2] (LF) ÷ [0.3] +÷ 05D0 × 0308 ÷ 000A ÷ # ÷ [0.2] HEBREW LETTER ALEF (Hebrew_Letter) × [4.0] COMBINING DIAERESIS (Extend_FE) ÷ [3.2] (LF) ÷ [0.3] +÷ 05D0 ÷ 000B ÷ # ÷ [0.2] HEBREW LETTER ALEF (Hebrew_Letter) ÷ [3.2] (Newline) ÷ [0.3] +÷ 05D0 × 0308 ÷ 000B ÷ # ÷ [0.2] HEBREW LETTER ALEF (Hebrew_Letter) × [4.0] COMBINING DIAERESIS (Extend_FE) ÷ [3.2] (Newline) ÷ [0.3] +÷ 05D0 ÷ 3031 ÷ # ÷ [0.2] HEBREW LETTER ALEF (Hebrew_Letter) ÷ [999.0] VERTICAL KANA REPEAT MARK (Katakana) ÷ [0.3] +÷ 05D0 × 0308 ÷ 3031 ÷ # ÷ [0.2] HEBREW LETTER ALEF (Hebrew_Letter) × [4.0] COMBINING DIAERESIS (Extend_FE) ÷ [999.0] VERTICAL KANA REPEAT MARK (Katakana) ÷ [0.3] +÷ 05D0 × 0041 ÷ # ÷ [0.2] HEBREW LETTER ALEF (Hebrew_Letter) × [5.0] LATIN CAPITAL LETTER A (ALetter) ÷ [0.3] +÷ 05D0 × 0308 × 0041 ÷ # ÷ [0.2] HEBREW LETTER ALEF (Hebrew_Letter) × [4.0] COMBINING DIAERESIS (Extend_FE) × [5.0] LATIN CAPITAL LETTER A (ALetter) ÷ [0.3] +÷ 05D0 ÷ 003A ÷ # ÷ [0.2] HEBREW LETTER ALEF (Hebrew_Letter) ÷ [999.0] COLON (MidLetter) ÷ [0.3] +÷ 05D0 × 0308 ÷ 003A ÷ # ÷ [0.2] HEBREW LETTER ALEF (Hebrew_Letter) × [4.0] COMBINING DIAERESIS (Extend_FE) ÷ [999.0] COLON (MidLetter) ÷ [0.3] +÷ 05D0 ÷ 002C ÷ # ÷ [0.2] HEBREW LETTER ALEF (Hebrew_Letter) ÷ [999.0] COMMA (MidNum) ÷ [0.3] +÷ 05D0 × 0308 ÷ 002C ÷ # ÷ [0.2] HEBREW LETTER ALEF (Hebrew_Letter) × [4.0] COMBINING DIAERESIS (Extend_FE) ÷ [999.0] COMMA (MidNum) ÷ [0.3] +÷ 05D0 ÷ 002E ÷ # ÷ [0.2] HEBREW LETTER ALEF (Hebrew_Letter) ÷ [999.0] FULL STOP (MidNumLet) ÷ [0.3] +÷ 05D0 × 0308 ÷ 002E ÷ # ÷ [0.2] HEBREW LETTER ALEF (Hebrew_Letter) × [4.0] COMBINING DIAERESIS (Extend_FE) ÷ [999.0] FULL STOP (MidNumLet) ÷ [0.3] +÷ 05D0 × 0030 ÷ # ÷ [0.2] HEBREW LETTER ALEF (Hebrew_Letter) × [9.0] DIGIT ZERO (Numeric) ÷ [0.3] +÷ 05D0 × 0308 × 0030 ÷ # ÷ [0.2] HEBREW LETTER ALEF (Hebrew_Letter) × [4.0] COMBINING DIAERESIS (Extend_FE) × [9.0] DIGIT ZERO (Numeric) ÷ [0.3] +÷ 05D0 × 005F ÷ # ÷ [0.2] HEBREW LETTER ALEF (Hebrew_Letter) × [13.1] LOW LINE (ExtendNumLet) ÷ [0.3] +÷ 05D0 × 0308 × 005F ÷ # ÷ [0.2] HEBREW LETTER ALEF (Hebrew_Letter) × [4.0] COMBINING DIAERESIS (Extend_FE) × [13.1] LOW LINE (ExtendNumLet) ÷ [0.3] +÷ 05D0 ÷ 1F1E6 ÷ # ÷ [0.2] HEBREW LETTER ALEF (Hebrew_Letter) ÷ [999.0] REGIONAL INDICATOR SYMBOL LETTER A (Regional_Indicator) ÷ [0.3] +÷ 05D0 × 0308 ÷ 1F1E6 ÷ # ÷ [0.2] HEBREW LETTER ALEF (Hebrew_Letter) × [4.0] COMBINING DIAERESIS (Extend_FE) ÷ [999.0] REGIONAL INDICATOR SYMBOL LETTER A (Regional_Indicator) ÷ [0.3] +÷ 05D0 × 05D0 ÷ # ÷ [0.2] HEBREW LETTER ALEF (Hebrew_Letter) × [5.0] HEBREW LETTER ALEF (Hebrew_Letter) ÷ [0.3] +÷ 05D0 × 0308 × 05D0 ÷ # ÷ [0.2] HEBREW LETTER ALEF (Hebrew_Letter) × [4.0] COMBINING DIAERESIS (Extend_FE) × [5.0] HEBREW LETTER ALEF (Hebrew_Letter) ÷ [0.3] +÷ 05D0 ÷ 0022 ÷ # ÷ [0.2] HEBREW LETTER ALEF (Hebrew_Letter) ÷ [999.0] QUOTATION MARK (Double_Quote) ÷ [0.3] +÷ 05D0 × 0308 ÷ 0022 ÷ # ÷ [0.2] HEBREW LETTER ALEF (Hebrew_Letter) × [4.0] COMBINING DIAERESIS (Extend_FE) ÷ [999.0] QUOTATION MARK (Double_Quote) ÷ [0.3] +÷ 05D0 × 0027 ÷ # ÷ [0.2] HEBREW LETTER ALEF (Hebrew_Letter) × [7.1] APOSTROPHE (Single_Quote) ÷ [0.3] +÷ 05D0 × 0308 × 0027 ÷ # ÷ [0.2] HEBREW LETTER ALEF (Hebrew_Letter) × [4.0] COMBINING DIAERESIS (Extend_FE) × [7.1] APOSTROPHE (Single_Quote) ÷ [0.3] +÷ 05D0 × 00AD ÷ # ÷ [0.2] HEBREW LETTER ALEF (Hebrew_Letter) × [4.0] SOFT HYPHEN (Format_FE) ÷ [0.3] +÷ 05D0 × 0308 × 00AD ÷ # ÷ [0.2] HEBREW LETTER ALEF (Hebrew_Letter) × [4.0] COMBINING DIAERESIS (Extend_FE) × [4.0] SOFT HYPHEN (Format_FE) ÷ [0.3] +÷ 05D0 × 0300 ÷ # ÷ [0.2] HEBREW LETTER ALEF (Hebrew_Letter) × [4.0] COMBINING GRAVE ACCENT (Extend_FE) ÷ [0.3] +÷ 05D0 × 0308 × 0300 ÷ # ÷ [0.2] HEBREW LETTER ALEF (Hebrew_Letter) × [4.0] COMBINING DIAERESIS (Extend_FE) × [4.0] COMBINING GRAVE ACCENT (Extend_FE) ÷ [0.3] +÷ 05D0 × 0061 × 2060 ÷ # ÷ [0.2] HEBREW LETTER ALEF (Hebrew_Letter) × [5.0] LATIN SMALL LETTER A (ALetter) × [4.0] WORD JOINER (Format_FE) ÷ [0.3] +÷ 05D0 × 0308 × 0061 × 2060 ÷ # ÷ [0.2] HEBREW LETTER ALEF (Hebrew_Letter) × [4.0] COMBINING DIAERESIS (Extend_FE) × [5.0] LATIN SMALL LETTER A (ALetter) × [4.0] WORD JOINER (Format_FE) ÷ [0.3] +÷ 05D0 × 0061 ÷ 003A ÷ # ÷ [0.2] HEBREW LETTER ALEF (Hebrew_Letter) × [5.0] LATIN SMALL LETTER A (ALetter) ÷ [999.0] COLON (MidLetter) ÷ [0.3] +÷ 05D0 × 0308 × 0061 ÷ 003A ÷ # ÷ [0.2] HEBREW LETTER ALEF (Hebrew_Letter) × [4.0] COMBINING DIAERESIS (Extend_FE) × [5.0] LATIN SMALL LETTER A (ALetter) ÷ [999.0] COLON (MidLetter) ÷ [0.3] +÷ 05D0 × 0061 ÷ 0027 ÷ # ÷ [0.2] HEBREW LETTER ALEF (Hebrew_Letter) × [5.0] LATIN SMALL LETTER A (ALetter) ÷ [999.0] APOSTROPHE (Single_Quote) ÷ [0.3] +÷ 05D0 × 0308 × 0061 ÷ 0027 ÷ # ÷ [0.2] HEBREW LETTER ALEF (Hebrew_Letter) × [4.0] COMBINING DIAERESIS (Extend_FE) × [5.0] LATIN SMALL LETTER A (ALetter) ÷ [999.0] APOSTROPHE (Single_Quote) ÷ [0.3] +÷ 05D0 × 0061 ÷ 0027 × 2060 ÷ # ÷ [0.2] HEBREW LETTER ALEF (Hebrew_Letter) × [5.0] LATIN SMALL LETTER A (ALetter) ÷ [999.0] APOSTROPHE (Single_Quote) × [4.0] WORD JOINER (Format_FE) ÷ [0.3] +÷ 05D0 × 0308 × 0061 ÷ 0027 × 2060 ÷ # ÷ [0.2] HEBREW LETTER ALEF (Hebrew_Letter) × [4.0] COMBINING DIAERESIS (Extend_FE) × [5.0] LATIN SMALL LETTER A (ALetter) ÷ [999.0] APOSTROPHE (Single_Quote) × [4.0] WORD JOINER (Format_FE) ÷ [0.3] +÷ 05D0 × 0061 ÷ 002C ÷ # ÷ [0.2] HEBREW LETTER ALEF (Hebrew_Letter) × [5.0] LATIN SMALL LETTER A (ALetter) ÷ [999.0] COMMA (MidNum) ÷ [0.3] +÷ 05D0 × 0308 × 0061 ÷ 002C ÷ # ÷ [0.2] HEBREW LETTER ALEF (Hebrew_Letter) × [4.0] COMBINING DIAERESIS (Extend_FE) × [5.0] LATIN SMALL LETTER A (ALetter) ÷ [999.0] COMMA (MidNum) ÷ [0.3] +÷ 05D0 × 0031 ÷ 003A ÷ # ÷ [0.2] HEBREW LETTER ALEF (Hebrew_Letter) × [9.0] DIGIT ONE (Numeric) ÷ [999.0] COLON (MidLetter) ÷ [0.3] +÷ 05D0 × 0308 × 0031 ÷ 003A ÷ # ÷ [0.2] HEBREW LETTER ALEF (Hebrew_Letter) × [4.0] COMBINING DIAERESIS (Extend_FE) × [9.0] DIGIT ONE (Numeric) ÷ [999.0] COLON (MidLetter) ÷ [0.3] +÷ 05D0 × 0031 ÷ 0027 ÷ # ÷ [0.2] HEBREW LETTER ALEF (Hebrew_Letter) × [9.0] DIGIT ONE (Numeric) ÷ [999.0] APOSTROPHE (Single_Quote) ÷ [0.3] +÷ 05D0 × 0308 × 0031 ÷ 0027 ÷ # ÷ [0.2] HEBREW LETTER ALEF (Hebrew_Letter) × [4.0] COMBINING DIAERESIS (Extend_FE) × [9.0] DIGIT ONE (Numeric) ÷ [999.0] APOSTROPHE (Single_Quote) ÷ [0.3] +÷ 05D0 × 0031 ÷ 002C ÷ # ÷ [0.2] HEBREW LETTER ALEF (Hebrew_Letter) × [9.0] DIGIT ONE (Numeric) ÷ [999.0] COMMA (MidNum) ÷ [0.3] +÷ 05D0 × 0308 × 0031 ÷ 002C ÷ # ÷ [0.2] HEBREW LETTER ALEF (Hebrew_Letter) × [4.0] COMBINING DIAERESIS (Extend_FE) × [9.0] DIGIT ONE (Numeric) ÷ [999.0] COMMA (MidNum) ÷ [0.3] +÷ 05D0 × 0031 ÷ 002E × 2060 ÷ # ÷ [0.2] HEBREW LETTER ALEF (Hebrew_Letter) × [9.0] DIGIT ONE (Numeric) ÷ [999.0] FULL STOP (MidNumLet) × [4.0] WORD JOINER (Format_FE) ÷ [0.3] +÷ 05D0 × 0308 × 0031 ÷ 002E × 2060 ÷ # ÷ [0.2] HEBREW LETTER ALEF (Hebrew_Letter) × [4.0] COMBINING DIAERESIS (Extend_FE) × [9.0] DIGIT ONE (Numeric) ÷ [999.0] FULL STOP (MidNumLet) × [4.0] WORD JOINER (Format_FE) ÷ [0.3] +÷ 0022 ÷ 0001 ÷ # ÷ [0.2] QUOTATION MARK (Double_Quote) ÷ [999.0] (Other) ÷ [0.3] +÷ 0022 × 0308 ÷ 0001 ÷ # ÷ [0.2] QUOTATION MARK (Double_Quote) × [4.0] COMBINING DIAERESIS (Extend_FE) ÷ [999.0] (Other) ÷ [0.3] +÷ 0022 ÷ 000D ÷ # ÷ [0.2] QUOTATION MARK (Double_Quote) ÷ [3.2] (CR) ÷ [0.3] +÷ 0022 × 0308 ÷ 000D ÷ # ÷ [0.2] QUOTATION MARK (Double_Quote) × [4.0] COMBINING DIAERESIS (Extend_FE) ÷ [3.2] (CR) ÷ [0.3] +÷ 0022 ÷ 000A ÷ # ÷ [0.2] QUOTATION MARK (Double_Quote) ÷ [3.2] (LF) ÷ [0.3] +÷ 0022 × 0308 ÷ 000A ÷ # ÷ [0.2] QUOTATION MARK (Double_Quote) × [4.0] COMBINING DIAERESIS (Extend_FE) ÷ [3.2] (LF) ÷ [0.3] +÷ 0022 ÷ 000B ÷ # ÷ [0.2] QUOTATION MARK (Double_Quote) ÷ [3.2] (Newline) ÷ [0.3] +÷ 0022 × 0308 ÷ 000B ÷ # ÷ [0.2] QUOTATION MARK (Double_Quote) × [4.0] COMBINING DIAERESIS (Extend_FE) ÷ [3.2] (Newline) ÷ [0.3] +÷ 0022 ÷ 3031 ÷ # ÷ [0.2] QUOTATION MARK (Double_Quote) ÷ [999.0] VERTICAL KANA REPEAT MARK (Katakana) ÷ [0.3] +÷ 0022 × 0308 ÷ 3031 ÷ # ÷ [0.2] QUOTATION MARK (Double_Quote) × [4.0] COMBINING DIAERESIS (Extend_FE) ÷ [999.0] VERTICAL KANA REPEAT MARK (Katakana) ÷ [0.3] +÷ 0022 ÷ 0041 ÷ # ÷ [0.2] QUOTATION MARK (Double_Quote) ÷ [999.0] LATIN CAPITAL LETTER A (ALetter) ÷ [0.3] +÷ 0022 × 0308 ÷ 0041 ÷ # ÷ [0.2] QUOTATION MARK (Double_Quote) × [4.0] COMBINING DIAERESIS (Extend_FE) ÷ [999.0] LATIN CAPITAL LETTER A (ALetter) ÷ [0.3] +÷ 0022 ÷ 003A ÷ # ÷ [0.2] QUOTATION MARK (Double_Quote) ÷ [999.0] COLON (MidLetter) ÷ [0.3] +÷ 0022 × 0308 ÷ 003A ÷ # ÷ [0.2] QUOTATION MARK (Double_Quote) × [4.0] COMBINING DIAERESIS (Extend_FE) ÷ [999.0] COLON (MidLetter) ÷ [0.3] +÷ 0022 ÷ 002C ÷ # ÷ [0.2] QUOTATION MARK (Double_Quote) ÷ [999.0] COMMA (MidNum) ÷ [0.3] +÷ 0022 × 0308 ÷ 002C ÷ # ÷ [0.2] QUOTATION MARK (Double_Quote) × [4.0] COMBINING DIAERESIS (Extend_FE) ÷ [999.0] COMMA (MidNum) ÷ [0.3] +÷ 0022 ÷ 002E ÷ # ÷ [0.2] QUOTATION MARK (Double_Quote) ÷ [999.0] FULL STOP (MidNumLet) ÷ [0.3] +÷ 0022 × 0308 ÷ 002E ÷ # ÷ [0.2] QUOTATION MARK (Double_Quote) × [4.0] COMBINING DIAERESIS (Extend_FE) ÷ [999.0] FULL STOP (MidNumLet) ÷ [0.3] +÷ 0022 ÷ 0030 ÷ # ÷ [0.2] QUOTATION MARK (Double_Quote) ÷ [999.0] DIGIT ZERO (Numeric) ÷ [0.3] +÷ 0022 × 0308 ÷ 0030 ÷ # ÷ [0.2] QUOTATION MARK (Double_Quote) × [4.0] COMBINING DIAERESIS (Extend_FE) ÷ [999.0] DIGIT ZERO (Numeric) ÷ [0.3] +÷ 0022 ÷ 005F ÷ # ÷ [0.2] QUOTATION MARK (Double_Quote) ÷ [999.0] LOW LINE (ExtendNumLet) ÷ [0.3] +÷ 0022 × 0308 ÷ 005F ÷ # ÷ [0.2] QUOTATION MARK (Double_Quote) × [4.0] COMBINING DIAERESIS (Extend_FE) ÷ [999.0] LOW LINE (ExtendNumLet) ÷ [0.3] +÷ 0022 ÷ 1F1E6 ÷ # ÷ [0.2] QUOTATION MARK (Double_Quote) ÷ [999.0] REGIONAL INDICATOR SYMBOL LETTER A (Regional_Indicator) ÷ [0.3] +÷ 0022 × 0308 ÷ 1F1E6 ÷ # ÷ [0.2] QUOTATION MARK (Double_Quote) × [4.0] COMBINING DIAERESIS (Extend_FE) ÷ [999.0] REGIONAL INDICATOR SYMBOL LETTER A (Regional_Indicator) ÷ [0.3] +÷ 0022 ÷ 05D0 ÷ # ÷ [0.2] QUOTATION MARK (Double_Quote) ÷ [999.0] HEBREW LETTER ALEF (Hebrew_Letter) ÷ [0.3] +÷ 0022 × 0308 ÷ 05D0 ÷ # ÷ [0.2] QUOTATION MARK (Double_Quote) × [4.0] COMBINING DIAERESIS (Extend_FE) ÷ [999.0] HEBREW LETTER ALEF (Hebrew_Letter) ÷ [0.3] +÷ 0022 ÷ 0022 ÷ # ÷ [0.2] QUOTATION MARK (Double_Quote) ÷ [999.0] QUOTATION MARK (Double_Quote) ÷ [0.3] +÷ 0022 × 0308 ÷ 0022 ÷ # ÷ [0.2] QUOTATION MARK (Double_Quote) × [4.0] COMBINING DIAERESIS (Extend_FE) ÷ [999.0] QUOTATION MARK (Double_Quote) ÷ [0.3] +÷ 0022 ÷ 0027 ÷ # ÷ [0.2] QUOTATION MARK (Double_Quote) ÷ [999.0] APOSTROPHE (Single_Quote) ÷ [0.3] +÷ 0022 × 0308 ÷ 0027 ÷ # ÷ [0.2] QUOTATION MARK (Double_Quote) × [4.0] COMBINING DIAERESIS (Extend_FE) ÷ [999.0] APOSTROPHE (Single_Quote) ÷ [0.3] +÷ 0022 × 00AD ÷ # ÷ [0.2] QUOTATION MARK (Double_Quote) × [4.0] SOFT HYPHEN (Format_FE) ÷ [0.3] +÷ 0022 × 0308 × 00AD ÷ # ÷ [0.2] QUOTATION MARK (Double_Quote) × [4.0] COMBINING DIAERESIS (Extend_FE) × [4.0] SOFT HYPHEN (Format_FE) ÷ [0.3] +÷ 0022 × 0300 ÷ # ÷ [0.2] QUOTATION MARK (Double_Quote) × [4.0] COMBINING GRAVE ACCENT (Extend_FE) ÷ [0.3] +÷ 0022 × 0308 × 0300 ÷ # ÷ [0.2] QUOTATION MARK (Double_Quote) × [4.0] COMBINING DIAERESIS (Extend_FE) × [4.0] COMBINING GRAVE ACCENT (Extend_FE) ÷ [0.3] +÷ 0022 ÷ 0061 × 2060 ÷ # ÷ [0.2] QUOTATION MARK (Double_Quote) ÷ [999.0] LATIN SMALL LETTER A (ALetter) × [4.0] WORD JOINER (Format_FE) ÷ [0.3] +÷ 0022 × 0308 ÷ 0061 × 2060 ÷ # ÷ [0.2] QUOTATION MARK (Double_Quote) × [4.0] COMBINING DIAERESIS (Extend_FE) ÷ [999.0] LATIN SMALL LETTER A (ALetter) × [4.0] WORD JOINER (Format_FE) ÷ [0.3] +÷ 0022 ÷ 0061 ÷ 003A ÷ # ÷ [0.2] QUOTATION MARK (Double_Quote) ÷ [999.0] LATIN SMALL LETTER A (ALetter) ÷ [999.0] COLON (MidLetter) ÷ [0.3] +÷ 0022 × 0308 ÷ 0061 ÷ 003A ÷ # ÷ [0.2] QUOTATION MARK (Double_Quote) × [4.0] COMBINING DIAERESIS (Extend_FE) ÷ [999.0] LATIN SMALL LETTER A (ALetter) ÷ [999.0] COLON (MidLetter) ÷ [0.3] +÷ 0022 ÷ 0061 ÷ 0027 ÷ # ÷ [0.2] QUOTATION MARK (Double_Quote) ÷ [999.0] LATIN SMALL LETTER A (ALetter) ÷ [999.0] APOSTROPHE (Single_Quote) ÷ [0.3] +÷ 0022 × 0308 ÷ 0061 ÷ 0027 ÷ # ÷ [0.2] QUOTATION MARK (Double_Quote) × [4.0] COMBINING DIAERESIS (Extend_FE) ÷ [999.0] LATIN SMALL LETTER A (ALetter) ÷ [999.0] APOSTROPHE (Single_Quote) ÷ [0.3] +÷ 0022 ÷ 0061 ÷ 0027 × 2060 ÷ # ÷ [0.2] QUOTATION MARK (Double_Quote) ÷ [999.0] LATIN SMALL LETTER A (ALetter) ÷ [999.0] APOSTROPHE (Single_Quote) × [4.0] WORD JOINER (Format_FE) ÷ [0.3] +÷ 0022 × 0308 ÷ 0061 ÷ 0027 × 2060 ÷ # ÷ [0.2] QUOTATION MARK (Double_Quote) × [4.0] COMBINING DIAERESIS (Extend_FE) ÷ [999.0] LATIN SMALL LETTER A (ALetter) ÷ [999.0] APOSTROPHE (Single_Quote) × [4.0] WORD JOINER (Format_FE) ÷ [0.3] +÷ 0022 ÷ 0061 ÷ 002C ÷ # ÷ [0.2] QUOTATION MARK (Double_Quote) ÷ [999.0] LATIN SMALL LETTER A (ALetter) ÷ [999.0] COMMA (MidNum) ÷ [0.3] +÷ 0022 × 0308 ÷ 0061 ÷ 002C ÷ # ÷ [0.2] QUOTATION MARK (Double_Quote) × [4.0] COMBINING DIAERESIS (Extend_FE) ÷ [999.0] LATIN SMALL LETTER A (ALetter) ÷ [999.0] COMMA (MidNum) ÷ [0.3] +÷ 0022 ÷ 0031 ÷ 003A ÷ # ÷ [0.2] QUOTATION MARK (Double_Quote) ÷ [999.0] DIGIT ONE (Numeric) ÷ [999.0] COLON (MidLetter) ÷ [0.3] +÷ 0022 × 0308 ÷ 0031 ÷ 003A ÷ # ÷ [0.2] QUOTATION MARK (Double_Quote) × [4.0] COMBINING DIAERESIS (Extend_FE) ÷ [999.0] DIGIT ONE (Numeric) ÷ [999.0] COLON (MidLetter) ÷ [0.3] +÷ 0022 ÷ 0031 ÷ 0027 ÷ # ÷ [0.2] QUOTATION MARK (Double_Quote) ÷ [999.0] DIGIT ONE (Numeric) ÷ [999.0] APOSTROPHE (Single_Quote) ÷ [0.3] +÷ 0022 × 0308 ÷ 0031 ÷ 0027 ÷ # ÷ [0.2] QUOTATION MARK (Double_Quote) × [4.0] COMBINING DIAERESIS (Extend_FE) ÷ [999.0] DIGIT ONE (Numeric) ÷ [999.0] APOSTROPHE (Single_Quote) ÷ [0.3] +÷ 0022 ÷ 0031 ÷ 002C ÷ # ÷ [0.2] QUOTATION MARK (Double_Quote) ÷ [999.0] DIGIT ONE (Numeric) ÷ [999.0] COMMA (MidNum) ÷ [0.3] +÷ 0022 × 0308 ÷ 0031 ÷ 002C ÷ # ÷ [0.2] QUOTATION MARK (Double_Quote) × [4.0] COMBINING DIAERESIS (Extend_FE) ÷ [999.0] DIGIT ONE (Numeric) ÷ [999.0] COMMA (MidNum) ÷ [0.3] +÷ 0022 ÷ 0031 ÷ 002E × 2060 ÷ # ÷ [0.2] QUOTATION MARK (Double_Quote) ÷ [999.0] DIGIT ONE (Numeric) ÷ [999.0] FULL STOP (MidNumLet) × [4.0] WORD JOINER (Format_FE) ÷ [0.3] +÷ 0022 × 0308 ÷ 0031 ÷ 002E × 2060 ÷ # ÷ [0.2] QUOTATION MARK (Double_Quote) × [4.0] COMBINING DIAERESIS (Extend_FE) ÷ [999.0] DIGIT ONE (Numeric) ÷ [999.0] FULL STOP (MidNumLet) × [4.0] WORD JOINER (Format_FE) ÷ [0.3] +÷ 0027 ÷ 0001 ÷ # ÷ [0.2] APOSTROPHE (Single_Quote) ÷ [999.0] (Other) ÷ [0.3] +÷ 0027 × 0308 ÷ 0001 ÷ # ÷ [0.2] APOSTROPHE (Single_Quote) × [4.0] COMBINING DIAERESIS (Extend_FE) ÷ [999.0] (Other) ÷ [0.3] +÷ 0027 ÷ 000D ÷ # ÷ [0.2] APOSTROPHE (Single_Quote) ÷ [3.2] (CR) ÷ [0.3] +÷ 0027 × 0308 ÷ 000D ÷ # ÷ [0.2] APOSTROPHE (Single_Quote) × [4.0] COMBINING DIAERESIS (Extend_FE) ÷ [3.2] (CR) ÷ [0.3] +÷ 0027 ÷ 000A ÷ # ÷ [0.2] APOSTROPHE (Single_Quote) ÷ [3.2] (LF) ÷ [0.3] +÷ 0027 × 0308 ÷ 000A ÷ # ÷ [0.2] APOSTROPHE (Single_Quote) × [4.0] COMBINING DIAERESIS (Extend_FE) ÷ [3.2] (LF) ÷ [0.3] +÷ 0027 ÷ 000B ÷ # ÷ [0.2] APOSTROPHE (Single_Quote) ÷ [3.2] (Newline) ÷ [0.3] +÷ 0027 × 0308 ÷ 000B ÷ # ÷ [0.2] APOSTROPHE (Single_Quote) × [4.0] COMBINING DIAERESIS (Extend_FE) ÷ [3.2] (Newline) ÷ [0.3] +÷ 0027 ÷ 3031 ÷ # ÷ [0.2] APOSTROPHE (Single_Quote) ÷ [999.0] VERTICAL KANA REPEAT MARK (Katakana) ÷ [0.3] +÷ 0027 × 0308 ÷ 3031 ÷ # ÷ [0.2] APOSTROPHE (Single_Quote) × [4.0] COMBINING DIAERESIS (Extend_FE) ÷ [999.0] VERTICAL KANA REPEAT MARK (Katakana) ÷ [0.3] +÷ 0027 ÷ 0041 ÷ # ÷ [0.2] APOSTROPHE (Single_Quote) ÷ [999.0] LATIN CAPITAL LETTER A (ALetter) ÷ [0.3] +÷ 0027 × 0308 ÷ 0041 ÷ # ÷ [0.2] APOSTROPHE (Single_Quote) × [4.0] COMBINING DIAERESIS (Extend_FE) ÷ [999.0] LATIN CAPITAL LETTER A (ALetter) ÷ [0.3] +÷ 0027 ÷ 003A ÷ # ÷ [0.2] APOSTROPHE (Single_Quote) ÷ [999.0] COLON (MidLetter) ÷ [0.3] +÷ 0027 × 0308 ÷ 003A ÷ # ÷ [0.2] APOSTROPHE (Single_Quote) × [4.0] COMBINING DIAERESIS (Extend_FE) ÷ [999.0] COLON (MidLetter) ÷ [0.3] +÷ 0027 ÷ 002C ÷ # ÷ [0.2] APOSTROPHE (Single_Quote) ÷ [999.0] COMMA (MidNum) ÷ [0.3] +÷ 0027 × 0308 ÷ 002C ÷ # ÷ [0.2] APOSTROPHE (Single_Quote) × [4.0] COMBINING DIAERESIS (Extend_FE) ÷ [999.0] COMMA (MidNum) ÷ [0.3] +÷ 0027 ÷ 002E ÷ # ÷ [0.2] APOSTROPHE (Single_Quote) ÷ [999.0] FULL STOP (MidNumLet) ÷ [0.3] +÷ 0027 × 0308 ÷ 002E ÷ # ÷ [0.2] APOSTROPHE (Single_Quote) × [4.0] COMBINING DIAERESIS (Extend_FE) ÷ [999.0] FULL STOP (MidNumLet) ÷ [0.3] +÷ 0027 ÷ 0030 ÷ # ÷ [0.2] APOSTROPHE (Single_Quote) ÷ [999.0] DIGIT ZERO (Numeric) ÷ [0.3] +÷ 0027 × 0308 ÷ 0030 ÷ # ÷ [0.2] APOSTROPHE (Single_Quote) × [4.0] COMBINING DIAERESIS (Extend_FE) ÷ [999.0] DIGIT ZERO (Numeric) ÷ [0.3] +÷ 0027 ÷ 005F ÷ # ÷ [0.2] APOSTROPHE (Single_Quote) ÷ [999.0] LOW LINE (ExtendNumLet) ÷ [0.3] +÷ 0027 × 0308 ÷ 005F ÷ # ÷ [0.2] APOSTROPHE (Single_Quote) × [4.0] COMBINING DIAERESIS (Extend_FE) ÷ [999.0] LOW LINE (ExtendNumLet) ÷ [0.3] +÷ 0027 ÷ 1F1E6 ÷ # ÷ [0.2] APOSTROPHE (Single_Quote) ÷ [999.0] REGIONAL INDICATOR SYMBOL LETTER A (Regional_Indicator) ÷ [0.3] +÷ 0027 × 0308 ÷ 1F1E6 ÷ # ÷ [0.2] APOSTROPHE (Single_Quote) × [4.0] COMBINING DIAERESIS (Extend_FE) ÷ [999.0] REGIONAL INDICATOR SYMBOL LETTER A (Regional_Indicator) ÷ [0.3] +÷ 0027 ÷ 05D0 ÷ # ÷ [0.2] APOSTROPHE (Single_Quote) ÷ [999.0] HEBREW LETTER ALEF (Hebrew_Letter) ÷ [0.3] +÷ 0027 × 0308 ÷ 05D0 ÷ # ÷ [0.2] APOSTROPHE (Single_Quote) × [4.0] COMBINING DIAERESIS (Extend_FE) ÷ [999.0] HEBREW LETTER ALEF (Hebrew_Letter) ÷ [0.3] +÷ 0027 ÷ 0022 ÷ # ÷ [0.2] APOSTROPHE (Single_Quote) ÷ [999.0] QUOTATION MARK (Double_Quote) ÷ [0.3] +÷ 0027 × 0308 ÷ 0022 ÷ # ÷ [0.2] APOSTROPHE (Single_Quote) × [4.0] COMBINING DIAERESIS (Extend_FE) ÷ [999.0] QUOTATION MARK (Double_Quote) ÷ [0.3] +÷ 0027 ÷ 0027 ÷ # ÷ [0.2] APOSTROPHE (Single_Quote) ÷ [999.0] APOSTROPHE (Single_Quote) ÷ [0.3] +÷ 0027 × 0308 ÷ 0027 ÷ # ÷ [0.2] APOSTROPHE (Single_Quote) × [4.0] COMBINING DIAERESIS (Extend_FE) ÷ [999.0] APOSTROPHE (Single_Quote) ÷ [0.3] +÷ 0027 × 00AD ÷ # ÷ [0.2] APOSTROPHE (Single_Quote) × [4.0] SOFT HYPHEN (Format_FE) ÷ [0.3] +÷ 0027 × 0308 × 00AD ÷ # ÷ [0.2] APOSTROPHE (Single_Quote) × [4.0] COMBINING DIAERESIS (Extend_FE) × [4.0] SOFT HYPHEN (Format_FE) ÷ [0.3] +÷ 0027 × 0300 ÷ # ÷ [0.2] APOSTROPHE (Single_Quote) × [4.0] COMBINING GRAVE ACCENT (Extend_FE) ÷ [0.3] +÷ 0027 × 0308 × 0300 ÷ # ÷ [0.2] APOSTROPHE (Single_Quote) × [4.0] COMBINING DIAERESIS (Extend_FE) × [4.0] COMBINING GRAVE ACCENT (Extend_FE) ÷ [0.3] +÷ 0027 ÷ 0061 × 2060 ÷ # ÷ [0.2] APOSTROPHE (Single_Quote) ÷ [999.0] LATIN SMALL LETTER A (ALetter) × [4.0] WORD JOINER (Format_FE) ÷ [0.3] +÷ 0027 × 0308 ÷ 0061 × 2060 ÷ # ÷ [0.2] APOSTROPHE (Single_Quote) × [4.0] COMBINING DIAERESIS (Extend_FE) ÷ [999.0] LATIN SMALL LETTER A (ALetter) × [4.0] WORD JOINER (Format_FE) ÷ [0.3] +÷ 0027 ÷ 0061 ÷ 003A ÷ # ÷ [0.2] APOSTROPHE (Single_Quote) ÷ [999.0] LATIN SMALL LETTER A (ALetter) ÷ [999.0] COLON (MidLetter) ÷ [0.3] +÷ 0027 × 0308 ÷ 0061 ÷ 003A ÷ # ÷ [0.2] APOSTROPHE (Single_Quote) × [4.0] COMBINING DIAERESIS (Extend_FE) ÷ [999.0] LATIN SMALL LETTER A (ALetter) ÷ [999.0] COLON (MidLetter) ÷ [0.3] +÷ 0027 ÷ 0061 ÷ 0027 ÷ # ÷ [0.2] APOSTROPHE (Single_Quote) ÷ [999.0] LATIN SMALL LETTER A (ALetter) ÷ [999.0] APOSTROPHE (Single_Quote) ÷ [0.3] +÷ 0027 × 0308 ÷ 0061 ÷ 0027 ÷ # ÷ [0.2] APOSTROPHE (Single_Quote) × [4.0] COMBINING DIAERESIS (Extend_FE) ÷ [999.0] LATIN SMALL LETTER A (ALetter) ÷ [999.0] APOSTROPHE (Single_Quote) ÷ [0.3] +÷ 0027 ÷ 0061 ÷ 0027 × 2060 ÷ # ÷ [0.2] APOSTROPHE (Single_Quote) ÷ [999.0] LATIN SMALL LETTER A (ALetter) ÷ [999.0] APOSTROPHE (Single_Quote) × [4.0] WORD JOINER (Format_FE) ÷ [0.3] +÷ 0027 × 0308 ÷ 0061 ÷ 0027 × 2060 ÷ # ÷ [0.2] APOSTROPHE (Single_Quote) × [4.0] COMBINING DIAERESIS (Extend_FE) ÷ [999.0] LATIN SMALL LETTER A (ALetter) ÷ [999.0] APOSTROPHE (Single_Quote) × [4.0] WORD JOINER (Format_FE) ÷ [0.3] +÷ 0027 ÷ 0061 ÷ 002C ÷ # ÷ [0.2] APOSTROPHE (Single_Quote) ÷ [999.0] LATIN SMALL LETTER A (ALetter) ÷ [999.0] COMMA (MidNum) ÷ [0.3] +÷ 0027 × 0308 ÷ 0061 ÷ 002C ÷ # ÷ [0.2] APOSTROPHE (Single_Quote) × [4.0] COMBINING DIAERESIS (Extend_FE) ÷ [999.0] LATIN SMALL LETTER A (ALetter) ÷ [999.0] COMMA (MidNum) ÷ [0.3] +÷ 0027 ÷ 0031 ÷ 003A ÷ # ÷ [0.2] APOSTROPHE (Single_Quote) ÷ [999.0] DIGIT ONE (Numeric) ÷ [999.0] COLON (MidLetter) ÷ [0.3] +÷ 0027 × 0308 ÷ 0031 ÷ 003A ÷ # ÷ [0.2] APOSTROPHE (Single_Quote) × [4.0] COMBINING DIAERESIS (Extend_FE) ÷ [999.0] DIGIT ONE (Numeric) ÷ [999.0] COLON (MidLetter) ÷ [0.3] +÷ 0027 ÷ 0031 ÷ 0027 ÷ # ÷ [0.2] APOSTROPHE (Single_Quote) ÷ [999.0] DIGIT ONE (Numeric) ÷ [999.0] APOSTROPHE (Single_Quote) ÷ [0.3] +÷ 0027 × 0308 ÷ 0031 ÷ 0027 ÷ # ÷ [0.2] APOSTROPHE (Single_Quote) × [4.0] COMBINING DIAERESIS (Extend_FE) ÷ [999.0] DIGIT ONE (Numeric) ÷ [999.0] APOSTROPHE (Single_Quote) ÷ [0.3] +÷ 0027 ÷ 0031 ÷ 002C ÷ # ÷ [0.2] APOSTROPHE (Single_Quote) ÷ [999.0] DIGIT ONE (Numeric) ÷ [999.0] COMMA (MidNum) ÷ [0.3] +÷ 0027 × 0308 ÷ 0031 ÷ 002C ÷ # ÷ [0.2] APOSTROPHE (Single_Quote) × [4.0] COMBINING DIAERESIS (Extend_FE) ÷ [999.0] DIGIT ONE (Numeric) ÷ [999.0] COMMA (MidNum) ÷ [0.3] +÷ 0027 ÷ 0031 ÷ 002E × 2060 ÷ # ÷ [0.2] APOSTROPHE (Single_Quote) ÷ [999.0] DIGIT ONE (Numeric) ÷ [999.0] FULL STOP (MidNumLet) × [4.0] WORD JOINER (Format_FE) ÷ [0.3] +÷ 0027 × 0308 ÷ 0031 ÷ 002E × 2060 ÷ # ÷ [0.2] APOSTROPHE (Single_Quote) × [4.0] COMBINING DIAERESIS (Extend_FE) ÷ [999.0] DIGIT ONE (Numeric) ÷ [999.0] FULL STOP (MidNumLet) × [4.0] WORD JOINER (Format_FE) ÷ [0.3] ÷ 00AD ÷ 0001 ÷ # ÷ [0.2] SOFT HYPHEN (Format_FE) ÷ [999.0] (Other) ÷ [0.3] ÷ 00AD × 0308 ÷ 0001 ÷ # ÷ [0.2] SOFT HYPHEN (Format_FE) × [4.0] COMBINING DIAERESIS (Extend_FE) ÷ [999.0] (Other) ÷ [0.3] ÷ 00AD ÷ 000D ÷ # ÷ [0.2] SOFT HYPHEN (Format_FE) ÷ [3.2] (CR) ÷ [0.3] @@ -588,14 +816,20 @@ ÷ 00AD × 0308 ÷ 003A ÷ # ÷ [0.2] SOFT HYPHEN (Format_FE) × [4.0] COMBINING DIAERESIS (Extend_FE) ÷ [999.0] COLON (MidLetter) ÷ [0.3] ÷ 00AD ÷ 002C ÷ # ÷ [0.2] SOFT HYPHEN (Format_FE) ÷ [999.0] COMMA (MidNum) ÷ [0.3] ÷ 00AD × 0308 ÷ 002C ÷ # ÷ [0.2] SOFT HYPHEN (Format_FE) × [4.0] COMBINING DIAERESIS (Extend_FE) ÷ [999.0] COMMA (MidNum) ÷ [0.3] -÷ 00AD ÷ 0027 ÷ # ÷ [0.2] SOFT HYPHEN (Format_FE) ÷ [999.0] APOSTROPHE (MidNumLet) ÷ [0.3] -÷ 00AD × 0308 ÷ 0027 ÷ # ÷ [0.2] SOFT HYPHEN (Format_FE) × [4.0] COMBINING DIAERESIS (Extend_FE) ÷ [999.0] APOSTROPHE (MidNumLet) ÷ [0.3] +÷ 00AD ÷ 002E ÷ # ÷ [0.2] SOFT HYPHEN (Format_FE) ÷ [999.0] FULL STOP (MidNumLet) ÷ [0.3] +÷ 00AD × 0308 ÷ 002E ÷ # ÷ [0.2] SOFT HYPHEN (Format_FE) × [4.0] COMBINING DIAERESIS (Extend_FE) ÷ [999.0] FULL STOP (MidNumLet) ÷ [0.3] ÷ 00AD ÷ 0030 ÷ # ÷ [0.2] SOFT HYPHEN (Format_FE) ÷ [999.0] DIGIT ZERO (Numeric) ÷ [0.3] ÷ 00AD × 0308 ÷ 0030 ÷ # ÷ [0.2] SOFT HYPHEN (Format_FE) × [4.0] COMBINING DIAERESIS (Extend_FE) ÷ [999.0] DIGIT ZERO (Numeric) ÷ [0.3] ÷ 00AD ÷ 005F ÷ # ÷ [0.2] SOFT HYPHEN (Format_FE) ÷ [999.0] LOW LINE (ExtendNumLet) ÷ [0.3] ÷ 00AD × 0308 ÷ 005F ÷ # ÷ [0.2] SOFT HYPHEN (Format_FE) × [4.0] COMBINING DIAERESIS (Extend_FE) ÷ [999.0] LOW LINE (ExtendNumLet) ÷ [0.3] ÷ 00AD ÷ 1F1E6 ÷ # ÷ [0.2] SOFT HYPHEN (Format_FE) ÷ [999.0] REGIONAL INDICATOR SYMBOL LETTER A (Regional_Indicator) ÷ [0.3] ÷ 00AD × 0308 ÷ 1F1E6 ÷ # ÷ [0.2] SOFT HYPHEN (Format_FE) × [4.0] COMBINING DIAERESIS (Extend_FE) ÷ [999.0] REGIONAL INDICATOR SYMBOL LETTER A (Regional_Indicator) ÷ [0.3] +÷ 00AD ÷ 05D0 ÷ # ÷ [0.2] SOFT HYPHEN (Format_FE) ÷ [999.0] HEBREW LETTER ALEF (Hebrew_Letter) ÷ [0.3] +÷ 00AD × 0308 ÷ 05D0 ÷ # ÷ [0.2] SOFT HYPHEN (Format_FE) × [4.0] COMBINING DIAERESIS (Extend_FE) ÷ [999.0] HEBREW LETTER ALEF (Hebrew_Letter) ÷ [0.3] +÷ 00AD ÷ 0022 ÷ # ÷ [0.2] SOFT HYPHEN (Format_FE) ÷ [999.0] QUOTATION MARK (Double_Quote) ÷ [0.3] +÷ 00AD × 0308 ÷ 0022 ÷ # ÷ [0.2] SOFT HYPHEN (Format_FE) × [4.0] COMBINING DIAERESIS (Extend_FE) ÷ [999.0] QUOTATION MARK (Double_Quote) ÷ [0.3] +÷ 00AD ÷ 0027 ÷ # ÷ [0.2] SOFT HYPHEN (Format_FE) ÷ [999.0] APOSTROPHE (Single_Quote) ÷ [0.3] +÷ 00AD × 0308 ÷ 0027 ÷ # ÷ [0.2] SOFT HYPHEN (Format_FE) × [4.0] COMBINING DIAERESIS (Extend_FE) ÷ [999.0] APOSTROPHE (Single_Quote) ÷ [0.3] ÷ 00AD × 00AD ÷ # ÷ [0.2] SOFT HYPHEN (Format_FE) × [4.0] SOFT HYPHEN (Format_FE) ÷ [0.3] ÷ 00AD × 0308 × 00AD ÷ # ÷ [0.2] SOFT HYPHEN (Format_FE) × [4.0] COMBINING DIAERESIS (Extend_FE) × [4.0] SOFT HYPHEN (Format_FE) ÷ [0.3] ÷ 00AD × 0300 ÷ # ÷ [0.2] SOFT HYPHEN (Format_FE) × [4.0] COMBINING GRAVE ACCENT (Extend_FE) ÷ [0.3] @@ -604,16 +838,16 @@ ÷ 00AD × 0308 ÷ 0061 × 2060 ÷ # ÷ [0.2] SOFT HYPHEN (Format_FE) × [4.0] COMBINING DIAERESIS (Extend_FE) ÷ [999.0] LATIN SMALL LETTER A (ALetter) × [4.0] WORD JOINER (Format_FE) ÷ [0.3] ÷ 00AD ÷ 0061 ÷ 003A ÷ # ÷ [0.2] SOFT HYPHEN (Format_FE) ÷ [999.0] LATIN SMALL LETTER A (ALetter) ÷ [999.0] COLON (MidLetter) ÷ [0.3] ÷ 00AD × 0308 ÷ 0061 ÷ 003A ÷ # ÷ [0.2] SOFT HYPHEN (Format_FE) × [4.0] COMBINING DIAERESIS (Extend_FE) ÷ [999.0] LATIN SMALL LETTER A (ALetter) ÷ [999.0] COLON (MidLetter) ÷ [0.3] -÷ 00AD ÷ 0061 ÷ 0027 ÷ # ÷ [0.2] SOFT HYPHEN (Format_FE) ÷ [999.0] LATIN SMALL LETTER A (ALetter) ÷ [999.0] APOSTROPHE (MidNumLet) ÷ [0.3] -÷ 00AD × 0308 ÷ 0061 ÷ 0027 ÷ # ÷ [0.2] SOFT HYPHEN (Format_FE) × [4.0] COMBINING DIAERESIS (Extend_FE) ÷ [999.0] LATIN SMALL LETTER A (ALetter) ÷ [999.0] APOSTROPHE (MidNumLet) ÷ [0.3] -÷ 00AD ÷ 0061 ÷ 0027 × 2060 ÷ # ÷ [0.2] SOFT HYPHEN (Format_FE) ÷ [999.0] LATIN SMALL LETTER A (ALetter) ÷ [999.0] APOSTROPHE (MidNumLet) × [4.0] WORD JOINER (Format_FE) ÷ [0.3] -÷ 00AD × 0308 ÷ 0061 ÷ 0027 × 2060 ÷ # ÷ [0.2] SOFT HYPHEN (Format_FE) × [4.0] COMBINING DIAERESIS (Extend_FE) ÷ [999.0] LATIN SMALL LETTER A (ALetter) ÷ [999.0] APOSTROPHE (MidNumLet) × [4.0] WORD JOINER (Format_FE) ÷ [0.3] +÷ 00AD ÷ 0061 ÷ 0027 ÷ # ÷ [0.2] SOFT HYPHEN (Format_FE) ÷ [999.0] LATIN SMALL LETTER A (ALetter) ÷ [999.0] APOSTROPHE (Single_Quote) ÷ [0.3] +÷ 00AD × 0308 ÷ 0061 ÷ 0027 ÷ # ÷ [0.2] SOFT HYPHEN (Format_FE) × [4.0] COMBINING DIAERESIS (Extend_FE) ÷ [999.0] LATIN SMALL LETTER A (ALetter) ÷ [999.0] APOSTROPHE (Single_Quote) ÷ [0.3] +÷ 00AD ÷ 0061 ÷ 0027 × 2060 ÷ # ÷ [0.2] SOFT HYPHEN (Format_FE) ÷ [999.0] LATIN SMALL LETTER A (ALetter) ÷ [999.0] APOSTROPHE (Single_Quote) × [4.0] WORD JOINER (Format_FE) ÷ [0.3] +÷ 00AD × 0308 ÷ 0061 ÷ 0027 × 2060 ÷ # ÷ [0.2] SOFT HYPHEN (Format_FE) × [4.0] COMBINING DIAERESIS (Extend_FE) ÷ [999.0] LATIN SMALL LETTER A (ALetter) ÷ [999.0] APOSTROPHE (Single_Quote) × [4.0] WORD JOINER (Format_FE) ÷ [0.3] ÷ 00AD ÷ 0061 ÷ 002C ÷ # ÷ [0.2] SOFT HYPHEN (Format_FE) ÷ [999.0] LATIN SMALL LETTER A (ALetter) ÷ [999.0] COMMA (MidNum) ÷ [0.3] ÷ 00AD × 0308 ÷ 0061 ÷ 002C ÷ # ÷ [0.2] SOFT HYPHEN (Format_FE) × [4.0] COMBINING DIAERESIS (Extend_FE) ÷ [999.0] LATIN SMALL LETTER A (ALetter) ÷ [999.0] COMMA (MidNum) ÷ [0.3] ÷ 00AD ÷ 0031 ÷ 003A ÷ # ÷ [0.2] SOFT HYPHEN (Format_FE) ÷ [999.0] DIGIT ONE (Numeric) ÷ [999.0] COLON (MidLetter) ÷ [0.3] ÷ 00AD × 0308 ÷ 0031 ÷ 003A ÷ # ÷ [0.2] SOFT HYPHEN (Format_FE) × [4.0] COMBINING DIAERESIS (Extend_FE) ÷ [999.0] DIGIT ONE (Numeric) ÷ [999.0] COLON (MidLetter) ÷ [0.3] -÷ 00AD ÷ 0031 ÷ 0027 ÷ # ÷ [0.2] SOFT HYPHEN (Format_FE) ÷ [999.0] DIGIT ONE (Numeric) ÷ [999.0] APOSTROPHE (MidNumLet) ÷ [0.3] -÷ 00AD × 0308 ÷ 0031 ÷ 0027 ÷ # ÷ [0.2] SOFT HYPHEN (Format_FE) × [4.0] COMBINING DIAERESIS (Extend_FE) ÷ [999.0] DIGIT ONE (Numeric) ÷ [999.0] APOSTROPHE (MidNumLet) ÷ [0.3] +÷ 00AD ÷ 0031 ÷ 0027 ÷ # ÷ [0.2] SOFT HYPHEN (Format_FE) ÷ [999.0] DIGIT ONE (Numeric) ÷ [999.0] APOSTROPHE (Single_Quote) ÷ [0.3] +÷ 00AD × 0308 ÷ 0031 ÷ 0027 ÷ # ÷ [0.2] SOFT HYPHEN (Format_FE) × [4.0] COMBINING DIAERESIS (Extend_FE) ÷ [999.0] DIGIT ONE (Numeric) ÷ [999.0] APOSTROPHE (Single_Quote) ÷ [0.3] ÷ 00AD ÷ 0031 ÷ 002C ÷ # ÷ [0.2] SOFT HYPHEN (Format_FE) ÷ [999.0] DIGIT ONE (Numeric) ÷ [999.0] COMMA (MidNum) ÷ [0.3] ÷ 00AD × 0308 ÷ 0031 ÷ 002C ÷ # ÷ [0.2] SOFT HYPHEN (Format_FE) × [4.0] COMBINING DIAERESIS (Extend_FE) ÷ [999.0] DIGIT ONE (Numeric) ÷ [999.0] COMMA (MidNum) ÷ [0.3] ÷ 00AD ÷ 0031 ÷ 002E × 2060 ÷ # ÷ [0.2] SOFT HYPHEN (Format_FE) ÷ [999.0] DIGIT ONE (Numeric) ÷ [999.0] FULL STOP (MidNumLet) × [4.0] WORD JOINER (Format_FE) ÷ [0.3] @@ -634,14 +868,20 @@ ÷ 0300 × 0308 ÷ 003A ÷ # ÷ [0.2] COMBINING GRAVE ACCENT (Extend_FE) × [4.0] COMBINING DIAERESIS (Extend_FE) ÷ [999.0] COLON (MidLetter) ÷ [0.3] ÷ 0300 ÷ 002C ÷ # ÷ [0.2] COMBINING GRAVE ACCENT (Extend_FE) ÷ [999.0] COMMA (MidNum) ÷ [0.3] ÷ 0300 × 0308 ÷ 002C ÷ # ÷ [0.2] COMBINING GRAVE ACCENT (Extend_FE) × [4.0] COMBINING DIAERESIS (Extend_FE) ÷ [999.0] COMMA (MidNum) ÷ [0.3] -÷ 0300 ÷ 0027 ÷ # ÷ [0.2] COMBINING GRAVE ACCENT (Extend_FE) ÷ [999.0] APOSTROPHE (MidNumLet) ÷ [0.3] -÷ 0300 × 0308 ÷ 0027 ÷ # ÷ [0.2] COMBINING GRAVE ACCENT (Extend_FE) × [4.0] COMBINING DIAERESIS (Extend_FE) ÷ [999.0] APOSTROPHE (MidNumLet) ÷ [0.3] +÷ 0300 ÷ 002E ÷ # ÷ [0.2] COMBINING GRAVE ACCENT (Extend_FE) ÷ [999.0] FULL STOP (MidNumLet) ÷ [0.3] +÷ 0300 × 0308 ÷ 002E ÷ # ÷ [0.2] COMBINING GRAVE ACCENT (Extend_FE) × [4.0] COMBINING DIAERESIS (Extend_FE) ÷ [999.0] FULL STOP (MidNumLet) ÷ [0.3] ÷ 0300 ÷ 0030 ÷ # ÷ [0.2] COMBINING GRAVE ACCENT (Extend_FE) ÷ [999.0] DIGIT ZERO (Numeric) ÷ [0.3] ÷ 0300 × 0308 ÷ 0030 ÷ # ÷ [0.2] COMBINING GRAVE ACCENT (Extend_FE) × [4.0] COMBINING DIAERESIS (Extend_FE) ÷ [999.0] DIGIT ZERO (Numeric) ÷ [0.3] ÷ 0300 ÷ 005F ÷ # ÷ [0.2] COMBINING GRAVE ACCENT (Extend_FE) ÷ [999.0] LOW LINE (ExtendNumLet) ÷ [0.3] ÷ 0300 × 0308 ÷ 005F ÷ # ÷ [0.2] COMBINING GRAVE ACCENT (Extend_FE) × [4.0] COMBINING DIAERESIS (Extend_FE) ÷ [999.0] LOW LINE (ExtendNumLet) ÷ [0.3] ÷ 0300 ÷ 1F1E6 ÷ # ÷ [0.2] COMBINING GRAVE ACCENT (Extend_FE) ÷ [999.0] REGIONAL INDICATOR SYMBOL LETTER A (Regional_Indicator) ÷ [0.3] ÷ 0300 × 0308 ÷ 1F1E6 ÷ # ÷ [0.2] COMBINING GRAVE ACCENT (Extend_FE) × [4.0] COMBINING DIAERESIS (Extend_FE) ÷ [999.0] REGIONAL INDICATOR SYMBOL LETTER A (Regional_Indicator) ÷ [0.3] +÷ 0300 ÷ 05D0 ÷ # ÷ [0.2] COMBINING GRAVE ACCENT (Extend_FE) ÷ [999.0] HEBREW LETTER ALEF (Hebrew_Letter) ÷ [0.3] +÷ 0300 × 0308 ÷ 05D0 ÷ # ÷ [0.2] COMBINING GRAVE ACCENT (Extend_FE) × [4.0] COMBINING DIAERESIS (Extend_FE) ÷ [999.0] HEBREW LETTER ALEF (Hebrew_Letter) ÷ [0.3] +÷ 0300 ÷ 0022 ÷ # ÷ [0.2] COMBINING GRAVE ACCENT (Extend_FE) ÷ [999.0] QUOTATION MARK (Double_Quote) ÷ [0.3] +÷ 0300 × 0308 ÷ 0022 ÷ # ÷ [0.2] COMBINING GRAVE ACCENT (Extend_FE) × [4.0] COMBINING DIAERESIS (Extend_FE) ÷ [999.0] QUOTATION MARK (Double_Quote) ÷ [0.3] +÷ 0300 ÷ 0027 ÷ # ÷ [0.2] COMBINING GRAVE ACCENT (Extend_FE) ÷ [999.0] APOSTROPHE (Single_Quote) ÷ [0.3] +÷ 0300 × 0308 ÷ 0027 ÷ # ÷ [0.2] COMBINING GRAVE ACCENT (Extend_FE) × [4.0] COMBINING DIAERESIS (Extend_FE) ÷ [999.0] APOSTROPHE (Single_Quote) ÷ [0.3] ÷ 0300 × 00AD ÷ # ÷ [0.2] COMBINING GRAVE ACCENT (Extend_FE) × [4.0] SOFT HYPHEN (Format_FE) ÷ [0.3] ÷ 0300 × 0308 × 00AD ÷ # ÷ [0.2] COMBINING GRAVE ACCENT (Extend_FE) × [4.0] COMBINING DIAERESIS (Extend_FE) × [4.0] SOFT HYPHEN (Format_FE) ÷ [0.3] ÷ 0300 × 0300 ÷ # ÷ [0.2] COMBINING GRAVE ACCENT (Extend_FE) × [4.0] COMBINING GRAVE ACCENT (Extend_FE) ÷ [0.3] @@ -650,16 +890,16 @@ ÷ 0300 × 0308 ÷ 0061 × 2060 ÷ # ÷ [0.2] COMBINING GRAVE ACCENT (Extend_FE) × [4.0] COMBINING DIAERESIS (Extend_FE) ÷ [999.0] LATIN SMALL LETTER A (ALetter) × [4.0] WORD JOINER (Format_FE) ÷ [0.3] ÷ 0300 ÷ 0061 ÷ 003A ÷ # ÷ [0.2] COMBINING GRAVE ACCENT (Extend_FE) ÷ [999.0] LATIN SMALL LETTER A (ALetter) ÷ [999.0] COLON (MidLetter) ÷ [0.3] ÷ 0300 × 0308 ÷ 0061 ÷ 003A ÷ # ÷ [0.2] COMBINING GRAVE ACCENT (Extend_FE) × [4.0] COMBINING DIAERESIS (Extend_FE) ÷ [999.0] LATIN SMALL LETTER A (ALetter) ÷ [999.0] COLON (MidLetter) ÷ [0.3] -÷ 0300 ÷ 0061 ÷ 0027 ÷ # ÷ [0.2] COMBINING GRAVE ACCENT (Extend_FE) ÷ [999.0] LATIN SMALL LETTER A (ALetter) ÷ [999.0] APOSTROPHE (MidNumLet) ÷ [0.3] -÷ 0300 × 0308 ÷ 0061 ÷ 0027 ÷ # ÷ [0.2] COMBINING GRAVE ACCENT (Extend_FE) × [4.0] COMBINING DIAERESIS (Extend_FE) ÷ [999.0] LATIN SMALL LETTER A (ALetter) ÷ [999.0] APOSTROPHE (MidNumLet) ÷ [0.3] -÷ 0300 ÷ 0061 ÷ 0027 × 2060 ÷ # ÷ [0.2] COMBINING GRAVE ACCENT (Extend_FE) ÷ [999.0] LATIN SMALL LETTER A (ALetter) ÷ [999.0] APOSTROPHE (MidNumLet) × [4.0] WORD JOINER (Format_FE) ÷ [0.3] -÷ 0300 × 0308 ÷ 0061 ÷ 0027 × 2060 ÷ # ÷ [0.2] COMBINING GRAVE ACCENT (Extend_FE) × [4.0] COMBINING DIAERESIS (Extend_FE) ÷ [999.0] LATIN SMALL LETTER A (ALetter) ÷ [999.0] APOSTROPHE (MidNumLet) × [4.0] WORD JOINER (Format_FE) ÷ [0.3] +÷ 0300 ÷ 0061 ÷ 0027 ÷ # ÷ [0.2] COMBINING GRAVE ACCENT (Extend_FE) ÷ [999.0] LATIN SMALL LETTER A (ALetter) ÷ [999.0] APOSTROPHE (Single_Quote) ÷ [0.3] +÷ 0300 × 0308 ÷ 0061 ÷ 0027 ÷ # ÷ [0.2] COMBINING GRAVE ACCENT (Extend_FE) × [4.0] COMBINING DIAERESIS (Extend_FE) ÷ [999.0] LATIN SMALL LETTER A (ALetter) ÷ [999.0] APOSTROPHE (Single_Quote) ÷ [0.3] +÷ 0300 ÷ 0061 ÷ 0027 × 2060 ÷ # ÷ [0.2] COMBINING GRAVE ACCENT (Extend_FE) ÷ [999.0] LATIN SMALL LETTER A (ALetter) ÷ [999.0] APOSTROPHE (Single_Quote) × [4.0] WORD JOINER (Format_FE) ÷ [0.3] +÷ 0300 × 0308 ÷ 0061 ÷ 0027 × 2060 ÷ # ÷ [0.2] COMBINING GRAVE ACCENT (Extend_FE) × [4.0] COMBINING DIAERESIS (Extend_FE) ÷ [999.0] LATIN SMALL LETTER A (ALetter) ÷ [999.0] APOSTROPHE (Single_Quote) × [4.0] WORD JOINER (Format_FE) ÷ [0.3] ÷ 0300 ÷ 0061 ÷ 002C ÷ # ÷ [0.2] COMBINING GRAVE ACCENT (Extend_FE) ÷ [999.0] LATIN SMALL LETTER A (ALetter) ÷ [999.0] COMMA (MidNum) ÷ [0.3] ÷ 0300 × 0308 ÷ 0061 ÷ 002C ÷ # ÷ [0.2] COMBINING GRAVE ACCENT (Extend_FE) × [4.0] COMBINING DIAERESIS (Extend_FE) ÷ [999.0] LATIN SMALL LETTER A (ALetter) ÷ [999.0] COMMA (MidNum) ÷ [0.3] ÷ 0300 ÷ 0031 ÷ 003A ÷ # ÷ [0.2] COMBINING GRAVE ACCENT (Extend_FE) ÷ [999.0] DIGIT ONE (Numeric) ÷ [999.0] COLON (MidLetter) ÷ [0.3] ÷ 0300 × 0308 ÷ 0031 ÷ 003A ÷ # ÷ [0.2] COMBINING GRAVE ACCENT (Extend_FE) × [4.0] COMBINING DIAERESIS (Extend_FE) ÷ [999.0] DIGIT ONE (Numeric) ÷ [999.0] COLON (MidLetter) ÷ [0.3] -÷ 0300 ÷ 0031 ÷ 0027 ÷ # ÷ [0.2] COMBINING GRAVE ACCENT (Extend_FE) ÷ [999.0] DIGIT ONE (Numeric) ÷ [999.0] APOSTROPHE (MidNumLet) ÷ [0.3] -÷ 0300 × 0308 ÷ 0031 ÷ 0027 ÷ # ÷ [0.2] COMBINING GRAVE ACCENT (Extend_FE) × [4.0] COMBINING DIAERESIS (Extend_FE) ÷ [999.0] DIGIT ONE (Numeric) ÷ [999.0] APOSTROPHE (MidNumLet) ÷ [0.3] +÷ 0300 ÷ 0031 ÷ 0027 ÷ # ÷ [0.2] COMBINING GRAVE ACCENT (Extend_FE) ÷ [999.0] DIGIT ONE (Numeric) ÷ [999.0] APOSTROPHE (Single_Quote) ÷ [0.3] +÷ 0300 × 0308 ÷ 0031 ÷ 0027 ÷ # ÷ [0.2] COMBINING GRAVE ACCENT (Extend_FE) × [4.0] COMBINING DIAERESIS (Extend_FE) ÷ [999.0] DIGIT ONE (Numeric) ÷ [999.0] APOSTROPHE (Single_Quote) ÷ [0.3] ÷ 0300 ÷ 0031 ÷ 002C ÷ # ÷ [0.2] COMBINING GRAVE ACCENT (Extend_FE) ÷ [999.0] DIGIT ONE (Numeric) ÷ [999.0] COMMA (MidNum) ÷ [0.3] ÷ 0300 × 0308 ÷ 0031 ÷ 002C ÷ # ÷ [0.2] COMBINING GRAVE ACCENT (Extend_FE) × [4.0] COMBINING DIAERESIS (Extend_FE) ÷ [999.0] DIGIT ONE (Numeric) ÷ [999.0] COMMA (MidNum) ÷ [0.3] ÷ 0300 ÷ 0031 ÷ 002E × 2060 ÷ # ÷ [0.2] COMBINING GRAVE ACCENT (Extend_FE) ÷ [999.0] DIGIT ONE (Numeric) ÷ [999.0] FULL STOP (MidNumLet) × [4.0] WORD JOINER (Format_FE) ÷ [0.3] @@ -680,14 +920,20 @@ ÷ 0061 × 2060 × 0308 ÷ 003A ÷ # ÷ [0.2] LATIN SMALL LETTER A (ALetter) × [4.0] WORD JOINER (Format_FE) × [4.0] COMBINING DIAERESIS (Extend_FE) ÷ [999.0] COLON (MidLetter) ÷ [0.3] ÷ 0061 × 2060 ÷ 002C ÷ # ÷ [0.2] LATIN SMALL LETTER A (ALetter) × [4.0] WORD JOINER (Format_FE) ÷ [999.0] COMMA (MidNum) ÷ [0.3] ÷ 0061 × 2060 × 0308 ÷ 002C ÷ # ÷ [0.2] LATIN SMALL LETTER A (ALetter) × [4.0] WORD JOINER (Format_FE) × [4.0] COMBINING DIAERESIS (Extend_FE) ÷ [999.0] COMMA (MidNum) ÷ [0.3] -÷ 0061 × 2060 ÷ 0027 ÷ # ÷ [0.2] LATIN SMALL LETTER A (ALetter) × [4.0] WORD JOINER (Format_FE) ÷ [999.0] APOSTROPHE (MidNumLet) ÷ [0.3] -÷ 0061 × 2060 × 0308 ÷ 0027 ÷ # ÷ [0.2] LATIN SMALL LETTER A (ALetter) × [4.0] WORD JOINER (Format_FE) × [4.0] COMBINING DIAERESIS (Extend_FE) ÷ [999.0] APOSTROPHE (MidNumLet) ÷ [0.3] +÷ 0061 × 2060 ÷ 002E ÷ # ÷ [0.2] LATIN SMALL LETTER A (ALetter) × [4.0] WORD JOINER (Format_FE) ÷ [999.0] FULL STOP (MidNumLet) ÷ [0.3] +÷ 0061 × 2060 × 0308 ÷ 002E ÷ # ÷ [0.2] LATIN SMALL LETTER A (ALetter) × [4.0] WORD JOINER (Format_FE) × [4.0] COMBINING DIAERESIS (Extend_FE) ÷ [999.0] FULL STOP (MidNumLet) ÷ [0.3] ÷ 0061 × 2060 × 0030 ÷ # ÷ [0.2] LATIN SMALL LETTER A (ALetter) × [4.0] WORD JOINER (Format_FE) × [9.0] DIGIT ZERO (Numeric) ÷ [0.3] ÷ 0061 × 2060 × 0308 × 0030 ÷ # ÷ [0.2] LATIN SMALL LETTER A (ALetter) × [4.0] WORD JOINER (Format_FE) × [4.0] COMBINING DIAERESIS (Extend_FE) × [9.0] DIGIT ZERO (Numeric) ÷ [0.3] ÷ 0061 × 2060 × 005F ÷ # ÷ [0.2] LATIN SMALL LETTER A (ALetter) × [4.0] WORD JOINER (Format_FE) × [13.1] LOW LINE (ExtendNumLet) ÷ [0.3] ÷ 0061 × 2060 × 0308 × 005F ÷ # ÷ [0.2] LATIN SMALL LETTER A (ALetter) × [4.0] WORD JOINER (Format_FE) × [4.0] COMBINING DIAERESIS (Extend_FE) × [13.1] LOW LINE (ExtendNumLet) ÷ [0.3] ÷ 0061 × 2060 ÷ 1F1E6 ÷ # ÷ [0.2] LATIN SMALL LETTER A (ALetter) × [4.0] WORD JOINER (Format_FE) ÷ [999.0] REGIONAL INDICATOR SYMBOL LETTER A (Regional_Indicator) ÷ [0.3] ÷ 0061 × 2060 × 0308 ÷ 1F1E6 ÷ # ÷ [0.2] LATIN SMALL LETTER A (ALetter) × [4.0] WORD JOINER (Format_FE) × [4.0] COMBINING DIAERESIS (Extend_FE) ÷ [999.0] REGIONAL INDICATOR SYMBOL LETTER A (Regional_Indicator) ÷ [0.3] +÷ 0061 × 2060 × 05D0 ÷ # ÷ [0.2] LATIN SMALL LETTER A (ALetter) × [4.0] WORD JOINER (Format_FE) × [5.0] HEBREW LETTER ALEF (Hebrew_Letter) ÷ [0.3] +÷ 0061 × 2060 × 0308 × 05D0 ÷ # ÷ [0.2] LATIN SMALL LETTER A (ALetter) × [4.0] WORD JOINER (Format_FE) × [4.0] COMBINING DIAERESIS (Extend_FE) × [5.0] HEBREW LETTER ALEF (Hebrew_Letter) ÷ [0.3] +÷ 0061 × 2060 ÷ 0022 ÷ # ÷ [0.2] LATIN SMALL LETTER A (ALetter) × [4.0] WORD JOINER (Format_FE) ÷ [999.0] QUOTATION MARK (Double_Quote) ÷ [0.3] +÷ 0061 × 2060 × 0308 ÷ 0022 ÷ # ÷ [0.2] LATIN SMALL LETTER A (ALetter) × [4.0] WORD JOINER (Format_FE) × [4.0] COMBINING DIAERESIS (Extend_FE) ÷ [999.0] QUOTATION MARK (Double_Quote) ÷ [0.3] +÷ 0061 × 2060 ÷ 0027 ÷ # ÷ [0.2] LATIN SMALL LETTER A (ALetter) × [4.0] WORD JOINER (Format_FE) ÷ [999.0] APOSTROPHE (Single_Quote) ÷ [0.3] +÷ 0061 × 2060 × 0308 ÷ 0027 ÷ # ÷ [0.2] LATIN SMALL LETTER A (ALetter) × [4.0] WORD JOINER (Format_FE) × [4.0] COMBINING DIAERESIS (Extend_FE) ÷ [999.0] APOSTROPHE (Single_Quote) ÷ [0.3] ÷ 0061 × 2060 × 00AD ÷ # ÷ [0.2] LATIN SMALL LETTER A (ALetter) × [4.0] WORD JOINER (Format_FE) × [4.0] SOFT HYPHEN (Format_FE) ÷ [0.3] ÷ 0061 × 2060 × 0308 × 00AD ÷ # ÷ [0.2] LATIN SMALL LETTER A (ALetter) × [4.0] WORD JOINER (Format_FE) × [4.0] COMBINING DIAERESIS (Extend_FE) × [4.0] SOFT HYPHEN (Format_FE) ÷ [0.3] ÷ 0061 × 2060 × 0300 ÷ # ÷ [0.2] LATIN SMALL LETTER A (ALetter) × [4.0] WORD JOINER (Format_FE) × [4.0] COMBINING GRAVE ACCENT (Extend_FE) ÷ [0.3] @@ -696,16 +942,16 @@ ÷ 0061 × 2060 × 0308 × 0061 × 2060 ÷ # ÷ [0.2] LATIN SMALL LETTER A (ALetter) × [4.0] WORD JOINER (Format_FE) × [4.0] COMBINING DIAERESIS (Extend_FE) × [5.0] LATIN SMALL LETTER A (ALetter) × [4.0] WORD JOINER (Format_FE) ÷ [0.3] ÷ 0061 × 2060 × 0061 ÷ 003A ÷ # ÷ [0.2] LATIN SMALL LETTER A (ALetter) × [4.0] WORD JOINER (Format_FE) × [5.0] LATIN SMALL LETTER A (ALetter) ÷ [999.0] COLON (MidLetter) ÷ [0.3] ÷ 0061 × 2060 × 0308 × 0061 ÷ 003A ÷ # ÷ [0.2] LATIN SMALL LETTER A (ALetter) × [4.0] WORD JOINER (Format_FE) × [4.0] COMBINING DIAERESIS (Extend_FE) × [5.0] LATIN SMALL LETTER A (ALetter) ÷ [999.0] COLON (MidLetter) ÷ [0.3] -÷ 0061 × 2060 × 0061 ÷ 0027 ÷ # ÷ [0.2] LATIN SMALL LETTER A (ALetter) × [4.0] WORD JOINER (Format_FE) × [5.0] LATIN SMALL LETTER A (ALetter) ÷ [999.0] APOSTROPHE (MidNumLet) ÷ [0.3] -÷ 0061 × 2060 × 0308 × 0061 ÷ 0027 ÷ # ÷ [0.2] LATIN SMALL LETTER A (ALetter) × [4.0] WORD JOINER (Format_FE) × [4.0] COMBINING DIAERESIS (Extend_FE) × [5.0] LATIN SMALL LETTER A (ALetter) ÷ [999.0] APOSTROPHE (MidNumLet) ÷ [0.3] -÷ 0061 × 2060 × 0061 ÷ 0027 × 2060 ÷ # ÷ [0.2] LATIN SMALL LETTER A (ALetter) × [4.0] WORD JOINER (Format_FE) × [5.0] LATIN SMALL LETTER A (ALetter) ÷ [999.0] APOSTROPHE (MidNumLet) × [4.0] WORD JOINER (Format_FE) ÷ [0.3] -÷ 0061 × 2060 × 0308 × 0061 ÷ 0027 × 2060 ÷ # ÷ [0.2] LATIN SMALL LETTER A (ALetter) × [4.0] WORD JOINER (Format_FE) × [4.0] COMBINING DIAERESIS (Extend_FE) × [5.0] LATIN SMALL LETTER A (ALetter) ÷ [999.0] APOSTROPHE (MidNumLet) × [4.0] WORD JOINER (Format_FE) ÷ [0.3] +÷ 0061 × 2060 × 0061 ÷ 0027 ÷ # ÷ [0.2] LATIN SMALL LETTER A (ALetter) × [4.0] WORD JOINER (Format_FE) × [5.0] LATIN SMALL LETTER A (ALetter) ÷ [999.0] APOSTROPHE (Single_Quote) ÷ [0.3] +÷ 0061 × 2060 × 0308 × 0061 ÷ 0027 ÷ # ÷ [0.2] LATIN SMALL LETTER A (ALetter) × [4.0] WORD JOINER (Format_FE) × [4.0] COMBINING DIAERESIS (Extend_FE) × [5.0] LATIN SMALL LETTER A (ALetter) ÷ [999.0] APOSTROPHE (Single_Quote) ÷ [0.3] +÷ 0061 × 2060 × 0061 ÷ 0027 × 2060 ÷ # ÷ [0.2] LATIN SMALL LETTER A (ALetter) × [4.0] WORD JOINER (Format_FE) × [5.0] LATIN SMALL LETTER A (ALetter) ÷ [999.0] APOSTROPHE (Single_Quote) × [4.0] WORD JOINER (Format_FE) ÷ [0.3] +÷ 0061 × 2060 × 0308 × 0061 ÷ 0027 × 2060 ÷ # ÷ [0.2] LATIN SMALL LETTER A (ALetter) × [4.0] WORD JOINER (Format_FE) × [4.0] COMBINING DIAERESIS (Extend_FE) × [5.0] LATIN SMALL LETTER A (ALetter) ÷ [999.0] APOSTROPHE (Single_Quote) × [4.0] WORD JOINER (Format_FE) ÷ [0.3] ÷ 0061 × 2060 × 0061 ÷ 002C ÷ # ÷ [0.2] LATIN SMALL LETTER A (ALetter) × [4.0] WORD JOINER (Format_FE) × [5.0] LATIN SMALL LETTER A (ALetter) ÷ [999.0] COMMA (MidNum) ÷ [0.3] ÷ 0061 × 2060 × 0308 × 0061 ÷ 002C ÷ # ÷ [0.2] LATIN SMALL LETTER A (ALetter) × [4.0] WORD JOINER (Format_FE) × [4.0] COMBINING DIAERESIS (Extend_FE) × [5.0] LATIN SMALL LETTER A (ALetter) ÷ [999.0] COMMA (MidNum) ÷ [0.3] ÷ 0061 × 2060 × 0031 ÷ 003A ÷ # ÷ [0.2] LATIN SMALL LETTER A (ALetter) × [4.0] WORD JOINER (Format_FE) × [9.0] DIGIT ONE (Numeric) ÷ [999.0] COLON (MidLetter) ÷ [0.3] ÷ 0061 × 2060 × 0308 × 0031 ÷ 003A ÷ # ÷ [0.2] LATIN SMALL LETTER A (ALetter) × [4.0] WORD JOINER (Format_FE) × [4.0] COMBINING DIAERESIS (Extend_FE) × [9.0] DIGIT ONE (Numeric) ÷ [999.0] COLON (MidLetter) ÷ [0.3] -÷ 0061 × 2060 × 0031 ÷ 0027 ÷ # ÷ [0.2] LATIN SMALL LETTER A (ALetter) × [4.0] WORD JOINER (Format_FE) × [9.0] DIGIT ONE (Numeric) ÷ [999.0] APOSTROPHE (MidNumLet) ÷ [0.3] -÷ 0061 × 2060 × 0308 × 0031 ÷ 0027 ÷ # ÷ [0.2] LATIN SMALL LETTER A (ALetter) × [4.0] WORD JOINER (Format_FE) × [4.0] COMBINING DIAERESIS (Extend_FE) × [9.0] DIGIT ONE (Numeric) ÷ [999.0] APOSTROPHE (MidNumLet) ÷ [0.3] +÷ 0061 × 2060 × 0031 ÷ 0027 ÷ # ÷ [0.2] LATIN SMALL LETTER A (ALetter) × [4.0] WORD JOINER (Format_FE) × [9.0] DIGIT ONE (Numeric) ÷ [999.0] APOSTROPHE (Single_Quote) ÷ [0.3] +÷ 0061 × 2060 × 0308 × 0031 ÷ 0027 ÷ # ÷ [0.2] LATIN SMALL LETTER A (ALetter) × [4.0] WORD JOINER (Format_FE) × [4.0] COMBINING DIAERESIS (Extend_FE) × [9.0] DIGIT ONE (Numeric) ÷ [999.0] APOSTROPHE (Single_Quote) ÷ [0.3] ÷ 0061 × 2060 × 0031 ÷ 002C ÷ # ÷ [0.2] LATIN SMALL LETTER A (ALetter) × [4.0] WORD JOINER (Format_FE) × [9.0] DIGIT ONE (Numeric) ÷ [999.0] COMMA (MidNum) ÷ [0.3] ÷ 0061 × 2060 × 0308 × 0031 ÷ 002C ÷ # ÷ [0.2] LATIN SMALL LETTER A (ALetter) × [4.0] WORD JOINER (Format_FE) × [4.0] COMBINING DIAERESIS (Extend_FE) × [9.0] DIGIT ONE (Numeric) ÷ [999.0] COMMA (MidNum) ÷ [0.3] ÷ 0061 × 2060 × 0031 ÷ 002E × 2060 ÷ # ÷ [0.2] LATIN SMALL LETTER A (ALetter) × [4.0] WORD JOINER (Format_FE) × [9.0] DIGIT ONE (Numeric) ÷ [999.0] FULL STOP (MidNumLet) × [4.0] WORD JOINER (Format_FE) ÷ [0.3] @@ -726,14 +972,20 @@ ÷ 0061 ÷ 003A × 0308 ÷ 003A ÷ # ÷ [0.2] LATIN SMALL LETTER A (ALetter) ÷ [999.0] COLON (MidLetter) × [4.0] COMBINING DIAERESIS (Extend_FE) ÷ [999.0] COLON (MidLetter) ÷ [0.3] ÷ 0061 ÷ 003A ÷ 002C ÷ # ÷ [0.2] LATIN SMALL LETTER A (ALetter) ÷ [999.0] COLON (MidLetter) ÷ [999.0] COMMA (MidNum) ÷ [0.3] ÷ 0061 ÷ 003A × 0308 ÷ 002C ÷ # ÷ [0.2] LATIN SMALL LETTER A (ALetter) ÷ [999.0] COLON (MidLetter) × [4.0] COMBINING DIAERESIS (Extend_FE) ÷ [999.0] COMMA (MidNum) ÷ [0.3] -÷ 0061 ÷ 003A ÷ 0027 ÷ # ÷ [0.2] LATIN SMALL LETTER A (ALetter) ÷ [999.0] COLON (MidLetter) ÷ [999.0] APOSTROPHE (MidNumLet) ÷ [0.3] -÷ 0061 ÷ 003A × 0308 ÷ 0027 ÷ # ÷ [0.2] LATIN SMALL LETTER A (ALetter) ÷ [999.0] COLON (MidLetter) × [4.0] COMBINING DIAERESIS (Extend_FE) ÷ [999.0] APOSTROPHE (MidNumLet) ÷ [0.3] +÷ 0061 ÷ 003A ÷ 002E ÷ # ÷ [0.2] LATIN SMALL LETTER A (ALetter) ÷ [999.0] COLON (MidLetter) ÷ [999.0] FULL STOP (MidNumLet) ÷ [0.3] +÷ 0061 ÷ 003A × 0308 ÷ 002E ÷ # ÷ [0.2] LATIN SMALL LETTER A (ALetter) ÷ [999.0] COLON (MidLetter) × [4.0] COMBINING DIAERESIS (Extend_FE) ÷ [999.0] FULL STOP (MidNumLet) ÷ [0.3] ÷ 0061 ÷ 003A ÷ 0030 ÷ # ÷ [0.2] LATIN SMALL LETTER A (ALetter) ÷ [999.0] COLON (MidLetter) ÷ [999.0] DIGIT ZERO (Numeric) ÷ [0.3] ÷ 0061 ÷ 003A × 0308 ÷ 0030 ÷ # ÷ [0.2] LATIN SMALL LETTER A (ALetter) ÷ [999.0] COLON (MidLetter) × [4.0] COMBINING DIAERESIS (Extend_FE) ÷ [999.0] DIGIT ZERO (Numeric) ÷ [0.3] ÷ 0061 ÷ 003A ÷ 005F ÷ # ÷ [0.2] LATIN SMALL LETTER A (ALetter) ÷ [999.0] COLON (MidLetter) ÷ [999.0] LOW LINE (ExtendNumLet) ÷ [0.3] ÷ 0061 ÷ 003A × 0308 ÷ 005F ÷ # ÷ [0.2] LATIN SMALL LETTER A (ALetter) ÷ [999.0] COLON (MidLetter) × [4.0] COMBINING DIAERESIS (Extend_FE) ÷ [999.0] LOW LINE (ExtendNumLet) ÷ [0.3] ÷ 0061 ÷ 003A ÷ 1F1E6 ÷ # ÷ [0.2] LATIN SMALL LETTER A (ALetter) ÷ [999.0] COLON (MidLetter) ÷ [999.0] REGIONAL INDICATOR SYMBOL LETTER A (Regional_Indicator) ÷ [0.3] ÷ 0061 ÷ 003A × 0308 ÷ 1F1E6 ÷ # ÷ [0.2] LATIN SMALL LETTER A (ALetter) ÷ [999.0] COLON (MidLetter) × [4.0] COMBINING DIAERESIS (Extend_FE) ÷ [999.0] REGIONAL INDICATOR SYMBOL LETTER A (Regional_Indicator) ÷ [0.3] +÷ 0061 × 003A × 05D0 ÷ # ÷ [0.2] LATIN SMALL LETTER A (ALetter) × [6.0] COLON (MidLetter) × [7.0] HEBREW LETTER ALEF (Hebrew_Letter) ÷ [0.3] +÷ 0061 × 003A × 0308 × 05D0 ÷ # ÷ [0.2] LATIN SMALL LETTER A (ALetter) × [6.0] COLON (MidLetter) × [4.0] COMBINING DIAERESIS (Extend_FE) × [7.0] HEBREW LETTER ALEF (Hebrew_Letter) ÷ [0.3] +÷ 0061 ÷ 003A ÷ 0022 ÷ # ÷ [0.2] LATIN SMALL LETTER A (ALetter) ÷ [999.0] COLON (MidLetter) ÷ [999.0] QUOTATION MARK (Double_Quote) ÷ [0.3] +÷ 0061 ÷ 003A × 0308 ÷ 0022 ÷ # ÷ [0.2] LATIN SMALL LETTER A (ALetter) ÷ [999.0] COLON (MidLetter) × [4.0] COMBINING DIAERESIS (Extend_FE) ÷ [999.0] QUOTATION MARK (Double_Quote) ÷ [0.3] +÷ 0061 ÷ 003A ÷ 0027 ÷ # ÷ [0.2] LATIN SMALL LETTER A (ALetter) ÷ [999.0] COLON (MidLetter) ÷ [999.0] APOSTROPHE (Single_Quote) ÷ [0.3] +÷ 0061 ÷ 003A × 0308 ÷ 0027 ÷ # ÷ [0.2] LATIN SMALL LETTER A (ALetter) ÷ [999.0] COLON (MidLetter) × [4.0] COMBINING DIAERESIS (Extend_FE) ÷ [999.0] APOSTROPHE (Single_Quote) ÷ [0.3] ÷ 0061 ÷ 003A × 00AD ÷ # ÷ [0.2] LATIN SMALL LETTER A (ALetter) ÷ [999.0] COLON (MidLetter) × [4.0] SOFT HYPHEN (Format_FE) ÷ [0.3] ÷ 0061 ÷ 003A × 0308 × 00AD ÷ # ÷ [0.2] LATIN SMALL LETTER A (ALetter) ÷ [999.0] COLON (MidLetter) × [4.0] COMBINING DIAERESIS (Extend_FE) × [4.0] SOFT HYPHEN (Format_FE) ÷ [0.3] ÷ 0061 ÷ 003A × 0300 ÷ # ÷ [0.2] LATIN SMALL LETTER A (ALetter) ÷ [999.0] COLON (MidLetter) × [4.0] COMBINING GRAVE ACCENT (Extend_FE) ÷ [0.3] @@ -742,112 +994,124 @@ ÷ 0061 × 003A × 0308 × 0061 × 2060 ÷ # ÷ [0.2] LATIN SMALL LETTER A (ALetter) × [6.0] COLON (MidLetter) × [4.0] COMBINING DIAERESIS (Extend_FE) × [7.0] LATIN SMALL LETTER A (ALetter) × [4.0] WORD JOINER (Format_FE) ÷ [0.3] ÷ 0061 × 003A × 0061 ÷ 003A ÷ # ÷ [0.2] LATIN SMALL LETTER A (ALetter) × [6.0] COLON (MidLetter) × [7.0] LATIN SMALL LETTER A (ALetter) ÷ [999.0] COLON (MidLetter) ÷ [0.3] ÷ 0061 × 003A × 0308 × 0061 ÷ 003A ÷ # ÷ [0.2] LATIN SMALL LETTER A (ALetter) × [6.0] COLON (MidLetter) × [4.0] COMBINING DIAERESIS (Extend_FE) × [7.0] LATIN SMALL LETTER A (ALetter) ÷ [999.0] COLON (MidLetter) ÷ [0.3] -÷ 0061 × 003A × 0061 ÷ 0027 ÷ # ÷ [0.2] LATIN SMALL LETTER A (ALetter) × [6.0] COLON (MidLetter) × [7.0] LATIN SMALL LETTER A (ALetter) ÷ [999.0] APOSTROPHE (MidNumLet) ÷ [0.3] -÷ 0061 × 003A × 0308 × 0061 ÷ 0027 ÷ # ÷ [0.2] LATIN SMALL LETTER A (ALetter) × [6.0] COLON (MidLetter) × [4.0] COMBINING DIAERESIS (Extend_FE) × [7.0] LATIN SMALL LETTER A (ALetter) ÷ [999.0] APOSTROPHE (MidNumLet) ÷ [0.3] -÷ 0061 × 003A × 0061 ÷ 0027 × 2060 ÷ # ÷ [0.2] LATIN SMALL LETTER A (ALetter) × [6.0] COLON (MidLetter) × [7.0] LATIN SMALL LETTER A (ALetter) ÷ [999.0] APOSTROPHE (MidNumLet) × [4.0] WORD JOINER (Format_FE) ÷ [0.3] -÷ 0061 × 003A × 0308 × 0061 ÷ 0027 × 2060 ÷ # ÷ [0.2] LATIN SMALL LETTER A (ALetter) × [6.0] COLON (MidLetter) × [4.0] COMBINING DIAERESIS (Extend_FE) × [7.0] LATIN SMALL LETTER A (ALetter) ÷ [999.0] APOSTROPHE (MidNumLet) × [4.0] WORD JOINER (Format_FE) ÷ [0.3] +÷ 0061 × 003A × 0061 ÷ 0027 ÷ # ÷ [0.2] LATIN SMALL LETTER A (ALetter) × [6.0] COLON (MidLetter) × [7.0] LATIN SMALL LETTER A (ALetter) ÷ [999.0] APOSTROPHE (Single_Quote) ÷ [0.3] +÷ 0061 × 003A × 0308 × 0061 ÷ 0027 ÷ # ÷ [0.2] LATIN SMALL LETTER A (ALetter) × [6.0] COLON (MidLetter) × [4.0] COMBINING DIAERESIS (Extend_FE) × [7.0] LATIN SMALL LETTER A (ALetter) ÷ [999.0] APOSTROPHE (Single_Quote) ÷ [0.3] +÷ 0061 × 003A × 0061 ÷ 0027 × 2060 ÷ # ÷ [0.2] LATIN SMALL LETTER A (ALetter) × [6.0] COLON (MidLetter) × [7.0] LATIN SMALL LETTER A (ALetter) ÷ [999.0] APOSTROPHE (Single_Quote) × [4.0] WORD JOINER (Format_FE) ÷ [0.3] +÷ 0061 × 003A × 0308 × 0061 ÷ 0027 × 2060 ÷ # ÷ [0.2] LATIN SMALL LETTER A (ALetter) × [6.0] COLON (MidLetter) × [4.0] COMBINING DIAERESIS (Extend_FE) × [7.0] LATIN SMALL LETTER A (ALetter) ÷ [999.0] APOSTROPHE (Single_Quote) × [4.0] WORD JOINER (Format_FE) ÷ [0.3] ÷ 0061 × 003A × 0061 ÷ 002C ÷ # ÷ [0.2] LATIN SMALL LETTER A (ALetter) × [6.0] COLON (MidLetter) × [7.0] LATIN SMALL LETTER A (ALetter) ÷ [999.0] COMMA (MidNum) ÷ [0.3] ÷ 0061 × 003A × 0308 × 0061 ÷ 002C ÷ # ÷ [0.2] LATIN SMALL LETTER A (ALetter) × [6.0] COLON (MidLetter) × [4.0] COMBINING DIAERESIS (Extend_FE) × [7.0] LATIN SMALL LETTER A (ALetter) ÷ [999.0] COMMA (MidNum) ÷ [0.3] ÷ 0061 ÷ 003A ÷ 0031 ÷ 003A ÷ # ÷ [0.2] LATIN SMALL LETTER A (ALetter) ÷ [999.0] COLON (MidLetter) ÷ [999.0] DIGIT ONE (Numeric) ÷ [999.0] COLON (MidLetter) ÷ [0.3] ÷ 0061 ÷ 003A × 0308 ÷ 0031 ÷ 003A ÷ # ÷ [0.2] LATIN SMALL LETTER A (ALetter) ÷ [999.0] COLON (MidLetter) × [4.0] COMBINING DIAERESIS (Extend_FE) ÷ [999.0] DIGIT ONE (Numeric) ÷ [999.0] COLON (MidLetter) ÷ [0.3] -÷ 0061 ÷ 003A ÷ 0031 ÷ 0027 ÷ # ÷ [0.2] LATIN SMALL LETTER A (ALetter) ÷ [999.0] COLON (MidLetter) ÷ [999.0] DIGIT ONE (Numeric) ÷ [999.0] APOSTROPHE (MidNumLet) ÷ [0.3] -÷ 0061 ÷ 003A × 0308 ÷ 0031 ÷ 0027 ÷ # ÷ [0.2] LATIN SMALL LETTER A (ALetter) ÷ [999.0] COLON (MidLetter) × [4.0] COMBINING DIAERESIS (Extend_FE) ÷ [999.0] DIGIT ONE (Numeric) ÷ [999.0] APOSTROPHE (MidNumLet) ÷ [0.3] +÷ 0061 ÷ 003A ÷ 0031 ÷ 0027 ÷ # ÷ [0.2] LATIN SMALL LETTER A (ALetter) ÷ [999.0] COLON (MidLetter) ÷ [999.0] DIGIT ONE (Numeric) ÷ [999.0] APOSTROPHE (Single_Quote) ÷ [0.3] +÷ 0061 ÷ 003A × 0308 ÷ 0031 ÷ 0027 ÷ # ÷ [0.2] LATIN SMALL LETTER A (ALetter) ÷ [999.0] COLON (MidLetter) × [4.0] COMBINING DIAERESIS (Extend_FE) ÷ [999.0] DIGIT ONE (Numeric) ÷ [999.0] APOSTROPHE (Single_Quote) ÷ [0.3] ÷ 0061 ÷ 003A ÷ 0031 ÷ 002C ÷ # ÷ [0.2] LATIN SMALL LETTER A (ALetter) ÷ [999.0] COLON (MidLetter) ÷ [999.0] DIGIT ONE (Numeric) ÷ [999.0] COMMA (MidNum) ÷ [0.3] ÷ 0061 ÷ 003A × 0308 ÷ 0031 ÷ 002C ÷ # ÷ [0.2] LATIN SMALL LETTER A (ALetter) ÷ [999.0] COLON (MidLetter) × [4.0] COMBINING DIAERESIS (Extend_FE) ÷ [999.0] DIGIT ONE (Numeric) ÷ [999.0] COMMA (MidNum) ÷ [0.3] ÷ 0061 ÷ 003A ÷ 0031 ÷ 002E × 2060 ÷ # ÷ [0.2] LATIN SMALL LETTER A (ALetter) ÷ [999.0] COLON (MidLetter) ÷ [999.0] DIGIT ONE (Numeric) ÷ [999.0] FULL STOP (MidNumLet) × [4.0] WORD JOINER (Format_FE) ÷ [0.3] ÷ 0061 ÷ 003A × 0308 ÷ 0031 ÷ 002E × 2060 ÷ # ÷ [0.2] LATIN SMALL LETTER A (ALetter) ÷ [999.0] COLON (MidLetter) × [4.0] COMBINING DIAERESIS (Extend_FE) ÷ [999.0] DIGIT ONE (Numeric) ÷ [999.0] FULL STOP (MidNumLet) × [4.0] WORD JOINER (Format_FE) ÷ [0.3] -÷ 0061 ÷ 0027 ÷ 0001 ÷ # ÷ [0.2] LATIN SMALL LETTER A (ALetter) ÷ [999.0] APOSTROPHE (MidNumLet) ÷ [999.0] (Other) ÷ [0.3] -÷ 0061 ÷ 0027 × 0308 ÷ 0001 ÷ # ÷ [0.2] LATIN SMALL LETTER A (ALetter) ÷ [999.0] APOSTROPHE (MidNumLet) × [4.0] COMBINING DIAERESIS (Extend_FE) ÷ [999.0] (Other) ÷ [0.3] -÷ 0061 ÷ 0027 ÷ 000D ÷ # ÷ [0.2] LATIN SMALL LETTER A (ALetter) ÷ [999.0] APOSTROPHE (MidNumLet) ÷ [3.2] (CR) ÷ [0.3] -÷ 0061 ÷ 0027 × 0308 ÷ 000D ÷ # ÷ [0.2] LATIN SMALL LETTER A (ALetter) ÷ [999.0] APOSTROPHE (MidNumLet) × [4.0] COMBINING DIAERESIS (Extend_FE) ÷ [3.2] (CR) ÷ [0.3] -÷ 0061 ÷ 0027 ÷ 000A ÷ # ÷ [0.2] LATIN SMALL LETTER A (ALetter) ÷ [999.0] APOSTROPHE (MidNumLet) ÷ [3.2] (LF) ÷ [0.3] -÷ 0061 ÷ 0027 × 0308 ÷ 000A ÷ # ÷ [0.2] LATIN SMALL LETTER A (ALetter) ÷ [999.0] APOSTROPHE (MidNumLet) × [4.0] COMBINING DIAERESIS (Extend_FE) ÷ [3.2] (LF) ÷ [0.3] -÷ 0061 ÷ 0027 ÷ 000B ÷ # ÷ [0.2] LATIN SMALL LETTER A (ALetter) ÷ [999.0] APOSTROPHE (MidNumLet) ÷ [3.2] (Newline) ÷ [0.3] -÷ 0061 ÷ 0027 × 0308 ÷ 000B ÷ # ÷ [0.2] LATIN SMALL LETTER A (ALetter) ÷ [999.0] APOSTROPHE (MidNumLet) × [4.0] COMBINING DIAERESIS (Extend_FE) ÷ [3.2] (Newline) ÷ [0.3] -÷ 0061 ÷ 0027 ÷ 3031 ÷ # ÷ [0.2] LATIN SMALL LETTER A (ALetter) ÷ [999.0] APOSTROPHE (MidNumLet) ÷ [999.0] VERTICAL KANA REPEAT MARK (Katakana) ÷ [0.3] -÷ 0061 ÷ 0027 × 0308 ÷ 3031 ÷ # ÷ [0.2] LATIN SMALL LETTER A (ALetter) ÷ [999.0] APOSTROPHE (MidNumLet) × [4.0] COMBINING DIAERESIS (Extend_FE) ÷ [999.0] VERTICAL KANA REPEAT MARK (Katakana) ÷ [0.3] -÷ 0061 × 0027 × 0041 ÷ # ÷ [0.2] LATIN SMALL LETTER A (ALetter) × [6.0] APOSTROPHE (MidNumLet) × [7.0] LATIN CAPITAL LETTER A (ALetter) ÷ [0.3] -÷ 0061 × 0027 × 0308 × 0041 ÷ # ÷ [0.2] LATIN SMALL LETTER A (ALetter) × [6.0] APOSTROPHE (MidNumLet) × [4.0] COMBINING DIAERESIS (Extend_FE) × [7.0] LATIN CAPITAL LETTER A (ALetter) ÷ [0.3] -÷ 0061 ÷ 0027 ÷ 003A ÷ # ÷ [0.2] LATIN SMALL LETTER A (ALetter) ÷ [999.0] APOSTROPHE (MidNumLet) ÷ [999.0] COLON (MidLetter) ÷ [0.3] -÷ 0061 ÷ 0027 × 0308 ÷ 003A ÷ # ÷ [0.2] LATIN SMALL LETTER A (ALetter) ÷ [999.0] APOSTROPHE (MidNumLet) × [4.0] COMBINING DIAERESIS (Extend_FE) ÷ [999.0] COLON (MidLetter) ÷ [0.3] -÷ 0061 ÷ 0027 ÷ 002C ÷ # ÷ [0.2] LATIN SMALL LETTER A (ALetter) ÷ [999.0] APOSTROPHE (MidNumLet) ÷ [999.0] COMMA (MidNum) ÷ [0.3] -÷ 0061 ÷ 0027 × 0308 ÷ 002C ÷ # ÷ [0.2] LATIN SMALL LETTER A (ALetter) ÷ [999.0] APOSTROPHE (MidNumLet) × [4.0] COMBINING DIAERESIS (Extend_FE) ÷ [999.0] COMMA (MidNum) ÷ [0.3] -÷ 0061 ÷ 0027 ÷ 0027 ÷ # ÷ [0.2] LATIN SMALL LETTER A (ALetter) ÷ [999.0] APOSTROPHE (MidNumLet) ÷ [999.0] APOSTROPHE (MidNumLet) ÷ [0.3] -÷ 0061 ÷ 0027 × 0308 ÷ 0027 ÷ # ÷ [0.2] LATIN SMALL LETTER A (ALetter) ÷ [999.0] APOSTROPHE (MidNumLet) × [4.0] COMBINING DIAERESIS (Extend_FE) ÷ [999.0] APOSTROPHE (MidNumLet) ÷ [0.3] -÷ 0061 ÷ 0027 ÷ 0030 ÷ # ÷ [0.2] LATIN SMALL LETTER A (ALetter) ÷ [999.0] APOSTROPHE (MidNumLet) ÷ [999.0] DIGIT ZERO (Numeric) ÷ [0.3] -÷ 0061 ÷ 0027 × 0308 ÷ 0030 ÷ # ÷ [0.2] LATIN SMALL LETTER A (ALetter) ÷ [999.0] APOSTROPHE (MidNumLet) × [4.0] COMBINING DIAERESIS (Extend_FE) ÷ [999.0] DIGIT ZERO (Numeric) ÷ [0.3] -÷ 0061 ÷ 0027 ÷ 005F ÷ # ÷ [0.2] LATIN SMALL LETTER A (ALetter) ÷ [999.0] APOSTROPHE (MidNumLet) ÷ [999.0] LOW LINE (ExtendNumLet) ÷ [0.3] -÷ 0061 ÷ 0027 × 0308 ÷ 005F ÷ # ÷ [0.2] LATIN SMALL LETTER A (ALetter) ÷ [999.0] APOSTROPHE (MidNumLet) × [4.0] COMBINING DIAERESIS (Extend_FE) ÷ [999.0] LOW LINE (ExtendNumLet) ÷ [0.3] -÷ 0061 ÷ 0027 ÷ 1F1E6 ÷ # ÷ [0.2] LATIN SMALL LETTER A (ALetter) ÷ [999.0] APOSTROPHE (MidNumLet) ÷ [999.0] REGIONAL INDICATOR SYMBOL LETTER A (Regional_Indicator) ÷ [0.3] -÷ 0061 ÷ 0027 × 0308 ÷ 1F1E6 ÷ # ÷ [0.2] LATIN SMALL LETTER A (ALetter) ÷ [999.0] APOSTROPHE (MidNumLet) × [4.0] COMBINING DIAERESIS (Extend_FE) ÷ [999.0] REGIONAL INDICATOR SYMBOL LETTER A (Regional_Indicator) ÷ [0.3] -÷ 0061 ÷ 0027 × 00AD ÷ # ÷ [0.2] LATIN SMALL LETTER A (ALetter) ÷ [999.0] APOSTROPHE (MidNumLet) × [4.0] SOFT HYPHEN (Format_FE) ÷ [0.3] -÷ 0061 ÷ 0027 × 0308 × 00AD ÷ # ÷ [0.2] LATIN SMALL LETTER A (ALetter) ÷ [999.0] APOSTROPHE (MidNumLet) × [4.0] COMBINING DIAERESIS (Extend_FE) × [4.0] SOFT HYPHEN (Format_FE) ÷ [0.3] -÷ 0061 ÷ 0027 × 0300 ÷ # ÷ [0.2] LATIN SMALL LETTER A (ALetter) ÷ [999.0] APOSTROPHE (MidNumLet) × [4.0] COMBINING GRAVE ACCENT (Extend_FE) ÷ [0.3] -÷ 0061 ÷ 0027 × 0308 × 0300 ÷ # ÷ [0.2] LATIN SMALL LETTER A (ALetter) ÷ [999.0] APOSTROPHE (MidNumLet) × [4.0] COMBINING DIAERESIS (Extend_FE) × [4.0] COMBINING GRAVE ACCENT (Extend_FE) ÷ [0.3] -÷ 0061 × 0027 × 0061 × 2060 ÷ # ÷ [0.2] LATIN SMALL LETTER A (ALetter) × [6.0] APOSTROPHE (MidNumLet) × [7.0] LATIN SMALL LETTER A (ALetter) × [4.0] WORD JOINER (Format_FE) ÷ [0.3] -÷ 0061 × 0027 × 0308 × 0061 × 2060 ÷ # ÷ [0.2] LATIN SMALL LETTER A (ALetter) × [6.0] APOSTROPHE (MidNumLet) × [4.0] COMBINING DIAERESIS (Extend_FE) × [7.0] LATIN SMALL LETTER A (ALetter) × [4.0] WORD JOINER (Format_FE) ÷ [0.3] -÷ 0061 × 0027 × 0061 ÷ 003A ÷ # ÷ [0.2] LATIN SMALL LETTER A (ALetter) × [6.0] APOSTROPHE (MidNumLet) × [7.0] LATIN SMALL LETTER A (ALetter) ÷ [999.0] COLON (MidLetter) ÷ [0.3] -÷ 0061 × 0027 × 0308 × 0061 ÷ 003A ÷ # ÷ [0.2] LATIN SMALL LETTER A (ALetter) × [6.0] APOSTROPHE (MidNumLet) × [4.0] COMBINING DIAERESIS (Extend_FE) × [7.0] LATIN SMALL LETTER A (ALetter) ÷ [999.0] COLON (MidLetter) ÷ [0.3] -÷ 0061 × 0027 × 0061 ÷ 0027 ÷ # ÷ [0.2] LATIN SMALL LETTER A (ALetter) × [6.0] APOSTROPHE (MidNumLet) × [7.0] LATIN SMALL LETTER A (ALetter) ÷ [999.0] APOSTROPHE (MidNumLet) ÷ [0.3] -÷ 0061 × 0027 × 0308 × 0061 ÷ 0027 ÷ # ÷ [0.2] LATIN SMALL LETTER A (ALetter) × [6.0] APOSTROPHE (MidNumLet) × [4.0] COMBINING DIAERESIS (Extend_FE) × [7.0] LATIN SMALL LETTER A (ALetter) ÷ [999.0] APOSTROPHE (MidNumLet) ÷ [0.3] -÷ 0061 × 0027 × 0061 ÷ 0027 × 2060 ÷ # ÷ [0.2] LATIN SMALL LETTER A (ALetter) × [6.0] APOSTROPHE (MidNumLet) × [7.0] LATIN SMALL LETTER A (ALetter) ÷ [999.0] APOSTROPHE (MidNumLet) × [4.0] WORD JOINER (Format_FE) ÷ [0.3] -÷ 0061 × 0027 × 0308 × 0061 ÷ 0027 × 2060 ÷ # ÷ [0.2] LATIN SMALL LETTER A (ALetter) × [6.0] APOSTROPHE (MidNumLet) × [4.0] COMBINING DIAERESIS (Extend_FE) × [7.0] LATIN SMALL LETTER A (ALetter) ÷ [999.0] APOSTROPHE (MidNumLet) × [4.0] WORD JOINER (Format_FE) ÷ [0.3] -÷ 0061 × 0027 × 0061 ÷ 002C ÷ # ÷ [0.2] LATIN SMALL LETTER A (ALetter) × [6.0] APOSTROPHE (MidNumLet) × [7.0] LATIN SMALL LETTER A (ALetter) ÷ [999.0] COMMA (MidNum) ÷ [0.3] -÷ 0061 × 0027 × 0308 × 0061 ÷ 002C ÷ # ÷ [0.2] LATIN SMALL LETTER A (ALetter) × [6.0] APOSTROPHE (MidNumLet) × [4.0] COMBINING DIAERESIS (Extend_FE) × [7.0] LATIN SMALL LETTER A (ALetter) ÷ [999.0] COMMA (MidNum) ÷ [0.3] -÷ 0061 ÷ 0027 ÷ 0031 ÷ 003A ÷ # ÷ [0.2] LATIN SMALL LETTER A (ALetter) ÷ [999.0] APOSTROPHE (MidNumLet) ÷ [999.0] DIGIT ONE (Numeric) ÷ [999.0] COLON (MidLetter) ÷ [0.3] -÷ 0061 ÷ 0027 × 0308 ÷ 0031 ÷ 003A ÷ # ÷ [0.2] LATIN SMALL LETTER A (ALetter) ÷ [999.0] APOSTROPHE (MidNumLet) × [4.0] COMBINING DIAERESIS (Extend_FE) ÷ [999.0] DIGIT ONE (Numeric) ÷ [999.0] COLON (MidLetter) ÷ [0.3] -÷ 0061 ÷ 0027 ÷ 0031 ÷ 0027 ÷ # ÷ [0.2] LATIN SMALL LETTER A (ALetter) ÷ [999.0] APOSTROPHE (MidNumLet) ÷ [999.0] DIGIT ONE (Numeric) ÷ [999.0] APOSTROPHE (MidNumLet) ÷ [0.3] -÷ 0061 ÷ 0027 × 0308 ÷ 0031 ÷ 0027 ÷ # ÷ [0.2] LATIN SMALL LETTER A (ALetter) ÷ [999.0] APOSTROPHE (MidNumLet) × [4.0] COMBINING DIAERESIS (Extend_FE) ÷ [999.0] DIGIT ONE (Numeric) ÷ [999.0] APOSTROPHE (MidNumLet) ÷ [0.3] -÷ 0061 ÷ 0027 ÷ 0031 ÷ 002C ÷ # ÷ [0.2] LATIN SMALL LETTER A (ALetter) ÷ [999.0] APOSTROPHE (MidNumLet) ÷ [999.0] DIGIT ONE (Numeric) ÷ [999.0] COMMA (MidNum) ÷ [0.3] -÷ 0061 ÷ 0027 × 0308 ÷ 0031 ÷ 002C ÷ # ÷ [0.2] LATIN SMALL LETTER A (ALetter) ÷ [999.0] APOSTROPHE (MidNumLet) × [4.0] COMBINING DIAERESIS (Extend_FE) ÷ [999.0] DIGIT ONE (Numeric) ÷ [999.0] COMMA (MidNum) ÷ [0.3] -÷ 0061 ÷ 0027 ÷ 0031 ÷ 002E × 2060 ÷ # ÷ [0.2] LATIN SMALL LETTER A (ALetter) ÷ [999.0] APOSTROPHE (MidNumLet) ÷ [999.0] DIGIT ONE (Numeric) ÷ [999.0] FULL STOP (MidNumLet) × [4.0] WORD JOINER (Format_FE) ÷ [0.3] -÷ 0061 ÷ 0027 × 0308 ÷ 0031 ÷ 002E × 2060 ÷ # ÷ [0.2] LATIN SMALL LETTER A (ALetter) ÷ [999.0] APOSTROPHE (MidNumLet) × [4.0] COMBINING DIAERESIS (Extend_FE) ÷ [999.0] DIGIT ONE (Numeric) ÷ [999.0] FULL STOP (MidNumLet) × [4.0] WORD JOINER (Format_FE) ÷ [0.3] -÷ 0061 ÷ 0027 × 2060 ÷ 0001 ÷ # ÷ [0.2] LATIN SMALL LETTER A (ALetter) ÷ [999.0] APOSTROPHE (MidNumLet) × [4.0] WORD JOINER (Format_FE) ÷ [999.0] (Other) ÷ [0.3] -÷ 0061 ÷ 0027 × 2060 × 0308 ÷ 0001 ÷ # ÷ [0.2] LATIN SMALL LETTER A (ALetter) ÷ [999.0] APOSTROPHE (MidNumLet) × [4.0] WORD JOINER (Format_FE) × [4.0] COMBINING DIAERESIS (Extend_FE) ÷ [999.0] (Other) ÷ [0.3] -÷ 0061 ÷ 0027 × 2060 ÷ 000D ÷ # ÷ [0.2] LATIN SMALL LETTER A (ALetter) ÷ [999.0] APOSTROPHE (MidNumLet) × [4.0] WORD JOINER (Format_FE) ÷ [3.2] (CR) ÷ [0.3] -÷ 0061 ÷ 0027 × 2060 × 0308 ÷ 000D ÷ # ÷ [0.2] LATIN SMALL LETTER A (ALetter) ÷ [999.0] APOSTROPHE (MidNumLet) × [4.0] WORD JOINER (Format_FE) × [4.0] COMBINING DIAERESIS (Extend_FE) ÷ [3.2] (CR) ÷ [0.3] -÷ 0061 ÷ 0027 × 2060 ÷ 000A ÷ # ÷ [0.2] LATIN SMALL LETTER A (ALetter) ÷ [999.0] APOSTROPHE (MidNumLet) × [4.0] WORD JOINER (Format_FE) ÷ [3.2] (LF) ÷ [0.3] -÷ 0061 ÷ 0027 × 2060 × 0308 ÷ 000A ÷ # ÷ [0.2] LATIN SMALL LETTER A (ALetter) ÷ [999.0] APOSTROPHE (MidNumLet) × [4.0] WORD JOINER (Format_FE) × [4.0] COMBINING DIAERESIS (Extend_FE) ÷ [3.2] (LF) ÷ [0.3] -÷ 0061 ÷ 0027 × 2060 ÷ 000B ÷ # ÷ [0.2] LATIN SMALL LETTER A (ALetter) ÷ [999.0] APOSTROPHE (MidNumLet) × [4.0] WORD JOINER (Format_FE) ÷ [3.2] (Newline) ÷ [0.3] -÷ 0061 ÷ 0027 × 2060 × 0308 ÷ 000B ÷ # ÷ [0.2] LATIN SMALL LETTER A (ALetter) ÷ [999.0] APOSTROPHE (MidNumLet) × [4.0] WORD JOINER (Format_FE) × [4.0] COMBINING DIAERESIS (Extend_FE) ÷ [3.2] (Newline) ÷ [0.3] -÷ 0061 ÷ 0027 × 2060 ÷ 3031 ÷ # ÷ [0.2] LATIN SMALL LETTER A (ALetter) ÷ [999.0] APOSTROPHE (MidNumLet) × [4.0] WORD JOINER (Format_FE) ÷ [999.0] VERTICAL KANA REPEAT MARK (Katakana) ÷ [0.3] -÷ 0061 ÷ 0027 × 2060 × 0308 ÷ 3031 ÷ # ÷ [0.2] LATIN SMALL LETTER A (ALetter) ÷ [999.0] APOSTROPHE (MidNumLet) × [4.0] WORD JOINER (Format_FE) × [4.0] COMBINING DIAERESIS (Extend_FE) ÷ [999.0] VERTICAL KANA REPEAT MARK (Katakana) ÷ [0.3] -÷ 0061 × 0027 × 2060 × 0041 ÷ # ÷ [0.2] LATIN SMALL LETTER A (ALetter) × [6.0] APOSTROPHE (MidNumLet) × [4.0] WORD JOINER (Format_FE) × [7.0] LATIN CAPITAL LETTER A (ALetter) ÷ [0.3] -÷ 0061 × 0027 × 2060 × 0308 × 0041 ÷ # ÷ [0.2] LATIN SMALL LETTER A (ALetter) × [6.0] APOSTROPHE (MidNumLet) × [4.0] WORD JOINER (Format_FE) × [4.0] COMBINING DIAERESIS (Extend_FE) × [7.0] LATIN CAPITAL LETTER A (ALetter) ÷ [0.3] -÷ 0061 ÷ 0027 × 2060 ÷ 003A ÷ # ÷ [0.2] LATIN SMALL LETTER A (ALetter) ÷ [999.0] APOSTROPHE (MidNumLet) × [4.0] WORD JOINER (Format_FE) ÷ [999.0] COLON (MidLetter) ÷ [0.3] -÷ 0061 ÷ 0027 × 2060 × 0308 ÷ 003A ÷ # ÷ [0.2] LATIN SMALL LETTER A (ALetter) ÷ [999.0] APOSTROPHE (MidNumLet) × [4.0] WORD JOINER (Format_FE) × [4.0] COMBINING DIAERESIS (Extend_FE) ÷ [999.0] COLON (MidLetter) ÷ [0.3] -÷ 0061 ÷ 0027 × 2060 ÷ 002C ÷ # ÷ [0.2] LATIN SMALL LETTER A (ALetter) ÷ [999.0] APOSTROPHE (MidNumLet) × [4.0] WORD JOINER (Format_FE) ÷ [999.0] COMMA (MidNum) ÷ [0.3] -÷ 0061 ÷ 0027 × 2060 × 0308 ÷ 002C ÷ # ÷ [0.2] LATIN SMALL LETTER A (ALetter) ÷ [999.0] APOSTROPHE (MidNumLet) × [4.0] WORD JOINER (Format_FE) × [4.0] COMBINING DIAERESIS (Extend_FE) ÷ [999.0] COMMA (MidNum) ÷ [0.3] -÷ 0061 ÷ 0027 × 2060 ÷ 0027 ÷ # ÷ [0.2] LATIN SMALL LETTER A (ALetter) ÷ [999.0] APOSTROPHE (MidNumLet) × [4.0] WORD JOINER (Format_FE) ÷ [999.0] APOSTROPHE (MidNumLet) ÷ [0.3] -÷ 0061 ÷ 0027 × 2060 × 0308 ÷ 0027 ÷ # ÷ [0.2] LATIN SMALL LETTER A (ALetter) ÷ [999.0] APOSTROPHE (MidNumLet) × [4.0] WORD JOINER (Format_FE) × [4.0] COMBINING DIAERESIS (Extend_FE) ÷ [999.0] APOSTROPHE (MidNumLet) ÷ [0.3] -÷ 0061 ÷ 0027 × 2060 ÷ 0030 ÷ # ÷ [0.2] LATIN SMALL LETTER A (ALetter) ÷ [999.0] APOSTROPHE (MidNumLet) × [4.0] WORD JOINER (Format_FE) ÷ [999.0] DIGIT ZERO (Numeric) ÷ [0.3] -÷ 0061 ÷ 0027 × 2060 × 0308 ÷ 0030 ÷ # ÷ [0.2] LATIN SMALL LETTER A (ALetter) ÷ [999.0] APOSTROPHE (MidNumLet) × [4.0] WORD JOINER (Format_FE) × [4.0] COMBINING DIAERESIS (Extend_FE) ÷ [999.0] DIGIT ZERO (Numeric) ÷ [0.3] -÷ 0061 ÷ 0027 × 2060 ÷ 005F ÷ # ÷ [0.2] LATIN SMALL LETTER A (ALetter) ÷ [999.0] APOSTROPHE (MidNumLet) × [4.0] WORD JOINER (Format_FE) ÷ [999.0] LOW LINE (ExtendNumLet) ÷ [0.3] -÷ 0061 ÷ 0027 × 2060 × 0308 ÷ 005F ÷ # ÷ [0.2] LATIN SMALL LETTER A (ALetter) ÷ [999.0] APOSTROPHE (MidNumLet) × [4.0] WORD JOINER (Format_FE) × [4.0] COMBINING DIAERESIS (Extend_FE) ÷ [999.0] LOW LINE (ExtendNumLet) ÷ [0.3] -÷ 0061 ÷ 0027 × 2060 ÷ 1F1E6 ÷ # ÷ [0.2] LATIN SMALL LETTER A (ALetter) ÷ [999.0] APOSTROPHE (MidNumLet) × [4.0] WORD JOINER (Format_FE) ÷ [999.0] REGIONAL INDICATOR SYMBOL LETTER A (Regional_Indicator) ÷ [0.3] -÷ 0061 ÷ 0027 × 2060 × 0308 ÷ 1F1E6 ÷ # ÷ [0.2] LATIN SMALL LETTER A (ALetter) ÷ [999.0] APOSTROPHE (MidNumLet) × [4.0] WORD JOINER (Format_FE) × [4.0] COMBINING DIAERESIS (Extend_FE) ÷ [999.0] REGIONAL INDICATOR SYMBOL LETTER A (Regional_Indicator) ÷ [0.3] -÷ 0061 ÷ 0027 × 2060 × 00AD ÷ # ÷ [0.2] LATIN SMALL LETTER A (ALetter) ÷ [999.0] APOSTROPHE (MidNumLet) × [4.0] WORD JOINER (Format_FE) × [4.0] SOFT HYPHEN (Format_FE) ÷ [0.3] -÷ 0061 ÷ 0027 × 2060 × 0308 × 00AD ÷ # ÷ [0.2] LATIN SMALL LETTER A (ALetter) ÷ [999.0] APOSTROPHE (MidNumLet) × [4.0] WORD JOINER (Format_FE) × [4.0] COMBINING DIAERESIS (Extend_FE) × [4.0] SOFT HYPHEN (Format_FE) ÷ [0.3] -÷ 0061 ÷ 0027 × 2060 × 0300 ÷ # ÷ [0.2] LATIN SMALL LETTER A (ALetter) ÷ [999.0] APOSTROPHE (MidNumLet) × [4.0] WORD JOINER (Format_FE) × [4.0] COMBINING GRAVE ACCENT (Extend_FE) ÷ [0.3] -÷ 0061 ÷ 0027 × 2060 × 0308 × 0300 ÷ # ÷ [0.2] LATIN SMALL LETTER A (ALetter) ÷ [999.0] APOSTROPHE (MidNumLet) × [4.0] WORD JOINER (Format_FE) × [4.0] COMBINING DIAERESIS (Extend_FE) × [4.0] COMBINING GRAVE ACCENT (Extend_FE) ÷ [0.3] -÷ 0061 × 0027 × 2060 × 0061 × 2060 ÷ # ÷ [0.2] LATIN SMALL LETTER A (ALetter) × [6.0] APOSTROPHE (MidNumLet) × [4.0] WORD JOINER (Format_FE) × [7.0] LATIN SMALL LETTER A (ALetter) × [4.0] WORD JOINER (Format_FE) ÷ [0.3] -÷ 0061 × 0027 × 2060 × 0308 × 0061 × 2060 ÷ # ÷ [0.2] LATIN SMALL LETTER A (ALetter) × [6.0] APOSTROPHE (MidNumLet) × [4.0] WORD JOINER (Format_FE) × [4.0] COMBINING DIAERESIS (Extend_FE) × [7.0] LATIN SMALL LETTER A (ALetter) × [4.0] WORD JOINER (Format_FE) ÷ [0.3] -÷ 0061 × 0027 × 2060 × 0061 ÷ 003A ÷ # ÷ [0.2] LATIN SMALL LETTER A (ALetter) × [6.0] APOSTROPHE (MidNumLet) × [4.0] WORD JOINER (Format_FE) × [7.0] LATIN SMALL LETTER A (ALetter) ÷ [999.0] COLON (MidLetter) ÷ [0.3] -÷ 0061 × 0027 × 2060 × 0308 × 0061 ÷ 003A ÷ # ÷ [0.2] LATIN SMALL LETTER A (ALetter) × [6.0] APOSTROPHE (MidNumLet) × [4.0] WORD JOINER (Format_FE) × [4.0] COMBINING DIAERESIS (Extend_FE) × [7.0] LATIN SMALL LETTER A (ALetter) ÷ [999.0] COLON (MidLetter) ÷ [0.3] -÷ 0061 × 0027 × 2060 × 0061 ÷ 0027 ÷ # ÷ [0.2] LATIN SMALL LETTER A (ALetter) × [6.0] APOSTROPHE (MidNumLet) × [4.0] WORD JOINER (Format_FE) × [7.0] LATIN SMALL LETTER A (ALetter) ÷ [999.0] APOSTROPHE (MidNumLet) ÷ [0.3] -÷ 0061 × 0027 × 2060 × 0308 × 0061 ÷ 0027 ÷ # ÷ [0.2] LATIN SMALL LETTER A (ALetter) × [6.0] APOSTROPHE (MidNumLet) × [4.0] WORD JOINER (Format_FE) × [4.0] COMBINING DIAERESIS (Extend_FE) × [7.0] LATIN SMALL LETTER A (ALetter) ÷ [999.0] APOSTROPHE (MidNumLet) ÷ [0.3] -÷ 0061 × 0027 × 2060 × 0061 ÷ 0027 × 2060 ÷ # ÷ [0.2] LATIN SMALL LETTER A (ALetter) × [6.0] APOSTROPHE (MidNumLet) × [4.0] WORD JOINER (Format_FE) × [7.0] LATIN SMALL LETTER A (ALetter) ÷ [999.0] APOSTROPHE (MidNumLet) × [4.0] WORD JOINER (Format_FE) ÷ [0.3] -÷ 0061 × 0027 × 2060 × 0308 × 0061 ÷ 0027 × 2060 ÷ # ÷ [0.2] LATIN SMALL LETTER A (ALetter) × [6.0] APOSTROPHE (MidNumLet) × [4.0] WORD JOINER (Format_FE) × [4.0] COMBINING DIAERESIS (Extend_FE) × [7.0] LATIN SMALL LETTER A (ALetter) ÷ [999.0] APOSTROPHE (MidNumLet) × [4.0] WORD JOINER (Format_FE) ÷ [0.3] -÷ 0061 × 0027 × 2060 × 0061 ÷ 002C ÷ # ÷ [0.2] LATIN SMALL LETTER A (ALetter) × [6.0] APOSTROPHE (MidNumLet) × [4.0] WORD JOINER (Format_FE) × [7.0] LATIN SMALL LETTER A (ALetter) ÷ [999.0] COMMA (MidNum) ÷ [0.3] -÷ 0061 × 0027 × 2060 × 0308 × 0061 ÷ 002C ÷ # ÷ [0.2] LATIN SMALL LETTER A (ALetter) × [6.0] APOSTROPHE (MidNumLet) × [4.0] WORD JOINER (Format_FE) × [4.0] COMBINING DIAERESIS (Extend_FE) × [7.0] LATIN SMALL LETTER A (ALetter) ÷ [999.0] COMMA (MidNum) ÷ [0.3] -÷ 0061 ÷ 0027 × 2060 ÷ 0031 ÷ 003A ÷ # ÷ [0.2] LATIN SMALL LETTER A (ALetter) ÷ [999.0] APOSTROPHE (MidNumLet) × [4.0] WORD JOINER (Format_FE) ÷ [999.0] DIGIT ONE (Numeric) ÷ [999.0] COLON (MidLetter) ÷ [0.3] -÷ 0061 ÷ 0027 × 2060 × 0308 ÷ 0031 ÷ 003A ÷ # ÷ [0.2] LATIN SMALL LETTER A (ALetter) ÷ [999.0] APOSTROPHE (MidNumLet) × [4.0] WORD JOINER (Format_FE) × [4.0] COMBINING DIAERESIS (Extend_FE) ÷ [999.0] DIGIT ONE (Numeric) ÷ [999.0] COLON (MidLetter) ÷ [0.3] -÷ 0061 ÷ 0027 × 2060 ÷ 0031 ÷ 0027 ÷ # ÷ [0.2] LATIN SMALL LETTER A (ALetter) ÷ [999.0] APOSTROPHE (MidNumLet) × [4.0] WORD JOINER (Format_FE) ÷ [999.0] DIGIT ONE (Numeric) ÷ [999.0] APOSTROPHE (MidNumLet) ÷ [0.3] -÷ 0061 ÷ 0027 × 2060 × 0308 ÷ 0031 ÷ 0027 ÷ # ÷ [0.2] LATIN SMALL LETTER A (ALetter) ÷ [999.0] APOSTROPHE (MidNumLet) × [4.0] WORD JOINER (Format_FE) × [4.0] COMBINING DIAERESIS (Extend_FE) ÷ [999.0] DIGIT ONE (Numeric) ÷ [999.0] APOSTROPHE (MidNumLet) ÷ [0.3] -÷ 0061 ÷ 0027 × 2060 ÷ 0031 ÷ 002C ÷ # ÷ [0.2] LATIN SMALL LETTER A (ALetter) ÷ [999.0] APOSTROPHE (MidNumLet) × [4.0] WORD JOINER (Format_FE) ÷ [999.0] DIGIT ONE (Numeric) ÷ [999.0] COMMA (MidNum) ÷ [0.3] -÷ 0061 ÷ 0027 × 2060 × 0308 ÷ 0031 ÷ 002C ÷ # ÷ [0.2] LATIN SMALL LETTER A (ALetter) ÷ [999.0] APOSTROPHE (MidNumLet) × [4.0] WORD JOINER (Format_FE) × [4.0] COMBINING DIAERESIS (Extend_FE) ÷ [999.0] DIGIT ONE (Numeric) ÷ [999.0] COMMA (MidNum) ÷ [0.3] -÷ 0061 ÷ 0027 × 2060 ÷ 0031 ÷ 002E × 2060 ÷ # ÷ [0.2] LATIN SMALL LETTER A (ALetter) ÷ [999.0] APOSTROPHE (MidNumLet) × [4.0] WORD JOINER (Format_FE) ÷ [999.0] DIGIT ONE (Numeric) ÷ [999.0] FULL STOP (MidNumLet) × [4.0] WORD JOINER (Format_FE) ÷ [0.3] -÷ 0061 ÷ 0027 × 2060 × 0308 ÷ 0031 ÷ 002E × 2060 ÷ # ÷ [0.2] LATIN SMALL LETTER A (ALetter) ÷ [999.0] APOSTROPHE (MidNumLet) × [4.0] WORD JOINER (Format_FE) × [4.0] COMBINING DIAERESIS (Extend_FE) ÷ [999.0] DIGIT ONE (Numeric) ÷ [999.0] FULL STOP (MidNumLet) × [4.0] WORD JOINER (Format_FE) ÷ [0.3] +÷ 0061 ÷ 0027 ÷ 0001 ÷ # ÷ [0.2] LATIN SMALL LETTER A (ALetter) ÷ [999.0] APOSTROPHE (Single_Quote) ÷ [999.0] (Other) ÷ [0.3] +÷ 0061 ÷ 0027 × 0308 ÷ 0001 ÷ # ÷ [0.2] LATIN SMALL LETTER A (ALetter) ÷ [999.0] APOSTROPHE (Single_Quote) × [4.0] COMBINING DIAERESIS (Extend_FE) ÷ [999.0] (Other) ÷ [0.3] +÷ 0061 ÷ 0027 ÷ 000D ÷ # ÷ [0.2] LATIN SMALL LETTER A (ALetter) ÷ [999.0] APOSTROPHE (Single_Quote) ÷ [3.2] (CR) ÷ [0.3] +÷ 0061 ÷ 0027 × 0308 ÷ 000D ÷ # ÷ [0.2] LATIN SMALL LETTER A (ALetter) ÷ [999.0] APOSTROPHE (Single_Quote) × [4.0] COMBINING DIAERESIS (Extend_FE) ÷ [3.2] (CR) ÷ [0.3] +÷ 0061 ÷ 0027 ÷ 000A ÷ # ÷ [0.2] LATIN SMALL LETTER A (ALetter) ÷ [999.0] APOSTROPHE (Single_Quote) ÷ [3.2] (LF) ÷ [0.3] +÷ 0061 ÷ 0027 × 0308 ÷ 000A ÷ # ÷ [0.2] LATIN SMALL LETTER A (ALetter) ÷ [999.0] APOSTROPHE (Single_Quote) × [4.0] COMBINING DIAERESIS (Extend_FE) ÷ [3.2] (LF) ÷ [0.3] +÷ 0061 ÷ 0027 ÷ 000B ÷ # ÷ [0.2] LATIN SMALL LETTER A (ALetter) ÷ [999.0] APOSTROPHE (Single_Quote) ÷ [3.2] (Newline) ÷ [0.3] +÷ 0061 ÷ 0027 × 0308 ÷ 000B ÷ # ÷ [0.2] LATIN SMALL LETTER A (ALetter) ÷ [999.0] APOSTROPHE (Single_Quote) × [4.0] COMBINING DIAERESIS (Extend_FE) ÷ [3.2] (Newline) ÷ [0.3] +÷ 0061 ÷ 0027 ÷ 3031 ÷ # ÷ [0.2] LATIN SMALL LETTER A (ALetter) ÷ [999.0] APOSTROPHE (Single_Quote) ÷ [999.0] VERTICAL KANA REPEAT MARK (Katakana) ÷ [0.3] +÷ 0061 ÷ 0027 × 0308 ÷ 3031 ÷ # ÷ [0.2] LATIN SMALL LETTER A (ALetter) ÷ [999.0] APOSTROPHE (Single_Quote) × [4.0] COMBINING DIAERESIS (Extend_FE) ÷ [999.0] VERTICAL KANA REPEAT MARK (Katakana) ÷ [0.3] +÷ 0061 × 0027 × 0041 ÷ # ÷ [0.2] LATIN SMALL LETTER A (ALetter) × [6.0] APOSTROPHE (Single_Quote) × [7.0] LATIN CAPITAL LETTER A (ALetter) ÷ [0.3] +÷ 0061 × 0027 × 0308 × 0041 ÷ # ÷ [0.2] LATIN SMALL LETTER A (ALetter) × [6.0] APOSTROPHE (Single_Quote) × [4.0] COMBINING DIAERESIS (Extend_FE) × [7.0] LATIN CAPITAL LETTER A (ALetter) ÷ [0.3] +÷ 0061 ÷ 0027 ÷ 003A ÷ # ÷ [0.2] LATIN SMALL LETTER A (ALetter) ÷ [999.0] APOSTROPHE (Single_Quote) ÷ [999.0] COLON (MidLetter) ÷ [0.3] +÷ 0061 ÷ 0027 × 0308 ÷ 003A ÷ # ÷ [0.2] LATIN SMALL LETTER A (ALetter) ÷ [999.0] APOSTROPHE (Single_Quote) × [4.0] COMBINING DIAERESIS (Extend_FE) ÷ [999.0] COLON (MidLetter) ÷ [0.3] +÷ 0061 ÷ 0027 ÷ 002C ÷ # ÷ [0.2] LATIN SMALL LETTER A (ALetter) ÷ [999.0] APOSTROPHE (Single_Quote) ÷ [999.0] COMMA (MidNum) ÷ [0.3] +÷ 0061 ÷ 0027 × 0308 ÷ 002C ÷ # ÷ [0.2] LATIN SMALL LETTER A (ALetter) ÷ [999.0] APOSTROPHE (Single_Quote) × [4.0] COMBINING DIAERESIS (Extend_FE) ÷ [999.0] COMMA (MidNum) ÷ [0.3] +÷ 0061 ÷ 0027 ÷ 002E ÷ # ÷ [0.2] LATIN SMALL LETTER A (ALetter) ÷ [999.0] APOSTROPHE (Single_Quote) ÷ [999.0] FULL STOP (MidNumLet) ÷ [0.3] +÷ 0061 ÷ 0027 × 0308 ÷ 002E ÷ # ÷ [0.2] LATIN SMALL LETTER A (ALetter) ÷ [999.0] APOSTROPHE (Single_Quote) × [4.0] COMBINING DIAERESIS (Extend_FE) ÷ [999.0] FULL STOP (MidNumLet) ÷ [0.3] +÷ 0061 ÷ 0027 ÷ 0030 ÷ # ÷ [0.2] LATIN SMALL LETTER A (ALetter) ÷ [999.0] APOSTROPHE (Single_Quote) ÷ [999.0] DIGIT ZERO (Numeric) ÷ [0.3] +÷ 0061 ÷ 0027 × 0308 ÷ 0030 ÷ # ÷ [0.2] LATIN SMALL LETTER A (ALetter) ÷ [999.0] APOSTROPHE (Single_Quote) × [4.0] COMBINING DIAERESIS (Extend_FE) ÷ [999.0] DIGIT ZERO (Numeric) ÷ [0.3] +÷ 0061 ÷ 0027 ÷ 005F ÷ # ÷ [0.2] LATIN SMALL LETTER A (ALetter) ÷ [999.0] APOSTROPHE (Single_Quote) ÷ [999.0] LOW LINE (ExtendNumLet) ÷ [0.3] +÷ 0061 ÷ 0027 × 0308 ÷ 005F ÷ # ÷ [0.2] LATIN SMALL LETTER A (ALetter) ÷ [999.0] APOSTROPHE (Single_Quote) × [4.0] COMBINING DIAERESIS (Extend_FE) ÷ [999.0] LOW LINE (ExtendNumLet) ÷ [0.3] +÷ 0061 ÷ 0027 ÷ 1F1E6 ÷ # ÷ [0.2] LATIN SMALL LETTER A (ALetter) ÷ [999.0] APOSTROPHE (Single_Quote) ÷ [999.0] REGIONAL INDICATOR SYMBOL LETTER A (Regional_Indicator) ÷ [0.3] +÷ 0061 ÷ 0027 × 0308 ÷ 1F1E6 ÷ # ÷ [0.2] LATIN SMALL LETTER A (ALetter) ÷ [999.0] APOSTROPHE (Single_Quote) × [4.0] COMBINING DIAERESIS (Extend_FE) ÷ [999.0] REGIONAL INDICATOR SYMBOL LETTER A (Regional_Indicator) ÷ [0.3] +÷ 0061 × 0027 × 05D0 ÷ # ÷ [0.2] LATIN SMALL LETTER A (ALetter) × [6.0] APOSTROPHE (Single_Quote) × [7.0] HEBREW LETTER ALEF (Hebrew_Letter) ÷ [0.3] +÷ 0061 × 0027 × 0308 × 05D0 ÷ # ÷ [0.2] LATIN SMALL LETTER A (ALetter) × [6.0] APOSTROPHE (Single_Quote) × [4.0] COMBINING DIAERESIS (Extend_FE) × [7.0] HEBREW LETTER ALEF (Hebrew_Letter) ÷ [0.3] +÷ 0061 ÷ 0027 ÷ 0022 ÷ # ÷ [0.2] LATIN SMALL LETTER A (ALetter) ÷ [999.0] APOSTROPHE (Single_Quote) ÷ [999.0] QUOTATION MARK (Double_Quote) ÷ [0.3] +÷ 0061 ÷ 0027 × 0308 ÷ 0022 ÷ # ÷ [0.2] LATIN SMALL LETTER A (ALetter) ÷ [999.0] APOSTROPHE (Single_Quote) × [4.0] COMBINING DIAERESIS (Extend_FE) ÷ [999.0] QUOTATION MARK (Double_Quote) ÷ [0.3] +÷ 0061 ÷ 0027 ÷ 0027 ÷ # ÷ [0.2] LATIN SMALL LETTER A (ALetter) ÷ [999.0] APOSTROPHE (Single_Quote) ÷ [999.0] APOSTROPHE (Single_Quote) ÷ [0.3] +÷ 0061 ÷ 0027 × 0308 ÷ 0027 ÷ # ÷ [0.2] LATIN SMALL LETTER A (ALetter) ÷ [999.0] APOSTROPHE (Single_Quote) × [4.0] COMBINING DIAERESIS (Extend_FE) ÷ [999.0] APOSTROPHE (Single_Quote) ÷ [0.3] +÷ 0061 ÷ 0027 × 00AD ÷ # ÷ [0.2] LATIN SMALL LETTER A (ALetter) ÷ [999.0] APOSTROPHE (Single_Quote) × [4.0] SOFT HYPHEN (Format_FE) ÷ [0.3] +÷ 0061 ÷ 0027 × 0308 × 00AD ÷ # ÷ [0.2] LATIN SMALL LETTER A (ALetter) ÷ [999.0] APOSTROPHE (Single_Quote) × [4.0] COMBINING DIAERESIS (Extend_FE) × [4.0] SOFT HYPHEN (Format_FE) ÷ [0.3] +÷ 0061 ÷ 0027 × 0300 ÷ # ÷ [0.2] LATIN SMALL LETTER A (ALetter) ÷ [999.0] APOSTROPHE (Single_Quote) × [4.0] COMBINING GRAVE ACCENT (Extend_FE) ÷ [0.3] +÷ 0061 ÷ 0027 × 0308 × 0300 ÷ # ÷ [0.2] LATIN SMALL LETTER A (ALetter) ÷ [999.0] APOSTROPHE (Single_Quote) × [4.0] COMBINING DIAERESIS (Extend_FE) × [4.0] COMBINING GRAVE ACCENT (Extend_FE) ÷ [0.3] +÷ 0061 × 0027 × 0061 × 2060 ÷ # ÷ [0.2] LATIN SMALL LETTER A (ALetter) × [6.0] APOSTROPHE (Single_Quote) × [7.0] LATIN SMALL LETTER A (ALetter) × [4.0] WORD JOINER (Format_FE) ÷ [0.3] +÷ 0061 × 0027 × 0308 × 0061 × 2060 ÷ # ÷ [0.2] LATIN SMALL LETTER A (ALetter) × [6.0] APOSTROPHE (Single_Quote) × [4.0] COMBINING DIAERESIS (Extend_FE) × [7.0] LATIN SMALL LETTER A (ALetter) × [4.0] WORD JOINER (Format_FE) ÷ [0.3] +÷ 0061 × 0027 × 0061 ÷ 003A ÷ # ÷ [0.2] LATIN SMALL LETTER A (ALetter) × [6.0] APOSTROPHE (Single_Quote) × [7.0] LATIN SMALL LETTER A (ALetter) ÷ [999.0] COLON (MidLetter) ÷ [0.3] +÷ 0061 × 0027 × 0308 × 0061 ÷ 003A ÷ # ÷ [0.2] LATIN SMALL LETTER A (ALetter) × [6.0] APOSTROPHE (Single_Quote) × [4.0] COMBINING DIAERESIS (Extend_FE) × [7.0] LATIN SMALL LETTER A (ALetter) ÷ [999.0] COLON (MidLetter) ÷ [0.3] +÷ 0061 × 0027 × 0061 ÷ 0027 ÷ # ÷ [0.2] LATIN SMALL LETTER A (ALetter) × [6.0] APOSTROPHE (Single_Quote) × [7.0] LATIN SMALL LETTER A (ALetter) ÷ [999.0] APOSTROPHE (Single_Quote) ÷ [0.3] +÷ 0061 × 0027 × 0308 × 0061 ÷ 0027 ÷ # ÷ [0.2] LATIN SMALL LETTER A (ALetter) × [6.0] APOSTROPHE (Single_Quote) × [4.0] COMBINING DIAERESIS (Extend_FE) × [7.0] LATIN SMALL LETTER A (ALetter) ÷ [999.0] APOSTROPHE (Single_Quote) ÷ [0.3] +÷ 0061 × 0027 × 0061 ÷ 0027 × 2060 ÷ # ÷ [0.2] LATIN SMALL LETTER A (ALetter) × [6.0] APOSTROPHE (Single_Quote) × [7.0] LATIN SMALL LETTER A (ALetter) ÷ [999.0] APOSTROPHE (Single_Quote) × [4.0] WORD JOINER (Format_FE) ÷ [0.3] +÷ 0061 × 0027 × 0308 × 0061 ÷ 0027 × 2060 ÷ # ÷ [0.2] LATIN SMALL LETTER A (ALetter) × [6.0] APOSTROPHE (Single_Quote) × [4.0] COMBINING DIAERESIS (Extend_FE) × [7.0] LATIN SMALL LETTER A (ALetter) ÷ [999.0] APOSTROPHE (Single_Quote) × [4.0] WORD JOINER (Format_FE) ÷ [0.3] +÷ 0061 × 0027 × 0061 ÷ 002C ÷ # ÷ [0.2] LATIN SMALL LETTER A (ALetter) × [6.0] APOSTROPHE (Single_Quote) × [7.0] LATIN SMALL LETTER A (ALetter) ÷ [999.0] COMMA (MidNum) ÷ [0.3] +÷ 0061 × 0027 × 0308 × 0061 ÷ 002C ÷ # ÷ [0.2] LATIN SMALL LETTER A (ALetter) × [6.0] APOSTROPHE (Single_Quote) × [4.0] COMBINING DIAERESIS (Extend_FE) × [7.0] LATIN SMALL LETTER A (ALetter) ÷ [999.0] COMMA (MidNum) ÷ [0.3] +÷ 0061 ÷ 0027 ÷ 0031 ÷ 003A ÷ # ÷ [0.2] LATIN SMALL LETTER A (ALetter) ÷ [999.0] APOSTROPHE (Single_Quote) ÷ [999.0] DIGIT ONE (Numeric) ÷ [999.0] COLON (MidLetter) ÷ [0.3] +÷ 0061 ÷ 0027 × 0308 ÷ 0031 ÷ 003A ÷ # ÷ [0.2] LATIN SMALL LETTER A (ALetter) ÷ [999.0] APOSTROPHE (Single_Quote) × [4.0] COMBINING DIAERESIS (Extend_FE) ÷ [999.0] DIGIT ONE (Numeric) ÷ [999.0] COLON (MidLetter) ÷ [0.3] +÷ 0061 ÷ 0027 ÷ 0031 ÷ 0027 ÷ # ÷ [0.2] LATIN SMALL LETTER A (ALetter) ÷ [999.0] APOSTROPHE (Single_Quote) ÷ [999.0] DIGIT ONE (Numeric) ÷ [999.0] APOSTROPHE (Single_Quote) ÷ [0.3] +÷ 0061 ÷ 0027 × 0308 ÷ 0031 ÷ 0027 ÷ # ÷ [0.2] LATIN SMALL LETTER A (ALetter) ÷ [999.0] APOSTROPHE (Single_Quote) × [4.0] COMBINING DIAERESIS (Extend_FE) ÷ [999.0] DIGIT ONE (Numeric) ÷ [999.0] APOSTROPHE (Single_Quote) ÷ [0.3] +÷ 0061 ÷ 0027 ÷ 0031 ÷ 002C ÷ # ÷ [0.2] LATIN SMALL LETTER A (ALetter) ÷ [999.0] APOSTROPHE (Single_Quote) ÷ [999.0] DIGIT ONE (Numeric) ÷ [999.0] COMMA (MidNum) ÷ [0.3] +÷ 0061 ÷ 0027 × 0308 ÷ 0031 ÷ 002C ÷ # ÷ [0.2] LATIN SMALL LETTER A (ALetter) ÷ [999.0] APOSTROPHE (Single_Quote) × [4.0] COMBINING DIAERESIS (Extend_FE) ÷ [999.0] DIGIT ONE (Numeric) ÷ [999.0] COMMA (MidNum) ÷ [0.3] +÷ 0061 ÷ 0027 ÷ 0031 ÷ 002E × 2060 ÷ # ÷ [0.2] LATIN SMALL LETTER A (ALetter) ÷ [999.0] APOSTROPHE (Single_Quote) ÷ [999.0] DIGIT ONE (Numeric) ÷ [999.0] FULL STOP (MidNumLet) × [4.0] WORD JOINER (Format_FE) ÷ [0.3] +÷ 0061 ÷ 0027 × 0308 ÷ 0031 ÷ 002E × 2060 ÷ # ÷ [0.2] LATIN SMALL LETTER A (ALetter) ÷ [999.0] APOSTROPHE (Single_Quote) × [4.0] COMBINING DIAERESIS (Extend_FE) ÷ [999.0] DIGIT ONE (Numeric) ÷ [999.0] FULL STOP (MidNumLet) × [4.0] WORD JOINER (Format_FE) ÷ [0.3] +÷ 0061 ÷ 0027 × 2060 ÷ 0001 ÷ # ÷ [0.2] LATIN SMALL LETTER A (ALetter) ÷ [999.0] APOSTROPHE (Single_Quote) × [4.0] WORD JOINER (Format_FE) ÷ [999.0] (Other) ÷ [0.3] +÷ 0061 ÷ 0027 × 2060 × 0308 ÷ 0001 ÷ # ÷ [0.2] LATIN SMALL LETTER A (ALetter) ÷ [999.0] APOSTROPHE (Single_Quote) × [4.0] WORD JOINER (Format_FE) × [4.0] COMBINING DIAERESIS (Extend_FE) ÷ [999.0] (Other) ÷ [0.3] +÷ 0061 ÷ 0027 × 2060 ÷ 000D ÷ # ÷ [0.2] LATIN SMALL LETTER A (ALetter) ÷ [999.0] APOSTROPHE (Single_Quote) × [4.0] WORD JOINER (Format_FE) ÷ [3.2] (CR) ÷ [0.3] +÷ 0061 ÷ 0027 × 2060 × 0308 ÷ 000D ÷ # ÷ [0.2] LATIN SMALL LETTER A (ALetter) ÷ [999.0] APOSTROPHE (Single_Quote) × [4.0] WORD JOINER (Format_FE) × [4.0] COMBINING DIAERESIS (Extend_FE) ÷ [3.2] (CR) ÷ [0.3] +÷ 0061 ÷ 0027 × 2060 ÷ 000A ÷ # ÷ [0.2] LATIN SMALL LETTER A (ALetter) ÷ [999.0] APOSTROPHE (Single_Quote) × [4.0] WORD JOINER (Format_FE) ÷ [3.2] (LF) ÷ [0.3] +÷ 0061 ÷ 0027 × 2060 × 0308 ÷ 000A ÷ # ÷ [0.2] LATIN SMALL LETTER A (ALetter) ÷ [999.0] APOSTROPHE (Single_Quote) × [4.0] WORD JOINER (Format_FE) × [4.0] COMBINING DIAERESIS (Extend_FE) ÷ [3.2] (LF) ÷ [0.3] +÷ 0061 ÷ 0027 × 2060 ÷ 000B ÷ # ÷ [0.2] LATIN SMALL LETTER A (ALetter) ÷ [999.0] APOSTROPHE (Single_Quote) × [4.0] WORD JOINER (Format_FE) ÷ [3.2] (Newline) ÷ [0.3] +÷ 0061 ÷ 0027 × 2060 × 0308 ÷ 000B ÷ # ÷ [0.2] LATIN SMALL LETTER A (ALetter) ÷ [999.0] APOSTROPHE (Single_Quote) × [4.0] WORD JOINER (Format_FE) × [4.0] COMBINING DIAERESIS (Extend_FE) ÷ [3.2] (Newline) ÷ [0.3] +÷ 0061 ÷ 0027 × 2060 ÷ 3031 ÷ # ÷ [0.2] LATIN SMALL LETTER A (ALetter) ÷ [999.0] APOSTROPHE (Single_Quote) × [4.0] WORD JOINER (Format_FE) ÷ [999.0] VERTICAL KANA REPEAT MARK (Katakana) ÷ [0.3] +÷ 0061 ÷ 0027 × 2060 × 0308 ÷ 3031 ÷ # ÷ [0.2] LATIN SMALL LETTER A (ALetter) ÷ [999.0] APOSTROPHE (Single_Quote) × [4.0] WORD JOINER (Format_FE) × [4.0] COMBINING DIAERESIS (Extend_FE) ÷ [999.0] VERTICAL KANA REPEAT MARK (Katakana) ÷ [0.3] +÷ 0061 × 0027 × 2060 × 0041 ÷ # ÷ [0.2] LATIN SMALL LETTER A (ALetter) × [6.0] APOSTROPHE (Single_Quote) × [4.0] WORD JOINER (Format_FE) × [7.0] LATIN CAPITAL LETTER A (ALetter) ÷ [0.3] +÷ 0061 × 0027 × 2060 × 0308 × 0041 ÷ # ÷ [0.2] LATIN SMALL LETTER A (ALetter) × [6.0] APOSTROPHE (Single_Quote) × [4.0] WORD JOINER (Format_FE) × [4.0] COMBINING DIAERESIS (Extend_FE) × [7.0] LATIN CAPITAL LETTER A (ALetter) ÷ [0.3] +÷ 0061 ÷ 0027 × 2060 ÷ 003A ÷ # ÷ [0.2] LATIN SMALL LETTER A (ALetter) ÷ [999.0] APOSTROPHE (Single_Quote) × [4.0] WORD JOINER (Format_FE) ÷ [999.0] COLON (MidLetter) ÷ [0.3] +÷ 0061 ÷ 0027 × 2060 × 0308 ÷ 003A ÷ # ÷ [0.2] LATIN SMALL LETTER A (ALetter) ÷ [999.0] APOSTROPHE (Single_Quote) × [4.0] WORD JOINER (Format_FE) × [4.0] COMBINING DIAERESIS (Extend_FE) ÷ [999.0] COLON (MidLetter) ÷ [0.3] +÷ 0061 ÷ 0027 × 2060 ÷ 002C ÷ # ÷ [0.2] LATIN SMALL LETTER A (ALetter) ÷ [999.0] APOSTROPHE (Single_Quote) × [4.0] WORD JOINER (Format_FE) ÷ [999.0] COMMA (MidNum) ÷ [0.3] +÷ 0061 ÷ 0027 × 2060 × 0308 ÷ 002C ÷ # ÷ [0.2] LATIN SMALL LETTER A (ALetter) ÷ [999.0] APOSTROPHE (Single_Quote) × [4.0] WORD JOINER (Format_FE) × [4.0] COMBINING DIAERESIS (Extend_FE) ÷ [999.0] COMMA (MidNum) ÷ [0.3] +÷ 0061 ÷ 0027 × 2060 ÷ 002E ÷ # ÷ [0.2] LATIN SMALL LETTER A (ALetter) ÷ [999.0] APOSTROPHE (Single_Quote) × [4.0] WORD JOINER (Format_FE) ÷ [999.0] FULL STOP (MidNumLet) ÷ [0.3] +÷ 0061 ÷ 0027 × 2060 × 0308 ÷ 002E ÷ # ÷ [0.2] LATIN SMALL LETTER A (ALetter) ÷ [999.0] APOSTROPHE (Single_Quote) × [4.0] WORD JOINER (Format_FE) × [4.0] COMBINING DIAERESIS (Extend_FE) ÷ [999.0] FULL STOP (MidNumLet) ÷ [0.3] +÷ 0061 ÷ 0027 × 2060 ÷ 0030 ÷ # ÷ [0.2] LATIN SMALL LETTER A (ALetter) ÷ [999.0] APOSTROPHE (Single_Quote) × [4.0] WORD JOINER (Format_FE) ÷ [999.0] DIGIT ZERO (Numeric) ÷ [0.3] +÷ 0061 ÷ 0027 × 2060 × 0308 ÷ 0030 ÷ # ÷ [0.2] LATIN SMALL LETTER A (ALetter) ÷ [999.0] APOSTROPHE (Single_Quote) × [4.0] WORD JOINER (Format_FE) × [4.0] COMBINING DIAERESIS (Extend_FE) ÷ [999.0] DIGIT ZERO (Numeric) ÷ [0.3] +÷ 0061 ÷ 0027 × 2060 ÷ 005F ÷ # ÷ [0.2] LATIN SMALL LETTER A (ALetter) ÷ [999.0] APOSTROPHE (Single_Quote) × [4.0] WORD JOINER (Format_FE) ÷ [999.0] LOW LINE (ExtendNumLet) ÷ [0.3] +÷ 0061 ÷ 0027 × 2060 × 0308 ÷ 005F ÷ # ÷ [0.2] LATIN SMALL LETTER A (ALetter) ÷ [999.0] APOSTROPHE (Single_Quote) × [4.0] WORD JOINER (Format_FE) × [4.0] COMBINING DIAERESIS (Extend_FE) ÷ [999.0] LOW LINE (ExtendNumLet) ÷ [0.3] +÷ 0061 ÷ 0027 × 2060 ÷ 1F1E6 ÷ # ÷ [0.2] LATIN SMALL LETTER A (ALetter) ÷ [999.0] APOSTROPHE (Single_Quote) × [4.0] WORD JOINER (Format_FE) ÷ [999.0] REGIONAL INDICATOR SYMBOL LETTER A (Regional_Indicator) ÷ [0.3] +÷ 0061 ÷ 0027 × 2060 × 0308 ÷ 1F1E6 ÷ # ÷ [0.2] LATIN SMALL LETTER A (ALetter) ÷ [999.0] APOSTROPHE (Single_Quote) × [4.0] WORD JOINER (Format_FE) × [4.0] COMBINING DIAERESIS (Extend_FE) ÷ [999.0] REGIONAL INDICATOR SYMBOL LETTER A (Regional_Indicator) ÷ [0.3] +÷ 0061 × 0027 × 2060 × 05D0 ÷ # ÷ [0.2] LATIN SMALL LETTER A (ALetter) × [6.0] APOSTROPHE (Single_Quote) × [4.0] WORD JOINER (Format_FE) × [7.0] HEBREW LETTER ALEF (Hebrew_Letter) ÷ [0.3] +÷ 0061 × 0027 × 2060 × 0308 × 05D0 ÷ # ÷ [0.2] LATIN SMALL LETTER A (ALetter) × [6.0] APOSTROPHE (Single_Quote) × [4.0] WORD JOINER (Format_FE) × [4.0] COMBINING DIAERESIS (Extend_FE) × [7.0] HEBREW LETTER ALEF (Hebrew_Letter) ÷ [0.3] +÷ 0061 ÷ 0027 × 2060 ÷ 0022 ÷ # ÷ [0.2] LATIN SMALL LETTER A (ALetter) ÷ [999.0] APOSTROPHE (Single_Quote) × [4.0] WORD JOINER (Format_FE) ÷ [999.0] QUOTATION MARK (Double_Quote) ÷ [0.3] +÷ 0061 ÷ 0027 × 2060 × 0308 ÷ 0022 ÷ # ÷ [0.2] LATIN SMALL LETTER A (ALetter) ÷ [999.0] APOSTROPHE (Single_Quote) × [4.0] WORD JOINER (Format_FE) × [4.0] COMBINING DIAERESIS (Extend_FE) ÷ [999.0] QUOTATION MARK (Double_Quote) ÷ [0.3] +÷ 0061 ÷ 0027 × 2060 ÷ 0027 ÷ # ÷ [0.2] LATIN SMALL LETTER A (ALetter) ÷ [999.0] APOSTROPHE (Single_Quote) × [4.0] WORD JOINER (Format_FE) ÷ [999.0] APOSTROPHE (Single_Quote) ÷ [0.3] +÷ 0061 ÷ 0027 × 2060 × 0308 ÷ 0027 ÷ # ÷ [0.2] LATIN SMALL LETTER A (ALetter) ÷ [999.0] APOSTROPHE (Single_Quote) × [4.0] WORD JOINER (Format_FE) × [4.0] COMBINING DIAERESIS (Extend_FE) ÷ [999.0] APOSTROPHE (Single_Quote) ÷ [0.3] +÷ 0061 ÷ 0027 × 2060 × 00AD ÷ # ÷ [0.2] LATIN SMALL LETTER A (ALetter) ÷ [999.0] APOSTROPHE (Single_Quote) × [4.0] WORD JOINER (Format_FE) × [4.0] SOFT HYPHEN (Format_FE) ÷ [0.3] +÷ 0061 ÷ 0027 × 2060 × 0308 × 00AD ÷ # ÷ [0.2] LATIN SMALL LETTER A (ALetter) ÷ [999.0] APOSTROPHE (Single_Quote) × [4.0] WORD JOINER (Format_FE) × [4.0] COMBINING DIAERESIS (Extend_FE) × [4.0] SOFT HYPHEN (Format_FE) ÷ [0.3] +÷ 0061 ÷ 0027 × 2060 × 0300 ÷ # ÷ [0.2] LATIN SMALL LETTER A (ALetter) ÷ [999.0] APOSTROPHE (Single_Quote) × [4.0] WORD JOINER (Format_FE) × [4.0] COMBINING GRAVE ACCENT (Extend_FE) ÷ [0.3] +÷ 0061 ÷ 0027 × 2060 × 0308 × 0300 ÷ # ÷ [0.2] LATIN SMALL LETTER A (ALetter) ÷ [999.0] APOSTROPHE (Single_Quote) × [4.0] WORD JOINER (Format_FE) × [4.0] COMBINING DIAERESIS (Extend_FE) × [4.0] COMBINING GRAVE ACCENT (Extend_FE) ÷ [0.3] +÷ 0061 × 0027 × 2060 × 0061 × 2060 ÷ # ÷ [0.2] LATIN SMALL LETTER A (ALetter) × [6.0] APOSTROPHE (Single_Quote) × [4.0] WORD JOINER (Format_FE) × [7.0] LATIN SMALL LETTER A (ALetter) × [4.0] WORD JOINER (Format_FE) ÷ [0.3] +÷ 0061 × 0027 × 2060 × 0308 × 0061 × 2060 ÷ # ÷ [0.2] LATIN SMALL LETTER A (ALetter) × [6.0] APOSTROPHE (Single_Quote) × [4.0] WORD JOINER (Format_FE) × [4.0] COMBINING DIAERESIS (Extend_FE) × [7.0] LATIN SMALL LETTER A (ALetter) × [4.0] WORD JOINER (Format_FE) ÷ [0.3] +÷ 0061 × 0027 × 2060 × 0061 ÷ 003A ÷ # ÷ [0.2] LATIN SMALL LETTER A (ALetter) × [6.0] APOSTROPHE (Single_Quote) × [4.0] WORD JOINER (Format_FE) × [7.0] LATIN SMALL LETTER A (ALetter) ÷ [999.0] COLON (MidLetter) ÷ [0.3] +÷ 0061 × 0027 × 2060 × 0308 × 0061 ÷ 003A ÷ # ÷ [0.2] LATIN SMALL LETTER A (ALetter) × [6.0] APOSTROPHE (Single_Quote) × [4.0] WORD JOINER (Format_FE) × [4.0] COMBINING DIAERESIS (Extend_FE) × [7.0] LATIN SMALL LETTER A (ALetter) ÷ [999.0] COLON (MidLetter) ÷ [0.3] +÷ 0061 × 0027 × 2060 × 0061 ÷ 0027 ÷ # ÷ [0.2] LATIN SMALL LETTER A (ALetter) × [6.0] APOSTROPHE (Single_Quote) × [4.0] WORD JOINER (Format_FE) × [7.0] LATIN SMALL LETTER A (ALetter) ÷ [999.0] APOSTROPHE (Single_Quote) ÷ [0.3] +÷ 0061 × 0027 × 2060 × 0308 × 0061 ÷ 0027 ÷ # ÷ [0.2] LATIN SMALL LETTER A (ALetter) × [6.0] APOSTROPHE (Single_Quote) × [4.0] WORD JOINER (Format_FE) × [4.0] COMBINING DIAERESIS (Extend_FE) × [7.0] LATIN SMALL LETTER A (ALetter) ÷ [999.0] APOSTROPHE (Single_Quote) ÷ [0.3] +÷ 0061 × 0027 × 2060 × 0061 ÷ 0027 × 2060 ÷ # ÷ [0.2] LATIN SMALL LETTER A (ALetter) × [6.0] APOSTROPHE (Single_Quote) × [4.0] WORD JOINER (Format_FE) × [7.0] LATIN SMALL LETTER A (ALetter) ÷ [999.0] APOSTROPHE (Single_Quote) × [4.0] WORD JOINER (Format_FE) ÷ [0.3] +÷ 0061 × 0027 × 2060 × 0308 × 0061 ÷ 0027 × 2060 ÷ # ÷ [0.2] LATIN SMALL LETTER A (ALetter) × [6.0] APOSTROPHE (Single_Quote) × [4.0] WORD JOINER (Format_FE) × [4.0] COMBINING DIAERESIS (Extend_FE) × [7.0] LATIN SMALL LETTER A (ALetter) ÷ [999.0] APOSTROPHE (Single_Quote) × [4.0] WORD JOINER (Format_FE) ÷ [0.3] +÷ 0061 × 0027 × 2060 × 0061 ÷ 002C ÷ # ÷ [0.2] LATIN SMALL LETTER A (ALetter) × [6.0] APOSTROPHE (Single_Quote) × [4.0] WORD JOINER (Format_FE) × [7.0] LATIN SMALL LETTER A (ALetter) ÷ [999.0] COMMA (MidNum) ÷ [0.3] +÷ 0061 × 0027 × 2060 × 0308 × 0061 ÷ 002C ÷ # ÷ [0.2] LATIN SMALL LETTER A (ALetter) × [6.0] APOSTROPHE (Single_Quote) × [4.0] WORD JOINER (Format_FE) × [4.0] COMBINING DIAERESIS (Extend_FE) × [7.0] LATIN SMALL LETTER A (ALetter) ÷ [999.0] COMMA (MidNum) ÷ [0.3] +÷ 0061 ÷ 0027 × 2060 ÷ 0031 ÷ 003A ÷ # ÷ [0.2] LATIN SMALL LETTER A (ALetter) ÷ [999.0] APOSTROPHE (Single_Quote) × [4.0] WORD JOINER (Format_FE) ÷ [999.0] DIGIT ONE (Numeric) ÷ [999.0] COLON (MidLetter) ÷ [0.3] +÷ 0061 ÷ 0027 × 2060 × 0308 ÷ 0031 ÷ 003A ÷ # ÷ [0.2] LATIN SMALL LETTER A (ALetter) ÷ [999.0] APOSTROPHE (Single_Quote) × [4.0] WORD JOINER (Format_FE) × [4.0] COMBINING DIAERESIS (Extend_FE) ÷ [999.0] DIGIT ONE (Numeric) ÷ [999.0] COLON (MidLetter) ÷ [0.3] +÷ 0061 ÷ 0027 × 2060 ÷ 0031 ÷ 0027 ÷ # ÷ [0.2] LATIN SMALL LETTER A (ALetter) ÷ [999.0] APOSTROPHE (Single_Quote) × [4.0] WORD JOINER (Format_FE) ÷ [999.0] DIGIT ONE (Numeric) ÷ [999.0] APOSTROPHE (Single_Quote) ÷ [0.3] +÷ 0061 ÷ 0027 × 2060 × 0308 ÷ 0031 ÷ 0027 ÷ # ÷ [0.2] LATIN SMALL LETTER A (ALetter) ÷ [999.0] APOSTROPHE (Single_Quote) × [4.0] WORD JOINER (Format_FE) × [4.0] COMBINING DIAERESIS (Extend_FE) ÷ [999.0] DIGIT ONE (Numeric) ÷ [999.0] APOSTROPHE (Single_Quote) ÷ [0.3] +÷ 0061 ÷ 0027 × 2060 ÷ 0031 ÷ 002C ÷ # ÷ [0.2] LATIN SMALL LETTER A (ALetter) ÷ [999.0] APOSTROPHE (Single_Quote) × [4.0] WORD JOINER (Format_FE) ÷ [999.0] DIGIT ONE (Numeric) ÷ [999.0] COMMA (MidNum) ÷ [0.3] +÷ 0061 ÷ 0027 × 2060 × 0308 ÷ 0031 ÷ 002C ÷ # ÷ [0.2] LATIN SMALL LETTER A (ALetter) ÷ [999.0] APOSTROPHE (Single_Quote) × [4.0] WORD JOINER (Format_FE) × [4.0] COMBINING DIAERESIS (Extend_FE) ÷ [999.0] DIGIT ONE (Numeric) ÷ [999.0] COMMA (MidNum) ÷ [0.3] +÷ 0061 ÷ 0027 × 2060 ÷ 0031 ÷ 002E × 2060 ÷ # ÷ [0.2] LATIN SMALL LETTER A (ALetter) ÷ [999.0] APOSTROPHE (Single_Quote) × [4.0] WORD JOINER (Format_FE) ÷ [999.0] DIGIT ONE (Numeric) ÷ [999.0] FULL STOP (MidNumLet) × [4.0] WORD JOINER (Format_FE) ÷ [0.3] +÷ 0061 ÷ 0027 × 2060 × 0308 ÷ 0031 ÷ 002E × 2060 ÷ # ÷ [0.2] LATIN SMALL LETTER A (ALetter) ÷ [999.0] APOSTROPHE (Single_Quote) × [4.0] WORD JOINER (Format_FE) × [4.0] COMBINING DIAERESIS (Extend_FE) ÷ [999.0] DIGIT ONE (Numeric) ÷ [999.0] FULL STOP (MidNumLet) × [4.0] WORD JOINER (Format_FE) ÷ [0.3] ÷ 0061 ÷ 002C ÷ 0001 ÷ # ÷ [0.2] LATIN SMALL LETTER A (ALetter) ÷ [999.0] COMMA (MidNum) ÷ [999.0] (Other) ÷ [0.3] ÷ 0061 ÷ 002C × 0308 ÷ 0001 ÷ # ÷ [0.2] LATIN SMALL LETTER A (ALetter) ÷ [999.0] COMMA (MidNum) × [4.0] COMBINING DIAERESIS (Extend_FE) ÷ [999.0] (Other) ÷ [0.3] ÷ 0061 ÷ 002C ÷ 000D ÷ # ÷ [0.2] LATIN SMALL LETTER A (ALetter) ÷ [999.0] COMMA (MidNum) ÷ [3.2] (CR) ÷ [0.3] @@ -864,14 +1128,20 @@ ÷ 0061 ÷ 002C × 0308 ÷ 003A ÷ # ÷ [0.2] LATIN SMALL LETTER A (ALetter) ÷ [999.0] COMMA (MidNum) × [4.0] COMBINING DIAERESIS (Extend_FE) ÷ [999.0] COLON (MidLetter) ÷ [0.3] ÷ 0061 ÷ 002C ÷ 002C ÷ # ÷ [0.2] LATIN SMALL LETTER A (ALetter) ÷ [999.0] COMMA (MidNum) ÷ [999.0] COMMA (MidNum) ÷ [0.3] ÷ 0061 ÷ 002C × 0308 ÷ 002C ÷ # ÷ [0.2] LATIN SMALL LETTER A (ALetter) ÷ [999.0] COMMA (MidNum) × [4.0] COMBINING DIAERESIS (Extend_FE) ÷ [999.0] COMMA (MidNum) ÷ [0.3] -÷ 0061 ÷ 002C ÷ 0027 ÷ # ÷ [0.2] LATIN SMALL LETTER A (ALetter) ÷ [999.0] COMMA (MidNum) ÷ [999.0] APOSTROPHE (MidNumLet) ÷ [0.3] -÷ 0061 ÷ 002C × 0308 ÷ 0027 ÷ # ÷ [0.2] LATIN SMALL LETTER A (ALetter) ÷ [999.0] COMMA (MidNum) × [4.0] COMBINING DIAERESIS (Extend_FE) ÷ [999.0] APOSTROPHE (MidNumLet) ÷ [0.3] +÷ 0061 ÷ 002C ÷ 002E ÷ # ÷ [0.2] LATIN SMALL LETTER A (ALetter) ÷ [999.0] COMMA (MidNum) ÷ [999.0] FULL STOP (MidNumLet) ÷ [0.3] +÷ 0061 ÷ 002C × 0308 ÷ 002E ÷ # ÷ [0.2] LATIN SMALL LETTER A (ALetter) ÷ [999.0] COMMA (MidNum) × [4.0] COMBINING DIAERESIS (Extend_FE) ÷ [999.0] FULL STOP (MidNumLet) ÷ [0.3] ÷ 0061 ÷ 002C ÷ 0030 ÷ # ÷ [0.2] LATIN SMALL LETTER A (ALetter) ÷ [999.0] COMMA (MidNum) ÷ [999.0] DIGIT ZERO (Numeric) ÷ [0.3] ÷ 0061 ÷ 002C × 0308 ÷ 0030 ÷ # ÷ [0.2] LATIN SMALL LETTER A (ALetter) ÷ [999.0] COMMA (MidNum) × [4.0] COMBINING DIAERESIS (Extend_FE) ÷ [999.0] DIGIT ZERO (Numeric) ÷ [0.3] ÷ 0061 ÷ 002C ÷ 005F ÷ # ÷ [0.2] LATIN SMALL LETTER A (ALetter) ÷ [999.0] COMMA (MidNum) ÷ [999.0] LOW LINE (ExtendNumLet) ÷ [0.3] ÷ 0061 ÷ 002C × 0308 ÷ 005F ÷ # ÷ [0.2] LATIN SMALL LETTER A (ALetter) ÷ [999.0] COMMA (MidNum) × [4.0] COMBINING DIAERESIS (Extend_FE) ÷ [999.0] LOW LINE (ExtendNumLet) ÷ [0.3] ÷ 0061 ÷ 002C ÷ 1F1E6 ÷ # ÷ [0.2] LATIN SMALL LETTER A (ALetter) ÷ [999.0] COMMA (MidNum) ÷ [999.0] REGIONAL INDICATOR SYMBOL LETTER A (Regional_Indicator) ÷ [0.3] ÷ 0061 ÷ 002C × 0308 ÷ 1F1E6 ÷ # ÷ [0.2] LATIN SMALL LETTER A (ALetter) ÷ [999.0] COMMA (MidNum) × [4.0] COMBINING DIAERESIS (Extend_FE) ÷ [999.0] REGIONAL INDICATOR SYMBOL LETTER A (Regional_Indicator) ÷ [0.3] +÷ 0061 ÷ 002C ÷ 05D0 ÷ # ÷ [0.2] LATIN SMALL LETTER A (ALetter) ÷ [999.0] COMMA (MidNum) ÷ [999.0] HEBREW LETTER ALEF (Hebrew_Letter) ÷ [0.3] +÷ 0061 ÷ 002C × 0308 ÷ 05D0 ÷ # ÷ [0.2] LATIN SMALL LETTER A (ALetter) ÷ [999.0] COMMA (MidNum) × [4.0] COMBINING DIAERESIS (Extend_FE) ÷ [999.0] HEBREW LETTER ALEF (Hebrew_Letter) ÷ [0.3] +÷ 0061 ÷ 002C ÷ 0022 ÷ # ÷ [0.2] LATIN SMALL LETTER A (ALetter) ÷ [999.0] COMMA (MidNum) ÷ [999.0] QUOTATION MARK (Double_Quote) ÷ [0.3] +÷ 0061 ÷ 002C × 0308 ÷ 0022 ÷ # ÷ [0.2] LATIN SMALL LETTER A (ALetter) ÷ [999.0] COMMA (MidNum) × [4.0] COMBINING DIAERESIS (Extend_FE) ÷ [999.0] QUOTATION MARK (Double_Quote) ÷ [0.3] +÷ 0061 ÷ 002C ÷ 0027 ÷ # ÷ [0.2] LATIN SMALL LETTER A (ALetter) ÷ [999.0] COMMA (MidNum) ÷ [999.0] APOSTROPHE (Single_Quote) ÷ [0.3] +÷ 0061 ÷ 002C × 0308 ÷ 0027 ÷ # ÷ [0.2] LATIN SMALL LETTER A (ALetter) ÷ [999.0] COMMA (MidNum) × [4.0] COMBINING DIAERESIS (Extend_FE) ÷ [999.0] APOSTROPHE (Single_Quote) ÷ [0.3] ÷ 0061 ÷ 002C × 00AD ÷ # ÷ [0.2] LATIN SMALL LETTER A (ALetter) ÷ [999.0] COMMA (MidNum) × [4.0] SOFT HYPHEN (Format_FE) ÷ [0.3] ÷ 0061 ÷ 002C × 0308 × 00AD ÷ # ÷ [0.2] LATIN SMALL LETTER A (ALetter) ÷ [999.0] COMMA (MidNum) × [4.0] COMBINING DIAERESIS (Extend_FE) × [4.0] SOFT HYPHEN (Format_FE) ÷ [0.3] ÷ 0061 ÷ 002C × 0300 ÷ # ÷ [0.2] LATIN SMALL LETTER A (ALetter) ÷ [999.0] COMMA (MidNum) × [4.0] COMBINING GRAVE ACCENT (Extend_FE) ÷ [0.3] @@ -880,16 +1150,16 @@ ÷ 0061 ÷ 002C × 0308 ÷ 0061 × 2060 ÷ # ÷ [0.2] LATIN SMALL LETTER A (ALetter) ÷ [999.0] COMMA (MidNum) × [4.0] COMBINING DIAERESIS (Extend_FE) ÷ [999.0] LATIN SMALL LETTER A (ALetter) × [4.0] WORD JOINER (Format_FE) ÷ [0.3] ÷ 0061 ÷ 002C ÷ 0061 ÷ 003A ÷ # ÷ [0.2] LATIN SMALL LETTER A (ALetter) ÷ [999.0] COMMA (MidNum) ÷ [999.0] LATIN SMALL LETTER A (ALetter) ÷ [999.0] COLON (MidLetter) ÷ [0.3] ÷ 0061 ÷ 002C × 0308 ÷ 0061 ÷ 003A ÷ # ÷ [0.2] LATIN SMALL LETTER A (ALetter) ÷ [999.0] COMMA (MidNum) × [4.0] COMBINING DIAERESIS (Extend_FE) ÷ [999.0] LATIN SMALL LETTER A (ALetter) ÷ [999.0] COLON (MidLetter) ÷ [0.3] -÷ 0061 ÷ 002C ÷ 0061 ÷ 0027 ÷ # ÷ [0.2] LATIN SMALL LETTER A (ALetter) ÷ [999.0] COMMA (MidNum) ÷ [999.0] LATIN SMALL LETTER A (ALetter) ÷ [999.0] APOSTROPHE (MidNumLet) ÷ [0.3] -÷ 0061 ÷ 002C × 0308 ÷ 0061 ÷ 0027 ÷ # ÷ [0.2] LATIN SMALL LETTER A (ALetter) ÷ [999.0] COMMA (MidNum) × [4.0] COMBINING DIAERESIS (Extend_FE) ÷ [999.0] LATIN SMALL LETTER A (ALetter) ÷ [999.0] APOSTROPHE (MidNumLet) ÷ [0.3] -÷ 0061 ÷ 002C ÷ 0061 ÷ 0027 × 2060 ÷ # ÷ [0.2] LATIN SMALL LETTER A (ALetter) ÷ [999.0] COMMA (MidNum) ÷ [999.0] LATIN SMALL LETTER A (ALetter) ÷ [999.0] APOSTROPHE (MidNumLet) × [4.0] WORD JOINER (Format_FE) ÷ [0.3] -÷ 0061 ÷ 002C × 0308 ÷ 0061 ÷ 0027 × 2060 ÷ # ÷ [0.2] LATIN SMALL LETTER A (ALetter) ÷ [999.0] COMMA (MidNum) × [4.0] COMBINING DIAERESIS (Extend_FE) ÷ [999.0] LATIN SMALL LETTER A (ALetter) ÷ [999.0] APOSTROPHE (MidNumLet) × [4.0] WORD JOINER (Format_FE) ÷ [0.3] +÷ 0061 ÷ 002C ÷ 0061 ÷ 0027 ÷ # ÷ [0.2] LATIN SMALL LETTER A (ALetter) ÷ [999.0] COMMA (MidNum) ÷ [999.0] LATIN SMALL LETTER A (ALetter) ÷ [999.0] APOSTROPHE (Single_Quote) ÷ [0.3] +÷ 0061 ÷ 002C × 0308 ÷ 0061 ÷ 0027 ÷ # ÷ [0.2] LATIN SMALL LETTER A (ALetter) ÷ [999.0] COMMA (MidNum) × [4.0] COMBINING DIAERESIS (Extend_FE) ÷ [999.0] LATIN SMALL LETTER A (ALetter) ÷ [999.0] APOSTROPHE (Single_Quote) ÷ [0.3] +÷ 0061 ÷ 002C ÷ 0061 ÷ 0027 × 2060 ÷ # ÷ [0.2] LATIN SMALL LETTER A (ALetter) ÷ [999.0] COMMA (MidNum) ÷ [999.0] LATIN SMALL LETTER A (ALetter) ÷ [999.0] APOSTROPHE (Single_Quote) × [4.0] WORD JOINER (Format_FE) ÷ [0.3] +÷ 0061 ÷ 002C × 0308 ÷ 0061 ÷ 0027 × 2060 ÷ # ÷ [0.2] LATIN SMALL LETTER A (ALetter) ÷ [999.0] COMMA (MidNum) × [4.0] COMBINING DIAERESIS (Extend_FE) ÷ [999.0] LATIN SMALL LETTER A (ALetter) ÷ [999.0] APOSTROPHE (Single_Quote) × [4.0] WORD JOINER (Format_FE) ÷ [0.3] ÷ 0061 ÷ 002C ÷ 0061 ÷ 002C ÷ # ÷ [0.2] LATIN SMALL LETTER A (ALetter) ÷ [999.0] COMMA (MidNum) ÷ [999.0] LATIN SMALL LETTER A (ALetter) ÷ [999.0] COMMA (MidNum) ÷ [0.3] ÷ 0061 ÷ 002C × 0308 ÷ 0061 ÷ 002C ÷ # ÷ [0.2] LATIN SMALL LETTER A (ALetter) ÷ [999.0] COMMA (MidNum) × [4.0] COMBINING DIAERESIS (Extend_FE) ÷ [999.0] LATIN SMALL LETTER A (ALetter) ÷ [999.0] COMMA (MidNum) ÷ [0.3] ÷ 0061 ÷ 002C ÷ 0031 ÷ 003A ÷ # ÷ [0.2] LATIN SMALL LETTER A (ALetter) ÷ [999.0] COMMA (MidNum) ÷ [999.0] DIGIT ONE (Numeric) ÷ [999.0] COLON (MidLetter) ÷ [0.3] ÷ 0061 ÷ 002C × 0308 ÷ 0031 ÷ 003A ÷ # ÷ [0.2] LATIN SMALL LETTER A (ALetter) ÷ [999.0] COMMA (MidNum) × [4.0] COMBINING DIAERESIS (Extend_FE) ÷ [999.0] DIGIT ONE (Numeric) ÷ [999.0] COLON (MidLetter) ÷ [0.3] -÷ 0061 ÷ 002C ÷ 0031 ÷ 0027 ÷ # ÷ [0.2] LATIN SMALL LETTER A (ALetter) ÷ [999.0] COMMA (MidNum) ÷ [999.0] DIGIT ONE (Numeric) ÷ [999.0] APOSTROPHE (MidNumLet) ÷ [0.3] -÷ 0061 ÷ 002C × 0308 ÷ 0031 ÷ 0027 ÷ # ÷ [0.2] LATIN SMALL LETTER A (ALetter) ÷ [999.0] COMMA (MidNum) × [4.0] COMBINING DIAERESIS (Extend_FE) ÷ [999.0] DIGIT ONE (Numeric) ÷ [999.0] APOSTROPHE (MidNumLet) ÷ [0.3] +÷ 0061 ÷ 002C ÷ 0031 ÷ 0027 ÷ # ÷ [0.2] LATIN SMALL LETTER A (ALetter) ÷ [999.0] COMMA (MidNum) ÷ [999.0] DIGIT ONE (Numeric) ÷ [999.0] APOSTROPHE (Single_Quote) ÷ [0.3] +÷ 0061 ÷ 002C × 0308 ÷ 0031 ÷ 0027 ÷ # ÷ [0.2] LATIN SMALL LETTER A (ALetter) ÷ [999.0] COMMA (MidNum) × [4.0] COMBINING DIAERESIS (Extend_FE) ÷ [999.0] DIGIT ONE (Numeric) ÷ [999.0] APOSTROPHE (Single_Quote) ÷ [0.3] ÷ 0061 ÷ 002C ÷ 0031 ÷ 002C ÷ # ÷ [0.2] LATIN SMALL LETTER A (ALetter) ÷ [999.0] COMMA (MidNum) ÷ [999.0] DIGIT ONE (Numeric) ÷ [999.0] COMMA (MidNum) ÷ [0.3] ÷ 0061 ÷ 002C × 0308 ÷ 0031 ÷ 002C ÷ # ÷ [0.2] LATIN SMALL LETTER A (ALetter) ÷ [999.0] COMMA (MidNum) × [4.0] COMBINING DIAERESIS (Extend_FE) ÷ [999.0] DIGIT ONE (Numeric) ÷ [999.0] COMMA (MidNum) ÷ [0.3] ÷ 0061 ÷ 002C ÷ 0031 ÷ 002E × 2060 ÷ # ÷ [0.2] LATIN SMALL LETTER A (ALetter) ÷ [999.0] COMMA (MidNum) ÷ [999.0] DIGIT ONE (Numeric) ÷ [999.0] FULL STOP (MidNumLet) × [4.0] WORD JOINER (Format_FE) ÷ [0.3] @@ -910,14 +1180,20 @@ ÷ 0031 ÷ 003A × 0308 ÷ 003A ÷ # ÷ [0.2] DIGIT ONE (Numeric) ÷ [999.0] COLON (MidLetter) × [4.0] COMBINING DIAERESIS (Extend_FE) ÷ [999.0] COLON (MidLetter) ÷ [0.3] ÷ 0031 ÷ 003A ÷ 002C ÷ # ÷ [0.2] DIGIT ONE (Numeric) ÷ [999.0] COLON (MidLetter) ÷ [999.0] COMMA (MidNum) ÷ [0.3] ÷ 0031 ÷ 003A × 0308 ÷ 002C ÷ # ÷ [0.2] DIGIT ONE (Numeric) ÷ [999.0] COLON (MidLetter) × [4.0] COMBINING DIAERESIS (Extend_FE) ÷ [999.0] COMMA (MidNum) ÷ [0.3] -÷ 0031 ÷ 003A ÷ 0027 ÷ # ÷ [0.2] DIGIT ONE (Numeric) ÷ [999.0] COLON (MidLetter) ÷ [999.0] APOSTROPHE (MidNumLet) ÷ [0.3] -÷ 0031 ÷ 003A × 0308 ÷ 0027 ÷ # ÷ [0.2] DIGIT ONE (Numeric) ÷ [999.0] COLON (MidLetter) × [4.0] COMBINING DIAERESIS (Extend_FE) ÷ [999.0] APOSTROPHE (MidNumLet) ÷ [0.3] +÷ 0031 ÷ 003A ÷ 002E ÷ # ÷ [0.2] DIGIT ONE (Numeric) ÷ [999.0] COLON (MidLetter) ÷ [999.0] FULL STOP (MidNumLet) ÷ [0.3] +÷ 0031 ÷ 003A × 0308 ÷ 002E ÷ # ÷ [0.2] DIGIT ONE (Numeric) ÷ [999.0] COLON (MidLetter) × [4.0] COMBINING DIAERESIS (Extend_FE) ÷ [999.0] FULL STOP (MidNumLet) ÷ [0.3] ÷ 0031 ÷ 003A ÷ 0030 ÷ # ÷ [0.2] DIGIT ONE (Numeric) ÷ [999.0] COLON (MidLetter) ÷ [999.0] DIGIT ZERO (Numeric) ÷ [0.3] ÷ 0031 ÷ 003A × 0308 ÷ 0030 ÷ # ÷ [0.2] DIGIT ONE (Numeric) ÷ [999.0] COLON (MidLetter) × [4.0] COMBINING DIAERESIS (Extend_FE) ÷ [999.0] DIGIT ZERO (Numeric) ÷ [0.3] ÷ 0031 ÷ 003A ÷ 005F ÷ # ÷ [0.2] DIGIT ONE (Numeric) ÷ [999.0] COLON (MidLetter) ÷ [999.0] LOW LINE (ExtendNumLet) ÷ [0.3] ÷ 0031 ÷ 003A × 0308 ÷ 005F ÷ # ÷ [0.2] DIGIT ONE (Numeric) ÷ [999.0] COLON (MidLetter) × [4.0] COMBINING DIAERESIS (Extend_FE) ÷ [999.0] LOW LINE (ExtendNumLet) ÷ [0.3] ÷ 0031 ÷ 003A ÷ 1F1E6 ÷ # ÷ [0.2] DIGIT ONE (Numeric) ÷ [999.0] COLON (MidLetter) ÷ [999.0] REGIONAL INDICATOR SYMBOL LETTER A (Regional_Indicator) ÷ [0.3] ÷ 0031 ÷ 003A × 0308 ÷ 1F1E6 ÷ # ÷ [0.2] DIGIT ONE (Numeric) ÷ [999.0] COLON (MidLetter) × [4.0] COMBINING DIAERESIS (Extend_FE) ÷ [999.0] REGIONAL INDICATOR SYMBOL LETTER A (Regional_Indicator) ÷ [0.3] +÷ 0031 ÷ 003A ÷ 05D0 ÷ # ÷ [0.2] DIGIT ONE (Numeric) ÷ [999.0] COLON (MidLetter) ÷ [999.0] HEBREW LETTER ALEF (Hebrew_Letter) ÷ [0.3] +÷ 0031 ÷ 003A × 0308 ÷ 05D0 ÷ # ÷ [0.2] DIGIT ONE (Numeric) ÷ [999.0] COLON (MidLetter) × [4.0] COMBINING DIAERESIS (Extend_FE) ÷ [999.0] HEBREW LETTER ALEF (Hebrew_Letter) ÷ [0.3] +÷ 0031 ÷ 003A ÷ 0022 ÷ # ÷ [0.2] DIGIT ONE (Numeric) ÷ [999.0] COLON (MidLetter) ÷ [999.0] QUOTATION MARK (Double_Quote) ÷ [0.3] +÷ 0031 ÷ 003A × 0308 ÷ 0022 ÷ # ÷ [0.2] DIGIT ONE (Numeric) ÷ [999.0] COLON (MidLetter) × [4.0] COMBINING DIAERESIS (Extend_FE) ÷ [999.0] QUOTATION MARK (Double_Quote) ÷ [0.3] +÷ 0031 ÷ 003A ÷ 0027 ÷ # ÷ [0.2] DIGIT ONE (Numeric) ÷ [999.0] COLON (MidLetter) ÷ [999.0] APOSTROPHE (Single_Quote) ÷ [0.3] +÷ 0031 ÷ 003A × 0308 ÷ 0027 ÷ # ÷ [0.2] DIGIT ONE (Numeric) ÷ [999.0] COLON (MidLetter) × [4.0] COMBINING DIAERESIS (Extend_FE) ÷ [999.0] APOSTROPHE (Single_Quote) ÷ [0.3] ÷ 0031 ÷ 003A × 00AD ÷ # ÷ [0.2] DIGIT ONE (Numeric) ÷ [999.0] COLON (MidLetter) × [4.0] SOFT HYPHEN (Format_FE) ÷ [0.3] ÷ 0031 ÷ 003A × 0308 × 00AD ÷ # ÷ [0.2] DIGIT ONE (Numeric) ÷ [999.0] COLON (MidLetter) × [4.0] COMBINING DIAERESIS (Extend_FE) × [4.0] SOFT HYPHEN (Format_FE) ÷ [0.3] ÷ 0031 ÷ 003A × 0300 ÷ # ÷ [0.2] DIGIT ONE (Numeric) ÷ [999.0] COLON (MidLetter) × [4.0] COMBINING GRAVE ACCENT (Extend_FE) ÷ [0.3] @@ -926,66 +1202,72 @@ ÷ 0031 ÷ 003A × 0308 ÷ 0061 × 2060 ÷ # ÷ [0.2] DIGIT ONE (Numeric) ÷ [999.0] COLON (MidLetter) × [4.0] COMBINING DIAERESIS (Extend_FE) ÷ [999.0] LATIN SMALL LETTER A (ALetter) × [4.0] WORD JOINER (Format_FE) ÷ [0.3] ÷ 0031 ÷ 003A ÷ 0061 ÷ 003A ÷ # ÷ [0.2] DIGIT ONE (Numeric) ÷ [999.0] COLON (MidLetter) ÷ [999.0] LATIN SMALL LETTER A (ALetter) ÷ [999.0] COLON (MidLetter) ÷ [0.3] ÷ 0031 ÷ 003A × 0308 ÷ 0061 ÷ 003A ÷ # ÷ [0.2] DIGIT ONE (Numeric) ÷ [999.0] COLON (MidLetter) × [4.0] COMBINING DIAERESIS (Extend_FE) ÷ [999.0] LATIN SMALL LETTER A (ALetter) ÷ [999.0] COLON (MidLetter) ÷ [0.3] -÷ 0031 ÷ 003A ÷ 0061 ÷ 0027 ÷ # ÷ [0.2] DIGIT ONE (Numeric) ÷ [999.0] COLON (MidLetter) ÷ [999.0] LATIN SMALL LETTER A (ALetter) ÷ [999.0] APOSTROPHE (MidNumLet) ÷ [0.3] -÷ 0031 ÷ 003A × 0308 ÷ 0061 ÷ 0027 ÷ # ÷ [0.2] DIGIT ONE (Numeric) ÷ [999.0] COLON (MidLetter) × [4.0] COMBINING DIAERESIS (Extend_FE) ÷ [999.0] LATIN SMALL LETTER A (ALetter) ÷ [999.0] APOSTROPHE (MidNumLet) ÷ [0.3] -÷ 0031 ÷ 003A ÷ 0061 ÷ 0027 × 2060 ÷ # ÷ [0.2] DIGIT ONE (Numeric) ÷ [999.0] COLON (MidLetter) ÷ [999.0] LATIN SMALL LETTER A (ALetter) ÷ [999.0] APOSTROPHE (MidNumLet) × [4.0] WORD JOINER (Format_FE) ÷ [0.3] -÷ 0031 ÷ 003A × 0308 ÷ 0061 ÷ 0027 × 2060 ÷ # ÷ [0.2] DIGIT ONE (Numeric) ÷ [999.0] COLON (MidLetter) × [4.0] COMBINING DIAERESIS (Extend_FE) ÷ [999.0] LATIN SMALL LETTER A (ALetter) ÷ [999.0] APOSTROPHE (MidNumLet) × [4.0] WORD JOINER (Format_FE) ÷ [0.3] +÷ 0031 ÷ 003A ÷ 0061 ÷ 0027 ÷ # ÷ [0.2] DIGIT ONE (Numeric) ÷ [999.0] COLON (MidLetter) ÷ [999.0] LATIN SMALL LETTER A (ALetter) ÷ [999.0] APOSTROPHE (Single_Quote) ÷ [0.3] +÷ 0031 ÷ 003A × 0308 ÷ 0061 ÷ 0027 ÷ # ÷ [0.2] DIGIT ONE (Numeric) ÷ [999.0] COLON (MidLetter) × [4.0] COMBINING DIAERESIS (Extend_FE) ÷ [999.0] LATIN SMALL LETTER A (ALetter) ÷ [999.0] APOSTROPHE (Single_Quote) ÷ [0.3] +÷ 0031 ÷ 003A ÷ 0061 ÷ 0027 × 2060 ÷ # ÷ [0.2] DIGIT ONE (Numeric) ÷ [999.0] COLON (MidLetter) ÷ [999.0] LATIN SMALL LETTER A (ALetter) ÷ [999.0] APOSTROPHE (Single_Quote) × [4.0] WORD JOINER (Format_FE) ÷ [0.3] +÷ 0031 ÷ 003A × 0308 ÷ 0061 ÷ 0027 × 2060 ÷ # ÷ [0.2] DIGIT ONE (Numeric) ÷ [999.0] COLON (MidLetter) × [4.0] COMBINING DIAERESIS (Extend_FE) ÷ [999.0] LATIN SMALL LETTER A (ALetter) ÷ [999.0] APOSTROPHE (Single_Quote) × [4.0] WORD JOINER (Format_FE) ÷ [0.3] ÷ 0031 ÷ 003A ÷ 0061 ÷ 002C ÷ # ÷ [0.2] DIGIT ONE (Numeric) ÷ [999.0] COLON (MidLetter) ÷ [999.0] LATIN SMALL LETTER A (ALetter) ÷ [999.0] COMMA (MidNum) ÷ [0.3] ÷ 0031 ÷ 003A × 0308 ÷ 0061 ÷ 002C ÷ # ÷ [0.2] DIGIT ONE (Numeric) ÷ [999.0] COLON (MidLetter) × [4.0] COMBINING DIAERESIS (Extend_FE) ÷ [999.0] LATIN SMALL LETTER A (ALetter) ÷ [999.0] COMMA (MidNum) ÷ [0.3] ÷ 0031 ÷ 003A ÷ 0031 ÷ 003A ÷ # ÷ [0.2] DIGIT ONE (Numeric) ÷ [999.0] COLON (MidLetter) ÷ [999.0] DIGIT ONE (Numeric) ÷ [999.0] COLON (MidLetter) ÷ [0.3] ÷ 0031 ÷ 003A × 0308 ÷ 0031 ÷ 003A ÷ # ÷ [0.2] DIGIT ONE (Numeric) ÷ [999.0] COLON (MidLetter) × [4.0] COMBINING DIAERESIS (Extend_FE) ÷ [999.0] DIGIT ONE (Numeric) ÷ [999.0] COLON (MidLetter) ÷ [0.3] -÷ 0031 ÷ 003A ÷ 0031 ÷ 0027 ÷ # ÷ [0.2] DIGIT ONE (Numeric) ÷ [999.0] COLON (MidLetter) ÷ [999.0] DIGIT ONE (Numeric) ÷ [999.0] APOSTROPHE (MidNumLet) ÷ [0.3] -÷ 0031 ÷ 003A × 0308 ÷ 0031 ÷ 0027 ÷ # ÷ [0.2] DIGIT ONE (Numeric) ÷ [999.0] COLON (MidLetter) × [4.0] COMBINING DIAERESIS (Extend_FE) ÷ [999.0] DIGIT ONE (Numeric) ÷ [999.0] APOSTROPHE (MidNumLet) ÷ [0.3] +÷ 0031 ÷ 003A ÷ 0031 ÷ 0027 ÷ # ÷ [0.2] DIGIT ONE (Numeric) ÷ [999.0] COLON (MidLetter) ÷ [999.0] DIGIT ONE (Numeric) ÷ [999.0] APOSTROPHE (Single_Quote) ÷ [0.3] +÷ 0031 ÷ 003A × 0308 ÷ 0031 ÷ 0027 ÷ # ÷ [0.2] DIGIT ONE (Numeric) ÷ [999.0] COLON (MidLetter) × [4.0] COMBINING DIAERESIS (Extend_FE) ÷ [999.0] DIGIT ONE (Numeric) ÷ [999.0] APOSTROPHE (Single_Quote) ÷ [0.3] ÷ 0031 ÷ 003A ÷ 0031 ÷ 002C ÷ # ÷ [0.2] DIGIT ONE (Numeric) ÷ [999.0] COLON (MidLetter) ÷ [999.0] DIGIT ONE (Numeric) ÷ [999.0] COMMA (MidNum) ÷ [0.3] ÷ 0031 ÷ 003A × 0308 ÷ 0031 ÷ 002C ÷ # ÷ [0.2] DIGIT ONE (Numeric) ÷ [999.0] COLON (MidLetter) × [4.0] COMBINING DIAERESIS (Extend_FE) ÷ [999.0] DIGIT ONE (Numeric) ÷ [999.0] COMMA (MidNum) ÷ [0.3] ÷ 0031 ÷ 003A ÷ 0031 ÷ 002E × 2060 ÷ # ÷ [0.2] DIGIT ONE (Numeric) ÷ [999.0] COLON (MidLetter) ÷ [999.0] DIGIT ONE (Numeric) ÷ [999.0] FULL STOP (MidNumLet) × [4.0] WORD JOINER (Format_FE) ÷ [0.3] ÷ 0031 ÷ 003A × 0308 ÷ 0031 ÷ 002E × 2060 ÷ # ÷ [0.2] DIGIT ONE (Numeric) ÷ [999.0] COLON (MidLetter) × [4.0] COMBINING DIAERESIS (Extend_FE) ÷ [999.0] DIGIT ONE (Numeric) ÷ [999.0] FULL STOP (MidNumLet) × [4.0] WORD JOINER (Format_FE) ÷ [0.3] -÷ 0031 ÷ 0027 ÷ 0001 ÷ # ÷ [0.2] DIGIT ONE (Numeric) ÷ [999.0] APOSTROPHE (MidNumLet) ÷ [999.0] (Other) ÷ [0.3] -÷ 0031 ÷ 0027 × 0308 ÷ 0001 ÷ # ÷ [0.2] DIGIT ONE (Numeric) ÷ [999.0] APOSTROPHE (MidNumLet) × [4.0] COMBINING DIAERESIS (Extend_FE) ÷ [999.0] (Other) ÷ [0.3] -÷ 0031 ÷ 0027 ÷ 000D ÷ # ÷ [0.2] DIGIT ONE (Numeric) ÷ [999.0] APOSTROPHE (MidNumLet) ÷ [3.2] (CR) ÷ [0.3] -÷ 0031 ÷ 0027 × 0308 ÷ 000D ÷ # ÷ [0.2] DIGIT ONE (Numeric) ÷ [999.0] APOSTROPHE (MidNumLet) × [4.0] COMBINING DIAERESIS (Extend_FE) ÷ [3.2] (CR) ÷ [0.3] -÷ 0031 ÷ 0027 ÷ 000A ÷ # ÷ [0.2] DIGIT ONE (Numeric) ÷ [999.0] APOSTROPHE (MidNumLet) ÷ [3.2] (LF) ÷ [0.3] -÷ 0031 ÷ 0027 × 0308 ÷ 000A ÷ # ÷ [0.2] DIGIT ONE (Numeric) ÷ [999.0] APOSTROPHE (MidNumLet) × [4.0] COMBINING DIAERESIS (Extend_FE) ÷ [3.2] (LF) ÷ [0.3] -÷ 0031 ÷ 0027 ÷ 000B ÷ # ÷ [0.2] DIGIT ONE (Numeric) ÷ [999.0] APOSTROPHE (MidNumLet) ÷ [3.2] (Newline) ÷ [0.3] -÷ 0031 ÷ 0027 × 0308 ÷ 000B ÷ # ÷ [0.2] DIGIT ONE (Numeric) ÷ [999.0] APOSTROPHE (MidNumLet) × [4.0] COMBINING DIAERESIS (Extend_FE) ÷ [3.2] (Newline) ÷ [0.3] -÷ 0031 ÷ 0027 ÷ 3031 ÷ # ÷ [0.2] DIGIT ONE (Numeric) ÷ [999.0] APOSTROPHE (MidNumLet) ÷ [999.0] VERTICAL KANA REPEAT MARK (Katakana) ÷ [0.3] -÷ 0031 ÷ 0027 × 0308 ÷ 3031 ÷ # ÷ [0.2] DIGIT ONE (Numeric) ÷ [999.0] APOSTROPHE (MidNumLet) × [4.0] COMBINING DIAERESIS (Extend_FE) ÷ [999.0] VERTICAL KANA REPEAT MARK (Katakana) ÷ [0.3] -÷ 0031 ÷ 0027 ÷ 0041 ÷ # ÷ [0.2] DIGIT ONE (Numeric) ÷ [999.0] APOSTROPHE (MidNumLet) ÷ [999.0] LATIN CAPITAL LETTER A (ALetter) ÷ [0.3] -÷ 0031 ÷ 0027 × 0308 ÷ 0041 ÷ # ÷ [0.2] DIGIT ONE (Numeric) ÷ [999.0] APOSTROPHE (MidNumLet) × [4.0] COMBINING DIAERESIS (Extend_FE) ÷ [999.0] LATIN CAPITAL LETTER A (ALetter) ÷ [0.3] -÷ 0031 ÷ 0027 ÷ 003A ÷ # ÷ [0.2] DIGIT ONE (Numeric) ÷ [999.0] APOSTROPHE (MidNumLet) ÷ [999.0] COLON (MidLetter) ÷ [0.3] -÷ 0031 ÷ 0027 × 0308 ÷ 003A ÷ # ÷ [0.2] DIGIT ONE (Numeric) ÷ [999.0] APOSTROPHE (MidNumLet) × [4.0] COMBINING DIAERESIS (Extend_FE) ÷ [999.0] COLON (MidLetter) ÷ [0.3] -÷ 0031 ÷ 0027 ÷ 002C ÷ # ÷ [0.2] DIGIT ONE (Numeric) ÷ [999.0] APOSTROPHE (MidNumLet) ÷ [999.0] COMMA (MidNum) ÷ [0.3] -÷ 0031 ÷ 0027 × 0308 ÷ 002C ÷ # ÷ [0.2] DIGIT ONE (Numeric) ÷ [999.0] APOSTROPHE (MidNumLet) × [4.0] COMBINING DIAERESIS (Extend_FE) ÷ [999.0] COMMA (MidNum) ÷ [0.3] -÷ 0031 ÷ 0027 ÷ 0027 ÷ # ÷ [0.2] DIGIT ONE (Numeric) ÷ [999.0] APOSTROPHE (MidNumLet) ÷ [999.0] APOSTROPHE (MidNumLet) ÷ [0.3] -÷ 0031 ÷ 0027 × 0308 ÷ 0027 ÷ # ÷ [0.2] DIGIT ONE (Numeric) ÷ [999.0] APOSTROPHE (MidNumLet) × [4.0] COMBINING DIAERESIS (Extend_FE) ÷ [999.0] APOSTROPHE (MidNumLet) ÷ [0.3] -÷ 0031 × 0027 × 0030 ÷ # ÷ [0.2] DIGIT ONE (Numeric) × [12.0] APOSTROPHE (MidNumLet) × [11.0] DIGIT ZERO (Numeric) ÷ [0.3] -÷ 0031 × 0027 × 0308 × 0030 ÷ # ÷ [0.2] DIGIT ONE (Numeric) × [12.0] APOSTROPHE (MidNumLet) × [4.0] COMBINING DIAERESIS (Extend_FE) × [11.0] DIGIT ZERO (Numeric) ÷ [0.3] -÷ 0031 ÷ 0027 ÷ 005F ÷ # ÷ [0.2] DIGIT ONE (Numeric) ÷ [999.0] APOSTROPHE (MidNumLet) ÷ [999.0] LOW LINE (ExtendNumLet) ÷ [0.3] -÷ 0031 ÷ 0027 × 0308 ÷ 005F ÷ # ÷ [0.2] DIGIT ONE (Numeric) ÷ [999.0] APOSTROPHE (MidNumLet) × [4.0] COMBINING DIAERESIS (Extend_FE) ÷ [999.0] LOW LINE (ExtendNumLet) ÷ [0.3] -÷ 0031 ÷ 0027 ÷ 1F1E6 ÷ # ÷ [0.2] DIGIT ONE (Numeric) ÷ [999.0] APOSTROPHE (MidNumLet) ÷ [999.0] REGIONAL INDICATOR SYMBOL LETTER A (Regional_Indicator) ÷ [0.3] -÷ 0031 ÷ 0027 × 0308 ÷ 1F1E6 ÷ # ÷ [0.2] DIGIT ONE (Numeric) ÷ [999.0] APOSTROPHE (MidNumLet) × [4.0] COMBINING DIAERESIS (Extend_FE) ÷ [999.0] REGIONAL INDICATOR SYMBOL LETTER A (Regional_Indicator) ÷ [0.3] -÷ 0031 ÷ 0027 × 00AD ÷ # ÷ [0.2] DIGIT ONE (Numeric) ÷ [999.0] APOSTROPHE (MidNumLet) × [4.0] SOFT HYPHEN (Format_FE) ÷ [0.3] -÷ 0031 ÷ 0027 × 0308 × 00AD ÷ # ÷ [0.2] DIGIT ONE (Numeric) ÷ [999.0] APOSTROPHE (MidNumLet) × [4.0] COMBINING DIAERESIS (Extend_FE) × [4.0] SOFT HYPHEN (Format_FE) ÷ [0.3] -÷ 0031 ÷ 0027 × 0300 ÷ # ÷ [0.2] DIGIT ONE (Numeric) ÷ [999.0] APOSTROPHE (MidNumLet) × [4.0] COMBINING GRAVE ACCENT (Extend_FE) ÷ [0.3] -÷ 0031 ÷ 0027 × 0308 × 0300 ÷ # ÷ [0.2] DIGIT ONE (Numeric) ÷ [999.0] APOSTROPHE (MidNumLet) × [4.0] COMBINING DIAERESIS (Extend_FE) × [4.0] COMBINING GRAVE ACCENT (Extend_FE) ÷ [0.3] -÷ 0031 ÷ 0027 ÷ 0061 × 2060 ÷ # ÷ [0.2] DIGIT ONE (Numeric) ÷ [999.0] APOSTROPHE (MidNumLet) ÷ [999.0] LATIN SMALL LETTER A (ALetter) × [4.0] WORD JOINER (Format_FE) ÷ [0.3] -÷ 0031 ÷ 0027 × 0308 ÷ 0061 × 2060 ÷ # ÷ [0.2] DIGIT ONE (Numeric) ÷ [999.0] APOSTROPHE (MidNumLet) × [4.0] COMBINING DIAERESIS (Extend_FE) ÷ [999.0] LATIN SMALL LETTER A (ALetter) × [4.0] WORD JOINER (Format_FE) ÷ [0.3] -÷ 0031 ÷ 0027 ÷ 0061 ÷ 003A ÷ # ÷ [0.2] DIGIT ONE (Numeric) ÷ [999.0] APOSTROPHE (MidNumLet) ÷ [999.0] LATIN SMALL LETTER A (ALetter) ÷ [999.0] COLON (MidLetter) ÷ [0.3] -÷ 0031 ÷ 0027 × 0308 ÷ 0061 ÷ 003A ÷ # ÷ [0.2] DIGIT ONE (Numeric) ÷ [999.0] APOSTROPHE (MidNumLet) × [4.0] COMBINING DIAERESIS (Extend_FE) ÷ [999.0] LATIN SMALL LETTER A (ALetter) ÷ [999.0] COLON (MidLetter) ÷ [0.3] -÷ 0031 ÷ 0027 ÷ 0061 ÷ 0027 ÷ # ÷ [0.2] DIGIT ONE (Numeric) ÷ [999.0] APOSTROPHE (MidNumLet) ÷ [999.0] LATIN SMALL LETTER A (ALetter) ÷ [999.0] APOSTROPHE (MidNumLet) ÷ [0.3] -÷ 0031 ÷ 0027 × 0308 ÷ 0061 ÷ 0027 ÷ # ÷ [0.2] DIGIT ONE (Numeric) ÷ [999.0] APOSTROPHE (MidNumLet) × [4.0] COMBINING DIAERESIS (Extend_FE) ÷ [999.0] LATIN SMALL LETTER A (ALetter) ÷ [999.0] APOSTROPHE (MidNumLet) ÷ [0.3] -÷ 0031 ÷ 0027 ÷ 0061 ÷ 0027 × 2060 ÷ # ÷ [0.2] DIGIT ONE (Numeric) ÷ [999.0] APOSTROPHE (MidNumLet) ÷ [999.0] LATIN SMALL LETTER A (ALetter) ÷ [999.0] APOSTROPHE (MidNumLet) × [4.0] WORD JOINER (Format_FE) ÷ [0.3] -÷ 0031 ÷ 0027 × 0308 ÷ 0061 ÷ 0027 × 2060 ÷ # ÷ [0.2] DIGIT ONE (Numeric) ÷ [999.0] APOSTROPHE (MidNumLet) × [4.0] COMBINING DIAERESIS (Extend_FE) ÷ [999.0] LATIN SMALL LETTER A (ALetter) ÷ [999.0] APOSTROPHE (MidNumLet) × [4.0] WORD JOINER (Format_FE) ÷ [0.3] -÷ 0031 ÷ 0027 ÷ 0061 ÷ 002C ÷ # ÷ [0.2] DIGIT ONE (Numeric) ÷ [999.0] APOSTROPHE (MidNumLet) ÷ [999.0] LATIN SMALL LETTER A (ALetter) ÷ [999.0] COMMA (MidNum) ÷ [0.3] -÷ 0031 ÷ 0027 × 0308 ÷ 0061 ÷ 002C ÷ # ÷ [0.2] DIGIT ONE (Numeric) ÷ [999.0] APOSTROPHE (MidNumLet) × [4.0] COMBINING DIAERESIS (Extend_FE) ÷ [999.0] LATIN SMALL LETTER A (ALetter) ÷ [999.0] COMMA (MidNum) ÷ [0.3] -÷ 0031 × 0027 × 0031 ÷ 003A ÷ # ÷ [0.2] DIGIT ONE (Numeric) × [12.0] APOSTROPHE (MidNumLet) × [11.0] DIGIT ONE (Numeric) ÷ [999.0] COLON (MidLetter) ÷ [0.3] -÷ 0031 × 0027 × 0308 × 0031 ÷ 003A ÷ # ÷ [0.2] DIGIT ONE (Numeric) × [12.0] APOSTROPHE (MidNumLet) × [4.0] COMBINING DIAERESIS (Extend_FE) × [11.0] DIGIT ONE (Numeric) ÷ [999.0] COLON (MidLetter) ÷ [0.3] -÷ 0031 × 0027 × 0031 ÷ 0027 ÷ # ÷ [0.2] DIGIT ONE (Numeric) × [12.0] APOSTROPHE (MidNumLet) × [11.0] DIGIT ONE (Numeric) ÷ [999.0] APOSTROPHE (MidNumLet) ÷ [0.3] -÷ 0031 × 0027 × 0308 × 0031 ÷ 0027 ÷ # ÷ [0.2] DIGIT ONE (Numeric) × [12.0] APOSTROPHE (MidNumLet) × [4.0] COMBINING DIAERESIS (Extend_FE) × [11.0] DIGIT ONE (Numeric) ÷ [999.0] APOSTROPHE (MidNumLet) ÷ [0.3] -÷ 0031 × 0027 × 0031 ÷ 002C ÷ # ÷ [0.2] DIGIT ONE (Numeric) × [12.0] APOSTROPHE (MidNumLet) × [11.0] DIGIT ONE (Numeric) ÷ [999.0] COMMA (MidNum) ÷ [0.3] -÷ 0031 × 0027 × 0308 × 0031 ÷ 002C ÷ # ÷ [0.2] DIGIT ONE (Numeric) × [12.0] APOSTROPHE (MidNumLet) × [4.0] COMBINING DIAERESIS (Extend_FE) × [11.0] DIGIT ONE (Numeric) ÷ [999.0] COMMA (MidNum) ÷ [0.3] -÷ 0031 × 0027 × 0031 ÷ 002E × 2060 ÷ # ÷ [0.2] DIGIT ONE (Numeric) × [12.0] APOSTROPHE (MidNumLet) × [11.0] DIGIT ONE (Numeric) ÷ [999.0] FULL STOP (MidNumLet) × [4.0] WORD JOINER (Format_FE) ÷ [0.3] -÷ 0031 × 0027 × 0308 × 0031 ÷ 002E × 2060 ÷ # ÷ [0.2] DIGIT ONE (Numeric) × [12.0] APOSTROPHE (MidNumLet) × [4.0] COMBINING DIAERESIS (Extend_FE) × [11.0] DIGIT ONE (Numeric) ÷ [999.0] FULL STOP (MidNumLet) × [4.0] WORD JOINER (Format_FE) ÷ [0.3] +÷ 0031 ÷ 0027 ÷ 0001 ÷ # ÷ [0.2] DIGIT ONE (Numeric) ÷ [999.0] APOSTROPHE (Single_Quote) ÷ [999.0] (Other) ÷ [0.3] +÷ 0031 ÷ 0027 × 0308 ÷ 0001 ÷ # ÷ [0.2] DIGIT ONE (Numeric) ÷ [999.0] APOSTROPHE (Single_Quote) × [4.0] COMBINING DIAERESIS (Extend_FE) ÷ [999.0] (Other) ÷ [0.3] +÷ 0031 ÷ 0027 ÷ 000D ÷ # ÷ [0.2] DIGIT ONE (Numeric) ÷ [999.0] APOSTROPHE (Single_Quote) ÷ [3.2] (CR) ÷ [0.3] +÷ 0031 ÷ 0027 × 0308 ÷ 000D ÷ # ÷ [0.2] DIGIT ONE (Numeric) ÷ [999.0] APOSTROPHE (Single_Quote) × [4.0] COMBINING DIAERESIS (Extend_FE) ÷ [3.2] (CR) ÷ [0.3] +÷ 0031 ÷ 0027 ÷ 000A ÷ # ÷ [0.2] DIGIT ONE (Numeric) ÷ [999.0] APOSTROPHE (Single_Quote) ÷ [3.2] (LF) ÷ [0.3] +÷ 0031 ÷ 0027 × 0308 ÷ 000A ÷ # ÷ [0.2] DIGIT ONE (Numeric) ÷ [999.0] APOSTROPHE (Single_Quote) × [4.0] COMBINING DIAERESIS (Extend_FE) ÷ [3.2] (LF) ÷ [0.3] +÷ 0031 ÷ 0027 ÷ 000B ÷ # ÷ [0.2] DIGIT ONE (Numeric) ÷ [999.0] APOSTROPHE (Single_Quote) ÷ [3.2] (Newline) ÷ [0.3] +÷ 0031 ÷ 0027 × 0308 ÷ 000B ÷ # ÷ [0.2] DIGIT ONE (Numeric) ÷ [999.0] APOSTROPHE (Single_Quote) × [4.0] COMBINING DIAERESIS (Extend_FE) ÷ [3.2] (Newline) ÷ [0.3] +÷ 0031 ÷ 0027 ÷ 3031 ÷ # ÷ [0.2] DIGIT ONE (Numeric) ÷ [999.0] APOSTROPHE (Single_Quote) ÷ [999.0] VERTICAL KANA REPEAT MARK (Katakana) ÷ [0.3] +÷ 0031 ÷ 0027 × 0308 ÷ 3031 ÷ # ÷ [0.2] DIGIT ONE (Numeric) ÷ [999.0] APOSTROPHE (Single_Quote) × [4.0] COMBINING DIAERESIS (Extend_FE) ÷ [999.0] VERTICAL KANA REPEAT MARK (Katakana) ÷ [0.3] +÷ 0031 ÷ 0027 ÷ 0041 ÷ # ÷ [0.2] DIGIT ONE (Numeric) ÷ [999.0] APOSTROPHE (Single_Quote) ÷ [999.0] LATIN CAPITAL LETTER A (ALetter) ÷ [0.3] +÷ 0031 ÷ 0027 × 0308 ÷ 0041 ÷ # ÷ [0.2] DIGIT ONE (Numeric) ÷ [999.0] APOSTROPHE (Single_Quote) × [4.0] COMBINING DIAERESIS (Extend_FE) ÷ [999.0] LATIN CAPITAL LETTER A (ALetter) ÷ [0.3] +÷ 0031 ÷ 0027 ÷ 003A ÷ # ÷ [0.2] DIGIT ONE (Numeric) ÷ [999.0] APOSTROPHE (Single_Quote) ÷ [999.0] COLON (MidLetter) ÷ [0.3] +÷ 0031 ÷ 0027 × 0308 ÷ 003A ÷ # ÷ [0.2] DIGIT ONE (Numeric) ÷ [999.0] APOSTROPHE (Single_Quote) × [4.0] COMBINING DIAERESIS (Extend_FE) ÷ [999.0] COLON (MidLetter) ÷ [0.3] +÷ 0031 ÷ 0027 ÷ 002C ÷ # ÷ [0.2] DIGIT ONE (Numeric) ÷ [999.0] APOSTROPHE (Single_Quote) ÷ [999.0] COMMA (MidNum) ÷ [0.3] +÷ 0031 ÷ 0027 × 0308 ÷ 002C ÷ # ÷ [0.2] DIGIT ONE (Numeric) ÷ [999.0] APOSTROPHE (Single_Quote) × [4.0] COMBINING DIAERESIS (Extend_FE) ÷ [999.0] COMMA (MidNum) ÷ [0.3] +÷ 0031 ÷ 0027 ÷ 002E ÷ # ÷ [0.2] DIGIT ONE (Numeric) ÷ [999.0] APOSTROPHE (Single_Quote) ÷ [999.0] FULL STOP (MidNumLet) ÷ [0.3] +÷ 0031 ÷ 0027 × 0308 ÷ 002E ÷ # ÷ [0.2] DIGIT ONE (Numeric) ÷ [999.0] APOSTROPHE (Single_Quote) × [4.0] COMBINING DIAERESIS (Extend_FE) ÷ [999.0] FULL STOP (MidNumLet) ÷ [0.3] +÷ 0031 × 0027 × 0030 ÷ # ÷ [0.2] DIGIT ONE (Numeric) × [12.0] APOSTROPHE (Single_Quote) × [11.0] DIGIT ZERO (Numeric) ÷ [0.3] +÷ 0031 × 0027 × 0308 × 0030 ÷ # ÷ [0.2] DIGIT ONE (Numeric) × [12.0] APOSTROPHE (Single_Quote) × [4.0] COMBINING DIAERESIS (Extend_FE) × [11.0] DIGIT ZERO (Numeric) ÷ [0.3] +÷ 0031 ÷ 0027 ÷ 005F ÷ # ÷ [0.2] DIGIT ONE (Numeric) ÷ [999.0] APOSTROPHE (Single_Quote) ÷ [999.0] LOW LINE (ExtendNumLet) ÷ [0.3] +÷ 0031 ÷ 0027 × 0308 ÷ 005F ÷ # ÷ [0.2] DIGIT ONE (Numeric) ÷ [999.0] APOSTROPHE (Single_Quote) × [4.0] COMBINING DIAERESIS (Extend_FE) ÷ [999.0] LOW LINE (ExtendNumLet) ÷ [0.3] +÷ 0031 ÷ 0027 ÷ 1F1E6 ÷ # ÷ [0.2] DIGIT ONE (Numeric) ÷ [999.0] APOSTROPHE (Single_Quote) ÷ [999.0] REGIONAL INDICATOR SYMBOL LETTER A (Regional_Indicator) ÷ [0.3] +÷ 0031 ÷ 0027 × 0308 ÷ 1F1E6 ÷ # ÷ [0.2] DIGIT ONE (Numeric) ÷ [999.0] APOSTROPHE (Single_Quote) × [4.0] COMBINING DIAERESIS (Extend_FE) ÷ [999.0] REGIONAL INDICATOR SYMBOL LETTER A (Regional_Indicator) ÷ [0.3] +÷ 0031 ÷ 0027 ÷ 05D0 ÷ # ÷ [0.2] DIGIT ONE (Numeric) ÷ [999.0] APOSTROPHE (Single_Quote) ÷ [999.0] HEBREW LETTER ALEF (Hebrew_Letter) ÷ [0.3] +÷ 0031 ÷ 0027 × 0308 ÷ 05D0 ÷ # ÷ [0.2] DIGIT ONE (Numeric) ÷ [999.0] APOSTROPHE (Single_Quote) × [4.0] COMBINING DIAERESIS (Extend_FE) ÷ [999.0] HEBREW LETTER ALEF (Hebrew_Letter) ÷ [0.3] +÷ 0031 ÷ 0027 ÷ 0022 ÷ # ÷ [0.2] DIGIT ONE (Numeric) ÷ [999.0] APOSTROPHE (Single_Quote) ÷ [999.0] QUOTATION MARK (Double_Quote) ÷ [0.3] +÷ 0031 ÷ 0027 × 0308 ÷ 0022 ÷ # ÷ [0.2] DIGIT ONE (Numeric) ÷ [999.0] APOSTROPHE (Single_Quote) × [4.0] COMBINING DIAERESIS (Extend_FE) ÷ [999.0] QUOTATION MARK (Double_Quote) ÷ [0.3] +÷ 0031 ÷ 0027 ÷ 0027 ÷ # ÷ [0.2] DIGIT ONE (Numeric) ÷ [999.0] APOSTROPHE (Single_Quote) ÷ [999.0] APOSTROPHE (Single_Quote) ÷ [0.3] +÷ 0031 ÷ 0027 × 0308 ÷ 0027 ÷ # ÷ [0.2] DIGIT ONE (Numeric) ÷ [999.0] APOSTROPHE (Single_Quote) × [4.0] COMBINING DIAERESIS (Extend_FE) ÷ [999.0] APOSTROPHE (Single_Quote) ÷ [0.3] +÷ 0031 ÷ 0027 × 00AD ÷ # ÷ [0.2] DIGIT ONE (Numeric) ÷ [999.0] APOSTROPHE (Single_Quote) × [4.0] SOFT HYPHEN (Format_FE) ÷ [0.3] +÷ 0031 ÷ 0027 × 0308 × 00AD ÷ # ÷ [0.2] DIGIT ONE (Numeric) ÷ [999.0] APOSTROPHE (Single_Quote) × [4.0] COMBINING DIAERESIS (Extend_FE) × [4.0] SOFT HYPHEN (Format_FE) ÷ [0.3] +÷ 0031 ÷ 0027 × 0300 ÷ # ÷ [0.2] DIGIT ONE (Numeric) ÷ [999.0] APOSTROPHE (Single_Quote) × [4.0] COMBINING GRAVE ACCENT (Extend_FE) ÷ [0.3] +÷ 0031 ÷ 0027 × 0308 × 0300 ÷ # ÷ [0.2] DIGIT ONE (Numeric) ÷ [999.0] APOSTROPHE (Single_Quote) × [4.0] COMBINING DIAERESIS (Extend_FE) × [4.0] COMBINING GRAVE ACCENT (Extend_FE) ÷ [0.3] +÷ 0031 ÷ 0027 ÷ 0061 × 2060 ÷ # ÷ [0.2] DIGIT ONE (Numeric) ÷ [999.0] APOSTROPHE (Single_Quote) ÷ [999.0] LATIN SMALL LETTER A (ALetter) × [4.0] WORD JOINER (Format_FE) ÷ [0.3] +÷ 0031 ÷ 0027 × 0308 ÷ 0061 × 2060 ÷ # ÷ [0.2] DIGIT ONE (Numeric) ÷ [999.0] APOSTROPHE (Single_Quote) × [4.0] COMBINING DIAERESIS (Extend_FE) ÷ [999.0] LATIN SMALL LETTER A (ALetter) × [4.0] WORD JOINER (Format_FE) ÷ [0.3] +÷ 0031 ÷ 0027 ÷ 0061 ÷ 003A ÷ # ÷ [0.2] DIGIT ONE (Numeric) ÷ [999.0] APOSTROPHE (Single_Quote) ÷ [999.0] LATIN SMALL LETTER A (ALetter) ÷ [999.0] COLON (MidLetter) ÷ [0.3] +÷ 0031 ÷ 0027 × 0308 ÷ 0061 ÷ 003A ÷ # ÷ [0.2] DIGIT ONE (Numeric) ÷ [999.0] APOSTROPHE (Single_Quote) × [4.0] COMBINING DIAERESIS (Extend_FE) ÷ [999.0] LATIN SMALL LETTER A (ALetter) ÷ [999.0] COLON (MidLetter) ÷ [0.3] +÷ 0031 ÷ 0027 ÷ 0061 ÷ 0027 ÷ # ÷ [0.2] DIGIT ONE (Numeric) ÷ [999.0] APOSTROPHE (Single_Quote) ÷ [999.0] LATIN SMALL LETTER A (ALetter) ÷ [999.0] APOSTROPHE (Single_Quote) ÷ [0.3] +÷ 0031 ÷ 0027 × 0308 ÷ 0061 ÷ 0027 ÷ # ÷ [0.2] DIGIT ONE (Numeric) ÷ [999.0] APOSTROPHE (Single_Quote) × [4.0] COMBINING DIAERESIS (Extend_FE) ÷ [999.0] LATIN SMALL LETTER A (ALetter) ÷ [999.0] APOSTROPHE (Single_Quote) ÷ [0.3] +÷ 0031 ÷ 0027 ÷ 0061 ÷ 0027 × 2060 ÷ # ÷ [0.2] DIGIT ONE (Numeric) ÷ [999.0] APOSTROPHE (Single_Quote) ÷ [999.0] LATIN SMALL LETTER A (ALetter) ÷ [999.0] APOSTROPHE (Single_Quote) × [4.0] WORD JOINER (Format_FE) ÷ [0.3] +÷ 0031 ÷ 0027 × 0308 ÷ 0061 ÷ 0027 × 2060 ÷ # ÷ [0.2] DIGIT ONE (Numeric) ÷ [999.0] APOSTROPHE (Single_Quote) × [4.0] COMBINING DIAERESIS (Extend_FE) ÷ [999.0] LATIN SMALL LETTER A (ALetter) ÷ [999.0] APOSTROPHE (Single_Quote) × [4.0] WORD JOINER (Format_FE) ÷ [0.3] +÷ 0031 ÷ 0027 ÷ 0061 ÷ 002C ÷ # ÷ [0.2] DIGIT ONE (Numeric) ÷ [999.0] APOSTROPHE (Single_Quote) ÷ [999.0] LATIN SMALL LETTER A (ALetter) ÷ [999.0] COMMA (MidNum) ÷ [0.3] +÷ 0031 ÷ 0027 × 0308 ÷ 0061 ÷ 002C ÷ # ÷ [0.2] DIGIT ONE (Numeric) ÷ [999.0] APOSTROPHE (Single_Quote) × [4.0] COMBINING DIAERESIS (Extend_FE) ÷ [999.0] LATIN SMALL LETTER A (ALetter) ÷ [999.0] COMMA (MidNum) ÷ [0.3] +÷ 0031 × 0027 × 0031 ÷ 003A ÷ # ÷ [0.2] DIGIT ONE (Numeric) × [12.0] APOSTROPHE (Single_Quote) × [11.0] DIGIT ONE (Numeric) ÷ [999.0] COLON (MidLetter) ÷ [0.3] +÷ 0031 × 0027 × 0308 × 0031 ÷ 003A ÷ # ÷ [0.2] DIGIT ONE (Numeric) × [12.0] APOSTROPHE (Single_Quote) × [4.0] COMBINING DIAERESIS (Extend_FE) × [11.0] DIGIT ONE (Numeric) ÷ [999.0] COLON (MidLetter) ÷ [0.3] +÷ 0031 × 0027 × 0031 ÷ 0027 ÷ # ÷ [0.2] DIGIT ONE (Numeric) × [12.0] APOSTROPHE (Single_Quote) × [11.0] DIGIT ONE (Numeric) ÷ [999.0] APOSTROPHE (Single_Quote) ÷ [0.3] +÷ 0031 × 0027 × 0308 × 0031 ÷ 0027 ÷ # ÷ [0.2] DIGIT ONE (Numeric) × [12.0] APOSTROPHE (Single_Quote) × [4.0] COMBINING DIAERESIS (Extend_FE) × [11.0] DIGIT ONE (Numeric) ÷ [999.0] APOSTROPHE (Single_Quote) ÷ [0.3] +÷ 0031 × 0027 × 0031 ÷ 002C ÷ # ÷ [0.2] DIGIT ONE (Numeric) × [12.0] APOSTROPHE (Single_Quote) × [11.0] DIGIT ONE (Numeric) ÷ [999.0] COMMA (MidNum) ÷ [0.3] +÷ 0031 × 0027 × 0308 × 0031 ÷ 002C ÷ # ÷ [0.2] DIGIT ONE (Numeric) × [12.0] APOSTROPHE (Single_Quote) × [4.0] COMBINING DIAERESIS (Extend_FE) × [11.0] DIGIT ONE (Numeric) ÷ [999.0] COMMA (MidNum) ÷ [0.3] +÷ 0031 × 0027 × 0031 ÷ 002E × 2060 ÷ # ÷ [0.2] DIGIT ONE (Numeric) × [12.0] APOSTROPHE (Single_Quote) × [11.0] DIGIT ONE (Numeric) ÷ [999.0] FULL STOP (MidNumLet) × [4.0] WORD JOINER (Format_FE) ÷ [0.3] +÷ 0031 × 0027 × 0308 × 0031 ÷ 002E × 2060 ÷ # ÷ [0.2] DIGIT ONE (Numeric) × [12.0] APOSTROPHE (Single_Quote) × [4.0] COMBINING DIAERESIS (Extend_FE) × [11.0] DIGIT ONE (Numeric) ÷ [999.0] FULL STOP (MidNumLet) × [4.0] WORD JOINER (Format_FE) ÷ [0.3] ÷ 0031 ÷ 002C ÷ 0001 ÷ # ÷ [0.2] DIGIT ONE (Numeric) ÷ [999.0] COMMA (MidNum) ÷ [999.0] (Other) ÷ [0.3] ÷ 0031 ÷ 002C × 0308 ÷ 0001 ÷ # ÷ [0.2] DIGIT ONE (Numeric) ÷ [999.0] COMMA (MidNum) × [4.0] COMBINING DIAERESIS (Extend_FE) ÷ [999.0] (Other) ÷ [0.3] ÷ 0031 ÷ 002C ÷ 000D ÷ # ÷ [0.2] DIGIT ONE (Numeric) ÷ [999.0] COMMA (MidNum) ÷ [3.2] (CR) ÷ [0.3] @@ -1002,14 +1284,20 @@ ÷ 0031 ÷ 002C × 0308 ÷ 003A ÷ # ÷ [0.2] DIGIT ONE (Numeric) ÷ [999.0] COMMA (MidNum) × [4.0] COMBINING DIAERESIS (Extend_FE) ÷ [999.0] COLON (MidLetter) ÷ [0.3] ÷ 0031 ÷ 002C ÷ 002C ÷ # ÷ [0.2] DIGIT ONE (Numeric) ÷ [999.0] COMMA (MidNum) ÷ [999.0] COMMA (MidNum) ÷ [0.3] ÷ 0031 ÷ 002C × 0308 ÷ 002C ÷ # ÷ [0.2] DIGIT ONE (Numeric) ÷ [999.0] COMMA (MidNum) × [4.0] COMBINING DIAERESIS (Extend_FE) ÷ [999.0] COMMA (MidNum) ÷ [0.3] -÷ 0031 ÷ 002C ÷ 0027 ÷ # ÷ [0.2] DIGIT ONE (Numeric) ÷ [999.0] COMMA (MidNum) ÷ [999.0] APOSTROPHE (MidNumLet) ÷ [0.3] -÷ 0031 ÷ 002C × 0308 ÷ 0027 ÷ # ÷ [0.2] DIGIT ONE (Numeric) ÷ [999.0] COMMA (MidNum) × [4.0] COMBINING DIAERESIS (Extend_FE) ÷ [999.0] APOSTROPHE (MidNumLet) ÷ [0.3] +÷ 0031 ÷ 002C ÷ 002E ÷ # ÷ [0.2] DIGIT ONE (Numeric) ÷ [999.0] COMMA (MidNum) ÷ [999.0] FULL STOP (MidNumLet) ÷ [0.3] +÷ 0031 ÷ 002C × 0308 ÷ 002E ÷ # ÷ [0.2] DIGIT ONE (Numeric) ÷ [999.0] COMMA (MidNum) × [4.0] COMBINING DIAERESIS (Extend_FE) ÷ [999.0] FULL STOP (MidNumLet) ÷ [0.3] ÷ 0031 × 002C × 0030 ÷ # ÷ [0.2] DIGIT ONE (Numeric) × [12.0] COMMA (MidNum) × [11.0] DIGIT ZERO (Numeric) ÷ [0.3] ÷ 0031 × 002C × 0308 × 0030 ÷ # ÷ [0.2] DIGIT ONE (Numeric) × [12.0] COMMA (MidNum) × [4.0] COMBINING DIAERESIS (Extend_FE) × [11.0] DIGIT ZERO (Numeric) ÷ [0.3] ÷ 0031 ÷ 002C ÷ 005F ÷ # ÷ [0.2] DIGIT ONE (Numeric) ÷ [999.0] COMMA (MidNum) ÷ [999.0] LOW LINE (ExtendNumLet) ÷ [0.3] ÷ 0031 ÷ 002C × 0308 ÷ 005F ÷ # ÷ [0.2] DIGIT ONE (Numeric) ÷ [999.0] COMMA (MidNum) × [4.0] COMBINING DIAERESIS (Extend_FE) ÷ [999.0] LOW LINE (ExtendNumLet) ÷ [0.3] ÷ 0031 ÷ 002C ÷ 1F1E6 ÷ # ÷ [0.2] DIGIT ONE (Numeric) ÷ [999.0] COMMA (MidNum) ÷ [999.0] REGIONAL INDICATOR SYMBOL LETTER A (Regional_Indicator) ÷ [0.3] ÷ 0031 ÷ 002C × 0308 ÷ 1F1E6 ÷ # ÷ [0.2] DIGIT ONE (Numeric) ÷ [999.0] COMMA (MidNum) × [4.0] COMBINING DIAERESIS (Extend_FE) ÷ [999.0] REGIONAL INDICATOR SYMBOL LETTER A (Regional_Indicator) ÷ [0.3] +÷ 0031 ÷ 002C ÷ 05D0 ÷ # ÷ [0.2] DIGIT ONE (Numeric) ÷ [999.0] COMMA (MidNum) ÷ [999.0] HEBREW LETTER ALEF (Hebrew_Letter) ÷ [0.3] +÷ 0031 ÷ 002C × 0308 ÷ 05D0 ÷ # ÷ [0.2] DIGIT ONE (Numeric) ÷ [999.0] COMMA (MidNum) × [4.0] COMBINING DIAERESIS (Extend_FE) ÷ [999.0] HEBREW LETTER ALEF (Hebrew_Letter) ÷ [0.3] +÷ 0031 ÷ 002C ÷ 0022 ÷ # ÷ [0.2] DIGIT ONE (Numeric) ÷ [999.0] COMMA (MidNum) ÷ [999.0] QUOTATION MARK (Double_Quote) ÷ [0.3] +÷ 0031 ÷ 002C × 0308 ÷ 0022 ÷ # ÷ [0.2] DIGIT ONE (Numeric) ÷ [999.0] COMMA (MidNum) × [4.0] COMBINING DIAERESIS (Extend_FE) ÷ [999.0] QUOTATION MARK (Double_Quote) ÷ [0.3] +÷ 0031 ÷ 002C ÷ 0027 ÷ # ÷ [0.2] DIGIT ONE (Numeric) ÷ [999.0] COMMA (MidNum) ÷ [999.0] APOSTROPHE (Single_Quote) ÷ [0.3] +÷ 0031 ÷ 002C × 0308 ÷ 0027 ÷ # ÷ [0.2] DIGIT ONE (Numeric) ÷ [999.0] COMMA (MidNum) × [4.0] COMBINING DIAERESIS (Extend_FE) ÷ [999.0] APOSTROPHE (Single_Quote) ÷ [0.3] ÷ 0031 ÷ 002C × 00AD ÷ # ÷ [0.2] DIGIT ONE (Numeric) ÷ [999.0] COMMA (MidNum) × [4.0] SOFT HYPHEN (Format_FE) ÷ [0.3] ÷ 0031 ÷ 002C × 0308 × 00AD ÷ # ÷ [0.2] DIGIT ONE (Numeric) ÷ [999.0] COMMA (MidNum) × [4.0] COMBINING DIAERESIS (Extend_FE) × [4.0] SOFT HYPHEN (Format_FE) ÷ [0.3] ÷ 0031 ÷ 002C × 0300 ÷ # ÷ [0.2] DIGIT ONE (Numeric) ÷ [999.0] COMMA (MidNum) × [4.0] COMBINING GRAVE ACCENT (Extend_FE) ÷ [0.3] @@ -1018,16 +1306,16 @@ ÷ 0031 ÷ 002C × 0308 ÷ 0061 × 2060 ÷ # ÷ [0.2] DIGIT ONE (Numeric) ÷ [999.0] COMMA (MidNum) × [4.0] COMBINING DIAERESIS (Extend_FE) ÷ [999.0] LATIN SMALL LETTER A (ALetter) × [4.0] WORD JOINER (Format_FE) ÷ [0.3] ÷ 0031 ÷ 002C ÷ 0061 ÷ 003A ÷ # ÷ [0.2] DIGIT ONE (Numeric) ÷ [999.0] COMMA (MidNum) ÷ [999.0] LATIN SMALL LETTER A (ALetter) ÷ [999.0] COLON (MidLetter) ÷ [0.3] ÷ 0031 ÷ 002C × 0308 ÷ 0061 ÷ 003A ÷ # ÷ [0.2] DIGIT ONE (Numeric) ÷ [999.0] COMMA (MidNum) × [4.0] COMBINING DIAERESIS (Extend_FE) ÷ [999.0] LATIN SMALL LETTER A (ALetter) ÷ [999.0] COLON (MidLetter) ÷ [0.3] -÷ 0031 ÷ 002C ÷ 0061 ÷ 0027 ÷ # ÷ [0.2] DIGIT ONE (Numeric) ÷ [999.0] COMMA (MidNum) ÷ [999.0] LATIN SMALL LETTER A (ALetter) ÷ [999.0] APOSTROPHE (MidNumLet) ÷ [0.3] -÷ 0031 ÷ 002C × 0308 ÷ 0061 ÷ 0027 ÷ # ÷ [0.2] DIGIT ONE (Numeric) ÷ [999.0] COMMA (MidNum) × [4.0] COMBINING DIAERESIS (Extend_FE) ÷ [999.0] LATIN SMALL LETTER A (ALetter) ÷ [999.0] APOSTROPHE (MidNumLet) ÷ [0.3] -÷ 0031 ÷ 002C ÷ 0061 ÷ 0027 × 2060 ÷ # ÷ [0.2] DIGIT ONE (Numeric) ÷ [999.0] COMMA (MidNum) ÷ [999.0] LATIN SMALL LETTER A (ALetter) ÷ [999.0] APOSTROPHE (MidNumLet) × [4.0] WORD JOINER (Format_FE) ÷ [0.3] -÷ 0031 ÷ 002C × 0308 ÷ 0061 ÷ 0027 × 2060 ÷ # ÷ [0.2] DIGIT ONE (Numeric) ÷ [999.0] COMMA (MidNum) × [4.0] COMBINING DIAERESIS (Extend_FE) ÷ [999.0] LATIN SMALL LETTER A (ALetter) ÷ [999.0] APOSTROPHE (MidNumLet) × [4.0] WORD JOINER (Format_FE) ÷ [0.3] +÷ 0031 ÷ 002C ÷ 0061 ÷ 0027 ÷ # ÷ [0.2] DIGIT ONE (Numeric) ÷ [999.0] COMMA (MidNum) ÷ [999.0] LATIN SMALL LETTER A (ALetter) ÷ [999.0] APOSTROPHE (Single_Quote) ÷ [0.3] +÷ 0031 ÷ 002C × 0308 ÷ 0061 ÷ 0027 ÷ # ÷ [0.2] DIGIT ONE (Numeric) ÷ [999.0] COMMA (MidNum) × [4.0] COMBINING DIAERESIS (Extend_FE) ÷ [999.0] LATIN SMALL LETTER A (ALetter) ÷ [999.0] APOSTROPHE (Single_Quote) ÷ [0.3] +÷ 0031 ÷ 002C ÷ 0061 ÷ 0027 × 2060 ÷ # ÷ [0.2] DIGIT ONE (Numeric) ÷ [999.0] COMMA (MidNum) ÷ [999.0] LATIN SMALL LETTER A (ALetter) ÷ [999.0] APOSTROPHE (Single_Quote) × [4.0] WORD JOINER (Format_FE) ÷ [0.3] +÷ 0031 ÷ 002C × 0308 ÷ 0061 ÷ 0027 × 2060 ÷ # ÷ [0.2] DIGIT ONE (Numeric) ÷ [999.0] COMMA (MidNum) × [4.0] COMBINING DIAERESIS (Extend_FE) ÷ [999.0] LATIN SMALL LETTER A (ALetter) ÷ [999.0] APOSTROPHE (Single_Quote) × [4.0] WORD JOINER (Format_FE) ÷ [0.3] ÷ 0031 ÷ 002C ÷ 0061 ÷ 002C ÷ # ÷ [0.2] DIGIT ONE (Numeric) ÷ [999.0] COMMA (MidNum) ÷ [999.0] LATIN SMALL LETTER A (ALetter) ÷ [999.0] COMMA (MidNum) ÷ [0.3] ÷ 0031 ÷ 002C × 0308 ÷ 0061 ÷ 002C ÷ # ÷ [0.2] DIGIT ONE (Numeric) ÷ [999.0] COMMA (MidNum) × [4.0] COMBINING DIAERESIS (Extend_FE) ÷ [999.0] LATIN SMALL LETTER A (ALetter) ÷ [999.0] COMMA (MidNum) ÷ [0.3] ÷ 0031 × 002C × 0031 ÷ 003A ÷ # ÷ [0.2] DIGIT ONE (Numeric) × [12.0] COMMA (MidNum) × [11.0] DIGIT ONE (Numeric) ÷ [999.0] COLON (MidLetter) ÷ [0.3] ÷ 0031 × 002C × 0308 × 0031 ÷ 003A ÷ # ÷ [0.2] DIGIT ONE (Numeric) × [12.0] COMMA (MidNum) × [4.0] COMBINING DIAERESIS (Extend_FE) × [11.0] DIGIT ONE (Numeric) ÷ [999.0] COLON (MidLetter) ÷ [0.3] -÷ 0031 × 002C × 0031 ÷ 0027 ÷ # ÷ [0.2] DIGIT ONE (Numeric) × [12.0] COMMA (MidNum) × [11.0] DIGIT ONE (Numeric) ÷ [999.0] APOSTROPHE (MidNumLet) ÷ [0.3] -÷ 0031 × 002C × 0308 × 0031 ÷ 0027 ÷ # ÷ [0.2] DIGIT ONE (Numeric) × [12.0] COMMA (MidNum) × [4.0] COMBINING DIAERESIS (Extend_FE) × [11.0] DIGIT ONE (Numeric) ÷ [999.0] APOSTROPHE (MidNumLet) ÷ [0.3] +÷ 0031 × 002C × 0031 ÷ 0027 ÷ # ÷ [0.2] DIGIT ONE (Numeric) × [12.0] COMMA (MidNum) × [11.0] DIGIT ONE (Numeric) ÷ [999.0] APOSTROPHE (Single_Quote) ÷ [0.3] +÷ 0031 × 002C × 0308 × 0031 ÷ 0027 ÷ # ÷ [0.2] DIGIT ONE (Numeric) × [12.0] COMMA (MidNum) × [4.0] COMBINING DIAERESIS (Extend_FE) × [11.0] DIGIT ONE (Numeric) ÷ [999.0] APOSTROPHE (Single_Quote) ÷ [0.3] ÷ 0031 × 002C × 0031 ÷ 002C ÷ # ÷ [0.2] DIGIT ONE (Numeric) × [12.0] COMMA (MidNum) × [11.0] DIGIT ONE (Numeric) ÷ [999.0] COMMA (MidNum) ÷ [0.3] ÷ 0031 × 002C × 0308 × 0031 ÷ 002C ÷ # ÷ [0.2] DIGIT ONE (Numeric) × [12.0] COMMA (MidNum) × [4.0] COMBINING DIAERESIS (Extend_FE) × [11.0] DIGIT ONE (Numeric) ÷ [999.0] COMMA (MidNum) ÷ [0.3] ÷ 0031 × 002C × 0031 ÷ 002E × 2060 ÷ # ÷ [0.2] DIGIT ONE (Numeric) × [12.0] COMMA (MidNum) × [11.0] DIGIT ONE (Numeric) ÷ [999.0] FULL STOP (MidNumLet) × [4.0] WORD JOINER (Format_FE) ÷ [0.3] @@ -1048,14 +1336,20 @@ ÷ 0031 ÷ 002E × 2060 × 0308 ÷ 003A ÷ # ÷ [0.2] DIGIT ONE (Numeric) ÷ [999.0] FULL STOP (MidNumLet) × [4.0] WORD JOINER (Format_FE) × [4.0] COMBINING DIAERESIS (Extend_FE) ÷ [999.0] COLON (MidLetter) ÷ [0.3] ÷ 0031 ÷ 002E × 2060 ÷ 002C ÷ # ÷ [0.2] DIGIT ONE (Numeric) ÷ [999.0] FULL STOP (MidNumLet) × [4.0] WORD JOINER (Format_FE) ÷ [999.0] COMMA (MidNum) ÷ [0.3] ÷ 0031 ÷ 002E × 2060 × 0308 ÷ 002C ÷ # ÷ [0.2] DIGIT ONE (Numeric) ÷ [999.0] FULL STOP (MidNumLet) × [4.0] WORD JOINER (Format_FE) × [4.0] COMBINING DIAERESIS (Extend_FE) ÷ [999.0] COMMA (MidNum) ÷ [0.3] -÷ 0031 ÷ 002E × 2060 ÷ 0027 ÷ # ÷ [0.2] DIGIT ONE (Numeric) ÷ [999.0] FULL STOP (MidNumLet) × [4.0] WORD JOINER (Format_FE) ÷ [999.0] APOSTROPHE (MidNumLet) ÷ [0.3] -÷ 0031 ÷ 002E × 2060 × 0308 ÷ 0027 ÷ # ÷ [0.2] DIGIT ONE (Numeric) ÷ [999.0] FULL STOP (MidNumLet) × [4.0] WORD JOINER (Format_FE) × [4.0] COMBINING DIAERESIS (Extend_FE) ÷ [999.0] APOSTROPHE (MidNumLet) ÷ [0.3] +÷ 0031 ÷ 002E × 2060 ÷ 002E ÷ # ÷ [0.2] DIGIT ONE (Numeric) ÷ [999.0] FULL STOP (MidNumLet) × [4.0] WORD JOINER (Format_FE) ÷ [999.0] FULL STOP (MidNumLet) ÷ [0.3] +÷ 0031 ÷ 002E × 2060 × 0308 ÷ 002E ÷ # ÷ [0.2] DIGIT ONE (Numeric) ÷ [999.0] FULL STOP (MidNumLet) × [4.0] WORD JOINER (Format_FE) × [4.0] COMBINING DIAERESIS (Extend_FE) ÷ [999.0] FULL STOP (MidNumLet) ÷ [0.3] ÷ 0031 × 002E × 2060 × 0030 ÷ # ÷ [0.2] DIGIT ONE (Numeric) × [12.0] FULL STOP (MidNumLet) × [4.0] WORD JOINER (Format_FE) × [11.0] DIGIT ZERO (Numeric) ÷ [0.3] ÷ 0031 × 002E × 2060 × 0308 × 0030 ÷ # ÷ [0.2] DIGIT ONE (Numeric) × [12.0] FULL STOP (MidNumLet) × [4.0] WORD JOINER (Format_FE) × [4.0] COMBINING DIAERESIS (Extend_FE) × [11.0] DIGIT ZERO (Numeric) ÷ [0.3] ÷ 0031 ÷ 002E × 2060 ÷ 005F ÷ # ÷ [0.2] DIGIT ONE (Numeric) ÷ [999.0] FULL STOP (MidNumLet) × [4.0] WORD JOINER (Format_FE) ÷ [999.0] LOW LINE (ExtendNumLet) ÷ [0.3] ÷ 0031 ÷ 002E × 2060 × 0308 ÷ 005F ÷ # ÷ [0.2] DIGIT ONE (Numeric) ÷ [999.0] FULL STOP (MidNumLet) × [4.0] WORD JOINER (Format_FE) × [4.0] COMBINING DIAERESIS (Extend_FE) ÷ [999.0] LOW LINE (ExtendNumLet) ÷ [0.3] ÷ 0031 ÷ 002E × 2060 ÷ 1F1E6 ÷ # ÷ [0.2] DIGIT ONE (Numeric) ÷ [999.0] FULL STOP (MidNumLet) × [4.0] WORD JOINER (Format_FE) ÷ [999.0] REGIONAL INDICATOR SYMBOL LETTER A (Regional_Indicator) ÷ [0.3] ÷ 0031 ÷ 002E × 2060 × 0308 ÷ 1F1E6 ÷ # ÷ [0.2] DIGIT ONE (Numeric) ÷ [999.0] FULL STOP (MidNumLet) × [4.0] WORD JOINER (Format_FE) × [4.0] COMBINING DIAERESIS (Extend_FE) ÷ [999.0] REGIONAL INDICATOR SYMBOL LETTER A (Regional_Indicator) ÷ [0.3] +÷ 0031 ÷ 002E × 2060 ÷ 05D0 ÷ # ÷ [0.2] DIGIT ONE (Numeric) ÷ [999.0] FULL STOP (MidNumLet) × [4.0] WORD JOINER (Format_FE) ÷ [999.0] HEBREW LETTER ALEF (Hebrew_Letter) ÷ [0.3] +÷ 0031 ÷ 002E × 2060 × 0308 ÷ 05D0 ÷ # ÷ [0.2] DIGIT ONE (Numeric) ÷ [999.0] FULL STOP (MidNumLet) × [4.0] WORD JOINER (Format_FE) × [4.0] COMBINING DIAERESIS (Extend_FE) ÷ [999.0] HEBREW LETTER ALEF (Hebrew_Letter) ÷ [0.3] +÷ 0031 ÷ 002E × 2060 ÷ 0022 ÷ # ÷ [0.2] DIGIT ONE (Numeric) ÷ [999.0] FULL STOP (MidNumLet) × [4.0] WORD JOINER (Format_FE) ÷ [999.0] QUOTATION MARK (Double_Quote) ÷ [0.3] +÷ 0031 ÷ 002E × 2060 × 0308 ÷ 0022 ÷ # ÷ [0.2] DIGIT ONE (Numeric) ÷ [999.0] FULL STOP (MidNumLet) × [4.0] WORD JOINER (Format_FE) × [4.0] COMBINING DIAERESIS (Extend_FE) ÷ [999.0] QUOTATION MARK (Double_Quote) ÷ [0.3] +÷ 0031 ÷ 002E × 2060 ÷ 0027 ÷ # ÷ [0.2] DIGIT ONE (Numeric) ÷ [999.0] FULL STOP (MidNumLet) × [4.0] WORD JOINER (Format_FE) ÷ [999.0] APOSTROPHE (Single_Quote) ÷ [0.3] +÷ 0031 ÷ 002E × 2060 × 0308 ÷ 0027 ÷ # ÷ [0.2] DIGIT ONE (Numeric) ÷ [999.0] FULL STOP (MidNumLet) × [4.0] WORD JOINER (Format_FE) × [4.0] COMBINING DIAERESIS (Extend_FE) ÷ [999.0] APOSTROPHE (Single_Quote) ÷ [0.3] ÷ 0031 ÷ 002E × 2060 × 00AD ÷ # ÷ [0.2] DIGIT ONE (Numeric) ÷ [999.0] FULL STOP (MidNumLet) × [4.0] WORD JOINER (Format_FE) × [4.0] SOFT HYPHEN (Format_FE) ÷ [0.3] ÷ 0031 ÷ 002E × 2060 × 0308 × 00AD ÷ # ÷ [0.2] DIGIT ONE (Numeric) ÷ [999.0] FULL STOP (MidNumLet) × [4.0] WORD JOINER (Format_FE) × [4.0] COMBINING DIAERESIS (Extend_FE) × [4.0] SOFT HYPHEN (Format_FE) ÷ [0.3] ÷ 0031 ÷ 002E × 2060 × 0300 ÷ # ÷ [0.2] DIGIT ONE (Numeric) ÷ [999.0] FULL STOP (MidNumLet) × [4.0] WORD JOINER (Format_FE) × [4.0] COMBINING GRAVE ACCENT (Extend_FE) ÷ [0.3] @@ -1064,26 +1358,26 @@ ÷ 0031 ÷ 002E × 2060 × 0308 ÷ 0061 × 2060 ÷ # ÷ [0.2] DIGIT ONE (Numeric) ÷ [999.0] FULL STOP (MidNumLet) × [4.0] WORD JOINER (Format_FE) × [4.0] COMBINING DIAERESIS (Extend_FE) ÷ [999.0] LATIN SMALL LETTER A (ALetter) × [4.0] WORD JOINER (Format_FE) ÷ [0.3] ÷ 0031 ÷ 002E × 2060 ÷ 0061 ÷ 003A ÷ # ÷ [0.2] DIGIT ONE (Numeric) ÷ [999.0] FULL STOP (MidNumLet) × [4.0] WORD JOINER (Format_FE) ÷ [999.0] LATIN SMALL LETTER A (ALetter) ÷ [999.0] COLON (MidLetter) ÷ [0.3] ÷ 0031 ÷ 002E × 2060 × 0308 ÷ 0061 ÷ 003A ÷ # ÷ [0.2] DIGIT ONE (Numeric) ÷ [999.0] FULL STOP (MidNumLet) × [4.0] WORD JOINER (Format_FE) × [4.0] COMBINING DIAERESIS (Extend_FE) ÷ [999.0] LATIN SMALL LETTER A (ALetter) ÷ [999.0] COLON (MidLetter) ÷ [0.3] -÷ 0031 ÷ 002E × 2060 ÷ 0061 ÷ 0027 ÷ # ÷ [0.2] DIGIT ONE (Numeric) ÷ [999.0] FULL STOP (MidNumLet) × [4.0] WORD JOINER (Format_FE) ÷ [999.0] LATIN SMALL LETTER A (ALetter) ÷ [999.0] APOSTROPHE (MidNumLet) ÷ [0.3] -÷ 0031 ÷ 002E × 2060 × 0308 ÷ 0061 ÷ 0027 ÷ # ÷ [0.2] DIGIT ONE (Numeric) ÷ [999.0] FULL STOP (MidNumLet) × [4.0] WORD JOINER (Format_FE) × [4.0] COMBINING DIAERESIS (Extend_FE) ÷ [999.0] LATIN SMALL LETTER A (ALetter) ÷ [999.0] APOSTROPHE (MidNumLet) ÷ [0.3] -÷ 0031 ÷ 002E × 2060 ÷ 0061 ÷ 0027 × 2060 ÷ # ÷ [0.2] DIGIT ONE (Numeric) ÷ [999.0] FULL STOP (MidNumLet) × [4.0] WORD JOINER (Format_FE) ÷ [999.0] LATIN SMALL LETTER A (ALetter) ÷ [999.0] APOSTROPHE (MidNumLet) × [4.0] WORD JOINER (Format_FE) ÷ [0.3] -÷ 0031 ÷ 002E × 2060 × 0308 ÷ 0061 ÷ 0027 × 2060 ÷ # ÷ [0.2] DIGIT ONE (Numeric) ÷ [999.0] FULL STOP (MidNumLet) × [4.0] WORD JOINER (Format_FE) × [4.0] COMBINING DIAERESIS (Extend_FE) ÷ [999.0] LATIN SMALL LETTER A (ALetter) ÷ [999.0] APOSTROPHE (MidNumLet) × [4.0] WORD JOINER (Format_FE) ÷ [0.3] +÷ 0031 ÷ 002E × 2060 ÷ 0061 ÷ 0027 ÷ # ÷ [0.2] DIGIT ONE (Numeric) ÷ [999.0] FULL STOP (MidNumLet) × [4.0] WORD JOINER (Format_FE) ÷ [999.0] LATIN SMALL LETTER A (ALetter) ÷ [999.0] APOSTROPHE (Single_Quote) ÷ [0.3] +÷ 0031 ÷ 002E × 2060 × 0308 ÷ 0061 ÷ 0027 ÷ # ÷ [0.2] DIGIT ONE (Numeric) ÷ [999.0] FULL STOP (MidNumLet) × [4.0] WORD JOINER (Format_FE) × [4.0] COMBINING DIAERESIS (Extend_FE) ÷ [999.0] LATIN SMALL LETTER A (ALetter) ÷ [999.0] APOSTROPHE (Single_Quote) ÷ [0.3] +÷ 0031 ÷ 002E × 2060 ÷ 0061 ÷ 0027 × 2060 ÷ # ÷ [0.2] DIGIT ONE (Numeric) ÷ [999.0] FULL STOP (MidNumLet) × [4.0] WORD JOINER (Format_FE) ÷ [999.0] LATIN SMALL LETTER A (ALetter) ÷ [999.0] APOSTROPHE (Single_Quote) × [4.0] WORD JOINER (Format_FE) ÷ [0.3] +÷ 0031 ÷ 002E × 2060 × 0308 ÷ 0061 ÷ 0027 × 2060 ÷ # ÷ [0.2] DIGIT ONE (Numeric) ÷ [999.0] FULL STOP (MidNumLet) × [4.0] WORD JOINER (Format_FE) × [4.0] COMBINING DIAERESIS (Extend_FE) ÷ [999.0] LATIN SMALL LETTER A (ALetter) ÷ [999.0] APOSTROPHE (Single_Quote) × [4.0] WORD JOINER (Format_FE) ÷ [0.3] ÷ 0031 ÷ 002E × 2060 ÷ 0061 ÷ 002C ÷ # ÷ [0.2] DIGIT ONE (Numeric) ÷ [999.0] FULL STOP (MidNumLet) × [4.0] WORD JOINER (Format_FE) ÷ [999.0] LATIN SMALL LETTER A (ALetter) ÷ [999.0] COMMA (MidNum) ÷ [0.3] ÷ 0031 ÷ 002E × 2060 × 0308 ÷ 0061 ÷ 002C ÷ # ÷ [0.2] DIGIT ONE (Numeric) ÷ [999.0] FULL STOP (MidNumLet) × [4.0] WORD JOINER (Format_FE) × [4.0] COMBINING DIAERESIS (Extend_FE) ÷ [999.0] LATIN SMALL LETTER A (ALetter) ÷ [999.0] COMMA (MidNum) ÷ [0.3] ÷ 0031 × 002E × 2060 × 0031 ÷ 003A ÷ # ÷ [0.2] DIGIT ONE (Numeric) × [12.0] FULL STOP (MidNumLet) × [4.0] WORD JOINER (Format_FE) × [11.0] DIGIT ONE (Numeric) ÷ [999.0] COLON (MidLetter) ÷ [0.3] ÷ 0031 × 002E × 2060 × 0308 × 0031 ÷ 003A ÷ # ÷ [0.2] DIGIT ONE (Numeric) × [12.0] FULL STOP (MidNumLet) × [4.0] WORD JOINER (Format_FE) × [4.0] COMBINING DIAERESIS (Extend_FE) × [11.0] DIGIT ONE (Numeric) ÷ [999.0] COLON (MidLetter) ÷ [0.3] -÷ 0031 × 002E × 2060 × 0031 ÷ 0027 ÷ # ÷ [0.2] DIGIT ONE (Numeric) × [12.0] FULL STOP (MidNumLet) × [4.0] WORD JOINER (Format_FE) × [11.0] DIGIT ONE (Numeric) ÷ [999.0] APOSTROPHE (MidNumLet) ÷ [0.3] -÷ 0031 × 002E × 2060 × 0308 × 0031 ÷ 0027 ÷ # ÷ [0.2] DIGIT ONE (Numeric) × [12.0] FULL STOP (MidNumLet) × [4.0] WORD JOINER (Format_FE) × [4.0] COMBINING DIAERESIS (Extend_FE) × [11.0] DIGIT ONE (Numeric) ÷ [999.0] APOSTROPHE (MidNumLet) ÷ [0.3] +÷ 0031 × 002E × 2060 × 0031 ÷ 0027 ÷ # ÷ [0.2] DIGIT ONE (Numeric) × [12.0] FULL STOP (MidNumLet) × [4.0] WORD JOINER (Format_FE) × [11.0] DIGIT ONE (Numeric) ÷ [999.0] APOSTROPHE (Single_Quote) ÷ [0.3] +÷ 0031 × 002E × 2060 × 0308 × 0031 ÷ 0027 ÷ # ÷ [0.2] DIGIT ONE (Numeric) × [12.0] FULL STOP (MidNumLet) × [4.0] WORD JOINER (Format_FE) × [4.0] COMBINING DIAERESIS (Extend_FE) × [11.0] DIGIT ONE (Numeric) ÷ [999.0] APOSTROPHE (Single_Quote) ÷ [0.3] ÷ 0031 × 002E × 2060 × 0031 ÷ 002C ÷ # ÷ [0.2] DIGIT ONE (Numeric) × [12.0] FULL STOP (MidNumLet) × [4.0] WORD JOINER (Format_FE) × [11.0] DIGIT ONE (Numeric) ÷ [999.0] COMMA (MidNum) ÷ [0.3] ÷ 0031 × 002E × 2060 × 0308 × 0031 ÷ 002C ÷ # ÷ [0.2] DIGIT ONE (Numeric) × [12.0] FULL STOP (MidNumLet) × [4.0] WORD JOINER (Format_FE) × [4.0] COMBINING DIAERESIS (Extend_FE) × [11.0] DIGIT ONE (Numeric) ÷ [999.0] COMMA (MidNum) ÷ [0.3] ÷ 0031 × 002E × 2060 × 0031 ÷ 002E × 2060 ÷ # ÷ [0.2] DIGIT ONE (Numeric) × [12.0] FULL STOP (MidNumLet) × [4.0] WORD JOINER (Format_FE) × [11.0] DIGIT ONE (Numeric) ÷ [999.0] FULL STOP (MidNumLet) × [4.0] WORD JOINER (Format_FE) ÷ [0.3] ÷ 0031 × 002E × 2060 × 0308 × 0031 ÷ 002E × 2060 ÷ # ÷ [0.2] DIGIT ONE (Numeric) × [12.0] FULL STOP (MidNumLet) × [4.0] WORD JOINER (Format_FE) × [4.0] COMBINING DIAERESIS (Extend_FE) × [11.0] DIGIT ONE (Numeric) ÷ [999.0] FULL STOP (MidNumLet) × [4.0] WORD JOINER (Format_FE) ÷ [0.3] -÷ 0063 × 0061 × 006E × 0027 × 0074 ÷ # ÷ [0.2] LATIN SMALL LETTER C (ALetter) × [5.0] LATIN SMALL LETTER A (ALetter) × [5.0] LATIN SMALL LETTER N (ALetter) × [6.0] APOSTROPHE (MidNumLet) × [7.0] LATIN SMALL LETTER T (ALetter) ÷ [0.3] +÷ 0063 × 0061 × 006E × 0027 × 0074 ÷ # ÷ [0.2] LATIN SMALL LETTER C (ALetter) × [5.0] LATIN SMALL LETTER A (ALetter) × [5.0] LATIN SMALL LETTER N (ALetter) × [6.0] APOSTROPHE (Single_Quote) × [7.0] LATIN SMALL LETTER T (ALetter) ÷ [0.3] ÷ 0063 × 0061 × 006E × 2019 × 0074 ÷ # ÷ [0.2] LATIN SMALL LETTER C (ALetter) × [5.0] LATIN SMALL LETTER A (ALetter) × [5.0] LATIN SMALL LETTER N (ALetter) × [6.0] RIGHT SINGLE QUOTATION MARK (MidNumLet) × [7.0] LATIN SMALL LETTER T (ALetter) ÷ [0.3] ÷ 0061 × 0062 × 00AD × 0062 × 0079 ÷ # ÷ [0.2] LATIN SMALL LETTER A (ALetter) × [5.0] LATIN SMALL LETTER B (ALetter) × [4.0] SOFT HYPHEN (Format_FE) × [5.0] LATIN SMALL LETTER B (ALetter) × [5.0] LATIN SMALL LETTER Y (ALetter) ÷ [0.3] ÷ 0061 ÷ 0024 ÷ 002D ÷ 0033 × 0034 × 002C × 0035 × 0036 × 0037 × 002E × 0031 × 0034 ÷ 0025 ÷ 0062 ÷ # ÷ [0.2] LATIN SMALL LETTER A (ALetter) ÷ [999.0] DOLLAR SIGN (Other) ÷ [999.0] HYPHEN-MINUS (Other) ÷ [999.0] DIGIT THREE (Numeric) × [8.0] DIGIT FOUR (Numeric) × [12.0] COMMA (MidNum) × [11.0] DIGIT FIVE (Numeric) × [8.0] DIGIT SIX (Numeric) × [8.0] DIGIT SEVEN (Numeric) × [12.0] FULL STOP (MidNumLet) × [11.0] DIGIT ONE (Numeric) × [8.0] DIGIT FOUR (Numeric) ÷ [999.0] PERCENT SIGN (Other) ÷ [999.0] LATIN SMALL LETTER B (ALetter) ÷ [0.3] ÷ 0033 × 0061 ÷ # ÷ [0.2] DIGIT THREE (Numeric) × [10.0] LATIN SMALL LETTER A (ALetter) ÷ [0.3] -÷ 2060 ÷ 0063 × 2060 × 0061 × 2060 × 006E × 2060 × 0027 × 2060 × 0074 × 2060 × 2060 ÷ # ÷ [0.2] WORD JOINER (Format_FE) ÷ [999.0] LATIN SMALL LETTER C (ALetter) × [4.0] WORD JOINER (Format_FE) × [5.0] LATIN SMALL LETTER A (ALetter) × [4.0] WORD JOINER (Format_FE) × [5.0] LATIN SMALL LETTER N (ALetter) × [4.0] WORD JOINER (Format_FE) × [6.0] APOSTROPHE (MidNumLet) × [4.0] WORD JOINER (Format_FE) × [7.0] LATIN SMALL LETTER T (ALetter) × [4.0] WORD JOINER (Format_FE) × [4.0] WORD JOINER (Format_FE) ÷ [0.3] +÷ 2060 ÷ 0063 × 2060 × 0061 × 2060 × 006E × 2060 × 0027 × 2060 × 0074 × 2060 × 2060 ÷ # ÷ [0.2] WORD JOINER (Format_FE) ÷ [999.0] LATIN SMALL LETTER C (ALetter) × [4.0] WORD JOINER (Format_FE) × [5.0] LATIN SMALL LETTER A (ALetter) × [4.0] WORD JOINER (Format_FE) × [5.0] LATIN SMALL LETTER N (ALetter) × [4.0] WORD JOINER (Format_FE) × [6.0] APOSTROPHE (Single_Quote) × [4.0] WORD JOINER (Format_FE) × [7.0] LATIN SMALL LETTER T (ALetter) × [4.0] WORD JOINER (Format_FE) × [4.0] WORD JOINER (Format_FE) ÷ [0.3] ÷ 2060 ÷ 0063 × 2060 × 0061 × 2060 × 006E × 2060 × 2019 × 2060 × 0074 × 2060 × 2060 ÷ # ÷ [0.2] WORD JOINER (Format_FE) ÷ [999.0] LATIN SMALL LETTER C (ALetter) × [4.0] WORD JOINER (Format_FE) × [5.0] LATIN SMALL LETTER A (ALetter) × [4.0] WORD JOINER (Format_FE) × [5.0] LATIN SMALL LETTER N (ALetter) × [4.0] WORD JOINER (Format_FE) × [6.0] RIGHT SINGLE QUOTATION MARK (MidNumLet) × [4.0] WORD JOINER (Format_FE) × [7.0] LATIN SMALL LETTER T (ALetter) × [4.0] WORD JOINER (Format_FE) × [4.0] WORD JOINER (Format_FE) ÷ [0.3] ÷ 2060 ÷ 0061 × 2060 × 0062 × 2060 × 00AD × 2060 × 0062 × 2060 × 0079 × 2060 × 2060 ÷ # ÷ [0.2] WORD JOINER (Format_FE) ÷ [999.0] LATIN SMALL LETTER A (ALetter) × [4.0] WORD JOINER (Format_FE) × [5.0] LATIN SMALL LETTER B (ALetter) × [4.0] WORD JOINER (Format_FE) × [4.0] SOFT HYPHEN (Format_FE) × [4.0] WORD JOINER (Format_FE) × [5.0] LATIN SMALL LETTER B (ALetter) × [4.0] WORD JOINER (Format_FE) × [5.0] LATIN SMALL LETTER Y (ALetter) × [4.0] WORD JOINER (Format_FE) × [4.0] WORD JOINER (Format_FE) ÷ [0.3] ÷ 2060 ÷ 0061 × 2060 ÷ 0024 × 2060 ÷ 002D × 2060 ÷ 0033 × 2060 × 0034 × 2060 × 002C × 2060 × 0035 × 2060 × 0036 × 2060 × 0037 × 2060 × 002E × 2060 × 0031 × 2060 × 0034 × 2060 ÷ 0025 × 2060 ÷ 0062 × 2060 × 2060 ÷ # ÷ [0.2] WORD JOINER (Format_FE) ÷ [999.0] LATIN SMALL LETTER A (ALetter) × [4.0] WORD JOINER (Format_FE) ÷ [999.0] DOLLAR SIGN (Other) × [4.0] WORD JOINER (Format_FE) ÷ [999.0] HYPHEN-MINUS (Other) × [4.0] WORD JOINER (Format_FE) ÷ [999.0] DIGIT THREE (Numeric) × [4.0] WORD JOINER (Format_FE) × [8.0] DIGIT FOUR (Numeric) × [4.0] WORD JOINER (Format_FE) × [12.0] COMMA (MidNum) × [4.0] WORD JOINER (Format_FE) × [11.0] DIGIT FIVE (Numeric) × [4.0] WORD JOINER (Format_FE) × [8.0] DIGIT SIX (Numeric) × [4.0] WORD JOINER (Format_FE) × [8.0] DIGIT SEVEN (Numeric) × [4.0] WORD JOINER (Format_FE) × [12.0] FULL STOP (MidNumLet) × [4.0] WORD JOINER (Format_FE) × [11.0] DIGIT ONE (Numeric) × [4.0] WORD JOINER (Format_FE) × [8.0] DIGIT FOUR (Numeric) × [4.0] WORD JOINER (Format_FE) ÷ [999.0] PERCENT SIGN (Other) × [4.0] WORD JOINER (Format_FE) ÷ [999.0] LATIN SMALL LETTER B (ALetter) × [4.0] WORD JOINER (Format_FE) × [4.0] WORD JOINER (Format_FE) ÷ [0.3] @@ -1099,6 +1393,6 @@ ÷ 0020 × 200D ÷ 0646 ÷ # ÷ [0.2] SPACE (Other) × [4.0] ZERO WIDTH JOINER (Extend_FE) ÷ [999.0] ARABIC LETTER NOON (ALetter) ÷ [0.3] ÷ 0646 × 200D ÷ 0020 ÷ # ÷ [0.2] ARABIC LETTER NOON (ALetter) × [4.0] ZERO WIDTH JOINER (Extend_FE) ÷ [999.0] SPACE (Other) ÷ [0.3] # -# Lines: 1078 +# Lines: 1372 # # EOF -- cgit v1.2.3 From edfce46a6c0406af749ca7ef659df6315e36cd5d Mon Sep 17 00:00:00 2001 From: Konstantin Ritt Date: Sun, 12 Jan 2014 21:14:25 +0200 Subject: Update the Unicode Data and Algorithms up to Unicode 6.3.0 * Mongolian and Phags-pa characters have been given a Joining_Type classification for contextual shaping. As a part of these additions, one Phags-pa character has the Joining_Type value of L (Left Joining), which no character had been assigned before. * The unassigned code points in the Currency Symbols block have been given the Bidi_Class property value ET and the Line_Break property value PR, to help implementations support new currency symbols, when they are encoded. * Hebrew letters and basic punctuation marks have been assigned the newly introduced Word_Break property values Hebrew_Letter, Single_Quote, and Double_Quote. * The Bidi_Class property has been extended with four new values for directional isolates. For more details, see http://www.unicode.org/versions/Unicode6.3.0/ Change-Id: Iad62d02edc58a8497898dcd6d6c70d5aece317ea Reviewed-by: Lars Knoll --- tests/auto/corelib/tools/qchar/tst_qchar.cpp | 20 ++++++++++++++++++++ 1 file changed, 20 insertions(+) (limited to 'tests') diff --git a/tests/auto/corelib/tools/qchar/tst_qchar.cpp b/tests/auto/corelib/tools/qchar/tst_qchar.cpp index 2ec85882b8..80b4162156 100644 --- a/tests/auto/corelib/tools/qchar/tst_qchar.cpp +++ b/tests/auto/corelib/tools/qchar/tst_qchar.cpp @@ -450,6 +450,18 @@ void tst_QChar::category() void tst_QChar::direction() { + QVERIFY(QChar::direction(0x200E) == QChar::DirL); + QVERIFY(QChar::direction(0x200F) == QChar::DirR); + QVERIFY(QChar::direction(0x202A) == QChar::DirLRE); + QVERIFY(QChar::direction(0x202B) == QChar::DirRLE); + QVERIFY(QChar::direction(0x202C) == QChar::DirPDF); + QVERIFY(QChar::direction(0x202D) == QChar::DirLRO); + QVERIFY(QChar::direction(0x202E) == QChar::DirRLO); + QVERIFY(QChar::direction(0x2066) == QChar::DirLRI); + QVERIFY(QChar::direction(0x2067) == QChar::DirRLI); + QVERIFY(QChar::direction(0x2068) == QChar::DirFSI); + QVERIFY(QChar::direction(0x2069) == QChar::DirPDI); + QVERIFY(QChar('a').direction() == QChar::DirL); QVERIFY(QChar('0').direction() == QChar::DirEN); QVERIFY(QChar((ushort)0x627).direction() == QChar::DirAL); @@ -492,6 +504,9 @@ void tst_QChar::joining() QVERIFY(QChar::joining(0xf0000u) == QChar::OtherJoining); QVERIFY(QChar::joining(0xE0030u) == QChar::OtherJoining); QVERIFY(QChar::joining(0x2FA17u) == QChar::OtherJoining); + + // ### U+A872 has joining type L + QVERIFY(QChar::joining((uint)0xA872) == QChar::OtherJoining); } void tst_QChar::combiningClass() @@ -605,6 +620,11 @@ void tst_QChar::unicodeVersion() QVERIFY(QChar::unicodeVersion((uint)0x20ba) == QChar::Unicode_6_2); QVERIFY(QChar::unicodeVersion((uint)0x20ba) == QChar::Unicode_6_2); + QVERIFY(QChar(0x061c).unicodeVersion() == QChar::Unicode_6_3); + QVERIFY(QChar::unicodeVersion((ushort)0x061c) == QChar::Unicode_6_3); + QVERIFY(QChar::unicodeVersion((uint)0x061c) == QChar::Unicode_6_3); + QVERIFY(QChar::unicodeVersion((uint)0x061c) == QChar::Unicode_6_3); + QVERIFY(QChar(0x09ff).unicodeVersion() == QChar::Unicode_Unassigned); QVERIFY(QChar::unicodeVersion((ushort)0x09ff) == QChar::Unicode_Unassigned); QVERIFY(QChar::unicodeVersion((uint)0x09ff) == QChar::Unicode_Unassigned); -- cgit v1.2.3 From 5ca6039b7738415b8beeced4d34039ee2edbd903 Mon Sep 17 00:00:00 2001 From: Joerg Bornemann Date: Wed, 8 Jan 2014 13:18:17 +0100 Subject: remove qt_windows.h from qwinoverlappedionotifier_p.h Preparation for making QWinOverlappedIoNotifier public. Change-Id: Id443514a134b5c13e64d4d89450a7912ab38d40f Reviewed-by: Oswald Buddenhagen --- .../corelib/io/qwinoverlappedionotifier/tst_qwinoverlappedionotifier.cpp | 1 + 1 file changed, 1 insertion(+) (limited to 'tests') diff --git a/tests/auto/corelib/io/qwinoverlappedionotifier/tst_qwinoverlappedionotifier.cpp b/tests/auto/corelib/io/qwinoverlappedionotifier/tst_qwinoverlappedionotifier.cpp index 0944f32443..8321f76bec 100644 --- a/tests/auto/corelib/io/qwinoverlappedionotifier/tst_qwinoverlappedionotifier.cpp +++ b/tests/auto/corelib/io/qwinoverlappedionotifier/tst_qwinoverlappedionotifier.cpp @@ -42,6 +42,7 @@ #include #include #include +#include #ifndef PIPE_REJECT_REMOTE_CLIENTS #define PIPE_REJECT_REMOTE_CLIENTS 0x08 -- cgit v1.2.3 From 13806e6787502f55754660c6241b31d41e6d9ac7 Mon Sep 17 00:00:00 2001 From: Matt Broadstone Date: Sun, 29 Dec 2013 16:19:13 -0500 Subject: Added convenience methods to QJsonArray for appending QJsonValues operators for +, +=, and << were added to QJsonArray to make it easier to work with, and more closely resemble the Qt container classes [ChangeLog][QtCore][QJsonArray] Added convenience methods to QJsonArray for appending QJsonValues Change-Id: I96e0a43015f7c0f980cbbef7f20bd2085ee04795 Reviewed-by: Lars Knoll --- tests/auto/corelib/json/tst_qtjson.cpp | 15 +++++++++++++++ 1 file changed, 15 insertions(+) (limited to 'tests') diff --git a/tests/auto/corelib/json/tst_qtjson.cpp b/tests/auto/corelib/json/tst_qtjson.cpp index 8ff6c8be6b..45ce836cbf 100644 --- a/tests/auto/corelib/json/tst_qtjson.cpp +++ b/tests/auto/corelib/json/tst_qtjson.cpp @@ -76,6 +76,7 @@ private Q_SLOTS: void testObjectNested(); void testArrayNested(); void testArrayNestedEmpty(); + void testArrayComfortOperators(); void testObjectNestedEmpty(); void testValueRef(); @@ -665,6 +666,20 @@ void tst_QtJson::testObjectNestedEmpty() QCOMPARE(reconstituted.value("inner2").type(), QJsonValue::Object); } +void tst_QtJson::testArrayComfortOperators() +{ + QJsonArray first; + first.append(123.); + first.append(QLatin1String("foo")); + + QJsonArray second = QJsonArray() << 123. << QLatin1String("foo"); + QCOMPARE(first, second); + + first = first + QLatin1String("bar"); + second += QLatin1String("bar"); + QCOMPARE(first, second); +} + void tst_QtJson::testValueRef() { QJsonArray array; -- cgit v1.2.3 From d6d7624796471b8296fdfa6492b0570bd78e1d93 Mon Sep 17 00:00:00 2001 From: Matt Broadstone Date: Sat, 4 Jan 2014 16:59:32 -0600 Subject: Added constructor to QJsonValue for const char * For convenience, it reads more easily (and is somewhat expected) to be able to add a string to a QJsonArray like you might with a QVariantList: QJsonArray() << "string". Previously, QJsonValue provided a private void* ctor to explicitly deny this case because it would implicitly convert to a boolean. This ctor provides a const char* ctor (much like QVariant) that interprets the incoming text as utf8 and creates a String type QJsonValue. [ChangeLog][QtCore][QJsonValue] Added constructor to QJsonValue for const char * Change-Id: Icafa954d3da1fb264f9d0fd7cd1a1d2fbbe15095 Reviewed-by: Thiago Macieira Reviewed-by: Lars Knoll --- tests/auto/corelib/json/tst_qtjson.cpp | 8 ++++++++ 1 file changed, 8 insertions(+) (limited to 'tests') diff --git a/tests/auto/corelib/json/tst_qtjson.cpp b/tests/auto/corelib/json/tst_qtjson.cpp index 45ce836cbf..2312922a58 100644 --- a/tests/auto/corelib/json/tst_qtjson.cpp +++ b/tests/auto/corelib/json/tst_qtjson.cpp @@ -2242,6 +2242,14 @@ void tst_QtJson::valueEquals() QVERIFY(QJsonValue(QJsonObject()) != QJsonValue(true)); QVERIFY(QJsonValue(QJsonObject()) != QJsonValue(1.)); QVERIFY(QJsonValue(QJsonObject()) != QJsonValue(QJsonArray())); + + QVERIFY(QJsonValue("foo") == QJsonValue(QLatin1String("foo"))); + QVERIFY(QJsonValue("foo") == QJsonValue(QString("foo"))); + QVERIFY(QJsonValue("\x66\x6f\x6f") == QJsonValue(QString("foo"))); + QVERIFY(QJsonValue("\x62\x61\x72") == QJsonValue("bar")); + QVERIFY(QJsonValue(UNICODE_NON_CHARACTER) == QJsonValue(QString(UNICODE_NON_CHARACTER))); + QVERIFY(QJsonValue(UNICODE_DJE) == QJsonValue(QString(UNICODE_DJE))); + QVERIFY(QJsonValue("\xc3\xa9") == QJsonValue(QString("\xc3\xa9"))); } void tst_QtJson::bom() -- cgit v1.2.3 From 04b8af2739bb68b4c9648225c16cf6a515745fff Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Tor=20Arne=20Vestb=C3=B8?= Date: Thu, 16 Jan 2014 11:11:06 +0100 Subject: iOS: Fix compilation of some basic tests The tests themselves may not actually pass, but it's a start, and allows us to sanity-build a few things in the CI that actually produces a final binary. Change-Id: I02643b6ffa1522de1a7d17d737c8ab45ffac6a93 Reviewed-by: Simon Hausmann --- tests/auto/gui/kernel/qkeysequence/tst_qkeysequence.cpp | 4 ++++ tests/auto/shared/platformclipboard.h | 4 ++-- 2 files changed, 6 insertions(+), 2 deletions(-) (limited to 'tests') diff --git a/tests/auto/gui/kernel/qkeysequence/tst_qkeysequence.cpp b/tests/auto/gui/kernel/qkeysequence/tst_qkeysequence.cpp index 161a1692ca..20f84060b6 100644 --- a/tests/auto/gui/kernel/qkeysequence/tst_qkeysequence.cpp +++ b/tests/auto/gui/kernel/qkeysequence/tst_qkeysequence.cpp @@ -50,7 +50,9 @@ #include #ifdef Q_OS_MAC +#ifdef Q_OS_OSX #include +#endif struct MacSpecialKey { int key; ushort macSymbol; @@ -73,10 +75,12 @@ static const MacSpecialKey entries[NumEntries] = { { Qt::Key_Down, 0x2193 }, { Qt::Key_PageUp, 0x21DE }, { Qt::Key_PageDown, 0x21DF }, +#ifdef Q_OS_OSX { Qt::Key_Shift, kShiftUnicode }, { Qt::Key_Control, kCommandUnicode }, { Qt::Key_Meta, kControlUnicode }, { Qt::Key_Alt, kOptionUnicode }, +#endif { Qt::Key_CapsLock, 0x21EA }, }; diff --git a/tests/auto/shared/platformclipboard.h b/tests/auto/shared/platformclipboard.h index a430beef93..455ad9b276 100644 --- a/tests/auto/shared/platformclipboard.h +++ b/tests/auto/shared/platformclipboard.h @@ -44,7 +44,7 @@ #include -#ifdef Q_OS_MAC +#ifdef Q_OS_OSX #include #endif @@ -54,7 +54,7 @@ struct PlatformClipboard { #if defined(QT_NO_CLIPBOARD) return false; -#elif defined(Q_OS_MAC) +#elif defined(Q_OS_OSX) PasteboardRef pasteboard; OSStatus status = PasteboardCreate(0, &pasteboard); if (status == noErr) -- cgit v1.2.3 From e59b28e08e7212415726fe9cd1b394e92607f061 Mon Sep 17 00:00:00 2001 From: Olivier Goffart Date: Tue, 14 Jan 2014 13:54:30 +0100 Subject: QObject: fix connection to function pointer with non-copyable references argument For example, QObject is non copyable (its copy constructor is deleted or private via Q_DISABLE_COPY). It should still be allowed to pass a reference to a QObject as an argument to as signal (or slot). This fixes a compilation failure. Task-number: QTBUG-36119 Change-Id: I9bcf477e347d69fdae2543c99781b6421883be78 Reviewed-by: Thiago Macieira --- tests/auto/corelib/kernel/qobject/tst_qobject.cpp | 14 ++++++++++++++ 1 file changed, 14 insertions(+) (limited to 'tests') diff --git a/tests/auto/corelib/kernel/qobject/tst_qobject.cpp b/tests/auto/corelib/kernel/qobject/tst_qobject.cpp index 8875998433..b6be7f0f3e 100644 --- a/tests/auto/corelib/kernel/qobject/tst_qobject.cpp +++ b/tests/auto/corelib/kernel/qobject/tst_qobject.cpp @@ -4759,6 +4759,9 @@ class LotsOfSignalsAndSlots: public QObject #endif*/ static void static_slot_vPFvvE(fptr) {} + void slot_vcRQObject(const QObject &) {} + void slot_vRQObject(QObject &) {} + signals: void signal_v(); void signal_vi(int); @@ -4776,6 +4779,9 @@ class LotsOfSignalsAndSlots: public QObject void const_signal_v() const; void const_signal_vi(int) const; + void signal_vcRQObject(const QObject &); + void signal_vRQObject(QObject &); + void signal(short&, short, long long, short); void otherSignal(const char *); }; @@ -4893,6 +4899,14 @@ void tst_QObject::connectCxx0xTypeMatching() QVERIFY(QObject::connect(&obj, &Foo::const_signal_vi, &obj, &Foo::slot_vi)); QVERIFY(QObject::connect(&obj, &Foo::signal_vi, &obj, &Foo::const_slot_vi)); QVERIFY(QObject::connect(&obj, &Foo::signal_vi, &obj, &Foo::const_slot_v)); + + QVERIFY(QObject::connect(&obj, &Foo::signal_vcRQObject, &obj, &Foo::slot_vcRQObject)); + QVERIFY(QObject::connect(&obj, &Foo::signal_vRQObject, &obj, &Foo::slot_vRQObject)); + QVERIFY(QObject::connect(&obj, &Foo::signal_vRQObject, &obj, &Foo::slot_vcRQObject)); + // QVERIFY(QObject::connect(&obj, &Foo::signal_vcRQObject, &obj, &Foo::slot_vRQObject)); // Should be an error (const& -> &) + + QVERIFY(QObject::connect(&obj, &Foo::signal_vRi, &obj, &Foo::slot_vs)); + } class StringVariant : public QObject -- cgit v1.2.3 From 278152fffd57a14fd5e7eb17064d9a1a17b7d72c Mon Sep 17 00:00:00 2001 From: Kai Koehne Date: Wed, 8 Jan 2014 14:12:17 +0100 Subject: Replace win32-g++ with mingw scope Commit 773dd01 introduced a general mingw platform scope, which is cleaner and more flexible than matching the spec name. Change-Id: Ie3a9cb791a83f7c8a51bc4e23069190c452ab521 Reviewed-by: Thiago Macieira --- tests/auto/corelib/io/qprocess/testProcessEOF/testProcessEOF.pro | 2 +- tests/auto/network/kernel/qhostinfo/qhostinfo.pro | 2 +- tests/auto/network/socket/qtcpserver/crashingServer/crashingServer.pro | 2 +- tests/auto/sql/kernel/qsql/qsql.pro | 2 +- tests/auto/sql/kernel/qsqldriver/qsqldriver.pro | 2 +- tests/auto/sql/kernel/qsqlresult/qsqlresult.pro | 2 +- .../sql/models/qsqlrelationaltablemodel/qsqlrelationaltablemodel.pro | 2 +- tests/auto/widgets/dialogs/dialogs.pro | 2 +- 8 files changed, 8 insertions(+), 8 deletions(-) (limited to 'tests') diff --git a/tests/auto/corelib/io/qprocess/testProcessEOF/testProcessEOF.pro b/tests/auto/corelib/io/qprocess/testProcessEOF/testProcessEOF.pro index 48fd2d0b69..8f77e46f74 100644 --- a/tests/auto/corelib/io/qprocess/testProcessEOF/testProcessEOF.pro +++ b/tests/auto/corelib/io/qprocess/testProcessEOF/testProcessEOF.pro @@ -2,6 +2,6 @@ SOURCES = main.cpp CONFIG -= qt app_bundle CONFIG += console -win32:!win32-g++*:!equals(TEMPLATE_PREFIX, "vc"):QMAKE_CXXFLAGS += /GS- +win32:!mingw:!equals(TEMPLATE_PREFIX, "vc"):QMAKE_CXXFLAGS += /GS- DESTDIR = ./ DEFINES += QT_DISABLE_DEPRECATED_BEFORE=0 diff --git a/tests/auto/network/kernel/qhostinfo/qhostinfo.pro b/tests/auto/network/kernel/qhostinfo/qhostinfo.pro index c21e73ccee..b7554b54d5 100644 --- a/tests/auto/network/kernel/qhostinfo/qhostinfo.pro +++ b/tests/auto/network/kernel/qhostinfo/qhostinfo.pro @@ -12,7 +12,7 @@ wince*: { } # needed for getaddrinfo with official MinGW -win32-g++*:DEFINES += _WIN32_WINNT=0x0501 +mingw:DEFINES += _WIN32_WINNT=0x0501 linux-*:CONFIG+=insignificant_test # QTBUG-23837 - test is unstable DEFINES += QT_DISABLE_DEPRECATED_BEFORE=0 diff --git a/tests/auto/network/socket/qtcpserver/crashingServer/crashingServer.pro b/tests/auto/network/socket/qtcpserver/crashingServer/crashingServer.pro index 3f3e5ba3d4..23b36ddade 100644 --- a/tests/auto/network/socket/qtcpserver/crashingServer/crashingServer.pro +++ b/tests/auto/network/socket/qtcpserver/crashingServer/crashingServer.pro @@ -5,5 +5,5 @@ DESTDIR = ./ # This means the auto test works on some machines for MinGW. No dialog stalls # the application. -win32-g++*:CONFIG += console +mingw:CONFIG += console DEFINES += QT_DISABLE_DEPRECATED_BEFORE=0 diff --git a/tests/auto/sql/kernel/qsql/qsql.pro b/tests/auto/sql/kernel/qsql/qsql.pro index 20cee413b2..6bef8d4601 100644 --- a/tests/auto/sql/kernel/qsql/qsql.pro +++ b/tests/auto/sql/kernel/qsql/qsql.pro @@ -8,5 +8,5 @@ QT = core-private sql-private testlib wince*: { DEPLOYMENT_PLUGIN += qsqlite } -win32-g++*: LIBS += -lws2_32 +mingw: LIBS += -lws2_32 diff --git a/tests/auto/sql/kernel/qsqldriver/qsqldriver.pro b/tests/auto/sql/kernel/qsqldriver/qsqldriver.pro index abdc157c7f..13674f7c9e 100644 --- a/tests/auto/sql/kernel/qsqldriver/qsqldriver.pro +++ b/tests/auto/sql/kernel/qsqldriver/qsqldriver.pro @@ -11,7 +11,7 @@ wince*: { DEPLOYMENT += plugFiles LIBS += -lws2 } else { - win32-g++* { + mingw { LIBS += -lws2_32 } else:win32 { LIBS += ws2_32.lib diff --git a/tests/auto/sql/kernel/qsqlresult/qsqlresult.pro b/tests/auto/sql/kernel/qsqlresult/qsqlresult.pro index 114327effb..2e4c3f998d 100644 --- a/tests/auto/sql/kernel/qsqlresult/qsqlresult.pro +++ b/tests/auto/sql/kernel/qsqlresult/qsqlresult.pro @@ -6,5 +6,5 @@ QT = core core-private sql sql-private testlib SOURCES += tst_qsqlresult.cpp HEADERS += testsqldriver.h -win32-g++*: LIBS += -lws2_32 +mingw: LIBS += -lws2_32 diff --git a/tests/auto/sql/models/qsqlrelationaltablemodel/qsqlrelationaltablemodel.pro b/tests/auto/sql/models/qsqlrelationaltablemodel/qsqlrelationaltablemodel.pro index 0d7318a5c9..8d20eaa3c8 100644 --- a/tests/auto/sql/models/qsqlrelationaltablemodel/qsqlrelationaltablemodel.pro +++ b/tests/auto/sql/models/qsqlrelationaltablemodel/qsqlrelationaltablemodel.pro @@ -10,7 +10,7 @@ wince*: { DEPLOYMENT += plugFiles LIBS += -lws2 } else { - win32-g++* { + mingw { LIBS += -lws2_32 } else:win32 { LIBS += ws2_32.lib diff --git a/tests/auto/widgets/dialogs/dialogs.pro b/tests/auto/widgets/dialogs/dialogs.pro index c5f2c409dd..c6667824d9 100644 --- a/tests/auto/widgets/dialogs/dialogs.pro +++ b/tests/auto/widgets/dialogs/dialogs.pro @@ -17,4 +17,4 @@ SUBDIRS=\ qsidebar \ mac:qinputdialog.CONFIG += no_check_target # QTBUG-25496 -win32-g++*: SUBDIRS -= qfilesystemmodel # QTBUG-29403 +mingw: SUBDIRS -= qfilesystemmodel # QTBUG-29403 -- cgit v1.2.3 From a69525243f1355c7a6b68f00af0fe4fbfd1765e0 Mon Sep 17 00:00:00 2001 From: Frederik Gladhorn Date: Fri, 17 Jan 2014 16:46:56 +0100 Subject: Update test result generator script to set duration to 0 The actual code in testlib now indents the duration tag when it is for a function. Change-Id: Iee62db9c81f11dc54e57f166bf9fb2b7012b7e03 Reviewed-by: Friedemann Kleint --- tests/auto/testlib/selftests/generate_expected_output.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) (limited to 'tests') diff --git a/tests/auto/testlib/selftests/generate_expected_output.py b/tests/auto/testlib/selftests/generate_expected_output.py index bf1e808e22..3212bcda2e 100755 --- a/tests/auto/testlib/selftests/generate_expected_output.py +++ b/tests/auto/testlib/selftests/generate_expected_output.py @@ -57,7 +57,7 @@ isWindows = sys.platform == 'win32' replacements = [ (qtver, r'@INSERT_QT_VERSION_HERE@'), (rootPath.encode('unicode-escape').decode('utf-8'), r''), - (r'', r''), + (r'( *)', r'\1'), ] extraArgs = { -- cgit v1.2.3 From 603eac2dfbd14e05a810873c1417aa8dcfa246b4 Mon Sep 17 00:00:00 2001 From: Andrew Knight Date: Mon, 6 Jan 2014 23:07:36 +0200 Subject: d3dcompiler_qt: Place compiler options in the shader file name The compiler service needs to know what options to pass to the compiler, and these options can affect the outcome of the shader blob. Runtime compiled shader output must match this file name in the binary directory. Pre-compiled shader blobs (e.g. those placed in a resource file) are permitted to drop options from the file name if the implementor can ensure the blob is compatible with the target. Defines are not written out as options, but written into the shader source, and therefore affect the cache key. Change-Id: I11e4a43fcf6818ddb29aca5eba3d8647ba4021a1 Reviewed-by: Friedemann Kleint Reviewed-by: Oliver Wolff --- tests/auto/other/d3dcompiler/tst_d3dcompiler.cpp | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) (limited to 'tests') diff --git a/tests/auto/other/d3dcompiler/tst_d3dcompiler.cpp b/tests/auto/other/d3dcompiler/tst_d3dcompiler.cpp index f86c965d84..1a34c2076b 100644 --- a/tests/auto/other/d3dcompiler/tst_d3dcompiler.cpp +++ b/tests/auto/other/d3dcompiler/tst_d3dcompiler.cpp @@ -329,8 +329,9 @@ void tst_d3dcompiler::onlineCompile() QVERIFY(path.exists(QStringLiteral("source"))); QVERIFY(path.exists(QStringLiteral("binary"))); - const QByteArray hash = QCryptographicHash::hash(data, QCryptographicHash::Sha1).toHex(); - QFile input(path.absoluteFilePath(QStringLiteral("source/") + hash)); + const QString fileName = QCryptographicHash::hash(data, QCryptographicHash::Sha1).toHex() + + QStringLiteral("!main!ps_4_0!0"); + QFile input(path.absoluteFilePath(QStringLiteral("source/") + fileName)); QTRY_VERIFY_WITH_TIMEOUT(input.exists(), 3000); QTRY_VERIFY_WITH_TIMEOUT(input.isOpen() || input.open(QFile::ReadOnly), 1000); @@ -351,7 +352,7 @@ void tst_d3dcompiler::onlineCompile() reference->Release(); // Write to output directory - QFile output(path.absoluteFilePath(QStringLiteral("binary/") + hash)); + QFile output(path.absoluteFilePath(QStringLiteral("binary/") + fileName)); QVERIFY(output.open(QFile::WriteOnly)); output.write(referenceData); output.close(); -- cgit v1.2.3 From f504287e80e55442620343227a99000d84ad603a Mon Sep 17 00:00:00 2001 From: Friedemann Kleint Date: Fri, 17 Jan 2014 09:28:58 +0100 Subject: Testlib/generate_expected_output.py: Pass tests as command line arguments. Evaluate command line arguments and use directories only when empty. Change-Id: I818ec13c686018a3f607e91174e57d8f8bbf15f7 Reviewed-by: Frederik Gladhorn --- tests/auto/testlib/selftests/generate_expected_output.py | 11 ++++++++--- 1 file changed, 8 insertions(+), 3 deletions(-) (limited to 'tests') diff --git a/tests/auto/testlib/selftests/generate_expected_output.py b/tests/auto/testlib/selftests/generate_expected_output.py index 3212bcda2e..049bd4f448 100755 --- a/tests/auto/testlib/selftests/generate_expected_output.py +++ b/tests/auto/testlib/selftests/generate_expected_output.py @@ -85,9 +85,11 @@ def replaceInFile(file): sys.stdout.write(line) def subdirs(): + result = [] for path in os.listdir('.'): if os.path.isdir('./' + path): - yield path + result.append(path) + return result def getTestForPath(path): if isWindows: @@ -111,8 +113,11 @@ if isWindows: print("This script does not work on Windows.") exit() -print("Generating test results for: " + qtver + " in: " + rootPath) -for path in subdirs(): +tests = sys.argv[1:] +if len(tests) == 0: + tests = subdirs() +print("Generating " + str(len(tests)) + " test results for: " + qtver + " in: " + rootPath) +for path in tests: if os.path.isfile(getTestForPath(path)): generateTestData(path) else: -- cgit v1.2.3 From d5912b2a475f6d947fc11c754504afcf3aaddf31 Mon Sep 17 00:00:00 2001 From: Friedemann Kleint Date: Fri, 17 Jan 2014 09:31:05 +0100 Subject: Testlib/generate_expected_output.py: Fix encoding. Do not apply additional encoding when reading process output. Fixes errors when encountering UTF-8: Traceback (most recent call last): File "./generate_expected_output.py", line 117, in generateTestData(path) File "./generate_expected_output.py", line 106, in generateTestData out.write(data.decode('utf-8')) UnicodeEncodeError: 'ascii' codec can't encode character u'\xdc' in position 5485: ordinal not in range(128) Change-Id: Ib827787a59a18b4d3d0601645856517f43c01fc3 Reviewed-by: Frederik Gladhorn --- tests/auto/testlib/selftests/generate_expected_output.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) (limited to 'tests') diff --git a/tests/auto/testlib/selftests/generate_expected_output.py b/tests/auto/testlib/selftests/generate_expected_output.py index 049bd4f448..1c09faf4db 100755 --- a/tests/auto/testlib/selftests/generate_expected_output.py +++ b/tests/auto/testlib/selftests/generate_expected_output.py @@ -105,7 +105,7 @@ def generateTestData(testname): result = 'expected_' + testname + '.' + format data = subprocess.Popen(cmd, stdout=subprocess.PIPE, shell=True).communicate()[0] out = open(result, 'w') - out.write(data.decode('utf-8')) + out.write(data) out.close() replaceInFile(result) -- cgit v1.2.3 From ab2c90cc525f499f0061a5042e7370bb8db2af94 Mon Sep 17 00:00:00 2001 From: Friedemann Kleint Date: Wed, 8 Jan 2014 15:12:43 +0100 Subject: Introduce function for standard button texts to QPlatformTheme. Change-Id: I91eec04a95b5047d893490a70152237b2991f662 Reviewed-by: Shawn Rutledge --- tests/auto/other/languagechange/tst_languagechange.cpp | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) (limited to 'tests') diff --git a/tests/auto/other/languagechange/tst_languagechange.cpp b/tests/auto/other/languagechange/tst_languagechange.cpp index cc01d70454..16c3d56385 100644 --- a/tests/auto/other/languagechange/tst_languagechange.cpp +++ b/tests/auto/other/languagechange/tst_languagechange.cpp @@ -188,11 +188,11 @@ void tst_languageChange::retranslatability_data() //next we fill it with data QTest::newRow( "QInputDialog" ) << int(InputDialog) << (QSet() - << "QDialogButtonBox::Cancel"); + << "QPlatformTheme::Cancel"); QTest::newRow( "QColorDialog" ) << int(ColorDialog) << (QSet() - << "QDialogButtonBox::Cancel" + << "QPlatformTheme::Cancel" << "QColorDialog::&Sat:" << "QColorDialog::&Add to Custom Colors" << "QColorDialog::&Green:" @@ -237,8 +237,8 @@ void tst_languageChange::retranslatability_data() << "QFileSystemModel::Type::All other platforms" #endif // << "QFileSystemModel::%1 KB" - << "QDialogButtonBox::Cancel" - << "QDialogButtonBox::Open" + << "QPlatformTheme::Cancel" + << "QPlatformTheme::Open" << "QFileDialog::File &name:"); } -- cgit v1.2.3 From 71d265f5921fed35f51b5f169870c4ef51dde8a7 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?J=C4=99drzej=20Nowacki?= Date: Fri, 17 Jan 2014 13:49:41 +0100 Subject: Add missing header guards Change-Id: I515313289c0a4af0f675131760ad4ccd0c6e6149 Reviewed-by: Olivier Goffart --- tests/auto/tools/moc/assign-namespace.h | 4 ++++ tests/auto/tools/moc/backslash-newlines.h | 4 ++++ tests/auto/tools/moc/c-comments.h | 4 ++++ tests/auto/tools/moc/cstyle-enums.h | 4 ++++ tests/auto/tools/moc/cxx11-enums.h | 4 ++++ tests/auto/tools/moc/dir-in-include-path.h | 4 ++++ tests/auto/tools/moc/dollars.h | 4 ++++ tests/auto/tools/moc/error-on-wrong-notify.h | 4 ++++ tests/auto/tools/moc/escapes-in-string-literals.h | 4 ++++ tests/auto/tools/moc/extraqualification.h | 4 ++++ tests/auto/tools/moc/forgotten-qinterface.h | 4 ++++ tests/auto/tools/moc/forward-declared-param.h | 6 +++++- tests/auto/tools/moc/function-with-attributes.h | 4 ++++ tests/auto/tools/moc/interface-from-framework.h | 3 ++- tests/auto/tools/moc/macro-on-cmdline.h | 4 ++++ tests/auto/tools/moc/namespaced-flags.h | 4 ++++ tests/auto/tools/moc/no-keywords.h | 4 ++++ tests/auto/tools/moc/oldstyle-casts.h | 4 ++++ tests/auto/tools/moc/parse-boost.h | 4 ++++ tests/auto/tools/moc/pp-dollar-signs.h | 4 ++++ tests/auto/tools/moc/pure-virtual-signals.h | 4 ++++ tests/auto/tools/moc/qinvokable.h | 4 ++++ tests/auto/tools/moc/qprivateslots.h | 4 ++++ tests/auto/tools/moc/qtbug-35657-gadget.h | 5 +++++ tests/auto/tools/moc/related-metaobjects-in-gadget.h | 5 +++++ tests/auto/tools/moc/related-metaobjects-in-namespaces.h | 5 +++++ .../auto/tools/moc/single-quote-digit-separator-n3781.h | 4 ++++ tests/auto/tools/moc/single_function_keyword.h | 4 ++++ tests/auto/tools/moc/slots-with-void-template.h | 4 ++++ tests/auto/tools/moc/task192552.h | 4 ++++ tests/auto/tools/moc/task234909.h | 4 ++++ tests/auto/tools/moc/task87883.h | 4 ++++ tests/auto/tools/moc/template-gtgt.h | 4 ++++ tests/auto/tools/moc/trigraphs.h | 4 ++++ tests/auto/tools/moc/tst_moc.cpp | 16 ++++++++-------- tests/auto/tools/moc/unterminated-function-macro.h | 4 ++++ tests/auto/tools/moc/using-namespaces.h | 4 ++++ .../auto/tools/moc/warn-on-multiple-qobject-subclasses.h | 4 ++++ tests/auto/tools/moc/warn-on-property-without-read.h | 4 ++++ 39 files changed, 162 insertions(+), 10 deletions(-) (limited to 'tests') diff --git a/tests/auto/tools/moc/assign-namespace.h b/tests/auto/tools/moc/assign-namespace.h index 8f5ecc23e7..7377b38f6b 100644 --- a/tests/auto/tools/moc/assign-namespace.h +++ b/tests/auto/tools/moc/assign-namespace.h @@ -39,6 +39,9 @@ ** ****************************************************************************/ +#ifndef ASSIGN_NAMESPACE_H +#define ASSIGN_NAMESPACE_H + namespace A { namespace Nested @@ -50,3 +53,4 @@ namespace A namespace Mine = Qt; namespace Theirs = A::Nested::Space; +#endif // ASSIGN_NAMESPACE_H diff --git a/tests/auto/tools/moc/backslash-newlines.h b/tests/auto/tools/moc/backslash-newlines.h index 27c47843a2..29d800f26f 100644 --- a/tests/auto/tools/moc/backslash-newlines.h +++ b/tests/auto/tools/moc/backslash-newlines.h @@ -39,6 +39,9 @@ ** ****************************************************************************/ +#ifndef BACKSLASH_NEWLINES_H +#define BACKSLASH_NEWLINES_H + #include const int blackslashNewlinesDummy = 0 @@ -61,3 +64,4 @@ public slots: #undef value +#endif // BACKSLASH_NEWLINES_H diff --git a/tests/auto/tools/moc/c-comments.h b/tests/auto/tools/moc/c-comments.h index bded642737..dff4492287 100644 --- a/tests/auto/tools/moc/c-comments.h +++ b/tests/auto/tools/moc/c-comments.h @@ -38,6 +38,9 @@ ** $QT_END_LICENSE$ ** ****************************************************************************/ + +#ifndef C_COMMENTS_H +#define C_COMMENTS_H #include /* test support for multi-line comments in preprocessor statements */ @@ -53,3 +56,4 @@ public: }; #endif +#endif // C_COMMENTS_H diff --git a/tests/auto/tools/moc/cstyle-enums.h b/tests/auto/tools/moc/cstyle-enums.h index 38c5932f69..7d1f6d0147 100644 --- a/tests/auto/tools/moc/cstyle-enums.h +++ b/tests/auto/tools/moc/cstyle-enums.h @@ -38,6 +38,9 @@ ** $QT_END_LICENSE$ ** ****************************************************************************/ + +#ifndef CSTYLE_ENUMS_H +#define CSTYLE_ENUMS_H #include class CStyleEnums @@ -48,3 +51,4 @@ public: typedef enum { Foo, Bar } Baz; }; +#endif // CSTYLE_ENUMS_H diff --git a/tests/auto/tools/moc/cxx11-enums.h b/tests/auto/tools/moc/cxx11-enums.h index 0bd99b762c..215ae093d9 100644 --- a/tests/auto/tools/moc/cxx11-enums.h +++ b/tests/auto/tools/moc/cxx11-enums.h @@ -38,6 +38,9 @@ ** $QT_END_LICENSE$ ** ****************************************************************************/ + +#ifndef CXX11_ENUMS_H +#define CXX11_ENUMS_H #include #if defined(Q_COMPILER_CLASS_ENUM) || defined(Q_MOC_RUN) @@ -64,3 +67,4 @@ public: enum TypedEnum { B0, B1 , B2, B3 }; }; #endif +#endif // CXX11_ENUMS_H diff --git a/tests/auto/tools/moc/dir-in-include-path.h b/tests/auto/tools/moc/dir-in-include-path.h index 0d46f69d63..34f96bea6b 100644 --- a/tests/auto/tools/moc/dir-in-include-path.h +++ b/tests/auto/tools/moc/dir-in-include-path.h @@ -38,6 +38,9 @@ ** $QT_END_LICENSE$ ** ****************************************************************************/ + +#ifndef DIR_IN_INCLUDE_PATH_H +#define DIR_IN_INCLUDE_PATH_H #include class DirInIncludePath : public QObject, public MyInterface @@ -45,3 +48,4 @@ class DirInIncludePath : public QObject, public MyInterface Q_OBJECT Q_INTERFACES(MyInterface) }; +#endif // DIR_IN_INCLUDE_PATH_H diff --git a/tests/auto/tools/moc/dollars.h b/tests/auto/tools/moc/dollars.h index 8fab45559c..b136b00881 100644 --- a/tests/auto/tools/moc/dollars.h +++ b/tests/auto/tools/moc/dollars.h @@ -39,6 +39,9 @@ ** ****************************************************************************/ +#ifndef DOLLARS_H +#define DOLLARS_H + /* both GCC and clang allow $ in identifiers * So moc should not throw a parse error if it parses a file that contains such identifiers */ @@ -68,3 +71,4 @@ namespace $NS { }; } +#endif // DOLLARS_H diff --git a/tests/auto/tools/moc/error-on-wrong-notify.h b/tests/auto/tools/moc/error-on-wrong-notify.h index d13e352143..7358f4e77a 100644 --- a/tests/auto/tools/moc/error-on-wrong-notify.h +++ b/tests/auto/tools/moc/error-on-wrong-notify.h @@ -38,6 +38,9 @@ ** $QT_END_LICENSE$ ** ****************************************************************************/ + +#ifndef ERROR_ON_WRONG_NOTIFY_H +#define ERROR_ON_WRONG_NOTIFY_H #include class ClassWithWrongNOTIFY : public QObject @@ -51,3 +54,4 @@ public: int foo() { return m_foo; } }; +#endif // ERROR_ON_WRONG_NOTIFY_H diff --git a/tests/auto/tools/moc/escapes-in-string-literals.h b/tests/auto/tools/moc/escapes-in-string-literals.h index e2f044e196..25f9df2e74 100644 --- a/tests/auto/tools/moc/escapes-in-string-literals.h +++ b/tests/auto/tools/moc/escapes-in-string-literals.h @@ -38,6 +38,9 @@ ** $QT_END_LICENSE$ ** ****************************************************************************/ + +#ifndef ESCAPES_IN_STRING_LITERALS_H +#define ESCAPES_IN_STRING_LITERALS_H #include class StringLiterals: public QObject @@ -47,3 +50,4 @@ class StringLiterals: public QObject Q_CLASSINFO("Test2", "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa\123") Q_CLASSINFO("Test3", "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa\nb") }; +#endif // ESCAPES_IN_STRING_LITERALS_H diff --git a/tests/auto/tools/moc/extraqualification.h b/tests/auto/tools/moc/extraqualification.h index 5c69699067..875eb56184 100644 --- a/tests/auto/tools/moc/extraqualification.h +++ b/tests/auto/tools/moc/extraqualification.h @@ -39,6 +39,9 @@ ** ****************************************************************************/ +#ifndef EXTRAQUALIFICATION_H +#define EXTRAQUALIFICATION_H + #include class Test : public QObject @@ -55,3 +58,4 @@ public slots: public: Q_SLOT void Test::anotherOne() {} }; +#endif // EXTRAQUALIFICATION_H diff --git a/tests/auto/tools/moc/forgotten-qinterface.h b/tests/auto/tools/moc/forgotten-qinterface.h index 4c8aa45d92..0c2fd87aa5 100644 --- a/tests/auto/tools/moc/forgotten-qinterface.h +++ b/tests/auto/tools/moc/forgotten-qinterface.h @@ -39,6 +39,9 @@ ** ****************************************************************************/ +#ifndef FORGOTTEN_QINTERFACE_H +#define FORGOTTEN_QINTERFACE_H + #include struct MyInterface @@ -53,3 +56,4 @@ class Test : public QObject, public MyInterface { Q_OBJECT }; +#endif // FORGOTTEN_QINTERFACE_H diff --git a/tests/auto/tools/moc/forward-declared-param.h b/tests/auto/tools/moc/forward-declared-param.h index 013c6563e8..441745f9fc 100644 --- a/tests/auto/tools/moc/forward-declared-param.h +++ b/tests/auto/tools/moc/forward-declared-param.h @@ -38,6 +38,9 @@ ** $QT_END_LICENSE$ ** ****************************************************************************/ + +#ifndef FORWARD_DECLARED_PARAM_H +#define FORWARD_DECLARED_PARAM_H #include #include @@ -73,4 +76,5 @@ signals: void signalQSet(const QSet &); void signalQSet(const QSet &); void signalQSet(const QSet &); -}; \ No newline at end of file +}; +#endif // FORWARD_DECLARED_PARAM_H diff --git a/tests/auto/tools/moc/function-with-attributes.h b/tests/auto/tools/moc/function-with-attributes.h index afa02e6f3a..88f3e3fcb3 100644 --- a/tests/auto/tools/moc/function-with-attributes.h +++ b/tests/auto/tools/moc/function-with-attributes.h @@ -38,6 +38,9 @@ ** $QT_END_LICENSE$ ** ****************************************************************************/ + +#ifndef FUNCTION_WITH_ATTRIBUTES_H +#define FUNCTION_WITH_ATTRIBUTES_H #include // test support for gcc attributes with functions @@ -62,3 +65,4 @@ public slots: DEPRECATED2 void test2() {} }; +#endif // FUNCTION_WITH_ATTRIBUTES_H diff --git a/tests/auto/tools/moc/interface-from-framework.h b/tests/auto/tools/moc/interface-from-framework.h index 8a4188e5ab..c961d18bb9 100644 --- a/tests/auto/tools/moc/interface-from-framework.h +++ b/tests/auto/tools/moc/interface-from-framework.h @@ -38,7 +38,8 @@ ** $QT_END_LICENSE$ ** ****************************************************************************/ -#ifndef INTERFACE_FROM-FRAMEWORK_H + +#ifndef INTERFACE_FROM_FRAMEWORK_H #define INTERFACE_FROM_FRAMEWORK_H #include diff --git a/tests/auto/tools/moc/macro-on-cmdline.h b/tests/auto/tools/moc/macro-on-cmdline.h index 9609b7cd31..681340471d 100644 --- a/tests/auto/tools/moc/macro-on-cmdline.h +++ b/tests/auto/tools/moc/macro-on-cmdline.h @@ -39,6 +39,9 @@ ** ****************************************************************************/ +#ifndef MACRO_ON_CMDLINE_H +#define MACRO_ON_CMDLINE_H + #if FOO class Test : public QObject @@ -48,3 +51,4 @@ public: }; #endif +#endif // MACRO_ON_CMDLINE_H diff --git a/tests/auto/tools/moc/namespaced-flags.h b/tests/auto/tools/moc/namespaced-flags.h index 97aecfbf3c..ce1e12d83f 100644 --- a/tests/auto/tools/moc/namespaced-flags.h +++ b/tests/auto/tools/moc/namespaced-flags.h @@ -38,6 +38,9 @@ ** $QT_END_LICENSE$ ** ****************************************************************************/ + +#ifndef NAMESPACED_FLAGS_H +#define NAMESPACED_FLAGS_H #include namespace Foo { @@ -78,3 +81,4 @@ namespace Foo { } Q_DECLARE_OPERATORS_FOR_FLAGS( Foo::Bar::Flags ) +#endif // NAMESPACED_FLAGS_H diff --git a/tests/auto/tools/moc/no-keywords.h b/tests/auto/tools/moc/no-keywords.h index ffd5928370..3fa6f089e0 100644 --- a/tests/auto/tools/moc/no-keywords.h +++ b/tests/auto/tools/moc/no-keywords.h @@ -39,6 +39,9 @@ ** ****************************************************************************/ +#ifndef NO_KEYWORDS_H +#define NO_KEYWORDS_H + #define QT_NO_KEYWORDS #undef signals #undef slots @@ -85,3 +88,4 @@ private: #define emit #undef QT_NO_KEYWORDS +#endif // NO_KEYWORDS_H diff --git a/tests/auto/tools/moc/oldstyle-casts.h b/tests/auto/tools/moc/oldstyle-casts.h index 89f90a3504..42f8381072 100644 --- a/tests/auto/tools/moc/oldstyle-casts.h +++ b/tests/auto/tools/moc/oldstyle-casts.h @@ -38,6 +38,9 @@ ** $QT_END_LICENSE$ ** ****************************************************************************/ + +#ifndef OLDSTYLE_CASTS_H +#define OLDSTYLE_CASTS_H #include class Foo: public QObject @@ -54,3 +57,4 @@ public slots: inline void slot(int, QObject * const) {} }; +#endif // OLDSTYLE_CASTS_H diff --git a/tests/auto/tools/moc/parse-boost.h b/tests/auto/tools/moc/parse-boost.h index b93eb7130c..4dd7693358 100644 --- a/tests/auto/tools/moc/parse-boost.h +++ b/tests/auto/tools/moc/parse-boost.h @@ -38,6 +38,9 @@ ** $QT_END_LICENSE$ ** ****************************************************************************/ + +#ifndef PARSE_BOOST_H +#define PARSE_BOOST_H #include #include #include @@ -124,3 +127,4 @@ #include #include #include +#endif // PARSE_BOOST_H diff --git a/tests/auto/tools/moc/pp-dollar-signs.h b/tests/auto/tools/moc/pp-dollar-signs.h index 98134a5019..a90b654ee4 100644 --- a/tests/auto/tools/moc/pp-dollar-signs.h +++ b/tests/auto/tools/moc/pp-dollar-signs.h @@ -39,4 +39,8 @@ ** ****************************************************************************/ +#ifndef PP_DOLLAR_SIGNS_H +#define PP_DOLLAR_SIGNS_H + $$ = parser->createFoo() +#endif // PP_DOLLAR_SIGNS_H diff --git a/tests/auto/tools/moc/pure-virtual-signals.h b/tests/auto/tools/moc/pure-virtual-signals.h index fb23089b30..070f5894a3 100644 --- a/tests/auto/tools/moc/pure-virtual-signals.h +++ b/tests/auto/tools/moc/pure-virtual-signals.h @@ -38,6 +38,9 @@ ** $QT_END_LICENSE$ ** ****************************************************************************/ + +#ifndef PURE_VIRTUAL_SIGNALS_H +#define PURE_VIRTUAL_SIGNALS_H #include class PureVirtualSignalsTest : public QObject @@ -58,3 +61,4 @@ signals: void mySignal(); void mySignal2(int foo); }; +#endif // PURE_VIRTUAL_SIGNALS_H diff --git a/tests/auto/tools/moc/qinvokable.h b/tests/auto/tools/moc/qinvokable.h index 9070f2ab8e..a47ae72b2b 100644 --- a/tests/auto/tools/moc/qinvokable.h +++ b/tests/auto/tools/moc/qinvokable.h @@ -39,6 +39,9 @@ ** ****************************************************************************/ +#ifndef QINVOKABLE_H +#define QINVOKABLE_H + #include class InvokableBeforeReturnType : public QObject @@ -55,3 +58,4 @@ public: Q_INVOKABLE inline void foo() {} Q_INVOKABLE virtual void bar() {} }; +#endif // QINVOKABLE_H diff --git a/tests/auto/tools/moc/qprivateslots.h b/tests/auto/tools/moc/qprivateslots.h index 5b0db3d27e..82a68270af 100644 --- a/tests/auto/tools/moc/qprivateslots.h +++ b/tests/auto/tools/moc/qprivateslots.h @@ -39,6 +39,9 @@ ** ****************************************************************************/ +#ifndef QPRIVATESLOTS_H +#define QPRIVATESLOTS_H + #include struct TestQPrivateSlots_Private @@ -58,3 +61,4 @@ private: TestQPrivateSlots_Private *d; }; +#endif // QPRIVATESLOTS_H diff --git a/tests/auto/tools/moc/qtbug-35657-gadget.h b/tests/auto/tools/moc/qtbug-35657-gadget.h index 1f25ce1b1d..c030405c67 100644 --- a/tests/auto/tools/moc/qtbug-35657-gadget.h +++ b/tests/auto/tools/moc/qtbug-35657-gadget.h @@ -39,6 +39,9 @@ ** ****************************************************************************/ +#ifndef QTBUG_35657_GADGET_H +#define QTBUG_35657_GADGET_H + #include namespace QTBUG_35657 { @@ -49,3 +52,5 @@ namespace QTBUG_35657 { enum SomeEnum { SomeEnumValue = 0 }; }; } + +#endif // QTBUG_35657_GADGET_H diff --git a/tests/auto/tools/moc/related-metaobjects-in-gadget.h b/tests/auto/tools/moc/related-metaobjects-in-gadget.h index 5665a79251..556e92efaf 100644 --- a/tests/auto/tools/moc/related-metaobjects-in-gadget.h +++ b/tests/auto/tools/moc/related-metaobjects-in-gadget.h @@ -39,6 +39,9 @@ ** ****************************************************************************/ +#ifndef RELATED_METAOBJECTS_IN_GADGET_H +#define RELATED_METAOBJECTS_IN_GADGET_H + #include #include "qtbug-35657-gadget.h" @@ -52,3 +55,5 @@ namespace QTBUG_35657 { A::SomeEnum blah() const { return A::SomeEnumValue; } }; } + +#endif // RELATED_METAOBJECTS_IN_GADGET_H diff --git a/tests/auto/tools/moc/related-metaobjects-in-namespaces.h b/tests/auto/tools/moc/related-metaobjects-in-namespaces.h index 0a3e9ed77d..4be856391f 100644 --- a/tests/auto/tools/moc/related-metaobjects-in-namespaces.h +++ b/tests/auto/tools/moc/related-metaobjects-in-namespaces.h @@ -39,6 +39,9 @@ ** ****************************************************************************/ +#ifndef RELATED_METAOBJECTS_IN_NAMESPACES_H +#define RELATED_METAOBJECTS_IN_NAMESPACES_H + #include namespace QTBUG_2151 { @@ -58,3 +61,5 @@ namespace QTBUG_2151 { A::SomeEnum blah() const { return A::SomeEnumValue; } }; } + +#endif // RELATED_METAOBJECTS_IN_NAMESPACES_H diff --git a/tests/auto/tools/moc/single-quote-digit-separator-n3781.h b/tests/auto/tools/moc/single-quote-digit-separator-n3781.h index 0b234011d5..f5f39c7dd7 100644 --- a/tests/auto/tools/moc/single-quote-digit-separator-n3781.h +++ b/tests/auto/tools/moc/single-quote-digit-separator-n3781.h @@ -39,6 +39,9 @@ ** ****************************************************************************/ +#ifndef SINGLE_QUOTE_DIGIT_SEPARATOR_N3781_H +#define SINGLE_QUOTE_DIGIT_SEPARATOR_N3781_H + #include class KDAB : public QObject @@ -56,3 +59,4 @@ public: }; Q_ENUMS(Salaries) }; +#endif // SINGLE_QUOTE_DIGIT_SEPARATOR_N3781_H diff --git a/tests/auto/tools/moc/single_function_keyword.h b/tests/auto/tools/moc/single_function_keyword.h index 44a1a41d30..6717509517 100644 --- a/tests/auto/tools/moc/single_function_keyword.h +++ b/tests/auto/tools/moc/single_function_keyword.h @@ -38,6 +38,9 @@ ** $QT_END_LICENSE$ ** ****************************************************************************/ + +#ifndef SINGLE_FUNCTION_KEYWORD_H +#define SINGLE_FUNCTION_KEYWORD_H #include class SingleFunctionKeywordBeforeReturnType : public QObject @@ -73,3 +76,4 @@ public: inline Q_SLOT void mySlot() { emit mySignal(); } }; +#endif // SINGLE_FUNCTION_KEYWORD_H diff --git a/tests/auto/tools/moc/slots-with-void-template.h b/tests/auto/tools/moc/slots-with-void-template.h index c38437ca54..524d565345 100644 --- a/tests/auto/tools/moc/slots-with-void-template.h +++ b/tests/auto/tools/moc/slots-with-void-template.h @@ -38,6 +38,9 @@ ** $QT_END_LICENSE$ ** ****************************************************************************/ + +#ifndef SLOTS_WITH_VOID_TEMPLATE_H +#define SLOTS_WITH_VOID_TEMPLATE_H #include template @@ -59,3 +62,4 @@ signals: void myVoidSignal(); void myVoidSignal2(void); }; +#endif // SLOTS_WITH_VOID_TEMPLATE_H diff --git a/tests/auto/tools/moc/task192552.h b/tests/auto/tools/moc/task192552.h index 23665bbb07..b221984d7d 100644 --- a/tests/auto/tools/moc/task192552.h +++ b/tests/auto/tools/moc/task192552.h @@ -38,6 +38,9 @@ ** $QT_END_LICENSE$ ** ****************************************************************************/ + +#ifndef TASK192552_H +#define TASK192552_H /* <:: is not valid C++, but we want moc to treat it as < :: since this is usually the intention @@ -53,3 +56,4 @@ public: QList<::QObject*> m_objects; #endif }; +#endif // TASK192552_H diff --git a/tests/auto/tools/moc/task234909.h b/tests/auto/tools/moc/task234909.h index 2ad8b9a410..37948441eb 100644 --- a/tests/auto/tools/moc/task234909.h +++ b/tests/auto/tools/moc/task234909.h @@ -38,6 +38,9 @@ ** $QT_END_LICENSE$ ** ****************************************************************************/ + +#ifndef TASK234909_H +#define TASK234909_H #include namespace NS_A { @@ -71,3 +74,4 @@ namespace NS_Main { } } +#endif // TASK234909_H diff --git a/tests/auto/tools/moc/task87883.h b/tests/auto/tools/moc/task87883.h index d6687588f7..65988221f1 100644 --- a/tests/auto/tools/moc/task87883.h +++ b/tests/auto/tools/moc/task87883.h @@ -38,6 +38,9 @@ ** $QT_END_LICENSE$ ** ****************************************************************************/ + +#ifndef TASK87883_H +#define TASK87883_H /* The bug is triggered only if there is a multiline comment after an #include statement that in the following line contains a single quote but lacks a finishing @@ -55,3 +58,4 @@ public: inline Task87883() {} }; +#endif // TASK87883_H diff --git a/tests/auto/tools/moc/template-gtgt.h b/tests/auto/tools/moc/template-gtgt.h index 2c2f56c34d..b5d83b5796 100644 --- a/tests/auto/tools/moc/template-gtgt.h +++ b/tests/auto/tools/moc/template-gtgt.h @@ -38,6 +38,9 @@ ** $QT_END_LICENSE$ ** ****************************************************************************/ + +#ifndef TEMPLATE_GTGT_H +#define TEMPLATE_GTGT_H template class myTemplate : QString, @@ -58,3 +61,4 @@ public: { } }; +#endif // TEMPLATE_GTGT_H diff --git a/tests/auto/tools/moc/trigraphs.h b/tests/auto/tools/moc/trigraphs.h index cc1824190e..301ea35265 100644 --- a/tests/auto/tools/moc/trigraphs.h +++ b/tests/auto/tools/moc/trigraphs.h @@ -39,6 +39,9 @@ ** ****************************************************************************/ +#ifndef TRIGRAPHS_H +#define TRIGRAPHS_H + #include namespace AAA { @@ -61,3 +64,4 @@ namespace BBB { }; } +#endif // TRIGRAPHS_H diff --git a/tests/auto/tools/moc/tst_moc.cpp b/tests/auto/tools/moc/tst_moc.cpp index e0e6129075..031884501c 100644 --- a/tests/auto/tools/moc/tst_moc.cpp +++ b/tests/auto/tools/moc/tst_moc.cpp @@ -692,8 +692,8 @@ void tst_Moc::warnOnExtraSignalSlotQualifiaction() QVERIFY(!mocOut.isEmpty()); QString mocWarning = QString::fromLocal8Bit(proc.readAllStandardError()); QCOMPARE(mocWarning, header + - QString(":53: Warning: Function declaration Test::badFunctionDeclaration contains extra qualification. Ignoring as signal or slot.\n") + - header + QString(":56: Warning: parsemaybe: Function declaration Test::anotherOne contains extra qualification. Ignoring as signal or slot.\n")); + QString(":56: Warning: Function declaration Test::badFunctionDeclaration contains extra qualification. Ignoring as signal or slot.\n") + + header + QString(":59: Warning: parsemaybe: Function declaration Test::anotherOne contains extra qualification. Ignoring as signal or slot.\n")); #else QSKIP("Only tested on linux/gcc"); #endif @@ -971,7 +971,7 @@ void tst_Moc::warnOnMultipleInheritance() QVERIFY(!mocOut.isEmpty()); QString mocWarning = QString::fromLocal8Bit(proc.readAllStandardError()); QCOMPARE(mocWarning, header + - QString(":53: Warning: Class Bar inherits from two QObject subclasses QWindow and Foo. This is not supported!\n")); + QString(":56: Warning: Class Bar inherits from two QObject subclasses QWindow and Foo. This is not supported!\n")); #else QSKIP("Only tested on linux/gcc"); #endif @@ -1034,7 +1034,7 @@ void tst_Moc::forgottenQInterface() QVERIFY(!mocOut.isEmpty()); QString mocWarning = QString::fromLocal8Bit(proc.readAllStandardError()); QCOMPARE(mocWarning, header + - QString(":55: Warning: Class Test implements the interface MyInterface but does not list it in Q_INTERFACES. qobject_cast to MyInterface will not work!\n")); + QString(":58: Warning: Class Test implements the interface MyInterface but does not list it in Q_INTERFACES. qobject_cast to MyInterface will not work!\n")); #else QSKIP("Only tested on linux/gcc"); #endif @@ -1350,7 +1350,7 @@ void tst_Moc::warnOnPropertyWithoutREAD() QVERIFY(!mocOut.isEmpty()); QString mocWarning = QString::fromLocal8Bit(proc.readAllStandardError()); QCOMPARE(mocWarning, header + - QString(":46: Warning: Property declaration foo has no READ accessor function or associated MEMBER variable. The property will be invalid.\n")); + QString(":49: Warning: Property declaration foo has no READ accessor function or associated MEMBER variable. The property will be invalid.\n")); #else QSKIP("Only tested on linux/gcc"); #endif @@ -1460,8 +1460,8 @@ void tst_Moc::warnOnVirtualSignal() QByteArray mocOut = proc.readAllStandardOutput(); QVERIFY(!mocOut.isEmpty()); QString mocWarning = QString::fromLocal8Bit(proc.readAllStandardError()); - QCOMPARE(mocWarning, header + QString(":48: Warning: Signals cannot be declared virtual\n") + - header + QString(":50: Warning: Signals cannot be declared virtual\n")); + QCOMPARE(mocWarning, header + QString(":51: Warning: Signals cannot be declared virtual\n") + + header + QString(":53: Warning: Signals cannot be declared virtual\n")); #else QSKIP("Only tested on linux/gcc"); #endif @@ -1575,7 +1575,7 @@ void tst_Moc::notifyError() QVERIFY(mocOut.isEmpty()); QString mocError = QString::fromLocal8Bit(proc.readAllStandardError()); QCOMPARE(mocError, header + - QString(":52: Error: NOTIFY signal 'fooChanged' of property 'foo' does not exist in class ClassWithWrongNOTIFY.\n")); + QString(":55: Error: NOTIFY signal 'fooChanged' of property 'foo' does not exist in class ClassWithWrongNOTIFY.\n")); #else QSKIP("Only tested on linux/gcc"); #endif diff --git a/tests/auto/tools/moc/unterminated-function-macro.h b/tests/auto/tools/moc/unterminated-function-macro.h index 813d60f0e4..60595d1536 100644 --- a/tests/auto/tools/moc/unterminated-function-macro.h +++ b/tests/auto/tools/moc/unterminated-function-macro.h @@ -39,6 +39,9 @@ ** ****************************************************************************/ +#ifndef UNTERMINATED_FUNCTION_MACRO_H +#define UNTERMINATED_FUNCTION_MACRO_H + class Dummy : public QObject { Q_OBJECT } @@ -49,3 +52,4 @@ static void foo() { MACRO(foo } +#endif // UNTERMINATED_FUNCTION_MACRO_H diff --git a/tests/auto/tools/moc/using-namespaces.h b/tests/auto/tools/moc/using-namespaces.h index c662bb762a..64ffa96a21 100644 --- a/tests/auto/tools/moc/using-namespaces.h +++ b/tests/auto/tools/moc/using-namespaces.h @@ -39,6 +39,9 @@ ** ****************************************************************************/ +#ifndef USING_NAMESPACES_H +#define USING_NAMESPACES_H + namespace Foo {} namespace Bar { @@ -54,3 +57,4 @@ using namespace Foo; using namespace Bar::Huh; using namespace ::Top; +#endif // USING_NAMESPACES_H diff --git a/tests/auto/tools/moc/warn-on-multiple-qobject-subclasses.h b/tests/auto/tools/moc/warn-on-multiple-qobject-subclasses.h index 346909cca1..bbe416f7f0 100644 --- a/tests/auto/tools/moc/warn-on-multiple-qobject-subclasses.h +++ b/tests/auto/tools/moc/warn-on-multiple-qobject-subclasses.h @@ -39,6 +39,9 @@ ** ****************************************************************************/ +#ifndef WARN_ON_MULTIPLE_QOBJECT_SUBCLASSES_H +#define WARN_ON_MULTIPLE_QOBJECT_SUBCLASSES_H + #include class Foo : public QObject @@ -53,3 +56,4 @@ class Bar : public QWindow, public Foo }; +#endif // WARN_ON_MULTIPLE_QOBJECT_SUBCLASSES_H diff --git a/tests/auto/tools/moc/warn-on-property-without-read.h b/tests/auto/tools/moc/warn-on-property-without-read.h index 75d2953aa1..85c092d240 100644 --- a/tests/auto/tools/moc/warn-on-property-without-read.h +++ b/tests/auto/tools/moc/warn-on-property-without-read.h @@ -38,6 +38,9 @@ ** $QT_END_LICENSE$ ** ****************************************************************************/ + +#ifndef WARN_ON_PROPERTY_WITHOUT_READ_H +#define WARN_ON_PROPERTY_WITHOUT_READ_H #include class ClassWithPropertyWithoutREAD : public QObject @@ -46,3 +49,4 @@ class ClassWithPropertyWithoutREAD : public QObject Q_PROPERTY(int foo) Q_PROPERTY(int bar READ bar) }; +#endif // WARN_ON_PROPERTY_WITHOUT_READ_H -- cgit v1.2.3 From 260b0b4ed619055486766a7743ff094181829399 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?J=C4=99drzej=20Nowacki?= Date: Fri, 17 Jan 2014 13:56:08 +0100 Subject: Rename a test class to a bit more verbose name. That way we can avoid name conflict with a namespace defined in a different moc test Change-Id: Id631d7c5556c9d6940e16dc53eb438dbcd0095eb Reviewed-by: Olivier Goffart --- tests/auto/tools/moc/oldstyle-casts.h | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) (limited to 'tests') diff --git a/tests/auto/tools/moc/oldstyle-casts.h b/tests/auto/tools/moc/oldstyle-casts.h index 42f8381072..0c4e9e8e00 100644 --- a/tests/auto/tools/moc/oldstyle-casts.h +++ b/tests/auto/tools/moc/oldstyle-casts.h @@ -43,7 +43,7 @@ #define OLDSTYLE_CASTS_H #include -class Foo: public QObject +class OldStyleCast: public QObject { Q_OBJECT public: -- cgit v1.2.3 From 5c19fad8c178b055e8864b2576cfa3cbaa44a19e Mon Sep 17 00:00:00 2001 From: "Richard J. Moore" Date: Fri, 17 Jan 2014 21:23:20 +0000 Subject: Ensure weak ciphers are not part of the default SSL configuration. Any cipher that is < 128 bits is excluded from the default SSL configuration. These ciphers are still included in the list of availableCiphers() and can be used by applications if required. Calling QSslSocket::setDefaultCiphers(QSslSocket::availableCiphers()) will restore the old behavior. Note that in doing so I spotted that calling defaultCiphers() before doing other actions with SSL had an existing bug that I've addressed as part of the change. [ChangeLog][Important Behavior Changes] The default set of ciphers used by QSslSocket has been changed to exclude ciphers that are using key lengths smaller than 128 bits. These ciphers are still available and can be enabled by applications if required. Change-Id: If2241dda67b624e5febf788efa1369f38c6b1dba Reviewed-by: Thiago Macieira --- .../auto/network/ssl/qsslsocket/tst_qsslsocket.cpp | 22 +++++++++++++++++----- 1 file changed, 17 insertions(+), 5 deletions(-) (limited to 'tests') diff --git a/tests/auto/network/ssl/qsslsocket/tst_qsslsocket.cpp b/tests/auto/network/ssl/qsslsocket/tst_qsslsocket.cpp index 82543fbc91..3162165139 100644 --- a/tests/auto/network/ssl/qsslsocket/tst_qsslsocket.cpp +++ b/tests/auto/network/ssl/qsslsocket/tst_qsslsocket.cpp @@ -589,13 +589,13 @@ void tst_QSslSocket::ciphers() return; QSslSocket socket; - QCOMPARE(socket.ciphers(), QSslSocket::supportedCiphers()); + QCOMPARE(socket.ciphers(), QSslSocket::defaultCiphers()); socket.setCiphers(QList()); QVERIFY(socket.ciphers().isEmpty()); socket.setCiphers(socket.defaultCiphers()); - QCOMPARE(socket.ciphers(), QSslSocket::supportedCiphers()); + QCOMPARE(socket.ciphers(), QSslSocket::defaultCiphers()); socket.setCiphers(socket.defaultCiphers()); - QCOMPARE(socket.ciphers(), QSslSocket::supportedCiphers()); + QCOMPARE(socket.ciphers(), QSslSocket::defaultCiphers()); // Task 164356 socket.setCiphers("ALL:!ADH:!LOW:!EXP:!MD5:@STRENGTH"); @@ -678,6 +678,11 @@ void tst_QSslSocket::sessionCipher() if (!socket->waitForEncrypted(5000)) QSKIP("Skipping flaky test - See QTBUG-29941"); QVERIFY(!socket->sessionCipher().isNull()); + + qDebug() << "Supported Ciphers:" << QSslSocket::supportedCiphers(); + qDebug() << "Default Ciphers:" << QSslSocket::defaultCiphers(); + qDebug() << "Session Cipher:" << socket->sessionCipher(); + QVERIFY(QSslSocket::supportedCiphers().contains(socket->sessionCipher())); socket->disconnectFromHost(); QVERIFY(socket->waitForDisconnected()); @@ -1386,6 +1391,15 @@ void tst_QSslSocket::defaultCaCertificates() void tst_QSslSocket::defaultCiphers() { + if (!QSslSocket::supportsSsl()) + return; + + QList ciphers = QSslSocket::defaultCiphers(); + QVERIFY(ciphers.size() > 1); + + QSslSocket socket; + QCOMPARE(socket.defaultCiphers(), ciphers); + QCOMPARE(socket.ciphers(), ciphers); } void tst_QSslSocket::resetDefaultCiphers() @@ -1410,8 +1424,6 @@ void tst_QSslSocket::supportedCiphers() QSslSocket socket; QCOMPARE(socket.supportedCiphers(), ciphers); - QCOMPARE(socket.defaultCiphers(), ciphers); - QCOMPARE(socket.ciphers(), ciphers); } void tst_QSslSocket::systemCaCertificates() -- cgit v1.2.3 From afe3902a30030280b48bfeed403db5edf56336a1 Mon Sep 17 00:00:00 2001 From: Friedemann Kleint Date: Thu, 16 Jan 2014 13:45:37 +0100 Subject: Testlib: Use QString for messages in QAbstractTestLogger::addMessage() Task-number: QTBUG-35743 [ChangeLog][QtTest][Windows] Use correct UTF-8 encoding for XML test results on platforms with different console encoding. Change-Id: Ice9d03192098f931e5dac358928e0c4421ab715e Reviewed-by: Frederik Gladhorn --- tests/auto/testlib/selftests/badxml/tst_badxml.cpp | 21 ++++++++++++++++++ .../testlib/selftests/expected_badxml.lightxml | 25 ++++++++++++++-------- tests/auto/testlib/selftests/expected_badxml.txt | 12 ++++++----- tests/auto/testlib/selftests/expected_badxml.xml | 25 ++++++++++++++-------- .../testlib/selftests/expected_badxml.xunitxml | 6 +++++- tests/auto/testlib/selftests/tst_selftests.cpp | 2 ++ 6 files changed, 67 insertions(+), 24 deletions(-) (limited to 'tests') diff --git a/tests/auto/testlib/selftests/badxml/tst_badxml.cpp b/tests/auto/testlib/selftests/badxml/tst_badxml.cpp index 1ccbdd7899..3f2385bb30 100644 --- a/tests/auto/testlib/selftests/badxml/tst_badxml.cpp +++ b/tests/auto/testlib/selftests/badxml/tst_badxml.cpp @@ -41,6 +41,7 @@ #include +#include #include #include @@ -61,6 +62,8 @@ private slots: void failWithNoFile() const; + void encoding(); + public: static QList const& badStrings(); }; @@ -126,6 +129,24 @@ void tst_BadXml::failWithNoFile() const QTest::qFail("failure message", 0, 0); } +// QTBUG-35743, test whether XML is using correct UTF-8 encoding +// on platforms where the console encoding differs. +void tst_BadXml::encoding() +{ + QStringList arguments = QCoreApplication::arguments(); + arguments.pop_front(); // Prevent match on binary "badxml" + if (arguments.filter(QStringLiteral("xml")).isEmpty()) + QSKIP("Skipped for text due to unpredictable console encoding."); + QString string; + string += QChar(ushort(0xDC)); // German umlaut Ue + string += QStringLiteral("lrich "); + string += QChar(ushort(0xDC)); // German umlaut Ue + string += QStringLiteral("ml"); + string += QChar(ushort(0xE4)); // German umlaut ae + string += QStringLiteral("ut"); + qDebug() << string; +} + /* Outputs a message containing a bad string. */ diff --git a/tests/auto/testlib/selftests/expected_badxml.lightxml b/tests/auto/testlib/selftests/expected_badxml.lightxml index 15981b12be..e4c79e3bb0 100644 --- a/tests/auto/testlib/selftests/expected_badxml.lightxml +++ b/tests/auto/testlib/selftests/expected_badxml.lightxml @@ -4,14 +4,14 @@ - + text ]]]> more text]]> - + text ]]]> more text]]> @@ -27,7 +27,7 @@ - + @@ -43,7 +43,7 @@ open < tags < text]]> - + open < tags < text]]> @@ -59,7 +59,7 @@ " mixed ]]]> up > " in < the ]]]> hopes < of triggering "< ]]]> bugs]]> - + " mixed ]]]> up > " in < the ]]]> hopes < of triggering "< ]]]> bugs]]> @@ -71,7 +71,7 @@ " mixed ]]]> up > " in < the ]]]> hopes < of triggering "< ]]]> bugs]]> - + @@ -102,16 +102,23 @@ - + - + + + + + + + + - + diff --git a/tests/auto/testlib/selftests/expected_badxml.txt b/tests/auto/testlib/selftests/expected_badxml.txt index 3c65231529..a42013df0b 100644 --- a/tests/auto/testlib/selftests/expected_badxml.txt +++ b/tests/auto/testlib/selftests/expected_badxml.txt @@ -3,28 +3,28 @@ Config: Using QtTest library @INSERT_QT_VERSION_HERE@, Qt @INSERT_QT_VERSION_HER PASS : tst_BadXml::initTestCase() QDEBUG : tst_BadXml::badDataTag(fail end cdata ]]> text ]]> more text) a message FAIL! : tst_BadXml::badDataTag(fail end cdata ]]> text ]]> more text) a failure - Loc: [tst_badxml.cpp(111)] + Loc: [tst_badxml.cpp(114)] QDEBUG : tst_BadXml::badDataTag(pass end cdata ]]> text ]]> more text) a message PASS : tst_BadXml::badDataTag(pass end cdata ]]> text ]]> more text) RESULT : tst_BadXml::badDataTag():"pass end cdata ]]> text ]]> more text": 0 events per iteration (total: 0, iterations: 1) QDEBUG : tst_BadXml::badDataTag(fail quotes " text" more text) a message FAIL! : tst_BadXml::badDataTag(fail quotes " text" more text) a failure - Loc: [tst_badxml.cpp(111)] + Loc: [tst_badxml.cpp(114)] QDEBUG : tst_BadXml::badDataTag(pass quotes " text" more text) a message PASS : tst_BadXml::badDataTag(pass quotes " text" more text) RESULT : tst_BadXml::badDataTag():"pass quotes " text" more text": 0 events per iteration (total: 0, iterations: 1) QDEBUG : tst_BadXml::badDataTag(fail xml close > open < tags < text) a message FAIL! : tst_BadXml::badDataTag(fail xml close > open < tags < text) a failure - Loc: [tst_badxml.cpp(111)] + Loc: [tst_badxml.cpp(114)] QDEBUG : tst_BadXml::badDataTag(pass xml close > open < tags < text) a message PASS : tst_BadXml::badDataTag(pass xml close > open < tags < text) RESULT : tst_BadXml::badDataTag():"pass xml close > open < tags < text": 0 events per iteration (total: 0, iterations: 1) QDEBUG : tst_BadXml::badDataTag(fail all > " mixed ]]> up > " in < the ]]> hopes < of triggering "< ]]> bugs) a message FAIL! : tst_BadXml::badDataTag(fail all > " mixed ]]> up > " in < the ]]> hopes < of triggering "< ]]> bugs) a failure - Loc: [tst_badxml.cpp(111)] + Loc: [tst_badxml.cpp(114)] QDEBUG : tst_BadXml::badDataTag(pass all > " mixed ]]> up > " in < the ]]> hopes < of triggering "< ]]> bugs) a message PASS : tst_BadXml::badDataTag(pass all > " mixed ]]> up > " in < the ]]> hopes < of triggering "< ]]> bugs) RESULT : tst_BadXml::badDataTag():"pass all > " mixed ]]> up > " in < the ]]> hopes < of triggering "< ]]> bugs": @@ -38,6 +38,8 @@ PASS : tst_BadXml::badMessage(string 2) QDEBUG : tst_BadXml::badMessage(string 3) all > " mixed ]]> up > " in < the ]]> hopes < of triggering "< ]]> bugs PASS : tst_BadXml::badMessage(string 3) FAIL! : tst_BadXml::failWithNoFile() failure message +SKIP : tst_BadXml::encoding() Skipped for text due to unpredictable console encoding. + Loc: [tst_badxml.cpp(139)] PASS : tst_BadXml::cleanupTestCase() -Totals: 10 passed, 5 failed, 0 skipped +Totals: 10 passed, 5 failed, 1 skipped ********* Finished testing of tst_BadXml ********* diff --git a/tests/auto/testlib/selftests/expected_badxml.xml b/tests/auto/testlib/selftests/expected_badxml.xml index c3330a6b97..0811db0f3a 100644 --- a/tests/auto/testlib/selftests/expected_badxml.xml +++ b/tests/auto/testlib/selftests/expected_badxml.xml @@ -6,14 +6,14 @@ - + text ]]]> more text]]> - + text ]]]> more text]]> @@ -29,7 +29,7 @@ - + @@ -45,7 +45,7 @@ open < tags < text]]> - + open < tags < text]]> @@ -61,7 +61,7 @@ " mixed ]]]> up > " in < the ]]]> hopes < of triggering "< ]]]> bugs]]> - + " mixed ]]]> up > " in < the ]]]> hopes < of triggering "< ]]]> bugs]]> @@ -73,7 +73,7 @@ " mixed ]]]> up > " in < the ]]]> hopes < of triggering "< ]]]> bugs]]> - + @@ -104,17 +104,24 @@ - + - + + + + + + + + - + diff --git a/tests/auto/testlib/selftests/expected_badxml.xunitxml b/tests/auto/testlib/selftests/expected_badxml.xunitxml index 939e887a88..a696da58c9 100644 --- a/tests/auto/testlib/selftests/expected_badxml.xunitxml +++ b/tests/auto/testlib/selftests/expected_badxml.xunitxml @@ -1,5 +1,5 @@ - + @@ -28,6 +28,9 @@ + + + @@ -42,5 +45,6 @@ open < tags < text]]> " mixed ]]]> up > " in < the ]]]> hopes < of triggering "< ]]]> bugs]]> + diff --git a/tests/auto/testlib/selftests/tst_selftests.cpp b/tests/auto/testlib/selftests/tst_selftests.cpp index 97083d8d61..c2265ad198 100644 --- a/tests/auto/testlib/selftests/tst_selftests.cpp +++ b/tests/auto/testlib/selftests/tst_selftests.cpp @@ -486,6 +486,8 @@ void tst_Selftests::runSubTest_data() continue; } } + if (subtest == "badxml" && (loggerSet.name == "all loggers" || loggerSet.name.contains("txt"))) + continue; // XML only, do not mix txt and XML for encoding test. const bool crashes = subtest == QLatin1String("assert") || subtest == QLatin1String("exceptionthrow") || subtest == QLatin1String("fetchbogus") || subtest == QLatin1String("crashedterminate") || subtest == QLatin1String("crashes") || subtest == QLatin1String("silent"); -- cgit v1.2.3 From b8a38a6737acd670d92197ca5b009590d9fd8a9c Mon Sep 17 00:00:00 2001 From: Kai Koehne Date: Thu, 9 Jan 2014 15:38:17 +0100 Subject: Allow printf style for qCDebug, qCWarning, qCCritical macros Add support for using qCDebug and friends in the 'printf style' way. This allows an almost mechanical conversion of existing qDebug, qWarning, qCritical macros, and allows avoiding the size overhead the streaming style incurs (mostly due to inlined QDebug code). To handle this gracefully we require variadic macros (part of C++11/C99). For compilers not supporting variadic macros we fall back to checking the category in QMessageLogger. [ChangeLog][QtCore][Logging] Allow qCDebug macros to be used in a printf style. Change-Id: I5a8fb135dca504e1d621bb67bf4b2a50c73d41b9 Reviewed-by: Thiago Macieira --- .../io/qloggingcategory/tst_qloggingcategory.cpp | 24 ++++++++++++++++++++++ 1 file changed, 24 insertions(+) (limited to 'tests') diff --git a/tests/auto/corelib/io/qloggingcategory/tst_qloggingcategory.cpp b/tests/auto/corelib/io/qloggingcategory/tst_qloggingcategory.cpp index 50268f20a4..26f10385b3 100644 --- a/tests/auto/corelib/io/qloggingcategory/tst_qloggingcategory.cpp +++ b/tests/auto/corelib/io/qloggingcategory/tst_qloggingcategory.cpp @@ -376,16 +376,22 @@ private slots: buf = QStringLiteral("default.debug: Check debug with no filter active"); qCDebug(defaultCategory) << "Check debug with no filter active"; QCOMPARE(logMessage, buf); + qCDebug(defaultCategory, "Check debug with no filter active"); + QCOMPARE(logMessage, buf); // Check default warning buf = QStringLiteral("default.warning: Check warning with no filter active"); qCWarning(defaultCategory) << "Check warning with no filter active"; QCOMPARE(logMessage, buf); + qCWarning(defaultCategory, "Check warning with no filter active"); + QCOMPARE(logMessage, buf); // Check default critical buf = QStringLiteral("default.critical: Check critical with no filter active"); qCCritical(defaultCategory) << "Check critical with no filter active"; QCOMPARE(logMessage, buf); + qCCritical(defaultCategory, "Check critical with no filter active"); + QCOMPARE(logMessage, buf); QLoggingCategory customCategory("custom"); @@ -412,6 +418,24 @@ private slots: qCDebug(customCategory) << "Check debug with filter active"; QCOMPARE(logMessage, buf); + // Check different macro/category variants + buf = QStringLiteral("tst.log.debug: Check debug with no filter active"); + qCDebug(TST_LOG) << "Check debug with no filter active"; + QCOMPARE(logMessage, buf); + qCDebug(TST_LOG, "Check debug with no filter active"); + QCOMPARE(logMessage, buf); + buf = QStringLiteral("tst.log.warning: Check warning with no filter active"); + qCWarning(TST_LOG) << "Check warning with no filter active"; + QCOMPARE(logMessage, buf); + qCWarning(TST_LOG, "Check warning with no filter active"); + QCOMPARE(logMessage, buf); + buf = QStringLiteral("tst.log.critical: Check critical with no filter active"); + qCCritical(TST_LOG) << "Check critical with no filter active"; + QCOMPARE(logMessage, buf); + qCCritical(TST_LOG, "Check critical with no filter active"); + QCOMPARE(logMessage, buf); + + // reset to default filter QLoggingCategory::installFilter(0); -- cgit v1.2.3 From 9a9e7a8215d2d86fc57b8fa2e6370d9762cb2c74 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?J=C4=99drzej=20Nowacki?= Date: Fri, 17 Jan 2014 18:25:50 +0100 Subject: Fix lack of deterministic behavior in moc. Moc should check full scope of any related objects or gadget when it constructs extra data. Change-Id: Ibd1b607a389cd4e788c0916984464cd9103d9c59 Reviewed-by: Olivier Goffart --- tests/auto/tools/moc/moc.pro | 3 +- .../tools/moc/related-metaobjects-name-conflict.h | 117 +++++++++++++++++++++ tests/auto/tools/moc/tst_moc.cpp | 56 ++++++++++ 3 files changed, 175 insertions(+), 1 deletion(-) create mode 100644 tests/auto/tools/moc/related-metaobjects-name-conflict.h (limited to 'tests') diff --git a/tests/auto/tools/moc/moc.pro b/tests/auto/tools/moc/moc.pro index 70a1ecd476..cc8c2c671d 100644 --- a/tests/auto/tools/moc/moc.pro +++ b/tests/auto/tools/moc/moc.pro @@ -27,7 +27,8 @@ HEADERS += using-namespaces.h no-keywords.h task87883.h c-comments.h backslash-n single-quote-digit-separator-n3781.h \ related-metaobjects-in-namespaces.h \ qtbug-35657-gadget.h \ - related-metaobjects-in-gadget.h + related-metaobjects-in-gadget.h \ + related-metaobjects-name-conflict.h if(*-g++*|*-icc*|*-clang*|*-llvm):!irix-*:!win32-*: HEADERS += os9-newlines.h win-newlines.h diff --git a/tests/auto/tools/moc/related-metaobjects-name-conflict.h b/tests/auto/tools/moc/related-metaobjects-name-conflict.h new file mode 100644 index 0000000000..551ab461e3 --- /dev/null +++ b/tests/auto/tools/moc/related-metaobjects-name-conflict.h @@ -0,0 +1,117 @@ +/**************************************************************************** +** +** Copyright (C) 2014 Digia Plc and/or its subsidiary(-ies). +** Contact: http://www.qt-project.org/legal +** +** This file is part of the test suite of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:LGPL$ +** 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 Digia. For licensing terms and +** conditions see http://qt.digia.com/licensing. For further information +** use the contact form at http://qt.digia.com/contact-us. +** +** 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, Digia gives you certain additional +** rights. These rights are described in the Digia Qt LGPL Exception +** version 1.1, included in the file LGPL_EXCEPTION.txt in this package. +** +** GNU General Public License Usage +** Alternatively, this file may be used under the terms of the GNU +** General Public License version 3.0 as published by the Free Software +** Foundation and appearing in the file LICENSE.GPL included in the +** packaging of this file. Please review the following information to +** ensure the GNU General Public License version 3.0 requirements will be +** met: http://www.gnu.org/copyleft/gpl.html. +** +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +#ifndef RELATED_METAOBJECTS_NAME_CONFLICT_H +#define RELATED_METAOBJECTS_NAME_CONFLICT_H + +#include + +#define DECLARE_GADGET_AND_OBJECT_CLASSES \ + class Gadget { \ + Q_GADGET \ + Q_ENUMS(SomeEnum) \ + public: \ + enum SomeEnum { SomeEnumValue = 0 }; \ + }; \ + class Object : public QObject{ \ + Q_OBJECT \ + Q_ENUMS(SomeEnum) \ + public: \ + enum SomeEnum { SomeEnumValue = 0 }; \ + }; + +#define DECLARE_DEPENDING_CLASSES \ + class DependingObject : public QObject \ + { \ + Q_OBJECT \ + Q_PROPERTY(Gadget::SomeEnum gadgetPoperty READ gadgetPoperty) \ + Q_PROPERTY(Object::SomeEnum objectPoperty READ objectPoperty) \ + public: \ + Gadget::SomeEnum gadgetPoperty() const { return Gadget::SomeEnumValue; } \ + Object::SomeEnum objectPoperty() const { return Object::SomeEnumValue; } \ + };\ + struct DependingNestedGadget : public QObject \ + { \ + Q_OBJECT \ + Q_PROPERTY(Nested::Gadget::SomeEnum nestedGadgetPoperty READ nestedGadgetPoperty) \ + Nested::Gadget::SomeEnum nestedGadgetPoperty() const { return Nested::Gadget::SomeEnumValue; } \ + };\ + struct DependingNestedObject : public QObject \ + { \ + Q_OBJECT \ + Q_PROPERTY(Nested::Object::SomeEnum nestedObjectPoperty READ nestedObjectPoperty) \ + Nested::Object::SomeEnum nestedObjectPoperty() const { return Nested::Object::SomeEnumValue; } \ + };\ + + +namespace Unsused { + DECLARE_GADGET_AND_OBJECT_CLASSES +} // Unused + +namespace NS1 { +namespace Nested { + DECLARE_GADGET_AND_OBJECT_CLASSES +} // Nested + +namespace NestedUnsused { + DECLARE_GADGET_AND_OBJECT_CLASSES +} // NestedUnused + +DECLARE_GADGET_AND_OBJECT_CLASSES +DECLARE_DEPENDING_CLASSES + +} // NS1 + +namespace NS2 { +namespace Nested { + DECLARE_GADGET_AND_OBJECT_CLASSES +} // Nested + +namespace NestedUnsused { + DECLARE_GADGET_AND_OBJECT_CLASSES +} // NestedUnused + +DECLARE_GADGET_AND_OBJECT_CLASSES +DECLARE_DEPENDING_CLASSES + +} // NS2 + +#endif // RELATED_METAOBJECTS_NAME_CONFLICT_H diff --git a/tests/auto/tools/moc/tst_moc.cpp b/tests/auto/tools/moc/tst_moc.cpp index 72e24c282c..d4dfe54ab0 100644 --- a/tests/auto/tools/moc/tst_moc.cpp +++ b/tests/auto/tools/moc/tst_moc.cpp @@ -78,6 +78,7 @@ #include "parse-defines.h" #include "related-metaobjects-in-namespaces.h" #include "related-metaobjects-in-gadget.h" +#include "related-metaobjects-name-conflict.h" QT_USE_NAMESPACE @@ -573,6 +574,8 @@ private slots: void writeEnumFromUnrelatedClass(); void relatedMetaObjectsWithinNamespaces(); void relatedMetaObjectsInGadget(); + void relatedMetaObjectsNameConflict_data(); + void relatedMetaObjectsNameConflict(); signals: void sigWithUnsignedArg(unsigned foo); @@ -3176,6 +3179,59 @@ void tst_Moc::relatedMetaObjectsInGadget() QVERIFY(testMo->d.relatedMetaObjects[0] == relatedMo); } +void tst_Moc::relatedMetaObjectsNameConflict_data() +{ + typedef QVector QMetaObjects; + QTest::addColumn("dependingObject"); + QTest::addColumn("relatedMetaObjects"); + + //NS1 + const QMetaObject *n1gadget = &NS1::Gadget::staticMetaObject; + const QMetaObject *n1object = &NS1::Object::staticMetaObject; + const QMetaObject *n1nestedGadget = &NS1::Nested::Gadget::staticMetaObject; + const QMetaObject *n1nestedObject = &NS1::Nested::Object::staticMetaObject; + //N2 + const QMetaObject *n2gadget = &NS2::Gadget::staticMetaObject; + const QMetaObject *n2object = &NS2::Object::staticMetaObject; + const QMetaObject *n2nestedGadget = &NS2::Nested::Gadget::staticMetaObject; + const QMetaObject *n2nestedObject = &NS2::Nested::Object::staticMetaObject; + + QTest::newRow("N1::dependingObject") << &NS1::DependingObject::staticMetaObject + << (QMetaObjects() << n1gadget << n1object); + QTest::newRow("N2::dependingObject") << &NS2::DependingObject::staticMetaObject + << (QMetaObjects() << n2gadget << n2object); + QTest::newRow("N1::dependingNestedObject") << &NS1::DependingNestedObject::staticMetaObject + << (QMetaObjects() << n1nestedObject); + QTest::newRow("N2::dependingNestedObject") << &NS2::DependingNestedObject::staticMetaObject + << (QMetaObjects() << n2nestedObject); + QTest::newRow("N1::dependingNestedGadget") << &NS1::DependingNestedGadget::staticMetaObject + << (QMetaObjects() << n1nestedGadget); + QTest::newRow("N2::dependingNestedGadget") << &NS2::DependingNestedGadget::staticMetaObject + << (QMetaObjects() << n2nestedGadget); +} + +void tst_Moc::relatedMetaObjectsNameConflict() +{ + typedef QVector QMetaObjects; + QFETCH(const QMetaObject*, dependingObject); + QFETCH(QMetaObjects, relatedMetaObjects); + + // load all specified metaobjects int a set + QSet dependency; + const QMetaObject *const *i = dependingObject->d.relatedMetaObjects; + while (*i) { + dependency.insert(*i); + ++i; + } + + // check if all required metaobjects are specified + foreach (const QMetaObject *mo, relatedMetaObjects) + QVERIFY(dependency.contains(mo)); + + // check if no additional metaobjects ara specified + QCOMPARE(dependency.size(), relatedMetaObjects.size()); +} + QTEST_MAIN(tst_Moc) // the generated code must compile with QT_NO_KEYWORDS -- cgit v1.2.3 From b2f8a70890868f344499d5c8f62454922bc0f371 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Tor=20Arne=20Vestb=C3=B8?= Date: Thu, 16 Jan 2014 11:00:30 +0100 Subject: iOS: Enable building of basic tests MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Allows us to sanity check the iOS build in the CI. Change-Id: I16f9bfafef3988dcab6efd3155503ca0d0b4d1d8 Reviewed-by: Morten Johan Sørvig --- tests/auto/auto.pro | 2 ++ tests/auto/corelib/corelib.pro | 8 +++++--- tests/auto/gui/gui.pro | 7 +++++-- tests/tests.pro | 2 +- 4 files changed, 13 insertions(+), 6 deletions(-) (limited to 'tests') diff --git a/tests/auto/auto.pro b/tests/auto/auto.pro index 3ff78a955f..a9aecc9448 100644 --- a/tests/auto/auto.pro +++ b/tests/auto/auto.pro @@ -19,6 +19,8 @@ SUBDIRS += \ installed_cmake.depends = cmake +ios: SUBDIRS = corelib gui + wince*: SUBDIRS -= printsupport cross_compile: SUBDIRS -= tools !qtHaveModule(opengl): SUBDIRS -= opengl diff --git a/tests/auto/corelib/corelib.pro b/tests/auto/corelib/corelib.pro index a85a385f80..4d88b04828 100644 --- a/tests/auto/corelib/corelib.pro +++ b/tests/auto/corelib/corelib.pro @@ -1,16 +1,18 @@ TEMPLATE=subdirs -SUBDIRS=\ + +SUBDIRS = \ + kernel + +!ios: SUBDIRS += \ animation \ codecs \ global \ io \ itemmodels \ json \ - kernel \ mimetypes \ plugin \ statemachine \ thread \ tools \ xml - diff --git a/tests/auto/gui/gui.pro b/tests/auto/gui/gui.pro index b6c55c5eaa..d250e45a4e 100644 --- a/tests/auto/gui/gui.pro +++ b/tests/auto/gui/gui.pro @@ -1,7 +1,10 @@ TEMPLATE=subdirs -SUBDIRS=\ + +SUBDIRS = \ + kernel + +!ios: SUBDIRS += \ image \ - kernel \ math3d \ painting \ qopengl \ diff --git a/tests/tests.pro b/tests/tests.pro index 0f50930774..79bee02b65 100644 --- a/tests/tests.pro +++ b/tests/tests.pro @@ -4,4 +4,4 @@ SUBDIRS = auto # benchmarks in debug mode is rarely sensible # benchmarks are not sensible for code coverage (here with tool testcocoon) -!testcocoon:contains(QT_CONFIG,release):SUBDIRS += benchmarks +!ios:!testcocoon:contains(QT_CONFIG,release):SUBDIRS += benchmarks -- cgit v1.2.3 From ea8e48a6799cf742ea23f4a30dcfc38a4988fe56 Mon Sep 17 00:00:00 2001 From: Thiago Macieira Date: Thu, 19 Dec 2013 23:32:04 -0800 Subject: Update the qHash function for strings to use the CRC32 instruction According to my profiling of Qt Creator, qHash and the SHA-1 calculation are the hottest spots remaining in QtCore. The current qHash function is not really vectorizable. We could come up with a different algorithm that is more SIMD-friendly, but since we have the CRC32 instruction that can read 32- and 64-bit entities, we're set. This commit also updates the benchmark for QHash and benchmarks both the hashing function itself and the QHash class. The updated benchmarks for the CRC32 on my machine shows that the hashing function is *always* improved, but the hashing isn't always. In particular, the current algorithm is better for the "numbers" case, for which the data sample differs in very few bits. The new code is 33% slower for that particular case. On average, the improvement (including the "numbers" case) is: compared to qHash only QHash Qt 5.0 function 2.54x 1.06x Qt 4.x function 4.34x 1.34x Java function 2.71x 1.11x Test machine: Sandybridge Core i7-2620M @ 2.66 GHz with turbo disabled for the benchmarks Change-Id: Ia80b98c0e20d785816f7a7f6ddf40b4b302c7297 Reviewed-by: Oswald Buddenhagen Reviewed-by: Lars Knoll Reviewed-by: Thiago Macieira --- tests/benchmarks/corelib/tools/qhash/main.cpp | 42 ++++++++++++++-------- tests/benchmarks/corelib/tools/qhash/main.h | 10 ++++++ tests/benchmarks/corelib/tools/qhash/outofline.cpp | 10 ++++++ 3 files changed, 48 insertions(+), 14 deletions(-) (limited to 'tests') diff --git a/tests/benchmarks/corelib/tools/qhash/main.cpp b/tests/benchmarks/corelib/tools/qhash/main.cpp index a39ced19fe..b173724aed 100644 --- a/tests/benchmarks/corelib/tools/qhash/main.cpp +++ b/tests/benchmarks/corelib/tools/qhash/main.cpp @@ -55,13 +55,28 @@ class tst_QHash : public QObject private slots: void initTestCase(); + void qhash_current_data() { data(); } + void qhash_current() { qhash_template(); } + void qhash_qt50_data() { data(); } + void qhash_qt50() { qhash_template(); } void qhash_qt4_data() { data(); } - void qhash_qt4(); - void javaString_data() { data(); } - void javaString(); + void qhash_qt4() { qhash_template(); } + void qhash_javaString_data() { data(); } + void qhash_javaString() { qhash_template(); } + + void hashing_current_data() { data(); } + void hashing_current() { hashing_template(); } + void hashing_qt50_data() { data(); } + void hashing_qt50() { hashing_template(); } + void hashing_qt4_data() { data(); } + void hashing_qt4() { hashing_template(); } + void hashing_javaString_data() { data(); } + void hashing_javaString() { hashing_template(); } private: void data(); + template void qhash_template(); + template void hashing_template(); QStringList smallFilePaths; QStringList uuids; @@ -76,7 +91,7 @@ private: void tst_QHash::initTestCase() { // small list of file paths - QFile smallPathsData("paths_small_data.txt"); + QFile smallPathsData(QFINDTESTDATA("paths_small_data.txt")); QVERIFY(smallPathsData.open(QIODevice::ReadOnly)); smallFilePaths = QString::fromLatin1(smallPathsData.readAll()).split(QLatin1Char('\n')); QVERIFY(!smallFilePaths.isEmpty()); @@ -133,12 +148,12 @@ void tst_QHash::data() QTest::newRow("numbers") << numbers; } -void tst_QHash::qhash_qt4() +template void tst_QHash::qhash_template() { QFETCH(QStringList, items); - QHash hash; + QHash hash; - QList realitems; + QList realitems; foreach (const QString &s, items) realitems.append(s); @@ -149,23 +164,22 @@ void tst_QHash::qhash_qt4() } } -void tst_QHash::javaString() +template void tst_QHash::hashing_template() { + // just the hashing function QFETCH(QStringList, items); - QHash hash; - QList realitems; + QVector realitems; + realitems.reserve(items.size()); foreach (const QString &s, items) realitems.append(s); QBENCHMARK { - for (int i = 0, n = realitems.size(); i != n; ++i) { - hash[realitems.at(i)] = i; - } + for (int i = 0, n = realitems.size(); i != n; ++i) + (void)qHash(realitems.at(i)); } } - QTEST_MAIN(tst_QHash) #include "main.moc" diff --git a/tests/benchmarks/corelib/tools/qhash/main.h b/tests/benchmarks/corelib/tools/qhash/main.h index bd3f0db12d..86a1a3d09b 100644 --- a/tests/benchmarks/corelib/tools/qhash/main.h +++ b/tests/benchmarks/corelib/tools/qhash/main.h @@ -51,6 +51,16 @@ QT_BEGIN_NAMESPACE uint qHash(const Qt4String &); QT_END_NAMESPACE +struct Qt50String : QString +{ + Qt50String() {} + Qt50String(const QString &s) : QString(s) {} +}; + +QT_BEGIN_NAMESPACE +uint qHash(const Qt50String &, uint seed = 0); +QT_END_NAMESPACE + struct JavaString : QString { diff --git a/tests/benchmarks/corelib/tools/qhash/outofline.cpp b/tests/benchmarks/corelib/tools/qhash/outofline.cpp index 9ccfc11224..3a2278503d 100644 --- a/tests/benchmarks/corelib/tools/qhash/outofline.cpp +++ b/tests/benchmarks/corelib/tools/qhash/outofline.cpp @@ -57,6 +57,16 @@ uint qHash(const Qt4String &str) return h; } +uint qHash(const Qt50String &key, uint seed) +{ + const QChar *p = key.unicode(); + int len = key.size(); + uint h = seed; + for (int i = 0; i < len; ++i) + h = 31 * h + p[i].unicode(); + return h; +} + // The Java's hashing algorithm for strings is a variation of D. J. Bernstein // hashing algorithm appeared here http://cr.yp.to/cdb/cdb.txt // and informally known as DJB33XX - DJB's 33 Times Xor. -- cgit v1.2.3 From c695543f76715f1f7acef32102c325399d0953cf Mon Sep 17 00:00:00 2001 From: Allan Sandfeld Jensen Date: Mon, 13 Jan 2014 12:43:48 +0100 Subject: Ref qualified version of QImage::convertToFormat Add ref qualified versions of QImage::convertToFormat, so that a temporary QImage can be converted in-place to a format of equal depth. [ChangeLog][QtGui][QImage]Added rvalue qualified convertToFormat method for in-place conversion Change-Id: I2eed5ffd63f5aea4ffa1147bf7607b02a49d9c5d Reviewed-by: Gunnar Sletta --- tests/auto/gui/image/qimage/tst_qimage.cpp | 48 ++++++++++++++++++++++++++++-- 1 file changed, 46 insertions(+), 2 deletions(-) (limited to 'tests') diff --git a/tests/auto/gui/image/qimage/tst_qimage.cpp b/tests/auto/gui/image/qimage/tst_qimage.cpp index 254428958e..f7a672ad18 100644 --- a/tests/auto/gui/image/qimage/tst_qimage.cpp +++ b/tests/auto/gui/image/qimage/tst_qimage.cpp @@ -158,7 +158,10 @@ private slots: void inplaceMirrored_data(); void inplaceMirrored(); - void inplaceDoubleConversion(); + void inplaceRgbMirrored(); + + void inplaceConversion_data(); + void inplaceConversion(); void deepCopyWhenPaintingActive(); void scaled_QTBUG19157(); @@ -2342,7 +2345,7 @@ void tst_QImage::inplaceMirrored() #endif } -void tst_QImage::inplaceDoubleConversion() +void tst_QImage::inplaceRgbMirrored() { #if defined(Q_COMPILER_REF_QUALIFIERS) QImage image1(32, 32, QImage::Format_ARGB32); @@ -2357,6 +2360,47 @@ void tst_QImage::inplaceDoubleConversion() #endif } +void tst_QImage::inplaceConversion_data() +{ + QTest::addColumn("format"); + QTest::addColumn("dest_format"); + + QTest::newRow("Format_ARGB32 -> Format_RGBA8888") << QImage::Format_ARGB32 << QImage::Format_RGBA8888; + QTest::newRow("Format_RGB888 -> Format_ARGB6666_Premultiplied") << QImage::Format_RGB888 << QImage::Format_ARGB6666_Premultiplied; + QTest::newRow("Format_RGB16 -> Format_RGB555") << QImage::Format_RGB16 << QImage::Format_RGB555; + QTest::newRow("Format_RGB666 -> Format_RGB888") << QImage::Format_RGB666 << QImage::Format_RGB888; + QTest::newRow("Format_ARGB8565_Premultiplied, Format_ARGB8555_Premultiplied") << QImage::Format_ARGB8565_Premultiplied << QImage::Format_ARGB8555_Premultiplied; + QTest::newRow("Format_ARGB4444_Premultiplied, Format_RGB444") << QImage::Format_ARGB4444_Premultiplied << QImage::Format_RGB444; +} + +void tst_QImage::inplaceConversion() +{ + // Test that conversions between RGB formats of the same bitwidth can be done inplace. +#if defined(Q_COMPILER_REF_QUALIFIERS) + QFETCH(QImage::Format, format); + QFETCH(QImage::Format, dest_format); + + QImage image(16, 16, format); + + for (int i = 0; i < image.height(); ++i) + for (int j = 0; j < image.width(); ++j) + image.setPixel(j, i, qRgb(j*16, i*16, 0)); + + const uchar* originalPtr = image.constScanLine(0); + + QImage imageConverted = std::move(image).convertToFormat(dest_format); + for (int i = 0; i < imageConverted.height(); ++i) { + for (int j = 0; j < imageConverted.width(); ++j) { + QRgb convertedColor = imageConverted.pixel(j,i); + QCOMPARE(qRed(convertedColor) & 0xF0, j * 16); + QCOMPARE(qGreen(convertedColor) & 0xF0, i * 16); + } + } + + QCOMPARE(imageConverted.constScanLine(0), originalPtr); +#endif +} + void tst_QImage::deepCopyWhenPaintingActive() { QImage image(64, 64, QImage::Format_ARGB32_Premultiplied); -- cgit v1.2.3 From 0d95f7c0bebf31e17f34157334961c34a0e6ffd7 Mon Sep 17 00:00:00 2001 From: Friedemann Kleint Date: Thu, 23 Jan 2014 12:01:57 +0100 Subject: Fix crash of tst_qaccessibilitylinux when DBus is not available. Change-Id: I32291e4c6a5b228b42a7ec15f1dbfe4302bd31fa Reviewed-by: Frederik Gladhorn --- tests/auto/other/qaccessibilitylinux/tst_qaccessibilitylinux.cpp | 3 +++ 1 file changed, 3 insertions(+) (limited to 'tests') diff --git a/tests/auto/other/qaccessibilitylinux/tst_qaccessibilitylinux.cpp b/tests/auto/other/qaccessibilitylinux/tst_qaccessibilitylinux.cpp index 79fd29f2a1..50bf342365 100644 --- a/tests/auto/other/qaccessibilitylinux/tst_qaccessibilitylinux.cpp +++ b/tests/auto/other/qaccessibilitylinux/tst_qaccessibilitylinux.cpp @@ -90,6 +90,9 @@ class tst_QAccessibilityLinux : public QObject { Q_OBJECT +public: + tst_QAccessibilityLinux() : m_window(0), root(0), rootApplication(0), mainWindow(0) {} + private slots: void initTestCase(); -- cgit v1.2.3 From 1fb42377a2a7f39ad0d3d0fd3b88941198553db6 Mon Sep 17 00:00:00 2001 From: Friedemann Kleint Date: Fri, 24 Jan 2014 15:34:54 +0100 Subject: Fix MSVC-warnings about double to float truncation. MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Change-Id: I4aef12bd8fe37dffb06fc7d0b6a330bfc42fa270 Reviewed-by: Jędrzej Nowacki --- tests/auto/corelib/tools/qeasingcurve/tst_qeasingcurve.cpp | 2 +- tests/auto/gui/kernel/qguivariant/test/tst_qguivariant.cpp | 12 ++++++------ 2 files changed, 7 insertions(+), 7 deletions(-) (limited to 'tests') diff --git a/tests/auto/corelib/tools/qeasingcurve/tst_qeasingcurve.cpp b/tests/auto/corelib/tools/qeasingcurve/tst_qeasingcurve.cpp index 3348b49110..3f46b92ec9 100644 --- a/tests/auto/corelib/tools/qeasingcurve/tst_qeasingcurve.cpp +++ b/tests/auto/corelib/tools/qeasingcurve/tst_qeasingcurve.cpp @@ -756,7 +756,7 @@ void tst_QEasingCurve::testCbrtDouble() void tst_QEasingCurve::testCbrtFloat() { - const float errorBound = 0.0005; + const float errorBound = 0.0005f; for (int i = 0; i < 100000; i++) { float f = float(i) / 1000.0f; diff --git a/tests/auto/gui/kernel/qguivariant/test/tst_qguivariant.cpp b/tests/auto/gui/kernel/qguivariant/test/tst_qguivariant.cpp index 336564bc59..431db86330 100644 --- a/tests/auto/gui/kernel/qguivariant/test/tst_qguivariant.cpp +++ b/tests/auto/gui/kernel/qguivariant/test/tst_qguivariant.cpp @@ -468,8 +468,8 @@ void tst_QGuiVariant::vector3D() QVariant variant; QVector3D vector = qvariant_cast(variant); QVERIFY(vector.isNull()); - variant.setValue(QVector3D(0.1, 0.2, 0.3)); - QCOMPARE(QVector3D(0.1, 0.2, 0.3), qvariant_cast(variant)); + variant.setValue(QVector3D(0.1f, 0.2f, 0.3f)); + QCOMPARE(QVector3D(0.1f, 0.2f, 0.3f), qvariant_cast(variant)); void *pvector = QMetaType::create(QVariant::Vector3D, 0); QVERIFY(pvector); @@ -481,8 +481,8 @@ void tst_QGuiVariant::vector4D() QVariant variant; QVector4D vector = qvariant_cast(variant); QVERIFY(vector.isNull()); - variant.setValue(QVector4D(0.1, 0.2, 0.3, 0.4)); - QCOMPARE(QVector4D(0.1, 0.2, 0.3, 0.4), qvariant_cast(variant)); + variant.setValue(QVector4D(0.1f, 0.2f, 0.3f, 0.4f)); + QCOMPARE(QVector4D(0.1f, 0.2f, 0.3f, 0.4f), qvariant_cast(variant)); void *pvector = QMetaType::create(QVariant::Vector4D, 0); QVERIFY(pvector); @@ -494,8 +494,8 @@ void tst_QGuiVariant::quaternion() QVariant variant; QQuaternion quaternion = qvariant_cast(variant); QVERIFY(quaternion.isIdentity()); - variant.setValue(QQuaternion(0.1, 0.2, 0.3, 0.4)); - QCOMPARE(QQuaternion(0.1, 0.2, 0.3, 0.4), qvariant_cast(variant)); + variant.setValue(QQuaternion(0.1f, 0.2f, 0.3f, 0.4f)); + QCOMPARE(QQuaternion(0.1f, 0.2f, 0.3f, 0.4f), qvariant_cast(variant)); void *pquaternion = QMetaType::create(QVariant::Quaternion, 0); QVERIFY(pquaternion); -- cgit v1.2.3 From cff2b83b108c389bd9cdde0d2cfa2401bdc5ffe8 Mon Sep 17 00:00:00 2001 From: Friedemann Kleint Date: Fri, 24 Jan 2014 15:36:04 +0100 Subject: Fix MSVC 64bit warnings about int64 truncation in tests. MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Change-Id: Ic98090dbc7e320df652a60fc67a5291c60f7796a Reviewed-by: Jędrzej Nowacki --- tests/auto/corelib/io/qurlinternal/tst_qurlinternal.cpp | 2 +- tests/auto/corelib/tools/qarraydata/tst_qarraydata.cpp | 6 +++--- tests/shared/filesystem.h | 2 +- 3 files changed, 5 insertions(+), 5 deletions(-) (limited to 'tests') diff --git a/tests/auto/corelib/io/qurlinternal/tst_qurlinternal.cpp b/tests/auto/corelib/io/qurlinternal/tst_qurlinternal.cpp index d3a8bcfd13..28519e1161 100644 --- a/tests/auto/corelib/io/qurlinternal/tst_qurlinternal.cpp +++ b/tests/auto/corelib/io/qurlinternal/tst_qurlinternal.cpp @@ -1040,7 +1040,7 @@ void tst_QUrlInternal::encodingRecodeInvalidUtf8() output = QTest::currentDataTag(); if (!qt_urlRecode(output, input.constData(), input.constData() + input.length(), QUrl::FullyEncoded)) output += input; - for (int i = strlen(QTest::currentDataTag()); i < output.length(); ++i) { + for (int i = int(strlen(QTest::currentDataTag())); i < output.length(); ++i) { QVERIFY2(output.at(i).unicode() < 0x80 || output.at(i) == QChar::ReplacementCharacter, qPrintable(QString("Character at i == %1 was U+%2").arg(i).arg(output.at(i).unicode(), 4, 16, QLatin1Char('0')))); } diff --git a/tests/auto/corelib/tools/qarraydata/tst_qarraydata.cpp b/tests/auto/corelib/tools/qarraydata/tst_qarraydata.cpp index 621b5811f9..a8732e0ce0 100644 --- a/tests/auto/corelib/tools/qarraydata/tst_qarraydata.cpp +++ b/tests/auto/corelib/tools/qarraydata/tst_qarraydata.cpp @@ -469,7 +469,7 @@ void tst_QArrayData::simpleVector() for (int i = 0; i < 60; ++i) QCOMPARE(v1[i], v8[i % 10]); - v1.insert(v1.size(), v6.constBegin(), v6.constEnd()); + v1.insert(int(v1.size()), v6.constBegin(), v6.constEnd()); // v1 is now [ 0..9 x 6, 0..9 x 3 ] QCOMPARE(v1.size(), size_t(90)); @@ -1235,7 +1235,7 @@ void tst_QArrayData::arrayOps2() vo.resize(10); for (size_t i = 7; i < 10; ++i) { - vi[i] = i; + vi[i] = int(i); vs[i] = QString::number(i); QCOMPARE(vo[i].id, i); @@ -1727,7 +1727,7 @@ void tst_QArrayData::grow() // Going element-wise is slow under valgrind if (previousCapacity - i > 10) { i = previousCapacity - 5; - vector.back() = -i; + vector.back() = -int(i); vector.resize(i); // It's still not the time to re-allocate diff --git a/tests/shared/filesystem.h b/tests/shared/filesystem.h index a68130a324..2082128a09 100644 --- a/tests/shared/filesystem.h +++ b/tests/shared/filesystem.h @@ -133,7 +133,7 @@ public: memset( reparseInfo, 0, sizeof( *reparseInfo )); reparseInfo->ReparseTag = IO_REPARSE_TAG_MOUNT_POINT; - reparseInfo->ReparseTargetLength = DWORD(target.size() * sizeof(wchar_t)); + reparseInfo->ReparseTargetLength = WORD(target.size()) * WORD(sizeof(wchar_t)); reparseInfo->ReparseTargetMaximumLength = reparseInfo->ReparseTargetLength + sizeof(wchar_t); target.toWCharArray(reparseInfo->ReparseTarget); reparseInfo->ReparseDataLength = reparseInfo->ReparseTargetLength + 12; -- cgit v1.2.3 From 7d782d4cf9c958d31213ef186ac4013b955c8537 Mon Sep 17 00:00:00 2001 From: Kai Koehne Date: Thu, 23 Jan 2014 16:53:30 +0100 Subject: Fix QArrayData check The support for QArrayData variadic arguments without C++11 for GCC has been removed in commit 69478da0f0d . Change the autotest to reflect that, too. Change-Id: I40468f5d67cb2db553fd7a7d5b604f46403ac538 Reviewed-by: Thiago Macieira --- tests/auto/corelib/tools/qarraydata/tst_qarraydata.cpp | 9 +++------ 1 file changed, 3 insertions(+), 6 deletions(-) (limited to 'tests') diff --git a/tests/auto/corelib/tools/qarraydata/tst_qarraydata.cpp b/tests/auto/corelib/tools/qarraydata/tst_qarraydata.cpp index a8732e0ce0..f9ce7425f6 100644 --- a/tests/auto/corelib/tools/qarraydata/tst_qarraydata.cpp +++ b/tests/auto/corelib/tools/qarraydata/tst_qarraydata.cpp @@ -87,8 +87,7 @@ private slots: void fromRawData_data(); void fromRawData(); void literals(); -#if defined(Q_COMPILER_VARIADIC_MACROS) \ - && (defined(Q_COMPILER_LAMBDA) || defined(Q_CC_GNU)) +#if defined(Q_COMPILER_VARIADIC_MACROS) && defined(Q_COMPILER_LAMBDA) void variadicLiterals(); #endif #ifdef Q_COMPILER_RVALUE_REFS @@ -1555,8 +1554,7 @@ void tst_QArrayData::literals() QCOMPARE(v.size(), size_t(11)); // v.capacity() is unspecified, for now -#if defined(Q_COMPILER_VARIADIC_MACROS) \ - && (defined(Q_COMPILER_LAMBDA) || defined(Q_CC_GNU)) +#if defined(Q_COMPILER_VARIADIC_MACROS) && defined(Q_COMPILER_LAMBDA) QVERIFY(v.isStatic()); #endif @@ -1569,8 +1567,7 @@ void tst_QArrayData::literals() } } -#if defined(Q_COMPILER_VARIADIC_MACROS) \ - && (defined(Q_COMPILER_LAMBDA) || defined(Q_CC_GNU)) +#if defined(Q_COMPILER_VARIADIC_MACROS) && defined(Q_COMPILER_LAMBDA) // Variadic Q_ARRAY_LITERAL need to be available in the current configuration. void tst_QArrayData::variadicLiterals() { -- cgit v1.2.3 From 9ac20dc44c34453d53227564c90c8ffc6740e3d4 Mon Sep 17 00:00:00 2001 From: Bastiaan Veelo Date: Wed, 8 Jan 2014 12:05:02 +0100 Subject: tst_qmdisubwindow: WindowCloseButtonHint is a standard window flag, too Implemented that way in src/widgets/widgets/qmdisubwindow.cpp:2081. Change-Id: I82fdf0c04f1655a130c5e6a6f1e23d325d546ab3 Reviewed-by: Marc Mutz Reviewed-by: Friedemann Kleint --- tests/auto/widgets/widgets/qmdisubwindow/tst_qmdisubwindow.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) (limited to 'tests') diff --git a/tests/auto/widgets/widgets/qmdisubwindow/tst_qmdisubwindow.cpp b/tests/auto/widgets/widgets/qmdisubwindow/tst_qmdisubwindow.cpp index b3e50b8ba8..72fbb6fd3d 100644 --- a/tests/auto/widgets/widgets/qmdisubwindow/tst_qmdisubwindow.cpp +++ b/tests/auto/widgets/widgets/qmdisubwindow/tst_qmdisubwindow.cpp @@ -146,7 +146,7 @@ static void sendMouseDoubleClick(QWidget *widget, const QPoint &point, Qt::Mouse } static const Qt::WindowFlags StandardWindowFlags - = Qt::WindowTitleHint | Qt::WindowSystemMenuHint | Qt::WindowMinMaxButtonsHint; + = Qt::WindowTitleHint | Qt::WindowSystemMenuHint | Qt::WindowMinMaxButtonsHint | Qt::WindowCloseButtonHint; static const Qt::WindowFlags DialogWindowFlags = Qt::WindowTitleHint | Qt::WindowSystemMenuHint; -- cgit v1.2.3 From b7de9e7353a0caccceb309c03343e80dbe117dbb Mon Sep 17 00:00:00 2001 From: Friedemann Kleint Date: Thu, 23 Jan 2014 16:04:16 +0100 Subject: Use a fake directory model instead of QDirModel in item view tests. The tests then have a predictable, stable environment and do not depend on file system operations. Task-number: QTBUG-23697 Change-Id: Ibbd356f8bd7419ec4a3a88d2c0b5cd0830049790 Reviewed-by: Giuseppe D'Angelo Reviewed-by: Frederik Gladhorn --- .../widgets/itemviews/qcolumnview/qcolumnview.pro | 1 + .../itemviews/qcolumnview/tst_qcolumnview.cpp | 145 +++++++++------------ .../auto/widgets/itemviews/qtreeview/qtreeview.pro | 2 +- .../widgets/itemviews/qtreeview/tst_qtreeview.cpp | 5 +- tests/shared/fakedirmodel.h | 130 ++++++++++++++++++ 5 files changed, 201 insertions(+), 82 deletions(-) create mode 100644 tests/shared/fakedirmodel.h (limited to 'tests') diff --git a/tests/auto/widgets/itemviews/qcolumnview/qcolumnview.pro b/tests/auto/widgets/itemviews/qcolumnview/qcolumnview.pro index 8bc1bf2412..2cc8e9ea01 100644 --- a/tests/auto/widgets/itemviews/qcolumnview/qcolumnview.pro +++ b/tests/auto/widgets/itemviews/qcolumnview/qcolumnview.pro @@ -4,4 +4,5 @@ QT += widgets widgets-private QT += gui-private core-private testlib SOURCES += tst_qcolumnview.cpp +HEADERS += ../../../../shared/fakedirmodel.h TARGET = tst_qcolumnview diff --git a/tests/auto/widgets/itemviews/qcolumnview/tst_qcolumnview.cpp b/tests/auto/widgets/itemviews/qcolumnview/tst_qcolumnview.cpp index e2b2fb9551..08c8ed1f05 100644 --- a/tests/auto/widgets/itemviews/qcolumnview/tst_qcolumnview.cpp +++ b/tests/auto/widgets/itemviews/qcolumnview/tst_qcolumnview.cpp @@ -39,14 +39,12 @@ ** ****************************************************************************/ - +#include "../../../../shared/fakedirmodel.h" #include -#include #include #include #include #include -#include #include #include #include @@ -64,6 +62,7 @@ public: virtual ~tst_QColumnView(); public Q_SLOTS: + void initTestCase(); void init(); void cleanup(); @@ -107,6 +106,10 @@ private slots: protected slots: void setPreviewWidget(); + +private: + QStandardItemModel m_fakeDirModel; + QModelIndex m_fakeDirHomeIndex; }; class TreeModel : public QStandardItemModel @@ -182,12 +185,20 @@ protected: tst_QColumnView::tst_QColumnView() { + QStandardItem *homeItem = populateFakeDirModel(&m_fakeDirModel); + m_fakeDirHomeIndex = m_fakeDirModel.indexFromItem(homeItem); } tst_QColumnView::~tst_QColumnView() { } +void tst_QColumnView::initTestCase() +{ + QVERIFY(m_fakeDirHomeIndex.isValid()); + QVERIFY(m_fakeDirModel.rowCount(m_fakeDirHomeIndex) > 1); // Needs some entries in 'home'. +} + void tst_QColumnView::init() { qApp->setLayoutDirection(Qt::LeftToRight); @@ -268,8 +279,7 @@ void tst_QColumnView::rootIndex() void tst_QColumnView::grips() { QColumnView view; - QDirModel model; - view.setModel(&model); + view.setModel(&m_fakeDirModel); QCOMPARE(view.resizeGripsVisible(), true); view.setResizeGripsVisible(true); @@ -304,8 +314,7 @@ void tst_QColumnView::isIndexHidden() ColumnView view; QModelIndex idx; QCOMPARE(view.IsIndexHidden(idx), false); - QDirModel model; - view.setModel(&model); + view.setModel(&m_fakeDirModel); QCOMPARE(view.IsIndexHidden(idx), false); } @@ -313,22 +322,20 @@ void tst_QColumnView::indexAt() { QColumnView view; QCOMPARE(view.indexAt(QPoint(0,0)), QModelIndex()); - QDirModel model; - view.setModel(&model); + view.setModel(&m_fakeDirModel); - QModelIndex home = model.index(QDir::homePath()); - QModelIndex homeFile = model.index(0, 0, home); + QModelIndex homeFile = m_fakeDirModel.index(0, 0, m_fakeDirHomeIndex); if (!homeFile.isValid()) return; - view.setRootIndex(home); + view.setRootIndex(m_fakeDirHomeIndex); QRect rect = view.visualRect(QModelIndex()); QVERIFY(!rect.isValid()); rect = view.visualRect(homeFile); QVERIFY(rect.isValid()); QModelIndex child; - for (int i = 0; i < model.rowCount(home); ++i) { - child = model.index(i, 0, home); + for (int i = 0; i < m_fakeDirModel.rowCount(m_fakeDirHomeIndex); ++i) { + child = m_fakeDirModel.index(i, 0, m_fakeDirHomeIndex); rect = view.visualRect(child); QVERIFY(rect.isValid()); if (i > 0) @@ -341,8 +348,8 @@ void tst_QColumnView::indexAt() QTest::qWait(200); // test that the second row doesn't start at 0 - if (model.rowCount(child) > 0) { - child = model.index(0, 0, child); + if (m_fakeDirModel.rowCount(child) > 0) { + child = m_fakeDirModel.index(0, 0, child); QVERIFY(child.isValid()); rect = view.visualRect(child); QVERIFY(rect.isValid()); @@ -517,47 +524,48 @@ void tst_QColumnView::moveCursor() // don't do anything QCOMPARE(view.MoveCursor(ColumnView::MoveEnd, Qt::NoModifier), QModelIndex()); - QDirModel model; - view.setModel(&model); - QModelIndex home = model.index(QDir::homePath()); + view.setModel(&m_fakeDirModel); QModelIndex ci = view.currentIndex(); QCOMPARE(view.MoveCursor(ColumnView::MoveUp, Qt::NoModifier), QModelIndex()); QCOMPARE(view.MoveCursor(ColumnView::MoveDown, Qt::NoModifier), QModelIndex()); // left at root - view.setCurrentIndex(model.index(0,0)); + view.setCurrentIndex(m_fakeDirModel.index(0,0)); ColumnView::PublicCursorAction action = reverse ? ColumnView::MoveRight : ColumnView::MoveLeft; - QCOMPARE(view.MoveCursor(action, Qt::NoModifier), model.index(0,0)); + QCOMPARE(view.MoveCursor(action, Qt::NoModifier), m_fakeDirModel.index(0,0)); // left shouldn't move up int i = 0; - ci = model.index(0, 0); - while (i < model.rowCount() - 1 && !model.hasChildren(ci)) - ci = model.index(++i, 0); - QVERIFY(model.hasChildren(ci)); + ci = m_fakeDirModel.index(0, 0); + while (i < m_fakeDirModel.rowCount() - 1 && !m_fakeDirModel.hasChildren(ci)) + ci = m_fakeDirModel.index(++i, 0); + QVERIFY(m_fakeDirModel.hasChildren(ci)); view.setCurrentIndex(ci); action = reverse ? ColumnView::MoveRight : ColumnView::MoveLeft; QCOMPARE(view.MoveCursor(action, Qt::NoModifier), ci); // now move to the left (i.e. move over one column) - view.setCurrentIndex(home); - QCOMPARE(view.MoveCursor(action, Qt::NoModifier), home.parent()); + view.setCurrentIndex(m_fakeDirHomeIndex); + QCOMPARE(view.MoveCursor(action, Qt::NoModifier), m_fakeDirHomeIndex.parent()); // right action = reverse ? ColumnView::MoveLeft : ColumnView::MoveRight; view.setCurrentIndex(ci); QModelIndex mc = view.MoveCursor(action, Qt::NoModifier); - QCOMPARE(mc, model.index(0,0, ci)); + QCOMPARE(mc, m_fakeDirModel.index(0,0, ci)); - // next one should move down - QModelIndex idx = model.index(0, 0, ci); - while (model.hasChildren(idx) && model.rowCount(ci) > idx.row() + 1) + // for empty directories (no way to go 'right'), next one should move down + QModelIndex idx = m_fakeDirModel.index(0, 0, ci); + const int rowCount = m_fakeDirModel.rowCount(ci); + while (m_fakeDirModel.hasChildren(idx) && rowCount > idx.row() + 1) { idx = idx.sibling(idx.row() + 1, idx.column()); + } + static const char error[] = "This test requires an empty directory followed by another directory."; + QVERIFY2(idx.isValid(), error); + QVERIFY2(!m_fakeDirModel.hasChildren(idx), error); + QVERIFY2(idx.row() + 1 < rowCount, error); view.setCurrentIndex(idx); mc = view.MoveCursor(action, Qt::NoModifier); -#ifdef Q_OS_MAC - QEXPECT_FAIL("", "QTBUG-23697", Continue); -#endif QCOMPARE(mc, idx.sibling(idx.row() + 1, idx.column())); } @@ -566,20 +574,18 @@ void tst_QColumnView::selectAll() ColumnView view; view.selectAll(); - QDirModel model; - view.setModel(&model); + view.setModel(&m_fakeDirModel); view.selectAll(); QVERIFY(view.selectionModel()->selectedIndexes().count() >= 0); - QModelIndex home = model.index(QDir::homePath()); - view.setCurrentIndex(home); + view.setCurrentIndex(m_fakeDirHomeIndex); view.selectAll(); QVERIFY(view.selectionModel()->selectedIndexes().count() > 0); QModelIndex file; - for (int i = 0; i < model.rowCount(home); ++i) - if (!model.hasChildren(model.index(i, 0, home))) { - file = model.index(i, 0, home); + for (int i = 0; i < m_fakeDirModel.rowCount(m_fakeDirHomeIndex); ++i) + if (!m_fakeDirModel.hasChildren(m_fakeDirModel.index(i, 0, m_fakeDirHomeIndex))) { + file = m_fakeDirModel.index(i, 0, m_fakeDirHomeIndex); break; } view.setCurrentIndex(file); @@ -594,22 +600,19 @@ void tst_QColumnView::clicked() { ColumnView view; - QDirModel model; - view.setModel(&model); + view.setModel(&m_fakeDirModel); view.resize(800,300); view.show(); - QModelIndex home = model.index(QDir::homePath()); - QVERIFY(home.isValid()); - view.setCurrentIndex(home); + view.setCurrentIndex(m_fakeDirHomeIndex); QTest::qWait(ANIMATION_DELAY); - QModelIndex parent = home.parent(); + QModelIndex parent = m_fakeDirHomeIndex.parent(); QVERIFY(parent.isValid()); QSignalSpy clickedSpy(&view, SIGNAL(clicked(QModelIndex))); - QPoint localPoint = view.visualRect(home).center(); + QPoint localPoint = view.visualRect(m_fakeDirHomeIndex).center(); QTest::mouseClick(view.viewport(), Qt::LeftButton, 0, localPoint); QCOMPARE(clickedSpy.count(), 1); qApp->processEvents(); @@ -619,7 +622,7 @@ void tst_QColumnView::clicked() for (int i = 0; i < view.createdColumns.count(); ++i) { QAbstractItemView *column = view.createdColumns.at(i); - if (column && column->selectionModel() && (column->rootIndex() == home)) + if (column && column->selectionModel() && (column->rootIndex() == m_fakeDirHomeIndex)) QVERIFY(column->selectionModel()->selectedIndexes().isEmpty()); } } @@ -627,13 +630,11 @@ void tst_QColumnView::clicked() void tst_QColumnView::selectedColumns() { ColumnView view; - QDirModel model; - view.setModel(&model); + view.setModel(&m_fakeDirModel); view.resize(800,300); view.show(); - QModelIndex home = model.index(QDir::homePath()); - view.setCurrentIndex(home); + view.setCurrentIndex(m_fakeDirHomeIndex); QTest::qWait(ANIMATION_DELAY); @@ -641,7 +642,7 @@ void tst_QColumnView::selectedColumns() QAbstractItemView *column = view.createdColumns.at(i); if (!column) continue; - if (!column->rootIndex().isValid() || column->rootIndex() == home) + if (!column->rootIndex().isValid() || column->rootIndex() == m_fakeDirHomeIndex) continue; QTRY_VERIFY(column->currentIndex().isValid()); } @@ -658,15 +659,13 @@ void tst_QColumnView::setSelection() void tst_QColumnView::setSelectionModel() { ColumnView view; - QDirModel model; - view.setModel(&model); + view.setModel(&m_fakeDirModel); view.show(); - QModelIndex home = model.index(QDir::homePath()); - view.setCurrentIndex(home); + view.setCurrentIndex(m_fakeDirHomeIndex); QTest::qWait(ANIMATION_DELAY); - QItemSelectionModel *selectionModel = new QItemSelectionModel(&model); + QItemSelectionModel *selectionModel = new QItemSelectionModel(&m_fakeDirModel); view.setSelectionModel(selectionModel); bool found = false; @@ -686,19 +685,10 @@ void tst_QColumnView::visualRegionForSelection() QCOMPARE(QRegion(), view.getVisualRegionForSelection(emptyItemSelection)); // a region that isn't empty - QDirModel model; - view.setModel(&model); + view.setModel(&m_fakeDirModel); - // On Windows CE the home directory might actually be empty. -#ifndef Q_OS_WINCE - QString location = QDir::homePath(); -#else - QString location = QLatin1String("/Windows"); -#endif - QModelIndex home = model.index(location); - QVERIFY(model.rowCount(home) > 1); - QItemSelection itemSelection(model.index(0, 0, home), model.index(model.rowCount(home) - 1, 0, home)); + QItemSelection itemSelection(m_fakeDirModel.index(0, 0, m_fakeDirHomeIndex), m_fakeDirModel.index(m_fakeDirModel.rowCount(m_fakeDirHomeIndex) - 1, 0, m_fakeDirHomeIndex)); QVERIFY(QRegion() != view.getVisualRegionForSelection(itemSelection)); } @@ -871,10 +861,8 @@ void tst_QColumnView::sizes() view.setColumnWidths(newSizes); QCOMPARE(view.columnWidths(), visibleSizes); - QDirModel model; - view.setModel(&model); - QModelIndex home = model.index(QDir::homePath()); - view.setCurrentIndex(home); + view.setModel(&m_fakeDirModel); + view.setCurrentIndex(m_fakeDirHomeIndex); QList postSizes = view.columnWidths().mid(0, newSizes.count()); QCOMPARE(postSizes, newSizes.mid(0, postSizes.count())); @@ -895,8 +883,7 @@ void tst_QColumnView::rowDelegate() QItemDelegate *d = new QItemDelegate; view.setItemDelegateForRow(3, d); - QDirModel model; - view.setModel(&model); + view.setModel(&m_fakeDirModel); for (int i = 0; i < view.createdColumns.count(); ++i) { QAbstractItemView *column = view.createdColumns.at(i); QCOMPARE(column->itemDelegateForRow(3), (QAbstractItemDelegate*)d); @@ -908,13 +895,11 @@ void tst_QColumnView::resize() { QWidget topLevel; ColumnView view(&topLevel); - QDirModel model; - view.setModel(&model); + view.setModel(&m_fakeDirModel); view.resize(200, 200); topLevel.show(); - QModelIndex home = model.index(QDir::homePath()).parent(); - view.setCurrentIndex(home); + view.setCurrentIndex(m_fakeDirHomeIndex); QTest::qWait(ANIMATION_DELAY); view.resize(200, 300); QTest::qWait(ANIMATION_DELAY); diff --git a/tests/auto/widgets/itemviews/qtreeview/qtreeview.pro b/tests/auto/widgets/itemviews/qtreeview/qtreeview.pro index 001331c0cf..3abd58e73d 100644 --- a/tests/auto/widgets/itemviews/qtreeview/qtreeview.pro +++ b/tests/auto/widgets/itemviews/qtreeview/qtreeview.pro @@ -3,4 +3,4 @@ TARGET = tst_qtreeview QT += widgets testlib QT += widgets-private gui-private core-private SOURCES += tst_qtreeview.cpp - +HEADERS += ../../../../shared/fakedirmodel.h diff --git a/tests/auto/widgets/itemviews/qtreeview/tst_qtreeview.cpp b/tests/auto/widgets/itemviews/qtreeview/tst_qtreeview.cpp index ccdce1fe0c..b07009aa3c 100644 --- a/tests/auto/widgets/itemviews/qtreeview/tst_qtreeview.cpp +++ b/tests/auto/widgets/itemviews/qtreeview/tst_qtreeview.cpp @@ -39,6 +39,7 @@ ** ****************************************************************************/ +#include "../../../../shared/fakedirmodel.h" #include #include #include @@ -3719,7 +3720,9 @@ void tst_QTreeView::task246536_scrollbarsNotWorking() void tst_QTreeView::task250683_wrongSectionSize() { - QDirModel model; + QStandardItemModel model; + populateFakeDirModel(&model); + QTreeView treeView; treeView.header()->setSectionResizeMode(QHeaderView::ResizeToContents); treeView.setModel(&model); diff --git a/tests/shared/fakedirmodel.h b/tests/shared/fakedirmodel.h new file mode 100644 index 0000000000..ebe0e65112 --- /dev/null +++ b/tests/shared/fakedirmodel.h @@ -0,0 +1,130 @@ +/**************************************************************************** +** +** Copyright (C) 2013 Digia Plc and/or its subsidiary(-ies). +** Contact: http://www.qt-project.org/legal +** +** This file is part of the test suite of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:LGPL$ +** 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 Digia. For licensing terms and +** conditions see http://qt.digia.com/licensing. For further information +** use the contact form at http://qt.digia.com/contact-us. +** +** 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, Digia gives you certain additional +** rights. These rights are described in the Digia Qt LGPL Exception +** version 1.1, included in the file LGPL_EXCEPTION.txt in this package. +** +** GNU General Public License Usage +** Alternatively, this file may be used under the terms of the GNU +** General Public License version 3.0 as published by the Free Software +** Foundation and appearing in the file LICENSE.GPL included in the +** packaging of this file. Please review the following information to +** ensure the GNU General Public License version 3.0 requirements will be +** met: http://www.gnu.org/copyleft/gpl.html. +** +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +#ifndef FAKEDIRMODEL_H +#define FAKEDIRMODEL_H + +#include +#include +#include +#include +#include +#include + +typedef QList StandardItemList; + +static inline QIcon coloredIcon(Qt::GlobalColor color) +{ + QImage image(22, 22, QImage::Format_ARGB32); + image.fill(color); + return QPixmap::fromImage(image); +} + +static void addFileEntry(const StandardItemList &directory, const QString &name, const QString &size) +{ + static const QIcon fileIcon = coloredIcon(Qt::blue); + directory.front()->appendRow(StandardItemList() << new QStandardItem(fileIcon, name) << new QStandardItem(size)); +} + +static StandardItemList createDirEntry(const QString &name) +{ + static const QIcon dirIcon = coloredIcon(Qt::red); + StandardItemList result; + result << new QStandardItem(dirIcon, name) << new QStandardItem; + return result; +} + +static inline StandardItemList addDirEntry(const StandardItemList &directory, const QString &name) +{ + const StandardItemList entry = createDirEntry(name); + directory.front()->appendRow(entry); + return entry; +} + +static QStandardItem *populateFakeDirModel(QStandardItemModel *model) +{ + enum Columns { NameColumn, SizeColumn, ColumnCount }; + + model->setColumnCount(ColumnCount); + model->setHorizontalHeaderLabels(QStringList() << QStringLiteral("Name") << QStringLiteral("Size")); + + const StandardItemList root = createDirEntry(QStringLiteral("/")); + model->appendRow(root); + + const StandardItemList binDir = addDirEntry(root, QStringLiteral("bin")); + addFileEntry(binDir, QStringLiteral("ls"), QStringLiteral("100 KB")); + addFileEntry(binDir, QStringLiteral("bash"), QStringLiteral("200 KB")); + + const StandardItemList devDir = addDirEntry(root, QStringLiteral("dev")); + addFileEntry(devDir, QStringLiteral("tty1"), QStringLiteral("0 B")); + addDirEntry(devDir, QStringLiteral("proc")); + + const StandardItemList etcDir = addDirEntry(root, QStringLiteral("etc")); + addFileEntry(etcDir, QStringLiteral("foo1.config"), QStringLiteral("1 KB")); + addFileEntry(etcDir, QStringLiteral("foo2.conf"), QStringLiteral("654 B")); + + const StandardItemList homeDir = addDirEntry(root, QStringLiteral("home")); + addFileEntry(homeDir, QStringLiteral("file1"), QStringLiteral("1 KB")); + + const StandardItemList documentsDir = addDirEntry(homeDir, QStringLiteral("Documents")); + addFileEntry(documentsDir, QStringLiteral("txt1.odt"), QStringLiteral("2 MB")); + addFileEntry(documentsDir, QStringLiteral("sheet1.xls"), QStringLiteral("32 KB")); + addFileEntry(documentsDir, QStringLiteral("foo.doc"), QStringLiteral("214 KB")); + + const StandardItemList downloadsDir = addDirEntry(homeDir, QStringLiteral("Downloads")); + addFileEntry(downloadsDir, QStringLiteral("package1.zip"), QStringLiteral("34 MB")); + addFileEntry(downloadsDir, QStringLiteral("package2.zip"), QStringLiteral("623 KB")); + + const StandardItemList picturesDir = addDirEntry(homeDir, QStringLiteral("Pictures")); + addFileEntry(picturesDir, QStringLiteral("img0001.jpg"), QStringLiteral("4 MB")); + addFileEntry(picturesDir, QStringLiteral("img0002.png"), QStringLiteral("10 MB")); + + // qcolumnview::moveCursor() requires an empty directory followed by another one. + addDirEntry(root, QStringLiteral("lost+found")); + + const StandardItemList tmpDir = addDirEntry(root, QStringLiteral("tmp")); + addFileEntry(tmpDir, "asdujhsdjys", "435 B"); + addFileEntry(tmpDir, "krtbldfhd", "5557 B"); + + return homeDir.front(); +} + +#endif // FAKEDIRMODEL_H -- cgit v1.2.3 From 0841a5e3677840c6d5b81e8466c9a7d2d3905e1a Mon Sep 17 00:00:00 2001 From: Friedemann Kleint Date: Thu, 23 Jan 2014 16:28:30 +0100 Subject: tst_qcolumnview: Set layout direction on widgets instead of application. Most of the test is executed in RTL mode since it is never restored. Task-number: QTBUG-36395 Change-Id: I110966085a5a265f093fc4479eebc1f1bf0614c1 Reviewed-by: Marc Mutz --- .../widgets/itemviews/qcolumnview/tst_qcolumnview.cpp | 17 ++++++++--------- 1 file changed, 8 insertions(+), 9 deletions(-) (limited to 'tests') diff --git a/tests/auto/widgets/itemviews/qcolumnview/tst_qcolumnview.cpp b/tests/auto/widgets/itemviews/qcolumnview/tst_qcolumnview.cpp index 08c8ed1f05..1ed33b9233 100644 --- a/tests/auto/widgets/itemviews/qcolumnview/tst_qcolumnview.cpp +++ b/tests/auto/widgets/itemviews/qcolumnview/tst_qcolumnview.cpp @@ -370,9 +370,9 @@ void tst_QColumnView::scrollContentsBy_data() void tst_QColumnView::scrollContentsBy() { QFETCH(bool, reverse); - if (reverse) - qApp->setLayoutDirection(Qt::RightToLeft); ColumnView view; + if (reverse) + view.setLayoutDirection(Qt::RightToLeft); view.ScrollContentsBy(-1, -1); view.ScrollContentsBy(0, 0); @@ -405,9 +405,9 @@ void tst_QColumnView::scrollTo() { QFETCH(bool, reverse); QFETCH(bool, giveFocus); - if (reverse) - qApp->setLayoutDirection(Qt::RightToLeft); QWidget topLevel; + if (reverse) + topLevel.setLayoutDirection(Qt::RightToLeft); ColumnView view(&topLevel); view.resize(200, 200); topLevel.show(); @@ -514,10 +514,9 @@ void tst_QColumnView::moveCursor_data() void tst_QColumnView::moveCursor() { QFETCH(bool, reverse); - if (reverse) - qApp->setLayoutDirection(Qt::RightToLeft); ColumnView view; - + if (reverse) + view.setLayoutDirection(Qt::RightToLeft); // don't crash view.MoveCursor(ColumnView::MoveUp, Qt::NoModifier); @@ -722,9 +721,9 @@ void tst_QColumnView::moveGrip_data() void tst_QColumnView::moveGrip() { QFETCH(bool, reverse); - if (reverse) - qApp->setLayoutDirection(Qt::RightToLeft); QWidget topLevel; + if (reverse) + topLevel.setLayoutDirection(Qt::RightToLeft); ColumnView view(&topLevel); TreeModel model; view.setModel(&model); -- cgit v1.2.3 From 22ec4ed86664ab795d2fa47245645b6a73018039 Mon Sep 17 00:00:00 2001 From: Friedemann Kleint Date: Tue, 28 Jan 2014 11:48:38 +0100 Subject: QPrintDialog manual test: Break endless loop for invalid DPI. Change-Id: I8684f144e27392f834f91adef17826b77de60b93 Reviewed-by: John Layt --- tests/manual/dialogs/printdialogpanel.cpp | 17 +++++++++++------ 1 file changed, 11 insertions(+), 6 deletions(-) (limited to 'tests') diff --git a/tests/manual/dialogs/printdialogpanel.cpp b/tests/manual/dialogs/printdialogpanel.cpp index 02beaa4bae..bede2b657a 100644 --- a/tests/manual/dialogs/printdialogpanel.cpp +++ b/tests/manual/dialogs/printdialogpanel.cpp @@ -211,15 +211,9 @@ static void print(QPrinter *printer) QPainter painter(printer); const QRectF pageF = printer->pageRect(); - painter.drawRect(pageF); - - drawHorizCmRuler(painter, pageF.x(), pageF.right(), pageF.height() /2); - drawVertCmRuler(painter, pageF.x() + pageF.width() / 2, pageF.top(), pageF.bottom()); - QFont font = painter.font(); font.setFamily("Courier"); font.setPointSize(10); - painter.setFont(font); // Format message. const int charHeight = QFontMetrics(font).boundingRect('X').height(); @@ -233,6 +227,17 @@ static void print(QPrinter *printer) << "\nFont: " << font.family() << ' ' << font.pointSize() << '\n' << *printer; + if (!painter.device()->logicalDpiY() || !painter.device()->logicalDpiX()) { + qWarning() << Q_FUNC_INFO << "Bailing out due to invalid DPI: " << msg; + return; + } + + painter.drawRect(pageF); + + drawHorizCmRuler(painter, pageF.x(), pageF.right(), pageF.height() /2); + drawVertCmRuler(painter, pageF.x() + pageF.width() / 2, pageF.top(), pageF.bottom()); + + painter.setFont(font); QPointF textPoint = pageF.topLeft() + QPoint(10, charHeight + 10); foreach (const QString &line, msg.split('\n')) { painter.drawText(textPoint, line); -- cgit v1.2.3 From a4ff400e25c76a32ec8252285dda043f07b19c15 Mon Sep 17 00:00:00 2001 From: Fabian Bumberger Date: Thu, 9 Jan 2014 01:57:41 +0100 Subject: Fix application font removal when using FontConfig This patch fixes an issue when a font that was added with QFontDatabase::addApplicationFont can not be removed any more. The reason for that is that QFontconfigDatabase::addApplicationFont adds the font to the FontConfig application set from where it cannot be removed any more and is picked up every time the font database is repopulated (e.g. after a call to QFontDatabase::removeApplicationFont). This also fixes the QFontDatabase autotest which unfortunately does not fail on linux, because it tries to add "FreeMono" (which in most cases is already there as a system font). So this patch removes FreeMono and adds LED_REAL as test font. Change-Id: I2fa5f4df0ad2099ac28673760ea25234c725dfc6 Reviewed-by: Konstantin Ritt Reviewed-by: Simon Hausmann --- tests/auto/gui/text/qfontdatabase/FreeMono.ttf | Bin 267400 -> 0 bytes tests/auto/gui/text/qfontdatabase/LED_REAL.TTF | Bin 0 -> 4708 bytes .../gui/text/qfontdatabase/LED_REAL_readme.txt | 34 +++++++++++++++++++++ .../gui/text/qfontdatabase/tst_qfontdatabase.cpp | 2 +- 4 files changed, 35 insertions(+), 1 deletion(-) delete mode 100644 tests/auto/gui/text/qfontdatabase/FreeMono.ttf create mode 100644 tests/auto/gui/text/qfontdatabase/LED_REAL.TTF create mode 100644 tests/auto/gui/text/qfontdatabase/LED_REAL_readme.txt (limited to 'tests') diff --git a/tests/auto/gui/text/qfontdatabase/FreeMono.ttf b/tests/auto/gui/text/qfontdatabase/FreeMono.ttf deleted file mode 100644 index d7ce52ddc7..0000000000 Binary files a/tests/auto/gui/text/qfontdatabase/FreeMono.ttf and /dev/null differ diff --git a/tests/auto/gui/text/qfontdatabase/LED_REAL.TTF b/tests/auto/gui/text/qfontdatabase/LED_REAL.TTF new file mode 100644 index 0000000000..f87ea95e0e Binary files /dev/null and b/tests/auto/gui/text/qfontdatabase/LED_REAL.TTF differ diff --git a/tests/auto/gui/text/qfontdatabase/LED_REAL_readme.txt b/tests/auto/gui/text/qfontdatabase/LED_REAL_readme.txt new file mode 100644 index 0000000000..06a5b40313 --- /dev/null +++ b/tests/auto/gui/text/qfontdatabase/LED_REAL_readme.txt @@ -0,0 +1,34 @@ +Font: LED Real (led_real.ttf) +Created By: Matthew Welch +E-Mail: daffy-duck@worldnet.att.net +Web Address: http://home.att.net/~daffy-duck + (PGP public key available here) + +LED Real, like all of my fonts, is free. You can use it for most +personal or business uses you'd like, and I ask for no money. I +would, however, like to hear from you. If you use my fonts for +something please send me a postcard or e-mail letting me know how +you used it. Send me a copy if you can or let me know where I can +find your work. + +You may use this font for graphical or printed work, but you may not +sell it or include it in a collection of fonts (on CD or otherwise) +being sold. You can redistribute this font as long as you charge +nothing to receive it. If you redistribute it include this text file +with it as is (without modifications). + +If you use this font for commercial purposes please credit me in +at least some little way. + +About the font: + +Unlike most LED/LCD style fonts mine could be recreated with an +actual LED. I created this font working from memories of the good +old Speak and Spell display. Since I don't have an actual Speak +and Spell to work from I had to just do as well as I could in its +spirit. Be warned that some characters look just like others. The +( and the <, for instance. Also C and [. Most of these will be +pretty clear in context. To see all the sections of the LED "lit +up" at once use character 127 (hold down alt and type 0127 on the +numeric keypad). This font is, of course, monospaced. + diff --git a/tests/auto/gui/text/qfontdatabase/tst_qfontdatabase.cpp b/tests/auto/gui/text/qfontdatabase/tst_qfontdatabase.cpp index fa5c81a2f0..28db0ba291 100644 --- a/tests/auto/gui/text/qfontdatabase/tst_qfontdatabase.cpp +++ b/tests/auto/gui/text/qfontdatabase/tst_qfontdatabase.cpp @@ -83,7 +83,7 @@ private: }; tst_QFontDatabase::tst_QFontDatabase() - : m_testFont(QFINDTESTDATA("FreeMono.ttf")) + : m_testFont(QFINDTESTDATA("LED_REAL.TTF")) { } -- cgit v1.2.3 From 6ab6ab73fe1055de8ce5a3b353b037424a84e187 Mon Sep 17 00:00:00 2001 From: Friedemann Kleint Date: Tue, 28 Jan 2014 15:52:15 +0100 Subject: Fix tst_QLocale::windowsDefaultLocale(). Adapt to Windows-version-specific changes. Task-number: QTBUG-36306 Task-number: QTBUG-33718 Change-Id: I8275423f6f79ede3c3903a646b731eba2182e83c Reviewed-by: Thiago Macieira --- tests/auto/corelib/tools/qlocale/tst_qlocale.cpp | 51 ++++++++++++++++-------- 1 file changed, 35 insertions(+), 16 deletions(-) (limited to 'tests') diff --git a/tests/auto/corelib/tools/qlocale/tst_qlocale.cpp b/tests/auto/corelib/tools/qlocale/tst_qlocale.cpp index 23ee807774..211fbca330 100644 --- a/tests/auto/corelib/tools/qlocale/tst_qlocale.cpp +++ b/tests/auto/corelib/tools/qlocale/tst_qlocale.cpp @@ -1501,6 +1501,16 @@ static void setWinLocaleInfo(LCTYPE type, const QString &value) SetLocaleInfo(id, type, reinterpret_cast(value.utf16())); } +#ifndef LOCALE_SSHORTTIME +# define LOCALE_SSHORTTIME 0x00000079 +#endif + +static inline LCTYPE shortTimeType() +{ + return (QSysInfo::windowsVersion() & QSysInfo::WV_NT_based) && QSysInfo::windowsVersion() >= QSysInfo::WV_WINDOWS7 ? + LOCALE_SSHORTTIME : LOCALE_STIMEFORMAT; +} + class RestoreLocaleHelper { public: RestoreLocaleHelper() { @@ -1508,7 +1518,7 @@ public: m_thousand = getWinLocaleInfo(LOCALE_STHOUSAND); m_sdate = getWinLocaleInfo(LOCALE_SSHORTDATE); m_ldate = getWinLocaleInfo(LOCALE_SLONGDATE); - m_time = getWinLocaleInfo(LOCALE_STIMEFORMAT); + m_time = getWinLocaleInfo(shortTimeType()); } ~RestoreLocaleHelper() { @@ -1517,7 +1527,7 @@ public: setWinLocaleInfo(LOCALE_STHOUSAND, m_thousand); setWinLocaleInfo(LOCALE_SSHORTDATE, m_sdate); setWinLocaleInfo(LOCALE_SLONGDATE, m_ldate); - setWinLocaleInfo(LOCALE_STIMEFORMAT, m_time); + setWinLocaleInfo(shortTimeType(), m_time); } QString m_decimal, m_thousand, m_sdate, m_ldate, m_time; @@ -1527,41 +1537,50 @@ public: #endif // Q_OS_WIN #if defined(Q_OS_WIN) && !defined(Q_OS_WINRT) + void tst_QLocale::windowsDefaultLocale() { RestoreLocaleHelper systemLocale; + const bool win7OrLater = (QSysInfo::windowsVersion() & QSysInfo::WV_NT_based) && QSysInfo::windowsVersion(); // set weird system defaults and make sure we're using them setWinLocaleInfo(LOCALE_SDECIMAL, QLatin1String("@")); setWinLocaleInfo(LOCALE_STHOUSAND, QLatin1String("?")); - setWinLocaleInfo(LOCALE_SSHORTDATE, QLatin1String("d*M*yyyy")); - setWinLocaleInfo(LOCALE_SLONGDATE, QLatin1String("d@M@yyyy")); - setWinLocaleInfo(LOCALE_STIMEFORMAT, QLatin1String("h^m^s")); + const QString shortDateFormat = QStringLiteral("d*M*yyyy"); + setWinLocaleInfo(LOCALE_SSHORTDATE, shortDateFormat); + const QString longDateFormat = QStringLiteral("d@M@yyyy"); + setWinLocaleInfo(LOCALE_SLONGDATE, longDateFormat); + const QString shortTimeFormat = QStringLiteral("h^m^s"); + setWinLocaleInfo(shortTimeType(), shortTimeFormat); QLocale locale = QLocale::system(); // make sure we are seeing the system's format strings QCOMPARE(locale.decimalPoint(), QChar('@')); QCOMPARE(locale.groupSeparator(), QChar('?')); - QCOMPARE(locale.dateFormat(QLocale::ShortFormat), QString("d*M*yyyy")); - QCOMPARE(locale.dateFormat(QLocale::LongFormat), QString("d@M@yyyy")); - QCOMPARE(locale.timeFormat(QLocale::ShortFormat), QString("h^m^s")); - QCOMPARE(locale.timeFormat(QLocale::LongFormat), QString("h^m^s")); - QCOMPARE(locale.dateTimeFormat(QLocale::ShortFormat), QString("d*M*yyyy h^m^s")); - QCOMPARE(locale.dateTimeFormat(QLocale::LongFormat), QString("d@M@yyyy h^m^s")); + QCOMPARE(locale.dateFormat(QLocale::ShortFormat), shortDateFormat); + QCOMPARE(locale.dateFormat(QLocale::LongFormat), longDateFormat); + QCOMPARE(locale.timeFormat(QLocale::ShortFormat), shortTimeFormat); + QCOMPARE(locale.dateTimeFormat(QLocale::ShortFormat), shortDateFormat + QLatin1Char(' ') + shortTimeFormat); + const QString expectedLongDateTimeFormat = longDateFormat + QLatin1Char(' ') + + (win7OrLater ? QStringLiteral("h:mm:ss AP") : shortTimeFormat); + QCOMPARE(locale.dateTimeFormat(QLocale::LongFormat), expectedLongDateTimeFormat); // make sure we are using the system to parse them QCOMPARE(locale.toString(1234.56), QString("1?234@56")); QCOMPARE(locale.toString(QDate(1974, 12, 1), QLocale::ShortFormat), QString("1*12*1974")); QCOMPARE(locale.toString(QDate(1974, 12, 1), QLocale::NarrowFormat), locale.toString(QDate(1974, 12, 1), QLocale::ShortFormat)); QCOMPARE(locale.toString(QDate(1974, 12, 1), QLocale::LongFormat), QString("1@12@1974")); - QCOMPARE(locale.toString(QTime(1,2,3), QLocale::ShortFormat), QString("1^2^3")); + const QString expectedFormattedShortTimeSeconds = QStringLiteral("1^2^3"); + const QString expectedFormattedShortTime = win7OrLater ? QStringLiteral("1^2") : expectedFormattedShortTimeSeconds; + QCOMPARE(locale.toString(QTime(1,2,3), QLocale::ShortFormat), expectedFormattedShortTime); QCOMPARE(locale.toString(QTime(1,2,3), QLocale::NarrowFormat), locale.toString(QTime(1,2,3), QLocale::ShortFormat)); - QCOMPARE(locale.toString(QTime(1,2,3), QLocale::LongFormat), QString("1^2^3")); + const QString expectedFormattedLongTime = win7OrLater ? QStringLiteral("1:02:03 AM") : expectedFormattedShortTimeSeconds; + QCOMPARE(locale.toString(QTime(1,2,3), QLocale::LongFormat), expectedFormattedLongTime); QCOMPARE(locale.toString(QDateTime(QDate(1974, 12, 1), QTime(1,2,3)), QLocale::ShortFormat), - QString("1*12*1974 1^2^3")); + QStringLiteral("1*12*1974 ") + expectedFormattedShortTime); QCOMPARE(locale.toString(QDateTime(QDate(1974, 12, 1), QTime(1,2,3)), QLocale::NarrowFormat), locale.toString(QDateTime(QDate(1974, 12, 1), QTime(1,2,3)), QLocale::ShortFormat)); QCOMPARE(locale.toString(QDateTime(QDate(1974, 12, 1), QTime(1,2,3)), QLocale::LongFormat), - QString("1@12@1974 1^2^3")); - QCOMPARE(locale.toString(QTime(1,2,3), QLocale::LongFormat), QString("1^2^3")); + QStringLiteral("1@12@1974 ") + expectedFormattedLongTime); + QCOMPARE(locale.toString(QTime(1,2,3), QLocale::LongFormat), expectedFormattedLongTime); } #endif // #ifdef Q_OS_WIN -- cgit v1.2.3 From b7396dc39f0ed693698039910a94d7dda3f8d92a Mon Sep 17 00:00:00 2001 From: Allan Sandfeld Jensen Date: Thu, 23 Jan 2014 10:44:08 +0100 Subject: Tests for semi transparent blend on opaque formats This patch adds tests for the consistent handling of transparent drawing results on opaque formats that was introduced with commit 6f7d370adec3054656f36b0d2a0777a8a1df3602 Change-Id: If5d11d0f2e111ef88490a4dc20a64b0858ad5426 Reviewed-by: Gunnar Sletta --- tests/auto/gui/painting/qpainter/tst_qpainter.cpp | 110 ++++++++++++++++++++++ 1 file changed, 110 insertions(+) (limited to 'tests') diff --git a/tests/auto/gui/painting/qpainter/tst_qpainter.cpp b/tests/auto/gui/painting/qpainter/tst_qpainter.cpp index d288665c44..91c06ab0b2 100644 --- a/tests/auto/gui/painting/qpainter/tst_qpainter.cpp +++ b/tests/auto/gui/painting/qpainter/tst_qpainter.cpp @@ -80,6 +80,7 @@ Q_DECLARE_METATYPE(QGradientStops) Q_DECLARE_METATYPE(QPainterPath) Q_DECLARE_METATYPE(QImage::Format) +Q_DECLARE_METATYPE(QPainter::CompositionMode) class tst_QPainter : public QObject { @@ -287,6 +288,9 @@ private slots: void cosmeticStrokerClipping_data(); void cosmeticStrokerClipping(); + void blendARGBonRGB_data(); + void blendARGBonRGB(); + private: void fillData(); void setPenColor(QPainter& p); @@ -4528,6 +4532,112 @@ void tst_QPainter::QTBUG25153_drawLine() } } +void tst_QPainter::blendARGBonRGB_data() +{ + QTest::addColumn("dst_format"); + QTest::addColumn("src_format"); + QTest::addColumn("compositionMode"); + QTest::addColumn("color"); + QTest::addColumn("expected_red"); + + QTest::newRow("ARGB over ARGB32") << QImage::Format_ARGB32 << QImage::Format_ARGB32 + << QPainter::CompositionMode_SourceOver << qRgba(255, 0, 0, 127) << 127 ; + QTest::newRow("ARGB_PM over ARGB32") << QImage::Format_ARGB32 << QImage::Format_ARGB32_Premultiplied + << QPainter::CompositionMode_SourceOver<< qRgba(127, 0, 0, 127) << 127; + QTest::newRow("ARGB source ARGB32") << QImage::Format_ARGB32 << QImage::Format_ARGB32 + << QPainter::CompositionMode_Source << qRgba(255, 0, 0, 127) << 255; + QTest::newRow("ARGB_PM source ARGB32") << QImage::Format_ARGB32 << QImage::Format_ARGB32_Premultiplied + << QPainter::CompositionMode_Source << qRgba(127, 0, 0, 127) << 255; + QTest::newRow("ARGB source-in ARGB32") << QImage::Format_ARGB32 << QImage::Format_ARGB32 + << QPainter::CompositionMode_SourceIn << qRgba(255, 0, 0, 127) << 255 ; + QTest::newRow("ARGB_PM source-in ARGB32") << QImage::Format_ARGB32 << QImage::Format_ARGB32_Premultiplied + << QPainter::CompositionMode_SourceIn << qRgba(127, 0, 0, 127) << 255; + // Only ARGB does inverse premultiply, on the rest over and source gives similar results: + QTest::newRow("ARGB over RGB32") << QImage::Format_RGB32 << QImage::Format_ARGB32 + << QPainter::CompositionMode_SourceOver << qRgba(255, 0, 0, 127) << 127; + QTest::newRow("ARGB_PM over RGB32") << QImage::Format_RGB32 << QImage::Format_ARGB32_Premultiplied + << QPainter::CompositionMode_SourceOver << qRgba(127, 0, 0, 127) << 127; + QTest::newRow("ARGB source RGB32") << QImage::Format_RGB32 << QImage::Format_ARGB32 + << QPainter::CompositionMode_Source << qRgba(255, 0, 0, 127) << 127; + QTest::newRow("ARGB_PM source RGB32") << QImage::Format_RGB32 << QImage::Format_ARGB32_Premultiplied + << QPainter::CompositionMode_Source << qRgba(127, 0, 0, 127) << 127; + QTest::newRow("ARGB source-in RGB32") << QImage::Format_RGB32 << QImage::Format_ARGB32 + << QPainter::CompositionMode_SourceIn << qRgba(255, 0, 0, 127) << 127; + QTest::newRow("ARGB_PM source-in RGB32") << QImage::Format_RGB32 << QImage::Format_ARGB32_Premultiplied + << QPainter::CompositionMode_SourceIn << qRgba(127, 0, 0, 127) << 127; + QTest::newRow("ARGB over RGB888") << QImage::Format_RGB888 << QImage::Format_ARGB32 + << QPainter::CompositionMode_SourceOver << qRgba(255, 0, 0, 127) << 127; + QTest::newRow("ARGB_PM over RGB888") << QImage::Format_RGB888 << QImage::Format_ARGB32_Premultiplied + << QPainter::CompositionMode_SourceOver << qRgba(127, 0, 0, 127) << 127; + QTest::newRow("ARGB source RGB888") << QImage::Format_RGB888 << QImage::Format_ARGB32 + << QPainter::CompositionMode_Source << qRgba(255, 0, 0, 127) << 127; + QTest::newRow("ARGB_PM source RGB888") << QImage::Format_RGB888 << QImage::Format_ARGB32_Premultiplied + << QPainter::CompositionMode_Source << qRgba(127, 0, 0, 127) << 127; + QTest::newRow("ARGB source-in RGB888") << QImage::Format_RGB888 << QImage::Format_ARGB32 + << QPainter::CompositionMode_SourceIn << qRgba(255, 0, 0, 127) << 127; + QTest::newRow("ARGB_PM source-in RGB888") << QImage::Format_RGB888 << QImage::Format_ARGB32_Premultiplied + << QPainter::CompositionMode_SourceIn << qRgba(127, 0, 0, 127) << 127; + QTest::newRow("ARGB over RGBx8888") << QImage::Format_RGBX8888 << QImage::Format_ARGB32 + << QPainter::CompositionMode_SourceOver << qRgba(255, 0, 0, 127) << 127; + QTest::newRow("ARGB_PM over RGBx8888") << QImage::Format_RGBX8888 << QImage::Format_ARGB32_Premultiplied + << QPainter::CompositionMode_SourceOver << qRgba(127, 0, 0, 127) << 127; + QTest::newRow("ARGB source RGBx8888") << QImage::Format_RGBX8888 << QImage::Format_ARGB32 + << QPainter::CompositionMode_Source << qRgba(255, 0, 0, 127) << 127; + QTest::newRow("ARGB_PM source RGBx8888") << QImage::Format_RGBX8888 << QImage::Format_ARGB32_Premultiplied + << QPainter::CompositionMode_Source << qRgba(127, 0, 0, 127) << 127; + QTest::newRow("ARGB source-in RGBx8888") << QImage::Format_RGBX8888 << QImage::Format_ARGB32 + << QPainter::CompositionMode_SourceIn << qRgba(255, 0, 0, 127) << 127; + QTest::newRow("ARGB_PM source-in RGBx8888") << QImage::Format_RGBX8888 << QImage::Format_ARGB32_Premultiplied + << QPainter::CompositionMode_SourceIn << qRgba(127, 0, 0, 127) << 127; + QTest::newRow("ARGB over RGB16") << QImage::Format_RGB16 << QImage::Format_ARGB32 + << QPainter::CompositionMode_SourceOver << qRgba(255, 0, 0, 127) << 123; + QTest::newRow("ARGB_PM over RGB16") << QImage::Format_RGB16 << QImage::Format_ARGB32_Premultiplied + << QPainter::CompositionMode_SourceOver << qRgba(127, 0, 0, 127) << 123; + QTest::newRow("ARGB source RGB16") << QImage::Format_RGB16 << QImage::Format_ARGB32 + << QPainter::CompositionMode_Source << qRgba(255, 0, 0, 127) << 123; + QTest::newRow("ARGB_PM source RGB16") << QImage::Format_RGB16 << QImage::Format_ARGB32_Premultiplied + << QPainter::CompositionMode_Source << qRgba(127, 0, 0, 127) << 123; + QTest::newRow("ARGB source-in RGB16") << QImage::Format_RGB16 << QImage::Format_ARGB32 + << QPainter::CompositionMode_SourceIn << qRgba(255, 0, 0, 127) << 123; + QTest::newRow("ARGB_PM source-in RGB16") << QImage::Format_RGB16 << QImage::Format_ARGB32_Premultiplied + << QPainter::CompositionMode_SourceIn << qRgba(127, 0, 0, 127) << 123; + QTest::newRow("ARGB over RGB666") << QImage::Format_RGB666 << QImage::Format_ARGB32 + << QPainter::CompositionMode_SourceOver << qRgba(255, 0, 0, 127) << 125; + QTest::newRow("ARGB_PM over RGB666") << QImage::Format_RGB666 << QImage::Format_ARGB32_Premultiplied + << QPainter::CompositionMode_SourceOver << qRgba(127, 0, 0, 127) << 125; + QTest::newRow("ARGB source RGB666") << QImage::Format_RGB666 << QImage::Format_ARGB32 + << QPainter::CompositionMode_Source << qRgba(255, 0, 0, 127) << 125; + QTest::newRow("ARGB_PM source RGB666") << QImage::Format_RGB666 << QImage::Format_ARGB32_Premultiplied + << QPainter::CompositionMode_Source << qRgba(127, 0, 0, 127) << 125; + QTest::newRow("ARGB source-in RGB666") << QImage::Format_RGB666 << QImage::Format_ARGB32 + << QPainter::CompositionMode_SourceIn << qRgba(255, 0, 0, 127) << 125; + QTest::newRow("ARGB_PM source-in RGB666") << QImage::Format_RGB666 << QImage::Format_ARGB32_Premultiplied + << QPainter::CompositionMode_SourceIn << qRgba(127, 0, 0, 127) << 125; +} + +void tst_QPainter::blendARGBonRGB() +{ + QFETCH(QImage::Format, dst_format); + QFETCH(QImage::Format, src_format); + QFETCH(QPainter::CompositionMode, compositionMode); + QFETCH(QRgb, color); + QFETCH(int, expected_red); + + QImage imageRgb(16,16, dst_format); + QImage imageArgb(16,16, src_format); + QPainter painter; + + imageArgb.fill(color); + + imageRgb.fill(Qt::black); + painter.begin(&imageRgb); + painter.setCompositionMode(compositionMode); + painter.drawImage(0, 0, imageArgb); + painter.end(); + + QCOMPARE(qRed(imageRgb.pixel(0,0)), expected_red); +} + enum CosmeticStrokerPaint { Antialiasing, -- cgit v1.2.3 From e13b0cc4a08871af0fd4414f63d466712e0105d2 Mon Sep 17 00:00:00 2001 From: Olivier Goffart Date: Sun, 26 Jan 2014 14:02:51 +0100 Subject: Fix usage of QObjectPrivate::connect when q_func() is private. q_func() which is declared in Q_DECLARE_PUBLIC is usually private. We should use q_ptr directly in QObjectPrivate::connect, otherwise it does not compile when trying to access the private q_func Change-Id: I235165a0994327102dbb31c390c2cafdffe806dc Reviewed-by: Kurt Pattyn Reviewed-by: Frederik Gladhorn --- tests/auto/corelib/kernel/qobject/tst_qobject.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) (limited to 'tests') diff --git a/tests/auto/corelib/kernel/qobject/tst_qobject.cpp b/tests/auto/corelib/kernel/qobject/tst_qobject.cpp index b6be7f0f3e..ac8aae8d3a 100644 --- a/tests/auto/corelib/kernel/qobject/tst_qobject.cpp +++ b/tests/auto/corelib/kernel/qobject/tst_qobject.cpp @@ -5564,8 +5564,8 @@ public: }; class ConnectToPrivateSlotPrivate : public QObjectPrivate { -public: Q_DECLARE_PUBLIC(ConnectToPrivateSlot) +public: int receivedCount; QVariant receivedValue; -- cgit v1.2.3 From 0226795cf33363a872c777034e0d8934ffaa3819 Mon Sep 17 00:00:00 2001 From: Allan Sandfeld Jensen Date: Thu, 23 Jan 2014 16:09:20 +0100 Subject: Round evenly in INV_PREMUL Currently INV_PREMUL rounds strictly down. While PREMUL rounds evenly. This patch adds 0x8000 to the intermediate results in INV_PREMUL before right shifting, thereby achieving even rounding. The rounding also makes PREMUL(INV_PREMUL()) into an identify operation, which means we can safely convert ARGB32PM to ARGB32 and back without ever losing color details. A test is added to verify this. Change-Id: I1267e109caddcff0c01d726cb5c1c1e9fa5f7996 Reviewed-by: Gunnar Sletta --- tests/auto/gui/image/qimage/tst_qimage.cpp | 22 ++++++++++++++++++++++ 1 file changed, 22 insertions(+) (limited to 'tests') diff --git a/tests/auto/gui/image/qimage/tst_qimage.cpp b/tests/auto/gui/image/qimage/tst_qimage.cpp index f7a672ad18..9ddf571dbd 100644 --- a/tests/auto/gui/image/qimage/tst_qimage.cpp +++ b/tests/auto/gui/image/qimage/tst_qimage.cpp @@ -166,6 +166,8 @@ private slots: void deepCopyWhenPaintingActive(); void scaled_QTBUG19157(); + void convertOverUnPreMul(); + void cleanupFunctions(); }; @@ -2422,6 +2424,26 @@ void tst_QImage::scaled_QTBUG19157() QVERIFY(!foo.isNull()); } +void tst_QImage::convertOverUnPreMul() +{ + QImage image(256, 256, QImage::Format_ARGB32_Premultiplied); + + for (int j = 0; j < 256; j++) { + for (int i = 0; i <= j; i++) { + image.setPixel(i, j, qRgba(i, i, i, j)); + } + } + + QImage image2 = image.convertToFormat(QImage::Format_ARGB32).convertToFormat(QImage::Format_ARGB32_Premultiplied); + + for (int j = 0; j < 256; j++) { + for (int i = 0; i <= j; i++) { + QCOMPARE(qAlpha(image2.pixel(i, j)), qAlpha(image.pixel(i, j))); + QCOMPARE(qGray(image2.pixel(i, j)), qGray(image.pixel(i, j))); + } + } +} + static void cleanupFunction(void* info) { bool *called = static_cast(info); -- cgit v1.2.3 From ff70c39ebcc63cf77a457b2af662e6f7de09e6c5 Mon Sep 17 00:00:00 2001 From: Allan Sandfeld Jensen Date: Wed, 29 Jan 2014 10:54:50 +0100 Subject: Ensure QImage::pixel() on RGB32 images returns valid QRgb values Currently QImage::pixel() returns the raw underlying pixel values for RGB32. For all other pixel formats the returned value is either valid ARGB32 or ARGB32PM. This patch masks the undefined alpha field in RGB32 so that the return value is well defined QRgb. It also fixes one test that relied on the previous behavior. Change-Id: If37463528268b7419733499d1f7bfd0d1097d21e Reviewed-by: Gunnar Sletta --- tests/auto/gui/image/qimage/tst_qimage.cpp | 29 ++++++++++++----------------- 1 file changed, 12 insertions(+), 17 deletions(-) (limited to 'tests') diff --git a/tests/auto/gui/image/qimage/tst_qimage.cpp b/tests/auto/gui/image/qimage/tst_qimage.cpp index 9ddf571dbd..01a56883bf 100644 --- a/tests/auto/gui/image/qimage/tst_qimage.cpp +++ b/tests/auto/gui/image/qimage/tst_qimage.cpp @@ -220,15 +220,10 @@ void tst_QImage::createInvalidXPM() void tst_QImage::createFromUChar() { - uchar data[] = { -#if Q_BYTE_ORDER == Q_BIG_ENDIAN - 0xFF, -#endif - 1,1,1, 0xFF, 2,2,2, 0xFF, 3,3,3, 0xFF, 4,4,4, -#if Q_BYTE_ORDER != Q_BIG_ENDIAN - 0xFF, -#endif - }; + uint data[] = { 0xff010101U, + 0xff020202U, + 0xff030303U, + 0xff040404U }; // When the data is const, nothing you do to the image will change the source data. QImage i1((const uchar*)data, 2, 2, 8, QImage::Format_RGB32); @@ -242,8 +237,8 @@ void tst_QImage::createFromUChar() } QCOMPARE(i1.pixel(0,0), 0xFF010101U); QCOMPARE(*(QRgb*)data, 0xFF010101U); - *((QRgb*)i1.bits()) = 7U; - QCOMPARE(i1.pixel(0,0), 7U); + *((QRgb*)i1.bits()) = 0xFF070707U; + QCOMPARE(i1.pixel(0,0), 0xFF070707U); QCOMPARE(*(QRgb*)data, 0xFF010101U); // Changing copies should not change the original image or data. @@ -270,16 +265,16 @@ void tst_QImage::createFromUChar() } QCOMPARE(i2.pixel(0,0), 0xFF010101U); QCOMPARE(*(QRgb*)data, 0xFF010101U); - *((QRgb*)i2.bits()) = 7U; - QCOMPARE(i2.pixel(0,0), 7U); - QCOMPARE(*(QRgb*)data, 7U); + *((QRgb*)i2.bits()) = 0xFF070707U; + QCOMPARE(i2.pixel(0,0), 0xFF070707U); + QCOMPARE(*(QRgb*)data, 0xFF070707U); // Changing the data will change the image in either case. QImage i3((uchar*)data, 2, 2, 8, QImage::Format_RGB32); QImage i4((const uchar*)data, 2, 2, 8, QImage::Format_RGB32); - *(QRgb*)data = 6U; - QCOMPARE(i3.pixel(0,0), 6U); - QCOMPARE(i4.pixel(0,0), 6U); + *(QRgb*)data = 0xFF060606U; + QCOMPARE(i3.pixel(0,0), 0xFF060606U); + QCOMPARE(i4.pixel(0,0), 0xFF060606U); } void tst_QImage::formatHandlersInput_data() -- cgit v1.2.3 From b80fcbdba62ec2324fa9ad29cbc5ac1d9a9fe8a2 Mon Sep 17 00:00:00 2001 From: Konstantin Ritt Date: Sun, 26 Jan 2014 02:42:37 +0200 Subject: Introduce QChar::JoiningType enum and QChar::joiningType() method This aimed to disctinct joining types "L", "T", and "U" from just "U". Unicode 6.3.0 has introduced a character with joining type "L" and Unicode 7.0 will add a few more characters of joining type "L", so we'll have to deal with it anyways. [ChangeLog][QtCore][QChar] Added JoiningType enum and joiningType() method that deprecates the old QChar::Joining enum and joining() method. Change-Id: I4be3a3f745d944e689feb9b62d4ca86d1cf371b0 Reviewed-by: Lars Knoll Reviewed-by: Thiago Macieira --- tests/auto/corelib/tools/qchar/tst_qchar.cpp | 42 +++++++++++++++------------- 1 file changed, 22 insertions(+), 20 deletions(-) (limited to 'tests') diff --git a/tests/auto/corelib/tools/qchar/tst_qchar.cpp b/tests/auto/corelib/tools/qchar/tst_qchar.cpp index 80b4162156..81409eb866 100644 --- a/tests/auto/corelib/tools/qchar/tst_qchar.cpp +++ b/tests/auto/corelib/tools/qchar/tst_qchar.cpp @@ -74,7 +74,7 @@ private slots: void isSpaceSpecial(); void category(); void direction(); - void joining(); + void joiningType(); void combiningClass(); void digitValue(); void mirroredChar(); @@ -483,30 +483,32 @@ void tst_QChar::direction() QVERIFY(QChar::direction(0x2FA17u) == QChar::DirL); } -void tst_QChar::joining() +void tst_QChar::joiningType() { - QVERIFY(QChar('a').joining() == QChar::OtherJoining); - QVERIFY(QChar('0').joining() == QChar::OtherJoining); - QVERIFY(QChar((ushort)0x627).joining() == QChar::Right); - QVERIFY(QChar((ushort)0x5d0).joining() == QChar::OtherJoining); + QVERIFY(QChar('a').joiningType() == QChar::Joining_None); + QVERIFY(QChar('0').joiningType() == QChar::Joining_None); + QVERIFY(QChar((ushort)0x0627).joiningType() == QChar::Joining_Right); + QVERIFY(QChar((ushort)0x05d0).joiningType() == QChar::Joining_None); + QVERIFY(QChar((ushort)0x00ad).joiningType() == QChar::Joining_Transparent); - QVERIFY(QChar::joining((ushort)'a') == QChar::OtherJoining); - QVERIFY(QChar::joining((ushort)'0') == QChar::OtherJoining); - QVERIFY(QChar::joining((ushort)0x627) == QChar::Right); - QVERIFY(QChar::joining((ushort)0x5d0) == QChar::OtherJoining); + QVERIFY(QChar::joiningType((ushort)'a') == QChar::Joining_None); + QVERIFY(QChar::joiningType((ushort)'0') == QChar::Joining_None); + QVERIFY(QChar::joiningType((ushort)0x0627) == QChar::Joining_Right); + QVERIFY(QChar::joiningType((ushort)0x05d0) == QChar::Joining_None); + QVERIFY(QChar::joiningType((ushort)0x00ad) == QChar::Joining_Transparent); - QVERIFY(QChar::joining((uint)'a') == QChar::OtherJoining); - QVERIFY(QChar::joining((uint)'0') == QChar::OtherJoining); - QVERIFY(QChar::joining((uint)0x627) == QChar::Right); - QVERIFY(QChar::joining((uint)0x5d0) == QChar::OtherJoining); + QVERIFY(QChar::joiningType((uint)'a') == QChar::Joining_None); + QVERIFY(QChar::joiningType((uint)'0') == QChar::Joining_None); + QVERIFY(QChar::joiningType((uint)0x0627) == QChar::Joining_Right); + QVERIFY(QChar::joiningType((uint)0x05d0) == QChar::Joining_None); + QVERIFY(QChar::joiningType((uint)0x00ad) == QChar::Joining_Transparent); - QVERIFY(QChar::joining(0xE01DAu) == QChar::OtherJoining); - QVERIFY(QChar::joining(0xf0000u) == QChar::OtherJoining); - QVERIFY(QChar::joining(0xE0030u) == QChar::OtherJoining); - QVERIFY(QChar::joining(0x2FA17u) == QChar::OtherJoining); + QVERIFY(QChar::joiningType(0xE01DAu) == QChar::Joining_Transparent); + QVERIFY(QChar::joiningType(0xf0000u) == QChar::Joining_None); + QVERIFY(QChar::joiningType(0xE0030u) == QChar::Joining_Transparent); + QVERIFY(QChar::joiningType(0x2FA17u) == QChar::Joining_None); - // ### U+A872 has joining type L - QVERIFY(QChar::joining((uint)0xA872) == QChar::OtherJoining); + QVERIFY(QChar::joiningType((uint)0xA872) == QChar::Joining_Left); } void tst_QChar::combiningClass() -- cgit v1.2.3 From fd5dd2712656cbc674c8360754394e41dd82e40c Mon Sep 17 00:00:00 2001 From: Mandeep Sandhu Date: Fri, 15 Nov 2013 18:42:22 +0530 Subject: Add more specific HTTP error codes to QNetworkReply::NetworkError A few more HTTP status codes from the 4xx and 5xx series have been added to QNetworkReply::NetworkError. For content errors, the following codes have been added: 1. 409 - Resource Conflict 2. 410 - Resource Gone For server related errors, the following codes have been added: 1. 500 - Internal Server Error 2. 501 - Operation Not Implemented 3. 503 - Service Unavailable Few of the above codes are quite possible when communicating with REST based services. NOTE: ===== * HTTP error status 400 is interpreted as QNetworkReply::ProtocolInvalidOperationError. * QNetworkReply::UnknownServerError is returned for all server related errors (5xx) not listed above. [ChangeLog][QtNetwork][QNetworkReply] Added more (specific) HTTP status codes to NetworkError enum. Task-number: QTBUG-30880 Change-Id: I9d2a133f6b3869f26710c6eb930dd8b08df31108 Reviewed-by: Peter Hartmann --- tests/auto/network/access/qnetworkreply/tst_qnetworkreply.cpp | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) (limited to 'tests') diff --git a/tests/auto/network/access/qnetworkreply/tst_qnetworkreply.cpp b/tests/auto/network/access/qnetworkreply/tst_qnetworkreply.cpp index 4d5748b419..8e13c1de6e 100644 --- a/tests/auto/network/access/qnetworkreply/tst_qnetworkreply.cpp +++ b/tests/auto/network/access/qnetworkreply/tst_qnetworkreply.cpp @@ -2856,9 +2856,9 @@ void tst_QNetworkReply::sendCustomRequestToHttp_data() QTest::newRow("trace") << QUrl("http://" + QtNetworkSettings::serverName()) << QByteArray("TRACE") << (QBuffer *) 0 << 200 << QNetworkReply::NoError << QByteArray(); QTest::newRow("connect") << QUrl("http://" + QtNetworkSettings::serverName()) << - QByteArray("CONNECT") << (QBuffer *) 0 << 400 << QNetworkReply::UnknownContentError << QByteArray(); // 400 = Bad Request + QByteArray("CONNECT") << (QBuffer *) 0 << 400 << QNetworkReply::ProtocolInvalidOperationError << QByteArray(); // 400 = Bad Request QTest::newRow("nonsense") << QUrl("http://" + QtNetworkSettings::serverName()) << - QByteArray("NONSENSE") << (QBuffer *) 0 << 501 << QNetworkReply::ProtocolUnknownError << QByteArray(); // 501 = Method Not Implemented + QByteArray("NONSENSE") << (QBuffer *) 0 << 501 << QNetworkReply::OperationNotImplementedError << QByteArray(); // 501 = Method Not Implemented QByteArray ba("test"); QBuffer *buffer = new QBuffer; -- cgit v1.2.3 From a5614264d5a5d6d1cc0f2773f4d7cd70195a0546 Mon Sep 17 00:00:00 2001 From: Konstantin Ritt Date: Thu, 30 Jan 2014 05:46:35 +0200 Subject: Get rid of QGlyphLayout::advances_y ...and thus consume 4 bytes less per glyph and increase the performance a bit. It seems, the only CTFontGetAdvancesForGlyphs() returns both x and y advances, though y advances are always equal to 0 for horizontal orientation and x advances are always equal to 0 for vertical orientation. Also, rename `advances_x` to `advances` for consistency and declare QGlyphLayout's data size in a single place. Change-Id: I56b20f893f8a6feb7aa870e3edbca99dd93ba2e2 Reviewed-by: Eskil Abrahamsen Blomfeldt Reviewed-by: Lars Knoll Reviewed-by: Simon Hausmann --- tests/auto/gui/text/qtextscriptengine/tst_qtextscriptengine.cpp | 7 +++---- 1 file changed, 3 insertions(+), 4 deletions(-) (limited to 'tests') diff --git a/tests/auto/gui/text/qtextscriptengine/tst_qtextscriptengine.cpp b/tests/auto/gui/text/qtextscriptengine/tst_qtextscriptengine.cpp index eebac28323..74802c3217 100644 --- a/tests/auto/gui/text/qtextscriptengine/tst_qtextscriptengine.cpp +++ b/tests/auto/gui/text/qtextscriptengine/tst_qtextscriptengine.cpp @@ -1067,7 +1067,7 @@ void tst_QTextScriptEngine::controlInSyllable_qtbug14204() e->shape(0); QCOMPARE(e->layoutData->items[0].num_glyphs, ushort(2)); - QVERIFY(e->layoutData->glyphLayout.advances_x[1] != 0); + QVERIFY(e->layoutData->glyphLayout.advances[1].toInt() != 0); #endif } @@ -1087,8 +1087,7 @@ void tst_QTextScriptEngine::combiningMarks_qtbug15675() e->shape(0); QCOMPARE(e->layoutData->items[0].num_glyphs, ushort(4)); - QEXPECT_FAIL("", "QTBUG-23064", Abort); - QVERIFY(e->layoutData->glyphLayout.advances_y[2] > 0); + QCOMPARE(e->layoutData->glyphLayout.advances[2].toInt(), 0); #else QFontDatabase db; @@ -1106,7 +1105,7 @@ void tst_QTextScriptEngine::combiningMarks_qtbug15675() e->shape(0); QCOMPARE(e->layoutData->items[0].num_glyphs, ushort(3)); - QVERIFY(e->layoutData->glyphLayout.advances_x[1] == 0); + QCOMPARE(e->layoutData->glyphLayout.advances[1].toInt(), 0); #endif } -- cgit v1.2.3 From 1cc0a18d794c6795a053f833fe8a633e2553a2a9 Mon Sep 17 00:00:00 2001 From: Friedemann Kleint Date: Wed, 29 Jan 2014 08:55:18 +0100 Subject: Revert "test: marked tst_qlocale as insignificant on Windows" MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit This reverts commit b7486591cd114351c755b9e8b2bfe5d175461ec9. Conflicts: tests/auto/corelib/tools/qlocale/test/test.pro Task-number: QTBUG-25284 Task-number: QTBUG-36306 Change-Id: If4a335c114302f7af999d7a254e1aa55b2df7176 Reviewed-by: Simo Fält Reviewed-by: Thiago Macieira --- tests/auto/corelib/tools/qlocale/test/test.pro | 1 - 1 file changed, 1 deletion(-) (limited to 'tests') diff --git a/tests/auto/corelib/tools/qlocale/test/test.pro b/tests/auto/corelib/tools/qlocale/test/test.pro index 66a968b7c3..df12d35a09 100644 --- a/tests/auto/corelib/tools/qlocale/test/test.pro +++ b/tests/auto/corelib/tools/qlocale/test/test.pro @@ -16,6 +16,5 @@ win32 { TEST_HELPER_INSTALLS = ../syslocaleapp/syslocaleapp -win32:CONFIG+= insignificant_test # QTBUG-25284 DEFINES += QT_DISABLE_DEPRECATED_BEFORE=0 blackberry:LIBS += -lpps -- cgit v1.2.3 From aba30f02348c60ea785c374d12e1f3998dc4cb14 Mon Sep 17 00:00:00 2001 From: Thiago Macieira Date: Mon, 2 Dec 2013 19:50:29 -0800 Subject: Replace the type-based QAtomicIntegerTraits with a size-based one This simplifies the code a lot and avoids silly mistakes where a specific integer type is missing (such as char16_t). Change-Id: Id91dfd1919e783e0a9af7bfa093ca560a01b22d1 Reviewed-by: Lars Knoll --- .../corelib/thread/qatomicint/tst_qatomicint.cpp | 19 +- .../corelib/thread/qatomicinteger/char/char.pro | 2 + .../thread/qatomicinteger/char16_t/char16_t.pro | 2 + .../thread/qatomicinteger/char32_t/char32_t.pro | 2 + .../auto/corelib/thread/qatomicinteger/int/int.pro | 2 + .../corelib/thread/qatomicinteger/long/long.pro | 2 + .../thread/qatomicinteger/qatomicinteger.pri | 7 + .../thread/qatomicinteger/qatomicinteger.pro | 19 + .../thread/qatomicinteger/qlonglong/qlonglong.pro | 2 + .../thread/qatomicinteger/qptrdiff/qptrdiff.pro | 2 + .../thread/qatomicinteger/quintptr/quintptr.pro | 2 + .../qatomicinteger/qulonglong/qulonglong.pro | 2 + .../corelib/thread/qatomicinteger/schar/schar.pro | 2 + .../corelib/thread/qatomicinteger/short/short.pro | 2 + .../thread/qatomicinteger/tst_qatomicinteger.cpp | 441 +++++++++++++++++++++ .../corelib/thread/qatomicinteger/uchar/uchar.pro | 2 + .../corelib/thread/qatomicinteger/uint/uint.pro | 2 + .../corelib/thread/qatomicinteger/ulong/ulong.pro | 2 + .../thread/qatomicinteger/ushort/ushort.pro | 2 + .../thread/qatomicinteger/wchar_t/wchar_t.pro | 2 + tests/auto/corelib/thread/thread.pro | 1 + 21 files changed, 513 insertions(+), 6 deletions(-) create mode 100644 tests/auto/corelib/thread/qatomicinteger/char/char.pro create mode 100644 tests/auto/corelib/thread/qatomicinteger/char16_t/char16_t.pro create mode 100644 tests/auto/corelib/thread/qatomicinteger/char32_t/char32_t.pro create mode 100644 tests/auto/corelib/thread/qatomicinteger/int/int.pro create mode 100644 tests/auto/corelib/thread/qatomicinteger/long/long.pro create mode 100644 tests/auto/corelib/thread/qatomicinteger/qatomicinteger.pri create mode 100644 tests/auto/corelib/thread/qatomicinteger/qatomicinteger.pro create mode 100644 tests/auto/corelib/thread/qatomicinteger/qlonglong/qlonglong.pro create mode 100644 tests/auto/corelib/thread/qatomicinteger/qptrdiff/qptrdiff.pro create mode 100644 tests/auto/corelib/thread/qatomicinteger/quintptr/quintptr.pro create mode 100644 tests/auto/corelib/thread/qatomicinteger/qulonglong/qulonglong.pro create mode 100644 tests/auto/corelib/thread/qatomicinteger/schar/schar.pro create mode 100644 tests/auto/corelib/thread/qatomicinteger/short/short.pro create mode 100644 tests/auto/corelib/thread/qatomicinteger/tst_qatomicinteger.cpp create mode 100644 tests/auto/corelib/thread/qatomicinteger/uchar/uchar.pro create mode 100644 tests/auto/corelib/thread/qatomicinteger/uint/uint.pro create mode 100644 tests/auto/corelib/thread/qatomicinteger/ulong/ulong.pro create mode 100644 tests/auto/corelib/thread/qatomicinteger/ushort/ushort.pro create mode 100644 tests/auto/corelib/thread/qatomicinteger/wchar_t/wchar_t.pro (limited to 'tests') diff --git a/tests/auto/corelib/thread/qatomicint/tst_qatomicint.cpp b/tests/auto/corelib/thread/qatomicint/tst_qatomicint.cpp index fefc126bba..42b3a52531 100644 --- a/tests/auto/corelib/thread/qatomicint/tst_qatomicint.cpp +++ b/tests/auto/corelib/thread/qatomicint/tst_qatomicint.cpp @@ -99,10 +99,6 @@ static inline void assemblyMarker(void *ptr = 0) puts((char *)ptr + I); } -QT_BEGIN_NAMESPACE -template class QBasicAtomicInteger; // even if it this class isn't supported -QT_END_NAMESPACE - template static void warningFreeHelperTemplate() { @@ -185,7 +181,7 @@ void tst_QAtomicInt::warningFreeHelper() qFatal("This code is bogus, and shouldn't be run. We're looking for compiler warnings only."); warningFreeHelperTemplate(); -#ifdef Q_ATOMIC_INT32_IS_SUPPORTED + // 32-bit are always supported: warningFreeHelperTemplate >(); warningFreeHelperTemplate >(); constexprFunctionsHelperTemplate >(); @@ -194,7 +190,18 @@ void tst_QAtomicInt::warningFreeHelper() warningFreeHelperTemplate >(); constexprFunctionsHelperTemplate >(); # endif -#endif + + // pointer-sized integers are always supported: + warningFreeHelperTemplate >(); + warningFreeHelperTemplate >(); + constexprFunctionsHelperTemplate >(); + constexprFunctionsHelperTemplate >(); + + // long is always supported because it's either 32-bit or pointer-sized: + warningFreeHelperTemplate >(); + warningFreeHelperTemplate >(); + constexprFunctionsHelperTemplate >(); + constexprFunctionsHelperTemplate >(); #ifdef Q_ATOMIC_INT16_IS_SUPPORTED warningFreeHelperTemplate >(); diff --git a/tests/auto/corelib/thread/qatomicinteger/char/char.pro b/tests/auto/corelib/thread/qatomicinteger/char/char.pro new file mode 100644 index 0000000000..51ef1add8f --- /dev/null +++ b/tests/auto/corelib/thread/qatomicinteger/char/char.pro @@ -0,0 +1,2 @@ +TYPE = $$basename(PWD) +include(../qatomicinteger.pri) diff --git a/tests/auto/corelib/thread/qatomicinteger/char16_t/char16_t.pro b/tests/auto/corelib/thread/qatomicinteger/char16_t/char16_t.pro new file mode 100644 index 0000000000..51ef1add8f --- /dev/null +++ b/tests/auto/corelib/thread/qatomicinteger/char16_t/char16_t.pro @@ -0,0 +1,2 @@ +TYPE = $$basename(PWD) +include(../qatomicinteger.pri) diff --git a/tests/auto/corelib/thread/qatomicinteger/char32_t/char32_t.pro b/tests/auto/corelib/thread/qatomicinteger/char32_t/char32_t.pro new file mode 100644 index 0000000000..51ef1add8f --- /dev/null +++ b/tests/auto/corelib/thread/qatomicinteger/char32_t/char32_t.pro @@ -0,0 +1,2 @@ +TYPE = $$basename(PWD) +include(../qatomicinteger.pri) diff --git a/tests/auto/corelib/thread/qatomicinteger/int/int.pro b/tests/auto/corelib/thread/qatomicinteger/int/int.pro new file mode 100644 index 0000000000..51ef1add8f --- /dev/null +++ b/tests/auto/corelib/thread/qatomicinteger/int/int.pro @@ -0,0 +1,2 @@ +TYPE = $$basename(PWD) +include(../qatomicinteger.pri) diff --git a/tests/auto/corelib/thread/qatomicinteger/long/long.pro b/tests/auto/corelib/thread/qatomicinteger/long/long.pro new file mode 100644 index 0000000000..51ef1add8f --- /dev/null +++ b/tests/auto/corelib/thread/qatomicinteger/long/long.pro @@ -0,0 +1,2 @@ +TYPE = $$basename(PWD) +include(../qatomicinteger.pri) diff --git a/tests/auto/corelib/thread/qatomicinteger/qatomicinteger.pri b/tests/auto/corelib/thread/qatomicinteger/qatomicinteger.pri new file mode 100644 index 0000000000..dc7cc8bcec --- /dev/null +++ b/tests/auto/corelib/thread/qatomicinteger/qatomicinteger.pri @@ -0,0 +1,7 @@ +isEmpty(TYPE): error("Project must define TYPE variable") + +CONFIG += testcase parallel_test +QT = core testlib +TARGET = tst_qatomicinteger_$$TYPE +SOURCES = $$PWD/tst_qatomicinteger.cpp +DEFINES += QATOMIC_TEST_TYPE=$$TYPE tst_QAtomicIntegerXX=tst_QAtomicInteger_$$TYPE diff --git a/tests/auto/corelib/thread/qatomicinteger/qatomicinteger.pro b/tests/auto/corelib/thread/qatomicinteger/qatomicinteger.pro new file mode 100644 index 0000000000..373e8801a4 --- /dev/null +++ b/tests/auto/corelib/thread/qatomicinteger/qatomicinteger.pro @@ -0,0 +1,19 @@ +TEMPLATE=subdirs +SUBDIRS=\ + char \ + char16_t \ + char32_t \ + int \ + long \ + qlonglong \ + qptrdiff \ + quintptr \ + qulonglong \ + schar \ + short \ + uchar \ + uint \ + ulong \ + ushort \ + wchar_t \ + diff --git a/tests/auto/corelib/thread/qatomicinteger/qlonglong/qlonglong.pro b/tests/auto/corelib/thread/qatomicinteger/qlonglong/qlonglong.pro new file mode 100644 index 0000000000..51ef1add8f --- /dev/null +++ b/tests/auto/corelib/thread/qatomicinteger/qlonglong/qlonglong.pro @@ -0,0 +1,2 @@ +TYPE = $$basename(PWD) +include(../qatomicinteger.pri) diff --git a/tests/auto/corelib/thread/qatomicinteger/qptrdiff/qptrdiff.pro b/tests/auto/corelib/thread/qatomicinteger/qptrdiff/qptrdiff.pro new file mode 100644 index 0000000000..51ef1add8f --- /dev/null +++ b/tests/auto/corelib/thread/qatomicinteger/qptrdiff/qptrdiff.pro @@ -0,0 +1,2 @@ +TYPE = $$basename(PWD) +include(../qatomicinteger.pri) diff --git a/tests/auto/corelib/thread/qatomicinteger/quintptr/quintptr.pro b/tests/auto/corelib/thread/qatomicinteger/quintptr/quintptr.pro new file mode 100644 index 0000000000..51ef1add8f --- /dev/null +++ b/tests/auto/corelib/thread/qatomicinteger/quintptr/quintptr.pro @@ -0,0 +1,2 @@ +TYPE = $$basename(PWD) +include(../qatomicinteger.pri) diff --git a/tests/auto/corelib/thread/qatomicinteger/qulonglong/qulonglong.pro b/tests/auto/corelib/thread/qatomicinteger/qulonglong/qulonglong.pro new file mode 100644 index 0000000000..51ef1add8f --- /dev/null +++ b/tests/auto/corelib/thread/qatomicinteger/qulonglong/qulonglong.pro @@ -0,0 +1,2 @@ +TYPE = $$basename(PWD) +include(../qatomicinteger.pri) diff --git a/tests/auto/corelib/thread/qatomicinteger/schar/schar.pro b/tests/auto/corelib/thread/qatomicinteger/schar/schar.pro new file mode 100644 index 0000000000..51ef1add8f --- /dev/null +++ b/tests/auto/corelib/thread/qatomicinteger/schar/schar.pro @@ -0,0 +1,2 @@ +TYPE = $$basename(PWD) +include(../qatomicinteger.pri) diff --git a/tests/auto/corelib/thread/qatomicinteger/short/short.pro b/tests/auto/corelib/thread/qatomicinteger/short/short.pro new file mode 100644 index 0000000000..51ef1add8f --- /dev/null +++ b/tests/auto/corelib/thread/qatomicinteger/short/short.pro @@ -0,0 +1,2 @@ +TYPE = $$basename(PWD) +include(../qatomicinteger.pri) diff --git a/tests/auto/corelib/thread/qatomicinteger/tst_qatomicinteger.cpp b/tests/auto/corelib/thread/qatomicinteger/tst_qatomicinteger.cpp new file mode 100644 index 0000000000..a7139b6a9a --- /dev/null +++ b/tests/auto/corelib/thread/qatomicinteger/tst_qatomicinteger.cpp @@ -0,0 +1,441 @@ +/**************************************************************************** +** +** Copyright (C) 2013 Intel Corporation +** Contact: http://www.qt-project.org/legal +** +** This file is part of the test suite of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:LGPL$ +** 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 Digia. For licensing terms and +** conditions see http://qt.digia.com/licensing. For further information +** use the contact form at http://qt.digia.com/contact-us. +** +** 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, Digia gives you certain additional +** rights. These rights are described in the Digia Qt LGPL Exception +** version 1.1, included in the file LGPL_EXCEPTION.txt in this package. +** +** GNU General Public License Usage +** Alternatively, this file may be used under the terms of the GNU +** General Public License version 3.0 as published by the Free Software +** Foundation and appearing in the file LICENSE.GPL included in the +** packaging of this file. Please review the following information to +** ensure the GNU General Public License version 3.0 requirements will be +** met: http://www.gnu.org/copyleft/gpl.html. +** +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +#include +#include + +#include +#include +#include + +#if !defined(Q_ATOMIC_INT32_IS_SUPPORTED) +# error "QAtomicInteger for 32-bit types must be supported!" +#endif +#if QT_POINTER_SIZE == 8 && !defined(Q_ATOMIC_INT64_IS_SUPPORTED) +# error "QAtomicInteger for 64-bit types must be supported on 64-bit builds!" +#endif + +// always supported types: +#define TYPE_SUPPORTED_int 1 +#define TYPE_SUPPORTED_uint 1 +#define TYPE_SUPPORTED_long 1 +#define TYPE_SUPPORTED_ulong 1 +#define TYPE_SUPPORTED_qptrdiff 1 +#define TYPE_SUPPORTED_quintptr 1 +#if (defined(__SIZEOF_WCHAR_T__) && (__SIZEOF_WCHAR_T__-0) > 2) \ + || (defined(WCHAR_MAX) && (WCHAR_MAX-0 > 0x10000)) +# define TYPE_SUPPORTED_wchar_t 1 +#endif +#ifdef Q_COMPILER_UNICODE_STRINGS +# define TYPE_SUPPORTED_char32_t 1 +#endif + +#ifdef Q_ATOMIC_INT8_IS_SUPPORTED +# define TYPE_SUPPORTED_char 1 +# define TYPE_SUPPORTED_uchar 1 +# define TYPE_SUPPORTED_schar 1 +#endif +#ifdef Q_ATOMIC_INT16_IS_SUPPORTED +# define TYPE_SUPPORTED_short 1 +# define TYPE_SUPPORTED_ushort 1 +# ifdef Q_COMPILER_UNICODE_STRINGS +# define TYPE_SUPPORTED_char16_t 1 +# endif +# ifndef TYPE_SUPPORTED_wchar_t +# define TYPE_SUPPORTED_wchar_t 1 +# endif +#endif +#ifdef Q_ATOMIC_INT64_IS_SUPPORTED +# define TYPE_SUPPORTED_qlonglong 1 +# define TYPE_SUPPORTED_qulonglong 1 +#endif + +#ifdef Q_MOC_RUN +# define QATOMIC_TYPE_SUPPORTED(type) 1 +#else +# define QATOMIC_TYPE_SUPPORTED2(type) TYPE_SUPPORTED_ ## type +# define QATOMIC_TYPE_SUPPORTED(type) QATOMIC_TYPE_SUPPORTED2(type) +#endif // Q_MOC_RUN + +#if QATOMIC_TYPE_SUPPORTED(QATOMIC_TEST_TYPE) +# define TEST_TYPE QATOMIC_TEST_TYPE +#else +# define TEST_TYPE int +# define QATOMIC_TEST_NOT_SUPPORTED +#endif + +#if defined(Q_CC_GNU) && !defined(Q_CC_INTEL) +# pragma GCC diagnostic ignored "-Wtype-limits" +# pragma GCC diagnostic ignored "-Wsign-compare" +#endif +#if defined(Q_CC_CLANG) && !defined(Q_CC_INTEL) +# pragma clang diagnostic ignored "-Wtautological-constant-out-of-range-compare" +#endif + +typedef signed char schar; + +typedef TEST_TYPE Type; +typedef Type T; // shorthand +enum { + TypeIsUnsigned = Type(-1) > Type(0), + TypeIsSigned = !TypeIsUnsigned +}; + +template struct LargeIntTemplate; +template <> struct LargeIntTemplate { typedef quint64 Type; }; +template <> struct LargeIntTemplate { typedef qint64 Type; }; +typedef LargeIntTemplate::Type LargeInt; + +class tst_QAtomicIntegerXX : public QObject +{ + Q_OBJECT + + void addData(); + +private Q_SLOTS: + void initTestCase(); + void static_checks(); + + void constructor_data() { addData(); } + void constructor(); + + void copy_data() { addData(); } + void copy(); + + void assign_data() { addData(); } + void assign(); + + void loadAcquireStoreRelease_data() { addData(); } + void loadAcquireStoreRelease(); + + void refDeref_data() { addData(); } + void refDeref(); + + void testAndSet_data() { addData(); } + void testAndSet(); + + void fetchAndStore_data() { addData(); } + void fetchAndStore(); + + void fetchAndAdd_data() { addData(); } + void fetchAndAdd(); +}; + +template inline void booleanHelper() { } +template struct TypeInStruct { T type; }; + +void tst_QAtomicIntegerXX::static_checks() +{ + Q_STATIC_ASSERT(sizeof(QAtomicInteger) == sizeof(T)); + Q_STATIC_ASSERT(Q_ALIGNOF(QAtomicInteger) == Q_ALIGNOF(TypeInStruct)); + + // statements with no effect + (void) QAtomicInteger::isReferenceCountingNative(); + (void) QAtomicInteger::isReferenceCountingWaitFree(); + (void) QAtomicInteger::isTestAndSetNative(); + (void) QAtomicInteger::isTestAndSetWaitFree(); + (void) QAtomicInteger::isFetchAndStoreNative(); + (void) QAtomicInteger::isFetchAndStoreWaitFree(); + (void) QAtomicInteger::isFetchAndAddNative(); + (void) QAtomicInteger::isFetchAndAddWaitFree(); + +#ifdef Q_COMPILER_CONSTEXPR + // this is a compile-time test only + booleanHelper::isReferenceCountingNative()>(); + booleanHelper::isReferenceCountingWaitFree()>(); + booleanHelper::isTestAndSetNative()>(); + booleanHelper::isTestAndSetWaitFree()>(); + booleanHelper::isFetchAndStoreNative()>(); + booleanHelper::isFetchAndStoreWaitFree()>(); + booleanHelper::isFetchAndAddNative()>(); + booleanHelper::isFetchAndAddWaitFree()>(); +#endif +} + +void tst_QAtomicIntegerXX::addData() +{ + typedef std::numeric_limits Limits; + QTest::addColumn("value"); + QTest::newRow("0") << LargeInt(0); + QTest::newRow("+1") << LargeInt(1); + QTest::newRow("42") << LargeInt(42); + if (TypeIsSigned) { + QTest::newRow("-1") << qint64(-1); + QTest::newRow("-47") << qint64(-47); + } + + // exercise bits + if (TypeIsSigned && Limits::min() < qint64(SCHAR_MIN)) + QTest::newRow("int8_min") << qint64(SCHAR_MIN); + if (Limits::max() > LargeInt(SCHAR_MAX)) + QTest::newRow("int8_max") << LargeInt(SCHAR_MAX); + if (Limits::max() > LargeInt(UCHAR_MAX)) + QTest::newRow("uint8_max") << LargeInt(UCHAR_MAX); + if (TypeIsSigned && Limits::min() < -qint64(UCHAR_MAX)) + QTest::newRow("-uint8_max") << -qint64(UCHAR_MAX); + if (Limits::max() > LargeInt(SHRT_MAX)) + QTest::newRow("int16_max") << LargeInt(SHRT_MAX); + if (TypeIsSigned && Limits::min() < qint64(SHRT_MIN)) + QTest::newRow("int16_min") << qint64(SHRT_MIN); + if (Limits::max() > LargeInt(USHRT_MAX)) + QTest::newRow("uint16_max") << LargeInt(USHRT_MAX); + if (TypeIsSigned && Limits::min() < -qint64(USHRT_MAX)) + QTest::newRow("-uint16_max") << -qint64(USHRT_MAX); + if (Limits::max() > LargeInt(INT_MAX)) + QTest::newRow("int32_max") << LargeInt(INT_MAX); + if (TypeIsSigned && Limits::min() < qint64(INT_MIN)) + QTest::newRow("int32_min") << qint64(INT_MIN); + if (Limits::max() > LargeInt(UINT_MAX)) + QTest::newRow("uint32_max") << LargeInt(UINT_MAX); + if (Limits::max() > LargeInt(std::numeric_limits::max())) + QTest::newRow("int64_max") << LargeInt(std::numeric_limits::max()); + if (TypeIsSigned && Limits::min() < -qint64(UINT_MAX)) + QTest::newRow("-uint32_max") << -qint64(UINT_MAX); + + if (TypeIsSigned) + QTest::newRow(QT_STRINGIFY(QATOMIC_TEST_TYPE) "_min") << qint64(Limits::min()); + QTest::newRow(QT_STRINGIFY(QATOMIC_TEST_TYPE) "_max") << LargeInt(Limits::max()); +} + +void tst_QAtomicIntegerXX::initTestCase() +{ +#ifdef QATOMIC_TEST_NOT_SUPPORTED + QSKIP("QAtomicInteger<" QT_STRINGIFY(QATOMIC_TEST_TYPE) "> is not supported on this platform"); +#endif +} + +void tst_QAtomicIntegerXX::constructor() +{ + QFETCH(LargeInt, value); + + QAtomicInteger atomic(value); + QCOMPARE(atomic.load(), T(value)); + + QAtomicInteger atomic2 = value; + QCOMPARE(atomic2.load(), T(value)); + + QVERIFY(atomic.load() >= std::numeric_limits::min()); + QVERIFY(atomic.load() <= std::numeric_limits::max()); +} + +void tst_QAtomicIntegerXX::copy() +{ + QFETCH(LargeInt, value); + + QAtomicInteger atomic(value); + QAtomicInteger copy(atomic); + QCOMPARE(copy.load(), atomic.load()); + + QAtomicInteger copy2 = atomic; + QCOMPARE(copy2.load(), atomic.load()); + + // move + QAtomicInteger copy3(qMove(copy)); + QCOMPARE(copy3.load(), atomic.load()); + + QAtomicInteger copy4 = qMove(copy2); + QCOMPARE(copy4.load(), atomic.load()); +} + +void tst_QAtomicIntegerXX::assign() +{ + QFETCH(LargeInt, value); + + QAtomicInteger atomic(value); + QAtomicInteger copy; + copy = atomic; + QCOMPARE(copy.load(), atomic.load()); + + QAtomicInteger copy2; + copy2 = atomic; + QCOMPARE(copy2.load(), atomic.load()); + + // move + QAtomicInteger copy3; + copy3 = qMove(copy); + QCOMPARE(copy3.load(), atomic.load()); + + QAtomicInteger copy4; + copy4 = qMove(copy2); + QCOMPARE(copy4.load(), atomic.load()); +} + +void tst_QAtomicIntegerXX::loadAcquireStoreRelease() +{ + QFETCH(LargeInt, value); + + QAtomicInteger atomic(value); + QCOMPARE(atomic.loadAcquire(), T(value)); + + atomic.storeRelease(~value); + QCOMPARE(atomic.loadAcquire(), T(~value)); + + atomic.storeRelease(value); + QCOMPARE(atomic.load(), T(value)); +} + +void tst_QAtomicIntegerXX::refDeref() +{ + QFETCH(LargeInt, value); + T nextValue = T(value + 1); + T prevValue = T(value - 1); + + QAtomicInteger atomic(value); + QCOMPARE(atomic.ref(), (nextValue != 0)); + QCOMPARE(atomic.load(), nextValue); + QCOMPARE(atomic.deref(), (value != 0)); + QCOMPARE(atomic.load(), T(value)); + QCOMPARE(atomic.deref(), (prevValue != 0)); + QCOMPARE(atomic.load(), prevValue); + QCOMPARE(atomic.ref(), (value != 0)); + QCOMPARE(atomic.load(), T(value)); +} + +void tst_QAtomicIntegerXX::testAndSet() +{ + QFETCH(LargeInt, value); + T newValue = ~T(value); + QAtomicInteger atomic(value); + + QVERIFY(atomic.testAndSetRelaxed(value, newValue)); + QCOMPARE(atomic.load(), newValue); + QVERIFY(!atomic.testAndSetRelaxed(value, newValue)); + QVERIFY(atomic.testAndSetRelaxed(newValue, value)); + QCOMPARE(atomic.load(), T(value)); + + QVERIFY(atomic.testAndSetAcquire(value, newValue)); + QCOMPARE(atomic.load(), newValue); + QVERIFY(!atomic.testAndSetAcquire(value, newValue)); + QVERIFY(atomic.testAndSetAcquire(newValue, value)); + QCOMPARE(atomic.load(), T(value)); + + QVERIFY(atomic.testAndSetRelease(value, newValue)); + QCOMPARE(atomic.loadAcquire(), newValue); + QVERIFY(!atomic.testAndSetRelease(value, newValue)); + QVERIFY(atomic.testAndSetRelease(newValue, value)); + QCOMPARE(atomic.loadAcquire(), T(value)); + + QVERIFY(atomic.testAndSetOrdered(value, newValue)); + QCOMPARE(atomic.loadAcquire(), newValue); + QVERIFY(!atomic.testAndSetOrdered(value, newValue)); + QVERIFY(atomic.testAndSetOrdered(newValue, value)); + QCOMPARE(atomic.loadAcquire(), T(value)); +} + +void tst_QAtomicIntegerXX::fetchAndStore() +{ + QFETCH(LargeInt, value); + T newValue = ~T(value); + QAtomicInteger atomic(value); + + QCOMPARE(atomic.fetchAndStoreRelaxed(newValue), T(value)); + QCOMPARE(atomic.load(), newValue); + QCOMPARE(atomic.fetchAndStoreRelaxed(value), newValue); + QCOMPARE(atomic.load(), T(value)); + + QCOMPARE(atomic.fetchAndStoreAcquire(newValue), T(value)); + QCOMPARE(atomic.load(), newValue); + QCOMPARE(atomic.fetchAndStoreAcquire(value), newValue); + QCOMPARE(atomic.load(), T(value)); + + QCOMPARE(atomic.fetchAndStoreRelease(newValue), T(value)); + QCOMPARE(atomic.loadAcquire(), newValue); + QCOMPARE(atomic.fetchAndStoreRelease(value), newValue); + QCOMPARE(atomic.loadAcquire(), T(value)); + + QCOMPARE(atomic.fetchAndStoreOrdered(newValue), T(value)); + QCOMPARE(atomic.loadAcquire(), newValue); + QCOMPARE(atomic.fetchAndStoreOrdered(value), newValue); + QCOMPARE(atomic.loadAcquire(), T(value)); +} + +void tst_QAtomicIntegerXX::fetchAndAdd() +{ + QFETCH(LargeInt, value); + QAtomicInteger atomic(value); + + // note: this test has undefined behavior for signed max and min + T parcel1 = 42; + T parcel2 = T(0-parcel1); + T newValue1 = T(value) + parcel1; + T newValue2 = T(value) + parcel2; + + QCOMPARE(atomic.fetchAndAddRelaxed(parcel1), T(value)); + QCOMPARE(atomic.load(), newValue1); + QCOMPARE(atomic.fetchAndAddRelaxed(parcel2), newValue1); + QCOMPARE(atomic.load(), T(value)); + QCOMPARE(atomic.fetchAndAddRelaxed(parcel2), T(value)); + QCOMPARE(atomic.load(), newValue2); + QCOMPARE(atomic.fetchAndAddRelaxed(parcel1), newValue2); + QCOMPARE(atomic.load(), T(value)); + + QCOMPARE(atomic.fetchAndAddAcquire(parcel1), T(value)); + QCOMPARE(atomic.load(), newValue1); + QCOMPARE(atomic.fetchAndAddAcquire(parcel2), newValue1); + QCOMPARE(atomic.load(), T(value)); + QCOMPARE(atomic.fetchAndAddAcquire(parcel2), T(value)); + QCOMPARE(atomic.load(), newValue2); + QCOMPARE(atomic.fetchAndAddAcquire(parcel1), newValue2); + QCOMPARE(atomic.load(), T(value)); + + QCOMPARE(atomic.fetchAndAddRelease(parcel1), T(value)); + QCOMPARE(atomic.loadAcquire(), newValue1); + QCOMPARE(atomic.fetchAndAddRelease(parcel2), newValue1); + QCOMPARE(atomic.loadAcquire(), T(value)); + QCOMPARE(atomic.fetchAndAddRelease(parcel2), T(value)); + QCOMPARE(atomic.loadAcquire(), newValue2); + QCOMPARE(atomic.fetchAndAddRelease(parcel1), newValue2); + QCOMPARE(atomic.loadAcquire(), T(value)); + + QCOMPARE(atomic.fetchAndAddOrdered(parcel1), T(value)); + QCOMPARE(atomic.loadAcquire(), newValue1); + QCOMPARE(atomic.fetchAndAddOrdered(parcel2), newValue1); + QCOMPARE(atomic.loadAcquire(), T(value)); + QCOMPARE(atomic.fetchAndAddOrdered(parcel2), T(value)); + QCOMPARE(atomic.loadAcquire(), newValue2); + QCOMPARE(atomic.fetchAndAddOrdered(parcel1), newValue2); + QCOMPARE(atomic.loadAcquire(), T(value)); +} + +#include "tst_qatomicinteger.moc" + +QTEST_APPLESS_MAIN(tst_QAtomicIntegerXX) + diff --git a/tests/auto/corelib/thread/qatomicinteger/uchar/uchar.pro b/tests/auto/corelib/thread/qatomicinteger/uchar/uchar.pro new file mode 100644 index 0000000000..51ef1add8f --- /dev/null +++ b/tests/auto/corelib/thread/qatomicinteger/uchar/uchar.pro @@ -0,0 +1,2 @@ +TYPE = $$basename(PWD) +include(../qatomicinteger.pri) diff --git a/tests/auto/corelib/thread/qatomicinteger/uint/uint.pro b/tests/auto/corelib/thread/qatomicinteger/uint/uint.pro new file mode 100644 index 0000000000..51ef1add8f --- /dev/null +++ b/tests/auto/corelib/thread/qatomicinteger/uint/uint.pro @@ -0,0 +1,2 @@ +TYPE = $$basename(PWD) +include(../qatomicinteger.pri) diff --git a/tests/auto/corelib/thread/qatomicinteger/ulong/ulong.pro b/tests/auto/corelib/thread/qatomicinteger/ulong/ulong.pro new file mode 100644 index 0000000000..51ef1add8f --- /dev/null +++ b/tests/auto/corelib/thread/qatomicinteger/ulong/ulong.pro @@ -0,0 +1,2 @@ +TYPE = $$basename(PWD) +include(../qatomicinteger.pri) diff --git a/tests/auto/corelib/thread/qatomicinteger/ushort/ushort.pro b/tests/auto/corelib/thread/qatomicinteger/ushort/ushort.pro new file mode 100644 index 0000000000..51ef1add8f --- /dev/null +++ b/tests/auto/corelib/thread/qatomicinteger/ushort/ushort.pro @@ -0,0 +1,2 @@ +TYPE = $$basename(PWD) +include(../qatomicinteger.pri) diff --git a/tests/auto/corelib/thread/qatomicinteger/wchar_t/wchar_t.pro b/tests/auto/corelib/thread/qatomicinteger/wchar_t/wchar_t.pro new file mode 100644 index 0000000000..51ef1add8f --- /dev/null +++ b/tests/auto/corelib/thread/qatomicinteger/wchar_t/wchar_t.pro @@ -0,0 +1,2 @@ +TYPE = $$basename(PWD) +include(../qatomicinteger.pri) diff --git a/tests/auto/corelib/thread/thread.pro b/tests/auto/corelib/thread/thread.pro index f529bd8941..f18dad6a4c 100644 --- a/tests/auto/corelib/thread/thread.pro +++ b/tests/auto/corelib/thread/thread.pro @@ -1,6 +1,7 @@ TEMPLATE=subdirs SUBDIRS=\ qatomicint \ + qatomicinteger \ qatomicpointer \ qresultstore \ qfuture \ -- cgit v1.2.3 From f6723cf0d479823a34e874bc4cc9ff43e040793a Mon Sep 17 00:00:00 2001 From: Friedemann Kleint Date: Wed, 29 Jan 2014 16:34:03 +0100 Subject: tst_qpauseanimation: Fix condition in QEXPECT_FAIL. introduced by b0b22e8d496e753642fa8ddb05f167a722c65c00 . Change-Id: Ia57331ce9373a414f2bc56962412f20ef83bd7ca Reviewed-by: Allan Sandfeld Jensen Reviewed-by: Frederik Gladhorn --- tests/auto/corelib/animation/qpauseanimation/tst_qpauseanimation.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) (limited to 'tests') diff --git a/tests/auto/corelib/animation/qpauseanimation/tst_qpauseanimation.cpp b/tests/auto/corelib/animation/qpauseanimation/tst_qpauseanimation.cpp index 529069552b..419fa1af20 100644 --- a/tests/auto/corelib/animation/qpauseanimation/tst_qpauseanimation.cpp +++ b/tests/auto/corelib/animation/qpauseanimation/tst_qpauseanimation.cpp @@ -262,7 +262,7 @@ void tst_QPauseAnimation::pauseResume() QTRY_COMPARE(animation.state(), QAbstractAnimation::Stopped); #ifdef Q_OS_WIN - if (animation.m_updateCurrentTimeCount != 3) + if (animation.m_updateCurrentTimeCount < 3) QEXPECT_FAIL("", winTimerError, Abort); #endif QVERIFY2(animation.m_updateCurrentTimeCount >= 3, qPrintable( -- cgit v1.2.3 From f26928cccf7e0fd9f06236476f2a6b52151e5dca Mon Sep 17 00:00:00 2001 From: Konstantin Ritt Date: Fri, 17 Jan 2014 17:38:55 +0200 Subject: Allow QTextCharFormat::setFont() to skip unresolved font props This makes the font merging possible and solves an issue with the default font properties inheritance when used in conjunction with QTextFormatCollection. Change-Id: If8b543c011122dde9f086f5d696df3b042f7b90c Reviewed-by: Lars Knoll --- tests/auto/gui/text/qtextformat/qtextformat.pro | 2 +- .../auto/gui/text/qtextformat/tst_qtextformat.cpp | 243 +++++++++++++++++++++ 2 files changed, 244 insertions(+), 1 deletion(-) (limited to 'tests') diff --git a/tests/auto/gui/text/qtextformat/qtextformat.pro b/tests/auto/gui/text/qtextformat/qtextformat.pro index b137dac9eb..c64d266916 100644 --- a/tests/auto/gui/text/qtextformat/qtextformat.pro +++ b/tests/auto/gui/text/qtextformat/qtextformat.pro @@ -1,5 +1,5 @@ CONFIG += testcase CONFIG += parallel_test TARGET = tst_qtextformat -QT += testlib +QT += testlib core-private gui-private SOURCES += tst_qtextformat.cpp diff --git a/tests/auto/gui/text/qtextformat/tst_qtextformat.cpp b/tests/auto/gui/text/qtextformat/tst_qtextformat.cpp index 1eb073d3b4..beb5069f06 100644 --- a/tests/auto/gui/text/qtextformat/tst_qtextformat.cpp +++ b/tests/auto/gui/text/qtextformat/tst_qtextformat.cpp @@ -46,6 +46,7 @@ #include #include #include +#include #include #include #include @@ -68,6 +69,10 @@ private slots: void getSetTabs(); void testTabsUsed(); void testFontStyleSetters(); + void setFont_data(); + void setFont(); + void setFont_collection_data(); + void setFont_collection(); }; /*! \internal @@ -410,5 +415,243 @@ void tst_QTextFormat::testFontStyleSetters() QCOMPARE(format.font().kerning(), false); } +Q_DECLARE_METATYPE(QTextCharFormat) + +void tst_QTextFormat::setFont_data() +{ + QTest::addColumn("format1"); + QTest::addColumn("format2"); + QTest::addColumn("overrideAll"); + + QTextCharFormat format1; + format1.setFontStyleHint(QFont::Serif); + format1.setFontStyleStrategy(QFont::PreferOutline); + format1.setFontCapitalization(QFont::AllUppercase); + format1.setFontKerning(true); + + { + QTest::newRow("noop|override") << format1 << format1 << true; + QTest::newRow("noop|inherit") << format1 << format1 << false; + } + + { + QTextCharFormat format2; + format2.setFontStyleHint(QFont::SansSerif); + format2.setFontStyleStrategy(QFont::PreferAntialias); + format2.setFontCapitalization(QFont::MixedCase); + format2.setFontKerning(false); + + QTest::newRow("coverage|override") << format1 << format2 << true; + QTest::newRow("coverage|inherit") << format1 << format2 << false; + } + + { + QTextCharFormat format2; + format2.setFontStyleHint(QFont::SansSerif); + format2.setFontStyleStrategy(QFont::PreferAntialias); + + QTest::newRow("partial|override") << format1 << format2 << true; + QTest::newRow("partial|inherit") << format1 << format2 << false; + } +} + +void tst_QTextFormat::setFont() +{ + QFETCH(QTextCharFormat, format1); + QFETCH(QTextCharFormat, format2); + QFETCH(bool, overrideAll); + + QTextCharFormat f; + + f.merge(format1); + QCOMPARE((int)f.fontStyleHint(), (int)format1.fontStyleHint()); + QCOMPARE((int)f.fontStyleStrategy(), (int)format1.fontStyleStrategy()); + QCOMPARE((int)f.fontCapitalization(), (int)format1.fontCapitalization()); + QCOMPARE(f.fontKerning(), format1.fontKerning()); + + QCOMPARE((int)f.font().styleHint(), (int)f.fontStyleHint()); + QCOMPARE((int)f.font().styleStrategy(), (int)f.fontStyleStrategy()); + QCOMPARE((int)f.font().capitalization(), (int)f.fontCapitalization()); + QCOMPARE(f.font().kerning(), f.fontKerning()); + + f.merge(format2); + QCOMPARE((int)f.font().styleHint(), (int)f.fontStyleHint()); + QCOMPARE((int)f.font().styleStrategy(), (int)f.fontStyleStrategy()); + QCOMPARE((int)f.font().capitalization(), (int)f.fontCapitalization()); + QCOMPARE(f.font().kerning(), f.fontKerning()); + + if (format2.hasProperty(QTextFormat::FontStyleHint)) + QCOMPARE((int)f.font().styleHint(), (int)format2.fontStyleHint()); + else + QCOMPARE((int)f.font().styleHint(), (int)format1.fontStyleHint()); + if (format2.hasProperty(QTextFormat::FontStyleStrategy)) + QCOMPARE((int)f.font().styleStrategy(), (int)format2.fontStyleStrategy()); + else + QCOMPARE((int)f.font().styleStrategy(), (int)format1.fontStyleStrategy()); + if (format2.hasProperty(QTextFormat::FontCapitalization)) + QCOMPARE((int)f.font().capitalization(), (int)format2.fontCapitalization()); + else + QCOMPARE((int)f.font().capitalization(), (int)format1.fontCapitalization()); + if (format2.hasProperty(QTextFormat::FontKerning)) + QCOMPARE(f.font().kerning(), format2.fontKerning()); + else + QCOMPARE(f.font().kerning(), format1.fontKerning()); + + + QFont font1 = format1.font(); + QFont font2 = format2.font(); + + f = QTextCharFormat(); + + { + QTextCharFormat tmp; + tmp.setFont(font1, overrideAll ? QTextCharFormat::FontPropertiesAll + : QTextCharFormat::FontPropertiesSpecifiedOnly); + f.merge(tmp); + } + QCOMPARE((int)f.fontStyleHint(), (int)format1.fontStyleHint()); + QCOMPARE((int)f.fontStyleStrategy(), (int)format1.fontStyleStrategy()); + QCOMPARE((int)f.fontCapitalization(), (int)format1.fontCapitalization()); + QCOMPARE(f.fontKerning(), format1.fontKerning()); + + QCOMPARE((int)f.font().styleHint(), (int)f.fontStyleHint()); + QCOMPARE((int)f.font().styleStrategy(), (int)f.fontStyleStrategy()); + QCOMPARE((int)f.font().capitalization(), (int)f.fontCapitalization()); + QCOMPARE(f.font().kerning(), f.fontKerning()); + + { + QTextCharFormat tmp; + tmp.setFont(font2, overrideAll ? QTextCharFormat::FontPropertiesAll + : QTextCharFormat::FontPropertiesSpecifiedOnly); + f.merge(tmp); + } + QCOMPARE((int)f.font().styleHint(), (int)f.fontStyleHint()); + QCOMPARE((int)f.font().styleStrategy(), (int)f.fontStyleStrategy()); + QCOMPARE((int)f.font().capitalization(), (int)f.fontCapitalization()); + QCOMPARE(f.font().kerning(), f.fontKerning()); + + if (overrideAll || (font2.resolve() & QFont::StyleHintResolved)) + QCOMPARE((int)f.font().styleHint(), (int)font2.styleHint()); + else + QCOMPARE((int)f.font().styleHint(), (int)font1.styleHint()); + if (overrideAll || (font2.resolve() & QFont::StyleStrategyResolved)) + QCOMPARE((int)f.font().styleStrategy(), (int)font2.styleStrategy()); + else + QCOMPARE((int)f.font().styleStrategy(), (int)font1.styleStrategy()); + if (overrideAll || (font2.resolve() & QFont::CapitalizationResolved)) + QCOMPARE((int)f.font().capitalization(), (int)font2.capitalization()); + else + QCOMPARE((int)f.font().capitalization(), (int)font1.capitalization()); + if (overrideAll || (font2.resolve() & QFont::KerningResolved)) + QCOMPARE(f.font().kerning(), font2.kerning()); + else + QCOMPARE(f.font().kerning(), font1.kerning()); +} + +void tst_QTextFormat::setFont_collection_data() +{ + setFont_data(); +} + +void tst_QTextFormat::setFont_collection() +{ + QFETCH(QTextCharFormat, format1); + QFETCH(QTextCharFormat, format2); + QFETCH(bool, overrideAll); + + QFont font1 = format1.font(); + QFont font2 = format2.font(); + + { + QTextFormatCollection collection; + collection.setDefaultFont(font1); + + int formatIndex = collection.indexForFormat(format1); + QTextCharFormat f = collection.charFormat(formatIndex); + + QCOMPARE((int)f.fontStyleHint(), (int)format1.fontStyleHint()); + QCOMPARE((int)f.fontStyleStrategy(), (int)format1.fontStyleStrategy()); + QCOMPARE((int)f.fontCapitalization(), (int)format1.fontCapitalization()); + QCOMPARE(f.fontKerning(), format1.fontKerning()); + + QCOMPARE((int)f.font().styleHint(), (int)f.fontStyleHint()); + QCOMPARE((int)f.font().styleStrategy(), (int)f.fontStyleStrategy()); + QCOMPARE((int)f.font().capitalization(), (int)f.fontCapitalization()); + QCOMPARE(f.font().kerning(), f.fontKerning()); + } + { + QTextFormatCollection collection; + collection.setDefaultFont(font1); + + int formatIndex = collection.indexForFormat(format2); + QTextCharFormat f = collection.charFormat(formatIndex); + + if (format2.hasProperty(QTextFormat::FontStyleHint)) + QCOMPARE((int)f.font().styleHint(), (int)format2.fontStyleHint()); + else + QCOMPARE((int)f.font().styleHint(), (int)format1.fontStyleHint()); + if (format2.hasProperty(QTextFormat::FontStyleStrategy)) + QCOMPARE((int)f.font().styleStrategy(), (int)format2.fontStyleStrategy()); + else + QCOMPARE((int)f.font().styleStrategy(), (int)format1.fontStyleStrategy()); + if (format2.hasProperty(QTextFormat::FontCapitalization)) + QCOMPARE((int)f.font().capitalization(), (int)format2.fontCapitalization()); + else + QCOMPARE((int)f.font().capitalization(), (int)format1.fontCapitalization()); + if (format2.hasProperty(QTextFormat::FontKerning)) + QCOMPARE(f.font().kerning(), format2.fontKerning()); + else + QCOMPARE(f.font().kerning(), format1.fontKerning()); + } + + { + QTextFormatCollection collection; + collection.setDefaultFont(font1); + + QTextCharFormat tmp; + tmp.setFont(font1, overrideAll ? QTextCharFormat::FontPropertiesAll + : QTextCharFormat::FontPropertiesSpecifiedOnly); + int formatIndex = collection.indexForFormat(tmp); + QTextCharFormat f = collection.charFormat(formatIndex); + + QCOMPARE((int)f.fontStyleHint(), (int)format1.fontStyleHint()); + QCOMPARE((int)f.fontStyleStrategy(), (int)format1.fontStyleStrategy()); + QCOMPARE((int)f.fontCapitalization(), (int)format1.fontCapitalization()); + QCOMPARE(f.fontKerning(), format1.fontKerning()); + + QCOMPARE((int)f.font().styleHint(), (int)f.fontStyleHint()); + QCOMPARE((int)f.font().styleStrategy(), (int)f.fontStyleStrategy()); + QCOMPARE((int)f.font().capitalization(), (int)f.fontCapitalization()); + QCOMPARE(f.font().kerning(), f.fontKerning()); + } + { + QTextFormatCollection collection; + collection.setDefaultFont(font1); + + QTextCharFormat tmp; + tmp.setFont(font2, overrideAll ? QTextCharFormat::FontPropertiesAll + : QTextCharFormat::FontPropertiesSpecifiedOnly); + int formatIndex = collection.indexForFormat(tmp); + QTextCharFormat f = collection.charFormat(formatIndex); + + if (overrideAll || (font2.resolve() & QFont::StyleHintResolved)) + QCOMPARE((int)f.font().styleHint(), (int)font2.styleHint()); + else + QCOMPARE((int)f.font().styleHint(), (int)font1.styleHint()); + if (overrideAll || (font2.resolve() & QFont::StyleStrategyResolved)) + QCOMPARE((int)f.font().styleStrategy(), (int)font2.styleStrategy()); + else + QCOMPARE((int)f.font().styleStrategy(), (int)font1.styleStrategy()); + if (overrideAll || (font2.resolve() & QFont::CapitalizationResolved)) + QCOMPARE((int)f.font().capitalization(), (int)font2.capitalization()); + else + QCOMPARE((int)f.font().capitalization(), (int)font1.capitalization()); + if (overrideAll || (font2.resolve() & QFont::KerningResolved)) + QCOMPARE(f.font().kerning(), font2.kerning()); + else + QCOMPARE(f.font().kerning(), font1.kerning()); + } +} + QTEST_MAIN(tst_QTextFormat) #include "tst_qtextformat.moc" -- cgit v1.2.3 From 5f59207bd3a71159d0e21fde7a16bfa60c192057 Mon Sep 17 00:00:00 2001 From: Allan Sandfeld Jensen Date: Thu, 23 Jan 2014 12:20:21 +0100 Subject: Optimize drawing to and from generic formats When drawing to and from the less common formats most of the cpu time is spend in conversion. The conversion method is rather slow due to using variable shifts and masks that the compiler does not have a chance to optimize. This patch changes the conversion methods to being templates fed by constexpr methods. This allows the compiler to fully optimize the methods yielding 2x->5x speedups. The reliance on constexpr however means the optimized methods are only used under C++11. Change-Id: I2ec77c4c1c03f12ee463a694a2b59db0f0b52db1 Reviewed-by: Gunnar Sletta --- .../qimageconversion/tst_qimageconversion.cpp | 140 ++++++++++++++++++++- 1 file changed, 134 insertions(+), 6 deletions(-) (limited to 'tests') diff --git a/tests/benchmarks/gui/image/qimageconversion/tst_qimageconversion.cpp b/tests/benchmarks/gui/image/qimageconversion/tst_qimageconversion.cpp index fd12c89e80..eda46a1df0 100644 --- a/tests/benchmarks/gui/image/qimageconversion/tst_qimageconversion.cpp +++ b/tests/benchmarks/gui/image/qimageconversion/tst_qimageconversion.cpp @@ -42,28 +42,39 @@ #include #include +Q_DECLARE_METATYPE(QImage::Format) class tst_QImageConversion : public QObject { Q_OBJECT private slots: - void convertRgb888ToRGB32_data(); - void convertRgb888ToRGB32(); + void convertRgb888ToRgb32_data(); + void convertRgb888ToRgb32(); + + void convertRgb32ToRgb888_data(); + void convertRgb32ToRgb888(); + + void convertGeneric_data(); + void convertGeneric(); private: QImage generateImageRgb888(int width, int height); + QImage generateImageRgb16(int width, int height); + QImage generateImageRgb32(int width, int height); + QImage generateImageArgb32(int width, int height); }; -void tst_QImageConversion::convertRgb888ToRGB32_data() +void tst_QImageConversion::convertRgb888ToRgb32_data() { QTest::addColumn("inputImage"); + // height = 5000 to get interesting timing. // 3 pixels wide -> smaller than regular vector of 128bits QTest::newRow("width: 3px; height: 5000px;") << generateImageRgb888(3, 5000); // 8 pixels wide -> potential for 2 vectors - QTest::newRow("width: 8px; height: 5000px;") << generateImageRgb888(3, 5000); + QTest::newRow("width: 8px; height: 5000px;") << generateImageRgb888(8, 5000); // 16 pixels, minimum for the SSSE3 implementation QTest::newRow("width: 16px; height: 5000px;") << generateImageRgb888(16, 5000); @@ -72,10 +83,10 @@ void tst_QImageConversion::convertRgb888ToRGB32_data() QTest::newRow("width: 50px; height: 5000px;") << generateImageRgb888(50, 5000); // 2000 pixels -> typical values for pictures - QTest::newRow("width: 2000px; height: 5000px;") << generateImageRgb888(2000, 5000); + QTest::newRow("width: 2000px; height: 2000px;") << generateImageRgb888(2000, 2000); } -void tst_QImageConversion::convertRgb888ToRGB32() +void tst_QImageConversion::convertRgb888ToRgb32() { QFETCH(QImage, inputImage); @@ -87,6 +98,76 @@ void tst_QImageConversion::convertRgb888ToRGB32() } } +void tst_QImageConversion::convertRgb32ToRgb888_data() +{ + QTest::addColumn("inputImage"); + // height = 5000 to get interesting timing. + + // 3 pixels wide -> smaller than regular vector of 128bits + QTest::newRow("width: 3px; height: 5000px;") << generateImageRgb32(3, 5000); + + // 8 pixels wide -> potential for 2 vectors + QTest::newRow("width: 8px; height: 5000px;") << generateImageRgb32(8, 5000); + + // 16 pixels, minimum for the SSSE3 implementation + QTest::newRow("width: 16px; height: 5000px;") << generateImageRgb32(16, 5000); + + // 50 pixels, more realistic use case + QTest::newRow("width: 50px; height: 5000px;") << generateImageRgb32(50, 5000); + + // 2000 pixels -> typical values for pictures + QTest::newRow("width: 2000px; height: 2000px;") << generateImageRgb32(2000, 2000); +} + +void tst_QImageConversion::convertRgb32ToRgb888() +{ + QFETCH(QImage, inputImage); + + QBENCHMARK { + volatile QImage output = inputImage.convertToFormat(QImage::Format_RGB888); + // we need the volatile and the following to make sure the compiler does not do + // anything stupid :) + (void)output; + } +} + + +void tst_QImageConversion::convertGeneric_data() +{ + QTest::addColumn("inputImage"); + QTest::addColumn("outputFormat"); + QImage rgb16 = generateImageRgb16(1000, 1000); + QImage rgb32 = generateImageRgb32(1000, 1000); + QImage argb32 = generateImageArgb32(1000, 1000); + + QTest::newRow("rgb16 -> rgb32") << rgb16 << QImage::Format_RGB32; + QTest::newRow("rgb16 -> rgb888") << rgb16 << QImage::Format_RGB888; + QTest::newRow("rgb16 -> rgb666") << rgb16 << QImage::Format_RGB666; + QTest::newRow("rgb16 -> rgb555") << rgb16 << QImage::Format_RGB555; + + QTest::newRow("rgb32 -> rgb16") << rgb32 << QImage::Format_RGB16; + QTest::newRow("rgb32 -> rgb888") << rgb32 << QImage::Format_RGB888; + QTest::newRow("rgb32 -> rgb666") << rgb32 << QImage::Format_RGB666; + QTest::newRow("rgb32 -> rgb555") << rgb32 << QImage::Format_RGB555; + + QTest::newRow("argb32 -> rgba8888") << argb32 << QImage::Format_RGBA8888; + QTest::newRow("argb32 -> rgb888") << argb32 << QImage::Format_RGB888; + QTest::newRow("argb32 -> rgb666") << argb32 << QImage::Format_RGB666; + QTest::newRow("argb32 -> argb8565pm") << argb32 << QImage::Format_ARGB8565_Premultiplied; + QTest::newRow("argb32 -> argb4444pm") << argb32 << QImage::Format_ARGB4444_Premultiplied; +} + +void tst_QImageConversion::convertGeneric() +{ + QFETCH(QImage, inputImage); + QFETCH(QImage::Format, outputFormat); + + QBENCHMARK { + QImage output = inputImage.convertToFormat(outputFormat); + output.constBits(); + } +} + /* Fill a RGB888 image with "random" pixel values. */ @@ -103,5 +184,52 @@ QImage tst_QImageConversion::generateImageRgb888(int width, int height) return image; } +/* + Fill a RGB16 image with "random" pixel values. + */ +QImage tst_QImageConversion::generateImageRgb16(int width, int height) +{ + QImage image(width, height, QImage::Format_RGB16); + const int byteWidth = width * 2; + + for (int y = 0; y < image.height(); ++y) { + uchar *scanline = image.scanLine(y); + for (int x = 0; x < byteWidth; ++x) + scanline[x] = x ^ y; + } + return image; +} + +/* + Fill a RGB32 image with "random" pixel values. + */ +QImage tst_QImageConversion::generateImageRgb32(int width, int height) +{ + QImage image(width, height, QImage::Format_RGB32); + + for (int y = 0; y < image.height(); ++y) { + QRgb *scanline = (QRgb*)image.scanLine(y); + for (int x = 0; x < width; ++x) + scanline[x] = qRgb(x, y, x ^ y); + } + return image; +} + +/* + Fill a ARGB32 image with "random" pixel values. + */ +QImage tst_QImageConversion::generateImageArgb32(int width, int height) +{ + QImage image(width, height, QImage::Format_ARGB32); + const int byteWidth = width * 4; + + for (int y = 0; y < image.height(); ++y) { + uchar *scanline = image.scanLine(y); + for (int x = 0; x < byteWidth; ++x) + scanline[x] = x ^ y; + } + return image; +} + QTEST_MAIN(tst_QImageConversion) #include "tst_qimageconversion.moc" -- cgit v1.2.3 From 62a3aaf3f1192766bfc5d04cd94bc6eb99622d53 Mon Sep 17 00:00:00 2001 From: Friedemann Kleint Date: Fri, 24 Jan 2014 15:33:26 +0100 Subject: Fix MSVC-warning about unused variable eventdispatcher. Change-Id: Ic7c12f16c310cc681bba39a7969de235afcf0f44 Reviewed-by: Frederik Gladhorn --- tests/auto/corelib/kernel/qeventloop/tst_qeventloop.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) (limited to 'tests') diff --git a/tests/auto/corelib/kernel/qeventloop/tst_qeventloop.cpp b/tests/auto/corelib/kernel/qeventloop/tst_qeventloop.cpp index c6d04e64db..a7833aa835 100644 --- a/tests/auto/corelib/kernel/qeventloop/tst_qeventloop.cpp +++ b/tests/auto/corelib/kernel/qeventloop/tst_qeventloop.cpp @@ -504,8 +504,8 @@ void tst_QEventLoop::processEventsExcludeTimers() // but not if we exclude timers eventLoop.processEvents(QEventLoop::X11ExcludeTimers); - QAbstractEventDispatcher *eventDispatcher = QCoreApplication::eventDispatcher(); #if defined(Q_OS_UNIX) + QAbstractEventDispatcher *eventDispatcher = QCoreApplication::eventDispatcher(); if (!qobject_cast(eventDispatcher) #if defined(HAVE_GLIB) && !qobject_cast(eventDispatcher) -- cgit v1.2.3 From f40c28f91514356155a42f44f9eb69c7faa83eec Mon Sep 17 00:00:00 2001 From: Christian Loose Date: Mon, 27 Jan 2014 12:27:38 +0100 Subject: Q(Plain)TextEdit: Add find() overload with QRegExp Add overloads to the find() methods in QPlainTextEdit and QTextEdit that find the next occurrence matching the passed regular expression. These are convenience methods that eliminate the need to use the document() method and the need to handle the QTextCursor return value. [ChangeLog][QtWidgets][QPlainTextEdit] Added find method overload using QRegExp [ChangeLog][QtWidgets][QTextEdit] Added find method overload using QRegExp Change-Id: Ia6139b771e3ae4ca02e4b8ea7fde19e5dc71b9d8 Reviewed-by: Marc Mutz --- .../widgets/qplaintextedit/tst_qplaintextedit.cpp | 44 +++++++++++++++++++++ .../widgets/widgets/qtextedit/tst_qtextedit.cpp | 45 ++++++++++++++++++++++ 2 files changed, 89 insertions(+) (limited to 'tests') diff --git a/tests/auto/widgets/widgets/qplaintextedit/tst_qplaintextedit.cpp b/tests/auto/widgets/widgets/qplaintextedit/tst_qplaintextedit.cpp index 11c4e238ec..61eb390fd3 100644 --- a/tests/auto/widgets/widgets/qplaintextedit/tst_qplaintextedit.cpp +++ b/tests/auto/widgets/widgets/qplaintextedit/tst_qplaintextedit.cpp @@ -149,6 +149,11 @@ private slots: void insertAndScrollToBottom(); void inputMethodQueryImHints_data(); void inputMethodQueryImHints(); +#ifndef QT_NO_REGEXP + void findWithRegExp(); + void findBackwardWithRegExp(); + void findWithRegExpReturnsFalseIfNoMoreResults(); +#endif private: void createSelection(); @@ -1523,5 +1528,44 @@ void tst_QPlainTextEdit::inputMethodQueryImHints() QCOMPARE(static_cast(value.toInt()), hints); } +#ifndef QT_NO_REGEXP +void tst_QPlainTextEdit::findWithRegExp() +{ + ed->setPlainText(QStringLiteral("arbitrary text")); + QRegExp rx("\\w{2}xt"); + + bool found = ed->find(rx); + + QVERIFY(found == true); + QCOMPARE(ed->textCursor().selectedText(), QStringLiteral("text")); +} + +void tst_QPlainTextEdit::findBackwardWithRegExp() +{ + ed->setPlainText(QStringLiteral("arbitrary text")); + QTextCursor cursor = ed->textCursor(); + cursor.movePosition(QTextCursor::End); + ed->setTextCursor(cursor); + QRegExp rx("a\\w*t"); + + bool found = ed->find(rx, QTextDocument::FindBackward); + + QVERIFY(found == true); + QCOMPARE(ed->textCursor().selectedText(), QStringLiteral("arbit")); +} + +void tst_QPlainTextEdit::findWithRegExpReturnsFalseIfNoMoreResults() +{ + ed->setPlainText(QStringLiteral("arbitrary text")); + QRegExp rx("t.xt"); + ed->find(rx); + + bool found = ed->find(rx); + + QVERIFY(found == false); + QCOMPARE(ed->textCursor().selectedText(), QStringLiteral("text")); +} +#endif + QTEST_MAIN(tst_QPlainTextEdit) #include "tst_qplaintextedit.moc" diff --git a/tests/auto/widgets/widgets/qtextedit/tst_qtextedit.cpp b/tests/auto/widgets/widgets/qtextedit/tst_qtextedit.cpp index d06807eedb..53c76a0da6 100644 --- a/tests/auto/widgets/widgets/qtextedit/tst_qtextedit.cpp +++ b/tests/auto/widgets/widgets/qtextedit/tst_qtextedit.cpp @@ -205,6 +205,12 @@ private slots: void countTextChangedOnRemove(); +#ifndef QT_NO_REGEXP + void findWithRegExp(); + void findBackwardWithRegExp(); + void findWithRegExpReturnsFalseIfNoMoreResults(); +#endif + private: void createSelection(); int blockCount() const; @@ -2515,5 +2521,44 @@ void tst_QTextEdit::countTextChangedOnRemove() QCOMPARE(spy.count(), 1); } +#ifndef QT_NO_REGEXP +void tst_QTextEdit::findWithRegExp() +{ + ed->setHtml(QStringLiteral("arbitrary text")); + QRegExp rx("\\w{2}xt"); + + bool found = ed->find(rx); + + QVERIFY(found == true); + QCOMPARE(ed->textCursor().selectedText(), QStringLiteral("text")); +} + +void tst_QTextEdit::findBackwardWithRegExp() +{ + ed->setPlainText(QStringLiteral("arbitrary text")); + QTextCursor cursor = ed->textCursor(); + cursor.movePosition(QTextCursor::End); + ed->setTextCursor(cursor); + QRegExp rx("a\\w*t"); + + bool found = ed->find(rx, QTextDocument::FindBackward); + + QVERIFY(found == true); + QCOMPARE(ed->textCursor().selectedText(), QStringLiteral("arbit")); +} + +void tst_QTextEdit::findWithRegExpReturnsFalseIfNoMoreResults() +{ + ed->setPlainText(QStringLiteral("arbitrary text")); + QRegExp rx("t.xt"); + ed->find(rx); + + bool found = ed->find(rx); + + QVERIFY(found == false); + QCOMPARE(ed->textCursor().selectedText(), QStringLiteral("text")); +} +#endif + QTEST_MAIN(tst_QTextEdit) #include "tst_qtextedit.moc" -- cgit v1.2.3 From 5e99b07a072bedee239ed6980a44719da9ffa7c9 Mon Sep 17 00:00:00 2001 From: Bastiaan Veelo Date: Sat, 16 Nov 2013 01:02:22 +0100 Subject: Fix setWindowFlags() for QMdiSubWindow. It was impossible to hide/show the close button after a QMdiSubWindow was created. Task-number: QTBUG-9933 Task-number: QTBUG-27274 [ChangeLog][QtWidgets][QMdiSubWindow] Fixed setWindowFlags() for QMdiSubWindow. Change-Id: I7db9a1bef5ba8a8ace729acb85682c8b3de9c33c Reviewed-by: Friedemann Kleint Reviewed-by: Marc Mutz --- .../widgets/qmdisubwindow/tst_qmdisubwindow.cpp | 38 ++-------------------- 1 file changed, 2 insertions(+), 36 deletions(-) (limited to 'tests') diff --git a/tests/auto/widgets/widgets/qmdisubwindow/tst_qmdisubwindow.cpp b/tests/auto/widgets/widgets/qmdisubwindow/tst_qmdisubwindow.cpp index 72fbb6fd3d..268638a504 100644 --- a/tests/auto/widgets/widgets/qmdisubwindow/tst_qmdisubwindow.cpp +++ b/tests/auto/widgets/widgets/qmdisubwindow/tst_qmdisubwindow.cpp @@ -901,40 +901,12 @@ void tst_QMdiSubWindow::setWindowFlags() QVERIFY(QTest::qWaitForWindowExposed(&workspace)); window->setWindowFlags(windowType | customFlags); - QEXPECT_FAIL("Qt::Widget", "QTBUG-27274", Continue); - QEXPECT_FAIL("Qt::Window", "QTBUG-27274", Continue); - QEXPECT_FAIL("Qt::Dialog", "QTBUG-27274", Continue); - QEXPECT_FAIL("Qt::Sheet", "QTBUG-27274", Continue); - QEXPECT_FAIL("Qt::Drawer", "QTBUG-27274", Continue); - QEXPECT_FAIL("Qt::Popup", "QTBUG-27274", Continue); - QEXPECT_FAIL("Qt::Tool", "QTBUG-27274", Continue); - QEXPECT_FAIL("Qt::ToolTip", "QTBUG-27274", Continue); - QEXPECT_FAIL("Qt::SplashScreen", "QTBUG-27274", Continue); - QEXPECT_FAIL("Qt::Desktop", "QTBUG-27274", Continue); QCOMPARE(window->windowType(), expectedWindowType); - if (!expectedCustomFlags) { - // We expect the same as 'customFlags' + if (!expectedCustomFlags) // We expect the same as 'customFlags' QCOMPARE(window->windowFlags() & ~expectedWindowType, customFlags); - } else { - QEXPECT_FAIL("Qt::Widget", "QTBUG-27274", Continue); - QEXPECT_FAIL("Qt::Window", "QTBUG-27274", Continue); - QEXPECT_FAIL("Qt::Dialog", "QTBUG-27274", Continue); - QEXPECT_FAIL("Qt::Sheet", "QTBUG-27274", Continue); - QEXPECT_FAIL("Qt::Drawer", "QTBUG-27274", Continue); - QEXPECT_FAIL("Qt::Popup", "QTBUG-27274", Continue); - QEXPECT_FAIL("Qt::Tool", "QTBUG-27274", Continue); - QEXPECT_FAIL("Qt::ToolTip", "QTBUG-27274", Continue); - QEXPECT_FAIL("Qt::SplashScreen", "QTBUG-27274", Continue); - QEXPECT_FAIL("Qt::Desktop", "QTBUG-27274", Continue); - QEXPECT_FAIL("Qt::SubWindow", "QTBUG-27274", Continue); - QEXPECT_FAIL("StandardAndFrameless", "QTBUG-27274", Continue); - QEXPECT_FAIL("StandardAndFramelessAndStaysOnTop", "QTBUG-27274", Continue); - QEXPECT_FAIL("Shade", "QTBUG-27274", Continue); - QEXPECT_FAIL("Context", "QTBUG-27274", Continue); - QEXPECT_FAIL("ShadeAndContext", "QTBUG-27274", Continue); + else QCOMPARE(window->windowFlags() & ~expectedWindowType, expectedCustomFlags); - } } void tst_QMdiSubWindow::mouseDoubleClick() @@ -981,18 +953,12 @@ void tst_QMdiSubWindow::mouseDoubleClick() sendMouseDoubleClick(window, mousePosition); qApp->processEvents(); QVERIFY(!window->isShaded()); -#ifndef Q_OS_MAC - QEXPECT_FAIL("", "QTBUG-27274", Continue); -#endif QCOMPARE(window->geometry(), originalGeometry); window->showMinimized(); QVERIFY(window->isMinimized()); sendMouseDoubleClick(window, mousePosition); QVERIFY(!window->isMinimized()); -#ifndef Q_OS_MAC - QEXPECT_FAIL("", "QTBUG-27274", Continue); -#endif QCOMPARE(window->geometry(), originalGeometry); } -- cgit v1.2.3 From 35579f6fe73edcc61a266ba16d25d6c97f1dd225 Mon Sep 17 00:00:00 2001 From: Eskil Abrahamsen Blomfeldt Date: Fri, 31 Jan 2014 15:00:59 +0100 Subject: Support empty inline elements in block tags in QTextDocument This fixes the following case:
Foobar
Qt would see the end of , and consider the current block tag as closed, thus resetting the block format, thus losing the margin set for the current block (due to blockquote). If you do
FooFoobar
instead, then the same would not happen, since hasBlock is set to false when we append text to the current inline node. [ChangeLog][QTextDocument] Add support for empty inline elements in block tags. Task-number: QTBUG-33336 Change-Id: Ic566edfec96cb8d44d1c02932bb195bc921d1580 Reviewed-by: Simon Hausmann --- .../gui/text/qtextdocumentfragment/tst_qtextdocumentfragment.cpp | 7 +++++++ 1 file changed, 7 insertions(+) (limited to 'tests') diff --git a/tests/auto/gui/text/qtextdocumentfragment/tst_qtextdocumentfragment.cpp b/tests/auto/gui/text/qtextdocumentfragment/tst_qtextdocumentfragment.cpp index 009b536d7e..4274753c37 100644 --- a/tests/auto/gui/text/qtextdocumentfragment/tst_qtextdocumentfragment.cpp +++ b/tests/auto/gui/text/qtextdocumentfragment/tst_qtextdocumentfragment.cpp @@ -266,6 +266,7 @@ private slots: void html_metaInBody(); void html_importImageWithoutAspectRatio(); void html_fromFirefox(); + void html_emptyInlineInsideBlock(); private: inline void setHtml(const QString &html) @@ -4004,5 +4005,11 @@ void tst_QTextDocumentFragment::html_fromFirefox() QCOMPARE(doc->toPlainText(), QString::fromLatin1("Test Text ")); } +void tst_QTextDocumentFragment::html_emptyInlineInsideBlock() +{ + doc->setHtml(QString::fromLatin1("
Foobar
")); + QVERIFY(doc->firstBlock().blockFormat().leftMargin() > 0); +} + QTEST_MAIN(tst_QTextDocumentFragment) #include "tst_qtextdocumentfragment.moc" -- cgit v1.2.3 From 053bee8b80f4f987718c6633b831a58eb231b599 Mon Sep 17 00:00:00 2001 From: John Layt Date: Sat, 30 Nov 2013 00:00:01 +0100 Subject: QPrinter - Clean up Print Engine Key defaults and tests The PrintEngine keys are not consistently treated across the platforms and are not properly tested. Start the process of making the print engines behave consistently by documenting and testing the current behavior. Ensure all unsupported features return a consistent default value. The auto test for valuePreservation() has been flaky depending on the platform and installed printers so remove it and replace it with more complete testing. If no native printers available then don't test the native engines. Fixes for the individual inconsistent keys will follow. Task-number: QTBUG-26430 Change-Id: Iab914d7e0a5ae4a2cdc24c8645751f0910cf440c Reviewed-by: Lars Knoll --- .../printsupport/kernel/qprinter/tst_qprinter.cpp | 1416 ++++++++++++++------ 1 file changed, 1009 insertions(+), 407 deletions(-) (limited to 'tests') diff --git a/tests/auto/printsupport/kernel/qprinter/tst_qprinter.cpp b/tests/auto/printsupport/kernel/qprinter/tst_qprinter.cpp index b8b4c00549..37aa7b2a16 100644 --- a/tests/auto/printsupport/kernel/qprinter/tst_qprinter.cpp +++ b/tests/auto/printsupport/kernel/qprinter/tst_qprinter.cpp @@ -88,10 +88,7 @@ public slots: void cleanupTestCase(); #else private slots: - void getSetCheck(); -// Add your testfunctions and testdata create functions here #ifdef Q_OS_WIN - void testPageSize(); void testNonExistentPrinter(); #endif void testPageRectAndPaperRect(); @@ -105,10 +102,8 @@ private slots: void testMulitpleSets(); void testPageMargins_data(); void testPageMargins(); - void changingOutputFormat(); void outputFormatFromSuffix(); void setGetPaperSize(); - void valuePreservation(); void errorReporting(); void testCustomPageSizes(); void customPaperSizeAndMargins_data(); @@ -118,14 +113,41 @@ private slots: #if !defined(QT_NO_COMPLETER) && !defined(QT_NO_FILEDIALOG) void printDialogCompleter(); #endif - - void testCopyCount(); void testCurrentPage(); - void taskQTBUG4497_reusePrinterOnDifferentFiles(); void testPdfTitle(); void testPageMetrics_data(); void testPageMetrics(); + + // Test QPrintEngine keys and their QPrinter setters/getters + void testMultipleKeys(); + void collateCopies(); + void colorMode(); + void copyCount(); + void creator(); + void docName(); + void doubleSidedPrinting(); + void duplex(); + void fontEmbedding(); + void fullPage(); + void orientation(); + void outputFileName(); + void pageOrder(); + void pageSize(); + void paperSize(); + void paperSource(); + void printerName(); + void printerSelectionOption(); + void printProgram(); + void printRange(); + void resolution(); + void supportedPaperSources(); + void supportedResolutions(); + void windowsPageSize(); + + // Test QPrinter setters/getters for non-QPrintEngine options + void outputFormat(); + void fromToPage(); #endif }; @@ -140,98 +162,6 @@ void tst_QPrinter::cleanupTestCase() QSKIP("This test requires printing support"); } #else -// Testing get/set functions -void tst_QPrinter::getSetCheck() -{ - QPrinter obj1; - // OutputFormat QPrinter::outputFormat() - // void QPrinter::setOutputFormat(OutputFormat) - obj1.setOutputFormat(QPrinter::OutputFormat(QPrinter::PdfFormat)); - QCOMPARE(QPrinter::OutputFormat(QPrinter::PdfFormat), obj1.outputFormat()); - - // bool QPrinter::collateCopies() - // void QPrinter::setCollateCopies(bool) - obj1.setCollateCopies(false); - QCOMPARE(false, obj1.collateCopies()); - obj1.setCollateCopies(true); - QCOMPARE(true, obj1.collateCopies()); - - obj1.setColorMode(QPrinter::GrayScale); - QCOMPARE(obj1.colorMode(), QPrinter::GrayScale); - obj1.setColorMode(QPrinter::Color); - QCOMPARE(obj1.colorMode(), QPrinter::Color); - - obj1.setCreator(QString::fromLatin1("RandomQtUser")); - QCOMPARE(obj1.creator(), QString::fromLatin1("RandomQtUser")); - - obj1.setDocName(QString::fromLatin1("RandomQtDocument")); - QCOMPARE(obj1.docName(), QString::fromLatin1("RandomQtDocument")); - - obj1.setDoubleSidedPrinting(true); - QCOMPARE(obj1.doubleSidedPrinting(), true); - obj1.setDoubleSidedPrinting(false); - QCOMPARE(obj1.doubleSidedPrinting(), false); - - obj1.setFromTo(1, 4); - QCOMPARE(obj1.fromPage(), 1); - QCOMPARE(obj1.toPage(), 4); - - obj1.setFullPage(true); - QCOMPARE(obj1.fullPage(), true); - obj1.setFullPage(false); - QCOMPARE(obj1.fullPage(), false); - - obj1.setOrientation(QPrinter::Landscape); - QCOMPARE(obj1.orientation(), QPrinter::Landscape); - obj1.setOrientation(QPrinter::Portrait); - QCOMPARE(obj1.orientation(), QPrinter::Portrait); - - obj1.setOutputFileName(QString::fromLatin1("RandomQtName")); - QCOMPARE(obj1.outputFileName(), QString::fromLatin1("RandomQtName")); - - obj1.setPageOrder(QPrinter::FirstPageFirst); - QCOMPARE(obj1.pageOrder(), QPrinter::FirstPageFirst); - obj1.setPageOrder(QPrinter::LastPageFirst); - QCOMPARE(obj1.pageOrder(), QPrinter::LastPageFirst); - - obj1.setPaperSource(QPrinter::Cassette); - QCOMPARE(obj1.paperSource(), QPrinter::Cassette); - obj1.setPaperSource(QPrinter::Middle); - QCOMPARE(obj1.paperSource(), QPrinter::Middle); - -#ifdef Q_OS_UNIX - obj1.setPrintProgram(QString::fromLatin1("/bin/true")); - QCOMPARE(obj1.printProgram(), QString::fromLatin1("/bin/true")); - - obj1.setPrinterSelectionOption(QString::fromLatin1("--option")); - QCOMPARE(obj1.printerSelectionOption(), QString::fromLatin1("--option")); -#endif - - // bool QPrinter::fontEmbeddingEnabled() - // void QPrinter::setFontEmbeddingEnabled(bool) - obj1.setFontEmbeddingEnabled(false); - QCOMPARE(false, obj1.fontEmbeddingEnabled()); - obj1.setFontEmbeddingEnabled(true); - QCOMPARE(true, obj1.fontEmbeddingEnabled()); - - // PageSize QPrinter::pageSize() - // void QPrinter::setPageSize(PageSize) - obj1.setPageSize(QPrinter::PageSize(QPrinter::A4)); - QCOMPARE(QPrinter::PageSize(QPrinter::A4), obj1.pageSize()); - obj1.setPageSize(QPrinter::PageSize(QPrinter::Letter)); - QCOMPARE(QPrinter::PageSize(QPrinter::Letter), obj1.pageSize()); - obj1.setPageSize(QPrinter::PageSize(QPrinter::Legal)); - QCOMPARE(QPrinter::PageSize(QPrinter::Legal), obj1.pageSize()); - - // PrintRange QPrinter::printRange() - // void QPrinter::setPrintRange(PrintRange) - obj1.setPrintRange(QPrinter::PrintRange(QPrinter::AllPages)); - QCOMPARE(QPrinter::PrintRange(QPrinter::AllPages), obj1.printRange()); - obj1.setPrintRange(QPrinter::PrintRange(QPrinter::Selection)); - QCOMPARE(QPrinter::PrintRange(QPrinter::Selection), obj1.printRange()); - obj1.setPrintRange(QPrinter::PrintRange(QPrinter::PageRange)); - QCOMPARE(QPrinter::PrintRange(QPrinter::PageRange), obj1.printRange()); -} #define MYCOMPARE(a, b) QCOMPARE(QVariant((int)a), QVariant((int)b)) @@ -287,30 +217,6 @@ void tst_QPrinter::testPrintPreviewDialog() QCOMPARE(widget->currentPage(), 1); } -#ifdef Q_OS_WIN -// QPrinter::winPageSize(): Windows only. -void tst_QPrinter::testPageSize() -{ - QPrinter prn; - - prn.setPageSize(QPrinter::Letter); - MYCOMPARE(prn.pageSize(), QPrinter::Letter); - MYCOMPARE(prn.winPageSize(), DMPAPER_LETTER); - - prn.setPageSize(QPrinter::A4); - MYCOMPARE(prn.pageSize(), QPrinter::A4); - MYCOMPARE(prn.winPageSize(), DMPAPER_A4); - - prn.setWinPageSize(DMPAPER_LETTER); - MYCOMPARE(prn.winPageSize(), DMPAPER_LETTER); - MYCOMPARE(prn.pageSize(), QPrinter::Letter); - - prn.setWinPageSize(DMPAPER_A4); - MYCOMPARE(prn.winPageSize(), DMPAPER_A4); - MYCOMPARE(prn.pageSize(), QPrinter::A4); -} -#endif // Q_OS_WIN - void tst_QPrinter::testPageRectAndPaperRect_data() { QTest::addColumn("orientation"); @@ -558,17 +464,6 @@ void tst_QPrinter::testMulitpleSets() QVERIFY(qAbs(paperHeight - widthMMAfter) <= 2); } -void tst_QPrinter::changingOutputFormat() -{ -#if QT_VERSION < 0x050000 - QPrinter p; - p.setOutputFormat(QPrinter::PostScriptFormat); - p.setPageSize(QPrinter::A8); - p.setOutputFormat(QPrinter::PdfFormat); - QCOMPARE(p.pageSize(), QPrinter::A8); -#endif -} - void tst_QPrinter::outputFormatFromSuffix() { if (QPrinterInfo::availablePrinters().size() == 0) @@ -673,271 +568,6 @@ void tst_QPrinter::testPageMargins() QVERIFY(fabs(bottom*toMillimeters[unit] - nBottom*toMillimeters[QPrinter::Cicero]) < tolerance); } -void tst_QPrinter::valuePreservation() -{ - QPrinter::OutputFormat oldFormat = QPrinter::PdfFormat; - QPrinter::OutputFormat newFormat = QPrinter::NativeFormat; // TODO: Correct? - - // Some properties are documented to only be supported by NativeFormat in X11 environment - bool doX11Tests = QGuiApplication::platformName().compare(QLatin1String("xcb"), Qt::CaseInsensitive) == 0; - bool windowsPlatform = QGuiApplication::platformName().compare(QLatin1String("windows"), Qt::CaseInsensitive) == 0; - bool manualSourceSupported = true; - -#ifdef Q_OS_WIN - // QPrinter::supportedPaperSources() is only available on Windows, so just assuming manual is supported on others. - QPrinter printer; - printer.setOutputFormat(newFormat); - QList sources = printer.supportedPaperSources(); - if (!sources.contains(QPrinter::Manual)) { - manualSourceSupported = false; - qWarning() << "Manual paper source not supported by native printer, skipping related test."; - } -#endif // Q_OS_WIN - - // Querying PPK_CollateCopies is hardcoded to return false with Windows native print engine, - // so skip testing that in Windows. - if (!windowsPlatform) { - QPrinter printer; - printer.setOutputFormat(oldFormat); - bool status = printer.collateCopies(); - printer.setOutputFormat(newFormat); - printer.setOutputFormat(oldFormat); - QCOMPARE(printer.collateCopies(), status); - - printer.setCollateCopies(!status); - printer.setOutputFormat(newFormat); - QCOMPARE(printer.collateCopies(), !status); - printer.setOutputFormat(oldFormat); - QCOMPARE(printer.collateCopies(), !status); - } - { - QPrinter printer; - printer.setOutputFormat(oldFormat); - QPrinter::ColorMode status = printer.colorMode(); - printer.setOutputFormat(newFormat); - printer.setOutputFormat(oldFormat); - QCOMPARE(printer.colorMode(), status); - - printer.setColorMode(QPrinter::ColorMode(!status)); - printer.setOutputFormat(newFormat); - QCOMPARE(printer.colorMode(), QPrinter::ColorMode(!status)); - printer.setOutputFormat(oldFormat); - QCOMPARE(printer.colorMode(), QPrinter::ColorMode(!status)); - } - if (doX11Tests) { - QPrinter printer; - printer.setOutputFormat(oldFormat); - QString status = printer.creator(); - printer.setOutputFormat(newFormat); - printer.setOutputFormat(oldFormat); - QCOMPARE(printer.creator(), status); - - status = QString::fromLatin1("Mr. Test"); - printer.setCreator(status); - printer.setOutputFormat(newFormat); - QCOMPARE(printer.creator(), status); - printer.setOutputFormat(oldFormat); - QCOMPARE(printer.creator(), status); - } - { - QPrinter printer; - printer.setOutputFormat(oldFormat); - QString status = printer.docName(); - printer.setOutputFormat(newFormat); - printer.setOutputFormat(oldFormat); - QCOMPARE(printer.docName(), status); - - status = QString::fromLatin1("Test document"); - printer.setDocName(status); - printer.setOutputFormat(newFormat); - QCOMPARE(printer.docName(), status); - printer.setOutputFormat(oldFormat); - QCOMPARE(printer.docName(), status); - } - if (doX11Tests) { - QPrinter printer; - printer.setOutputFormat(oldFormat); - bool status = printer.doubleSidedPrinting(); - printer.setOutputFormat(newFormat); - printer.setOutputFormat(oldFormat); - QCOMPARE(printer.doubleSidedPrinting(), status); - - printer.setDoubleSidedPrinting(!status); - printer.setOutputFormat(newFormat); - QCOMPARE(printer.doubleSidedPrinting(), !status); - printer.setOutputFormat(oldFormat); - QCOMPARE(printer.doubleSidedPrinting(), !status); - } - if (doX11Tests) { - QPrinter printer; - printer.setOutputFormat(oldFormat); - bool status = printer.fontEmbeddingEnabled(); - printer.setOutputFormat(newFormat); - printer.setOutputFormat(oldFormat); - QCOMPARE(printer.fontEmbeddingEnabled(), status); - - printer.setFontEmbeddingEnabled(!status); - printer.setOutputFormat(newFormat); - QCOMPARE(printer.fontEmbeddingEnabled(), !status); - printer.setOutputFormat(oldFormat); - QCOMPARE(printer.fontEmbeddingEnabled(), !status); - } - { - QPrinter printer; - printer.setOutputFormat(oldFormat); - bool status = printer.fullPage(); - printer.setOutputFormat(newFormat); - printer.setOutputFormat(oldFormat); - QCOMPARE(printer.fullPage(), status); - - printer.setFullPage(!status); - printer.setOutputFormat(newFormat); - QCOMPARE(printer.fullPage(), !status); - printer.setOutputFormat(oldFormat); - QCOMPARE(printer.fullPage(), !status); - } - { - QPrinter printer; - printer.setOutputFormat(oldFormat); - QPrinter::Orientation status = printer.orientation(); - printer.setOutputFormat(newFormat); - printer.setOutputFormat(oldFormat); - QCOMPARE(printer.orientation(), status); - - printer.setOrientation(QPrinter::Orientation(!status)); - printer.setOutputFormat(newFormat); - QCOMPARE(printer.orientation(), QPrinter::Orientation(!status)); - printer.setOutputFormat(oldFormat); - QCOMPARE(printer.orientation(), QPrinter::Orientation(!status)); - } - { - QPrinter printer; - printer.setOutputFormat(oldFormat); - QString status = printer.outputFileName(); - printer.setOutputFormat(newFormat); - printer.setOutputFormat(oldFormat); - QCOMPARE(printer.outputFileName(), status); - - status = QString::fromLatin1("Test file"); - printer.setOutputFileName(status); - printer.setOutputFormat(newFormat); - QCOMPARE(printer.outputFileName(), status); - printer.setOutputFormat(oldFormat); - QCOMPARE(printer.outputFileName(), status); - } - if (doX11Tests) { - QPrinter printer; - printer.setOutputFormat(oldFormat); - QPrinter::PageOrder status = printer.pageOrder(); - printer.setOutputFormat(newFormat); - printer.setOutputFormat(oldFormat); - QCOMPARE(printer.pageOrder(), status); - - printer.setPageOrder(QPrinter::PageOrder(!status)); - printer.setOutputFormat(newFormat); - QCOMPARE(printer.pageOrder(), QPrinter::PageOrder(!status)); - printer.setOutputFormat(oldFormat); - QCOMPARE(printer.pageOrder(), QPrinter::PageOrder(!status)); - } - { - QPrinter printer; - printer.setOutputFormat(oldFormat); - QPrinter::PageSize status = printer.pageSize(); - printer.setOutputFormat(newFormat); - printer.setOutputFormat(oldFormat); - QCOMPARE(printer.pageSize(), status); - - printer.setPageSize(QPrinter::B5); - printer.setOutputFormat(newFormat); - QCOMPARE(printer.pageSize(), QPrinter::B5); - printer.setOutputFormat(oldFormat); - QCOMPARE(printer.pageSize(), QPrinter::B5); - } - if (manualSourceSupported) { - QPrinter printer; - printer.setOutputFormat(oldFormat); - QPrinter::PaperSource status = printer.paperSource(); - printer.setOutputFormat(newFormat); - printer.setOutputFormat(oldFormat); - QCOMPARE(printer.paperSource(), status); - - printer.setPaperSource(QPrinter::Manual); - printer.setOutputFormat(newFormat); - QCOMPARE(printer.paperSource(), QPrinter::Manual); - printer.setOutputFormat(oldFormat); - QCOMPARE(printer.paperSource(), QPrinter::Manual); - } - if (doX11Tests) { - QPrinter printer; - printer.setOutputFormat(oldFormat); - QString status = printer.printProgram(); - printer.setOutputFormat(newFormat); - printer.setOutputFormat(oldFormat); - QCOMPARE(printer.printProgram(), status); - - status = QString::fromLatin1("/usr/local/bin/lpr"); - printer.setPrintProgram(status); - printer.setOutputFormat(newFormat); - QCOMPARE(printer.printProgram(), status); - printer.setOutputFormat(oldFormat); - QCOMPARE(printer.printProgram(), status); - } - { - QPrinter printer; - printer.setOutputFormat(oldFormat); - QPrinter::PrintRange status = printer.printRange(); - printer.setOutputFormat(newFormat); - printer.setOutputFormat(oldFormat); - QCOMPARE(printer.printRange(), status); - - printer.setPrintRange(QPrinter::PrintRange(!status)); - printer.setOutputFormat(newFormat); - QCOMPARE(printer.printRange(), QPrinter::PrintRange(!status)); - printer.setOutputFormat(oldFormat); - QCOMPARE(printer.printRange(), QPrinter::PrintRange(!status)); - } - { - QPrinter printer; - printer.setOutputFormat(oldFormat); - QString status = printer.printerName(); - printer.setOutputFormat(newFormat); - printer.setOutputFormat(oldFormat); - QCOMPARE(printer.printerName(), status); - } - // QPrinter::printerSelectionOption is explicitly documented not to be available on Windows. -#ifndef Q_OS_WIN - { - QPrinter printer; - printer.setOutputFormat(oldFormat); - QString status = printer.printerSelectionOption(); - printer.setOutputFormat(newFormat); - printer.setOutputFormat(oldFormat); - QCOMPARE(printer.printerSelectionOption(), status); - - status = QString::fromLatin1("Optional option"); - printer.setPrinterSelectionOption(status); - printer.setOutputFormat(newFormat); - QCOMPARE(printer.printerSelectionOption(), status); - printer.setOutputFormat(oldFormat); - QCOMPARE(printer.printerSelectionOption(), status); - } -#endif // Q_OS_WIN - { - QPrinter printer; - printer.setOutputFormat(oldFormat); - int status = printer.resolution(); - printer.setOutputFormat(newFormat); - printer.setOutputFormat(oldFormat); - QCOMPARE(printer.resolution(), status); - - printer.setResolution(status-150); - printer.setOutputFormat(newFormat); - QCOMPARE(printer.resolution(), status-150); - printer.setOutputFormat(oldFormat); - QCOMPARE(printer.resolution(), status-150); - } -} - void tst_QPrinter::errorReporting() { QPrinter p; @@ -1057,13 +687,6 @@ void tst_QPrinter::printDialogCompleter() } #endif -void tst_QPrinter::testCopyCount() -{ - QPrinter p; - p.setCopyCount(15); - QCOMPARE(p.copyCount(), 15); -} - static void printPage(QPainter *painter) { painter->setPen(QPen(Qt::black, 4)); @@ -1255,6 +878,985 @@ void tst_QPrinter::customPaperNameSettingByName() } } +// Test QPrintEngine keys and their QPrinter setters/getters + +void tst_QPrinter::testMultipleKeys() +{ + // Tests multiple keys preservation, note are only ones that are consistent across all engines + + QPrinter native; + if (native.outputFormat() == QPrinter::NativeFormat) { + // Check default values + QCOMPARE(native.fullPage(), false); + QCOMPARE(native.orientation(), QPrinter::Portrait); + QCOMPARE(native.copyCount(), 1); + QCOMPARE(native.collateCopies(), false); + QCOMPARE(native.printRange(), QPrinter::AllPages); + + // Change values + native.setFullPage(true); + native.setOrientation(QPrinter::Landscape); + native.setCopyCount(9); + native.setCollateCopies(true); + native.setPrintRange(QPrinter::CurrentPage); + + // Check changed values + QCOMPARE(native.fullPage(), true); + QCOMPARE(native.orientation(), QPrinter::Landscape); + QCOMPARE(native.copyCount(), 9); + QCOMPARE(native.collateCopies(), true); + QCOMPARE(native.printRange(), QPrinter::CurrentPage); + + // Test value preservation + native.setOutputFormat(QPrinter::PdfFormat); + QCOMPARE(native.fullPage(), true); + QCOMPARE(native.orientation(), QPrinter::Landscape); + QCOMPARE(native.copyCount(), 9); + QCOMPARE(native.collateCopies(), true); + QCOMPARE(native.printRange(), QPrinter::CurrentPage); + + // Change values + native.setFullPage(false); + native.setOrientation(QPrinter::Portrait); + native.setCopyCount(5); + native.setCollateCopies(false); + native.setPrintRange(QPrinter::PageRange); + + // Check changed values + QCOMPARE(native.fullPage(), false); + QCOMPARE(native.orientation(), QPrinter::Portrait); + QCOMPARE(native.copyCount(), 5); + QCOMPARE(native.collateCopies(), false); + QCOMPARE(native.printRange(), QPrinter::PageRange); + } else { + QSKIP("No printers installed, cannot test NativeFormat, please install printers to test"); + } +} + +void tst_QPrinter::collateCopies() +{ + // collateCopies() / setCollateCopies() / PPK_ColorMode + // PdfFormat: Supported, default false + // NativeFormat, Cups: Supported, default false + // NativeFormat, Win: Part Supported if valid DevMode, can set but always returns false + // NativeFormat, Mac: Unsupported, always false + + QPrinter pdf; + pdf.setOutputFormat(QPrinter::PdfFormat); + QCOMPARE(pdf.collateCopies(), false); + pdf.setCollateCopies(true); + QCOMPARE(pdf.collateCopies(), true); + + QPrinter native; + if (native.outputFormat() == QPrinter::NativeFormat) { + // Test default + QCOMPARE(native.collateCopies(), false); + + // Test set/get + bool expected = true; + native.setCollateCopies(expected); +#if defined Q_OS_MAC || defined Q_OS_WIN + expected = false; +#endif // Q_OS_MAC + QCOMPARE(native.collateCopies(), expected); + + // Test value preservation + native.setOutputFormat(QPrinter::PdfFormat); + QCOMPARE(native.collateCopies(), expected); + native.setOutputFormat(QPrinter::NativeFormat); + QCOMPARE(native.collateCopies(), expected); + } else { + QSKIP("No printers installed, cannot test NativeFormat, please install printers to test"); + } +} + +void tst_QPrinter::colorMode() +{ + // colorMode() / setColorMode() / PPK_ColorMode + // PdfFormat: Supported, default QPrinter::Color + // NativeFormat, Cups: Supported, default QPrinter::Color + // NativeFormat, Win: Supported if valid DevMode, otherwise QPrinter::Color + // NativeFormat, Mac: Unsupported, always QPrinter::Color + + QPrinter pdf; + pdf.setOutputFormat(QPrinter::PdfFormat); + QCOMPARE(pdf.colorMode(), QPrinter::Color); + pdf.setColorMode(QPrinter::GrayScale); + QCOMPARE(pdf.colorMode(), QPrinter::GrayScale); + + QPrinter native; + if (native.outputFormat() == QPrinter::NativeFormat) { + // Test default + // TODO Printer specific, need QPrinterInfo::colorMode() + //QCOMPARE(native.colorMode(), QPrinter::Color); + + // Test set/get + QPrinter::ColorMode expected = QPrinter::GrayScale; + native.setColorMode(expected); +#ifdef Q_OS_MAC + expected = QPrinter::Color; +#endif // Q_OS_MAC + QCOMPARE(native.colorMode(), expected); + + // Test value preservation + native.setOutputFormat(QPrinter::PdfFormat); + QCOMPARE(native.colorMode(), expected); + native.setOutputFormat(QPrinter::NativeFormat); + QCOMPARE(native.colorMode(), expected); + } else { + QSKIP("No printers installed, cannot test NativeFormat, please install printers to test"); + } +} + +void tst_QPrinter::copyCount() +{ + // copyCount() / setCopyCount() / PPK_CopyCount + // numCopies() / setNumCopies() / PPK_NumberOfCopies + // actualNumCopies() / supportsMultipleCopies() + // PdfFormat: Supported, multiple copies unsupported, default 1 + // NativeFormat, Cups: Supported, multiple copies supported, default 1 + // NativeFormat, Win: Supported, multiple copies supported, default 1 + // NativeFormat, Mac: Supported, multiple copies supported, default 1 + + QPrinter pdf; + pdf.setOutputFormat(QPrinter::PdfFormat); + QCOMPARE(pdf.supportsMultipleCopies(), false); + QCOMPARE(pdf.copyCount(), 1); + QCOMPARE(pdf.numCopies(), 1); + QCOMPARE(pdf.actualNumCopies(), 1); + pdf.setCopyCount(9); + QCOMPARE(pdf.copyCount(), 9); + QCOMPARE(pdf.numCopies(), 9); + QCOMPARE(pdf.actualNumCopies(), 9); + pdf.setNumCopies(7); + QCOMPARE(pdf.copyCount(), 7); + QCOMPARE(pdf.numCopies(), 7); + QCOMPARE(pdf.actualNumCopies(), 7); + + QPrinter native; + if (native.outputFormat() == QPrinter::NativeFormat) { + // Test default + QCOMPARE(native.supportsMultipleCopies(), true); + QCOMPARE(native.copyCount(), 1); + QCOMPARE(native.numCopies(), 1); + QCOMPARE(native.actualNumCopies(), 1); + + // Test set/get + native.setCopyCount(9); + QCOMPARE(native.copyCount(), 9); + QCOMPARE(native.numCopies(), 1); + QCOMPARE(native.actualNumCopies(), 9); + native.setNumCopies(7); + QCOMPARE(native.copyCount(), 7); + QCOMPARE(native.numCopies(), 1); + QCOMPARE(native.actualNumCopies(), 7); + + // Test value preservation + native.setOutputFormat(QPrinter::PdfFormat); + QCOMPARE(native.copyCount(), 7); + QCOMPARE(native.numCopies(), 7); + QCOMPARE(native.actualNumCopies(), 7); + native.setOutputFormat(QPrinter::NativeFormat); + QCOMPARE(native.copyCount(), 7); + QCOMPARE(native.numCopies(), 1); + QCOMPARE(native.actualNumCopies(), 7); + } else { + QSKIP("No printers installed, cannot test NativeFormat, please install printers to test"); + } +} + +void tst_QPrinter::creator() +{ + // creator() / setCreator() / PPK_Creator + // PdfFormat: Supported, default QString() + // NativeFormat, Cups: Supported, default QString() + // NativeFormat, Win: Unsupported, always QString() + // NativeFormat, Mac: Unsupported, always QString() + + QPrinter pdf; + pdf.setOutputFormat(QPrinter::PdfFormat); + QCOMPARE(pdf.creator(), QString()); + pdf.setCreator(QStringLiteral("Test Creator")); + QCOMPARE(pdf.creator(), QStringLiteral("Test Creator")); + + QPrinter native; + if (native.outputFormat() == QPrinter::NativeFormat) { + // Test default + QCOMPARE(native.creator(), QString()); + + // Test set/get + QString expected = QStringLiteral("Test Creator"); + native.setCreator(expected); +#if defined Q_OS_MAC || defined Q_OS_WIN + expected.clear(); +#endif // Q_OS_MAC || Q_OS_WIN + QCOMPARE(native.creator(), expected); + + // Test value preservation + native.setOutputFormat(QPrinter::PdfFormat); + QCOMPARE(native.creator(), expected); + native.setOutputFormat(QPrinter::NativeFormat); + QCOMPARE(native.creator(), expected); + } else { + QSKIP("No printers installed, cannot test NativeFormat, please install printers to test"); + } +} + +void tst_QPrinter::docName() +{ + // docName() / setDocName() / PPK_DocumentName + // PdfFormat: Supported, default QString() + // NativeFormat, Cups: Supported, default QString() + // NativeFormat, Win: Supported, default "document1" + // NativeFormat, Mac: Unsupported, always QString() + + QPrinter pdf; + pdf.setOutputFormat(QPrinter::PdfFormat); + QCOMPARE(pdf.docName(), QString()); + pdf.setDocName(QStringLiteral("Test Name")); + QCOMPARE(pdf.docName(), QStringLiteral("Test Name")); + + QPrinter native; + if (native.outputFormat() == QPrinter::NativeFormat) { + // Test default +#ifdef Q_OS_WIN + QCOMPARE(native.docName(), QString("document1")); +#else + QCOMPARE(native.docName(), QString()); +#endif // Q_OS_WIN + + // Test set/get + QString expected = QStringLiteral("Test Name"); + native.setDocName(expected); +#ifdef Q_OS_MAC + expected.clear(); +#endif // Q_OS_MAC + QCOMPARE(native.docName(), expected); + + // Test value preservation + native.setOutputFormat(QPrinter::PdfFormat); + QCOMPARE(native.docName(), expected); + native.setOutputFormat(QPrinter::NativeFormat); + QCOMPARE(native.docName(), expected); + } else { + QSKIP("No printers installed, cannot test NativeFormat, please install printers to test"); + } +} + +void tst_QPrinter::duplex() +{ + // duplex()) / setDuplex() / PPK_Duplex + // PdfFormat: Supported, default QPrinter::DuplexNone + // NativeFormat, Cups: Supported, default QPrinter::DuplexNone + // NativeFormat, Win: Unsupported, always QPrinter::DuplexNone + // NativeFormat, Mac: Unsupported, always QPrinter::DuplexNone + + QPrinter pdf; + pdf.setOutputFormat(QPrinter::PdfFormat); + QCOMPARE(pdf.duplex(), QPrinter::DuplexNone); + pdf.setDuplex(QPrinter::DuplexAuto); + QCOMPARE(pdf.duplex(), QPrinter::DuplexAuto); + + QPrinter native; + if (native.outputFormat() == QPrinter::NativeFormat) { + // Test default + // TODO Printer specific, need QPrinterInfo::duplex() + //QCOMPARE(native.duplex(), QPrinter::DuplexNone); + + // Test set/get + QPrinter::DuplexMode expected = QPrinter::DuplexAuto; + native.setDuplex(expected); +#if defined Q_OS_MAC || defined Q_OS_WIN + expected = QPrinter::DuplexNone; +#endif // Q_OS_MAC || Q_OS_WIN + QCOMPARE(native.duplex(), expected); + + // Test value preservation + native.setOutputFormat(QPrinter::PdfFormat); + QCOMPARE(native.duplex(), expected); + native.setOutputFormat(QPrinter::NativeFormat); + QCOMPARE(native.duplex(), expected); + } else { + QSKIP("No printers installed, cannot test NativeFormat, please install printers to test"); + } +} + +void tst_QPrinter::doubleSidedPrinting() +{ + // PdfFormat: Supported, default false + // NativeFormat, Cups: Supported, default false + // NativeFormat, Win: Unsupported, always false + // NativeFormat, Mac: Unsupported, always false + + QPrinter pdf; + pdf.setOutputFormat(QPrinter::PdfFormat); + QCOMPARE(pdf.doubleSidedPrinting(), false); + pdf.setDoubleSidedPrinting(true); + QCOMPARE(pdf.doubleSidedPrinting(), true); + + QPrinter native; + if (native.outputFormat() == QPrinter::NativeFormat) { + // Test default + // TODO Printer specific, need QPrinterInfo::duplex() + //QCOMPARE(native.doubleSidedPrinting(), false); + + // Test set/get + bool expected = true; + native.setDoubleSidedPrinting(expected); +#if defined Q_OS_MAC || defined Q_OS_WIN + expected = false; +#endif // Q_OS_MAC || Q_OS_WIN + QCOMPARE(native.doubleSidedPrinting(), expected); + + // Test value preservation + native.setOutputFormat(QPrinter::PdfFormat); + QCOMPARE(native.doubleSidedPrinting(), expected); + native.setOutputFormat(QPrinter::NativeFormat); + QCOMPARE(native.doubleSidedPrinting(), expected); + } else { + QSKIP("No printers installed, cannot test NativeFormat, please install printers to test"); + } +} + +void tst_QPrinter::fontEmbedding() +{ + // fontEmbeddingEnabled() / setFontEmbeddingEnabled() / PPK_FontEmbedding + // PdfFormat: Supported, default true + // NativeFormat, Cups: Supported, default true + // NativeFormat, Win: Unsupported, always false + // NativeFormat, Mac: Unsupported, always false + + QPrinter pdf; + pdf.setOutputFormat(QPrinter::PdfFormat); + QCOMPARE(pdf.fontEmbeddingEnabled(), true); + pdf.setFontEmbeddingEnabled(false); + QCOMPARE(pdf.fontEmbeddingEnabled(), false); + + QPrinter native; + if (native.outputFormat() == QPrinter::NativeFormat) { + // Test default +#if defined Q_OS_MAC || defined Q_OS_WIN + QCOMPARE(native.fontEmbeddingEnabled(), false); +#else + QCOMPARE(native.fontEmbeddingEnabled(), true); +#endif // Q_OS_MAC || Q_OS_WIN + + // Test set/get + bool expected = true; + native.setFontEmbeddingEnabled(expected); +#if defined Q_OS_MAC || defined Q_OS_WIN + expected = false; +#endif // Q_OS_MAC || Q_OS_WIN + QCOMPARE(native.fontEmbeddingEnabled(), expected); + + // Test value preservation + native.setOutputFormat(QPrinter::PdfFormat); + QCOMPARE(native.fontEmbeddingEnabled(), expected); + native.setOutputFormat(QPrinter::NativeFormat); + QCOMPARE(native.fontEmbeddingEnabled(), expected); + } else { + QSKIP("No printers installed, cannot test NativeFormat, please install printers to test"); + } +} + +void tst_QPrinter::fullPage() +{ + // fullPage() / setFullPage() / PPK_FullPage + // PdfFormat: Supported, default false + // NativeFormat, Cups: Supported, default false + // NativeFormat, Win: Supported, default false + // NativeFormat, Mac: Supported, default false + + QPrinter pdf; + pdf.setOutputFormat(QPrinter::PdfFormat); + QCOMPARE(pdf.fullPage(), false); + pdf.setFullPage(true); + QCOMPARE(pdf.fullPage(), true); + + QPrinter native; + if (native.outputFormat() == QPrinter::NativeFormat) { + // Test default + QCOMPARE(native.fullPage(), false); + + // Test set/get + bool expected = true; + native.setFullPage(expected); + QCOMPARE(native.fullPage(), expected); + + // Test value preservation + native.setOutputFormat(QPrinter::PdfFormat); + QCOMPARE(native.fullPage(), expected); + native.setOutputFormat(QPrinter::NativeFormat); + QCOMPARE(native.fullPage(), expected); + } else { + QSKIP("No printers installed, cannot test NativeFormat, please install printers to test"); + } +} + +void tst_QPrinter::orientation() +{ + // orientation() / setOrientation() / PPK_Orientation + // PdfFormat: Supported, default QPrinter::Portrait + // NativeFormat, Cups: Supported, default QPrinter::Portrait + // NativeFormat, Win: Supported, default QPrinter::Portrait + // NativeFormat, Mac: Supported, default QPrinter::Portrait + + QPrinter pdf; + pdf.setOutputFormat(QPrinter::PdfFormat); + QCOMPARE(pdf.orientation(), QPrinter::Portrait); + pdf.setOrientation(QPrinter::Landscape); + QCOMPARE(pdf.orientation(), QPrinter::Landscape); + + QPrinter native; + if (native.outputFormat() == QPrinter::NativeFormat) { + // Test default + // TODO Printer specific, need QPrinterInfo::orientation() + //QCOMPARE(native.orientation(), QPrinter::Portrait); + + // Test set/get + QPrinter::Orientation expected = QPrinter::Landscape; + native.setOrientation(expected); + QCOMPARE(native.orientation(), expected); + + // Test value preservation + native.setOutputFormat(QPrinter::PdfFormat); + QCOMPARE(native.orientation(), expected); + native.setOutputFormat(QPrinter::NativeFormat); + QCOMPARE(native.orientation(), expected); + } else { + QSKIP("No printers installed, cannot test NativeFormat, please install printers to test"); + } +} + +void tst_QPrinter::outputFileName() +{ + // outputFileName() / setOutputFileName() / PPK_OutputFileName + // PdfFormat: Supported, default QString() + // NativeFormat, Cups: Supported, default QString() + // NativeFormat, Win: Supported, default QString() + // NativeFormat, Mac: Supported, default QString() + + QPrinter pdf; + pdf.setOutputFormat(QPrinter::PdfFormat); + QCOMPARE(pdf.outputFileName(), QString()); + pdf.setOutputFileName(QStringLiteral("Test File")); + QCOMPARE(pdf.outputFileName(), QString("Test File")); + + QPrinter native; + if (native.outputFormat() == QPrinter::NativeFormat) { + // Test default + QCOMPARE(native.outputFileName(), QString()); + + // Test set/get + QString expected = QStringLiteral("Test File"); + native.setOutputFileName(expected); + QCOMPARE(native.outputFileName(), expected); + + // Test value preservation + native.setOutputFormat(QPrinter::PdfFormat); + QCOMPARE(native.outputFileName(), expected); + native.setOutputFormat(QPrinter::NativeFormat); + QCOMPARE(native.outputFileName(), expected); + } else { + QSKIP("No printers installed, cannot test NativeFormat, please install printers to test"); + } +} + +void tst_QPrinter::pageOrder() +{ + // pageOrder() / setPageOrder() / PPK_PageOrder + // PdfFormat: Supported, default QPrinter::FirstPageFirst + // NativeFormat, Cups: Supported, default QPrinter::FirstPageFirst + // NativeFormat, Win: Unsupported, always QPrinter::FirstPageFirst + // NativeFormat, Mac: Unsupported, always QPrinter::FirstPageFirst + + QPrinter pdf; + pdf.setOutputFormat(QPrinter::PdfFormat); + QCOMPARE(pdf.pageOrder(), QPrinter::FirstPageFirst); + pdf.setPageOrder(QPrinter::LastPageFirst); + QCOMPARE(pdf.pageOrder(), QPrinter::LastPageFirst); + + QPrinter native; + if (native.outputFormat() == QPrinter::NativeFormat) { + // Test default + QCOMPARE(native.pageOrder(), QPrinter::FirstPageFirst); + + // Test set/get + QPrinter::PageOrder expected = QPrinter::LastPageFirst; + native.setPageOrder(expected); +#if defined Q_OS_MAC || defined Q_OS_WIN + expected = QPrinter::FirstPageFirst; +#endif // Q_OS_MAC || Q_OS_WIN + QCOMPARE(native.pageOrder(), expected); + + // Test value preservation + native.setOutputFormat(QPrinter::PdfFormat); + QCOMPARE(native.pageOrder(), expected); + native.setOutputFormat(QPrinter::NativeFormat); + QCOMPARE(native.pageOrder(), expected); + } else { + QSKIP("No printers installed, cannot test NativeFormat, please install printers to test"); + } +} + +void tst_QPrinter::pageSize() +{ + // Note PPK_PaperSize == PPK_PageSize + // pageSize() / setPageSize() / PPK_PageSize + // PdfFormat: Supported, defaults to QPrinter::A4 + // NativeFormat, Cups: Supported, defaults to printer default + // NativeFormat, Win: Supported, defaults to printer default + // NativeFormat, Mac: Supported, must be supported size, defaults to printer default + + QPrinter pdf; + pdf.setOutputFormat(QPrinter::PdfFormat); + QCOMPARE(pdf.pageSize(), QPrinter::A4); + pdf.setPageSize(QPrinter::A1); + QCOMPARE(pdf.pageSize(), QPrinter::A1); + + QPrinter native; + if (native.outputFormat() == QPrinter::NativeFormat) { + // Test default + // TODO Printer specific, need QPrinterInfo::paperSize() + //QCOMPARE(native.pageSize(), QPrinter::A4); + + // Test set/get + QPrinter::PaperSize expected = QPrinter::A4; + QPrinterInfo info = QPrinterInfo::printerInfo(native.printerName()); + foreach (QPrinter::PaperSize supported, info.supportedPaperSizes()) { + if (supported != QPrinter::Custom && supported != native.paperSize()) { + expected = supported; + break; + } + } + native.setPageSize(expected); + QCOMPARE(native.pageSize(), expected); + + // Test value preservation + native.setOutputFormat(QPrinter::PdfFormat); + QCOMPARE(native.pageSize(), expected); + native.setOutputFormat(QPrinter::NativeFormat); + QCOMPARE(native.pageSize(), expected); + } else { + QSKIP("No printers installed, cannot test NativeFormat, please install printers to test"); + } +} + +void tst_QPrinter::paperSize() +{ + // PPK_PaperSize == PPK_PageSize + // paperSize() / setPaperSize() / PPK_PaperSize + // pageSize() / setPageSize() / PPK_PageSize + // PdfFormat: Supported, defaults to QPrinter::A4 + // NativeFormat, Cups: Supported, defaults to printer default + // NativeFormat, Win: Supported, defaults to printer default + // NativeFormat, Mac: Supported, must be supported size, defaults to printer default + + QPrinter pdf; + pdf.setOutputFormat(QPrinter::PdfFormat); + QCOMPARE(pdf.paperSize(), QPrinter::A4); + pdf.setPaperSize(QPrinter::A1); + QCOMPARE(pdf.paperSize(), QPrinter::A1); + + QPrinter native; + if (native.outputFormat() == QPrinter::NativeFormat) { + // Test default + // TODO Printer specific, need QPrinterInfo::paperSize() + //QCOMPARE(native.paperSize(), QPrinter::A4); + + // Test set/get + QPrinter::PaperSize expected = QPrinter::A4; + QPrinterInfo info = QPrinterInfo::printerInfo(native.printerName()); + foreach (QPrinter::PaperSize supported, info.supportedPaperSizes()) { + if (supported != QPrinter::Custom && supported != native.paperSize()) { + expected = supported; + break; + } + } + native.setPaperSize(expected); + QCOMPARE(native.paperSize(), expected); + + // Test value preservation + native.setOutputFormat(QPrinter::PdfFormat); + QCOMPARE(native.paperSize(), expected); + native.setOutputFormat(QPrinter::NativeFormat); + QCOMPARE(native.paperSize(), expected); + } else { + QSKIP("No printers installed, cannot test NativeFormat, please install printers to test"); + } +} + +void tst_QPrinter::paperSource() +{ + // paperSource() / setPaperSource() / PPK_PaperSource + // PdfFormat: Supported, defaults to QPrinter::Auto + // NativeFormat, Cups: Supported, defaults to QPrinter::Auto + // NativeFormat, Win: Supported if valid DevMode and in supportedPaperSources(), otherwise QPrinter::Auto + // NativeFormat, Mac: Unsupported, always QPrinter::Auto + + QPrinter pdf; + pdf.setOutputFormat(QPrinter::PdfFormat); + QCOMPARE(pdf.paperSource(), QPrinter::Auto); + pdf.setPaperSource(QPrinter::Lower); + QCOMPARE(pdf.paperSource(), QPrinter::Lower); + + QPrinter native; + if (native.outputFormat() == QPrinter::NativeFormat) { + // Test default + // TODO Printer specific, need QPrinterInfo::paperSource() + //QCOMPARE(native.paperSource(), QPrinter::Auto); + + // Test set/get + QPrinter::PaperSource expected = QPrinter::Manual; +#ifdef Q_OS_WIN + expected = QPrinter::Auto; + foreach (QPrinter::PaperSource supported, native.supportedPaperSources()) { + if (supported != QPrinter::Auto) { + expected = supported; + break; + } + } +#endif // Q_OS_WIN + native.setPaperSource(expected); +#ifdef Q_OS_MAC + expected = QPrinter::Auto; +#endif // Q_OS_MAC + QCOMPARE(native.paperSource(), expected); + + // Test value preservation + native.setOutputFormat(QPrinter::PdfFormat); + QCOMPARE(native.paperSource(), expected); + native.setOutputFormat(QPrinter::NativeFormat); + QCOMPARE(native.paperSource(), expected); + } else { + QSKIP("No printers installed, cannot test NativeFormat, please install printers to test"); + } +} + +void tst_QPrinter::printProgram() +{ + // printProgram() / setPrintProgram() / PPK_PrintProgram + // PdfFormat: Supported, default QString() + // NativeFormat, Cups: Supported, default QString() + // NativeFormat, Win: Unsupported, always QString() + // NativeFormat, Mac: Unsupported, always QString() + + QPrinter pdf; + pdf.setOutputFormat(QPrinter::PdfFormat); + QCOMPARE(pdf.printProgram(), QString()); + pdf.setPrintProgram(QStringLiteral("/usr/bin/lpr")); + QCOMPARE(pdf.printProgram(), QStringLiteral("/usr/bin/lpr")); + + QPrinter native; + if (native.outputFormat() == QPrinter::NativeFormat) { + // Test default + QCOMPARE(native.printProgram(), QString()); + + // Test set/get + QString expected = QStringLiteral("/usr/bin/lpr"); + native.setPrintProgram(expected); +#if defined Q_OS_MAC || defined Q_OS_WIN + expected.clear(); +#endif // Q_OS_MAC || Q_OS_WIN + QCOMPARE(native.printProgram(), expected); + + // Test value preservation + native.setOutputFormat(QPrinter::PdfFormat); + QCOMPARE(native.printProgram(), expected); + native.setOutputFormat(QPrinter::NativeFormat); + QCOMPARE(native.printProgram(), expected); + } else { + QSKIP("No printers installed, cannot test NativeFormat, please install printers to test"); + } +} + +void tst_QPrinter::printRange() +{ + // printRange() / setPrintRange() / PPK_PrintRange + // PdfFormat: Supported, default QPrinter::AllPages + // NativeFormat, Cups: Supported, default QPrinter::AllPages + // NativeFormat, Win: Supported, default QPrinter::AllPages + // NativeFormat, Mac: Supported, default QPrinter::AllPages + + QPrinter pdf; + pdf.setOutputFormat(QPrinter::PdfFormat); + QCOMPARE(pdf.printRange(), QPrinter::AllPages); + pdf.setPrintRange(QPrinter::CurrentPage); + QCOMPARE(pdf.printRange(), QPrinter::CurrentPage); + + QPrinter native; + if (native.outputFormat() == QPrinter::NativeFormat) { + // Test default + QCOMPARE(native.printRange(), QPrinter::AllPages); + + // Test set/get + QPrinter::PrintRange expected = QPrinter::PageRange; + native.setPrintRange(expected); + QCOMPARE(native.printRange(), expected); + + // Test value preservation + native.setOutputFormat(QPrinter::PdfFormat); + QCOMPARE(native.printRange(), expected); + native.setOutputFormat(QPrinter::NativeFormat); + QCOMPARE(native.printRange(), expected); + } else { + QSKIP("No printers installed, cannot test NativeFormat, please install printers to test"); + } +} + +void tst_QPrinter::printerName() +{ + // printerName() / setPrinterName() / PPK_PrinterName + // PdfFormat: Supported, default QString + // NativeFormat, Cups: Supported, default printer + // NativeFormat, Win: Supported, default printer + // NativeFormat, Mac: Supported, default printer + + QPrinter pdf; + pdf.setOutputFormat(QPrinter::PdfFormat); + QCOMPARE(pdf.printerName(), QString()); + if (QPrinterInfo::availablePrinters().size() == 0) { + pdf.setPrinterName(QStringLiteral("Test Printer")); + QCOMPARE(pdf.printerName(), QString()); + QCOMPARE(pdf.outputFormat(), QPrinter::PdfFormat); + } else { + pdf.setPrinterName(QPrinterInfo::defaultPrinter().printerName()); + QCOMPARE(pdf.printerName(), QPrinterInfo::defaultPrinter().printerName()); + QCOMPARE(pdf.outputFormat(), QPrinter::NativeFormat); + } + + QPrinter native; + if (native.outputFormat() == QPrinter::NativeFormat) { + // Test default + QCOMPARE(native.printerName(), QPrinterInfo::defaultPrinter().printerName()); + + // Test set/get + QString expected = QPrinterInfo::defaultPrinter().printerName(); + foreach (const QPrinterInfo &available, QPrinterInfo::availablePrinters()) { + if (available.printerName() != expected) { + expected = available.printerName(); + break; + } + } + native.setPrinterName(expected); + QCOMPARE(native.printerName(), expected); + + // Test value preservation + native.setOutputFormat(QPrinter::PdfFormat); + QCOMPARE(native.printerName(), QString()); + native.setOutputFormat(QPrinter::NativeFormat); + QCOMPARE(native.printerName(), QPrinterInfo::defaultPrinter().printerName()); + } else { + QSKIP("No printers installed, cannot test NativeFormat, please install printers to test"); + } +} + +void tst_QPrinter::printerSelectionOption() +{ + // printerSelectionOption() / setPrinterSelectionOption() / PPK_SelectionOption + // PdfFormat: Supported + // NativeFormat, Cups: Supported + // NativeFormat, Win: Unsupported, ifdef'd out TODO remove ifdef, always QString() + // NativeFormat, Mac: Unsupported, always QString() + +#ifndef Q_OS_WIN + QPrinter pdf; + pdf.setOutputFormat(QPrinter::PdfFormat); + QCOMPARE(pdf.printerSelectionOption(), QString()); + pdf.setPrinterSelectionOption(QStringLiteral("Optional option")); + QCOMPARE(pdf.printerSelectionOption(), QString("Optional option")); + + QPrinter native; + if (native.outputFormat() == QPrinter::NativeFormat) { + // Test default + QCOMPARE(native.printerSelectionOption(), QString()); + + // Test set/get + QString expected = QStringLiteral("Optional option"); + native.setPrinterSelectionOption(expected); +#ifdef Q_OS_MAC + expected.clear(); +#endif // Q_OS_MAC + QCOMPARE(native.printerSelectionOption(), expected); + + // Test value preservation + native.setOutputFormat(QPrinter::PdfFormat); + QCOMPARE(native.printerSelectionOption(), expected); + native.setOutputFormat(QPrinter::NativeFormat); + QCOMPARE(native.printerSelectionOption(), expected); + } else { + QSKIP("No printers installed, cannot test NativeFormat, please install printers to test"); + } +#endif // Q_OS_WIN +} + +void tst_QPrinter::resolution() +{ + // resolution() / setResolution() / PPK_Resolution + // PdfFormat: Supported, can be any number, but only 72 returned by supportedResolutions() + // NativeFormat, Cups: Supported, can be any number, but only 72 returned by supportedResolutions() + // NativeFormat, Win: Supported, can be any number, but supportedResolutions() returns valid list + // NativeFormat, Mac: Supported, but can only be value returned by supportedResolutions() + + QPrinter pdfScreen(QPrinter::ScreenResolution); + pdfScreen.setOutputFormat(QPrinter::PdfFormat); + QCOMPARE(pdfScreen.resolution(), 96); + pdfScreen.setResolution(333); + QCOMPARE(pdfScreen.resolution(), 333); + + QPrinter pdfPrinter(QPrinter::PrinterResolution); + pdfPrinter.setOutputFormat(QPrinter::PdfFormat); + QCOMPARE(pdfPrinter.resolution(), 72); + pdfPrinter.setResolution(333); + QCOMPARE(pdfPrinter.resolution(), 333); + + QPrinter pdfHigh(QPrinter::HighResolution); + pdfHigh.setOutputFormat(QPrinter::PdfFormat); + QCOMPARE(pdfHigh.resolution(), 1200); + pdfHigh.setResolution(333); + QCOMPARE(pdfHigh.resolution(), 333); + + QPrinter native(QPrinter::HighResolution); + if (native.outputFormat() == QPrinter::NativeFormat) { + // Test default + // TODO Printer specific, need QPrinterInfo::resolution() + //QCOMPARE(native.resolution(), 300); + + // Test set/get + int expected = 333; +#ifdef Q_OS_MAC + expected = native.resolution(); + foreach (int supported, native.supportedResolutions()) { + if (supported != expected) { + expected = supported; + break; + } + } +#endif // Q_OS_MAC + native.setResolution(expected); + QCOMPARE(native.resolution(), expected); + + // Test value preservation + native.setOutputFormat(QPrinter::PdfFormat); + QCOMPARE(native.resolution(), expected); + native.setOutputFormat(QPrinter::NativeFormat); + QCOMPARE(native.resolution(), expected); + } else { + QSKIP("No printers installed, cannot test NativeFormat, please install printers to test"); + } +} + +void tst_QPrinter::supportedPaperSources() +{ + // supportedPaperSources() / PPK_PaperSources + // PdfFormat: ifdef'd out TODO remove ifdef + // NativeFormat, Cups: ifdef'd out TODO remove ifdef + // NativeFormat, Win: Supported, defaults to printer default + // NativeFormat, Mac: ifdef'd out TODO remove ifdef + +#ifdef Q_OS_WIN + QPrinter native; + if (native.outputFormat() == QPrinter::NativeFormat) { + native.supportedPaperSources(); + } else { + QSKIP("No printers installed, cannot test NativeFormat, please install printers to test"); + } +#endif // Q_OS_WIN +} + +void tst_QPrinter::supportedResolutions() +{ + // supportedResolutions() / PPK_SupportedResolutions + // PdfFormat: Supported, only returns 72 + // NativeFormat, Cups: Supported, only returns 72 + // NativeFormat, Win: Supported, defaults to printer list + // NativeFormat, Mac: Supported, defaults to printer list + + QList expected; + + QPrinter pdf; + pdf.setOutputFormat(QPrinter::PdfFormat); + expected << 72; + QCOMPARE(pdf.supportedResolutions(), expected); + + QPrinter native; + if (native.outputFormat() == QPrinter::NativeFormat) { + native.supportedResolutions(); + } else { + QSKIP("No printers installed, cannot test NativeFormat, please install printers to test"); + } +} + +void tst_QPrinter::windowsPageSize() +{ + // winPageSize() / setWinPageSize() / PPK_WindowsPageSize + // PdfFormat: ifdef'd out TODO remove ifdef + // NativeFormat, Cups: ifdef'd out TODO remove ifdef + // NativeFormat, Win: Supported, defaults to printer default + // NativeFormat, Mac: ifdef'd out TODO remove ifdef + +#ifdef Q_OS_WIN + QPrinter native; + if (native.outputFormat() == QPrinter::NativeFormat) { + // Test set/get + native.setPaperSize(QPrinter::A4); + QCOMPARE(native.pageSize(), QPrinter::A4); + QCOMPARE(native.winPageSize(), DMPAPER_A4); + + native.setPaperSize(QPrinter::Letter); + QCOMPARE(native.pageSize(), QPrinter::Letter); + QCOMPARE(native.winPageSize(), DMPAPER_LETTER); + + native.setWinPageSize(DMPAPER_A4); + QCOMPARE(native.pageSize(), QPrinter::A4); + QCOMPARE(native.winPageSize(), DMPAPER_A4); + + native.setWinPageSize(DMPAPER_LETTER); + QCOMPARE(native.pageSize(), QPrinter::Letter); + QCOMPARE(native.winPageSize(), DMPAPER_LETTER); + + // Test value preservation + native.setOutputFormat(QPrinter::PdfFormat); + QCOMPARE(native.pageSize(), QPrinter::Letter); + QEXPECT_FAIL("", "Win paper size doesn't persist over format change", Continue); + QCOMPARE(native.winPageSize(), DMPAPER_LETTER); + native.setOutputFormat(QPrinter::NativeFormat); + QCOMPARE(native.pageSize(), QPrinter::Letter); + QCOMPARE(native.winPageSize(), DMPAPER_LETTER); + } else { + QSKIP("No printers installed, cannot test NativeFormat, please install printers to test"); + } +#endif // Q_OS_WIN +} + +// Test QPrinter setters/getters for non-QPrintEngine options + +void tst_QPrinter::outputFormat() +{ + QPrinter printer; + if (QPrinterInfo::availablePrinters().size() == 0) { + QCOMPARE(printer.outputFormat(), QPrinter::PdfFormat); + QCOMPARE(printer.printerName(), QString()); + } else { + QCOMPARE(printer.outputFormat(), QPrinter::NativeFormat); + QCOMPARE(printer.printerName(), QPrinterInfo::defaultPrinter().printerName()); + } + + printer.setOutputFormat(QPrinter::PdfFormat); + QCOMPARE(printer.outputFormat(), QPrinter::PdfFormat); + QCOMPARE(printer.printerName(), QString()); +} + +void tst_QPrinter::fromToPage() +{ + QPrinter printer; + QCOMPARE(printer.fromPage(), 0); + QCOMPARE(printer.toPage(), 0); + printer.setFromTo(3, 7); + QCOMPARE(printer.fromPage(), 3); + QCOMPARE(printer.toPage(), 7); +} + #endif // QT_NO_PRINTER QTEST_MAIN(tst_QPrinter) -- cgit v1.2.3 From 27473f19bb26b5b4434689c663d483e48b43fdef Mon Sep 17 00:00:00 2001 From: John Layt Date: Fri, 29 Nov 2013 15:54:06 +0100 Subject: QPrintEngine - Fix PPK_DocumentName Add support to the Mac print engine for set/get the Document Name using the Job Name setting. Our documentation states this is one use that the document name will be put to so is appropriate to be used. Change the Windows print engine to default to a blank Docuemnt Name consistent with the other print engines. If still blank when printing then use a default value. Task-number: QTBUG-27724 Task-number: QTBUG-22144 Change-Id: If590811b5720e6f759eabc290b578b94e221f9f4 Reviewed-by: Lars Knoll --- tests/auto/printsupport/kernel/qprinter/tst_qprinter.cpp | 11 ++--------- 1 file changed, 2 insertions(+), 9 deletions(-) (limited to 'tests') diff --git a/tests/auto/printsupport/kernel/qprinter/tst_qprinter.cpp b/tests/auto/printsupport/kernel/qprinter/tst_qprinter.cpp index 37aa7b2a16..322254602d 100644 --- a/tests/auto/printsupport/kernel/qprinter/tst_qprinter.cpp +++ b/tests/auto/printsupport/kernel/qprinter/tst_qprinter.cpp @@ -1107,8 +1107,8 @@ void tst_QPrinter::docName() // docName() / setDocName() / PPK_DocumentName // PdfFormat: Supported, default QString() // NativeFormat, Cups: Supported, default QString() - // NativeFormat, Win: Supported, default "document1" - // NativeFormat, Mac: Unsupported, always QString() + // NativeFormat, Win: Supported, default QString() + // NativeFormat, Mac: Supported, default QString() QPrinter pdf; pdf.setOutputFormat(QPrinter::PdfFormat); @@ -1119,18 +1119,11 @@ void tst_QPrinter::docName() QPrinter native; if (native.outputFormat() == QPrinter::NativeFormat) { // Test default -#ifdef Q_OS_WIN - QCOMPARE(native.docName(), QString("document1")); -#else QCOMPARE(native.docName(), QString()); -#endif // Q_OS_WIN // Test set/get QString expected = QStringLiteral("Test Name"); native.setDocName(expected); -#ifdef Q_OS_MAC - expected.clear(); -#endif // Q_OS_MAC QCOMPARE(native.docName(), expected); // Test value preservation -- cgit v1.2.3 From 0ee72b09fd99b756a85de78bafb03c7dee163ef5 Mon Sep 17 00:00:00 2001 From: John Layt Date: Fri, 29 Nov 2013 19:13:49 +0100 Subject: QPrintEngine - Fix PPK_CollateCopies Mac supports Collate Copies using native api, so add support. Note this is mostly only useful for setting the print dialog default, as Mac supports server-side multiple copies so the app will never need to collate the copies itself. Change PDF and Windows to default to collate true to match Mac as this is the behavior users expect. Task-number: QTBUG-27724 Task-number: QTBUG-35251 Task-number: QTBUG-22144 Change-Id: Ia43dbc260b3a71aa5b267cca54c168ffbea794fc Reviewed-by: Lars Knoll --- .../printsupport/kernel/qprinter/tst_qprinter.cpp | 31 ++++++++++------------ 1 file changed, 14 insertions(+), 17 deletions(-) (limited to 'tests') diff --git a/tests/auto/printsupport/kernel/qprinter/tst_qprinter.cpp b/tests/auto/printsupport/kernel/qprinter/tst_qprinter.cpp index 322254602d..054800d829 100644 --- a/tests/auto/printsupport/kernel/qprinter/tst_qprinter.cpp +++ b/tests/auto/printsupport/kernel/qprinter/tst_qprinter.cpp @@ -890,21 +890,21 @@ void tst_QPrinter::testMultipleKeys() QCOMPARE(native.fullPage(), false); QCOMPARE(native.orientation(), QPrinter::Portrait); QCOMPARE(native.copyCount(), 1); - QCOMPARE(native.collateCopies(), false); + QCOMPARE(native.collateCopies(), true); QCOMPARE(native.printRange(), QPrinter::AllPages); // Change values native.setFullPage(true); native.setOrientation(QPrinter::Landscape); native.setCopyCount(9); - native.setCollateCopies(true); + native.setCollateCopies(false); native.setPrintRange(QPrinter::CurrentPage); // Check changed values QCOMPARE(native.fullPage(), true); QCOMPARE(native.orientation(), QPrinter::Landscape); QCOMPARE(native.copyCount(), 9); - QCOMPARE(native.collateCopies(), true); + QCOMPARE(native.collateCopies(), false); QCOMPARE(native.printRange(), QPrinter::CurrentPage); // Test value preservation @@ -912,21 +912,21 @@ void tst_QPrinter::testMultipleKeys() QCOMPARE(native.fullPage(), true); QCOMPARE(native.orientation(), QPrinter::Landscape); QCOMPARE(native.copyCount(), 9); - QCOMPARE(native.collateCopies(), true); + QCOMPARE(native.collateCopies(), false); QCOMPARE(native.printRange(), QPrinter::CurrentPage); // Change values native.setFullPage(false); native.setOrientation(QPrinter::Portrait); native.setCopyCount(5); - native.setCollateCopies(false); + native.setCollateCopies(true); native.setPrintRange(QPrinter::PageRange); // Check changed values QCOMPARE(native.fullPage(), false); QCOMPARE(native.orientation(), QPrinter::Portrait); QCOMPARE(native.copyCount(), 5); - QCOMPARE(native.collateCopies(), false); + QCOMPARE(native.collateCopies(), true); QCOMPARE(native.printRange(), QPrinter::PageRange); } else { QSKIP("No printers installed, cannot test NativeFormat, please install printers to test"); @@ -936,28 +936,25 @@ void tst_QPrinter::testMultipleKeys() void tst_QPrinter::collateCopies() { // collateCopies() / setCollateCopies() / PPK_ColorMode - // PdfFormat: Supported, default false - // NativeFormat, Cups: Supported, default false - // NativeFormat, Win: Part Supported if valid DevMode, can set but always returns false - // NativeFormat, Mac: Unsupported, always false + // PdfFormat: Supported, default true + // NativeFormat, Cups: Supported, default true + // NativeFormat, Win: Supported, default true + // NativeFormat, Mac: Supported, default true QPrinter pdf; pdf.setOutputFormat(QPrinter::PdfFormat); - QCOMPARE(pdf.collateCopies(), false); - pdf.setCollateCopies(true); QCOMPARE(pdf.collateCopies(), true); + pdf.setCollateCopies(false); + QCOMPARE(pdf.collateCopies(), false); QPrinter native; if (native.outputFormat() == QPrinter::NativeFormat) { // Test default - QCOMPARE(native.collateCopies(), false); + QCOMPARE(native.collateCopies(), true); // Test set/get - bool expected = true; + bool expected = false; native.setCollateCopies(expected); -#if defined Q_OS_MAC || defined Q_OS_WIN - expected = false; -#endif // Q_OS_MAC QCOMPARE(native.collateCopies(), expected); // Test value preservation -- cgit v1.2.3 From 27c33a8f7a9469fd8b55de62b11e0b6b868636c5 Mon Sep 17 00:00:00 2001 From: John Layt Date: Fri, 17 Jan 2014 16:16:31 +0100 Subject: QPrintEngne - Fix PPK_Creator Add support to the Mac and Windows print engines to preserve the creator name when switching between native and pdf format. Change-Id: Ie036af3140f24d8e34aa886f091384f93aa0157b Reviewed-by: Lars Knoll --- tests/auto/printsupport/kernel/qprinter/tst_qprinter.cpp | 7 ++----- 1 file changed, 2 insertions(+), 5 deletions(-) (limited to 'tests') diff --git a/tests/auto/printsupport/kernel/qprinter/tst_qprinter.cpp b/tests/auto/printsupport/kernel/qprinter/tst_qprinter.cpp index 054800d829..d3ccb229fc 100644 --- a/tests/auto/printsupport/kernel/qprinter/tst_qprinter.cpp +++ b/tests/auto/printsupport/kernel/qprinter/tst_qprinter.cpp @@ -1067,8 +1067,8 @@ void tst_QPrinter::creator() // creator() / setCreator() / PPK_Creator // PdfFormat: Supported, default QString() // NativeFormat, Cups: Supported, default QString() - // NativeFormat, Win: Unsupported, always QString() - // NativeFormat, Mac: Unsupported, always QString() + // NativeFormat, Win: Supported, default QString() + // NativeFormat, Mac: Supported, default QString() QPrinter pdf; pdf.setOutputFormat(QPrinter::PdfFormat); @@ -1084,9 +1084,6 @@ void tst_QPrinter::creator() // Test set/get QString expected = QStringLiteral("Test Creator"); native.setCreator(expected); -#if defined Q_OS_MAC || defined Q_OS_WIN - expected.clear(); -#endif // Q_OS_MAC || Q_OS_WIN QCOMPARE(native.creator(), expected); // Test value preservation -- cgit v1.2.3 From 5af95d077bc7bcb1633d81686d324d167746040b Mon Sep 17 00:00:00 2001 From: John Layt Date: Fri, 17 Jan 2014 16:45:18 +0100 Subject: QPrinter - Fix Printer Selection option on Windows Make the printer selection option api public on Windows to be consistent with Mac, and with the print program api which is already public. Change-Id: I3da9684288348eaa43276ca8534a1d5809f7027b Reviewed-by: Lars Knoll --- tests/auto/printsupport/kernel/qprinter/tst_qprinter.cpp | 8 +++----- 1 file changed, 3 insertions(+), 5 deletions(-) (limited to 'tests') diff --git a/tests/auto/printsupport/kernel/qprinter/tst_qprinter.cpp b/tests/auto/printsupport/kernel/qprinter/tst_qprinter.cpp index d3ccb229fc..9571cb4110 100644 --- a/tests/auto/printsupport/kernel/qprinter/tst_qprinter.cpp +++ b/tests/auto/printsupport/kernel/qprinter/tst_qprinter.cpp @@ -1643,10 +1643,9 @@ void tst_QPrinter::printerSelectionOption() // printerSelectionOption() / setPrinterSelectionOption() / PPK_SelectionOption // PdfFormat: Supported // NativeFormat, Cups: Supported - // NativeFormat, Win: Unsupported, ifdef'd out TODO remove ifdef, always QString() + // NativeFormat, Win: Unsupported, always QString() // NativeFormat, Mac: Unsupported, always QString() -#ifndef Q_OS_WIN QPrinter pdf; pdf.setOutputFormat(QPrinter::PdfFormat); QCOMPARE(pdf.printerSelectionOption(), QString()); @@ -1661,9 +1660,9 @@ void tst_QPrinter::printerSelectionOption() // Test set/get QString expected = QStringLiteral("Optional option"); native.setPrinterSelectionOption(expected); -#ifdef Q_OS_MAC +#if defined Q_OS_MAC || defined Q_OS_WIN expected.clear(); -#endif // Q_OS_MAC +#endif // Q_OS_MAC || Q_OS_WIN QCOMPARE(native.printerSelectionOption(), expected); // Test value preservation @@ -1674,7 +1673,6 @@ void tst_QPrinter::printerSelectionOption() } else { QSKIP("No printers installed, cannot test NativeFormat, please install printers to test"); } -#endif // Q_OS_WIN } void tst_QPrinter::resolution() -- cgit v1.2.3 From 75aef26c278dc21bb3fc5bc7faa06e95666aeb76 Mon Sep 17 00:00:00 2001 From: John Layt Date: Mon, 20 Jan 2014 13:21:23 +0100 Subject: QPageSetupDialog - Add manual dialog test Add QPageSetupDialog to the manual dialog test. Change-Id: I5a7a4fedf1fe3ba074891eaed84efaa1c173e620 Reviewed-by: Lars Knoll --- tests/manual/dialogs/printdialogpanel.cpp | 12 ++++++++++++ tests/manual/dialogs/printdialogpanel.h | 1 + 2 files changed, 13 insertions(+) (limited to 'tests') diff --git a/tests/manual/dialogs/printdialogpanel.cpp b/tests/manual/dialogs/printdialogpanel.cpp index bede2b657a..256ffe09ee 100644 --- a/tests/manual/dialogs/printdialogpanel.cpp +++ b/tests/manual/dialogs/printdialogpanel.cpp @@ -47,6 +47,7 @@ #include #include #include +#include #include #include #include @@ -335,6 +336,9 @@ PrintDialogPanel::PrintDialogPanel(QWidget *parent) button = new QPushButton(tr("Preview..."), m_dialogsGroupBox); connect(button, SIGNAL(clicked()), this, SLOT(showPreviewDialog())); vBoxLayout->addWidget(button); + button = new QPushButton(tr("Page Setup..."), m_dialogsGroupBox); + connect(button, SIGNAL(clicked()), this, SLOT(showPageSetupDialog())); + vBoxLayout->addWidget(button); QGridLayout *gridLayout = new QGridLayout(this); gridLayout->addWidget(m_creationGroupBox, 0, 0); @@ -417,6 +421,14 @@ void PrintDialogPanel::showPreviewDialog() retrieveSettings(m_printer.data()); } +void PrintDialogPanel::showPageSetupDialog() +{ + applySettings(m_printer.data()); + QPageSetupDialog dialog(m_printer.data(), this); + if (dialog.exec() == QDialog::Accepted) + retrieveSettings(m_printer.data()); +} + #include "printdialogpanel.moc" #endif // !QT_NO_PRINTER diff --git a/tests/manual/dialogs/printdialogpanel.h b/tests/manual/dialogs/printdialogpanel.h index 4999504a3c..c869782769 100644 --- a/tests/manual/dialogs/printdialogpanel.h +++ b/tests/manual/dialogs/printdialogpanel.h @@ -69,6 +69,7 @@ private slots: void deletePrinter(); void showPrintDialog(); void showPreviewDialog(); + void showPageSetupDialog(); void enableCustomSizeControl(); private: -- cgit v1.2.3 From b1714aec5103ddd24e4f1cf14138746a3526ae95 Mon Sep 17 00:00:00 2001 From: Gabriel de Dietrich Date: Tue, 28 Jan 2014 15:19:01 +0100 Subject: Cocoa: Allow frameless NSWindow child QWindows MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Showing, moving and resizing Contrarily to what an NSWindow does to its NSViews, child NSWindows need to be explicitly shown and hidden, and clipped if the parent NSWindow changes geometry. Also, hiding an NSWindow will not hide its child windows. This needed to be managed manually, adding 2 additional states to QCocoaWindow to reflect whether a child window has been clipped out by any ancestor geometry change, or hidden by any ancestor being hid. Also, ordering out an NSWindow will remove it fromm its parent's child windows array, making necessary to maintain a parallel list of child windows in QCocoaWindow. Stack order Although child NSWindows can be ordered relatively to each other, they need to be added again to be moved lower in the window stack. This also means the windows above it need to be added on top. Key (focus) status One of the remaining issues, is to make sure the top level window keeps the "key status" while still forwarding key events to the child window. Keeping same event propagation This use case is best illustrated with undocking QDockWidgets (if these are child NSWindows). The main issue is to make sure the QDockArea will get the mouse events right after undocking a dock widget. We used a similar workaround as the "key status" problem, and manually forward the mouse events to the dock area's QWindow. Manual test, by Morten Johan Sørvig, included. Task-number: QTBUG-33082 Task-number: QTBUG-22815 Change-Id: I50e34936fb82bff013e99f4bcb3bd0db0704c6ae Reviewed-by: Morten Johan Sørvig --- tests/auto/other/qfocusevent/tst_qfocusevent.cpp | 3 - .../windowchildgeometry/controllerwidget.cpp | 536 +++++++++++++++++++++ .../manual/windowchildgeometry/controllerwidget.h | 158 ++++++ tests/manual/windowchildgeometry/main.cpp | 51 ++ .../windowchildgeometry/windowchildgeometry.pro | 10 + 5 files changed, 755 insertions(+), 3 deletions(-) create mode 100644 tests/manual/windowchildgeometry/controllerwidget.cpp create mode 100644 tests/manual/windowchildgeometry/controllerwidget.h create mode 100644 tests/manual/windowchildgeometry/main.cpp create mode 100644 tests/manual/windowchildgeometry/windowchildgeometry.pro (limited to 'tests') diff --git a/tests/auto/other/qfocusevent/tst_qfocusevent.cpp b/tests/auto/other/qfocusevent/tst_qfocusevent.cpp index df26407fe6..33deed9737 100644 --- a/tests/auto/other/qfocusevent/tst_qfocusevent.cpp +++ b/tests/auto/other/qfocusevent/tst_qfocusevent.cpp @@ -371,9 +371,6 @@ void tst_QFocusEvent::checkReason_ActiveWindow() #if defined(Q_OS_IRIX) QEXPECT_FAIL("", "IRIX requires explicit activateWindow(), so this test does not make any sense.", Abort); -#endif -#ifdef Q_OS_MAC - QEXPECT_FAIL("", "QTBUG-22815", Abort); #endif QTRY_VERIFY(childFocusWidgetOne->focusInEventRecieved); QVERIFY(childFocusWidgetOne->focusInEventGotFocus); diff --git a/tests/manual/windowchildgeometry/controllerwidget.cpp b/tests/manual/windowchildgeometry/controllerwidget.cpp new file mode 100644 index 0000000000..f1cdfbf855 --- /dev/null +++ b/tests/manual/windowchildgeometry/controllerwidget.cpp @@ -0,0 +1,536 @@ +/**************************************************************************** +** +** Copyright (C) 2014 Digia Plc and/or its subsidiary(-ies). +** Contact: http://www.qt-project.org/legal +** +** This file is part of the test suite of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:LGPL$ +** 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 Digia. For licensing terms and +** conditions see http://qt.digia.com/licensing. For further information +** use the contact form at http://qt.digia.com/contact-us. +** +** 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, Digia gives you certain additional +** rights. These rights are described in the Digia Qt LGPL Exception +** version 1.1, included in the file LGPL_EXCEPTION.txt in this package. +** +** GNU General Public License Usage +** Alternatively, this file may be used under the terms of the GNU +** General Public License version 3.0 as published by the Free Software +** Foundation and appearing in the file LICENSE.GPL included in the +** packaging of this file. Please review the following information to +** ensure the GNU General Public License version 3.0 requirements will be +** met: http://www.gnu.org/copyleft/gpl.html. +** +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +#include "controllerwidget.h" +#include + +#if QT_VERSION >= 0x050000 +# include +# include +# include +# include +# include +#else +# include +#endif + +#include + +CoordinateControl::CoordinateControl(const QString &sep) : m_x(new QSpinBox), m_y(new QSpinBox) +{ + m_x->setMinimum(-2000); + m_x->setMaximum(2000); + connect(m_x, SIGNAL(valueChanged(int)), this, SLOT(spinBoxChanged())); + m_y->setMinimum(-2000); + m_y->setMaximum(2000); + connect(m_y, SIGNAL(valueChanged(int)), this, SLOT(spinBoxChanged())); + QHBoxLayout *l = new QHBoxLayout(this); + l->setSpacing(2); + l->addWidget(m_x); + l->addWidget(new QLabel(sep)); + l->addWidget(m_y); +} + +void CoordinateControl::setCoordinates(int x, int y) +{ + m_x->blockSignals(true); + m_y->blockSignals(true); + m_x->setValue(x); + m_y->setValue(y); + m_x->blockSignals(false); + m_y->blockSignals(false); +} + +QPair CoordinateControl::coordinates() const +{ + return QPair(m_x->value(), m_y->value()); +} + +void CoordinateControl::spinBoxChanged() +{ + const int x = m_x->value(); + const int y = m_y->value(); + emit pointValueChanged(QPoint(x, y)); + emit sizeValueChanged(QSize(x, y)); +} + +RectControl::RectControl() + : m_point(new CoordinateControl(QLatin1String("+"))) + , m_size(new CoordinateControl(QLatin1String("x"))) +{ + QHBoxLayout *l = new QHBoxLayout(this); + l->setSpacing(0); + l->setMargin(ControlLayoutMargin); + connect(m_point, SIGNAL(pointValueChanged(QPoint)), this, SLOT(handleChanged())); + connect(m_point, SIGNAL(pointValueChanged(QPoint)), this, SIGNAL(positionChanged(QPoint))); + l->addWidget(m_point); + l->addSpacerItem(new QSpacerItem(0, 0, QSizePolicy::MinimumExpanding, QSizePolicy::Ignored)); + connect(m_size, SIGNAL(sizeValueChanged(QSize)), this, SLOT(handleChanged())); + connect(m_size, SIGNAL(sizeValueChanged(QSize)), this, SIGNAL(sizeChanged(QSize))); + l->addWidget(m_size); +} + +void RectControl::setRectValue(const QRect &r) +{ + m_point->setPointValue(r.topLeft()); + m_size->setSizeValue(r.size()); +} + +QRect RectControl::rectValue() const +{ + return QRect(m_point->pointValue(), m_size->sizeValue()); +} + +void RectControl::handleChanged() +{ + emit changed(rectValue()); +} + +BaseWindowControl::BaseWindowControl(QObject *w) + : m_layout(new QGridLayout(this)) + , m_object(w) + , m_geometry(new RectControl) + , m_framePosition(new CoordinateControl(QLatin1String("x"))) + , m_moveEventLabel(new QLabel(tr("Move events"))) + , m_resizeEventLabel(new QLabel(tr("Resize events"))) + , m_mouseEventLabel(new QLabel(tr("Mouse events"))) + , m_moveCount(0) + , m_resizeCount(0) +{ + m_object->installEventFilter(this); + m_geometry->setTitle(tr("Geometry")); + int row = 0; + m_layout->addWidget(m_geometry, row, 0, 1, 2); + m_layout->setMargin(ControlLayoutMargin); + QGroupBox *frameGB = new QGroupBox(tr("Frame")); + QVBoxLayout *frameL = new QVBoxLayout(frameGB); + frameL->setSpacing(0); + frameL->setMargin(ControlLayoutMargin); + frameL->addWidget(m_framePosition); + m_layout->addWidget(frameGB, row, 2); + + QGroupBox *eventGroupBox = new QGroupBox(tr("Events")); + QVBoxLayout *l = new QVBoxLayout(eventGroupBox); + l->setSpacing(0); + l->setMargin(ControlLayoutMargin); + l->addWidget(m_moveEventLabel); + l->addWidget(m_resizeEventLabel); + l->addWidget(m_mouseEventLabel); + m_layout->addWidget(eventGroupBox, ++row, 2); + + connect(m_geometry, SIGNAL(positionChanged(QPoint)), this, SLOT(posChanged(QPoint))); + connect(m_geometry, SIGNAL(sizeChanged(QSize)), this, SLOT(sizeChanged(QSize))); + connect(m_framePosition, SIGNAL(pointValueChanged(QPoint)), this, SLOT(framePosChanged(QPoint))); +} + +bool BaseWindowControl::eventFilter(QObject *, QEvent *e) +{ + switch (e->type()) { + case QEvent::Resize: { + const QResizeEvent *re = static_cast(e); + m_resizeEventLabel->setText(tr("Resize %1x%2 (#%3)") + .arg(re->size().width()).arg(re->size().height()) + .arg(++m_resizeCount)); + refresh(); + } + break; + case QEvent::Move: { + const QMoveEvent *me = static_cast(e); + m_moveEventLabel->setText(tr("Move %1,%2 (#%3)") + .arg(me->pos().x()).arg(me->pos().y()) + .arg(++m_moveCount)); + refresh(); + } + break; + case QEvent::MouseMove: { + const QMouseEvent *me = static_cast(e); + const QPoint pos = me->pos(); + QPoint globalPos = objectMapToGlobal(m_object, pos); + m_mouseEventLabel->setText(tr("Mouse: %1,%2 Global: %3,%4 "). + arg(pos.x()).arg(pos.y()).arg(globalPos.x()).arg(globalPos.y())); + } + break; + case QEvent::WindowStateChange: + refresh(); + default: + break; + } + return false; +} + +void BaseWindowControl::posChanged(const QPoint &p) +{ + QRect geom = objectGeometry(m_object); + geom.moveTopLeft(p); + setObjectGeometry(m_object, geom); +} + +void BaseWindowControl::sizeChanged(const QSize &s) +{ + QRect geom = objectGeometry(m_object); + geom.setSize(s); + setObjectGeometry(m_object, geom); +} + +void BaseWindowControl::framePosChanged(const QPoint &p) +{ + setObjectFramePosition(m_object, p); +} + +void BaseWindowControl::refresh() +{ + m_geometry->setRectValue(objectGeometry(m_object)); + m_framePosition->setPointValue(objectFramePosition(m_object)); +} + +// A control for a QWidget +class WidgetWindowControl : public BaseWindowControl +{ + Q_OBJECT +public: + explicit WidgetWindowControl(QWidget *w); + + virtual void refresh(); + +private slots: + void statesChanged(); + +private: + virtual QRect objectGeometry(const QObject *o) const + { return static_cast(o)->geometry(); } + virtual void setObjectGeometry(QObject *o, const QRect &r) const + { static_cast(o)->setGeometry(r); } + virtual QPoint objectFramePosition(const QObject *o) const + { return static_cast(o)->pos(); } + virtual void setObjectFramePosition(QObject *o, const QPoint &p) const + { static_cast(o)->move(p); } + virtual QPoint objectMapToGlobal(const QObject *o, const QPoint &p) const + { return static_cast(o)->mapToGlobal(p); } + virtual Qt::WindowFlags objectWindowFlags(const QObject *o) const + { return static_cast(o)->windowFlags(); } + virtual void setObjectWindowFlags(QObject *o, Qt::WindowFlags f); + + WindowStatesControl *m_statesControl; +}; + +WidgetWindowControl::WidgetWindowControl(QWidget *w ) + : BaseWindowControl(w) + , m_statesControl(new WindowStatesControl(WindowStatesControl::WantVisibleCheckBox | WindowStatesControl::WantActiveCheckBox)) +{ + setTitle(w->windowTitle()); + m_layout->addWidget(m_statesControl, 2, 0); + connect(m_statesControl, SIGNAL(changed()), this, SLOT(statesChanged())); +} + +void WidgetWindowControl::setObjectWindowFlags(QObject *o, Qt::WindowFlags f) +{ + QWidget *w = static_cast(o); + const bool visible = w->isVisible(); + w->setWindowFlags(f); // hides. + if (visible) + w->show(); +} + +void WidgetWindowControl::refresh() +{ + const QWidget *w = static_cast(m_object); + m_statesControl->setVisibleValue(w->isVisible()); + m_statesControl->setStates(w->windowState()); + BaseWindowControl::refresh(); +} + +void WidgetWindowControl::statesChanged() +{ + QWidget *w = static_cast(m_object); + w->setVisible(m_statesControl->visibleValue()); + w->setWindowState(m_statesControl->states()); +} + +#if QT_VERSION >= 0x050000 + +// Test window drawing diagonal lines +class Window : public QWindow +{ +public: + explicit Window(QWindow *parent = 0) + : QWindow(parent) + , m_backingStore(new QBackingStore(this)) + , m_color(Qt::GlobalColor(qrand() % 18)) + { + setObjectName(QStringLiteral("window")); + setTitle(tr("TestWindow")); + setFlags(flags() | Qt::MacUseNSWindow); + } + +protected: + void mouseMoveEvent(QMouseEvent * ev); + void mousePressEvent(QMouseEvent * ev); + void mouseReleaseEvent(QMouseEvent * e); + void exposeEvent(QExposeEvent *) + { render(); } + +private: + QBackingStore *m_backingStore; + Qt::GlobalColor m_color; + QPoint m_mouseDownPosition; + void render(); +}; + +void Window::mouseMoveEvent(QMouseEvent * ev) +{ + if (m_mouseDownPosition.isNull()) + return; + + QPoint delta = ev->pos() - m_mouseDownPosition; + QPoint newPosition = position() + delta; + setPosition(newPosition); +// qDebug() << "diff" << delta << newPosition; +} + +void Window::mousePressEvent(QMouseEvent * ev) +{ + m_mouseDownPosition = ev->pos(); +} + +void Window::mouseReleaseEvent(QMouseEvent * e) +{ + m_mouseDownPosition = QPoint(); +} + +void Window::render() +{ + QRect rect(QPoint(), geometry().size()); + m_backingStore->resize(rect.size()); + m_backingStore->beginPaint(rect); + if (!rect.size().isEmpty()) { + QPaintDevice *device = m_backingStore->paintDevice(); + QPainter p(device); + p.fillRect(rect, m_color); + p.drawLine(0, 0, rect.width(), rect.height()); + p.drawLine(0, rect.height(), rect.width(), 0); + } + m_backingStore->endPaint(); + m_backingStore->flush(rect); +} + +// A control for a QWindow +class WindowControl : public BaseWindowControl +{ + Q_OBJECT +public: + explicit WindowControl(QWindow *w); + + virtual void refresh(); + +private slots: + void showWindow(); + void hideWindow(); + void raiseWindow(); + void lowerWindow(); + void toggleAttachWindow(); + void addChildWindow(); +private: + virtual QRect objectGeometry(const QObject *o) const + { return static_cast(o)->geometry(); } + virtual void setObjectGeometry(QObject *o, const QRect &r) const + { static_cast(o)->setGeometry(r); } + virtual QPoint objectFramePosition(const QObject *o) const + { return static_cast(o)->framePosition(); } + virtual void setObjectFramePosition(QObject *o, const QPoint &p) const + { static_cast(o)->setFramePosition(p); } + virtual QPoint objectMapToGlobal(const QObject *o, const QPoint &p) const + { return static_cast(o)->mapToGlobal(p); } + virtual void setObjectWindowFlags(QObject *o, Qt::WindowFlags f) + { static_cast(o)->setFlags(f); } + + WindowStateControl *m_stateControl; + QWindow *m_window; + QWindow *m_detachedParent; // set when this window is detached. This is the window we should re-attach to. +}; + +WindowControl::WindowControl(QWindow *w ) + : BaseWindowControl(w) + , m_stateControl(new WindowStateControl(WindowStateControl::WantVisibleCheckBox | WindowStateControl::WantMinimizeRadioButton)) + , m_window(w) + , m_detachedParent(0) +{ + setTitle(w->title()); + + QPushButton *button = new QPushButton("Show Window"); + connect(button, SIGNAL(clicked()), SLOT(showWindow())); + m_layout->addWidget(button, 1, 0); + + button = new QPushButton("hide Window"); + connect(button, SIGNAL(clicked()), SLOT(hideWindow())); + m_layout->addWidget(button, 1, 1); + + button = new QPushButton("Rase Window"); + connect(button, SIGNAL(clicked()), SLOT(raiseWindow())); + m_layout->addWidget(button, 2, 0); + + button = new QPushButton("Lower Window"); + connect(button, SIGNAL(clicked()), SLOT(lowerWindow())); + m_layout->addWidget(button, 2, 1); + + button = new QPushButton("Toggle attach"); + connect(button, SIGNAL(clicked()), SLOT(toggleAttachWindow())); + m_layout->addWidget(button, 3, 0); + + button = new QPushButton("Add Child Window"); + connect(button, SIGNAL(clicked()), SLOT(addChildWindow())); + m_layout->addWidget(button, 3, 1); +} + +void WindowControl::refresh() +{ + const QWindow *w = static_cast(m_object); + BaseWindowControl::refresh(); +} + +void WindowControl::showWindow() +{ + m_window->show(); +} + +void WindowControl::hideWindow() +{ + m_window->hide(); +} + +void WindowControl::raiseWindow() +{ + m_window->raise(); +} + +void WindowControl::lowerWindow() +{ + m_window->lower(); +} + +void WindowControl::toggleAttachWindow() +{ + if (m_detachedParent) { + m_window->hide(); + m_window->setParent(m_detachedParent); + m_window->show(); + m_detachedParent = 0; + } else { + m_detachedParent = m_window->parent(); + m_window->hide(); + m_window->setParent(0); + m_window->show(); + } +} + +void WindowControl::addChildWindow() +{ + qDebug() << "WindowControl::addChildWindow"; + Window *childWindow = new Window(m_window); + + QRect childGeometry(50, 50, 40, 40); + childWindow->setGeometry(childGeometry); + WindowControl *control = new WindowControl(childWindow); + control->show(); +} + +#endif + +ControllerWidget::ControllerWidget(QWidget *parent) + : QMainWindow(parent) + , m_testWindow(new Window) +{ + QMenu *fileMenu = menuBar()->addMenu(tr("File")); + QAction *exitAction = fileMenu->addAction(tr("Exit")); + exitAction->setShortcut(QKeySequence(Qt::CTRL | Qt::Key_Q)); + connect(exitAction, SIGNAL(triggered()), qApp, SLOT(closeAllWindows())); + + QString title = QLatin1String("Child Window Geometry test, (Qt "); + title += QLatin1String(QT_VERSION_STR); + title += QLatin1String(", "); + title += qApp->platformName(); + title += QLatin1Char(')'); + setWindowTitle(title); + + int x = 100; + int y = 100; + const QStringList args = QApplication::arguments(); + const int offsetArgIndex = args.indexOf(QLatin1String("-offset")); + if (offsetArgIndex >=0 && offsetArgIndex < args.size() - 1) { + y += args.at(offsetArgIndex + 1).toInt(); + } else { + if (QT_VERSION < 0x050000) + y += 400; + } + + move(x, y); + + x += 800; + + x += 300; + m_testWindow->setFlags(Qt::Window | Qt::WindowSystemMenuHint | Qt::WindowCloseButtonHint + | Qt::WindowMinimizeButtonHint | Qt::WindowMaximizeButtonHint + | Qt::WindowTitleHint | Qt::WindowFullscreenButtonHint); + m_testWindow->setFramePosition(QPoint(x, y)); + m_testWindow->resize(200, 200); + m_testWindow->setTitle(tr("TestWindow")); + + QWidget *central = new QWidget ; + QVBoxLayout *l = new QVBoxLayout(central); + + const QString labelText = tr( + "

This example lets you control the geometry" + " of QWindows and child QWindows"); + + l->addWidget(new QLabel(labelText)); + + WindowControl *windowControl = new WindowControl(m_testWindow.data()); + l->addWidget(windowControl); + + setCentralWidget(central); +} + +ControllerWidget::~ControllerWidget() +{ + + +} + +#include "controllerwidget.moc" diff --git a/tests/manual/windowchildgeometry/controllerwidget.h b/tests/manual/windowchildgeometry/controllerwidget.h new file mode 100644 index 0000000000..9774ca408c --- /dev/null +++ b/tests/manual/windowchildgeometry/controllerwidget.h @@ -0,0 +1,158 @@ +/**************************************************************************** +** +** Copyright (C) 2014 Digia Plc and/or its subsidiary(-ies). +** Contact: http://www.qt-project.org/legal +** +** This file is part of the test suite of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:LGPL$ +** 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 Digia. For licensing terms and +** conditions see http://qt.digia.com/licensing. For further information +** use the contact form at http://qt.digia.com/contact-us. +** +** 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, Digia gives you certain additional +** rights. These rights are described in the Digia Qt LGPL Exception +** version 1.1, included in the file LGPL_EXCEPTION.txt in this package. +** +** GNU General Public License Usage +** Alternatively, this file may be used under the terms of the GNU +** General Public License version 3.0 as published by the Free Software +** Foundation and appearing in the file LICENSE.GPL included in the +** packaging of this file. Please review the following information to +** ensure the GNU General Public License version 3.0 requirements will be +** met: http://www.gnu.org/copyleft/gpl.html. +** +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +#ifndef CONTROLLERWIDGET_H +#define CONTROLLERWIDGET_H + +#include +#include +#include + +QT_BEGIN_NAMESPACE +class QSpinBox; +class QLabel; +class QGridLayout; +QT_END_NAMESPACE + +class TypeControl; +class HintControl; + +// A control for editing points or sizes +class CoordinateControl : public QWidget +{ + Q_OBJECT + +public: + CoordinateControl(const QString &sep); + + void setPointValue(const QPoint &p) { setCoordinates(p.x(), p.y()); } + QPoint pointValue() const { const QPair t = coordinates(); return QPoint(t.first, t.second); } + + void setSizeValue(const QSize &s) { setCoordinates(s.width(), s.height()); } + QSize sizeValue() const { const QPair t = coordinates(); return QSize(t.first, t.second); } + +signals: + void pointValueChanged(const QPoint &p); + void sizeValueChanged(const QSize &s); + +private slots: + void spinBoxChanged(); + +private: + void setCoordinates(int x, int y); + QPair coordinates() const; + + QSpinBox *m_x; + QSpinBox *m_y; +}; + +// A control for editing QRect +class RectControl : public QGroupBox +{ + Q_OBJECT +public: + RectControl(); + void setRectValue(const QRect &r); + QRect rectValue() const; + +signals: + void changed(const QRect &r); + void sizeChanged(const QSize &s); + void positionChanged(const QPoint &s); + +private slots: + void handleChanged(); + +private: + CoordinateControl *m_point; + CoordinateControl *m_size; +}; + +// Base class for controlling the position of a Window (QWindow or QWidget) +class BaseWindowControl : public QGroupBox +{ + Q_OBJECT + +protected: + explicit BaseWindowControl(QObject *w); + +public: + virtual bool eventFilter(QObject *, QEvent *); + virtual void refresh(); + +private slots: + void posChanged(const QPoint &); + void sizeChanged(const QSize &); + void framePosChanged(const QPoint &); + +protected: + QGridLayout *m_layout; + QObject *m_object; + +private: + virtual QRect objectGeometry(const QObject *o) const = 0; + virtual void setObjectGeometry(QObject *o, const QRect &) const = 0; + + virtual QPoint objectFramePosition(const QObject *o) const = 0; + virtual void setObjectFramePosition(QObject *o, const QPoint &) const = 0; + + virtual QPoint objectMapToGlobal(const QObject *o, const QPoint &) const = 0; + + RectControl *m_geometry; + CoordinateControl *m_framePosition; + QLabel *m_moveEventLabel; + QLabel *m_resizeEventLabel; + QLabel *m_mouseEventLabel; + unsigned m_moveCount; + unsigned m_resizeCount; +}; + +class ControllerWidget : public QMainWindow +{ + Q_OBJECT +public: + explicit ControllerWidget(QWidget *parent = 0); + ~ControllerWidget(); +private: + QScopedPointer m_testWindow; +}; + +#endif // CONTROLLERWIDGET_H diff --git a/tests/manual/windowchildgeometry/main.cpp b/tests/manual/windowchildgeometry/main.cpp new file mode 100644 index 0000000000..42266b777a --- /dev/null +++ b/tests/manual/windowchildgeometry/main.cpp @@ -0,0 +1,51 @@ +/**************************************************************************** +** +** Copyright (C) 2014 Digia Plc and/or its subsidiary(-ies). +** Contact: http://www.qt-project.org/legal +** +** This file is part of the test suite of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:LGPL$ +** 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 Digia. For licensing terms and +** conditions see http://qt.digia.com/licensing. For further information +** use the contact form at http://qt.digia.com/contact-us. +** +** 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, Digia gives you certain additional +** rights. These rights are described in the Digia Qt LGPL Exception +** version 1.1, included in the file LGPL_EXCEPTION.txt in this package. +** +** GNU General Public License Usage +** Alternatively, this file may be used under the terms of the GNU +** General Public License version 3.0 as published by the Free Software +** Foundation and appearing in the file LICENSE.GPL included in the +** packaging of this file. Please review the following information to +** ensure the GNU General Public License version 3.0 requirements will be +** met: http://www.gnu.org/copyleft/gpl.html. +** +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +#include +#include "controllerwidget.h" + +int main(int argc, char *argv[]) +{ + QApplication a(argc, argv); + ControllerWidget controller; + controller.show(); + return a.exec(); +} diff --git a/tests/manual/windowchildgeometry/windowchildgeometry.pro b/tests/manual/windowchildgeometry/windowchildgeometry.pro new file mode 100644 index 0000000000..921acd8a4e --- /dev/null +++ b/tests/manual/windowchildgeometry/windowchildgeometry.pro @@ -0,0 +1,10 @@ +QT += core gui +greaterThan(QT_MAJOR_VERSION, 4): QT += widgets +TARGET = windowchildgeometry +TEMPLATE = app + +INCLUDEPATH += ../windowflags +SOURCES += $$PWD/main.cpp controllerwidget.cpp ../windowflags/controls.cpp +HEADERS += controllerwidget.h ../windowflags/controls.h + +DEFINES += QT_DISABLE_DEPRECATED_BEFORE=0 -- cgit v1.2.3 From b2d5e7805abe569a926eb087a75bd903261b734f Mon Sep 17 00:00:00 2001 From: Thiago Macieira Date: Mon, 20 Jan 2014 16:07:43 -0800 Subject: Add QString::fromUtf16 with char16_t and fromUcs4 with char32_t Because they make sense. I'm even thinking that the char16_t version should get a QString implicit constructor. Maybe both encodings. Change-Id: Ifffc61dd890795fbbbd5f7cb5efb3e6287d1270e Reviewed-by: Lars Knoll --- tests/auto/corelib/tools/qstring/tst_qstring.cpp | 43 ++++++++++++++++++++++-- 1 file changed, 40 insertions(+), 3 deletions(-) (limited to 'tests') diff --git a/tests/auto/corelib/tools/qstring/tst_qstring.cpp b/tests/auto/corelib/tools/qstring/tst_qstring.cpp index a0edc16718..4ac2fb9fa0 100644 --- a/tests/auto/corelib/tools/qstring/tst_qstring.cpp +++ b/tests/auto/corelib/tools/qstring/tst_qstring.cpp @@ -223,6 +223,8 @@ private slots: void split_regexp(); void fromUtf16_data(); void fromUtf16(); + void fromUtf16_char16_data(); + void fromUtf16_char16(); void latin1String(); void nanAndInf(); void compare_data(); @@ -3968,14 +3970,15 @@ void tst_QString::fromAscii() void tst_QString::fromUcs4() { + const uint *null = 0; QString s; - s = QString::fromUcs4( 0 ); + s = QString::fromUcs4( null ); QVERIFY( s.isNull() ); QCOMPARE( s.size(), 0 ); - s = QString::fromUcs4( 0, 0 ); + s = QString::fromUcs4( null, 0 ); QVERIFY( s.isNull() ); QCOMPARE( s.size(), 0 ); - s = QString::fromUcs4( 0, 5 ); + s = QString::fromUcs4( null, 5 ); QVERIFY( s.isNull() ); QCOMPARE( s.size(), 0 ); @@ -3996,6 +3999,21 @@ void tst_QString::fromUcs4() s = QString::fromUcs4( &smp, 1 ); QVERIFY( !s.isNull() ); QCOMPARE( s.size(), 2 ); + +#ifdef Q_COMPILER_UNICODE_STRINGS + static const char32_t str1[] = U"Hello Unicode World"; + s = QString::fromUcs4(str1, sizeof(str1) / sizeof(str1[0]) - 1); + QCOMPARE(s, QString("Hello Unicode World")); + + s = QString::fromUcs4(str1); + QCOMPARE(s, QString("Hello Unicode World")); + + s = QString::fromUcs4(str1, 5); + QCOMPARE(s, QString("Hello")); + + s = QString::fromUcs4(U"\u221212\U000020AC\U00010000"); + QCOMPARE(s, QString::fromUtf8("\342\210\222" "12" "\342\202\254" "\360\220\200\200")); +#endif } void tst_QString::toUcs4() @@ -4935,6 +4953,25 @@ void tst_QString::fromUtf16() QCOMPARE(QString::fromUtf16(ucs2.utf16(), len), res); } +void tst_QString::fromUtf16_char16_data() +{ +#ifdef Q_COMPILER_UNICODE_STRINGS + fromUtf16_data(); +#else + QSKIP("Compiler does not support C++11 unicode strings"); +#endif +} + +void tst_QString::fromUtf16_char16() +{ +#ifdef Q_COMPILER_UNICODE_STRINGS + QFETCH(QString, ucs2); + QFETCH(QString, res); + QFETCH(int, len); + + QCOMPARE(QString::fromUtf16(reinterpret_cast(ucs2.utf16()), len), res); +#endif +} void tst_QString::latin1String() { -- cgit v1.2.3 From 8cbe52d5811a985e610aa76c3a17a75cd785fb19 Mon Sep 17 00:00:00 2001 From: Giuseppe D'Angelo Date: Thu, 23 Jun 2011 15:26:08 +0200 Subject: Long live QStringIterator! UCS-4 iterator over a QString. Kept private for now so we can still work on the API. Done-with: Thiago Change-Id: I377f8bb1921e591ee3292c08c3e097fb6bc7f0c4 Reviewed-by: Thiago Macieira --- .../tools/qstringiterator/qstringiterator.pro | 5 + .../tools/qstringiterator/tst_qstringiterator.cpp | 675 +++++++++++++++++++++ tests/auto/corelib/tools/tools.pro | 1 + 3 files changed, 681 insertions(+) create mode 100644 tests/auto/corelib/tools/qstringiterator/qstringiterator.pro create mode 100644 tests/auto/corelib/tools/qstringiterator/tst_qstringiterator.cpp (limited to 'tests') diff --git a/tests/auto/corelib/tools/qstringiterator/qstringiterator.pro b/tests/auto/corelib/tools/qstringiterator/qstringiterator.pro new file mode 100644 index 0000000000..e5e625d520 --- /dev/null +++ b/tests/auto/corelib/tools/qstringiterator/qstringiterator.pro @@ -0,0 +1,5 @@ +CONFIG += testcase parallel_test +TARGET = tst_qstringiterator +QT = core core-private testlib +SOURCES = tst_qstringiterator.cpp + diff --git a/tests/auto/corelib/tools/qstringiterator/tst_qstringiterator.cpp b/tests/auto/corelib/tools/qstringiterator/tst_qstringiterator.cpp new file mode 100644 index 0000000000..d06d052676 --- /dev/null +++ b/tests/auto/corelib/tools/qstringiterator/tst_qstringiterator.cpp @@ -0,0 +1,675 @@ +/**************************************************************************** +** +** Copyright (C) 2014 Klarälvdalens Datakonsult AB, a KDAB Group company, info@kdab.com, author Giuseppe D'Angelo +** Contact: http://www.qt-project.org/legal +** +** This file is part of the QtCore module of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:LGPL$ +** 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 Digia. For licensing terms and +** conditions see http://qt.digia.com/licensing. For further information +** use the contact form at http://qt.digia.com/contact-us. +** +** 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, Digia gives you certain additional +** rights. These rights are described in the Digia Qt LGPL Exception +** version 1.1, included in the file LGPL_EXCEPTION.txt in this package. +** +** GNU General Public License Usage +** Alternatively, this file may be used under the terms of the GNU +** General Public License version 3.0 as published by the Free Software +** Foundation and appearing in the file LICENSE.GPL included in the +** packaging of this file. Please review the following information to +** ensure the GNU General Public License version 3.0 requirements will be +** met: http://www.gnu.org/copyleft/gpl.html. +** +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +#include +#include +#include + +class tst_QStringIterator : public QObject +{ + Q_OBJECT +private slots: + void sweep_data(); + void sweep(); + + void position(); +}; + +void tst_QStringIterator::sweep_data() +{ + QTest::addColumn("string"); + QTest::addColumn("valid"); + QTest::addColumn("count"); + + QTest::newRow("sweep_00") << QString::fromUtf8("", 0) << true << 0; + QTest::newRow("sweep_01") << QString::fromUtf8("a", 1) << true << 1; + QTest::newRow("sweep_02") << QString::fromUtf8("a string", 8) << true << 8; + QTest::newRow("sweep_03") << QString::fromUtf8("\xc3\xa0\xc3\xa8\xc3\xac\xc3\xb2\xc3\xb9", 10) << true << 5; + QTest::newRow("sweep_04") << QString::fromUtf8("\xc3\x9f\xe2\x80\x94\xc2\xa1", 7) << true << 3; + QTest::newRow("sweep_05") << QString::fromUtf8("\xe6\xb0\xb4\xe6\xb0\xb5\xe6\xb0\xb6\xe6\xb0\xb7\xe6\xb0\xb8\xe6\xb0\xb9", 18) << true << 6; + QTest::newRow("sweep_06") << QString::fromUtf8("\xf0\x9f\x98\x81\xf0\x9f\x98\x82\x61\x62\x63\xf0\x9f\x98\x83\xc4\x91\xc3\xa8\xef\xac\x80\xf0\x9f\x98\x84\xf0\x9f\x98\x85", 30) << true << 11; + QTest::newRow("sweep_07") << QString::fromUtf8("\xf0\x9f\x82\xaa\xf0\x9f\x82\xab\xf0\x9f\x82\xad\xf0\x9f\x82\xae\xf0\x9f\x82\xa1\x20\x52\x4f\x59\x41\x4c\x20\x46\x4c\x55\x53\x48\x20\x4f\x46\x20\x53\x50\x41\x44\x45\x53", 42) << true << 27; + QTest::newRow("sweep_08") << QString::fromUtf8("abc\0def", 7) << true << 7; + QTest::newRow("sweep_09") << QString::fromUtf8("\xc3\xa0\xce\xb2\xc3\xa7\xf0\x9f\x80\xb9\xf0\x9f\x80\xb8\x00\xf0\x9f\x80\xb1\x00\xf0\x9f\x80\xb3\xf0\x9f\x81\x85\xe1\xb8\x8a\xc4\x99\xc6\x92", 35) << true << 13; + + QTest::newRow("sweep_invalid_00") << QString(QChar(0xd800)) << false << 1; + QTest::newRow("sweep_invalid_01") << QString(QChar(0xdc00)) << false << 1; + QTest::newRow("sweep_invalid_02") << QString(QChar(0xdbff)) << false << 1; + QTest::newRow("sweep_invalid_03") << QString(QChar(0xdfff)) << false << 1; + +#define QSTRING_FROM_QCHARARRAY(x) (QString((x), sizeof(x)/sizeof((x)[0]))) + + static const QChar invalid_04[] = { + QLatin1Char('i'), QLatin1Char('n'), QLatin1Char('v'), + QLatin1Char('a'), QLatin1Char('l'), QLatin1Char('i'), + QLatin1Char('d'), QChar(0xd800) + }; + QTest::newRow("sweep_invalid_04") << QSTRING_FROM_QCHARARRAY(invalid_04) << false << 8; + + static const QChar invalid_05[] = { + QLatin1Char('i'), QLatin1Char('n'), QLatin1Char('v'), + QLatin1Char('a'), QLatin1Char('l'), QLatin1Char('i'), + QLatin1Char('d'), QChar(0xd800), QLatin1Char('x') + }; + QTest::newRow("sweep_invalid_05") << QSTRING_FROM_QCHARARRAY(invalid_05) << false << 9; + + static const QChar invalid_06[] = { + QLatin1Char('i'), QLatin1Char('n'), QLatin1Char('v'), + QLatin1Char('a'), QLatin1Char('l'), QLatin1Char('i'), + QLatin1Char('d'), QChar(0xdc00) + }; + QTest::newRow("sweep_invalid_06") << QSTRING_FROM_QCHARARRAY(invalid_06) << false << 8; + + static const QChar invalid_07[] = { + QLatin1Char('i'), QLatin1Char('n'), QLatin1Char('v'), + QLatin1Char('a'), QLatin1Char('l'), QLatin1Char('i'), + QLatin1Char('d'), QChar(0xdc00), QLatin1Char('x') + }; + QTest::newRow("sweep_invalid_07") << QSTRING_FROM_QCHARARRAY(invalid_07) << false << 9; + + static const QChar invalid_08[] = { + QChar(0xd800), + QLatin1Char('i'), QLatin1Char('n'), QLatin1Char('v'), + QLatin1Char('a'), QLatin1Char('l'), QLatin1Char('i'), + QLatin1Char('d') + }; + QTest::newRow("sweep_invalid_08") << QSTRING_FROM_QCHARARRAY(invalid_08) << false << 8; + + static const QChar invalid_09[] = { + QChar(0xdc00), + QLatin1Char('i'), QLatin1Char('n'), QLatin1Char('v'), + QLatin1Char('a'), QLatin1Char('l'), QLatin1Char('i'), + QLatin1Char('d') + }; + QTest::newRow("sweep_invalid_09") << QSTRING_FROM_QCHARARRAY(invalid_09) << false << 8; + + static const QChar invalid_10[] = { + QChar(0xd800), QChar(0xd800), + QLatin1Char('i'), QLatin1Char('n'), QLatin1Char('v'), + QLatin1Char('a'), QLatin1Char('l'), QLatin1Char('i'), + QLatin1Char('d') + }; + QTest::newRow("sweep_invalid_10") << QSTRING_FROM_QCHARARRAY(invalid_10) << false << 9; + + static const QChar invalid_11[] = { + QChar(0xdc00), QChar(0xd800), + QLatin1Char('i'), QLatin1Char('n'), QLatin1Char('v'), + QLatin1Char('a'), QLatin1Char('l'), QLatin1Char('i'), + QLatin1Char('d') + }; + QTest::newRow("sweep_invalid_11") << QSTRING_FROM_QCHARARRAY(invalid_11) << false << 9; + + static const QChar invalid_12[] = { + QChar(0xdc00), QChar(0xdc00), + QLatin1Char('i'), QLatin1Char('n'), QLatin1Char('v'), + QLatin1Char('a'), QLatin1Char('l'), QLatin1Char('i'), + QLatin1Char('d') + }; + QTest::newRow("sweep_invalid_12") << QSTRING_FROM_QCHARARRAY(invalid_12) << false << 9; + + static const QChar invalid_13[] = { + QLatin1Char('i'), QLatin1Char('n'), QLatin1Char('v'), + QChar(0xd800), QChar(0xdf00), // U+10300 OLD ITALIC LETTER A + QLatin1Char('a'), QLatin1Char('l'), QLatin1Char('i'), + QLatin1Char('d'), QChar(0xd800) + }; + QTest::newRow("sweep_invalid_13") << QSTRING_FROM_QCHARARRAY(invalid_13) << false << 9; + + static const QChar invalid_14[] = { + QLatin1Char('i'), QLatin1Char('n'), QLatin1Char('v'), + QChar(0xd800), QChar(0xdf00), // U+10300 OLD ITALIC LETTER A + QLatin1Char('a'), QLatin1Char('l'), QLatin1Char('i'), + QLatin1Char('d'), QChar(0xd800), QLatin1Char('x') + }; + QTest::newRow("sweep_invalid_14") << QSTRING_FROM_QCHARARRAY(invalid_14) << false << 10; + + static const QChar invalid_15[] = { + QLatin1Char('i'), QLatin1Char('n'), QLatin1Char('v'), + QChar(0xd800), QChar(0xdf00), // U+10300 OLD ITALIC LETTER A + QLatin1Char('a'), QLatin1Char('l'), QLatin1Char('i'), + QLatin1Char('d'), QChar(0xdc00) + }; + QTest::newRow("sweep_invalid_15") << QSTRING_FROM_QCHARARRAY(invalid_15) << false << 9; + + static const QChar invalid_16[] = { + QLatin1Char('i'), QLatin1Char('n'), QLatin1Char('v'), + QChar(0xd800), QChar(0xdf00), // U+10300 OLD ITALIC LETTER A + QLatin1Char('a'), QLatin1Char('l'), QLatin1Char('i'), + QLatin1Char('d'), QChar(0xdc00), QLatin1Char('x') + }; + QTest::newRow("sweep_invalid_16") << QSTRING_FROM_QCHARARRAY(invalid_16) << false << 10; + + static const QChar invalid_17[] = { + QChar(0xd800), + QLatin1Char('i'), QLatin1Char('n'), QLatin1Char('v'), + QChar(0xd800), QChar(0xdf00), // U+10300 OLD ITALIC LETTER A + QLatin1Char('a'), QLatin1Char('l'), QLatin1Char('i'), + QLatin1Char('d') + }; + QTest::newRow("sweep_invalid_17") << QSTRING_FROM_QCHARARRAY(invalid_17) << false << 9; + + static const QChar invalid_18[] = { + QChar(0xdc00), + QLatin1Char('i'), QLatin1Char('n'), QLatin1Char('v'), + QChar(0xd800), QChar(0xdf00), // U+10300 OLD ITALIC LETTER A + QLatin1Char('a'), QLatin1Char('l'), QLatin1Char('i'), + QLatin1Char('d') + }; + QTest::newRow("sweep_invalid_18") << QSTRING_FROM_QCHARARRAY(invalid_18) << false << 9; + +#undef QSTRING_FROM_QCHARARRAY +} + +void tst_QStringIterator::sweep() +{ + QFETCH(QString, string); + QFETCH(bool, valid); + + QStringIterator i(string); + int count = 0; + QString rebuiltString; + + while (i.hasNext()) { + const uint peekedCodePoint = i.peekNext(~0u); + const uint codePoint = i.next(~0u); + + QVERIFY(peekedCodePoint == codePoint); + + if (codePoint == ~0u) + rebuiltString += *(i.position() - 1); + else + rebuiltString += QString::fromUcs4(&codePoint, 1); + + ++count; + } + + QTEST(count, "count"); + QTEST(rebuiltString, "string"); + rebuiltString.clear(); + + while (i.hasPrevious()) { + const uint peekedCodePoint = i.peekPrevious(~0u); + const uint codePoint = i.previous(~0u); + + QVERIFY(peekedCodePoint == codePoint); + + --count; + } + + QCOMPARE(count, 0); + + while (i.hasNext()) { + i.advance(); + ++count; + } + + QTEST(count, "count"); + + while (i.hasPrevious()) { + i.recede(); + --count; + } + + QCOMPARE(count, 0); + + if (valid) { + while (i.hasNext()) { + const uint peekedCodePoint = i.peekNextUnchecked(); + const uint codePoint = i.nextUnchecked(); + + QVERIFY(peekedCodePoint == codePoint); + QVERIFY(codePoint <= 0x10FFFFu); + rebuiltString += QString::fromUcs4(&codePoint, 1); + ++count; + } + + QTEST(count, "count"); + QTEST(rebuiltString, "string"); + + while (i.hasPrevious()) { + const uint peekedCodePoint = i.peekPreviousUnchecked(); + const uint codePoint = i.previousUnchecked(); + + QVERIFY(peekedCodePoint == codePoint); + + --count; + } + + QCOMPARE(count, 0); + + while (i.hasNext()) { + i.advanceUnchecked(); + ++count; + } + + QTEST(count, "count"); + + while (i.hasPrevious()) { + i.recedeUnchecked(); + --count; + } + + QCOMPARE(count, 0); + } +} + +void tst_QStringIterator::position() +{ + static const QChar stringData[] = + { + // codeunit count: 0 + QLatin1Char('a'), QLatin1Char('b'), QLatin1Char('c'), + // codeunit count: 3 + QChar(0x00A9), // U+00A9 COPYRIGHT SIGN + // codeunit count: 4 + QChar(0x00AE), // U+00AE REGISTERED SIGN + // codeunit count: 5 + QLatin1Char('d'), QLatin1Char('e'), QLatin1Char('f'), + // codeunit count: 8 + QLatin1Char('\0'), + // codeunit count: 9 + QLatin1Char('g'), QLatin1Char('h'), QLatin1Char('i'), + // codeunit count: 12 + QChar(0xD834), QChar(0xDD1E), // U+1D11E MUSICAL SYMBOL G CLEF + // codeunit count: 14 + QChar(0xD834), QChar(0xDD21), // U+1D121 MUSICAL SYMBOL C CLEF + // codeunit count: 16 + QLatin1Char('j'), + // codeunit count: 17 + QChar(0xD800), // stray high surrogate + // codeunit count: 18 + QLatin1Char('k'), + // codeunit count: 19 + QChar(0xDC00), // stray low surrogate + // codeunit count: 20 + QLatin1Char('l'), + // codeunit count: 21 + QChar(0xD800), QChar(0xD800), // two high surrogates + // codeunit count: 23 + QLatin1Char('m'), + // codeunit count: 24 + QChar(0xDC00), QChar(0xDC00), // two low surrogates + // codeunit count: 26 + QLatin1Char('n'), + // codeunit count: 27 + QChar(0xD800), QChar(0xD800), QChar(0xDC00), // stray high surrogate followed by valid pair + // codeunit count: 30 + QLatin1Char('o'), + // codeunit count: 31 + QChar(0xDC00), QChar(0xD800), QChar(0xDC00), // stray low surrogate followed by valid pair + // codeunit count: 34 + QLatin1Char('p') + // codeunit count: 35 + }; + + const QString string(stringData, sizeof(stringData) / sizeof(stringData[0])); + QStringIterator i(string); + + QCOMPARE(i.position(), string.constBegin()); + QVERIFY(i.hasNext()); + QVERIFY(!i.hasPrevious()); + + i.setPosition(string.constEnd()); + QCOMPARE(i.position(), string.constEnd()); + QVERIFY(!i.hasNext()); + QVERIFY(i.hasPrevious()); + +#define QCHAR_UNICODE_VALUE(x) ((uint)(QChar(x).unicode())) + + const QString::const_iterator begin = string.constBegin(); + i.setPosition(begin); + QCOMPARE(i.position(), begin); + QCOMPARE(i.peekNext(), QCHAR_UNICODE_VALUE(QLatin1Char('a'))); + QCOMPARE(i.next(), QCHAR_UNICODE_VALUE(QLatin1Char('a'))); + + QCOMPARE(i.position(), begin + 1); + + i.setPosition(begin + 2); + QCOMPARE(i.position(), begin + 2); + QCOMPARE(i.peekNext(), QCHAR_UNICODE_VALUE(QLatin1Char('c'))); + QCOMPARE(i.next(), QCHAR_UNICODE_VALUE(QLatin1Char('c'))); + + QCOMPARE(i.position(), begin + 3); + QCOMPARE(i.peekNext(), QCHAR_UNICODE_VALUE(0x00A9)); + QCOMPARE(i.next(), QCHAR_UNICODE_VALUE(0x00A9)); + + QCOMPARE(i.position(), begin + 4); + QCOMPARE(i.peekNext(), QCHAR_UNICODE_VALUE(0x00AE)); + QCOMPARE(i.next(), QCHAR_UNICODE_VALUE(0x00AE)); + + QCOMPARE(i.position(), begin + 5); + QCOMPARE(i.peekPrevious(), QCHAR_UNICODE_VALUE(0x00AE)); + QCOMPARE(i.previous(), QCHAR_UNICODE_VALUE(0x00AE)); + + QCOMPARE(i.position(), begin + 4); + QCOMPARE(i.peekPrevious(), QCHAR_UNICODE_VALUE(0x00A9)); + QCOMPARE(i.previous(), QCHAR_UNICODE_VALUE(0x00A9)); + + QCOMPARE(i.position(), begin + 3); + + i.setPosition(begin + 8); + QCOMPARE(i.position(), begin + 8); + QCOMPARE(i.peekNext(), QCHAR_UNICODE_VALUE(QLatin1Char('\0'))); + QCOMPARE(i.next(), QCHAR_UNICODE_VALUE(QLatin1Char('\0'))); + + QCOMPARE(i.position(), begin + 9); + QCOMPARE(i.peekNext(), QCHAR_UNICODE_VALUE(QLatin1Char('g'))); + QCOMPARE(i.next(), QCHAR_UNICODE_VALUE(QLatin1Char('g'))); + + QCOMPARE(i.position(), begin + 10); + QCOMPARE(i.peekPrevious(), QCHAR_UNICODE_VALUE(QLatin1Char('g'))); + QCOMPARE(i.previous(), QCHAR_UNICODE_VALUE(QLatin1Char('g'))); + + QCOMPARE(i.position(), begin + 9); + QCOMPARE(i.peekPrevious(), QCHAR_UNICODE_VALUE(QLatin1Char('\0'))); + QCOMPARE(i.previous(), QCHAR_UNICODE_VALUE(QLatin1Char('\0'))); + + QCOMPARE(i.position(), begin + 8); + QCOMPARE(i.peekPrevious(), QCHAR_UNICODE_VALUE(QLatin1Char('f'))); + QCOMPARE(i.previous(), QCHAR_UNICODE_VALUE(QLatin1Char('f'))); + + QCOMPARE(i.position(), begin + 7); + + i.advanceUnchecked(); + i.advanceUnchecked(); + i.advanceUnchecked(); + i.advanceUnchecked(); + i.advanceUnchecked(); + + QCOMPARE(i.position(), begin + 12); + QCOMPARE(i.peekNext(), 0x1D11Eu); + QCOMPARE(i.next(), 0x1D11Eu); + + QCOMPARE(i.position(), begin + 14); + QCOMPARE(i.peekNext(), 0x1D121u); + QCOMPARE(i.next(), 0x1D121u); + + QCOMPARE(i.position(), begin + 16); + QCOMPARE(i.peekNext(), QCHAR_UNICODE_VALUE(QLatin1Char('j'))); + QCOMPARE(i.next(), QCHAR_UNICODE_VALUE(QLatin1Char('j'))); + + QCOMPARE(i.position(), begin + 17); + QCOMPARE(i.peekPrevious(), QCHAR_UNICODE_VALUE(QLatin1Char('j'))); + QCOMPARE(i.previous(), QCHAR_UNICODE_VALUE(QLatin1Char('j'))); + + QCOMPARE(i.position(), begin + 16); + QCOMPARE(i.peekPrevious(), 0x1D121u); + QCOMPARE(i.previous(), 0x1D121u); + + QCOMPARE(i.position(), begin + 14); + QCOMPARE(i.peekPrevious(), 0x1D11Eu); + QCOMPARE(i.previous(), 0x1D11Eu); + + QCOMPARE(i.position(), begin + 12); + + + i.setPosition(begin + 13); + QCOMPARE(i.position(), begin + 13); + + QCOMPARE(i.peekNext(), 0xFFFDu); + QCOMPARE(i.next(), 0xFFFDu); + + QCOMPARE(i.position(), begin + 14); + QCOMPARE(i.peekNext(), 0x1D121u); + QCOMPARE(i.next(), 0x1D121u); + + QCOMPARE(i.position(), begin + 16); + + + i.setPosition(begin + 15); + QCOMPARE(i.position(), begin + 15); + + QCOMPARE(i.peekPrevious(), 0xFFFDu); + QCOMPARE(i.previous(), 0xFFFDu); + + QCOMPARE(i.position(), begin + 14); + QCOMPARE(i.peekPrevious(), 0x1D11Eu); + QCOMPARE(i.previous(), 0x1D11Eu); + + QCOMPARE(i.position(), begin + 12); + + i.advanceUnchecked(); + i.advanceUnchecked(); + + QCOMPARE(i.position(), begin + 16); + QCOMPARE(i.peekNext(), QCHAR_UNICODE_VALUE(QLatin1Char('j'))); + QCOMPARE(i.next(), QCHAR_UNICODE_VALUE(QLatin1Char('j'))); + + QCOMPARE(i.position(), begin + 17); + QCOMPARE(i.peekNext(), 0xFFFDu); + QCOMPARE(i.next(), 0xFFFDu); + + QCOMPARE(i.position(), begin + 18); + QCOMPARE(i.peekNext(), QCHAR_UNICODE_VALUE(QLatin1Char('k'))); + QCOMPARE(i.next(), QCHAR_UNICODE_VALUE(QLatin1Char('k'))); + + QCOMPARE(i.position(), begin + 19); + QCOMPARE(i.peekNext(), 0xFFFDu); + QCOMPARE(i.next(), 0xFFFDu); + + QCOMPARE(i.position(), begin + 20); + QCOMPARE(i.peekNext(), QCHAR_UNICODE_VALUE(QLatin1Char('l'))); + QCOMPARE(i.next(), QCHAR_UNICODE_VALUE(QLatin1Char('l'))); + + QCOMPARE(i.position(), begin + 21); + QCOMPARE(i.peekNext(), 0xFFFDu); + QCOMPARE(i.next(), 0xFFFDu); + + QCOMPARE(i.position(), begin + 22); + QCOMPARE(i.peekNext(), 0xFFFDu); + QCOMPARE(i.next(), 0xFFFDu); + + QCOMPARE(i.position(), begin + 23); + QCOMPARE(i.peekNext(), QCHAR_UNICODE_VALUE(QLatin1Char('m'))); + QCOMPARE(i.next(), QCHAR_UNICODE_VALUE(QLatin1Char('m'))); + + QCOMPARE(i.position(), begin + 24); + QCOMPARE(i.peekNext(), 0xFFFDu); + QCOMPARE(i.next(), 0xFFFDu); + + QCOMPARE(i.position(), begin + 25); + QCOMPARE(i.peekNext(), 0xFFFDu); + QCOMPARE(i.next(), 0xFFFDu); + + QCOMPARE(i.position(), begin + 26); + QCOMPARE(i.peekNext(), QCHAR_UNICODE_VALUE(QLatin1Char('n'))); + QCOMPARE(i.next(), QCHAR_UNICODE_VALUE(QLatin1Char('n'))); + + QCOMPARE(i.position(), begin + 27); + QCOMPARE(i.peekNext(), 0xFFFDu); + QCOMPARE(i.next(), 0xFFFDu); + + QCOMPARE(i.position(), begin + 28); + QCOMPARE(i.peekNext(), 0x10000u); + QCOMPARE(i.next(), 0x10000u); + + QCOMPARE(i.position(), begin + 30); + QCOMPARE(i.peekNext(), QCHAR_UNICODE_VALUE(QLatin1Char('o'))); + QCOMPARE(i.next(), QCHAR_UNICODE_VALUE(QLatin1Char('o'))); + + QCOMPARE(i.position(), begin + 31); + QCOMPARE(i.peekNext(), 0xFFFDu); + QCOMPARE(i.next(), 0xFFFDu); + + QCOMPARE(i.position(), begin + 32); + QCOMPARE(i.peekNext(), 0x10000u); + QCOMPARE(i.next(), 0x10000u); + + QCOMPARE(i.position(), begin + 34); + QCOMPARE(i.peekNext(), QCHAR_UNICODE_VALUE(QLatin1Char('p'))); + QCOMPARE(i.next(), QCHAR_UNICODE_VALUE(QLatin1Char('p'))); + + QVERIFY(!i.hasNext()); + + QCOMPARE(i.position(), begin + 35); + QCOMPARE(i.peekPrevious(), QCHAR_UNICODE_VALUE(QLatin1Char('p'))); + QCOMPARE(i.previous(), QCHAR_UNICODE_VALUE(QLatin1Char('p'))); + + QCOMPARE(i.position(), begin + 34); + QCOMPARE(i.peekPrevious(), 0x10000u); + QCOMPARE(i.previous(), 0x10000u); + + QCOMPARE(i.position(), begin + 32); + QCOMPARE(i.peekPrevious(), 0xFFFDu); + QCOMPARE(i.previous(), 0xFFFDu); + + QCOMPARE(i.position(), begin + 31); + QCOMPARE(i.peekPrevious(), QCHAR_UNICODE_VALUE(QLatin1Char('o'))); + QCOMPARE(i.previous(), QCHAR_UNICODE_VALUE(QLatin1Char('o'))); + + QCOMPARE(i.position(), begin + 30); + QCOMPARE(i.peekPrevious(), 0x10000u); + QCOMPARE(i.previous(), 0x10000u); + + QCOMPARE(i.position(), begin + 28); + QCOMPARE(i.peekPrevious(), 0xFFFDu); + QCOMPARE(i.previous(), 0xFFFDu); + + QCOMPARE(i.position(), begin + 27); + QCOMPARE(i.peekPrevious(), QCHAR_UNICODE_VALUE(QLatin1Char('n'))); + QCOMPARE(i.previous(), QCHAR_UNICODE_VALUE(QLatin1Char('n'))); + + QCOMPARE(i.position(), begin + 26); + QCOMPARE(i.peekPrevious(), 0xFFFDu); + QCOMPARE(i.previous(), 0xFFFDu); + + QCOMPARE(i.position(), begin + 25); + QCOMPARE(i.peekPrevious(), 0xFFFDu); + QCOMPARE(i.previous(), 0xFFFDu); + + QCOMPARE(i.position(), begin + 24); + QCOMPARE(i.peekPrevious(), QCHAR_UNICODE_VALUE(QLatin1Char('m'))); + QCOMPARE(i.previous(), QCHAR_UNICODE_VALUE(QLatin1Char('m'))); + + QCOMPARE(i.position(), begin + 23); + QCOMPARE(i.peekPrevious(), 0xFFFDu); + QCOMPARE(i.previous(), 0xFFFDu); + + QCOMPARE(i.position(), begin + 22); + QCOMPARE(i.peekPrevious(), 0xFFFDu); + QCOMPARE(i.previous(), 0xFFFDu); + + QCOMPARE(i.position(), begin + 21); + QCOMPARE(i.peekPrevious(), QCHAR_UNICODE_VALUE(QLatin1Char('l'))); + QCOMPARE(i.previous(), QCHAR_UNICODE_VALUE(QLatin1Char('l'))); + + QCOMPARE(i.position(), begin + 20); + QCOMPARE(i.peekPrevious(), 0xFFFDu); + QCOMPARE(i.previous(), 0xFFFDu); + + QCOMPARE(i.position(), begin + 19); + QCOMPARE(i.peekPrevious(), QCHAR_UNICODE_VALUE(QLatin1Char('k'))); + QCOMPARE(i.previous(), QCHAR_UNICODE_VALUE(QLatin1Char('k'))); + + QCOMPARE(i.position(), begin + 18); + QCOMPARE(i.peekPrevious(), 0xFFFDu); + QCOMPARE(i.previous(), 0xFFFDu); + + QCOMPARE(i.position(), begin + 17); + QCOMPARE(i.peekPrevious(), QCHAR_UNICODE_VALUE(QLatin1Char('j'))); + QCOMPARE(i.previous(), QCHAR_UNICODE_VALUE(QLatin1Char('j'))); + + i.setPosition(begin + 29); + QCOMPARE(i.position(), begin + 29); + QCOMPARE(i.peekNext(), 0xFFFDu); + QCOMPARE(i.next(), 0xFFFDu); + + QCOMPARE(i.position(), begin + 30); + QCOMPARE(i.peekNext(), QCHAR_UNICODE_VALUE(QLatin1Char('o'))); + QCOMPARE(i.next(), QCHAR_UNICODE_VALUE(QLatin1Char('o'))); + + QCOMPARE(i.position(), begin + 31); + QCOMPARE(i.peekPrevious(), QCHAR_UNICODE_VALUE(QLatin1Char('o'))); + QCOMPARE(i.previous(), QCHAR_UNICODE_VALUE(QLatin1Char('o'))); + + QCOMPARE(i.position(), begin + 30); + QCOMPARE(i.peekPrevious(), 0x10000u); + QCOMPARE(i.previous(), 0x10000u); + + QCOMPARE(i.position(), begin + 28); + + i.setPosition(begin + 33); + QCOMPARE(i.position(), begin + 33); + QCOMPARE(i.peekNext(), 0xFFFDu); + QCOMPARE(i.next(), 0xFFFDu); + + QCOMPARE(i.position(), begin + 34); + QCOMPARE(i.peekNext(), QCHAR_UNICODE_VALUE(QLatin1Char('p'))); + QCOMPARE(i.next(), QCHAR_UNICODE_VALUE(QLatin1Char('p'))); + + QCOMPARE(i.position(), begin + 35); + QCOMPARE(i.peekPrevious(), QCHAR_UNICODE_VALUE(QLatin1Char('p'))); + QCOMPARE(i.previous(), QCHAR_UNICODE_VALUE(QLatin1Char('p'))); + + QCOMPARE(i.position(), begin + 34); + QCOMPARE(i.peekPrevious(), 0x10000u); + QCOMPARE(i.previous(), 0x10000u); + + QCOMPARE(i.position(), begin + 32); + + + i.setPosition(begin + 16); + QCOMPARE(i.position(), begin + 16); + + i.recedeUnchecked(); + i.recedeUnchecked(); + QCOMPARE(i.position(), begin + 12); + + i.recedeUnchecked(); + i.recedeUnchecked(); + i.recedeUnchecked(); + i.recedeUnchecked(); + QCOMPARE(i.position(), begin + 8); + + i.recedeUnchecked(); + i.recedeUnchecked(); + i.recedeUnchecked(); + i.recedeUnchecked(); + i.recedeUnchecked(); + i.recedeUnchecked(); + QCOMPARE(i.position(), begin + 2); + +#undef QCHAR_UNICODE_VALUE +} + +QTEST_APPLESS_MAIN(tst_QStringIterator) + +#include "tst_qstringiterator.moc" diff --git a/tests/auto/corelib/tools/tools.pro b/tests/auto/corelib/tools/tools.pro index 286afdfd18..bf2f222769 100644 --- a/tests/auto/corelib/tools/tools.pro +++ b/tests/auto/corelib/tools/tools.pro @@ -44,6 +44,7 @@ SUBDIRS=\ qstring \ qstring_no_cast_from_bytearray \ qstringbuilder \ + qstringiterator \ qstringlist \ qstringmatcher \ qstringref \ -- cgit v1.2.3 From 125bb81bef7729d182f533989ffdf53685abbe31 Mon Sep 17 00:00:00 2001 From: Thiago Macieira Date: Mon, 3 Feb 2014 13:04:22 -0800 Subject: Fix compilation after b0afad8f0b6a3be7ab3a23e063b0201cd68ada95 That commit made QString::toXxx (8-bit) functions use C++11 ref qualifiers, so we need to match it here. Change-Id: I45b50464d36f858d012b12e0cb511aae347ddb6f Reviewed-by: Marc Mutz Reviewed-by: Giuseppe D'Angelo --- tests/auto/corelib/codecs/utf8/tst_utf8.cpp | 4 ++++ 1 file changed, 4 insertions(+) (limited to 'tests') diff --git a/tests/auto/corelib/codecs/utf8/tst_utf8.cpp b/tests/auto/corelib/codecs/utf8/tst_utf8.cpp index e18f6f73b9..b00fd0dfd4 100644 --- a/tests/auto/corelib/codecs/utf8/tst_utf8.cpp +++ b/tests/auto/corelib/codecs/utf8/tst_utf8.cpp @@ -53,7 +53,11 @@ public: // test data: QTextCodec *codec; QString (*from8BitPtr)(const char *, int); +#ifdef Q_COMPILER_REF_QUALIFIERS + QByteArray (QString:: *to8Bit)() const &; +#else QByteArray (QString:: *to8Bit)() const; +#endif inline QString from8Bit(const QByteArray &ba) { return from8BitPtr(ba.constData(), ba.length()); } -- cgit v1.2.3 From bcd1b7fe8ee0ab83f7838172c287557c94711602 Mon Sep 17 00:00:00 2001 From: Giuseppe D'Angelo Date: Mon, 3 Feb 2014 16:54:49 +0100 Subject: Fix QString::toUcs4 returning invalid data when encountering stray surrogates MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Code units 0xD800 .. 0xDFFF are not UCS-4, so we can't happily return them. Instead, if we encounter a stray surrogate, replace it with 0xFFFD, which is what Unicode recommends anyhow. References: §3.9 Unicode Encoding Forms D76: Unicode scalar value: Any Unicode code point except high-surrogate and low surrogate code points. As a result of this definition, the set of Unicode scalar values consists of the ranges 0 to D7FF_16 and E000_16 to 10FFFF_16, inclusive. [...] UTF-32 encoding form: The Unicode encoding form that assigns each Unicode scalar value to a single unsigned 32-bit code unit with the same numeric value as the Unicode scalar value. § C.2 Encoding Forms in ISO/IEC 10646 UCS-4. UCS-4 stands for “Universal Character Set coded in 4 octets.” It is now treated simply as a synonym for UTF-32, and is considered the canonical form for representation of characters in 10646. § 3.9 Unicode Encoding Forms (Best Practices for Using U+FFFD) and § 5.22 Best Practice for U+FFFD Substitution Whenever an unconvertible offset is reached during conversion of a code unit sequence: 1. The maximal subpart at that offset should be replaced by a single U+FFFD. 2. The conversion should proceed at the offset immediately after the maximal subpart. [...] Whenever an unconvertible offset is reached during conversion of a code unit sequence to Unicode: 1. Find the longest code unit sequence that is the initial subsequence of some sequence that could be converted. If there is such a sequence, replace it with a single U+FFFD; otherwise replace a single code unit with a single U+FFFD. 2. The conversion should proceed at the offset immediately after the subsequence which has been replaced. [ChangeLog][QtCore][QString] QString::toUcs4 now does not return invalid UCS-4 code units belonging to the surrogate range (U+D800 to U+DFFF) when the QString contains malformed UTF-16 data. Instead, U+FFFD is returned in place of the malformed subsequence. Change-Id: I19d7af03e749fea680fd5d9635439bc9d56558a9 Reviewed-by: Lars Knoll Reviewed-by: Konstantin Ritt Reviewed-by: Thiago Macieira --- tests/auto/corelib/tools/qstring/tst_qstring.cpp | 73 ++++++++++++++++++++++-- 1 file changed, 68 insertions(+), 5 deletions(-) (limited to 'tests') diff --git a/tests/auto/corelib/tools/qstring/tst_qstring.cpp b/tests/auto/corelib/tools/qstring/tst_qstring.cpp index 4ac2fb9fa0..0ee1595ecc 100644 --- a/tests/auto/corelib/tools/qstring/tst_qstring.cpp +++ b/tests/auto/corelib/tools/qstring/tst_qstring.cpp @@ -4019,15 +4019,78 @@ void tst_QString::fromUcs4() void tst_QString::toUcs4() { QString s; + QVector ucs4; QCOMPARE( s.toUcs4().size(), 0 ); - QChar bmp = QLatin1Char('a'); + static const QChar bmp = QLatin1Char('a'); s = QString(&bmp, 1); - QCOMPARE( s.toUcs4().size(), 1 ); + ucs4 = s.toUcs4(); + QCOMPARE( ucs4.size(), 1 ); + QCOMPARE( ucs4.at(0), 0x0061u ); + +#define QSTRING_FROM_QCHARARRAY(x) (QString((x), sizeof(x)/sizeof((x)[0]))) + + static const QChar smp[] = { QChar::highSurrogate(0x10000), QChar::lowSurrogate(0x10000) }; + s = QSTRING_FROM_QCHARARRAY(smp); + ucs4 = s.toUcs4(); + QCOMPARE( ucs4.size(), 1 ); + QCOMPARE( ucs4.at(0), 0x10000u ); + + static const QChar smp2[] = { QChar::highSurrogate(0x10000), QChar::lowSurrogate(0x10000), QChar::highSurrogate(0x10000), QChar::lowSurrogate(0x10000) }; + s = QSTRING_FROM_QCHARARRAY(smp2); + ucs4 = s.toUcs4(); + QCOMPARE( ucs4.size(), 2 ); + QCOMPARE( ucs4.at(0), 0x10000u ); + QCOMPARE( ucs4.at(1), 0x10000u ); + + static const QChar invalid_01[] = { QChar(0xd800) }; + s = QSTRING_FROM_QCHARARRAY(invalid_01); + ucs4 = s.toUcs4(); + QCOMPARE( ucs4.size(), 1 ); + QCOMPARE( ucs4.at(0), 0xFFFDu ); + + static const QChar invalid_02[] = { QChar(0xdc00) }; + s = QSTRING_FROM_QCHARARRAY(invalid_02); + ucs4 = s.toUcs4(); + QCOMPARE( ucs4.size(), 1 ); + QCOMPARE( ucs4.at(0), 0xFFFDu ); + + static const QChar invalid_03[] = { QLatin1Char('a'), QChar(0xd800), QLatin1Char('b') }; + s = QSTRING_FROM_QCHARARRAY(invalid_03); + ucs4 = s.toUcs4(); + QCOMPARE( ucs4.size(), 3 ); + QCOMPARE( ucs4.at(0), 0x0061u ); + QCOMPARE( ucs4.at(1), 0xFFFDu ); + QCOMPARE( ucs4.at(2), 0x0062u ); + + static const QChar invalid_04[] = { QLatin1Char('a'), QChar(0xdc00), QLatin1Char('b') }; + s = QSTRING_FROM_QCHARARRAY(invalid_04); + ucs4 = s.toUcs4(); + QCOMPARE( ucs4.size(), 3 ); + QCOMPARE( ucs4.at(0), 0x0061u ); + QCOMPARE( ucs4.at(1), 0xFFFDu ); + QCOMPARE( ucs4.at(2), 0x0062u ); + + static const QChar invalid_05[] = { QLatin1Char('a'), QChar(0xd800), QChar(0xd800), QLatin1Char('b') }; + s = QSTRING_FROM_QCHARARRAY(invalid_05); + ucs4 = s.toUcs4(); + QCOMPARE( ucs4.size(), 4 ); + QCOMPARE( ucs4.at(0), 0x0061u ); + QCOMPARE( ucs4.at(1), 0xFFFDu ); + QCOMPARE( ucs4.at(2), 0xFFFDu ); + QCOMPARE( ucs4.at(3), 0x0062u ); + + static const QChar invalid_06[] = { QLatin1Char('a'), QChar(0xdc00), QChar(0xdc00), QLatin1Char('b') }; + s = QSTRING_FROM_QCHARARRAY(invalid_06); + ucs4 = s.toUcs4(); + QCOMPARE( ucs4.size(), 4 ); + QCOMPARE( ucs4.at(0), 0x0061u ); + QCOMPARE( ucs4.at(1), 0xFFFDu ); + QCOMPARE( ucs4.at(2), 0xFFFDu ); + QCOMPARE( ucs4.at(3), 0x0062u ); + +#undef QSTRING_FROM_QCHARARRAY - QChar smp[] = { QChar::highSurrogate(0x10000), QChar::lowSurrogate(0x10000) }; - s = QString(smp, 2); - QCOMPARE( s.toUcs4().size(), 1 ); } void tst_QString::arg() -- cgit v1.2.3 From de1b98e9c16afd1f428652e800cbeb35414b2b4f Mon Sep 17 00:00:00 2001 From: Jan Arve Saether Date: Tue, 28 Jan 2014 16:20:13 +0100 Subject: Fallback to QWidget::grab() if QScreen::grabWindow() fails. QScreen::grabWindow() is not always reliable because it grabs from the framebuffer. (The window might then be covered by other windows, e.g. "Stays on top"-Windows, popups etc). If QScreen::grabWindow() fails we therefore fallback to QWidget::grab(). This will not grab from the frame buffer, but it will ask the widget to render itself (with its current state) to a pixmap and return it. QWidget::grab() should usually return the expected pixmap, and the pixmap it gives is not subject to the state of the window manager. This means that both QScreen::grabWindow() *and* QWidget::grab() must produce an unexpected pixmap in order for the test to fail. Change-Id: I276554155bb1e5b510d2a2d43628d91669464fe2 Reviewed-by: Friedemann Kleint Reviewed-by: Frederik Gladhorn --- tests/auto/widgets/kernel/qwidget/tst_qwidget.cpp | 119 +++++++++++----------- 1 file changed, 57 insertions(+), 62 deletions(-) (limited to 'tests') diff --git a/tests/auto/widgets/kernel/qwidget/tst_qwidget.cpp b/tests/auto/widgets/kernel/qwidget/tst_qwidget.cpp index 38b629cad7..ecbe774f22 100644 --- a/tests/auto/widgets/kernel/qwidget/tst_qwidget.cpp +++ b/tests/auto/widgets/kernel/qwidget/tst_qwidget.cpp @@ -4816,73 +4816,68 @@ static inline QByteArray msgRgbMismatch(unsigned actual, unsigned expected) QByteArrayLiteral(" != 0x") + QByteArray::number(expected, 16); } -#if defined(Q_OS_WIN) && !defined(Q_OS_WINCE) && !defined(Q_OS_WINRT) -QT_BEGIN_NAMESPACE -extern Q_GUI_EXPORT QPixmap qt_pixmapFromWinHBITMAP(HBITMAP bitmap, int hbitmapFormat = 0); -QT_END_NAMESPACE - -// grabs the window *without including any overlapping windows* -static QPixmap grabWindow(QWindow *window, int x, int y, int width, int height) -{ - const HWND hwnd = (HWND)window->winId(); - - // Create and setup bitmap - const HDC displayDc = ::GetDC(0); - const HDC bitmapDc = ::CreateCompatibleDC(displayDc); - const HBITMAP bitmap = ::CreateCompatibleBitmap(displayDc, width, height); - const HGDIOBJ oldBitmap = ::SelectObject(bitmapDc, bitmap); - - // copy data - const HDC windowDc = ::GetDC(hwnd); - ::BitBlt(bitmapDc, 0, 0, width, height, windowDc, x, y, SRCCOPY); - - // clean up all but bitmap - ::ReleaseDC(hwnd, windowDc); - ::SelectObject(bitmapDc, oldBitmap); - ::DeleteDC(bitmapDc); - - const QPixmap pixmap = qt_pixmapFromWinHBITMAP(bitmap); - - ::DeleteObject(bitmap); - ::ReleaseDC(0, displayDc); - - return pixmap; -} -#else -// fallback for other platforms. static QPixmap grabWindow(QWindow *window, int x, int y, int width, int height) { QScreen *screen = window->screen(); return screen ? screen->grabWindow(window->winId(), x, y, width, height) : QPixmap(); } -#endif //defined(Q_OS_WIN) && !defined(Q_OS_WINCE) && !defined(Q_OS_WINRT) - -#define VERIFY_COLOR(child, region, color) do { \ - const QRegion r = QRegion(region); \ - QWindow *window = child.window()->windowHandle(); \ - Q_ASSERT(window); \ - const QPoint offset = child.mapTo(child.window(), QPoint(0,0)); \ - for (int i = 0; i < r.rects().size(); ++i) { \ - const QRect rect = r.rects().at(i).translated(offset); \ - for (int t = 0; t < 5; t++) { \ - const QPixmap pixmap = grabWindow(window, \ - rect.left(), rect.top(), \ - rect.width(), rect.height()); \ - QCOMPARE(pixmap.size(), rect.size()); \ - QPixmap expectedPixmap(pixmap); /* ensure equal formats */ \ - expectedPixmap.detach(); \ - expectedPixmap.fill(color); \ - QImage image = pixmap.toImage(); \ - uint alphaCorrection = image.format() == QImage::Format_RGB32 ? 0xff000000 : 0; \ - uint firstPixel = image.pixel(0,0) | alphaCorrection; \ - if ( firstPixel != QColor(color).rgb() && t < 4 ) \ - { QTest::qWait(200); continue; } \ - QVERIFY2(firstPixel == QColor(color).rgb(), msgRgbMismatch(firstPixel, QColor(color).rgb())); \ - QCOMPARE(pixmap, expectedPixmap); \ - break; \ - } \ - } \ -} while (0) + +#define VERIFY_COLOR(child, region, color) verifyColor(child, region, color, __LINE__) + +bool verifyColor(QWidget &child, const QRegion ®ion, const QColor &color, unsigned int callerLine) +{ + const QRegion r = QRegion(region); + QWindow *window = child.window()->windowHandle(); + Q_ASSERT(window); + const QPoint offset = child.mapTo(child.window(), QPoint(0,0)); + bool grabBackingStore = false; + for (int i = 0; i < r.rects().size(); ++i) { + QRect rect = r.rects().at(i).translated(offset); + for (int t = 0; t < 6; t++) { + const QPixmap pixmap = grabBackingStore + ? child.grab(rect) + : grabWindow(window, rect.left(), rect.top(), rect.width(), rect.height()); + if (!QTest::qCompare(pixmap.size(), rect.size(), "pixmap.size()", "rect.size()", __FILE__, callerLine)) + return false; + QPixmap expectedPixmap(pixmap); /* ensure equal formats */ + expectedPixmap.detach(); + expectedPixmap.fill(color); + QImage image = pixmap.toImage(); + uint alphaCorrection = image.format() == QImage::Format_RGB32 ? 0xff000000 : 0; + uint firstPixel = image.pixel(0,0) | alphaCorrection; + if (t < 5) { + /* Normal run. + If it succeeds: return success + If it fails: do not return, but wait a bit and reiterate (retry) + */ + if (firstPixel == QColor(color).rgb() + && image == expectedPixmap.toImage()) { + return true; + } else { + if (t == 4) { + grabBackingStore = true; + rect = r.rects().at(i); + } else { + QTest::qWait(200); + } + } + } else { + // Last run, report failure if it still fails + if (!QTest::qVerify(firstPixel == QColor(color).rgb(), + "firstPixel == QColor(color).rgb()", + qPrintable(msgRgbMismatch(firstPixel, QColor(color).rgb())), + __FILE__, callerLine)) + return false; + if (!QTest::qVerify(image == expectedPixmap.toImage(), + "image == expectedPixmap.toImage()", + "grabbed pixmap differs from expected pixmap", + __FILE__, callerLine)) + return false; + } + } + } + return true; +} void tst_QWidget::popupEnterLeave() { -- cgit v1.2.3 From c8848a5e98b4298d552a077f02979f0afd33c071 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Morten=20Johan=20S=C3=B8rvig?= Date: Tue, 4 Feb 2014 22:23:54 +0100 Subject: Compile. MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Change-Id: Ib0e7e7aa2964835afda4055a5fe76abbd5db84e3 Reviewed-by: Morten Johan Sørvig --- tests/manual/cocoa/qmaccocoaviewcontainer/main.mm | 1 + 1 file changed, 1 insertion(+) (limited to 'tests') diff --git a/tests/manual/cocoa/qmaccocoaviewcontainer/main.mm b/tests/manual/cocoa/qmaccocoaviewcontainer/main.mm index d276961b93..6919562ddc 100644 --- a/tests/manual/cocoa/qmaccocoaviewcontainer/main.mm +++ b/tests/manual/cocoa/qmaccocoaviewcontainer/main.mm @@ -42,6 +42,7 @@ #import "TestMouseMovedNSView.h" #include +#include #include class MyWidget : public QWidget -- cgit v1.2.3 From a80253ae4c2ea52a8ffb77e62648374b6fc650a8 Mon Sep 17 00:00:00 2001 From: Jorgen Lind Date: Sun, 2 Feb 2014 22:29:38 +0100 Subject: QOpenGLTextureBlitter private api, but useful for 2d gui code that suddenly finds itself needing to get a set of textures onto some fbo I didn't want to include ARB_copy_image since it looks like its from texture/renderbuffer -> texture/renderbuffer while this class implies texture -> write fbo. We could wrap ARB_copy_image in QOpenGLTexture or some other class or we can add it later. I have not added any QOpenGLTexture functions since this class opperates on the GLuint identifier. We can add overloads later. Change-Id: I3e565b33466c1c183a249a33c3e82c6786debd55 Reviewed-by: Paul Olav Tvete --- tests/manual/manual.pro | 2 + tests/manual/qopengltextureblitter/main.cpp | 53 +++++++ .../qopengltextureblitter.pro | 12 ++ .../qopengltextureblitwindow.cpp | 167 +++++++++++++++++++++ .../qopengltextureblitwindow.h | 69 +++++++++ 5 files changed, 303 insertions(+) create mode 100644 tests/manual/qopengltextureblitter/main.cpp create mode 100644 tests/manual/qopengltextureblitter/qopengltextureblitter.pro create mode 100644 tests/manual/qopengltextureblitter/qopengltextureblitwindow.cpp create mode 100644 tests/manual/qopengltextureblitter/qopengltextureblitwindow.h (limited to 'tests') diff --git a/tests/manual/manual.pro b/tests/manual/manual.pro index 381922288f..c9072c4e9e 100644 --- a/tests/manual/manual.pro +++ b/tests/manual/manual.pro @@ -47,6 +47,8 @@ unc !contains(QT_CONFIG, openssl):!contains(QT_CONFIG, openssl-linked):SUBDIRS -= qssloptions +contains(QT_CONFIG, opengl):SUBDIRS += qopengltextureblitter + win32 { SUBDIRS -= network_remote_stresstest network_stresstest # disable some tests on wince because of missing dependencies diff --git a/tests/manual/qopengltextureblitter/main.cpp b/tests/manual/qopengltextureblitter/main.cpp new file mode 100644 index 0000000000..3e9c30932a --- /dev/null +++ b/tests/manual/qopengltextureblitter/main.cpp @@ -0,0 +1,53 @@ +/**************************************************************************** +** +** Copyright (C) 2014 Digia Plc and/or its subsidiary(-ies). +** Contact: http://www.qt-project.org/legal +** +** This file is part of the test suite of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:LGPL$ +** 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 Digia. For licensing terms and +** conditions see http://qt.digia.com/licensing. For further information +** use the contact form at http://qt.digia.com/contact-us. +** +** 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, Digia gives you certain additional +** rights. These rights are described in the Digia Qt LGPL Exception +** version 1.1, included in the file LGPL_EXCEPTION.txt in this package. +** +** GNU General Public License Usage +** Alternatively, this file may be used under the terms of the GNU +** General Public License version 3.0 as published by the Free Software +** Foundation and appearing in the file LICENSE.GPL included in the +** packaging of this file. Please review the following information to +** ensure the GNU General Public License version 3.0 requirements will be +** met: http://www.gnu.org/copyleft/gpl.html. +** +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +#include "qopengltextureblitwindow.h" +#include + +int main(int argc, char **argv) +{ + QGuiApplication app(argc, argv); + + QOpenGLTextureBlitWindow window; + window.show(); + + return app.exec(); +} diff --git a/tests/manual/qopengltextureblitter/qopengltextureblitter.pro b/tests/manual/qopengltextureblitter/qopengltextureblitter.pro new file mode 100644 index 0000000000..95f1c14e5a --- /dev/null +++ b/tests/manual/qopengltextureblitter/qopengltextureblitter.pro @@ -0,0 +1,12 @@ +TEMPLATE = app +TARGET = qopengltextureblitter +INCLUDEPATH += . + +QT+=gui-private +# Input +HEADERS += \ + qopengltextureblitwindow.h + +SOURCES += \ + main.cpp \ + qopengltextureblitwindow.cpp diff --git a/tests/manual/qopengltextureblitter/qopengltextureblitwindow.cpp b/tests/manual/qopengltextureblitter/qopengltextureblitwindow.cpp new file mode 100644 index 0000000000..0dac669887 --- /dev/null +++ b/tests/manual/qopengltextureblitter/qopengltextureblitwindow.cpp @@ -0,0 +1,167 @@ +/**************************************************************************** +** +** Copyright (C) 2014 Digia Plc and/or its subsidiary(-ies). +** Contact: http://www.qt-project.org/legal +** +** This file is part of the test suite of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:LGPL$ +** 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 Digia. For licensing terms and +** conditions see http://qt.digia.com/licensing. For further information +** use the contact form at http://qt.digia.com/contact-us. +** +** 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, Digia gives you certain additional +** rights. These rights are described in the Digia Qt LGPL Exception +** version 1.1, included in the file LGPL_EXCEPTION.txt in this package. +** +** GNU General Public License Usage +** Alternatively, this file may be used under the terms of the GNU +** General Public License version 3.0 as published by the Free Software +** Foundation and appearing in the file LICENSE.GPL included in the +** packaging of this file. Please review the following information to +** ensure the GNU General Public License version 3.0 requirements will be +** met: http://www.gnu.org/copyleft/gpl.html. +** +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +#include "qopengltextureblitwindow.h" + +#include +#include +#include + +#include +#include + +QOpenGLTextureBlitWindow::QOpenGLTextureBlitWindow() + : QWindow() + , m_context(new QOpenGLContext(this)) +{ + resize(500,500); + setSurfaceType(OpenGLSurface); + QSurfaceFormat surfaceFormat = format(); + if (QCoreApplication::arguments().contains(QStringLiteral("-coreprofile"))) { + surfaceFormat.setVersion(3,2); + surfaceFormat.setProfile(QSurfaceFormat::CoreProfile); + } + + setFormat(surfaceFormat); + create(); + m_context->setFormat(surfaceFormat); + m_context->create(); + + m_context->makeCurrent(this); + + m_blitter.create(); +} + +void QOpenGLTextureBlitWindow::render() +{ + m_context->makeCurrent(this); + + QRect viewport(0,0,dWidth(),dHeight()); + glViewport(0,0,dWidth(), dHeight()); + + glClearColor(0.f, .6f, .0f, 0.f); + glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT); + + QOpenGLTexture texture(m_image); + texture.create(); + + QRectF topLeft(QPointF(0,0), QPointF(dWidth()/2.0, dHeight()/2.0)); + QRectF topRight(QPointF(dWidth()/2.0,0), QPointF(dWidth(), dHeight()/2.0)); + QRectF bottomLeft(QPointF(0, dHeight()/2.0), QPointF(dWidth() /2.0, dHeight())); + QRectF bottomRight(QPoint(dWidth()/2.0, dHeight()/2.0), QPointF(dWidth(), dHeight())); + + QOpenGLTextureBlitter::Origin topLeftOrigin = QOpenGLTextureBlitter::OriginTopLeft; + QOpenGLTextureBlitter::Origin bottomLeftOrigin = QOpenGLTextureBlitter::OriginBottomLeft; + QMatrix4x4 topRightVertexFlipped = QOpenGLTextureBlitter::targetTransform(topRight, viewport, topLeftOrigin); + QMatrix4x4 bottomLeftVertex = QOpenGLTextureBlitter::targetTransform(bottomLeft, viewport, topLeftOrigin); + QMatrix4x4 bottomRightVertexFlipped = QOpenGLTextureBlitter::targetTransform(bottomRight, viewport, topLeftOrigin); + + QMatrix3x3 texTopLeft = QOpenGLTextureBlitter::sourceTransform(topLeft, m_image.size(), topLeftOrigin); + QMatrix3x3 texTopRight = QOpenGLTextureBlitter::sourceTransform(topRight, m_image.size(), topLeftOrigin); + QMatrix3x3 texBottomLeft = QOpenGLTextureBlitter::sourceTransform(bottomLeft, m_image.size(), topLeftOrigin); + QMatrix3x3 texBottomRight = QOpenGLTextureBlitter::sourceTransform(bottomRight, m_image.size(), bottomLeftOrigin); + + QSizeF subSize(topLeft.width()/2, topLeft.height()/2); + QRectF subTopLeft(topLeft.topLeft(), subSize); + QRectF subTopRight(QPointF(topLeft.topLeft().x() + topLeft.width() / 2, topLeft.topLeft().y()),subSize); + QRectF subBottomLeft(QPointF(topLeft.topLeft().x(), topLeft.topLeft().y() + topLeft.height() / 2), subSize); + QRectF subBottomRight(QPointF(topLeft.topLeft().x() + topLeft.width() / 2, topLeft.topLeft().y() + topLeft.height() / 2), subSize); + + QMatrix4x4 subTopLeftVertex = QOpenGLTextureBlitter::targetTransform(subTopLeft, viewport, topLeftOrigin); + QMatrix4x4 subTopRightVertex = QOpenGLTextureBlitter::targetTransform(subTopRight, viewport, topLeftOrigin); + QMatrix4x4 subBottomLeftVertex = QOpenGLTextureBlitter::targetTransform(subBottomLeft, viewport, topLeftOrigin); + QMatrix4x4 subBottomRightVertex = QOpenGLTextureBlitter::targetTransform(subBottomRight, viewport, topLeftOrigin); + + m_blitter.bind(); + m_blitter.blit(texture.textureId(), subTopLeftVertex, texBottomRight); + m_blitter.blit(texture.textureId(), subTopRightVertex, texBottomLeft); + m_blitter.blit(texture.textureId(), subBottomLeftVertex, texTopRight); + m_blitter.blit(texture.textureId(), subBottomRightVertex, texTopLeft); + + m_blitter.blit(texture.textureId(), topRightVertexFlipped, topLeftOrigin); + m_blitter.blit(texture.textureId(), bottomLeftVertex, bottomLeftOrigin); + + m_blitter.setSwizzleRB(true); + m_blitter.blit(texture.textureId(), bottomRightVertexFlipped, texTopLeft); + m_blitter.setSwizzleRB(false); + m_blitter.release(); + + m_context->swapBuffers(this); +} + + +void QOpenGLTextureBlitWindow::exposeEvent(QExposeEvent *event) +{ + Q_UNUSED(event); + render(); +} + +void QOpenGLTextureBlitWindow::resizeEvent(QResizeEvent *event) +{ + Q_UNUSED(event); + m_image = QImage(size() * devicePixelRatio(), QImage::Format_ARGB32_Premultiplied); + + m_image.fill(Qt::gray); + + QPainter p(&m_image); + + QPen pen(Qt::red); + pen.setWidth(5); + p.setPen(pen); + + QFont font = p.font(); + font.setPixelSize(qMin(m_image.height(), m_image.width()) / 20); + p.setFont(font); + + int dx = dWidth() / 5; + int dy = dHeight() / 5; + for (int y = 0; y < 5; y++) { + for (int x = 0; x < 5; x++) { + QRect textRect(x * dx, y*dy, dx,dy); + QString text = QString("[%1,%2]").arg(x).arg(y); + p.drawText(textRect,text); + } + } + + p.drawRect(QRectF(2.5,2.5,dWidth() - 5, dHeight() - 5)); + +} + diff --git a/tests/manual/qopengltextureblitter/qopengltextureblitwindow.h b/tests/manual/qopengltextureblitter/qopengltextureblitwindow.h new file mode 100644 index 0000000000..855e173b1a --- /dev/null +++ b/tests/manual/qopengltextureblitter/qopengltextureblitwindow.h @@ -0,0 +1,69 @@ +/**************************************************************************** +** +** Copyright (C) 2014 Digia Plc and/or its subsidiary(-ies). +** Contact: http://www.qt-project.org/legal +** +** This file is part of the test suite of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:LGPL$ +** 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 Digia. For licensing terms and +** conditions see http://qt.digia.com/licensing. For further information +** use the contact form at http://qt.digia.com/contact-us. +** +** 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, Digia gives you certain additional +** rights. These rights are described in the Digia Qt LGPL Exception +** version 1.1, included in the file LGPL_EXCEPTION.txt in this package. +** +** GNU General Public License Usage +** Alternatively, this file may be used under the terms of the GNU +** General Public License version 3.0 as published by the Free Software +** Foundation and appearing in the file LICENSE.GPL included in the +** packaging of this file. Please review the following information to +** ensure the GNU General Public License version 3.0 requirements will be +** met: http://www.gnu.org/copyleft/gpl.html. +** +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +#ifndef QOPENGLTEXTUREBLITWINDOW_H +#define QOPENGLTEXTUREBLITWINDOW_H + +#include +#include +#include + +class QOpenGLTextureBlitWindow : public QWindow +{ + Q_OBJECT +public: + QOpenGLTextureBlitWindow(); + + void render(); +protected: + void exposeEvent(QExposeEvent *event); + void resizeEvent(QResizeEvent *event); + +private: + qreal dWidth() const { return width() * devicePixelRatio(); } + qreal dHeight() const { return height() * devicePixelRatio(); } + + QScopedPointer m_context; + QOpenGLTextureBlitter m_blitter; + QImage m_image; +}; + +#endif -- cgit v1.2.3 From d61e7743078197f7409e863ff1d2243da7d0335f Mon Sep 17 00:00:00 2001 From: Giorgos Tsiapaliokas Date: Fri, 29 Nov 2013 15:21:03 +0200 Subject: Print qCDebugs in arbitrary categories by default The debug output of all categories will be visible by default, except from the "qt.*" categories. "qt.*" categories are private and their default debug output will be hidden. [ChangeLog][QtCore][Logging] Enable qCDebug's for all categories except qt one's Change-Id: Ibe147c8bbe0835a63b3de782288b9c3251321d8f Reviewed-by: Kai Koehne --- .../io/qloggingcategory/tst_qloggingcategory.cpp | 34 ++++++++++++---------- 1 file changed, 19 insertions(+), 15 deletions(-) (limited to 'tests') diff --git a/tests/auto/corelib/io/qloggingcategory/tst_qloggingcategory.cpp b/tests/auto/corelib/io/qloggingcategory/tst_qloggingcategory.cpp index 26f10385b3..47a5d6044e 100644 --- a/tests/auto/corelib/io/qloggingcategory/tst_qloggingcategory.cpp +++ b/tests/auto/corelib/io/qloggingcategory/tst_qloggingcategory.cpp @@ -271,8 +271,8 @@ private slots: QCOMPARE(defaultCategory.isEnabled(QtCriticalMsg), true); QLoggingCategory customCategory("custom"); - QCOMPARE(customCategory.isDebugEnabled(), false); - QCOMPARE(customCategory.isEnabled(QtDebugMsg), false); + QCOMPARE(customCategory.isDebugEnabled(), true); + QCOMPARE(customCategory.isEnabled(QtDebugMsg), true); QCOMPARE(customCategory.isWarningEnabled(), true); QCOMPARE(customCategory.isEnabled(QtWarningMsg), true); QCOMPARE(customCategory.isCriticalEnabled(), true); @@ -309,7 +309,7 @@ private slots: QLoggingCategory cat("custom"); QCOMPARE(customCategoryFilterArgs, QStringList() << "custom"); - QVERIFY(cat.isDebugEnabled()); + QVERIFY(!cat.isDebugEnabled()); customCategoryFilterArgs.clear(); // install default filter @@ -319,7 +319,7 @@ private slots: QCOMPARE(customCategoryFilterArgs.size(), 0); QVERIFY(QLoggingCategory::defaultCategory()->isDebugEnabled()); - QVERIFY(!cat.isDebugEnabled()); + QVERIFY(cat.isDebugEnabled()); // install default filter currentFilter = @@ -328,7 +328,7 @@ private slots: QCOMPARE(customCategoryFilterArgs.size(), 0); QVERIFY(QLoggingCategory::defaultCategory()->isDebugEnabled()); - QVERIFY(!cat.isDebugEnabled()); + QVERIFY(cat.isDebugEnabled()); } void qDebugMacros() @@ -397,8 +397,12 @@ private slots: QLoggingCategory customCategory("custom"); // Check custom debug logMessage.clear(); + buf = QStringLiteral("custom.debug: Check debug with no filter active"); + qCDebug(customCategory, "Check debug with no filter active"); + QCOMPARE(logMessage, buf); + qCDebug(customCategory) << "Check debug with no filter active"; - QCOMPARE(logMessage, QString()); + QCOMPARE(logMessage, buf); // Check custom warning buf = QStringLiteral("custom.warning: Check warning with no filter active"); @@ -414,16 +418,16 @@ private slots: QLoggingCategory::installFilter(customCategoryFilter); // Check custom debug - buf = QStringLiteral("custom.debug: Check debug with filter active"); + logMessage.clear(); qCDebug(customCategory) << "Check debug with filter active"; - QCOMPARE(logMessage, buf); + QCOMPARE(logMessage, QString()); // Check different macro/category variants buf = QStringLiteral("tst.log.debug: Check debug with no filter active"); qCDebug(TST_LOG) << "Check debug with no filter active"; - QCOMPARE(logMessage, buf); + QCOMPARE(logMessage, QString()); qCDebug(TST_LOG, "Check debug with no filter active"); - QCOMPARE(logMessage, buf); + QCOMPARE(logMessage, QString()); buf = QStringLiteral("tst.log.warning: Check warning with no filter active"); qCWarning(TST_LOG) << "Check warning with no filter active"; QCOMPARE(logMessage, buf); @@ -441,8 +445,9 @@ private slots: // Check custom debug logMessage.clear(); + buf = QStringLiteral("custom.debug: Check debug with no filter active"); qCDebug(customCategory) << "Check debug with no filter active"; - QCOMPARE(logMessage, QString()); + QCOMPARE(logMessage, buf); } void checkLegacyMessageLogger() @@ -477,11 +482,11 @@ private slots: QCOMPARE(cleanLogLine(logMessage), cleanLogLine(buf)); // Check category debug - logMessage = "should not change"; - buf = logMessage; + buf = QStringLiteral("tst.log.debug: Check category Debug with no log active"); qCDebug(TST_LOG) << "Check category Debug with no log active"; QCOMPARE(logMessage, buf); + // Check default warning buf = QStringLiteral("tst.log.warning: Check category Warning with no log active"); qCWarning(TST_LOG) << "Check category Warning with no log active"; @@ -763,8 +768,7 @@ private slots: { // "" -> custom category QLoggingCategory mycategoryobject1(""); - logMessage = "no change"; - QString buf = QStringLiteral("no change"); + QString buf = QStringLiteral(".debug: My Category Object"); qCDebug(mycategoryobject1) << "My Category Object"; QCOMPARE(cleanLogLine(logMessage), cleanLogLine(buf)); -- cgit v1.2.3 From 42cfb5fe4daa586f382bde6936b0ee33b5298f4d Mon Sep 17 00:00:00 2001 From: Peter Hartmann Date: Wed, 28 Aug 2013 10:56:24 +0200 Subject: SSL: add support for the Next Protocol Negotiation extension ... which is needed to negotiate the SPDY protocol. [ChangeLog][QtNetwork][QSslConfiguration] Added support for the Next Protocol Negotiation (NPN) TLS extension. Task-number: QTBUG-33208 Change-Id: I3c945f9b7e2d2ffb0814bfdd3e87de1dae6c20ef Reviewed-by: Allan Sandfeld Jensen --- tests/manual/manual.pro | 1 + tests/manual/qsslsocket/main.cpp | 164 +++++++++++++++++++++++++++++++++ tests/manual/qsslsocket/qsslsocket.pro | 6 ++ 3 files changed, 171 insertions(+) create mode 100644 tests/manual/qsslsocket/main.cpp create mode 100644 tests/manual/qsslsocket/qsslsocket.pro (limited to 'tests') diff --git a/tests/manual/manual.pro b/tests/manual/manual.pro index c9072c4e9e..62722ea62b 100644 --- a/tests/manual/manual.pro +++ b/tests/manual/manual.pro @@ -25,6 +25,7 @@ qnetworkreply \ qpainfo \ qscreen \ qssloptions \ +qsslsocket \ qtabletevent \ qtexteditlist \ qtbug-8933 \ diff --git a/tests/manual/qsslsocket/main.cpp b/tests/manual/qsslsocket/main.cpp new file mode 100644 index 0000000000..67726b5897 --- /dev/null +++ b/tests/manual/qsslsocket/main.cpp @@ -0,0 +1,164 @@ +/**************************************************************************** +** +** Copyright (C) 2014 BlackBerry Limited. All rights reserved. +** Contact: http://www.qt-project.org/legal +** +** This file is part of the test suite of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:LGPL$ +** 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 Digia. For licensing terms and +** conditions see http://qt.digia.com/licensing. For further information +** use the contact form at http://qt.digia.com/contact-us. +** +** 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, Digia gives you certain additional +** rights. These rights are described in the Digia Qt LGPL Exception +** version 1.1, included in the file LGPL_EXCEPTION.txt in this package. +** +** GNU General Public License Usage +** Alternatively, this file may be used under the terms of the GNU +** General Public License version 3.0 as published by the Free Software +** Foundation and appearing in the file LICENSE.GPL included in the +** packaging of this file. Please review the following information to +** ensure the GNU General Public License version 3.0 requirements will be +** met: http://www.gnu.org/copyleft/gpl.html. +** +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + + +#include +#include +#include + +#ifndef QT_NO_SSL +Q_DECLARE_METATYPE(QSslConfiguration::NextProtocolNegotiationStatus) +#endif + +class tst_QSslSocket : public QObject +{ + Q_OBJECT + +#ifndef QT_NO_SSL +private slots: + void nextProtocolNegotiation_data(); + void nextProtocolNegotiation(); +#endif // QT_NO_SSL +}; + +#ifndef QT_NO_SSL +void tst_QSslSocket::nextProtocolNegotiation_data() +{ + QTest::addColumn("setConfiguration"); + QTest::addColumn("host"); + QTest::addColumn >("allowedProtocols"); + QTest::addColumn("expectedProtocol"); + QTest::addColumn("expectedStatus"); + + QList hosts = QList() + << QStringLiteral("www.google.com") + << QStringLiteral("www.facebook.com") + << QStringLiteral("www.twitter.com") + << QStringLiteral("graph.facebook.com") + << QStringLiteral("api.twitter.com"); + + foreach (QString host, hosts) { + QByteArray tag = host.toLocal8Bit(); + tag.append("-none"); + QTest::newRow(tag) + << false + << host + << QList() + << QByteArray() + << QSslConfiguration::NextProtocolNegotiationNone; + + tag = host.toLocal8Bit(); + tag.append("-none-explicit"); + QTest::newRow(tag) + << true + << host + << QList() + << QByteArray() + << QSslConfiguration::NextProtocolNegotiationNone; + + tag = host.toLocal8Bit(); + tag.append("-http/1.1"); + QTest::newRow(tag) + << true + << host + << (QList() << QSslConfiguration::NextProtocolHttp1_1) + << QByteArray(QSslConfiguration::NextProtocolHttp1_1) + << QSslConfiguration::NextProtocolNegotiationNegotiated; + + tag = host.toLocal8Bit(); + tag.append("-spdy/3"); + QTest::newRow(tag) + << true + << host + << (QList() << QSslConfiguration::NextProtocolSpdy3_0) + << QByteArray(QSslConfiguration::NextProtocolSpdy3_0) + << QSslConfiguration::NextProtocolNegotiationNegotiated; + + tag = host.toLocal8Bit(); + tag.append("-spdy/3-and-http/1.1"); + QTest::newRow(tag) + << true + << host + << (QList() << QSslConfiguration::NextProtocolSpdy3_0 << QSslConfiguration::NextProtocolHttp1_1) + << QByteArray(QSslConfiguration::NextProtocolSpdy3_0) + << QSslConfiguration::NextProtocolNegotiationNegotiated; + } +} + +void tst_QSslSocket::nextProtocolNegotiation() +{ + if (!QSslSocket::supportsSsl()) + return; + + QSslSocket socket; + + QFETCH(bool, setConfiguration); + + if (setConfiguration) { + QSslConfiguration conf = socket.sslConfiguration(); + QFETCH(QList, allowedProtocols); + conf.setAllowedNextProtocols(allowedProtocols); + socket.setSslConfiguration(conf); + } + + QFETCH(QString, host); + + socket.connectToHostEncrypted(host, 443); + socket.ignoreSslErrors(); + + QVERIFY(socket.waitForEncrypted(10000)); + + QFETCH(QByteArray, expectedProtocol); + QCOMPARE(socket.sslConfiguration().nextNegotiatedProtocol(), expectedProtocol); + + QFETCH(QSslConfiguration::NextProtocolNegotiationStatus, expectedStatus); + QCOMPARE(socket.sslConfiguration().nextProtocolNegotiationStatus(), expectedStatus); + + socket.disconnectFromHost(); + QVERIFY(socket.waitForDisconnected()); + +} + +#endif // QT_NO_SSL + +QTEST_MAIN(tst_QSslSocket) + +#include "main.moc" diff --git a/tests/manual/qsslsocket/qsslsocket.pro b/tests/manual/qsslsocket/qsslsocket.pro new file mode 100644 index 0000000000..c297d887ba --- /dev/null +++ b/tests/manual/qsslsocket/qsslsocket.pro @@ -0,0 +1,6 @@ +CONFIG += testcase + +SOURCES += main.cpp +QT = core network testlib + +TARGET = tst_qsslsocket -- cgit v1.2.3 From a2bfd114938e1fdd5067f2dac812a8d3a5d89fd3 Mon Sep 17 00:00:00 2001 From: Kai Koehne Date: Tue, 4 Feb 2014 16:35:26 +0100 Subject: Allow configuration of logging rules from file system Allow configuration of logging rules from outside of the application, either through a configuration file (.config/QtProject/qtlogging.ini), or through a file specified by a QT_LOGGING_CONF environment variable. The logging rules from the different sources are concatenated: First the rules from QtProject/qtlogging.ini are applied, then QLoggingCategory::setLoggingRules(), finally from the environment. This allows an application to overwrite/augment the system wide rules, and in turn that can be tailored for a specific run by setting a configuration in the environment variable. [ChangeLog][QtCore][Logging] The logging framework can now be configured with an .ini file. Change-Id: I442efde1b7e0a2ebe135c6f6e0a4b656483fe4b1 Reviewed-by: Thiago Macieira --- tests/auto/corelib/io/io.pro | 4 +- .../io/qloggingregistry/qloggingregistry.pro | 8 + .../auto/corelib/io/qloggingregistry/qtlogging.ini | 2 + .../io/qloggingregistry/tst_qloggingregistry.cpp | 179 +++++++++++++++++++++ 4 files changed, 192 insertions(+), 1 deletion(-) create mode 100644 tests/auto/corelib/io/qloggingregistry/qloggingregistry.pro create mode 100644 tests/auto/corelib/io/qloggingregistry/qtlogging.ini create mode 100644 tests/auto/corelib/io/qloggingregistry/tst_qloggingregistry.cpp (limited to 'tests') diff --git a/tests/auto/corelib/io/io.pro b/tests/auto/corelib/io/io.pro index 259463f976..ba055a4f3f 100644 --- a/tests/auto/corelib/io/io.pro +++ b/tests/auto/corelib/io/io.pro @@ -17,6 +17,7 @@ SUBDIRS=\ qipaddress \ qlockfile \ qloggingcategory \ + qloggingregistry \ qnodebug \ qprocess \ qprocess-noapplication \ @@ -51,7 +52,8 @@ SUBDIRS=\ qabstractfileengine \ qfileinfo \ qipaddress \ - qurlinternal + qurlinternal \ + qloggingregistry win32:!contains(QT_CONFIG, private_tests): SUBDIRS -= \ qfilesystementry diff --git a/tests/auto/corelib/io/qloggingregistry/qloggingregistry.pro b/tests/auto/corelib/io/qloggingregistry/qloggingregistry.pro new file mode 100644 index 0000000000..c6c4caace3 --- /dev/null +++ b/tests/auto/corelib/io/qloggingregistry/qloggingregistry.pro @@ -0,0 +1,8 @@ +TEMPLATE = app +TARGET = tst_qloggingregistry + +CONFIG += testcase +QT = core core-private testlib + +SOURCES += tst_qloggingregistry.cpp +OTHER_FILES += qtlogging.ini diff --git a/tests/auto/corelib/io/qloggingregistry/qtlogging.ini b/tests/auto/corelib/io/qloggingregistry/qtlogging.ini new file mode 100644 index 0000000000..63b384e36a --- /dev/null +++ b/tests/auto/corelib/io/qloggingregistry/qtlogging.ini @@ -0,0 +1,2 @@ +[rules] +*=true diff --git a/tests/auto/corelib/io/qloggingregistry/tst_qloggingregistry.cpp b/tests/auto/corelib/io/qloggingregistry/tst_qloggingregistry.cpp new file mode 100644 index 0000000000..b538525161 --- /dev/null +++ b/tests/auto/corelib/io/qloggingregistry/tst_qloggingregistry.cpp @@ -0,0 +1,179 @@ +/**************************************************************************** +** +** Copyright (C) 2014 Digia Plc and/or its subsidiary(-ies). +** Contact: http://www.qt-project.org/legal +** +** This file is part of the test suite of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:LGPL$ +** 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 Digia. For licensing terms and +** conditions see http://qt.digia.com/licensing. For further information +** use the contact form at http://qt.digia.com/contact-us. +** +** 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, Digia gives you certain additional +** rights. These rights are described in the Digia Qt LGPL Exception +** version 1.1, included in the file LGPL_EXCEPTION.txt in this package. +** +** GNU General Public License Usage +** Alternatively, this file may be used under the terms of the GNU +** General Public License version 3.0 as published by the Free Software +** Foundation and appearing in the file LICENSE.GPL included in the +** packaging of this file. Please review the following information to +** ensure the GNU General Public License version 3.0 requirements will be +** met: http://www.gnu.org/copyleft/gpl.html. +** +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +#include +#include + +#include + +QT_USE_NAMESPACE + +class tst_QLoggingRegistry : public QObject +{ + Q_OBJECT + +private slots: + + void initTestCase() + { + // ensure a clean environment + QStandardPaths::setTestModeEnabled(true); + qunsetenv("QT_LOGGING_CONF"); + } + + void QLoggingSettingsParser_iniStyle() + { + // + // Logging configuration can be described + // in an .ini file. [rules] is the + // default category, and optional ... + // + QLoggingSettingsParser parser; + parser.setContent("[rules]\n" + "default=false\n" + "default=true"); + QCOMPARE(parser.rules().size(), 2); + + parser.setContent("[rules]\n" + "default=false"); + QCOMPARE(parser.rules().size(), 1); + + parser.setContent("[OtherSection]\n" + "default=false"); + QCOMPARE(parser.rules().size(), 0); + } + + void QLoggingRegistry_environment() + { + // + // Check whether QT_LOGGING_CONF is picked up from environment + // + + qputenv("QT_LOGGING_CONF", QFINDTESTDATA("qtlogging.ini").toLocal8Bit()); + + QLoggingRegistry registry; + registry.init(); + + QCOMPARE(registry.apiRules.size(), 0); + QCOMPARE(registry.configRules.size(), 0); + QCOMPARE(registry.envRules.size(), 1); + + QCOMPARE(registry.rules.size(), 1); + } + + void QLoggingRegistry_config() + { + // + // Check whether QtProject/qtlogging.ini is loaded automatically + // + + // first try to create a test file.. + QString path = QStandardPaths::writableLocation(QStandardPaths::GenericConfigLocation); + QVERIFY(!path.isEmpty()); + QDir dir(path + "/QtProject"); + if (!dir.exists()) + QVERIFY(dir.mkpath(path + "/QtProject")); + + QFile file(dir.absoluteFilePath("qtlogging.ini")); + QVERIFY(file.open(QFile::WriteOnly | QFile::Text)); + QTextStream out(&file); + out << "[rules]\n"; + out << "Digia.*=false\n"; + file.close(); + + QLoggingRegistry registry; + registry.init(); + QCOMPARE(registry.configRules.size(), 1); + + // remove file again + QVERIFY(file.remove()); + } + + void QLoggingRegistry_rulePriorities() + { + // + // Rules can stem from 3 sources: + // via QLoggingCategory::setFilterRules (API) + // via qtlogging.ini file in settings (Config) + // via QT_LOGGING_CONF environment variable (Env) + // + // Rules set by environment should get higher precedence than qtlogging.conf, + // than QLoggingCategory::setFilterRules + // + + QLoggingCategory cat("Digia.Berlin"); + QLoggingRegistry *registry = QLoggingRegistry::instance(); + + // empty all rules , check default + registry->rules.clear(); + registry->apiRules.clear(); + registry->configRules.clear(); + registry->envRules.clear(); + registry->updateRules(); + + QVERIFY(cat.isWarningEnabled()); + + // set Config rule + QLoggingSettingsParser parser; + parser.setContent("[rules]\nDigia.*=false"); + registry->configRules=parser.rules(); + registry->updateRules(); + + QVERIFY(!cat.isWarningEnabled()); + + // set API rule, should overwrite API one + QLoggingCategory::setFilterRules("Digia.*=true"); + + QVERIFY(cat.isWarningEnabled()); + + // set Env rule, should overwrite Config one + parser.setContent("Digia.*=false"); + registry->envRules=parser.rules(); + registry->updateRules(); + + QVERIFY(!cat.isWarningEnabled()); + } + +}; + +QTEST_MAIN(tst_QLoggingRegistry) + +#include "tst_qloggingregistry.moc" -- cgit v1.2.3 From 5ae5bebb93ec38e17c0dcb9bec47e0ebfbce4937 Mon Sep 17 00:00:00 2001 From: Friedemann Kleint Date: Thu, 6 Feb 2014 16:16:07 +0100 Subject: Added function returning build information to QLibraryInfo. Useful for bug reports and test logs. [ChangeLog][QtCore] QLibraryInfo provides information on how Qt was built. Change-Id: I867197fd7d2e10bcdf01a8eb47c9c1e03647e2c1 Reviewed-by: Thiago Macieira --- tests/manual/qpainfo/main.cpp | 4 +--- 1 file changed, 1 insertion(+), 3 deletions(-) (limited to 'tests') diff --git a/tests/manual/qpainfo/main.cpp b/tests/manual/qpainfo/main.cpp index 257b340467..c51ca6323b 100644 --- a/tests/manual/qpainfo/main.cpp +++ b/tests/manual/qpainfo/main.cpp @@ -116,10 +116,8 @@ int main(int argc, char **argv) QGuiApplication app(argc, argv); const QPlatformIntegration *platformIntegration = QGuiApplicationPrivate::platformIntegration(); - std::cout << "Qt " << QT_VERSION_STR << " on \"" << QGuiApplication::platformName().toStdString() << "\" " - << QSysInfo::WordSize << " bit/" + std::cout << QLibraryInfo::build() << " on \"" << QGuiApplication::platformName().toStdString() << "\" " << (QSysInfo::ByteOrder == QSysInfo::LittleEndian ? "little endian" : "big endian") << '/' - << (QLibraryInfo::isDebugBuild() ? "debug" : "release") << '\n'; #if defined(Q_OS_WIN) -- cgit v1.2.3 From eacd58d4e78e7238ba5fcca90ba960aaf3ebd263 Mon Sep 17 00:00:00 2001 From: Paul Olav Tvete Date: Wed, 18 Dec 2013 14:48:22 +0100 Subject: Enabling QQuickWidget and QOpenGLWidget MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Enable child widgets (without a native window) that render to an FBO and are composed with the raster backingstore by the platform plugin. A preliminary version of QOpenGLWidget is included as private API. Change-Id: I8f984a4d7db285069ce3d6564707942c823d890d Reviewed-by: Jørgen Lind --- tests/manual/qopenglwidget/openglwidget/main.cpp | 73 ++++++++ .../qopenglwidget/openglwidget/openglwidget.cpp | 193 +++++++++++++++++++++ .../qopenglwidget/openglwidget/openglwidget.h | 63 +++++++ .../qopenglwidget/openglwidget/openglwidget.pro | 9 + 4 files changed, 338 insertions(+) create mode 100644 tests/manual/qopenglwidget/openglwidget/main.cpp create mode 100644 tests/manual/qopenglwidget/openglwidget/openglwidget.cpp create mode 100644 tests/manual/qopenglwidget/openglwidget/openglwidget.h create mode 100644 tests/manual/qopenglwidget/openglwidget/openglwidget.pro (limited to 'tests') diff --git a/tests/manual/qopenglwidget/openglwidget/main.cpp b/tests/manual/qopenglwidget/openglwidget/main.cpp new file mode 100644 index 0000000000..68f9be7199 --- /dev/null +++ b/tests/manual/qopenglwidget/openglwidget/main.cpp @@ -0,0 +1,73 @@ +/**************************************************************************** +** +** Copyright (C) 2013 Digia Plc and/or its subsidiary(-ies). +** Contact: http://www.qt-project.org/legal +** +** This file is part of the test suite of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:LGPL$ +** 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 Digia. For licensing terms and +** conditions see http://qt.digia.com/licensing. For further information +** use the contact form at http://qt.digia.com/contact-us. +** +** 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, Digia gives you certain additional +** rights. These rights are described in the Digia Qt LGPL Exception +** version 1.1, included in the file LGPL_EXCEPTION.txt in this package. +** +** GNU General Public License Usage +** Alternatively, this file may be used under the terms of the GNU +** General Public License version 3.0 as published by the Free Software +** Foundation and appearing in the file LICENSE.GPL included in the +** packaging of this file. Please review the following information to +** ensure the GNU General Public License version 3.0 requirements will be +** met: http://www.gnu.org/copyleft/gpl.html. +** +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +#include "openglwidget.h" +#include +#include +#include +#include +#include + + +int main(int argc, char *argv[]) +{ + QApplication a(argc, argv); + + QMdiArea w; + w.resize(400,400); + + OpenGLWidget *glw = new OpenGLWidget; + w.addSubWindow(glw); + glw->setMinimumSize(100,100); + + OpenGLWidget *glw2 = new OpenGLWidget; + glw2->setMinimumSize(100,100); + w.addSubWindow(glw2); + + QLCDNumber *lcd = new QLCDNumber; + lcd->display(1337); + lcd->setMinimumSize(300,100); + w.addSubWindow(lcd); + + w.show(); + + return a.exec(); +} diff --git a/tests/manual/qopenglwidget/openglwidget/openglwidget.cpp b/tests/manual/qopenglwidget/openglwidget/openglwidget.cpp new file mode 100644 index 0000000000..09e0dd5419 --- /dev/null +++ b/tests/manual/qopenglwidget/openglwidget/openglwidget.cpp @@ -0,0 +1,193 @@ +/**************************************************************************** +** +** Copyright (C) 2013 Digia Plc and/or its subsidiary(-ies). +** Contact: http://www.qt-project.org/legal +** +** This file is part of the test suite of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:LGPL$ +** 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 Digia. For licensing terms and +** conditions see http://qt.digia.com/licensing. For further information +** use the contact form at http://qt.digia.com/contact-us. +** +** 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, Digia gives you certain additional +** rights. These rights are described in the Digia Qt LGPL Exception +** version 1.1, included in the file LGPL_EXCEPTION.txt in this package. +** +** GNU General Public License Usage +** Alternatively, this file may be used under the terms of the GNU +** General Public License version 3.0 as published by the Free Software +** Foundation and appearing in the file LICENSE.GPL included in the +** packaging of this file. Please review the following information to +** ensure the GNU General Public License version 3.0 requirements will be +** met: http://www.gnu.org/copyleft/gpl.html. +** +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +#define GL_GLEXT_PROTOTYPES + +#include "openglwidget.h" +#include +#include +#include +#include +#include +#include + +#include +#include +#include +#include +#include + +#include +#include + +#include + +class OpenGLWidgetPrivate +{ +public: + OpenGLWidgetPrivate() + : m_program(0), m_frame(0) + { + + } + + void initialize(); + void render(); + + + int width() {return w;} + int height() {return h;} + + GLuint m_posAttr; + GLuint m_colAttr; + GLuint m_matrixUniform; + + QOpenGLShaderProgram *m_program; + int m_frame; + + int w,h; +}; + + +OpenGLWidget::OpenGLWidget(QWidget *parent) + : QOpenGLWidget(parent) +{ + d = new OpenGLWidgetPrivate; + QTimer *timer = new QTimer(this); + connect(timer, SIGNAL(timeout()), this, SLOT(updateGL())); + timer->start(30); +} + +OpenGLWidget::~OpenGLWidget() +{ + +} + +void OpenGLWidget::initializeGL() +{ +// qDebug("*initializeGL*"); + d->initialize(); +} + +void OpenGLWidget::resizeGL(int w, int h) +{ +// qDebug("*resizeGL*"); + d->w = w; + d->h = h; +} +void OpenGLWidget::paintGL() +{ +// qDebug("*paintGL* %d", d->m_frame); + d->render(); +} + + +static const char *vertexShaderSource = + "attribute highp vec4 posAttr;\n" + "attribute lowp vec4 colAttr;\n" + "varying lowp vec4 col;\n" + "uniform highp mat4 matrix;\n" + "void main() {\n" + " col = colAttr;\n" + " gl_Position = matrix * posAttr;\n" + "}\n"; + +static const char *fragmentShaderSource = + "varying lowp vec4 col;\n" + "void main() {\n" + " gl_FragColor = col;\n" + "}\n"; + +void OpenGLWidgetPrivate::initialize() +{ + m_program = new QOpenGLShaderProgram; + m_program->addShaderFromSourceCode(QOpenGLShader::Vertex, vertexShaderSource); + m_program->addShaderFromSourceCode(QOpenGLShader::Fragment, fragmentShaderSource); + m_program->link(); + m_posAttr = m_program->attributeLocation("posAttr"); + m_colAttr = m_program->attributeLocation("colAttr"); + m_matrixUniform = m_program->uniformLocation("matrix"); +} + +void OpenGLWidgetPrivate::render() +{ + const qreal retinaScale = 1.0;//devicePixelRatio(); + glViewport(0, 0, width() * retinaScale, height() * retinaScale); + + glClearColor(0.0, 0.0, 0.0, 1.0); + glClear(GL_COLOR_BUFFER_BIT); + + m_program->bind(); + + QMatrix4x4 matrix; + matrix.perspective(60, 4.0/3.0, 0.1, 100.0); + matrix.translate(0, 0, -2); + matrix.rotate(100.0f * m_frame / 30/*screen()->refreshRate()*/, 0, 1, 0); + + m_program->setUniformValue(m_matrixUniform, matrix); + + GLfloat vertices[] = { + 0.0f, 0.707f, + -0.5f, -0.5f, + 0.5f, -0.5f + }; + + GLfloat colors[] = { + 1.0f, 0.0f, 0.0f, + 0.0f, 1.0f, 0.0f, + 0.0f, 0.0f, 1.0f + }; + + glVertexAttribPointer(m_posAttr, 2, GL_FLOAT, GL_FALSE, 0, vertices); + glVertexAttribPointer(m_colAttr, 3, GL_FLOAT, GL_FALSE, 0, colors); + + glEnableVertexAttribArray(0); + glEnableVertexAttribArray(1); + + glDrawArrays(GL_TRIANGLES, 0, 3); + + glDisableVertexAttribArray(1); + glDisableVertexAttribArray(0); + + m_program->release(); + + ++m_frame; +} diff --git a/tests/manual/qopenglwidget/openglwidget/openglwidget.h b/tests/manual/qopenglwidget/openglwidget/openglwidget.h new file mode 100644 index 0000000000..eaba27df26 --- /dev/null +++ b/tests/manual/qopenglwidget/openglwidget/openglwidget.h @@ -0,0 +1,63 @@ +/**************************************************************************** +** +** Copyright (C) 2013 Digia Plc and/or its subsidiary(-ies). +** Contact: http://www.qt-project.org/legal +** +** This file is part of the test suite of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:LGPL$ +** 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 Digia. For licensing terms and +** conditions see http://qt.digia.com/licensing. For further information +** use the contact form at http://qt.digia.com/contact-us. +** +** 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, Digia gives you certain additional +** rights. These rights are described in the Digia Qt LGPL Exception +** version 1.1, included in the file LGPL_EXCEPTION.txt in this package. +** +** GNU General Public License Usage +** Alternatively, this file may be used under the terms of the GNU +** General Public License version 3.0 as published by the Free Software +** Foundation and appearing in the file LICENSE.GPL included in the +** packaging of this file. Please review the following information to +** ensure the GNU General Public License version 3.0 requirements will be +** met: http://www.gnu.org/copyleft/gpl.html. +** +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +#ifndef OPENGLWIDGET_H +#define OPENGLWIDGET_H + +#include + +class OpenGLWidgetPrivate; +class OpenGLWidget : public QOpenGLWidget +{ + Q_OBJECT +public: + OpenGLWidget(QWidget *parent = 0); + ~OpenGLWidget(); + + void initializeGL(); + void resizeGL(int w, int h); + void paintGL(); + +private: + OpenGLWidgetPrivate *d; +}; + +#endif // OPENGLWIDGET_H diff --git a/tests/manual/qopenglwidget/openglwidget/openglwidget.pro b/tests/manual/qopenglwidget/openglwidget/openglwidget.pro new file mode 100644 index 0000000000..63d877e7b0 --- /dev/null +++ b/tests/manual/qopenglwidget/openglwidget/openglwidget.pro @@ -0,0 +1,9 @@ +QT += widgets widgets-private gui-private core-private + +TARGET = openglwidget +TEMPLATE = app + +SOURCES += main.cpp \ + openglwidget.cpp + +HEADERS += openglwidget.h -- cgit v1.2.3 From bf82245bafad25403aeb7129ebe1fc419c6f4ad9 Mon Sep 17 00:00:00 2001 From: David Faure Date: Thu, 30 Jan 2014 21:59:41 +0100 Subject: Restore support for -title command line argument on X11, add -qwindowtitle. -title disappeared between Qt4 and Qt5, due to all the refactorings around QPA. Making the caption of the mainwindow configurable allows custom setups for specific users or use cases. [ChangeLog][QtGui][QGuiApplication] Restore support for -title command line argument on X11, add -qwindowtitle on all platforms. Change-Id: I73e6bf21248f3419178eba583b257172a175e74e Reviewed-by: Friedemann Kleint Reviewed-by: Albert Astals Cid Reviewed-by: Paul Olav Tvete Reviewed-by: Frederik Gladhorn --- .../auto/gui/kernel/qguiapplication/tst_qguiapplication.cpp | 12 ++++++++++++ 1 file changed, 12 insertions(+) (limited to 'tests') diff --git a/tests/auto/gui/kernel/qguiapplication/tst_qguiapplication.cpp b/tests/auto/gui/kernel/qguiapplication/tst_qguiapplication.cpp index d4237b135f..6ef9957fa1 100644 --- a/tests/auto/gui/kernel/qguiapplication/tst_qguiapplication.cpp +++ b/tests/auto/gui/kernel/qguiapplication/tst_qguiapplication.cpp @@ -60,6 +60,7 @@ class tst_QGuiApplication: public tst_QCoreApplication private slots: void displayName(); + void firstWindowTitle(); void focusObject(); void allWindows(); void topLevelWindows(); @@ -83,6 +84,17 @@ void tst_QGuiApplication::displayName() QCOMPARE(QGuiApplication::applicationDisplayName(), QString::fromLatin1("The GUI Application")); } +void tst_QGuiApplication::firstWindowTitle() +{ + int argc = 3; + char *argv[] = { const_cast("tst_qguiapplication"), const_cast("-qwindowtitle"), const_cast("User Title") }; + QGuiApplication app(argc, argv); + QWindow window; + window.setTitle("Application Title"); + window.show(); + QCOMPARE(window.title(), QString("User Title")); +} + class DummyWindow : public QWindow { public: -- cgit v1.2.3 From f42bd772f8110dba13d209d81d8eed0077772185 Mon Sep 17 00:00:00 2001 From: David Faure Date: Sat, 1 Feb 2014 14:17:51 +0100 Subject: Move setWindowIcon() up to QGuiApplication. [ChangeLog][QtGui][QWindow]QWindow::icon() now defaults to the application icon, which can be set with QGuiApplication::setWindowIcon(). Change-Id: Id1974e5cda81775e515c14b294f67fb99351c6c9 Reviewed-by: Albert Astals Cid Reviewed-by: Friedemann Kleint Reviewed-by: Frederik Gladhorn --- tests/auto/widgets/kernel/qwidget/tst_qwidget.cpp | 52 ++++++++++++++++++----- 1 file changed, 41 insertions(+), 11 deletions(-) (limited to 'tests') diff --git a/tests/auto/widgets/kernel/qwidget/tst_qwidget.cpp b/tests/auto/widgets/kernel/qwidget/tst_qwidget.cpp index ecbe774f22..21e0286086 100644 --- a/tests/auto/widgets/kernel/qwidget/tst_qwidget.cpp +++ b/tests/auto/widgets/kernel/qwidget/tst_qwidget.cpp @@ -5345,17 +5345,17 @@ void tst_QWidget::setFocus() } } -class EventSpy : public QObject +template class EventSpy : public QObject { public: - EventSpy(QWidget *widget, QEvent::Type event) + EventSpy(T *widget, QEvent::Type event) : m_widget(widget), eventToSpy(event), m_count(0) { if (m_widget) m_widget->installEventFilter(this); } - QWidget *widget() const { return m_widget; } + T *widget() const { return m_widget; } int count() const { return m_count; } void clear() { m_count = 0; } @@ -5368,7 +5368,7 @@ protected: } private: - QWidget *m_widget; + T *m_widget; QEvent::Type eventToSpy; int m_count; }; @@ -5483,7 +5483,7 @@ void tst_QWidget::setCursor() // test if CursorChange is sent { QWidget widget; - EventSpy spy(&widget, QEvent::CursorChange); + EventSpy spy(&widget, QEvent::CursorChange); QCOMPARE(spy.count(), 0); widget.setCursor(QCursor(Qt::WaitCursor)); QCOMPARE(spy.count(), 1); @@ -5505,7 +5505,7 @@ void tst_QWidget::setToolTip() widget.setWindowTitle(widget.objectName()); widget.show(); QVERIFY(QTest::qWaitForWindowExposed(&widget)); - EventSpy spy(&widget, QEvent::ToolTipChange); + EventSpy spy(&widget, QEvent::ToolTipChange); QCOMPARE(spy.count(), 0); QCOMPARE(widget.toolTip(), QString()); @@ -5527,8 +5527,8 @@ void tst_QWidget::setToolTip() QFrame *frame = new QFrame(popup.data()); frame->setGeometry(0, 0, 50, 50); frame->setFrameStyle(QFrame::Box | QFrame::Plain); - EventSpy spy1(frame, QEvent::ToolTip); - EventSpy spy2(popup.data(), QEvent::ToolTip); + EventSpy spy1(frame, QEvent::ToolTip); + EventSpy spy2(popup.data(), QEvent::ToolTip); frame->setMouseTracking(pass == 0 ? false : true); frame->setToolTip(QLatin1String("TOOLTIP FRAME")); popup->setToolTip(QLatin1String("TOOLTIP POPUP")); @@ -5550,7 +5550,8 @@ void tst_QWidget::setToolTip() void tst_QWidget::testWindowIconChangeEventPropagation() { - typedef QSharedPointer EventSpyPtr; + typedef QSharedPointer > EventSpyPtr; + typedef QSharedPointer > WindowEventSpyPtr; // Create widget hierarchy. QWidget topLevelWidget; QWidget topLevelChild(&topLevelWidget); @@ -5563,12 +5564,27 @@ void tst_QWidget::testWindowIconChangeEventPropagation() << &dialog << &dialogChild; QCOMPARE(widgets.count(), 4); + topLevelWidget.show(); + dialog.show(); + + QWindowList windows; + windows << topLevelWidget.windowHandle() << dialog.windowHandle(); + QWindow otherWindow; + windows << &otherWindow; + const int lastWidgetWindow = 1; // 0 and 1 are qwidgetwindow, 2 is a pure qwindow + // Create spy lists. QList applicationEventSpies; QList widgetEventSpies; foreach (QWidget *widget, widgets) { - applicationEventSpies.append(EventSpyPtr(new EventSpy(widget, QEvent::ApplicationWindowIconChange))); - widgetEventSpies.append(EventSpyPtr(new EventSpy(widget, QEvent::WindowIconChange))); + applicationEventSpies.append(EventSpyPtr(new EventSpy(widget, QEvent::ApplicationWindowIconChange))); + widgetEventSpies.append(EventSpyPtr(new EventSpy(widget, QEvent::WindowIconChange))); + } + QList appWindowEventSpies; + QList windowEventSpies; + foreach (QWindow *window, windows) { + appWindowEventSpies.append(WindowEventSpyPtr(new EventSpy(window, QEvent::ApplicationWindowIconChange))); + windowEventSpies.append(WindowEventSpyPtr(new EventSpy(window, QEvent::WindowIconChange))); } // QApplication::setWindowIcon @@ -5592,6 +5608,20 @@ void tst_QWidget::testWindowIconChangeEventPropagation() QCOMPARE(spy->count(), 1); spy->clear(); } + for (int i = 0; i < windows.count(); ++i) { + // Check QEvent::ApplicationWindowIconChange (sent to QWindow) + // QWidgetWindows don't get this event, since the widget takes care of changing the icon + WindowEventSpyPtr spy = appWindowEventSpies.at(i); + QWindow *window = spy->widget(); + QCOMPARE(spy->count(), i > lastWidgetWindow ? 1 : 0); + QCOMPARE(window->icon(), windowIcon); + spy->clear(); + + // Check QEvent::WindowIconChange (sent to QWindow) + spy = windowEventSpies.at(i); + QCOMPARE(spy->count(), 1); + spy->clear(); + } // Set icon on a top-level widget. topLevelWidget.setWindowIcon(QIcon()); -- cgit v1.2.3 From 4f23f0530a9c59400a7f3821cd2c9355801ed8cd Mon Sep 17 00:00:00 2001 From: Glen Mabey Date: Tue, 9 Jul 2013 21:27:22 -0500 Subject: new QByteArrayList class Initial submission of a new class QByteArrayList with the purpose of aggregating and then joining QByteArray instances. [ChangeLog][QtCore] Added new QByteArrayList class. Change-Id: I2a9dc71ff7aadb19ebc129a0d47ac8cd33895924 Reviewed-by: Oswald Buddenhagen Reviewed-by: Thiago Macieira --- .../tools/qbytearraylist/qbytearraylist.pro | 4 + .../tools/qbytearraylist/tst_qbytearraylist.cpp | 223 +++++++++++++++++++++ 2 files changed, 227 insertions(+) create mode 100644 tests/auto/corelib/tools/qbytearraylist/qbytearraylist.pro create mode 100644 tests/auto/corelib/tools/qbytearraylist/tst_qbytearraylist.cpp (limited to 'tests') diff --git a/tests/auto/corelib/tools/qbytearraylist/qbytearraylist.pro b/tests/auto/corelib/tools/qbytearraylist/qbytearraylist.pro new file mode 100644 index 0000000000..2cd4522f67 --- /dev/null +++ b/tests/auto/corelib/tools/qbytearraylist/qbytearraylist.pro @@ -0,0 +1,4 @@ +CONFIG += testcase parallel_test +TARGET = tst_qbytearraylist +QT = core testlib +SOURCES = tst_qbytearraylist.cpp diff --git a/tests/auto/corelib/tools/qbytearraylist/tst_qbytearraylist.cpp b/tests/auto/corelib/tools/qbytearraylist/tst_qbytearraylist.cpp new file mode 100644 index 0000000000..86a56abae3 --- /dev/null +++ b/tests/auto/corelib/tools/qbytearraylist/tst_qbytearraylist.cpp @@ -0,0 +1,223 @@ +/**************************************************************************** +** +** Copyright (C) 2013 by Southwest Research Institute (R) +** Contact: http://www.qt-project.org/legal +** +** This file is part of the QtCore module of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:LGPL$ +** 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 Digia. For licensing terms and +** conditions see http://qt.digia.com/licensing. For further information +** use the contact form at http://qt.digia.com/contact-us. +** +** 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, Digia gives you certain additional +** rights. These rights are described in the Digia Qt LGPL Exception +** version 1.1, included in the file LGPL_EXCEPTION.txt in this package. +** +** GNU General Public License Usage +** Alternatively, this file may be used under the terms of the GNU +** General Public License version 3.0 as published by the Free Software +** Foundation and appearing in the file LICENSE.GPL included in the +** packaging of this file. Please review the following information to +** ensure the GNU General Public License version 3.0 requirements will be +** met: http://www.gnu.org/copyleft/gpl.html. +** +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +#include +#include + +#include + +Q_DECLARE_METATYPE(QByteArrayList) + +class tst_QByteArrayList : public QObject +{ + Q_OBJECT +private slots: + void join() const; + void join_data() const; + void joinByteArray() const; + void joinByteArray_data() const; + void joinChar() const; + void joinChar_data() const; + void joinEmptiness() const; + + void operator_plus() const; + void operator_plus_data() const; + + void initializeList() const; +}; + +void tst_QByteArrayList::join() const +{ + QFETCH(QByteArrayList, input); + QFETCH(QByteArray, expectedResult); + + QCOMPARE(input.join(), expectedResult); +} + +void tst_QByteArrayList::join_data() const +{ + QTest::addColumn("input"); + QTest::addColumn("expectedResult"); + + QTest::newRow("data1") << QByteArrayList() + << QByteArray(); + + QTest::newRow("data2") << QByteArrayList("one") + << QByteArray("one"); + + QTest::newRow("data3") << (QByteArrayList() << "a" << "b") + << QByteArray("ab"); + + QTest::newRow("data4") << (QByteArrayList() << "a" << "b" << "c") + << QByteArray("abc"); +} + +void tst_QByteArrayList::joinByteArray() const +{ + QFETCH(QByteArrayList, input); + QFETCH(QByteArray, separator); + QFETCH(QByteArray, expectedResult); + + QCOMPARE(input.join(separator), expectedResult); +} + +void tst_QByteArrayList::joinByteArray_data() const +{ + QTest::addColumn("input"); + QTest::addColumn("separator"); + QTest::addColumn("expectedResult"); + + QTest::newRow("data1") << QByteArrayList() + << QByteArray() + << QByteArray(); + + QTest::newRow("data2") << QByteArrayList() + << QByteArray("separator") + << QByteArray(); + + QTest::newRow("data3") << QByteArrayList("one") + << QByteArray("separator") + << QByteArray("one"); + + QTest::newRow("data4") << (QByteArrayList() << "a" << "b") + << QByteArray(" ") + << QByteArray("a b"); + + QTest::newRow("data5") << (QByteArrayList() << "a" << "b" << "c") + << QByteArray(" ") + << QByteArray("a b c"); + + QTest::newRow("data6") << (QByteArrayList() << "a" << "b" << "c") + << QByteArray() + << QByteArray("abc"); + + QTest::newRow("data7") << (QByteArrayList() << "a" << "b" << "c") + << QByteArray("") //empty + << QByteArray("abc"); +} + +void tst_QByteArrayList::joinChar() const +{ + QFETCH(QByteArrayList, input); + QFETCH(char, separator); + QFETCH(QByteArray, expectedResult); + + QCOMPARE(input.join(separator), expectedResult); +} + +void tst_QByteArrayList::joinChar_data() const +{ + QTest::addColumn("input"); + QTest::addColumn("separator"); + QTest::addColumn("expectedResult"); + + QTest::newRow("data1") << QByteArrayList() + << ' ' + << QByteArray(); + + QTest::newRow("data2") << (QByteArrayList() << "a" << "b") + << ' ' + << QByteArray("a b"); + + QTest::newRow("data3") << (QByteArrayList() << "a" << "b" << "c") + << ' ' + << QByteArray("a b c"); +} + +void tst_QByteArrayList::joinEmptiness() const +{ + QByteArrayList list; + QByteArray string = list.join(QByteArray()); + + QVERIFY(string.isEmpty()); + QVERIFY(string.isNull()); +} + +void tst_QByteArrayList::operator_plus() const +{ + QFETCH(QByteArrayList, a1); + QFETCH(QByteArrayList, a2); + QFETCH(QByteArrayList, expectedResult); + + QCOMPARE(a1+a2, expectedResult); + a1 += a2; + QCOMPARE(a1, expectedResult); +} + +void tst_QByteArrayList::operator_plus_data() const +{ + QTest::addColumn("a1"); + QTest::addColumn("a2"); + QTest::addColumn("expectedResult"); + + QTest::newRow("simpl") << ( QByteArrayList() << "a" ) + << ( QByteArrayList() << "b" << "c" ) + << ( QByteArrayList() << "a" << "b" << "c" ); + + QTest::newRow("blank1") << QByteArrayList() + << QByteArrayList() + << QByteArrayList(); + + QTest::newRow("blank2") << ( QByteArrayList() ) + << ( QByteArrayList() << "b" << "c" ) + << ( QByteArrayList() << "b" << "c" ); + + QTest::newRow("empty1") << ( QByteArrayList() << "" ) + << ( QByteArrayList() << "b" << "c" ) + << ( QByteArrayList() << "" << "b" << "c" ); + + QTest::newRow("empty2") << ( QByteArrayList() << "a" ) + << ( QByteArrayList() << "" << "c" ) + << ( QByteArrayList() << "a" << "" << "c" ); +} + +void tst_QByteArrayList::initializeList() const +{ +#ifdef Q_COMPILER_INITIALIZER_LISTS + // C++11 support is required + QByteArrayList v1{QByteArray("hello"),"world",QByteArray("plop")}; + QCOMPARE(v1, (QByteArrayList() << "hello" << "world" << "plop")); + QCOMPARE(v1, (QByteArrayList{"hello","world","plop"})); +#endif +} + +QTEST_APPLESS_MAIN(tst_QByteArrayList) +#include "tst_qbytearraylist.moc" -- cgit v1.2.3 From ff11af4fbc2948a3a3bc635549c7ac349d249abc Mon Sep 17 00:00:00 2001 From: Laszlo Agocs Date: Tue, 11 Feb 2014 14:59:30 +0100 Subject: QOpenGLWidget and new-style compositing on eglfs Integrate with QOpenGLTextureBlitter, QOpenGLWidget and friends. Change-Id: Ic2867b713a21a3d2820d546174fc9164b3dd220c Reviewed-by: Lars Knoll Reviewed-by: Gunnar Sletta Reviewed-by: Paul Olav Tvete --- tests/manual/qopenglwidget/openglwidget/openglwidget.cpp | 2 -- 1 file changed, 2 deletions(-) (limited to 'tests') diff --git a/tests/manual/qopenglwidget/openglwidget/openglwidget.cpp b/tests/manual/qopenglwidget/openglwidget/openglwidget.cpp index 09e0dd5419..5752326911 100644 --- a/tests/manual/qopenglwidget/openglwidget/openglwidget.cpp +++ b/tests/manual/qopenglwidget/openglwidget/openglwidget.cpp @@ -58,8 +58,6 @@ #include #include -#include - class OpenGLWidgetPrivate { public: -- cgit v1.2.3 From 8dcb72fd1e2c17ad000474496b6d000580e0a943 Mon Sep 17 00:00:00 2001 From: Thiago Macieira Date: Fri, 20 Dec 2013 11:14:04 -0800 Subject: Add a CSV logging feature to the benchlib This is only useful for logging benchmarks, since it won't print test passes, failures, etc. It's useful for importing to spreadsheets to do number-crunching. [ChangeLog][QtTest]Added a CSV logging mode that is suitable for importing benchmark results into spreadsheets. This can be enabled by the -csv option on the command-line. The CSV logging mode will not print test failures, debug messages, warnings, etc. Change-Id: I245d6f86bb380645c9bc0d748cf474b3ed42cab8 Reviewed-by: Sergio Ahumada Reviewed-by: Jason McDonald --- .../selftests/expected_benchlibcallgrind.csv | 1 + .../selftests/expected_benchlibcounting.csv | 1 + .../selftests/expected_benchlibeventcounter.csv | 7 ++++ .../testlib/selftests/expected_benchliboptions.csv | 3 ++ .../selftests/expected_benchlibtickcounter.csv | 1 + .../selftests/expected_benchlibwalltime.csv | 3 ++ tests/auto/testlib/selftests/selftests.qrc | 5 +++ tests/auto/testlib/selftests/tst_selftests.cpp | 49 +++++++++++++++++++++- 8 files changed, 68 insertions(+), 2 deletions(-) create mode 100644 tests/auto/testlib/selftests/expected_benchlibcallgrind.csv create mode 100644 tests/auto/testlib/selftests/expected_benchlibcounting.csv create mode 100644 tests/auto/testlib/selftests/expected_benchlibeventcounter.csv create mode 100644 tests/auto/testlib/selftests/expected_benchliboptions.csv create mode 100644 tests/auto/testlib/selftests/expected_benchlibtickcounter.csv create mode 100644 tests/auto/testlib/selftests/expected_benchlibwalltime.csv (limited to 'tests') diff --git a/tests/auto/testlib/selftests/expected_benchlibcallgrind.csv b/tests/auto/testlib/selftests/expected_benchlibcallgrind.csv new file mode 100644 index 0000000000..6ce2e2ced8 --- /dev/null +++ b/tests/auto/testlib/selftests/expected_benchlibcallgrind.csv @@ -0,0 +1 @@ +"twoHundredMillionInstructions","","InstructionReads",200000158,200000158,1 diff --git a/tests/auto/testlib/selftests/expected_benchlibcounting.csv b/tests/auto/testlib/selftests/expected_benchlibcounting.csv new file mode 100644 index 0000000000..f3368b6854 --- /dev/null +++ b/tests/auto/testlib/selftests/expected_benchlibcounting.csv @@ -0,0 +1 @@ +"passingBenchmark","","Events",0,0,1 diff --git a/tests/auto/testlib/selftests/expected_benchlibeventcounter.csv b/tests/auto/testlib/selftests/expected_benchlibeventcounter.csv new file mode 100644 index 0000000000..2627687289 --- /dev/null +++ b/tests/auto/testlib/selftests/expected_benchlibeventcounter.csv @@ -0,0 +1,7 @@ +"events","0","Events",0,0,1 +"events","1","Events",1,1,1 +"events","10","Events",10,10,1 +"events","100","Events",100,100,1 +"events","500","Events",500,500,1 +"events","5000","Events",5000,5000,1 +"events","100000","Events",100000,100000,1 diff --git a/tests/auto/testlib/selftests/expected_benchliboptions.csv b/tests/auto/testlib/selftests/expected_benchliboptions.csv new file mode 100644 index 0000000000..9b899aed90 --- /dev/null +++ b/tests/auto/testlib/selftests/expected_benchliboptions.csv @@ -0,0 +1,3 @@ +"threeEvents","","Events",3,3,1 +"threeEvents","","Events",3,45,15 +"threeEvents","","Events",3,3,1 diff --git a/tests/auto/testlib/selftests/expected_benchlibtickcounter.csv b/tests/auto/testlib/selftests/expected_benchlibtickcounter.csv new file mode 100644 index 0000000000..fe5af1e7c8 --- /dev/null +++ b/tests/auto/testlib/selftests/expected_benchlibtickcounter.csv @@ -0,0 +1 @@ +"threeBillionTicks","","CPUTicks",3000000000,3000000000,1 diff --git a/tests/auto/testlib/selftests/expected_benchlibwalltime.csv b/tests/auto/testlib/selftests/expected_benchlibwalltime.csv new file mode 100644 index 0000000000..0dc2dee876 --- /dev/null +++ b/tests/auto/testlib/selftests/expected_benchlibwalltime.csv @@ -0,0 +1,3 @@ +"waitForOneThousand","","WalltimeMilliseconds",1000,1000,1 +"waitForFourThousand","","WalltimeMilliseconds",4000,4000,1 +"qbenchmark_once","","WalltimeMilliseconds",0,0,1 diff --git a/tests/auto/testlib/selftests/selftests.qrc b/tests/auto/testlib/selftests/selftests.qrc index e7ca7138b2..ba567f1fb4 100644 --- a/tests/auto/testlib/selftests/selftests.qrc +++ b/tests/auto/testlib/selftests/selftests.qrc @@ -10,23 +10,28 @@ expected_badxml.xml expected_badxml.xunitxml expected_benchlibcallgrind.txt + expected_benchlibcallgrind.csv expected_benchlibcounting.lightxml expected_benchlibcounting.txt expected_benchlibcounting.xml expected_benchlibcounting.xunitxml + expected_benchlibcounting.csv expected_benchlibeventcounter.lightxml expected_benchlibeventcounter.txt expected_benchlibeventcounter.xml expected_benchlibeventcounter.xunitxml + expected_benchlibeventcounter.csv expected_benchliboptions.txt expected_benchlibtickcounter.lightxml expected_benchlibtickcounter.txt expected_benchlibtickcounter.xml expected_benchlibtickcounter.xunitxml + expected_benchlibtickcounter.csv expected_benchlibwalltime.lightxml expected_benchlibwalltime.txt expected_benchlibwalltime.xml expected_benchlibwalltime.xunitxml + expected_benchlibwalltime.csv expected_cmptest.lightxml expected_cmptest.txt expected_cmptest.xml diff --git a/tests/auto/testlib/selftests/tst_selftests.cpp b/tests/auto/testlib/selftests/tst_selftests.cpp index c2265ad198..8167a96eaa 100644 --- a/tests/auto/testlib/selftests/tst_selftests.cpp +++ b/tests/auto/testlib/selftests/tst_selftests.cpp @@ -234,6 +234,12 @@ QList tst_Selftests::allLoggerSets() const QStringList() << "lightxml", QStringList() << "-lightxml" << "-o" << logName("lightxml") ) + << LoggerSet("old stdout csv", // benchmarks only + QStringList() << "stdout csv", + QStringList() << "-csv") + << LoggerSet("old csv", // benchmarks only + QStringList() << "csv", + QStringList() << "-csv" << "-o" << logName("csv")) // Test with new-style options for a single logger << LoggerSet("new stdout txt", QStringList() << "stdout txt", @@ -267,6 +273,12 @@ QList tst_Selftests::allLoggerSets() const QStringList() << "lightxml", QStringList() << "-o" << logName("lightxml")+",lightxml" ) + << LoggerSet("new stdout csv", // benchmarks only + QStringList() << "stdout csv", + QStringList() << "-o" << "-,csv") + << LoggerSet("new csv", // benchmarks only + QStringList() << "csv", + QStringList() << "-o" << logName("csv")+",csv") // Test with two loggers (don't test all 32 combinations, just a sample) << LoggerSet("stdout txt + txt", QStringList() << "stdout txt" << "txt", @@ -288,7 +300,7 @@ QList tst_Selftests::allLoggerSets() const QStringList() << "-o" << logName("lightxml")+",lightxml" << "-o" << "-,xunitxml" ) - // All loggers at the same time + // All loggers at the same time (except csv) << LoggerSet("all loggers", QStringList() << "txt" << "xml" << "lightxml" << "stdout txt" << "xunitxml", QStringList() << "-o" << logName("txt")+",txt" @@ -488,6 +500,10 @@ void tst_Selftests::runSubTest_data() } if (subtest == "badxml" && (loggerSet.name == "all loggers" || loggerSet.name.contains("txt"))) continue; // XML only, do not mix txt and XML for encoding test. + + if (loggerSet.name.contains("csv") && !subtest.startsWith("benchlib")) + continue; + const bool crashes = subtest == QLatin1String("assert") || subtest == QLatin1String("exceptionthrow") || subtest == QLatin1String("fetchbogus") || subtest == QLatin1String("crashedterminate") || subtest == QLatin1String("crashes") || subtest == QLatin1String("silent"); @@ -706,7 +722,7 @@ void tst_Selftests::doRunSubTest(QString const& subdir, QStringList const& logge else if (expected.startsWith(QLatin1String("FAIL! : tst_Exception::throwException() Caught unhandled exce")) && expected != output) // On some platforms we compile without RTTI, and as a result we never throw an exception. QCOMPARE(output.simplified(), QString::fromLatin1("tst_Exception::throwException()").simplified()); - else if (benchmark || line.startsWith(" Date: Tue, 21 Jan 2014 14:54:27 +0100 Subject: Add function to get the actual PID from QProcess It was not possible to get the actual process ID (in a cross-platform manner) from QProcess, as the user would need to handle the returned typedef (Q_PID) differently on Unix and Windows. On Unix Q_PID is the actual process ID, but on Windows it's a pointer to a PROCESS_INFORMATION structure, which among other fields contains the process ID. Instead of returning a pointer on Windows, QProcess::processId() will return the actual process ID on both Windows and Unix. [ChangeLog][QtCore][QProcess] Added processId() to QProcess. This function will, unlike pid(), return the actual process identifier on both Window and Unix. Task-number: QTBUG-26136 Change-Id: I853ab721297e2dd9cda006666144179a9e25b73d Reviewed-by: Thiago Macieira --- tests/auto/corelib/io/qprocess/tst_qprocess.cpp | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) (limited to 'tests') diff --git a/tests/auto/corelib/io/qprocess/tst_qprocess.cpp b/tests/auto/corelib/io/qprocess/tst_qprocess.cpp index 37f224ff28..f5aa2c2412 100644 --- a/tests/auto/corelib/io/qprocess/tst_qprocess.cpp +++ b/tests/auto/corelib/io/qprocess/tst_qprocess.cpp @@ -943,7 +943,7 @@ void tst_QProcess::hardExit() void tst_QProcess::softExit() { QProcess proc; - + QCOMPARE(proc.processId(), 0); proc.start("testSoftExit/testSoftExit"); QVERIFY(proc.waitForStarted(10000)); @@ -951,6 +951,8 @@ void tst_QProcess::softExit() QVERIFY(proc.waitForReadyRead(10000)); #endif + QVERIFY(proc.processId() > 0); + proc.terminate(); QVERIFY(proc.waitForFinished(10000)); -- cgit v1.2.3 From 3cdd0358b39bcb4e6db6fd64e616c1c258a1297e Mon Sep 17 00:00:00 2001 From: Bernd Weimer Date: Thu, 13 Feb 2014 12:19:10 +0100 Subject: Fix QDateTime auto test Conversion from UTC to local time will result in same datetime value, if local time is in UTC. Change-Id: Icd4ea57cb46cc97bcc8fce4f4e579bf64a4d4b10 Reviewed-by: Mitch Curtis --- tests/auto/corelib/tools/qdatetime/tst_qdatetime.cpp | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) (limited to 'tests') diff --git a/tests/auto/corelib/tools/qdatetime/tst_qdatetime.cpp b/tests/auto/corelib/tools/qdatetime/tst_qdatetime.cpp index 3bd8a7526e..bda5fc707a 100644 --- a/tests/auto/corelib/tools/qdatetime/tst_qdatetime.cpp +++ b/tests/auto/corelib/tools/qdatetime/tst_qdatetime.cpp @@ -1629,7 +1629,8 @@ void tst_QDateTime::operator_eqeq_data() QTest::newRow("data10") << dateTime3 << dateTime3c << true << false; QTest::newRow("data11") << dateTime3 << dateTime3d << true << false; QTest::newRow("data12") << dateTime3c << dateTime3d << true << false; - QTest::newRow("data13") << dateTime3 << dateTime3e << false << false; + QTest::newRow("data13") << dateTime3 << dateTime3e + << (localTimeType == LocalTimeIsUtc) << false; QTest::newRow("invalid == invalid") << invalidDateTime() << invalidDateTime() << true << false; QTest::newRow("invalid == valid #1") << invalidDateTime() << dateTime1 << false << false; -- cgit v1.2.3 From 97c187da3c1381bc55dd16976bf9fb3c773d0047 Mon Sep 17 00:00:00 2001 From: Laszlo Agocs Date: Mon, 27 Jan 2014 14:45:11 +0100 Subject: Dynamic GL switch on Windows MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit The patch introduces a new build configuration on Windows which can be requested by passing -opengl dynamic to configure. Platforms other than Windows (including WinRT) are not affected. The existing Angle and desktop configurations are not affected. These continue to function as before and Angle remains the default. In the future, when all modules have added support for the dynamic path, as described below, the default configuration could be changed to be the dynamic one. This would allow providing a single set of binaries in the official builds instead of the current two. When requesting dynamic GL, Angle is built but QT_OPENGL_ES[_2] are never defined. Instead, the code path that has traditionally been desktop GL only becomes the dynamic path that has to do runtime checks. Qt modules and applications are not linked to opengl32.dll or libegl/glesv2.dll in this case. Instead, QtGui exports all necessary egl/egl/gl functions which will, under the hood, forward all requests to a dynamically loaded EGL/WGL/GL implementation. Porting guide (better said, changes needed to prepare your code to work with dynamic GL builds when the fallback to Angle is utilized): 1. In !QT_OPENGL_ES[_2] code branches use QOpenGLFunctions::isES() to differentiate between desktop and ES where needed. Keep in mind that it is the desktop GL header (plus qopenglext.h) that is included, not the GLES one. QtGui's proxy will handle some differences, for example calling glClearDepth will route to glClearDepthf when needed. The built-in eglGetProcAddress is able to retrieve pointers for standard GLES2 functions too so code resolving OpenGL 2 functions will function in any case. 2. QT_CONFIG will contain "opengl" and "dynamicgl" in dynamic builds, but never "angle" or "opengles2". 3. The preprocessor define QT_OPENGL_DYNAMIC is also available in dynamic builds. The usage of this is strongly discouraged and should not be needed anywhere except for QtGui and the platform plugin. 4. Code in need of the library handle can use QOpenGLFunctions::platformGLHandle(). The decision on which library to load is currently based on a simple test that creates a dummy window/context and tries to resolve an OpenGL 2 function. If this fails, it goes for Angle. This seems to work well on Win7 PCs for example that do not have proper graphics drivers providing OpenGL installed but are D3D9 capable using the default drivers. Setting QT_OPENGL to desktop or angle skips the test and forces usage of the given GL. There are also two new application attributes that could be used for the same purpose. If Angle is requested but the libraries are not present, desktop is tried. If desktop is requested, or if angle is requested but nothing works, the EGL/WGL functions will still be callable but will return 0. This conveniently means that eglInitialize() and such will report a failure. Debug messages can be enabled by setting QT_OPENGLPROXY_DEBUG. This will tell which implementation is chosen. The textures example application is ported to OpenGL 2, the GL 1 code path is removed. [ChangeLog][QtGui] Qt builds on Windows can now be configured for dynamic loading of the OpenGL implementation. This can be requested by passing -opengl dynamic to configure. In this mode no modules will link to opengl32.dll or Angle's libegl/libglesv2. Instead, QtGui will dynamically choose between desktop and Angle during the first GL/EGL/WGL call. This allows deploying applications with a single set of Qt libraries with the ability of transparently falling back to Angle in case the opengl32.dll is not suitable, due to missing graphics drivers for example. Task-number: QTBUG-36483 Change-Id: I716fdebbf60b355b7d9ef57d1e069eef366b4ab9 Reviewed-by: Friedemann Kleint Reviewed-by: Jørgen Lind --- tests/auto/opengl/qgl/tst_qgl.cpp | 36 ++-- .../auto/opengl/qglfunctions/tst_qglfunctions.cpp | 182 +++++++++++---------- tests/auto/opengl/qglthreads/tst_qglthreads.cpp | 93 ++++++----- .../auto/widgets/widgets/qmdiarea/tst_qmdiarea.cpp | 4 +- 4 files changed, 168 insertions(+), 147 deletions(-) (limited to 'tests') diff --git a/tests/auto/opengl/qgl/tst_qgl.cpp b/tests/auto/opengl/qgl/tst_qgl.cpp index 1ec1d88802..57128e4a82 100644 --- a/tests/auto/opengl/qgl/tst_qgl.cpp +++ b/tests/auto/opengl/qgl/tst_qgl.cpp @@ -49,6 +49,7 @@ #include #include #include +#include #include #include @@ -751,7 +752,10 @@ void tst_QGL::openGLVersionCheck() #elif defined(QT_OPENGL_ES_2) QVERIFY(QGLFormat::openGLVersionFlags() & QGLFormat::OpenGL_ES_Version_2_0); #else - QVERIFY(QGLFormat::openGLVersionFlags() & QGLFormat::OpenGL_Version_1_1); + if (QOpenGLFunctions::isES()) + QVERIFY(QGLFormat::openGLVersionFlags() & QGLFormat::OpenGL_ES_Version_2_0); + else + QVERIFY(QGLFormat::openGLVersionFlags() & QGLFormat::OpenGL_Version_1_1); #endif //defined(QT_OPENGL_ES_1) } #endif //QT_BUILD_INTERNAL @@ -1511,12 +1515,6 @@ void tst_QGL::colormap() QCOMPARE(cmap4.size(), 256); } -#ifndef QT_OPENGL_ES -#define DEFAULT_FORMAT GL_RGBA8 -#else -#define DEFAULT_FORMAT GL_RGBA -#endif - #ifndef GL_TEXTURE_3D #define GL_TEXTURE_3D 0x806F #endif @@ -1532,7 +1530,13 @@ void tst_QGL::fboFormat() QCOMPARE(format1.samples(), 0); QVERIFY(format1.attachment() == QGLFramebufferObject::NoAttachment); QCOMPARE(int(format1.textureTarget()), int(GL_TEXTURE_2D)); - QCOMPARE(int(format1.internalTextureFormat()), int(DEFAULT_FORMAT)); + int expectedFormat = +#ifdef QT_OPENGL_ES_2 + GL_RGBA; +#else + QOpenGLFunctions::isES() ? GL_RGBA : GL_RGBA8; +#endif + QCOMPARE(int(format1.internalTextureFormat()), expectedFormat); // Modify the values and re-check. format1.setSamples(8); @@ -1603,14 +1607,26 @@ void tst_QGL::fboFormat() QGLFramebufferObjectFormat format4c; QVERIFY(format1c == format3c); QVERIFY(!(format1c != format3c)); - format3c.setInternalTextureFormat(DEFAULT_FORMAT); + format3c.setInternalTextureFormat( +#ifdef QT_OPENGL_ES_2 + GL_RGBA +#else + QOpenGLFunctions::isES() ? GL_RGBA : GL_RGBA8 +#endif + ); QVERIFY(!(format1c == format3c)); QVERIFY(format1c != format3c); format4c = format1c; QVERIFY(format1c == format4c); QVERIFY(!(format1c != format4c)); - format4c.setInternalTextureFormat(DEFAULT_FORMAT); + format4c.setInternalTextureFormat( +#ifdef QT_OPENGL_ES_2 + GL_RGBA +#else + QOpenGLFunctions::isES() ? GL_RGBA : GL_RGBA8 +#endif + ); QVERIFY(!(format1c == format4c)); QVERIFY(format1c != format4c); } diff --git a/tests/auto/opengl/qglfunctions/tst_qglfunctions.cpp b/tests/auto/opengl/qglfunctions/tst_qglfunctions.cpp index 975df7f554..fea3c7b643 100644 --- a/tests/auto/opengl/qglfunctions/tst_qglfunctions.cpp +++ b/tests/auto/opengl/qglfunctions/tst_qglfunctions.cpp @@ -96,97 +96,99 @@ void tst_QGLFunctions::features() funcs.initializeGLFunctions(); // Validate the features against what we expect for this platform. -#if defined(QT_OPENGL_ES_2) - QGLFunctions::OpenGLFeatures allFeatures = - (QGLFunctions::Multitexture | - QGLFunctions::Shaders | - QGLFunctions::Buffers | - QGLFunctions::Framebuffers | - QGLFunctions::BlendColor | - QGLFunctions::BlendEquation | - QGLFunctions::BlendEquationSeparate | - QGLFunctions::BlendFuncSeparate | - QGLFunctions::BlendSubtract | - QGLFunctions::CompressedTextures | - QGLFunctions::Multisample | - QGLFunctions::StencilSeparate | - QGLFunctions::NPOTTextures); - QVERIFY((funcs.openGLFeatures() & allFeatures) == allFeatures); - QVERIFY(funcs.hasOpenGLFeature(QGLFunctions::Multitexture)); - QVERIFY(funcs.hasOpenGLFeature(QGLFunctions::Shaders)); - QVERIFY(funcs.hasOpenGLFeature(QGLFunctions::Buffers)); - QVERIFY(funcs.hasOpenGLFeature(QGLFunctions::Framebuffers)); - QVERIFY(funcs.hasOpenGLFeature(QGLFunctions::BlendColor)); - QVERIFY(funcs.hasOpenGLFeature(QGLFunctions::BlendEquation)); - QVERIFY(funcs.hasOpenGLFeature(QGLFunctions::BlendEquationSeparate)); - QVERIFY(funcs.hasOpenGLFeature(QGLFunctions::BlendFuncSeparate)); - QVERIFY(funcs.hasOpenGLFeature(QGLFunctions::BlendSubtract)); - QVERIFY(funcs.hasOpenGLFeature(QGLFunctions::CompressedTextures)); - QVERIFY(funcs.hasOpenGLFeature(QGLFunctions::Multisample)); - QVERIFY(funcs.hasOpenGLFeature(QGLFunctions::StencilSeparate)); - QVERIFY(funcs.hasOpenGLFeature(QGLFunctions::NPOTTextures)); -#elif defined(QT_OPENGL_ES) - QVERIFY(funcs.hasOpenGLFeature(QGLFunctions::Multitexture)); - QVERIFY(funcs.hasOpenGLFeature(QGLFunctions::Buffers)); - QVERIFY(funcs.hasOpenGLFeature(QGLFunctions::CompressedTextures)); - QVERIFY(funcs.hasOpenGLFeature(QGLFunctions::Multisample)); - - QVERIFY(!funcs.hasOpenGLFeature(QGLFunctions::Shaders)); - QVERIFY(!funcs.hasOpenGLFeature(QGLFunctions::BlendColor)); - QVERIFY(!funcs.hasOpenGLFeature(QGLFunctions::StencilSeparate)); - - QCOMPARE(funcs.hasOpenGLFeature(QGLFunctions::Framebuffers), - hasExtension("GL_OES_framebuffer_object")); - QCOMPARE(funcs.hasOpenGLFeature(QGLFunctions::BlendEquationSeparate), - hasExtension("GL_OES_blend_equation_separate")); - QCOMPARE(funcs.hasOpenGLFeature(QGLFunctions::BlendFuncSeparate), - hasExtension("GL_OES_blend_func_separate")); - QCOMPARE(funcs.hasOpenGLFeature(QGLFunctions::BlendSubtract), - hasExtension("GL_OES_blend_subtract")); - QCOMPARE(funcs.hasOpenGLFeature(QGLFunctions::NPOTTextures), - hasExtension("GL_OES_texture_npot")); -#else - // We check for both the extension name and the minimum OpenGL version - // for the feature. This will help us catch situations where a platform - // doesn't list an extension by name but does have the feature by virtue - // of its version number. - QGLFormat::OpenGLVersionFlags versions = QGLFormat::openGLVersionFlags(); - QCOMPARE(funcs.hasOpenGLFeature(QGLFunctions::Multitexture), - hasExtension("GL_ARB_multitexture") || - (versions & QGLFormat::OpenGL_Version_1_3) != 0); - QCOMPARE(funcs.hasOpenGLFeature(QGLFunctions::Shaders), - hasExtension("GL_ARB_shader_objects") || - (versions & QGLFormat::OpenGL_Version_2_0) != 0); - QCOMPARE(funcs.hasOpenGLFeature(QGLFunctions::Buffers), - (versions & QGLFormat::OpenGL_Version_1_5) != 0); - QCOMPARE(funcs.hasOpenGLFeature(QGLFunctions::Framebuffers), - hasExtension("GL_EXT_framebuffer_object") || - hasExtension("GL_ARB_framebuffer_object")); - QCOMPARE(funcs.hasOpenGLFeature(QGLFunctions::BlendColor), - hasExtension("GL_EXT_blend_color") || - (versions & QGLFormat::OpenGL_Version_1_2) != 0); - QCOMPARE(funcs.hasOpenGLFeature(QGLFunctions::BlendEquation), - (versions & QGLFormat::OpenGL_Version_1_2) != 0); - QCOMPARE(funcs.hasOpenGLFeature(QGLFunctions::BlendEquationSeparate), - hasExtension("GL_EXT_blend_equation_separate") || - (versions & QGLFormat::OpenGL_Version_2_0) != 0); - QCOMPARE(funcs.hasOpenGLFeature(QGLFunctions::BlendFuncSeparate), - hasExtension("GL_EXT_blend_func_separate") || - (versions & QGLFormat::OpenGL_Version_1_4) != 0); - QCOMPARE(funcs.hasOpenGLFeature(QGLFunctions::BlendSubtract), - hasExtension("GL_EXT_blend_subtract")); - QCOMPARE(funcs.hasOpenGLFeature(QGLFunctions::CompressedTextures), - hasExtension("GL_ARB_texture_compression") || - (versions & QGLFormat::OpenGL_Version_1_3) != 0); - QCOMPARE(funcs.hasOpenGLFeature(QGLFunctions::Multisample), - hasExtension("GL_ARB_multisample") || - (versions & QGLFormat::OpenGL_Version_1_3) != 0); - QCOMPARE(funcs.hasOpenGLFeature(QGLFunctions::StencilSeparate), - (versions & QGLFormat::OpenGL_Version_2_0) != 0); - QCOMPARE(funcs.hasOpenGLFeature(QGLFunctions::NPOTTextures), - hasExtension("GL_ARB_texture_non_power_of_two") || - (versions & QGLFormat::OpenGL_Version_2_0) != 0); + if (QOpenGLFunctions::isES()) { +#if !defined(QT_OPENGL_ES) || defined(QT_OPENGL_ES_2) + QGLFunctions::OpenGLFeatures allFeatures = + (QGLFunctions::Multitexture | + QGLFunctions::Shaders | + QGLFunctions::Buffers | + QGLFunctions::Framebuffers | + QGLFunctions::BlendColor | + QGLFunctions::BlendEquation | + QGLFunctions::BlendEquationSeparate | + QGLFunctions::BlendFuncSeparate | + QGLFunctions::BlendSubtract | + QGLFunctions::CompressedTextures | + QGLFunctions::Multisample | + QGLFunctions::StencilSeparate | + QGLFunctions::NPOTTextures); + QVERIFY((funcs.openGLFeatures() & allFeatures) == allFeatures); + QVERIFY(funcs.hasOpenGLFeature(QGLFunctions::Multitexture)); + QVERIFY(funcs.hasOpenGLFeature(QGLFunctions::Shaders)); + QVERIFY(funcs.hasOpenGLFeature(QGLFunctions::Buffers)); + QVERIFY(funcs.hasOpenGLFeature(QGLFunctions::Framebuffers)); + QVERIFY(funcs.hasOpenGLFeature(QGLFunctions::BlendColor)); + QVERIFY(funcs.hasOpenGLFeature(QGLFunctions::BlendEquation)); + QVERIFY(funcs.hasOpenGLFeature(QGLFunctions::BlendEquationSeparate)); + QVERIFY(funcs.hasOpenGLFeature(QGLFunctions::BlendFuncSeparate)); + QVERIFY(funcs.hasOpenGLFeature(QGLFunctions::BlendSubtract)); + QVERIFY(funcs.hasOpenGLFeature(QGLFunctions::CompressedTextures)); + QVERIFY(funcs.hasOpenGLFeature(QGLFunctions::Multisample)); + QVERIFY(funcs.hasOpenGLFeature(QGLFunctions::StencilSeparate)); + QVERIFY(funcs.hasOpenGLFeature(QGLFunctions::NPOTTextures)); +#elif defined(QT_OPENGL_ES) && !defined(QT_OPENGL_ES_2) + QVERIFY(funcs.hasOpenGLFeature(QGLFunctions::Multitexture)); + QVERIFY(funcs.hasOpenGLFeature(QGLFunctions::Buffers)); + QVERIFY(funcs.hasOpenGLFeature(QGLFunctions::CompressedTextures)); + QVERIFY(funcs.hasOpenGLFeature(QGLFunctions::Multisample)); + + QVERIFY(!funcs.hasOpenGLFeature(QGLFunctions::Shaders)); + QVERIFY(!funcs.hasOpenGLFeature(QGLFunctions::BlendColor)); + QVERIFY(!funcs.hasOpenGLFeature(QGLFunctions::StencilSeparate)); + + QCOMPARE(funcs.hasOpenGLFeature(QGLFunctions::Framebuffers), + hasExtension("GL_OES_framebuffer_object")); + QCOMPARE(funcs.hasOpenGLFeature(QGLFunctions::BlendEquationSeparate), + hasExtension("GL_OES_blend_equation_separate")); + QCOMPARE(funcs.hasOpenGLFeature(QGLFunctions::BlendFuncSeparate), + hasExtension("GL_OES_blend_func_separate")); + QCOMPARE(funcs.hasOpenGLFeature(QGLFunctions::BlendSubtract), + hasExtension("GL_OES_blend_subtract")); + QCOMPARE(funcs.hasOpenGLFeature(QGLFunctions::NPOTTextures), + hasExtension("GL_OES_texture_npot")); #endif + } else { + // We check for both the extension name and the minimum OpenGL version + // for the feature. This will help us catch situations where a platform + // doesn't list an extension by name but does have the feature by virtue + // of its version number. + QGLFormat::OpenGLVersionFlags versions = QGLFormat::openGLVersionFlags(); + QCOMPARE(funcs.hasOpenGLFeature(QGLFunctions::Multitexture), + hasExtension("GL_ARB_multitexture") || + (versions & QGLFormat::OpenGL_Version_1_3) != 0); + QCOMPARE(funcs.hasOpenGLFeature(QGLFunctions::Shaders), + hasExtension("GL_ARB_shader_objects") || + (versions & QGLFormat::OpenGL_Version_2_0) != 0); + QCOMPARE(funcs.hasOpenGLFeature(QGLFunctions::Buffers), + (versions & QGLFormat::OpenGL_Version_1_5) != 0); + QCOMPARE(funcs.hasOpenGLFeature(QGLFunctions::Framebuffers), + hasExtension("GL_EXT_framebuffer_object") || + hasExtension("GL_ARB_framebuffer_object")); + QCOMPARE(funcs.hasOpenGLFeature(QGLFunctions::BlendColor), + hasExtension("GL_EXT_blend_color") || + (versions & QGLFormat::OpenGL_Version_1_2) != 0); + QCOMPARE(funcs.hasOpenGLFeature(QGLFunctions::BlendEquation), + (versions & QGLFormat::OpenGL_Version_1_2) != 0); + QCOMPARE(funcs.hasOpenGLFeature(QGLFunctions::BlendEquationSeparate), + hasExtension("GL_EXT_blend_equation_separate") || + (versions & QGLFormat::OpenGL_Version_2_0) != 0); + QCOMPARE(funcs.hasOpenGLFeature(QGLFunctions::BlendFuncSeparate), + hasExtension("GL_EXT_blend_func_separate") || + (versions & QGLFormat::OpenGL_Version_1_4) != 0); + QCOMPARE(funcs.hasOpenGLFeature(QGLFunctions::BlendSubtract), + hasExtension("GL_EXT_blend_subtract")); + QCOMPARE(funcs.hasOpenGLFeature(QGLFunctions::CompressedTextures), + hasExtension("GL_ARB_texture_compression") || + (versions & QGLFormat::OpenGL_Version_1_3) != 0); + QCOMPARE(funcs.hasOpenGLFeature(QGLFunctions::Multisample), + hasExtension("GL_ARB_multisample") || + (versions & QGLFormat::OpenGL_Version_1_3) != 0); + QCOMPARE(funcs.hasOpenGLFeature(QGLFunctions::StencilSeparate), + (versions & QGLFormat::OpenGL_Version_2_0) != 0); + QCOMPARE(funcs.hasOpenGLFeature(QGLFunctions::NPOTTextures), + hasExtension("GL_ARB_texture_non_power_of_two") || + (versions & QGLFormat::OpenGL_Version_2_0) != 0); + } } // Verify that the multitexture functions appear to resolve and work. diff --git a/tests/auto/opengl/qglthreads/tst_qglthreads.cpp b/tests/auto/opengl/qglthreads/tst_qglthreads.cpp index f5923764b8..765dc221dc 100644 --- a/tests/auto/opengl/qglthreads/tst_qglthreads.cpp +++ b/tests/auto/opengl/qglthreads/tst_qglthreads.cpp @@ -333,52 +333,55 @@ static inline float qrandom() { return (rand() % 100) / 100.f; } void renderAScene(int w, int h) { -#ifdef QT_OPENGL_ES_2 - Q_UNUSED(w) - Q_UNUSED(h) - QGLShaderProgram program; - program.addShaderFromSourceCode(QGLShader::Vertex, "attribute highp vec2 pos; void main() { gl_Position = vec4(pos.xy, 1.0, 1.0); }"); - program.addShaderFromSourceCode(QGLShader::Fragment, "uniform lowp vec4 color; void main() { gl_FragColor = color; }"); - program.bindAttributeLocation("pos", 0); - program.bind(); - - glEnableVertexAttribArray(0); - - for (int i=0; i<1000; ++i) { - GLfloat pos[] = { - (rand() % 100) / 100.f, - (rand() % 100) / 100.f, - (rand() % 100) / 100.f, - (rand() % 100) / 100.f, - (rand() % 100) / 100.f, - (rand() % 100) / 100.f - }; - - glVertexAttribPointer(0, 2, GL_FLOAT, GL_FALSE, 0, pos); - glDrawArrays(GL_TRIANGLE_STRIP, 0, 3); - } -#else - glViewport(0, 0, w, h); - - glMatrixMode(GL_PROJECTION); - glLoadIdentity(); - glFrustum(0, w, h, 0, 1, 100); - glTranslated(0, 0, -1); - - glMatrixMode(GL_MODELVIEW); - glLoadIdentity(); - - for (int i=0;i<1000; ++i) { - glBegin(GL_TRIANGLES); - glColor3f(qrandom(), qrandom(), qrandom()); - glVertex2f(qrandom() * w, qrandom() * h); - glColor3f(qrandom(), qrandom(), qrandom()); - glVertex2f(qrandom() * w, qrandom() * h); - glColor3f(qrandom(), qrandom(), qrandom()); - glVertex2f(qrandom() * w, qrandom() * h); - glEnd(); - } + if (QOpenGLFunctions::isES()) { + QGLFunctions funcs(QGLContext::currentContext()); + Q_UNUSED(w); + Q_UNUSED(h); + QGLShaderProgram program; + program.addShaderFromSourceCode(QGLShader::Vertex, "attribute highp vec2 pos; void main() { gl_Position = vec4(pos.xy, 1.0, 1.0); }"); + program.addShaderFromSourceCode(QGLShader::Fragment, "uniform lowp vec4 color; void main() { gl_FragColor = color; }"); + program.bindAttributeLocation("pos", 0); + program.bind(); + + funcs.glEnableVertexAttribArray(0); + + for (int i=0; i<1000; ++i) { + GLfloat pos[] = { + (rand() % 100) / 100.f, + (rand() % 100) / 100.f, + (rand() % 100) / 100.f, + (rand() % 100) / 100.f, + (rand() % 100) / 100.f, + (rand() % 100) / 100.f + }; + + funcs.glVertexAttribPointer(0, 2, GL_FLOAT, GL_FALSE, 0, pos); + glDrawArrays(GL_TRIANGLE_STRIP, 0, 3); + } + } else { +#ifndef QT_OPENGL_ES_2 + glViewport(0, 0, w, h); + + glMatrixMode(GL_PROJECTION); + glLoadIdentity(); + glFrustum(0, w, h, 0, 1, 100); + glTranslated(0, 0, -1); + + glMatrixMode(GL_MODELVIEW); + glLoadIdentity(); + + for (int i=0;i<1000; ++i) { + glBegin(GL_TRIANGLES); + glColor3f(qrandom(), qrandom(), qrandom()); + glVertex2f(qrandom() * w, qrandom() * h); + glColor3f(qrandom(), qrandom(), qrandom()); + glVertex2f(qrandom() * w, qrandom() * h); + glColor3f(qrandom(), qrandom(), qrandom()); + glVertex2f(qrandom() * w, qrandom() * h); + glEnd(); + } #endif + } } class ThreadSafeGLWidget : public QGLWidget diff --git a/tests/auto/widgets/widgets/qmdiarea/tst_qmdiarea.cpp b/tests/auto/widgets/widgets/qmdiarea/tst_qmdiarea.cpp index f5d92be95d..5f4284e79a 100644 --- a/tests/auto/widgets/widgets/qmdiarea/tst_qmdiarea.cpp +++ b/tests/auto/widgets/widgets/qmdiarea/tst_qmdiarea.cpp @@ -2596,8 +2596,8 @@ void tst_QMdiArea::nativeSubWindows() const QString platformName = QGuiApplication::platformName(); if (platformName != QLatin1String("xcb") && platformName != QLatin1String("windows")) QSKIP(qPrintable(QString::fromLatin1("nativeSubWindows() does not work on this platform (%1).").arg(platformName))); -#ifdef QT_OPENGL_ES_2_ANGLE - if (platformName == QLatin1String("windows")) +#ifdef Q_OS_WIN + if (QOpenGLFunctions::isES()) QSKIP("nativeSubWindows() does not work with ANGLE on Windows, QTBUG-28545."); #endif { // Add native widgets after show. -- cgit v1.2.3 From f96f2fe3670bc8a32389795dc21b9839407465a1 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?J=C4=99drzej=20Nowacki?= Date: Fri, 14 Feb 2014 15:03:30 +0100 Subject: Enable QByteArrayList tests Change-Id: Id7e0550e857bf4221f49d08539a0b5c70d8386d3 Reviewed-by: Friedemann Kleint --- tests/auto/corelib/tools/tools.pro | 1 + 1 file changed, 1 insertion(+) (limited to 'tests') diff --git a/tests/auto/corelib/tools/tools.pro b/tests/auto/corelib/tools/tools.pro index bf2f222769..996879ea69 100644 --- a/tests/auto/corelib/tools/tools.pro +++ b/tests/auto/corelib/tools/tools.pro @@ -4,6 +4,7 @@ SUBDIRS=\ qarraydata \ qbitarray \ qbytearray \ + qbytearraylist \ qbytearraymatcher \ qbytedatabuffer \ qcache \ -- cgit v1.2.3 From 553c6416bb7219d7ab1b40579895bc3ebaeb87c7 Mon Sep 17 00:00:00 2001 From: Oliver Wolff Date: Thu, 13 Feb 2014 11:32:38 +0100 Subject: WinRT: Added socket engine implementation Added basic functionality to socket for WinRT. Even though not all auto tests pass yet, this patch can be seen as a foundation for upcoming work in this area. Reading from and writing to TCP socket works and one can listen for tcp connections. Change-Id: Id4c25ba1c7187ed92b6368c785c4f62837faded7 Reviewed-by: Andrew Knight --- tests/auto/corelib/kernel/qsocketnotifier/tst_qsocketnotifier.cpp | 4 ++++ 1 file changed, 4 insertions(+) (limited to 'tests') diff --git a/tests/auto/corelib/kernel/qsocketnotifier/tst_qsocketnotifier.cpp b/tests/auto/corelib/kernel/qsocketnotifier/tst_qsocketnotifier.cpp index 439594b661..5632bcacc4 100644 --- a/tests/auto/corelib/kernel/qsocketnotifier/tst_qsocketnotifier.cpp +++ b/tests/auto/corelib/kernel/qsocketnotifier/tst_qsocketnotifier.cpp @@ -48,7 +48,11 @@ #include #include #include +#ifndef Q_OS_WINRT #include +#else +#include +#endif #define NATIVESOCKETENGINE QNativeSocketEngine #ifdef Q_OS_UNIX #include -- cgit v1.2.3 From c9cdbcb12f80cd72905e49ce1a673eae9f559ca3 Mon Sep 17 00:00:00 2001 From: Kai Koehne Date: Fri, 14 Feb 2014 13:36:38 +0100 Subject: Add const overload for QLoggingCategory::operator()() Change 85e57653 caused a compile error for code that does Q_DECLARE_LOGGING_CATEGORY(cat); //.. qCDebug(cat()) << // ... error: C3848: expression having type 'const QLoggingCategory' would lose some const-volatile qualifiers in order to call 'QLoggingCategory &QLoggingCategory::operator ()(void)' This is a regression from Qt 5.2. Fix the error by adding a const version of operator()(). Change-Id: I2fb04f2e155962adee0f98089fc5a159000bef56 Reviewed-by: Alex Blasche Reviewed-by: Friedemann Kleint Reviewed-by: Thiago Macieira --- tests/auto/corelib/io/qloggingcategory/tst_qloggingcategory.cpp | 2 ++ 1 file changed, 2 insertions(+) (limited to 'tests') diff --git a/tests/auto/corelib/io/qloggingcategory/tst_qloggingcategory.cpp b/tests/auto/corelib/io/qloggingcategory/tst_qloggingcategory.cpp index 47a5d6044e..b0d7a76f0f 100644 --- a/tests/auto/corelib/io/qloggingcategory/tst_qloggingcategory.cpp +++ b/tests/auto/corelib/io/qloggingcategory/tst_qloggingcategory.cpp @@ -428,6 +428,8 @@ private slots: QCOMPARE(logMessage, QString()); qCDebug(TST_LOG, "Check debug with no filter active"); QCOMPARE(logMessage, QString()); + qCDebug(TST_LOG(), "Check debug with no filter active"); + QCOMPARE(logMessage, QString()); buf = QStringLiteral("tst.log.warning: Check warning with no filter active"); qCWarning(TST_LOG) << "Check warning with no filter active"; QCOMPARE(logMessage, buf); -- cgit v1.2.3 From 6afc34a72f1fbf4b8a379228c64f9a34a1c4433f Mon Sep 17 00:00:00 2001 From: Marc Mutz Date: Mon, 9 Dec 2013 16:01:48 +0100 Subject: tst_qsignalblocker: simplify test This test can assume that the QObject::signalsBlocked property works as advertized, so just check signalsBlocked() in repsonse to QSignalBlocker manipulations. Change-Id: I99e4ef9c4ed05c3840233d92a587636d2d78f59a Reviewed-by: Olivier Goffart --- .../kernel/qsignalblocker/tst_qsignalblocker.cpp | 151 ++------------------- 1 file changed, 13 insertions(+), 138 deletions(-) (limited to 'tests') diff --git a/tests/auto/corelib/kernel/qsignalblocker/tst_qsignalblocker.cpp b/tests/auto/corelib/kernel/qsignalblocker/tst_qsignalblocker.cpp index 1f71692ffe..3fc155bfe8 100644 --- a/tests/auto/corelib/kernel/qsignalblocker/tst_qsignalblocker.cpp +++ b/tests/auto/corelib/kernel/qsignalblocker/tst_qsignalblocker.cpp @@ -48,161 +48,36 @@ class tst_QSignalBlocker : public QObject Q_OBJECT private slots: void signalBlocking(); - void signalBlockingMoveAssignment(); + void moveAssignment(); }; -class SenderObject : public QObject -{ - Q_OBJECT - -public: - SenderObject() : aPublicSlotCalled(0), recursionCount(0) {} - - void emitSignal1AfterRecursion() - { - if (recursionCount++ < 100) - emitSignal1AfterRecursion(); - else - emitSignal1(); - } - - void emitSignal1() { emit signal1(); } - void emitSignal2() { emit signal2(); } - void emitSignal3() { emit signal3(); } - void emitSignal4() { emit signal4(); } - -signals: - void signal1(); - void signal2(); - void signal3(); - void signal4(); - QT_MOC_COMPAT void signal5(); - void signal6(void); - void signal7(int, const QString &); - -public slots: - void aPublicSlot() { aPublicSlotCalled++; } - -public: - Q_INVOKABLE void invoke1(){} - Q_SCRIPTABLE void sinvoke1(){} - int aPublicSlotCalled; -protected: - Q_INVOKABLE QT_MOC_COMPAT void invoke2(){} - Q_INVOKABLE QT_MOC_COMPAT void invoke2(int){} - Q_SCRIPTABLE QT_MOC_COMPAT void sinvoke2(){} -private: - Q_INVOKABLE void invoke3(int hinz = 0, int kunz = 0){Q_UNUSED(hinz) Q_UNUSED(kunz)} - Q_SCRIPTABLE void sinvoke3(){} - - int recursionCount; -}; - -class ReceiverObject : public QObject -{ - Q_OBJECT - -public: - ReceiverObject() - : sequence_slot1( 0 ) - , sequence_slot2( 0 ) - , sequence_slot3( 0 ) - , sequence_slot4( 0 ) - {} - - void reset() - { - sequence_slot4 = 0; - sequence_slot3 = 0; - sequence_slot2 = 0; - sequence_slot1 = 0; - count_slot1 = 0; - count_slot2 = 0; - count_slot3 = 0; - count_slot4 = 0; - } - - int sequence_slot1; - int sequence_slot2; - int sequence_slot3; - int sequence_slot4; - int count_slot1; - int count_slot2; - int count_slot3; - int count_slot4; - - bool called(int slot) - { - switch (slot) { - case 1: return sequence_slot1; - case 2: return sequence_slot2; - case 3: return sequence_slot3; - case 4: return sequence_slot4; - default: return false; - } - } - - static int sequence; - -public slots: - void slot1() { sequence_slot1 = ++sequence; count_slot1++; } - void slot2() { sequence_slot2 = ++sequence; count_slot2++; } - void slot3() { sequence_slot3 = ++sequence; count_slot3++; } - void slot4() { sequence_slot4 = ++sequence; count_slot4++; } - -}; - -int ReceiverObject::sequence = 0; - void tst_QSignalBlocker::signalBlocking() { - SenderObject sender; - ReceiverObject receiver; + QObject o; - receiver.connect(&sender, SIGNAL(signal1()), SLOT(slot1())); - - sender.emitSignal1(); - QVERIFY(receiver.called(1)); - receiver.reset(); + QVERIFY(!o.signalsBlocked()); { - QSignalBlocker blocker(&sender); - - sender.emitSignal1(); - QVERIFY(!receiver.called(1)); - receiver.reset(); + QSignalBlocker blocker(&o); + QVERIFY(o.signalsBlocked()); - sender.blockSignals(false); + o.blockSignals(false); + QVERIFY(!o.signalsBlocked()); - sender.emitSignal1(); - QVERIFY(receiver.called(1)); - receiver.reset(); - - sender.blockSignals(true); - - sender.emitSignal1(); - QVERIFY(!receiver.called(1)); - receiver.reset(); + o.blockSignals(true); + QVERIFY(o.signalsBlocked()); blocker.unblock(); - - sender.emitSignal1(); - QVERIFY(receiver.called(1)); - receiver.reset(); + QVERIFY(!o.signalsBlocked()); blocker.reblock(); - - sender.emitSignal1(); - QVERIFY(!receiver.called(1)); - receiver.reset(); + QVERIFY(o.signalsBlocked()); } - sender.emitSignal1(); - QVERIFY(receiver.called(1)); - receiver.reset(); + QVERIFY(!o.signalsBlocked()); } -void tst_QSignalBlocker::signalBlockingMoveAssignment() +void tst_QSignalBlocker::moveAssignment() { #ifdef Q_COMPILER_RVALUE_REFS QObject o1, o2; -- cgit v1.2.3 From c0791ac76ec7cfdc3945efa67a6f72ee3623413c Mon Sep 17 00:00:00 2001 From: Marc Mutz Date: Wed, 12 Feb 2014 14:18:40 +0100 Subject: Add qHash() overloads for floating-point types MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit This implementation is based on GCC's implementation of std::hash, but only to the extent of checking for zero before hashing the bits. The bit hasher is the Qt one; I didn't even look what GCC uses. The check against 0.0 is mandated by the requirement to have \forall x,y: x == y => qHash(x) == qHash(y) which would be violated for x = 0.0 and y = -0.0 if we only hashed the bits. Implemented out-of-line to avoid potential FP-comparison warnings, as well as to be able to use the file-static hash() functions, which gets inlined unlike qHashBits(), which cannot be. [ChangeLog][QtCore][QHash/QSet] Allowed to use float, double and long double as QHash/QSet keys. Change-Id: I38cec4afb860f17e9f8be7b67544e58b330f8fff Reviewed-by: Thiago Macieira Reviewed-by: Jędrzej Nowacki --- tests/auto/corelib/tools/qhash/tst_qhash.cpp | 15 +++++++++++++++ 1 file changed, 15 insertions(+) (limited to 'tests') diff --git a/tests/auto/corelib/tools/qhash/tst_qhash.cpp b/tests/auto/corelib/tools/qhash/tst_qhash.cpp index af1c7aed15..ddb72a3c32 100644 --- a/tests/auto/corelib/tools/qhash/tst_qhash.cpp +++ b/tests/auto/corelib/tools/qhash/tst_qhash.cpp @@ -64,6 +64,7 @@ private slots: void rehash_isnt_quadratic(); void dont_need_default_constructor(); void qhash(); + void fp_qhash_of_zero_is_zero(); void qmultihash_specific(); void compare(); @@ -1043,6 +1044,20 @@ void tst_QHash::qhash() } } +void tst_QHash::fp_qhash_of_zero_is_zero() +{ + QCOMPARE(qHash(-0.0f), 0U); + QCOMPARE(qHash( 0.0f), 0U); + + QCOMPARE(qHash(-0.0 ), 0U); + QCOMPARE(qHash( 0.0 ), 0U); + +#ifndef Q_OS_DARWIN + QCOMPARE(qHash(-0.0L), 0U); + QCOMPARE(qHash( 0.0L), 0U); +#endif +} + void tst_QHash::qmultihash_specific() { QMultiHash hash1; -- cgit v1.2.3 From 634f82f1f1fda7983abf70b58e43c580b1f01df0 Mon Sep 17 00:00:00 2001 From: Thiago Macieira Date: Mon, 6 Aug 2012 19:57:59 +0200 Subject: Add a testAndSet overload to the atomics that returns the current value This is extremely useful, since the most common action after a failed compare-and-swap is to loop around, trying again with the current value as found in memory. Code currently written as: do { Type value = atomic.load(); ... } while (!atomic.testAndSetRelaxed(value, desired)); Becomes: Type value = atomic.load(); do { ... } while (!atomic.testAndSetRelaxed(value, desired, value)); In most CPU architectures, the value that was found in memory is known to the compare-and-swap code, so this is more efficient than the previous code. In architectures where the value is not known, the new code is no worse than before. The implementation sometimes modified an existing function, sometimes it added a new one, depending on whether more registers were needed in the assembly (like ARMv6-7), the code became more complex (ARMv5), the optimizer failed (C++11), or it was just plain equivalent (MIPS). Change-Id: I7d6d200ea9746ec8978a0c1e1969dbc3580b9285 Reviewed-by: Oswald Buddenhagen Reviewed-by: Lars Knoll Reviewed-by: Thiago Macieira --- .../corelib/thread/qatomicint/tst_qatomicint.cpp | 91 +++++ .../thread/qatomicinteger/tst_qatomicinteger.cpp | 382 ++++++++++++++++++++- .../thread/qatomicpointer/tst_qatomicpointer.cpp | 53 +++ 3 files changed, 525 insertions(+), 1 deletion(-) (limited to 'tests') diff --git a/tests/auto/corelib/thread/qatomicint/tst_qatomicint.cpp b/tests/auto/corelib/thread/qatomicint/tst_qatomicint.cpp index 42b3a52531..f0d817d37d 100644 --- a/tests/auto/corelib/thread/qatomicint/tst_qatomicint.cpp +++ b/tests/auto/corelib/thread/qatomicint/tst_qatomicint.cpp @@ -84,6 +84,8 @@ private slots: void fetchAndAdd_data(); void fetchAndAdd(); + void operators(); + // stress tests void testAndSet_loop(); void fetchAndAdd_loop(); @@ -540,6 +542,43 @@ void tst_QAtomicInt::testAndSet() QAtomicInt atomic = value; QTEST(atomic.testAndSetOrdered(expected, newval) ? 1 : 0, "result"); } + +#ifdef Q_ATOMIC_INT32_IS_SUPPORTED + QFETCH(int, result); + // the new implementation has the version that loads the current value + + { + QAtomicInt atomic = value; + int currentval = 0xdeadbeef; + QCOMPARE(atomic.testAndSetRelaxed(expected, newval, currentval), result); + if (!result) + QCOMPARE(currentval, value); + } + + { + QAtomicInt atomic = value; + int currentval = 0xdeadbeef; + QCOMPARE(atomic.testAndSetAcquire(expected, newval, currentval), result); + if (!result) + QCOMPARE(currentval, value); + } + + { + QAtomicInt atomic = value; + int currentval = 0xdeadbeef; + QCOMPARE(atomic.testAndSetRelease(expected, newval, currentval), result); + if (!result) + QCOMPARE(currentval, value); + } + + { + QAtomicInt atomic = value; + int currentval = 0xdeadbeef; + QCOMPARE(atomic.testAndSetOrdered(expected, newval, currentval), result); + if (!result) + QCOMPARE(currentval, value); + } +#endif } void tst_QAtomicInt::isFetchAndStoreNative() @@ -770,6 +809,58 @@ void tst_QAtomicInt::fetchAndAdd() } } +void tst_QAtomicInt::operators() +{ + { + // Test that QBasicAtomicInt also has operator= and cast operators + // We've been using them for QAtomicInt elsewhere + QBasicAtomicInt atomic = Q_BASIC_ATOMIC_INITIALIZER(0); + atomic = 1; + QCOMPARE(int(atomic), 1); + } + + QAtomicInt atomic = 0; + int x = ++atomic; + QCOMPARE(int(atomic), x); + QCOMPARE(int(atomic), 1); + + x = atomic++; + QCOMPARE(int(atomic), x + 1); + QCOMPARE(int(atomic), 2); + + x = atomic--; + QCOMPARE(int(atomic), x - 1); + QCOMPARE(int(atomic), 1); + + x = --atomic; + QCOMPARE(int(atomic), x); + QCOMPARE(int(atomic), 0); + + x = (atomic += 1); + QCOMPARE(int(atomic), x); + QCOMPARE(int(atomic), 1); + + x = (atomic -= 1); + QCOMPARE(int(atomic), x); + QCOMPARE(int(atomic), 0); + + x = (atomic |= 0xf); + QCOMPARE(int(atomic), x); + QCOMPARE(int(atomic), 0xf); + + x = (atomic &= 0x17); + QCOMPARE(int(atomic), x); + QCOMPARE(int(atomic), 7); + + x = (atomic ^= 0x14); + QCOMPARE(int(atomic), x); + QCOMPARE(int(atomic), 0x13); + + x = (atomic ^= atomic); + QCOMPARE(int(atomic), x); + QCOMPARE(int(atomic), 0); +} + void tst_QAtomicInt::testAndSet_loop() { QTime stopWatch; diff --git a/tests/auto/corelib/thread/qatomicinteger/tst_qatomicinteger.cpp b/tests/auto/corelib/thread/qatomicinteger/tst_qatomicinteger.cpp index a7139b6a9a..6ddd2ff233 100644 --- a/tests/auto/corelib/thread/qatomicinteger/tst_qatomicinteger.cpp +++ b/tests/auto/corelib/thread/qatomicinteger/tst_qatomicinteger.cpp @@ -143,6 +143,9 @@ private Q_SLOTS: void assign_data() { addData(); } void assign(); + void operatorInteger_data() { addData(); } + void operatorInteger(); + void loadAcquireStoreRelease_data() { addData(); } void loadAcquireStoreRelease(); @@ -152,11 +155,29 @@ private Q_SLOTS: void testAndSet_data() { addData(); } void testAndSet(); + void testAndSet3_data() { addData(); } + void testAndSet3(); + void fetchAndStore_data() { addData(); } void fetchAndStore(); void fetchAndAdd_data() { addData(); } void fetchAndAdd(); + + void fetchAndSub_data() { addData(); } + void fetchAndSub(); + + void addSub_data() { addData(); } + void addSub(); + + void fetchAndOr_data() { addData(); } + void fetchAndOr(); + + void fetchAndAnd_data() { addData(); } + void fetchAndAnd(); + + void fetchAndXor_data() { addData(); } + void fetchAndXor(); }; template inline void booleanHelper() { } @@ -285,9 +306,13 @@ void tst_QAtomicIntegerXX::assign() QCOMPARE(copy.load(), atomic.load()); QAtomicInteger copy2; - copy2 = atomic; + copy2 = atomic; // operator=(const QAtomicInteger &) QCOMPARE(copy2.load(), atomic.load()); + QAtomicInteger copy2bis; + copy2bis = atomic.load(); // operator=(T) + QCOMPARE(copy2bis.load(), atomic.load()); + // move QAtomicInteger copy3; copy3 = qMove(copy); @@ -298,6 +323,16 @@ void tst_QAtomicIntegerXX::assign() QCOMPARE(copy4.load(), atomic.load()); } +void tst_QAtomicIntegerXX::operatorInteger() +{ + QFETCH(LargeInt, value); + + QAtomicInteger atomic(value); + T val2 = atomic; + QCOMPARE(val2, atomic.load()); + QCOMPARE(val2, T(value)); +} + void tst_QAtomicIntegerXX::loadAcquireStoreRelease() { QFETCH(LargeInt, value); @@ -327,6 +362,17 @@ void tst_QAtomicIntegerXX::refDeref() QCOMPARE(atomic.load(), prevValue); QCOMPARE(atomic.ref(), (value != 0)); QCOMPARE(atomic.load(), T(value)); + + QCOMPARE(++atomic, nextValue); + QCOMPARE(--atomic, T(value)); + QCOMPARE(--atomic, prevValue); + QCOMPARE(++atomic, T(value)); + + QCOMPARE(atomic++, T(value)); + QCOMPARE(atomic--, nextValue); + QCOMPARE(atomic--, T(value)); + QCOMPARE(atomic++, prevValue); + QCOMPARE(atomic.load(), T(value)); } void tst_QAtomicIntegerXX::testAndSet() @@ -360,6 +406,42 @@ void tst_QAtomicIntegerXX::testAndSet() QCOMPARE(atomic.loadAcquire(), T(value)); } +void tst_QAtomicIntegerXX::testAndSet3() +{ + QFETCH(LargeInt, value); + T newValue = ~T(value); + T oldValue; + QAtomicInteger atomic(value); + + QVERIFY(atomic.testAndSetRelaxed(value, newValue, oldValue)); + QCOMPARE(atomic.load(), newValue); + QVERIFY(!atomic.testAndSetRelaxed(value, newValue, oldValue)); + QCOMPARE(oldValue, newValue); + QVERIFY(atomic.testAndSetRelaxed(newValue, value, oldValue)); + QCOMPARE(atomic.load(), T(value)); + + QVERIFY(atomic.testAndSetAcquire(value, newValue, oldValue)); + QCOMPARE(atomic.load(), newValue); + QVERIFY(!atomic.testAndSetAcquire(value, newValue, oldValue)); + QCOMPARE(oldValue, newValue); + QVERIFY(atomic.testAndSetAcquire(newValue, value, oldValue)); + QCOMPARE(atomic.load(), T(value)); + + QVERIFY(atomic.testAndSetRelease(value, newValue, oldValue)); + QCOMPARE(atomic.loadAcquire(), newValue); + QVERIFY(!atomic.testAndSetRelease(value, newValue, oldValue)); + QCOMPARE(oldValue, newValue); + QVERIFY(atomic.testAndSetRelease(newValue, value, oldValue)); + QCOMPARE(atomic.loadAcquire(), T(value)); + + QVERIFY(atomic.testAndSetOrdered(value, newValue, oldValue)); + QCOMPARE(atomic.loadAcquire(), newValue); + QVERIFY(!atomic.testAndSetOrdered(value, newValue, oldValue)); + QCOMPARE(oldValue, newValue); + QVERIFY(atomic.testAndSetOrdered(newValue, value, oldValue)); + QCOMPARE(atomic.loadAcquire(), T(value)); +} + void tst_QAtomicIntegerXX::fetchAndStore() { QFETCH(LargeInt, value); @@ -433,6 +515,304 @@ void tst_QAtomicIntegerXX::fetchAndAdd() QCOMPARE(atomic.loadAcquire(), newValue2); QCOMPARE(atomic.fetchAndAddOrdered(parcel1), newValue2); QCOMPARE(atomic.loadAcquire(), T(value)); + + // operator+= + QCOMPARE(atomic += parcel1, newValue1); + QCOMPARE(atomic += parcel2, T(value)); + QCOMPARE(atomic += parcel2, newValue2); + QCOMPARE(atomic += parcel1, T(value)); +} + +void tst_QAtomicIntegerXX::fetchAndSub() +{ + QFETCH(LargeInt, value); + QAtomicInteger atomic(value); + + // note: this test has undefined behavior for signed max and min + T parcel1 = 42; + T parcel2 = T(0-parcel1); + T newValue1 = T(value) - parcel1; + T newValue2 = T(value) - parcel2; + + QCOMPARE(atomic.fetchAndSubRelaxed(parcel1), T(value)); + QCOMPARE(atomic.load(), newValue1); + QCOMPARE(atomic.fetchAndSubRelaxed(parcel2), newValue1); + QCOMPARE(atomic.load(), T(value)); + QCOMPARE(atomic.fetchAndSubRelaxed(parcel2), T(value)); + QCOMPARE(atomic.load(), newValue2); + QCOMPARE(atomic.fetchAndSubRelaxed(parcel1), newValue2); + QCOMPARE(atomic.load(), T(value)); + + QCOMPARE(atomic.fetchAndSubAcquire(parcel1), T(value)); + QCOMPARE(atomic.load(), newValue1); + QCOMPARE(atomic.fetchAndSubAcquire(parcel2), newValue1); + QCOMPARE(atomic.load(), T(value)); + QCOMPARE(atomic.fetchAndSubAcquire(parcel2), T(value)); + QCOMPARE(atomic.load(), newValue2); + QCOMPARE(atomic.fetchAndSubAcquire(parcel1), newValue2); + QCOMPARE(atomic.load(), T(value)); + + QCOMPARE(atomic.fetchAndSubRelease(parcel1), T(value)); + QCOMPARE(atomic.loadAcquire(), newValue1); + QCOMPARE(atomic.fetchAndSubRelease(parcel2), newValue1); + QCOMPARE(atomic.loadAcquire(), T(value)); + QCOMPARE(atomic.fetchAndSubRelease(parcel2), T(value)); + QCOMPARE(atomic.loadAcquire(), newValue2); + QCOMPARE(atomic.fetchAndSubRelease(parcel1), newValue2); + QCOMPARE(atomic.loadAcquire(), T(value)); + + QCOMPARE(atomic.fetchAndSubOrdered(parcel1), T(value)); + QCOMPARE(atomic.loadAcquire(), newValue1); + QCOMPARE(atomic.fetchAndSubOrdered(parcel2), newValue1); + QCOMPARE(atomic.loadAcquire(), T(value)); + QCOMPARE(atomic.fetchAndSubOrdered(parcel2), T(value)); + QCOMPARE(atomic.loadAcquire(), newValue2); + QCOMPARE(atomic.fetchAndSubOrdered(parcel1), newValue2); + QCOMPARE(atomic.loadAcquire(), T(value)); + + // operator-= + QCOMPARE(atomic -= parcel1, newValue1); + QCOMPARE(atomic -= parcel2, T(value)); + QCOMPARE(atomic -= parcel2, newValue2); + QCOMPARE(atomic -= parcel1, T(value)); +} + +void tst_QAtomicIntegerXX::addSub() +{ + QFETCH(LargeInt, value); + QAtomicInteger atomic(value); + + // note: this test has undefined behavior for signed max and min + T parcel1 = 42; + T parcel2 = T(0-parcel1); + T newValue1 = T(value) + parcel1; + T newValue2 = T(value) - parcel1; + + QCOMPARE(atomic.fetchAndAddRelaxed(parcel1), T(value)); + QCOMPARE(atomic.load(), newValue1); + QCOMPARE(atomic.fetchAndSubRelaxed(parcel1), newValue1); + QCOMPARE(atomic.load(), T(value)); + QCOMPARE(atomic.fetchAndSubRelaxed(parcel1), T(value)); + QCOMPARE(atomic.load(), newValue2); + QCOMPARE(atomic.fetchAndAddRelaxed(parcel1), newValue2); + QCOMPARE(atomic.load(), T(value)); + QCOMPARE(atomic.fetchAndAddRelaxed(parcel2), T(value)); + QCOMPARE(atomic.load(), newValue2); + QCOMPARE(atomic.fetchAndSubRelaxed(parcel2), newValue2); + QCOMPARE(atomic.load(), T(value)); + QCOMPARE(atomic.fetchAndSubRelaxed(parcel2), T(value)); + QCOMPARE(atomic.load(), newValue1); + QCOMPARE(atomic.fetchAndAddRelaxed(parcel2), newValue1); + QCOMPARE(atomic.load(), T(value)); + + QCOMPARE(atomic.fetchAndAddAcquire(parcel1), T(value)); + QCOMPARE(atomic.load(), newValue1); + QCOMPARE(atomic.fetchAndSubAcquire(parcel1), newValue1); + QCOMPARE(atomic.load(), T(value)); + QCOMPARE(atomic.fetchAndSubAcquire(parcel1), T(value)); + QCOMPARE(atomic.load(), newValue2); + QCOMPARE(atomic.fetchAndAddAcquire(parcel1), newValue2); + QCOMPARE(atomic.load(), T(value)); + QCOMPARE(atomic.fetchAndAddAcquire(parcel2), T(value)); + QCOMPARE(atomic.load(), newValue2); + QCOMPARE(atomic.fetchAndSubAcquire(parcel2), newValue2); + QCOMPARE(atomic.load(), T(value)); + QCOMPARE(atomic.fetchAndSubAcquire(parcel2), T(value)); + QCOMPARE(atomic.load(), newValue1); + QCOMPARE(atomic.fetchAndAddAcquire(parcel2), newValue1); + QCOMPARE(atomic.load(), T(value)); + + QCOMPARE(atomic.fetchAndAddRelease(parcel1), T(value)); + QCOMPARE(atomic.load(), newValue1); + QCOMPARE(atomic.fetchAndSubRelease(parcel1), newValue1); + QCOMPARE(atomic.load(), T(value)); + QCOMPARE(atomic.fetchAndSubRelease(parcel1), T(value)); + QCOMPARE(atomic.load(), newValue2); + QCOMPARE(atomic.fetchAndAddRelease(parcel1), newValue2); + QCOMPARE(atomic.load(), T(value)); + QCOMPARE(atomic.fetchAndAddRelease(parcel2), T(value)); + QCOMPARE(atomic.load(), newValue2); + QCOMPARE(atomic.fetchAndSubRelease(parcel2), newValue2); + QCOMPARE(atomic.load(), T(value)); + QCOMPARE(atomic.fetchAndSubRelease(parcel2), T(value)); + QCOMPARE(atomic.load(), newValue1); + QCOMPARE(atomic.fetchAndAddRelease(parcel2), newValue1); + QCOMPARE(atomic.load(), T(value)); + + QCOMPARE(atomic.fetchAndAddOrdered(parcel1), T(value)); + QCOMPARE(atomic.load(), newValue1); + QCOMPARE(atomic.fetchAndSubOrdered(parcel1), newValue1); + QCOMPARE(atomic.load(), T(value)); + QCOMPARE(atomic.fetchAndSubOrdered(parcel1), T(value)); + QCOMPARE(atomic.load(), newValue2); + QCOMPARE(atomic.fetchAndAddOrdered(parcel1), newValue2); + QCOMPARE(atomic.load(), T(value)); + QCOMPARE(atomic.fetchAndAddOrdered(parcel2), T(value)); + QCOMPARE(atomic.load(), newValue2); + QCOMPARE(atomic.fetchAndSubOrdered(parcel2), newValue2); + QCOMPARE(atomic.load(), T(value)); + QCOMPARE(atomic.fetchAndSubOrdered(parcel2), T(value)); + QCOMPARE(atomic.load(), newValue1); + QCOMPARE(atomic.fetchAndAddOrdered(parcel2), newValue1); + QCOMPARE(atomic.load(), T(value)); + + // operator+= and operator-= + QCOMPARE(atomic += parcel1, newValue1); + QCOMPARE(atomic -= parcel1, T(value)); + QCOMPARE(atomic -= parcel1, newValue2); + QCOMPARE(atomic += parcel1, T(value)); + QCOMPARE(atomic += parcel2, newValue2); + QCOMPARE(atomic -= parcel2, T(value)); + QCOMPARE(atomic -= parcel2, newValue1); + QCOMPARE(atomic += parcel2, T(value)); +} + +void tst_QAtomicIntegerXX::fetchAndOr() +{ + QFETCH(LargeInt, value); + QAtomicInteger atomic(value); + + T zero = 0; + T one = 1; + T minusOne = T(~0); + + QCOMPARE(atomic.fetchAndOrRelaxed(zero), T(value)); + QCOMPARE(atomic.fetchAndOrRelaxed(one), T(value)); + QCOMPARE(atomic.load(), T(value | 1)); + QCOMPARE(atomic.fetchAndOrRelaxed(minusOne), T(value | 1)); + QCOMPARE(atomic.load(), minusOne); + + atomic.store(value); + QCOMPARE(atomic.fetchAndOrAcquire(zero), T(value)); + QCOMPARE(atomic.fetchAndOrAcquire(one), T(value)); + QCOMPARE(atomic.load(), T(value | 1)); + QCOMPARE(atomic.fetchAndOrAcquire(minusOne), T(value | 1)); + QCOMPARE(atomic.load(), minusOne); + + atomic.store(value); + QCOMPARE(atomic.fetchAndOrRelease(zero), T(value)); + QCOMPARE(atomic.fetchAndOrRelease(one), T(value)); + QCOMPARE(atomic.load(), T(value | 1)); + QCOMPARE(atomic.fetchAndOrRelease(minusOne), T(value | 1)); + QCOMPARE(atomic.load(), minusOne); + + atomic.store(value); + QCOMPARE(atomic.fetchAndOrOrdered(zero), T(value)); + QCOMPARE(atomic.fetchAndOrOrdered(one), T(value)); + QCOMPARE(atomic.load(), T(value | 1)); + QCOMPARE(atomic.fetchAndOrOrdered(minusOne), T(value | 1)); + QCOMPARE(atomic.load(), minusOne); + + atomic.store(value); + QCOMPARE(atomic |= zero, T(value)); + QCOMPARE(atomic |= one, T(value | 1)); + QCOMPARE(atomic |= minusOne, minusOne); +} + +void tst_QAtomicIntegerXX::fetchAndAnd() +{ + QFETCH(LargeInt, value); + QAtomicInteger atomic(value); + + T zero = 0; + T f = 0xf; + T minusOne = T(~0); + + QCOMPARE(atomic.fetchAndAndRelaxed(minusOne), T(value)); + QCOMPARE(atomic.load(), T(value)); + QCOMPARE(atomic.fetchAndAndRelaxed(f), T(value)); + QCOMPARE(atomic.load(), T(value & 0xf)); + QCOMPARE(atomic.fetchAndAndRelaxed(zero), T(value & 0xf)); + QCOMPARE(atomic.load(), zero); + + atomic.store(value); + QCOMPARE(atomic.fetchAndAndAcquire(minusOne), T(value)); + QCOMPARE(atomic.load(), T(value)); + QCOMPARE(atomic.fetchAndAndAcquire(f), T(value)); + QCOMPARE(atomic.load(), T(value & 0xf)); + QCOMPARE(atomic.fetchAndAndAcquire(zero), T(value & 0xf)); + QCOMPARE(atomic.load(), zero); + + atomic.store(value); + QCOMPARE(atomic.fetchAndAndRelease(minusOne), T(value)); + QCOMPARE(atomic.load(), T(value)); + QCOMPARE(atomic.fetchAndAndRelease(f), T(value)); + QCOMPARE(atomic.load(), T(value & 0xf)); + QCOMPARE(atomic.fetchAndAndRelease(zero), T(value & 0xf)); + QCOMPARE(atomic.load(), zero); + + atomic.store(value); + QCOMPARE(atomic.fetchAndAndOrdered(minusOne), T(value)); + QCOMPARE(atomic.load(), T(value)); + QCOMPARE(atomic.fetchAndAndOrdered(f), T(value)); + QCOMPARE(atomic.load(), T(value & 0xf)); + QCOMPARE(atomic.fetchAndAndOrdered(zero), T(value & 0xf)); + QCOMPARE(atomic.load(), zero); + + atomic.store(value); + QCOMPARE(atomic &= minusOne, T(value)); + QCOMPARE(atomic &= f, T(value & 0xf)); + QCOMPARE(atomic &= zero, zero); +} + +void tst_QAtomicIntegerXX::fetchAndXor() +{ + QFETCH(LargeInt, value); + QAtomicInteger atomic(value); + + T zero = 0; + T pattern = T(Q_UINT64_C(0xcccccccccccccccc)); + T minusOne = T(~0); + + QCOMPARE(atomic.fetchAndXorRelaxed(zero), T(value)); + QCOMPARE(atomic.load(), T(value)); + QCOMPARE(atomic.fetchAndXorRelaxed(pattern), T(value)); + QCOMPARE(atomic.load(), T(value ^ pattern)); + QCOMPARE(atomic.fetchAndXorRelaxed(pattern), T(value ^ pattern)); + QCOMPARE(atomic.load(), T(value)); + QCOMPARE(atomic.fetchAndXorRelaxed(minusOne), T(value)); + QCOMPARE(atomic.load(), T(~value)); + QCOMPARE(atomic.fetchAndXorRelaxed(minusOne), T(~value)); + QCOMPARE(atomic.load(), T(value)); + + QCOMPARE(atomic.fetchAndXorAcquire(zero), T(value)); + QCOMPARE(atomic.load(), T(value)); + QCOMPARE(atomic.fetchAndXorAcquire(pattern), T(value)); + QCOMPARE(atomic.load(), T(value ^ pattern)); + QCOMPARE(atomic.fetchAndXorAcquire(pattern), T(value ^ pattern)); + QCOMPARE(atomic.load(), T(value)); + QCOMPARE(atomic.fetchAndXorAcquire(minusOne), T(value)); + QCOMPARE(atomic.load(), T(~value)); + QCOMPARE(atomic.fetchAndXorAcquire(minusOne), T(~value)); + QCOMPARE(atomic.load(), T(value)); + + QCOMPARE(atomic.fetchAndXorRelease(zero), T(value)); + QCOMPARE(atomic.load(), T(value)); + QCOMPARE(atomic.fetchAndXorRelease(pattern), T(value)); + QCOMPARE(atomic.load(), T(value ^ pattern)); + QCOMPARE(atomic.fetchAndXorRelease(pattern), T(value ^ pattern)); + QCOMPARE(atomic.load(), T(value)); + QCOMPARE(atomic.fetchAndXorRelease(minusOne), T(value)); + QCOMPARE(atomic.load(), T(~value)); + QCOMPARE(atomic.fetchAndXorRelease(minusOne), T(~value)); + QCOMPARE(atomic.load(), T(value)); + + QCOMPARE(atomic.fetchAndXorOrdered(zero), T(value)); + QCOMPARE(atomic.load(), T(value)); + QCOMPARE(atomic.fetchAndXorOrdered(pattern), T(value)); + QCOMPARE(atomic.load(), T(value ^ pattern)); + QCOMPARE(atomic.fetchAndXorOrdered(pattern), T(value ^ pattern)); + QCOMPARE(atomic.load(), T(value)); + QCOMPARE(atomic.fetchAndXorOrdered(minusOne), T(value)); + QCOMPARE(atomic.load(), T(~value)); + QCOMPARE(atomic.fetchAndXorOrdered(minusOne), T(~value)); + QCOMPARE(atomic.load(), T(value)); + + QCOMPARE(atomic ^= zero, T(value)); + QCOMPARE(atomic ^= pattern, T(value ^ pattern)); + QCOMPARE(atomic ^= pattern, T(value)); + QCOMPARE(atomic ^= minusOne, T(~value)); + QCOMPARE(atomic ^= minusOne, T(value)); } #include "tst_qatomicinteger.moc" diff --git a/tests/auto/corelib/thread/qatomicpointer/tst_qatomicpointer.cpp b/tests/auto/corelib/thread/qatomicpointer/tst_qatomicpointer.cpp index d4e777e35b..595808e270 100644 --- a/tests/auto/corelib/thread/qatomicpointer/tst_qatomicpointer.cpp +++ b/tests/auto/corelib/thread/qatomicpointer/tst_qatomicpointer.cpp @@ -70,6 +70,8 @@ private slots: void constAndVolatile(); void forwardDeclared(); + + void operators(); private: static void warningFreeHelper(); }; @@ -664,5 +666,56 @@ void tst_QAtomicPointer::forwardDeclared() QVERIFY(true); } +template static void operators_helper() +{ + typedef T *Ptr; + T array[3] = {}; + Ptr zero = array; + Ptr one = array + 1; + Ptr two = array + 2; + + { + // Test that QBasicAtomicPointer also has operator= and cast operators + // We've been using them for QAtomicPointer elsewhere + QBasicAtomicPointer atomic = Q_BASIC_ATOMIC_INITIALIZER(0); + atomic = one; + QCOMPARE(Ptr(atomic), one); + } + + QAtomicPointer atomic = zero; + Ptr x = ++atomic; + QCOMPARE(Ptr(atomic), x); + QCOMPARE(Ptr(atomic), one); + + x = atomic++; + QCOMPARE(Ptr(atomic), x + 1); + QCOMPARE(Ptr(atomic), two); + + x = atomic--; + QCOMPARE(Ptr(atomic), x - 1); + QCOMPARE(Ptr(atomic), one); + + x = --atomic; + QCOMPARE(Ptr(atomic), x); + QCOMPARE(Ptr(atomic), zero); + + x = (atomic += 1); + QCOMPARE(Ptr(atomic), x); + QCOMPARE(Ptr(atomic), one); + + x = (atomic -= 1); + QCOMPARE(Ptr(atomic), x); + QCOMPARE(Ptr(atomic), zero); +} + +struct Big { double d[10]; }; +void tst_QAtomicPointer::operators() +{ + operators_helper(); + operators_helper(); + operators_helper(); + operators_helper(); +} + QTEST_APPLESS_MAIN(tst_QAtomicPointer) #include "tst_qatomicpointer.moc" -- cgit v1.2.3 From 579526cfec082679241548a0fca1ff9ba2c350a7 Mon Sep 17 00:00:00 2001 From: Thiago Macieira Date: Mon, 20 Jan 2014 16:03:30 -0800 Subject: Make the printing of complex Unicode in a QString prettier This also has the advantage of not requiring the use of the locale codec. Quite an advantage if you're debugging the locale codec. But it's mostly so that we don't get question marks that hide the difference we were trying to locate. [ChangeLog][QtTest] QtTest now prints an escaped version of QStrings that failed to compare with QCOMPARE. That is, instead of converting non-printable characters to question marks, QtTest will print the Unicode representation of the character in question. Change-Id: I44c1ef3246b188c913dacd3ca4df02581356ea41 Reviewed-by: Lars Knoll --- .../testlib/selftests/expected_cmptest.lightxml | 28 +++++++++++----------- tests/auto/testlib/selftests/expected_cmptest.txt | 28 +++++++++++----------- tests/auto/testlib/selftests/expected_cmptest.xml | 28 +++++++++++----------- .../testlib/selftests/expected_cmptest.xunitxml | 28 +++++++++++----------- .../testlib/selftests/expected_subtest.lightxml | 8 +++---- tests/auto/testlib/selftests/expected_subtest.txt | 8 +++---- tests/auto/testlib/selftests/expected_subtest.xml | 8 +++---- .../testlib/selftests/expected_subtest.xunitxml | 8 +++---- 8 files changed, 72 insertions(+), 72 deletions(-) (limited to 'tests') diff --git a/tests/auto/testlib/selftests/expected_cmptest.lightxml b/tests/auto/testlib/selftests/expected_cmptest.lightxml index a83a971d8a..3a776ea7cb 100644 --- a/tests/auto/testlib/selftests/expected_cmptest.lightxml +++ b/tests/auto/testlib/selftests/expected_cmptest.lightxml @@ -54,48 +54,48 @@ + Actual (opA): "string3" + Expected (opB): "DIFFERS"]]> + Actual (opA): "string3" + Expected (opB): "DIFFERS"]]> + Actual (opA) size: 2 + Expected (opB) size: 1]]> + Actual (opA) size: 12 + Expected (opB) size: 1]]> + Actual (opA) size: 1 + Expected (opB) size: 12]]> + Actual (int1): 3 + Expected (int2): 4]]> + Actual (double1): 1.5 + Expected (double2): 1]]> diff --git a/tests/auto/testlib/selftests/expected_cmptest.txt b/tests/auto/testlib/selftests/expected_cmptest.txt index b3d34d49de..8473b4528e 100644 --- a/tests/auto/testlib/selftests/expected_cmptest.txt +++ b/tests/auto/testlib/selftests/expected_cmptest.txt @@ -23,32 +23,32 @@ FAIL! : tst_Cmptest::compare_tostring(both non-null user type) Compared values PASS : tst_Cmptest::compareQStringLists(empty lists) PASS : tst_Cmptest::compareQStringLists(equal lists) FAIL! : tst_Cmptest::compareQStringLists(last item different) Compared lists differ at index 2. - Actual (opA): 'string3' - Expected (opB): 'DIFFERS' + Actual (opA): "string3" + Expected (opB): "DIFFERS" Loc: [tst_cmptest.cpp(313)] FAIL! : tst_Cmptest::compareQStringLists(second-last item different) Compared lists differ at index 2. - Actual (opA): 'string3' - Expected (opB): 'DIFFERS' + Actual (opA): "string3" + Expected (opB): "DIFFERS" Loc: [tst_cmptest.cpp(313)] FAIL! : tst_Cmptest::compareQStringLists(prefix) Compared lists have different sizes. - Actual (opA) size: '2' - Expected (opB) size: '1' + Actual (opA) size: 2 + Expected (opB) size: 1 Loc: [tst_cmptest.cpp(313)] FAIL! : tst_Cmptest::compareQStringLists(short list second) Compared lists have different sizes. - Actual (opA) size: '12' - Expected (opB) size: '1' + Actual (opA) size: 12 + Expected (opB) size: 1 Loc: [tst_cmptest.cpp(313)] FAIL! : tst_Cmptest::compareQStringLists(short list first) Compared lists have different sizes. - Actual (opA) size: '1' - Expected (opB) size: '12' + Actual (opA) size: 1 + Expected (opB) size: 12 Loc: [tst_cmptest.cpp(313)] FAIL! : tst_Cmptest::compareQListInt() Compared lists differ at index 2. - Actual (int1): '3' - Expected (int2): '4' + Actual (int1): 3 + Expected (int2): 4 Loc: [tst_cmptest.cpp(320)] FAIL! : tst_Cmptest::compareQListDouble() Compared lists differ at index 0. - Actual (double1): '1.5' - Expected (double2): '1' + Actual (double1): 1.5 + Expected (double2): 1 Loc: [tst_cmptest.cpp(327)] PASS : tst_Cmptest::compareQPixmaps(both null) FAIL! : tst_Cmptest::compareQPixmaps(one null) Compared QPixmaps differ. diff --git a/tests/auto/testlib/selftests/expected_cmptest.xml b/tests/auto/testlib/selftests/expected_cmptest.xml index 08a40fb466..970544e4b6 100644 --- a/tests/auto/testlib/selftests/expected_cmptest.xml +++ b/tests/auto/testlib/selftests/expected_cmptest.xml @@ -56,48 +56,48 @@ + Actual (opA): "string3" + Expected (opB): "DIFFERS"]]> + Actual (opA): "string3" + Expected (opB): "DIFFERS"]]> + Actual (opA) size: 2 + Expected (opB) size: 1]]> + Actual (opA) size: 12 + Expected (opB) size: 1]]> + Actual (opA) size: 1 + Expected (opB) size: 12]]> + Actual (int1): 3 + Expected (int2): 4]]> + Actual (double1): 1.5 + Expected (double2): 1]]> diff --git a/tests/auto/testlib/selftests/expected_cmptest.xunitxml b/tests/auto/testlib/selftests/expected_cmptest.xunitxml index e7d76ac839..7874c6c52e 100644 --- a/tests/auto/testlib/selftests/expected_cmptest.xunitxml +++ b/tests/auto/testlib/selftests/expected_cmptest.xunitxml @@ -23,30 +23,30 @@ + Actual (opA): "string3" + Expected (opB): "DIFFERS"" result="fail"/> + Actual (opA): "string3" + Expected (opB): "DIFFERS"" result="fail"/> + Actual (opA) size: 2 + Expected (opB) size: 1" result="fail"/> + Actual (opA) size: 12 + Expected (opB) size: 1" result="fail"/> + Actual (opA) size: 1 + Expected (opB) size: 12" result="fail"/> + Actual (int1): 3 + Expected (int2): 4" result="fail"/> + Actual (double1): 1.5 + Expected (double2): 1" result="fail"/> + Actual (str) : "hello1" + Expected (QString("hello0")): "hello0"]]> @@ -143,8 +143,8 @@ + Actual (str) : "hello2" + Expected (QString("hello0")): "hello0"]]> diff --git a/tests/auto/testlib/selftests/expected_subtest.txt b/tests/auto/testlib/selftests/expected_subtest.txt index e874e0c020..9990b5439d 100644 --- a/tests/auto/testlib/selftests/expected_subtest.txt +++ b/tests/auto/testlib/selftests/expected_subtest.txt @@ -33,15 +33,15 @@ PASS : tst_Subtest::test3(data0) QDEBUG : tst_Subtest::test3(data1) init test3 data1 QDEBUG : tst_Subtest::test3(data1) test2 test3 data1 FAIL! : tst_Subtest::test3(data1) Compared values are not the same - Actual (str) : hello1 - Expected (QString("hello0")): hello0 + Actual (str) : "hello1" + Expected (QString("hello0")): "hello0" Loc: [tst_subtest.cpp(154)] QDEBUG : tst_Subtest::test3(data1) cleanup test3 data1 QDEBUG : tst_Subtest::test3(data2) init test3 data2 QDEBUG : tst_Subtest::test3(data2) test2 test3 data2 FAIL! : tst_Subtest::test3(data2) Compared values are not the same - Actual (str) : hello2 - Expected (QString("hello0")): hello0 + Actual (str) : "hello2" + Expected (QString("hello0")): "hello0" Loc: [tst_subtest.cpp(154)] QDEBUG : tst_Subtest::test3(data2) cleanup test3 data2 QDEBUG : tst_Subtest::cleanupTestCase() cleanupTestCase cleanupTestCase (null) diff --git a/tests/auto/testlib/selftests/expected_subtest.xml b/tests/auto/testlib/selftests/expected_subtest.xml index cda4df01f3..1107bcb070 100644 --- a/tests/auto/testlib/selftests/expected_subtest.xml +++ b/tests/auto/testlib/selftests/expected_subtest.xml @@ -127,8 +127,8 @@ + Actual (str) : "hello1" + Expected (QString("hello0")): "hello0"]]> @@ -145,8 +145,8 @@ + Actual (str) : "hello2" + Expected (QString("hello0")): "hello0"]]> diff --git a/tests/auto/testlib/selftests/expected_subtest.xunitxml b/tests/auto/testlib/selftests/expected_subtest.xunitxml index 5f7024e8ba..753711f837 100644 --- a/tests/auto/testlib/selftests/expected_subtest.xunitxml +++ b/tests/auto/testlib/selftests/expected_subtest.xunitxml @@ -38,14 +38,14 @@ + Actual (str) : "hello1" + Expected (QString("hello0")): "hello0"" result="fail"/> + Actual (str) : "hello2" + Expected (QString("hello0")): "hello0"" result="fail"/> -- cgit v1.2.3 From 6fbef080a07f5b9b5a3bda985fd020a0bf064973 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?J=C3=B8rgen=20Lind?= Date: Thu, 13 Feb 2014 22:13:02 +0100 Subject: QOpenGLTextureBlitter: add some autotests Change-Id: I07a4847a19908c1a6d7fb02649b306dfa0148f49 Reviewed-by: Laszlo Agocs --- tests/auto/gui/qopengl/tst_qopengl.cpp | 191 +++++++++++++++++++++++++++++++++ 1 file changed, 191 insertions(+) (limited to 'tests') diff --git a/tests/auto/gui/qopengl/tst_qopengl.cpp b/tests/auto/gui/qopengl/tst_qopengl.cpp index e39380a095..975c2acefd 100644 --- a/tests/auto/gui/qopengl/tst_qopengl.cpp +++ b/tests/auto/gui/qopengl/tst_qopengl.cpp @@ -48,6 +48,10 @@ #include #include #include +#include +#include +#include + #include @@ -75,6 +79,11 @@ private slots: void openGLPaintDevice(); void aboutToBeDestroyed(); void QTBUG15621_triangulatingStrokerDivZero(); + void textureblitterFullSourceRectTransform(); + void textureblitterPartOriginBottomLeftSourceRectTransform(); + void textureblitterPartOriginTopLeftSourceRectTransform(); + void textureblitterFullTargetRectTransform(); + void textureblitterPartTargetRectTransform(); }; struct SharedResourceTracker @@ -708,6 +717,188 @@ void tst_QOpenGL::QTBUG15621_triangulatingStrokerDivZero() QCOMPARE(image.pixel(95, 95), blue); } +typedef QGenericMatrix<1, 3, float> TestVertex3D; +static const float uv_top_left[] = {0.f, 1.f, 1.f}; +static const float uv_bottom_left[] = {0.f, 0.f, 1.f}; +static const float uv_top_right[] = {1.f, 1.f, 1.f}; +static const float uv_bottom_right[] = {1.f, 0.f, 1.f}; + +bool q_fuzzy_compare(const TestVertex3D &left, const TestVertex3D &right) { + return qFuzzyCompare(left(0,0), right(0,0)) && + qFuzzyCompare(left(1,0), right(1,0)) && + qFuzzyCompare(left(2,0), right(2,0)); +} + +void tst_QOpenGL::textureblitterFullSourceRectTransform() +{ + TestVertex3D topLeft(uv_top_left); + TestVertex3D bottomLeft(uv_bottom_left); + TestVertex3D topRight(uv_top_right); + TestVertex3D bottomRight(uv_bottom_right); + + QRectF rect(0,0,1,1); + QMatrix3x3 flippedMatrix = QOpenGLTextureBlitter::sourceTransform(rect, rect.size().toSize(), QOpenGLTextureBlitter::OriginTopLeft); + + TestVertex3D flippedTopLeft = flippedMatrix * topLeft; + QCOMPARE(flippedTopLeft, bottomLeft); + + TestVertex3D flippedBottomLeft = flippedMatrix * bottomLeft; + QCOMPARE(flippedBottomLeft, topLeft); + + TestVertex3D flippedTopRight = flippedMatrix * topRight; + QCOMPARE(flippedTopRight, bottomRight); + + TestVertex3D flippedBottomRight = flippedMatrix * bottomRight; + QCOMPARE(flippedBottomRight, topRight); + + QMatrix3x3 identityMatrix = QOpenGLTextureBlitter::sourceTransform(rect, rect.size().toSize(), QOpenGLTextureBlitter::OriginBottomLeft); + + TestVertex3D notFlippedTopLeft = identityMatrix * topLeft; + QCOMPARE(notFlippedTopLeft, topLeft); + + TestVertex3D notFlippedBottomLeft = identityMatrix * bottomLeft; + QCOMPARE(notFlippedBottomLeft, bottomLeft); + + TestVertex3D notFlippedTopRight = identityMatrix * topRight; + QCOMPARE(notFlippedTopRight, topRight); + + TestVertex3D notFlippedBottomRight = identityMatrix * bottomRight; + QCOMPARE(notFlippedBottomRight, bottomRight); +} + +void tst_QOpenGL::textureblitterPartOriginBottomLeftSourceRectTransform() +{ + TestVertex3D topLeft(uv_top_left); + TestVertex3D bottomLeft(uv_bottom_left); + TestVertex3D topRight(uv_top_right); + TestVertex3D bottomRight(uv_bottom_right); + + QRectF sourceRect(50,200,200,200); + QSize textureSize(400,400); + + QMatrix3x3 sourceMatrix = QOpenGLTextureBlitter::sourceTransform(sourceRect, textureSize, QOpenGLTextureBlitter::OriginBottomLeft); + + const float x_point_ratio = sourceRect.topLeft().x() / textureSize.width(); + const float y_point_ratio = sourceRect.topLeft().y() / textureSize.height(); + const float width_ratio = sourceRect.width() / textureSize.width(); + const float height_ratio = sourceRect.height() / textureSize.height(); + + TestVertex3D uvTopLeft = sourceMatrix * topLeft; + const float expected_top_left[] = { x_point_ratio, y_point_ratio + height_ratio, 1 }; + TestVertex3D expectedTopLeft(expected_top_left); + QCOMPARE(uvTopLeft, expectedTopLeft); + + TestVertex3D uvBottomLeft = sourceMatrix * bottomLeft; + const float expected_bottom_left[] = { x_point_ratio, y_point_ratio, 1 }; + TestVertex3D expectedBottomLeft(expected_bottom_left); + QCOMPARE(uvBottomLeft, expectedBottomLeft); + + TestVertex3D uvTopRight = sourceMatrix * topRight; + const float expected_top_right[] = { x_point_ratio + width_ratio, y_point_ratio + height_ratio, 1 }; + TestVertex3D expectedTopRight(expected_top_right); + QCOMPARE(uvTopRight, expectedTopRight); + + TestVertex3D uvBottomRight = sourceMatrix * bottomRight; + const float expected_bottom_right[] = { x_point_ratio + width_ratio, y_point_ratio, 1 }; + TestVertex3D expectedBottomRight(expected_bottom_right); + QCOMPARE(uvBottomRight, expectedBottomRight); +} + +void tst_QOpenGL::textureblitterPartOriginTopLeftSourceRectTransform() +{ + TestVertex3D topLeft(uv_top_left); + TestVertex3D bottomLeft(uv_bottom_left); + TestVertex3D topRight(uv_top_right); + TestVertex3D bottomRight(uv_bottom_right); + + QRectF sourceRect(50,190,170,170); + QSize textureSize(400,400); + + QMatrix3x3 sourceMatrix = QOpenGLTextureBlitter::sourceTransform(sourceRect, textureSize, QOpenGLTextureBlitter::OriginTopLeft); + + const float x_point_ratio = sourceRect.topLeft().x() / textureSize.width(); + const float y_point_ratio = sourceRect.topLeft().y() / textureSize.height(); + const float width_ratio = sourceRect.width() / textureSize.width(); + const float height_ratio = sourceRect.height() / textureSize.height(); + + TestVertex3D uvTopLeft = sourceMatrix * topLeft; + const float expected_top_left[] = { x_point_ratio, 1 - y_point_ratio - height_ratio, 1 }; + TestVertex3D expectedTopLeft(expected_top_left); + QVERIFY(q_fuzzy_compare(uvTopLeft, expectedTopLeft)); + + TestVertex3D uvBottomLeft = sourceMatrix * bottomLeft; + const float expected_bottom_left[] = { x_point_ratio, 1 - y_point_ratio, 1 }; + TestVertex3D expectedBottomLeft(expected_bottom_left); + QVERIFY(q_fuzzy_compare(uvBottomLeft, expectedBottomLeft)); + + TestVertex3D uvTopRight = sourceMatrix * topRight; + const float expected_top_right[] = { x_point_ratio + width_ratio, 1 - y_point_ratio - height_ratio, 1 }; + TestVertex3D expectedTopRight(expected_top_right); + QVERIFY(q_fuzzy_compare(uvTopRight, expectedTopRight)); + + TestVertex3D uvBottomRight = sourceMatrix * bottomRight; + const float expected_bottom_right[] = { x_point_ratio + width_ratio, 1 - y_point_ratio, 1 }; + TestVertex3D expectedBottomRight(expected_bottom_right); + QVERIFY(q_fuzzy_compare(uvBottomRight, expectedBottomRight)); +} + +void tst_QOpenGL::textureblitterFullTargetRectTransform() +{ + QVector4D topLeft(-1.f, 1.f, 0.f, 1.f); + QVector4D bottomLeft(-1.f, -1.f, 0.f, 1.f); + QVector4D topRight(1.f, 1.f, 0.f, 1.f); + QVector4D bottomRight(1.f, -1.f, 0.f, 1.f); + + QRectF rect(0,0,200,200); + QMatrix4x4 targetMatrix = QOpenGLTextureBlitter::targetTransform(rect,rect.toRect()); + + QVector4D translatedTopLeft = targetMatrix * topLeft; + QCOMPARE(translatedTopLeft, topLeft); + + QVector4D translatedBottomLeft = targetMatrix * bottomLeft; + QCOMPARE(translatedBottomLeft, bottomLeft); + + QVector4D translatedTopRight = targetMatrix * topRight; + QCOMPARE(translatedTopRight, topRight); + + QVector4D translatedBottomRight = targetMatrix * bottomRight; + QCOMPARE(translatedBottomRight, bottomRight); +} + +void tst_QOpenGL::textureblitterPartTargetRectTransform() +{ + QVector4D topLeft(-1.f, 1.f, 0.f, 1.f); + QVector4D bottomLeft(-1.f, -1.f, 0.f, 1.f); + QVector4D topRight(1.f, 1.f, 0.f, 1.f); + QVector4D bottomRight(1.f, -1.f, 0.f, 1.f); + + QRectF targetRect(50,50,200,200); + QRect viewport(0,0,400,400); + + //multiply by 2 since coordinate system goes from -1 -> 1; + qreal x_point_ratio = (50. / 400.) * 2; + qreal y_point_ratio = (50. / 400.) * 2; + qreal width_ratio = (200. / 400.) * 2; + qreal height_ratio = (200. / 400.) * 2; + + QMatrix4x4 targetMatrix = QOpenGLTextureBlitter::targetTransform(targetRect, viewport); + + QVector4D targetTopLeft = targetMatrix * topLeft; + QVector4D expectedTopLeft(-1 + x_point_ratio, 1 - y_point_ratio, .0, 1.0); + QCOMPARE(targetTopLeft, expectedTopLeft); + + QVector4D targetBottomLeft = targetMatrix * bottomLeft; + QVector4D expectedBottomLeft(-1 + x_point_ratio, 1 - y_point_ratio - height_ratio, 0.0, 1.0); + QCOMPARE(targetBottomLeft, expectedBottomLeft); + + QVector4D targetTopRight = targetMatrix * topRight; + QVector4D expectedTopRight(-1 + x_point_ratio + width_ratio, 1 - y_point_ratio, 0.0, 1.0); + QCOMPARE(targetTopRight, expectedTopRight); + + QVector4D targetBottomRight = targetMatrix * bottomRight; + QVector4D expectedBottomRight(-1 + x_point_ratio + width_ratio, 1 - y_point_ratio - height_ratio, 0.0, 1.0); + QCOMPARE(targetBottomRight, expectedBottomRight); +} QTEST_MAIN(tst_QOpenGL) -- cgit v1.2.3 From 937a4f5443603b0ad1d1558ac9a9a59db8ce299f Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?J=C3=B8rgen=20Lind?= Date: Thu, 13 Feb 2014 22:03:52 +0100 Subject: QOpenGLTextureBlitter: Remove Origin location for the Target rect The Origin for Target rect was deemed a confusing concept. The current implementation would translate the target rect to the coordinate system specified. However, the order and "direction" of the vertices would always be the same. So drawing a texture in for one target rect defined in one coordinate system would paint the texture the same way as it would when a texture was drawn for a target rect drawn in the "opposite" coordinate system. The point with this was that if you wanted to "flip" the texture you would specify that with the source coordinate system. However, this approach breaks on different levels, such as QRect has functions which expects a top left coordinate system (ie. top() and bottom()). In the end Qt uses a top left coordinate system, hence QWindow specifies a top left coordinate system, and hence the api becomes easier if it is not possible to define the coordinate system of the target viewport. Change-Id: I7dd59b3718380876e87a4bff88381d7a1c7d58c1 Reviewed-by: Laszlo Agocs --- .../qopengltextureblitwindow.cpp | 74 +++++++++++++--------- .../qopengltextureblitwindow.h | 1 + 2 files changed, 45 insertions(+), 30 deletions(-) (limited to 'tests') diff --git a/tests/manual/qopengltextureblitter/qopengltextureblitwindow.cpp b/tests/manual/qopengltextureblitter/qopengltextureblitwindow.cpp index 0dac669887..503e326f38 100644 --- a/tests/manual/qopengltextureblitter/qopengltextureblitwindow.cpp +++ b/tests/manual/qopengltextureblitter/qopengltextureblitwindow.cpp @@ -83,44 +83,57 @@ void QOpenGLTextureBlitWindow::render() QOpenGLTexture texture(m_image); texture.create(); - QRectF topLeft(QPointF(0,0), QPointF(dWidth()/2.0, dHeight()/2.0)); - QRectF topRight(QPointF(dWidth()/2.0,0), QPointF(dWidth(), dHeight()/2.0)); - QRectF bottomLeft(QPointF(0, dHeight()/2.0), QPointF(dWidth() /2.0, dHeight())); - QRectF bottomRight(QPoint(dWidth()/2.0, dHeight()/2.0), QPointF(dWidth(), dHeight())); + QOpenGLTexture texture_mirrored(m_image_mirrord); + texture_mirrored.setWrapMode(QOpenGLTexture::ClampToEdge); + texture_mirrored.create(); + + QRectF topLeftOriginTopLeft(QPointF(0,0), QPointF(dWidth()/2.0, dHeight()/2.0)); + QRectF topRightOriginTopLeft(QPointF(dWidth()/2.0,0), QPointF(dWidth(), dHeight()/2.0)); + QRectF bottomLeftOriginTopLeft(QPointF(0, dHeight()/2.0), QPointF(dWidth() /2.0, dHeight())); + QRectF bottomRightOriginTopLeft(QPoint(dWidth()/2.0, dHeight()/2.0), QPointF(dWidth(), dHeight())); + + QRectF topLeftOriginBottomLeft = bottomLeftOriginTopLeft; Q_UNUSED(topLeftOriginBottomLeft); + QRectF topRightOriginBottomLeft = bottomRightOriginTopLeft; Q_UNUSED(topRightOriginBottomLeft); + QRectF bottomLeftOriginBottomLeft = topLeftOriginTopLeft; + QRectF bottomRightOriginBottomLeft = topRightOriginTopLeft; QOpenGLTextureBlitter::Origin topLeftOrigin = QOpenGLTextureBlitter::OriginTopLeft; QOpenGLTextureBlitter::Origin bottomLeftOrigin = QOpenGLTextureBlitter::OriginBottomLeft; - QMatrix4x4 topRightVertexFlipped = QOpenGLTextureBlitter::targetTransform(topRight, viewport, topLeftOrigin); - QMatrix4x4 bottomLeftVertex = QOpenGLTextureBlitter::targetTransform(bottomLeft, viewport, topLeftOrigin); - QMatrix4x4 bottomRightVertexFlipped = QOpenGLTextureBlitter::targetTransform(bottomRight, viewport, topLeftOrigin); - - QMatrix3x3 texTopLeft = QOpenGLTextureBlitter::sourceTransform(topLeft, m_image.size(), topLeftOrigin); - QMatrix3x3 texTopRight = QOpenGLTextureBlitter::sourceTransform(topRight, m_image.size(), topLeftOrigin); - QMatrix3x3 texBottomLeft = QOpenGLTextureBlitter::sourceTransform(bottomLeft, m_image.size(), topLeftOrigin); - QMatrix3x3 texBottomRight = QOpenGLTextureBlitter::sourceTransform(bottomRight, m_image.size(), bottomLeftOrigin); - - QSizeF subSize(topLeft.width()/2, topLeft.height()/2); - QRectF subTopLeft(topLeft.topLeft(), subSize); - QRectF subTopRight(QPointF(topLeft.topLeft().x() + topLeft.width() / 2, topLeft.topLeft().y()),subSize); - QRectF subBottomLeft(QPointF(topLeft.topLeft().x(), topLeft.topLeft().y() + topLeft.height() / 2), subSize); - QRectF subBottomRight(QPointF(topLeft.topLeft().x() + topLeft.width() / 2, topLeft.topLeft().y() + topLeft.height() / 2), subSize); - - QMatrix4x4 subTopLeftVertex = QOpenGLTextureBlitter::targetTransform(subTopLeft, viewport, topLeftOrigin); - QMatrix4x4 subTopRightVertex = QOpenGLTextureBlitter::targetTransform(subTopRight, viewport, topLeftOrigin); - QMatrix4x4 subBottomLeftVertex = QOpenGLTextureBlitter::targetTransform(subBottomLeft, viewport, topLeftOrigin); - QMatrix4x4 subBottomRightVertex = QOpenGLTextureBlitter::targetTransform(subBottomRight, viewport, topLeftOrigin); + + QMatrix4x4 topRightOriginTopLeftVertex = QOpenGLTextureBlitter::targetTransform(topRightOriginTopLeft, viewport); + QMatrix4x4 bottomLeftOriginTopLeftVertex = QOpenGLTextureBlitter::targetTransform(bottomLeftOriginTopLeft, viewport); + QMatrix4x4 bottomRightOriginTopLeftVertex = QOpenGLTextureBlitter::targetTransform(bottomRightOriginTopLeft, viewport); + + QMatrix3x3 texTopLeftOriginTopLeft = QOpenGLTextureBlitter::sourceTransform(topLeftOriginTopLeft, m_image.size(), topLeftOrigin); + QMatrix3x3 texTopRightOriginBottomLeft = QOpenGLTextureBlitter::sourceTransform(topRightOriginBottomLeft, m_image.size(), bottomLeftOrigin); + QMatrix3x3 texBottomLeftOriginBottomLeft = QOpenGLTextureBlitter::sourceTransform(bottomLeftOriginBottomLeft, m_image.size(), bottomLeftOrigin); + QMatrix3x3 texBottomRightOriginBottomLeft = QOpenGLTextureBlitter::sourceTransform(bottomRightOriginBottomLeft, m_image.size(), bottomLeftOrigin); + + QSizeF subSize(topLeftOriginTopLeft.width()/2, topLeftOriginTopLeft.height()/2); + QRectF subTopLeftOriginTopLeft(topLeftOriginTopLeft.topLeft(), subSize); + QRectF subTopRightOriginTopLeft(QPointF(topLeftOriginTopLeft.topLeft().x() + topLeftOriginTopLeft.width() / 2, + topLeftOriginTopLeft.topLeft().y()), subSize); + QRectF subBottomLeftOriginTopLeft(QPointF(topLeftOriginTopLeft.topLeft().x(), + topLeftOriginTopLeft.topLeft().y() + topLeftOriginTopLeft.height() / 2), subSize); + QRectF subBottomRightOriginTopLeft(QPointF(topLeftOriginTopLeft.topLeft().x() + topLeftOriginTopLeft.width() / 2, + topLeftOriginTopLeft.topLeft().y() + topLeftOriginTopLeft.height() / 2), subSize); + + QMatrix4x4 subTopLeftOriginTopLeftVertex = QOpenGLTextureBlitter::targetTransform(subTopLeftOriginTopLeft, viewport); + QMatrix4x4 subTopRightOriginTopLeftVertex = QOpenGLTextureBlitter::targetTransform(subTopRightOriginTopLeft, viewport); + QMatrix4x4 subBottomLeftOriginTopLeftVertex = QOpenGLTextureBlitter::targetTransform(subBottomLeftOriginTopLeft, viewport); + QMatrix4x4 subBottomRightOriginTopLeftVertex = QOpenGLTextureBlitter::targetTransform(subBottomRightOriginTopLeft, viewport); m_blitter.bind(); - m_blitter.blit(texture.textureId(), subTopLeftVertex, texBottomRight); - m_blitter.blit(texture.textureId(), subTopRightVertex, texBottomLeft); - m_blitter.blit(texture.textureId(), subBottomLeftVertex, texTopRight); - m_blitter.blit(texture.textureId(), subBottomRightVertex, texTopLeft); + m_blitter.blit(texture_mirrored.textureId(), subTopLeftOriginTopLeftVertex, texBottomRightOriginBottomLeft); + m_blitter.blit(texture_mirrored.textureId(), subTopRightOriginTopLeftVertex, texBottomLeftOriginBottomLeft); + m_blitter.blit(texture.textureId(), subBottomLeftOriginTopLeftVertex, texTopRightOriginBottomLeft); + m_blitter.blit(texture.textureId(), subBottomRightOriginTopLeftVertex, texTopLeftOriginTopLeft); - m_blitter.blit(texture.textureId(), topRightVertexFlipped, topLeftOrigin); - m_blitter.blit(texture.textureId(), bottomLeftVertex, bottomLeftOrigin); + m_blitter.blit(texture.textureId(), topRightOriginTopLeftVertex, topLeftOrigin); + m_blitter.blit(texture_mirrored.textureId(), bottomLeftOriginTopLeftVertex, topLeftOrigin); m_blitter.setSwizzleRB(true); - m_blitter.blit(texture.textureId(), bottomRightVertexFlipped, texTopLeft); + m_blitter.blit(texture.textureId(), bottomRightOriginTopLeftVertex, texTopLeftOriginTopLeft); m_blitter.setSwizzleRB(false); m_blitter.release(); @@ -163,5 +176,6 @@ void QOpenGLTextureBlitWindow::resizeEvent(QResizeEvent *event) p.drawRect(QRectF(2.5,2.5,dWidth() - 5, dHeight() - 5)); + m_image_mirrord = m_image.mirrored(false,true); } diff --git a/tests/manual/qopengltextureblitter/qopengltextureblitwindow.h b/tests/manual/qopengltextureblitter/qopengltextureblitwindow.h index 855e173b1a..31532db2cd 100644 --- a/tests/manual/qopengltextureblitter/qopengltextureblitwindow.h +++ b/tests/manual/qopengltextureblitter/qopengltextureblitwindow.h @@ -64,6 +64,7 @@ private: QScopedPointer m_context; QOpenGLTextureBlitter m_blitter; QImage m_image; + QImage m_image_mirrord; }; #endif -- cgit v1.2.3 From 44ee7984fccbeae57e108c1a152050e9d3437174 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?J=C3=B8rgen=20Lind?= Date: Thu, 13 Feb 2014 21:59:56 +0100 Subject: QOpenGLTextureBlitter: fix source rect when origin is top left This fixes the issue that the blitter required sometimes the texture wrapping to be repeat Change-Id: I86150d008422facf9040873b0983b0e44be9ad24 Reviewed-by: Laszlo Agocs --- tests/manual/qopengltextureblitter/qopengltextureblitwindow.cpp | 1 + 1 file changed, 1 insertion(+) (limited to 'tests') diff --git a/tests/manual/qopengltextureblitter/qopengltextureblitwindow.cpp b/tests/manual/qopengltextureblitter/qopengltextureblitwindow.cpp index 503e326f38..8f51f511c9 100644 --- a/tests/manual/qopengltextureblitter/qopengltextureblitwindow.cpp +++ b/tests/manual/qopengltextureblitter/qopengltextureblitwindow.cpp @@ -81,6 +81,7 @@ void QOpenGLTextureBlitWindow::render() glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT); QOpenGLTexture texture(m_image); + texture.setWrapMode(QOpenGLTexture::ClampToEdge); texture.create(); QOpenGLTexture texture_mirrored(m_image_mirrord); -- cgit v1.2.3 From 6de515aea2621073325f7d7bb461af26b009d8d0 Mon Sep 17 00:00:00 2001 From: Lars Knoll Date: Fri, 14 Feb 2014 09:33:21 +0100 Subject: Remove a not required whitespace when writing JSON in compact format Task-number: QTBUG-36682 Change-Id: I0c1c0de850504c8dff20a5ae724cc868d9f983f8 Reviewed-by: Thiago Macieira --- tests/auto/corelib/json/tst_qtjson.cpp | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) (limited to 'tests') diff --git a/tests/auto/corelib/json/tst_qtjson.cpp b/tests/auto/corelib/json/tst_qtjson.cpp index 2312922a58..aee5875613 100644 --- a/tests/auto/corelib/json/tst_qtjson.cpp +++ b/tests/auto/corelib/json/tst_qtjson.cpp @@ -1209,7 +1209,7 @@ void tst_QtJson::toJson() QByteArray json = QJsonDocument(object).toJson(QJsonDocument::Compact); QByteArray expected = - "{\"Array\": [true,999,\"string\",null,\"\\\\\\u0007\\n\\r\\b\\tabcABC\\\"\"],\"\\\\Key\\n\": \"Value\",\"null\": null}"; + "{\"Array\":[true,999,\"string\",null,\"\\\\\\u0007\\n\\r\\b\\tabcABC\\\"\"],\"\\\\Key\\n\":\"Value\",\"null\":null}"; QCOMPARE(json, expected); QJsonDocument doc; @@ -2004,7 +2004,7 @@ void tst_QtJson::testDebugStream() qDebug() << object; object.insert(QLatin1String("foo"), QLatin1String("bar")); - QTest::ignoreMessage(QtDebugMsg, "QJsonObject({\"foo\": \"bar\"})"); + QTest::ignoreMessage(QtDebugMsg, "QJsonObject({\"foo\":\"bar\"})"); qDebug() << object; } @@ -2031,7 +2031,7 @@ void tst_QtJson::testDebugStream() QJsonObject object; object.insert(QLatin1String("foo"), QLatin1String("bar")); doc.setObject(object); - QTest::ignoreMessage(QtDebugMsg, "QJsonDocument({\"foo\": \"bar\"})"); + QTest::ignoreMessage(QtDebugMsg, "QJsonDocument({\"foo\":\"bar\"})"); qDebug() << doc; QJsonArray array; @@ -2076,7 +2076,7 @@ void tst_QtJson::testDebugStream() QJsonObject object; object.insert(QLatin1String("foo"), QLatin1String("bar")); value = QJsonValue(object); // object - QTest::ignoreMessage(QtDebugMsg, "QJsonValue(object, QJsonObject({\"foo\": \"bar\"}) )"); + QTest::ignoreMessage(QtDebugMsg, "QJsonValue(object, QJsonObject({\"foo\":\"bar\"}) )"); qDebug() << value; } } -- cgit v1.2.3