qt 6.5.1 original

This commit is contained in:
kleuter
2023-10-29 23:33:08 +01:00
parent 71d22ab6b0
commit 85d238dfda
21202 changed files with 5499099 additions and 0 deletions

View File

@ -0,0 +1,14 @@
# Copyright (C) 2022 The Qt Company Ltd.
# SPDX-License-Identifier: BSD-3-Clause
#####################################################################
## tst_qmacautoreleasepool Test:
#####################################################################
qt_internal_add_test(tst_qmacautoreleasepool
SOURCES
tst_qmacautoreleasepool.mm
LIBRARIES
Qt::CorePrivate
${FWFoundation}
)

View File

@ -0,0 +1,88 @@
// Copyright (C) 2017 The Qt Company Ltd.
// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only WITH Qt-GPL-exception-1.0
#include <QTest>
#include <QtCore/private/qcore_mac_p.h>
#include <Foundation/Foundation.h>
class tst_QMacAutoreleasePool : public QObject
{
Q_OBJECT
private slots:
void noPool();
void rootLevelPool();
void stackAllocatedPool();
void heapAllocatedPool();
};
static id lastDeallocedObject = nil;
@interface DeallocTracker : NSObject @end
@implementation DeallocTracker
-(void)dealloc
{
lastDeallocedObject = self;
[super dealloc];
}
@end
void tst_QMacAutoreleasePool::noPool()
{
// No pool, will not be released, but should not crash
[[[DeallocTracker alloc] init] autorelease];
}
void tst_QMacAutoreleasePool::rootLevelPool()
{
// The root level case, no NSAutoreleasePool since we're not in the main
// runloop, and objects autoreleased as part of main.
NSObject *allocedObject = nil;
{
QMacAutoReleasePool qtPool;
allocedObject = [[[DeallocTracker alloc] init] autorelease];
}
QCOMPARE(lastDeallocedObject, allocedObject);
}
void tst_QMacAutoreleasePool::stackAllocatedPool()
{
// The normal case, other pools surrounding our pool, draining
// our pool before any other pool.
NSObject *allocedObject = nil;
NSAutoreleasePool *pool = [[NSAutoreleasePool alloc] init];
{
QMacAutoReleasePool qtPool;
allocedObject = [[[DeallocTracker alloc] init] autorelease];
}
QCOMPARE(lastDeallocedObject, allocedObject);
[pool drain];
}
void tst_QMacAutoreleasePool::heapAllocatedPool()
{
// The special case, a pool allocated on the heap, or as a member of a
// heap allocated object. This is not a supported use of QMacAutoReleasePool,
// and will result in warnings if the pool is prematurely drained.
NSObject *allocedObject = nil;
{
NSAutoreleasePool *pool = [[NSAutoreleasePool alloc] init];
QMacAutoReleasePool *qtPool = nullptr;
{
qtPool = new QMacAutoReleasePool;
allocedObject = [[[DeallocTracker alloc] init] autorelease];
}
[pool drain];
delete qtPool;
}
QCOMPARE(lastDeallocedObject, allocedObject);
}
QTEST_APPLESS_MAIN(tst_QMacAutoreleasePool)
#include "tst_qmacautoreleasepool.moc"