blob: cdf29b65a780f698920eda660cc1f30071894f1d [file] [log] [blame]
//
// 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