|
|
1.1 ! root 1: /* ! 2: * Copyright (c) 1999 Apple Computer, Inc. All rights reserved. ! 3: * ! 4: * @APPLE_LICENSE_HEADER_START@ ! 5: * ! 6: * "Portions Copyright (c) 1999 Apple Computer, Inc. All Rights ! 7: * Reserved. This file contains Original Code and/or Modifications of ! 8: * Original Code as defined in and that are subject to the Apple Public ! 9: * Source License Version 1.0 (the 'License'). You may not use this file ! 10: * except in compliance with the License. Please obtain a copy of the ! 11: * License at http://www.apple.com/publicsource and read it before using ! 12: * this file. ! 13: * ! 14: * The Original Code and all software distributed under the License are ! 15: * distributed on an 'AS IS' basis, WITHOUT WARRANTY OF ANY KIND, EITHER ! 16: * EXPRESS OR IMPLIED, AND APPLE HEREBY DISCLAIMS ALL SUCH WARRANTIES, ! 17: * INCLUDING WITHOUT LIMITATION, ANY WARRANTIES OF MERCHANTABILITY, ! 18: * FITNESS FOR A PARTICULAR PURPOSE OR NON-INFRINGEMENT. Please see the ! 19: * License for the specific language governing rights and limitations ! 20: * under the License." ! 21: * ! 22: * @APPLE_LICENSE_HEADER_END@ ! 23: */ ! 24: ! 25: #import <objc/Object.h> ! 26: #import <appkit/screens.h> ! 27: #import <appkit/graphics.h> ! 28: #import <appkit/color.h> ! 29: #import <objc/objc-class.h> ! 30: #import <mach/mach_types.h> ! 31: #import <netinfo/ni.h> ! 32: #import <mach-o/ldsyms.h> ! 33: #import <objc/Protocol.h> ! 34: ! 35: @protocol kitmethods ! 36: ! 37: - beginPageSetupRect:(const NXRect *)aRect placement:(const NXPoint *)location; ! 38: - placePrintRect:(const NXRect *)aRect offset:(NXPoint *)location; ! 39: - moveTopLeftTo:(NXCoord)x :(NXCoord)y; ! 40: - setBackgroundColor:(NXColor)color; ! 41: - copyPSCodeInside:(const NXRect *)rect to:(NXStream *)stream; ! 42: - windowResized:(NXEvent *)theEvent; ! 43: ! 44: @end ! 45: ! 46: @protocol testMethodQualifiers <kitmethods> ! 47: ! 48: - in:(in int *)meaningless out:(out unsigned int *)y; ! 49: - inout:(inout int *)weeb bycopy:(bycopy id)x; ! 50: - structReference:(const NXRect *)s :(const NXRect **)y; ! 51: - structValue:(NXPoint)s; ! 52: - (oneway)asyncronousMessage; ! 53: + someClassMethod; ! 54: ! 55: @end ! 56: ! 57: @protocol GetValues ! 58: - (int)intValue; ! 59: - (float)floatValue; ! 60: - (double)doubleValue; ! 61: - (const char *)stringValue; ! 62: @end ! 63: ! 64: @protocol SetValues ! 65: - setIntValue:(int)anInt; ! 66: - setFloatValue:(float)aFloat; ! 67: - setDoubleValue:(double)aDouble; ! 68: - setStringValue:(const char *)aString; ! 69: @end ! 70: ! 71: @protocol Values <SetValues, GetValues> ! 72: @end ! 73: ! 74: @interface Example1 : Object <SetValues, GetValues> ! 75: @end ! 76: ! 77: @implementation Example1 ! 78: @end ! 79: ! 80: static void test_conformsTo() ! 81: { ! 82: Object <SetValues, GetValues> *ex = [Example1 new]; ! 83: ! 84: /* test protocol lookup */ ! 85: ! 86: Protocol *pobj2 = [Protocol getProtocol:"kitmethods"], ! 87: *pobj3 = [Protocol getProtocol:"testMethodQualifiers"]; ! 88: ! 89: /* test protocol conformance for objects */ ! 90: ! 91: if ([ex conformsTo:[Protocol getProtocol:"SetValues"]]) ! 92: printf("ex DOES conform to SetValues\n"); ! 93: if (![ex conformsTo:[Protocol getProtocol:"Values"]]) ! 94: printf("ex DOES NOT conform to Values\n"); ! 95: ! 96: if ([ex conformsToGivenName:"SetValues"]) ! 97: printf("ex DOES conform to SetValues\n"); ! 98: if (![ex conformsToGivenName:"Values"]) ! 99: printf("ex DOES NOT conform to Values\n"); ! 100: ! 101: /* test protocol conformance for classes */ ! 102: ! 103: if ([[Example1 class] conformsTo:[Protocol getProtocol:"SetValues"]]) ! 104: printf("Example1 DOES conform to SetValues\n"); ! 105: if (![[Example1 class] conformsTo:[Protocol getProtocol:"Values"]]) ! 106: printf("Example1 DOES NOT conform to Values\n"); ! 107: ! 108: /* test protocol conformance for protocols */ ! 109: ! 110: if (![pobj2 conformsTo:pobj3]) ! 111: printf("kitmethods DO NOT conform to testMethodQualifiers\n"); ! 112: if (![pobj2 conformsToGivenName:[pobj3 protocolName]]) ! 113: printf("kitmethods DO NOT conform to testMethodQualifiers\n"); ! 114: ! 115: if ([pobj3 conformsTo:pobj2]) ! 116: printf("testMethodQualifiers DO conform to kitmethods\n"); ! 117: if ([pobj3 conformsToGivenName:[pobj2 protocolName]]) ! 118: printf("testMethodQualifiers DO conform to kitmethods\n"); ! 119: } ! 120: ! 121: static void test_methodDescFor() ! 122: { ! 123: Protocol *valuesProtocol = [Protocol getProtocol:"Values"]; ! 124: struct objc_method_desc *m; ! 125: ! 126: m = [valuesProtocol instanceMethodDescFor:@selector(setIntValue:)]; ! 127: if (m) ! 128: printf("name = %s types = %s\n",sel_getName(m->name),m->types); ! 129: ! 130: m = [valuesProtocol instanceMethodDescFor:@selector(intValue)]; ! 131: if (m) ! 132: printf("name = %s types = %s\n",sel_getName(m->name),m->types); ! 133: } ! 134: ! 135: main() ! 136: { ! 137: test_conformsTo(); ! 138: test_methodDescFor(); ! 139: }
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.