blob: 46d2040b39a00af5d2be85a215ed91a8c9424416 [file] [log] [blame] [edit]
// Copyright (c) 2024, the Dart project authors. Please see the AUTHORS file
// for details. All rights reserved. Use of this source code is governed by a
// BSD-style license that can be found in the LICENSE file.
#import <Foundation/NSObject.h>
#import <Foundation/NSString.h>
#import <Foundation/NSThread.h>
void objc_autoreleasePoolPop(void *pool);
void *objc_autoreleasePoolPush();
struct Vec2 {
double x;
double y;
};
typedef struct {
double x;
double y;
double z;
double w;
} Vec4;
@interface DummyObject : NSObject {
int32_t* counter;
}
+ (instancetype)newWithCounter:(int32_t*)_counter;
- (instancetype)initWithCounter:(int32_t*)_counter;
- (void)setCounter:(int32_t*)_counter;
- (void)dealloc;
@end
typedef int32_t (^IntBlock)(int32_t);
typedef float (^FloatBlock)(float);
typedef double (^DoubleBlock)(double);
typedef Vec4 (^Vec4Block)(Vec4);
typedef void (^VoidBlock)();
typedef void (^SelectorBlock)(SEL);
typedef DummyObject* (^ObjectBlock)(DummyObject*);
typedef DummyObject* _Nullable (^NullableObjectBlock)(DummyObject* _Nullable);
typedef NSString* _Nullable (^NullableStringBlock)(NSString* _Nullable);
typedef IntBlock (^BlockBlock)(IntBlock);
typedef void (^ListenerBlock)(IntBlock);
typedef void (^ObjectListenerBlock)(DummyObject*);
typedef void (^NullableListenerBlock)(DummyObject* _Nullable);
typedef void (^StructListenerBlock)(struct Vec2, Vec4, NSObject*);
typedef void (^NSStringListenerBlock)(NSString*);
typedef void (^NoTrampolineListenerBlock)(int32_t, Vec4, const char*);
typedef void (^IntPtrBlock)(int32_t*);
typedef void (^ResultBlock)(int32_t);
// Wrapper around a block, so that our Dart code can test creating and invoking
// blocks in Objective C code.
@interface BlockTester : NSObject {
__strong IntBlock myBlock;
__strong ObjectListenerBlock myListener;
}
+ (void)setup:(void*)apiData;
+ (BlockTester*)newFromBlock:(IntBlock)block;
+ (BlockTester*)newFromMultiplier:(int32_t)mult;
+ (BlockTester*)newFromListener:(ObjectListenerBlock)block;
- (int32_t)call:(int32_t)x;
- (IntBlock)getBlock NS_RETURNS_RETAINED;
- (void)pokeBlock;
+ (void)callOnSameThread:(VoidBlock)block;
+ (void)callOnSameThreadOutsideIsolate:(VoidBlock)block;
+ (NSThread*)callOnNewThread:(VoidBlock)block NS_RETURNS_RETAINED;
+ (NSThread*)callWithBlockOnNewThread:(ListenerBlock)block NS_RETURNS_RETAINED;
+ (float)callFloatBlock:(FloatBlock)block;
+ (double)callDoubleBlock:(DoubleBlock)block;
+ (Vec4)callVec4Block:(Vec4Block)block;
+ (void)callSelectorBlock:(SelectorBlock)block;
+ (DummyObject*)callObjectBlock:(ObjectBlock)block NS_RETURNS_RETAINED;
+ (nullable DummyObject*)callNullableObjectBlock:(NullableObjectBlock)block
NS_RETURNS_RETAINED;
+ (nullable NSString*)callNullableStringBlock:(NullableStringBlock)block
NS_RETURNS_RETAINED;
+ (void)callListener:(ListenerBlock)block;
+ (void)callObjectListener:(ObjectListenerBlock)block;
+ (void)callNullableListener:(NullableListenerBlock)block;
+ (void)callStructListener:(StructListenerBlock)block;
+ (void)callNSStringListener:(NSStringListenerBlock)block x:(int32_t)x;
+ (void)callNoTrampolineListener:(NoTrampolineListenerBlock)block;
+ (IntBlock)newBlock:(BlockBlock)block withMult:(int)mult NS_RETURNS_RETAINED;
+ (BlockBlock)newBlockBlock:(int)mult NS_RETURNS_RETAINED;
- (void)invokeAndReleaseListenerOnNewThread;
- (void)invokeAndReleaseListener:(_Nullable id)_;
+ (void)blockingBlockTest:(IntPtrBlock)blockingBlock
resultBlock:(ResultBlock)resultBlock;
@end