]> git.saurik.com Git - apple/objc4.git/blame - test/duplicateProtocols.m
objc4-818.2.tar.gz
[apple/objc4.git] / test / duplicateProtocols.m
CommitLineData
1807f628
A
1
2#include "test.h"
3
4// This test assumes
5// - that on launch we don't have NSCoding, NSSecureCoding, or NSDictionary, ie, libSystem doesn't contain those
6// - that after dlopening CF, we get NSDictionary and it conforms to NSSecureCoding which conforms to NSCoding
7// - that our NSCoding will be used if we ask either NSSecureCoding or NSDictionary if they conform to our test protocol
8
9@protocol NewNSCodingSuperProto
10@end
11
12@protocol NSCoding <NewNSCodingSuperProto>
13@end
14
15int main()
16{
17 // Before we dlopen, make sure we are using our NSCoding, not the shared cache version
18 Protocol* codingSuperProto = objc_getProtocol("NewNSCodingSuperProto");
19 Protocol* codingProto = objc_getProtocol("NSCoding");
20 if (@protocol(NewNSCodingSuperProto) != codingSuperProto) fail("Protocol mismatch");
21 if (@protocol(NSCoding) != codingProto) fail("Protocol mismatch");
22 if (!protocol_conformsToProtocol(codingProto, codingSuperProto)) fail("Our NSCoding should conform to NewNSCodingSuperProto");
23
24 // Also make sure we don't yet have an NSSecureCoding or NSDictionary
25 if (objc_getProtocol("NSSecureCoding")) fail("Test assumes we don't have NSSecureCoding yet");
26 if (objc_getClass("NSDictionary")) fail("Test assumes we don't have NSDictionary yet");
27
28 void *dl = dlopen("/System/Library/Frameworks/CoreFoundation.framework/CoreFoundation", RTLD_LAZY);
29 if (!dl) fail("couldn't open CoreFoundation");
30
31 // We should now have NSSecureCoding and NSDictionary
32 Protocol* secureCodingProto = objc_getProtocol("NSSecureCoding");
33 id dictionaryClass = objc_getClass("NSDictionary");
34 if (!secureCodingProto) fail("Should have got NSSecureCoding from CoreFoundation");
35 if (!dictionaryClass) fail("Should have got NSDictionary from CoreFoundation");
36
37 // Now make sure that NSDictionary and NSSecureCoding find our new protocols
38 if (!protocol_conformsToProtocol(secureCodingProto, codingProto)) fail("NSSecureCoding should conform to our NSCoding");
39 if (!protocol_conformsToProtocol(secureCodingProto, codingSuperProto)) fail("NSSecureCoding should conform to our NewNSCodingSuperProto");
40 if (!class_conformsToProtocol(dictionaryClass, codingProto)) fail("NSDictionary should conform to our NSCoding");
41 if (!class_conformsToProtocol(dictionaryClass, codingSuperProto)) fail("NSDictionary should conform to our NewNSCodingSuperProto");
42}