blob: 0792379d0a56e991f93da3abf2d66c4b4679aff7 [file] [log] [blame]
@import Foundation;
#define GET_UNTYPED_AND_OPAQUE(Name) \
static NSArray * _Nonnull getUntypedNSArrayOf##Name##s() { \
return getTypedNSArrayOf##Name##Wrappers(); \
} \
static id _Nonnull getOpaqueNSArrayOf##Name##s() { \
return getTypedNSArrayOf##Name##Wrappers(); \
}
#define CHECK_UNTYPED_AND_OPAQUE(Name) \
static BOOL checkUntypedNSArrayOf##Name##s(NSArray * _Nonnull array) { \
return checkTypedNSArrayOf##Name##Wrappers(array); \
} \
static BOOL checkOpaqueNSArrayOf##Name##s(id _Nonnull array) { \
return checkTypedNSArrayOf##Name##Wrappers(array); \
}
typedef NSString *StringWrapper NS_TYPED_EXTENSIBLE_ENUM;
static NSArray<StringWrapper> * _Nonnull getTypedNSArrayOfStringWrappers() {
return @[@"abc", @"def"];
}
static BOOL
checkTypedNSArrayOfStringWrappers(NSArray<StringWrapper> * _Nonnull array) {
return [array isEqual:getTypedNSArrayOfStringWrappers()];
}
GET_UNTYPED_AND_OPAQUE(String)
CHECK_UNTYPED_AND_OPAQUE(String)
typedef id <NSCopying, NSCoding> CopyingAndCodingWrapper
NS_TYPED_EXTENSIBLE_ENUM;
static NSArray<CopyingAndCodingWrapper> * _Nonnull
getTypedNSArrayOfCopyingAndCodingWrappers() {
return @[@"abc", @[]];
}
static BOOL checkTypedNSArrayOfCopyingAndCodingWrappers(
NSArray<CopyingAndCodingWrapper> * _Nonnull array) {
return [array isEqual:getTypedNSArrayOfCopyingAndCodingWrappers()];
}
GET_UNTYPED_AND_OPAQUE(CopyingAndCoding)
CHECK_UNTYPED_AND_OPAQUE(CopyingAndCoding)
typedef id <NSCopying> CopyingWrapper NS_TYPED_EXTENSIBLE_ENUM;
static NSArray<CopyingWrapper> * _Nonnull getTypedNSArrayOfCopyingWrappers() {
return getTypedNSArrayOfCopyingAndCodingWrappers();
}
static BOOL
checkTypedNSArrayOfCopyingWrappers(NSArray<CopyingWrapper> * _Nonnull array) {
return [array isEqual:getTypedNSArrayOfCopyingWrappers()];
}
GET_UNTYPED_AND_OPAQUE(Copying)
CHECK_UNTYPED_AND_OPAQUE(Copying)
typedef NSObject *ObjectWrapper NS_TYPED_EXTENSIBLE_ENUM;
static NSArray<ObjectWrapper> * _Nonnull getTypedNSArrayOfObjectWrappers() {
return (NSArray<ObjectWrapper> *)getTypedNSArrayOfCopyingAndCodingWrappers();
}
static BOOL
checkTypedNSArrayOfObjectWrappers(NSArray<ObjectWrapper> * _Nonnull array) {
return [array isEqual:getTypedNSArrayOfObjectWrappers()];
}
GET_UNTYPED_AND_OPAQUE(Object)
CHECK_UNTYPED_AND_OPAQUE(Object)
typedef NSError *ErrorWrapper NS_TYPED_EXTENSIBLE_ENUM;
static NSArray<ErrorWrapper> * _Nonnull getTypedNSArrayOfErrorWrappers() {
return @[[NSError errorWithDomain:@"x" code:11 userInfo:nil],
[NSError errorWithDomain:@"x" code:22 userInfo:nil]];
}
static BOOL
checkTypedNSArrayOfErrorWrappers(NSArray<ErrorWrapper> * _Nonnull array) {
return [[array valueForKey:@"code"] isEqual:@[@11, @22]] &&
NSNotFound == [array indexOfObjectPassingTest:^BOOL(ErrorWrapper error,
NSUInteger idx,
BOOL *stop) {
return ![error isKindOfClass:[NSError class]];
}];
}
GET_UNTYPED_AND_OPAQUE(Error)
CHECK_UNTYPED_AND_OPAQUE(Error)