aboutsummaryrefslogtreecommitdiff
path: root/Foundation/GTMObjC2RuntimeTest.m
diff options
context:
space:
mode:
authorGravatar dmaclach <dmaclach@google.com>2016-10-07 12:10:23 -0400
committerGravatar Thomas Van Lenten <thomasvl@google.com>2016-10-07 12:21:06 -0400
commit42124b3691197c3c4f52f069775fa0390a8ff942 (patch)
treeebd373d398ea64b45bdc1d196fa0a2c5f57cabfd /Foundation/GTMObjC2RuntimeTest.m
parent57eeab4193210df8ab0c81e9d3f1ee1ad3e24492 (diff)
First cut at pruning things/updating things.
Remove a bunch of code that Google stopped using/maintaining rather than trying to update it it. Some would be hard to update, some actually has system provided replacements; others are patterns that just don't seem as common now. Prune out the code related to macOS <= 10.5, start pruning some of the really old iOS support also. Get the projects mostly limping again with modern Xcodes so tests can be run. If someone ends up on this commit via history for something they still find as useful, feel free to do a pull request to bring the snippet of code back to life and update it for current SDKs.
Diffstat (limited to 'Foundation/GTMObjC2RuntimeTest.m')
-rw-r--r--Foundation/GTMObjC2RuntimeTest.m445
1 files changed, 0 insertions, 445 deletions
diff --git a/Foundation/GTMObjC2RuntimeTest.m b/Foundation/GTMObjC2RuntimeTest.m
deleted file mode 100644
index 2e6362c..0000000
--- a/Foundation/GTMObjC2RuntimeTest.m
+++ /dev/null
@@ -1,445 +0,0 @@
-//
-// GTMObjC2RuntimeTest.m
-//
-// Copyright 2007-2008 Google Inc.
-//
-// Licensed under the Apache License, Version 2.0 (the "License"); you may not
-// use this file except in compliance with the License. You may obtain a copy
-// of the License at
-//
-// http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
-// WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
-// License for the specific language governing permissions and limitations under
-// the License.
-//
-
-#import "GTMObjC2Runtime.h"
-#import "GTMSenTestCase.h"
-#import "GTMSystemVersion.h"
-#import "GTMTypeCasting.h"
-
-#import <string.h>
-
-@protocol GTMObjC2Runtime_TestProtocol
-@end
-
-@protocol GTMObjC2Runtime_Test2Protocol
-AT_OPTIONAL
-- (NSString*)optional;
-AT_REQUIRED
-- (NSString*)required;
-AT_OPTIONAL
-+ (NSString*)class_optional;
-AT_REQUIRED
-+ (NSString*)class_required;
-@end
-
-@interface GTMObjC2RuntimeTest : GTMTestCase {
- Class cls_;
-}
-@end
-
-@interface GTMObjC2Runtime_TestClass : NSObject <GTMObjC2Runtime_TestProtocol>
-- (NSString*)kwyjibo;
-
-@end
-
-@interface GTMObjC2Runtime_TestClass (GMObjC2Runtime_TestClassCategory)
-- (NSString*)eatMyShorts;
-@end
-
-@implementation GTMObjC2Runtime_TestClass
-
-+ (NSString*)dontHaveACow {
- return @"dontHaveACow";
-}
-
-- (NSString*)kwyjibo {
- return @"kwyjibo";
-}
-@end
-
-@implementation GTMObjC2Runtime_TestClass (GMObjC2Runtime_TestClassCategory)
-- (NSString*)eatMyShorts {
- return @"eatMyShorts";
-}
-
-+ (NSString*)brokeHisBrain {
- return @"brokeHisBrain";
-}
-
-@end
-
-@interface GTMObjC2NotificationWatcher : NSObject
-- (void)startedTest:(NSNotification *)notification;
-@end
-
-@implementation GTMObjC2NotificationWatcher
-- (id)init {
- if ((self = [super init])) {
- NSNotificationCenter *nc = [NSNotificationCenter defaultCenter];
- // We release ourselves when we are notified.
- [self retain];
- [nc addObserver:self
- selector:@selector(startedTest:)
- name:SenTestSuiteDidStartNotification
- object:nil];
-
- }
- return self;
-}
-
-- (void)startedTest:(NSNotification *)notification {
- // Logs if we are testing on Tiger or Leopard runtime.
- SenTestSuiteRun *suiteRun = GTM_STATIC_CAST(SenTestSuiteRun,
- [notification object]);
- NSString *testName = [[suiteRun test] name];
- NSString *className = NSStringFromClass([GTMObjC2RuntimeTest class]);
- if ([testName isEqualToString:className]) {
- NSString *runtimeString;
-#ifndef OBJC2_UNAVAILABLE
- runtimeString = @"ObjC1";
-#else
- runtimeString = @"ObjC2";
-#endif
- NSLog(@"Running GTMObjC2RuntimeTests using %@ runtime.", runtimeString);
- NSNotificationCenter *nc = [NSNotificationCenter defaultCenter];
- [nc removeObserver:self];
- [self autorelease];
- }
-}
-@end
-
-@implementation GTMObjC2RuntimeTest
-
-+ (void)initialize {
- // This allows us to track which runtime we are actually testing.
- [[[GTMObjC2NotificationWatcher alloc] init] autorelease];
-}
-
-- (void)setUp {
- cls_ = [[GTMObjC2Runtime_TestClass class] retain];
-}
-
-- (void)tearDown {
- [cls_ release];
-}
-
-- (void)test_object_getClass {
- // Nil Checks
- STAssertNil(object_getClass(nil), nil);
-
- // Standard use check
- GTMObjC2Runtime_TestClass *test = [[[cls_ alloc] init] autorelease];
- Class cls = object_getClass(test);
- STAssertEqualObjects(cls, cls_, nil);
-}
-
-- (void)test_class_getName {
- // Nil Checks
- const char *name = class_getName(nil);
- STAssertEqualCStrings(name, "nil", nil);
-
- // Standard use check
- STAssertEqualCStrings(class_getName(cls_), "GTMObjC2Runtime_TestClass", nil);
-}
-
-- (void)test_class_conformsToProtocol {
- // Nil Checks
- STAssertFalse(class_conformsToProtocol(cls_, @protocol(NSObject)), nil);
- STAssertFalse(class_conformsToProtocol(cls_, nil), nil);
- // The following two tests intentionally commented out as they fail on
- // Leopard with a crash, so we fail on Tiger intentionally as well.
- // STAssertFalse(class_conformsToProtocol(nil, @protocol(NSObject)), nil);
- // STAssertFalse(class_conformsToProtocol(nil, nil), nil);
-
- // Standard use check
- STAssertTrue(class_conformsToProtocol(cls_,
- @protocol(GTMObjC2Runtime_TestProtocol)),
- nil);
-}
-
-- (void)test_class_respondsToSelector {
- // Nil Checks
- STAssertFalse(class_respondsToSelector(cls_, @selector(setUp)), nil);
- STAssertFalse(class_respondsToSelector(cls_, nil), nil);
-
- // Standard use check
- STAssertTrue(class_respondsToSelector(cls_, @selector(kwyjibo)), nil);
-}
-
-- (void)test_class_getSuperclass {
- // Nil Checks
- STAssertNil(class_getSuperclass(nil), nil);
-
- // Standard use check
- STAssertEqualObjects(class_getSuperclass(cls_), [NSObject class], nil);
-}
-
-- (void)test_class_copyMethodList {
- // Nil Checks
- Method *list = class_copyMethodList(nil, nil);
- STAssertNULL(list, nil);
-
- // Standard use check
- list = class_copyMethodList(cls_, nil);
- STAssertNotNULL(list, nil);
- free(list);
- unsigned int count = 0;
- list = class_copyMethodList(cls_, &count);
- STAssertNotNULL(list, nil);
- STAssertEquals(count, 2U, nil);
- STAssertNULL(list[count], nil);
- free(list);
-
- // Now test meta class
- count = 0;
- list = class_copyMethodList((Class)objc_getMetaClass(class_getName(cls_)),
- &count);
- STAssertNotNULL(list, nil);
- STAssertEquals(count, 2U, nil);
- STAssertNULL(list[count], nil);
- free(list);
-}
-
-- (void)test_method_getName {
- // Nil Checks
- STAssertNULL(method_getName(nil), nil);
-
- // Standard use check
- Method *list = class_copyMethodList(cls_, nil);
- STAssertNotNULL(list, nil);
- const char* selName1 = sel_getName(method_getName(list[0]));
- const char* selName2 = sel_getName(@selector(kwyjibo));
- const char* selName3 = sel_getName(@selector(eatMyShorts));
- BOOL isGood = ((strcmp(selName1, selName2)) == 0 || (strcmp(selName1, selName3) == 0));
- STAssertTrue(isGood, nil);
- free(list);
-}
-
-- (void)test_method_exchangeImplementations {
- // nil checks
- method_exchangeImplementations(nil, nil);
-
- // Standard use check
- GTMObjC2Runtime_TestClass *test = [[GTMObjC2Runtime_TestClass alloc] init];
- STAssertNotNil(test, nil);
-
- // Get initial values
- NSString *val1 = [test kwyjibo];
- STAssertNotNil(val1, nil);
- NSString *val2 = [test eatMyShorts];
- STAssertNotNil(val2, nil);
- NSString *val3 = [GTMObjC2Runtime_TestClass dontHaveACow];
- STAssertNotNil(val3, nil);
- NSString *val4 = [GTMObjC2Runtime_TestClass brokeHisBrain];
- STAssertNotNil(val4, nil);
-
- // exchange the imps
- Method *list = class_copyMethodList(cls_, nil);
- STAssertNotNULL(list, nil);
- method_exchangeImplementations(list[0], list[1]);
-
- // test against initial values
- NSString *val5 = [test kwyjibo];
- STAssertNotNil(val5, nil);
- NSString *val6 = [test eatMyShorts];
- STAssertNotNil(val6, nil);
- STAssertEqualStrings(val1, val6, nil);
- STAssertEqualStrings(val2, val5, nil);
-
- // Check that other methods not affected
- STAssertEqualStrings([GTMObjC2Runtime_TestClass dontHaveACow], val3, nil);
- STAssertEqualStrings([GTMObjC2Runtime_TestClass brokeHisBrain], val4, nil);
-
- // exchange the imps back
- method_exchangeImplementations(list[0], list[1]);
-
- // and test against initial values again
- NSString *val7 = [test kwyjibo];
- STAssertNotNil(val7, nil);
- NSString *val8 = [test eatMyShorts];
- STAssertNotNil(val8, nil);
- STAssertEqualStrings(val1, val7, nil);
- STAssertEqualStrings(val2, val8, nil);
-
- method_exchangeImplementations(list[0], nil);
- method_exchangeImplementations(nil, list[0]);
-
- val7 = [test kwyjibo];
- STAssertNotNil(val7, nil);
- val8 = [test eatMyShorts];
- STAssertNotNil(val8, nil);
- STAssertEqualStrings(val1, val7, nil);
- STAssertEqualStrings(val2, val8, nil);
-
- free(list);
- [test release];
-}
-
-- (void)test_method_getImplementation {
- // Nil Checks
- STAssertNULL(method_getImplementation(nil), nil);
-
- // Standard use check
- Method *list = class_copyMethodList(cls_, nil);
- STAssertNotNULL(list, nil);
- STAssertNotNULL(method_getImplementation(list[0]), nil);
- free(list);
-}
-
-- (void)test_method_setImplementation {
- // Standard use check
- GTMObjC2Runtime_TestClass *test = [[GTMObjC2Runtime_TestClass alloc] init];
- Method *list = class_copyMethodList(cls_, nil);
-
- // Get initial value
- NSString *str1 = objc_msgSend(test, method_getName(list[0]));
- STAssertNotNil(str1, nil);
-
- // set the imp to something else
- IMP oldImp = method_setImplementation(list[0], method_getImplementation(list[1]));
- STAssertNotNULL(oldImp, nil);
-
- // make sure they are different
- NSString *str2 = objc_msgSend(test,method_getName(list[0]));
- STAssertNotNil(str2, nil);
- STAssertNotEqualStrings(str1, str2, nil);
-
- // reset the imp
- IMP newImp = method_setImplementation(list[0], oldImp);
- STAssertNotEquals(oldImp, newImp, nil);
-
- // test nils
- // Apparently it was a bug that we could call setImplementation with a nil
- // so we now test to make sure that setting to nil works as expected on
- // all systems.
-#if MAC_OS_X_VERSION_MIN_REQUIRED < MAC_OS_X_VERSION_10_5
- // Built for less then leopard gives us the behaviors we defined...
- // (doesn't take nil)
- IMP nullImp = method_setImplementation(list[0], nil);
- STAssertNULL(nullImp, nil);
- IMP testImp = method_setImplementation(list[0], newImp);
- STAssertEquals(testImp, oldImp, nil);
-#else
- // Built for leopard or later means we get the os runtime behavior...
- if ([GTMSystemVersion isLeopard]) {
- // (takes nil)
- oldImp = method_setImplementation(list[0], nil);
- STAssertNotNULL(oldImp, nil);
- newImp = method_setImplementation(list[0], oldImp);
- STAssertNULL(newImp, nil);
- } else {
- // (doesn't take nil)
- IMP nullImp = method_setImplementation(list[0], nil);
- STAssertNULL(nullImp, nil);
- IMP testImp = method_setImplementation(list[0], newImp);
- STAssertEquals(testImp, oldImp, nil);
- }
-#endif
-
- // This case intentionally not tested. Passing nil to method_setImplementation
- // on Leopard crashes. It does on Tiger as well. Half works on SnowLeopard.
- // We made our Tiger implementation the same as the SnowLeopard
- // implementation.
- // Logged as radar 5572981.
- if (![GTMSystemVersion isLeopardOrGreater]) {
- STAssertNULL(method_setImplementation(nil, nil), nil);
- }
-#if MAC_OS_X_VERSION_MIN_REQUIRED >= MAC_OS_X_VERSION_10_5
- if ([GTMSystemVersion isSnowLeopardOrGreater]) {
- STAssertNULL(method_setImplementation(nil, newImp), nil);
- }
-#endif
-
- [test release];
- free(list);
-}
-
-- (void)test_protocol_getMethodDescription {
- // Check nil cases
- struct objc_method_description desc = protocol_getMethodDescription(nil, nil,
- YES, YES);
- STAssertNULL(desc.name, nil);
- desc = protocol_getMethodDescription(nil, @selector(optional), YES, YES);
- STAssertNULL(desc.name, nil);
- desc = protocol_getMethodDescription(@protocol(GTMObjC2Runtime_Test2Protocol),
- nil, YES, YES);
- STAssertNULL(desc.name, nil);
-
- // Instance Methods
- // Check Required case. Only OBJC2 supports required.
- desc = protocol_getMethodDescription(@protocol(GTMObjC2Runtime_Test2Protocol),
- @selector(optional), YES, YES);
-#if OBJC_API_VERSION >= 2
- STAssertNULL(desc.name, nil);
-#else
- STAssertNotNULL(desc.name, nil);
-#endif
-
- // Check Required case. Only OBJC2 supports required.
- desc = protocol_getMethodDescription(@protocol(GTMObjC2Runtime_Test2Protocol),
- @selector(required), YES, YES);
-
- STAssertNotNULL(desc.name, nil);
-
- // Check Optional case. Only OBJC2 supports optional.
- desc = protocol_getMethodDescription(@protocol(GTMObjC2Runtime_Test2Protocol),
- @selector(optional), NO, YES);
-
- STAssertNotNULL(desc.name, nil);
-
- // Check Optional case. Only OBJC2 supports optional.
- desc = protocol_getMethodDescription(@protocol(GTMObjC2Runtime_Test2Protocol),
- @selector(required), NO, YES);
-#if OBJC_API_VERSION >= 2
- STAssertNULL(desc.name, nil);
-#else
- STAssertNotNULL(desc.name, nil);
-#endif
-
- // Class Methods
- // Check Required case. Only OBJC2 supports required.
- desc = protocol_getMethodDescription(@protocol(GTMObjC2Runtime_Test2Protocol),
- @selector(class_optional), YES, NO);
-#if OBJC_API_VERSION >= 2
- STAssertNULL(desc.name, nil);
-#else
- STAssertNotNULL(desc.name, nil);
-#endif
-
- // Check Required case. Only OBJC2 supports required.
- desc = protocol_getMethodDescription(@protocol(GTMObjC2Runtime_Test2Protocol),
- @selector(class_required), YES, NO);
-
- STAssertNotNULL(desc.name, nil);
-
- // Check Optional case. Only OBJC2 supports optional.
- desc = protocol_getMethodDescription(@protocol(GTMObjC2Runtime_Test2Protocol),
- @selector(class_optional), NO, NO);
-
- STAssertNotNULL(desc.name, nil);
-
- // Check Optional case. Only OBJC2 supports optional.
- desc = protocol_getMethodDescription(@protocol(GTMObjC2Runtime_Test2Protocol),
- @selector(class_required), NO, NO);
-#if OBJC_API_VERSION >= 2
- STAssertNULL(desc.name, nil);
-#else
- STAssertNotNULL(desc.name, nil);
-#endif
-
-}
-
-- (void)test_sel_isEqual {
- STAssertTrue(sel_isEqual(@selector(kwyjibo), @selector(kwyjibo)), nil);
- STAssertFalse(sel_isEqual(@selector(kwyjibo), @selector(dontHaveACow)), nil);
- STAssertTrue(sel_isEqual(_cmd, @selector(test_sel_isEqual)), nil);
- STAssertTrue(sel_isEqual(_cmd, _cmd), nil);
- STAssertFalse(sel_isEqual(_cmd, @selector(kwyjibo)), nil);
-}
-
-@end