| // |
| // GTMLightweightProxyTest.m |
| // |
| // Copyright 2006-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 "GTMSenTestCase.h" |
| #import "GTMLightweightProxy.h" |
| |
| @interface GTMLightweightProxy (GTMLightweightProxyTest) |
| - (id)init; |
| @end |
| |
| @interface GTMLightweightProxyTest : GTMTestCase |
| - (BOOL)returnYes; |
| @end |
| |
| // Declare a non-existent method that we can call without compiler warnings. |
| @interface GTMLightweightProxyTest (GTMLightweightProxyTestMadeUpMethodDeclaration) |
| - (void)someMadeUpMethod; |
| @end |
| |
| @implementation GTMLightweightProxyTest |
| |
| - (void)testInit { |
| id proxy = [[[GTMLightweightProxy alloc] |
| initWithRepresentedObject:self] autorelease]; |
| XCTAssertNotNil(proxy); |
| |
| proxy = [[[GTMLightweightProxy alloc] init] autorelease]; |
| XCTAssertNotNil(proxy); |
| } |
| |
| - (void)testProxy { |
| id proxy |
| = [[[GTMLightweightProxy alloc] initWithRepresentedObject:self] autorelease]; |
| XCTAssertEqualObjects(self, [proxy representedObject], |
| @"Represented object setup failed"); |
| |
| // Check that it identifies itself as a proxy. |
| XCTAssertTrue([proxy isProxy], @"Should identify as a proxy"); |
| // Check that it passes class requests on |
| XCTAssertTrue([proxy isMemberOfClass:[self class]], |
| @"Should pass class requests through"); |
| |
| // Check that it claims to respond to its selectors. |
| XCTAssertTrue([proxy respondsToSelector:@selector(initWithRepresentedObject:)], |
| @"Claims not to respond to initWithRepresentedObject:"); |
| XCTAssertTrue([proxy respondsToSelector:@selector(representedObject)], |
| @"Claims not to respond to representedObject:"); |
| XCTAssertTrue([proxy respondsToSelector:@selector(setRepresentedObject:)], |
| @"Claims not to respond to setRepresentedObject:"); |
| // Check that it responds to its represented object's selectors |
| XCTAssertTrue([proxy respondsToSelector:@selector(returnYes)], |
| @"Claims not to respond to returnYes"); |
| // ... but not to made up selectors. |
| #if !(__IPHONE_OS_VERSION_MIN_REQUIRED == __IPHONE_3_2 || __IPHONE_OS_VERSION_MIN_REQUIRED == __IPHONE_4_0) |
| // Exceptions thrown by - (void)doesNotRecognizeSelector:(SEL)aSelector |
| // does not get caught on iOS 3.2 and greater. |
| // http://openradar.appspot.com/radar?id=420401 |
| XCTAssertThrows([proxy someMadeUpMethod], |
| @"Calling a bogus method should throw"); |
| #endif |
| |
| // Check that callthrough works. |
| XCTAssertTrue([proxy returnYes], |
| @"Calling through to the represented object failed"); |
| |
| // Check that nilling out the represented object works. |
| [proxy setRepresentedObject:nil]; |
| XCTAssertTrue([proxy respondsToSelector:@selector(setRepresentedObject:)], |
| @"Claims not to respond to setRepresentedObject: after nilling" |
| @" out represented object"); |
| XCTAssertFalse([proxy respondsToSelector:@selector(returnYes)], |
| @"Claims to respond to returnYes after nilling out represented" |
| @" object"); |
| // Calling through once the represented object is nil should fail silently |
| XCTAssertNoThrow([proxy returnYes], |
| @"Calling through without a represented object should fail" |
| @" silently"); |
| |
| // ... even when they are made up. |
| #if !(__IPHONE_OS_VERSION_MIN_REQUIRED == __IPHONE_3_2 || __IPHONE_OS_VERSION_MIN_REQUIRED == __IPHONE_4_0) |
| // Exceptions thrown by - (void)doesNotRecognizeSelector:(SEL)aSelector |
| // does not get caught on iOS 3.2 and greater. |
| // http://openradar.appspot.com/radar?id=420401 |
| |
| XCTAssertNoThrow([proxy someMadeUpMethod], |
| @"Calling a bogus method on a nilled proxy should not throw"); |
| #endif |
| |
| } |
| |
| // Simple method to test calling through the proxy. |
| - (BOOL)returnYes { |
| return YES; |
| } |
| |
| @end |