blob: af3c4881524fd8640b0b6b6938e5a3ce54731a0c [file] [log] [blame]
/*
* Copyright (c) 2004-2015 Erik Doernenburg and contributors
*
* Licensed under the Apache License, Version 2.0 (the "License"); you may
* not use these files 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 <XCTest/XCTest.h>
#import <OCMock/OCMConstraint.h>
@interface OCMConstraintTests : XCTestCase
{
BOOL didCallCustomConstraint;
}
@end
@implementation OCMConstraintTests
- (void)setUp
{
didCallCustomConstraint = NO;
}
- (void)testAnyAcceptsAnything
{
OCMConstraint *constraint = [OCMAnyConstraint constraint];
XCTAssertTrue([constraint evaluate:@"foo"], @"Should have accepted a value.");
XCTAssertTrue([constraint evaluate:@"bar"], @"Should have accepted another value.");
XCTAssertTrue([constraint evaluate:nil], @"Should have accepted nil.");
}
- (void)testIsNilAcceptsOnlyNil
{
OCMConstraint *constraint = [OCMIsNilConstraint constraint];
XCTAssertFalse([constraint evaluate:@"foo"], @"Should not have accepted a value.");
XCTAssertTrue([constraint evaluate:nil], @"Should have accepted nil.");
}
- (void)testIsNotNilAcceptsAnythingButNil
{
OCMConstraint *constraint = [OCMIsNotNilConstraint constraint];
XCTAssertTrue([constraint evaluate:@"foo"], @"Should have accepted a value.");
XCTAssertFalse([constraint evaluate:nil], @"Should not have accepted nil.");
}
- (void)testNotEqualAcceptsAnythingButValue
{
OCMIsNotEqualConstraint *constraint = [OCMIsNotEqualConstraint constraint];
constraint->testValue = @"foo";
XCTAssertFalse([constraint evaluate:@"foo"], @"Should not have accepted value.");
XCTAssertTrue([constraint evaluate:@"bar"], @"Should have accepted other value.");
XCTAssertTrue([constraint evaluate:nil], @"Should have accepted nil.");
}
- (BOOL)checkArg:(id)theArg
{
didCallCustomConstraint = YES;
return [theArg isEqualToString:@"foo"];
}
- (void)testUsesPlainMethod
{
OCMConstraint *constraint = CONSTRAINT(@selector(checkArg:));
XCTAssertTrue([constraint evaluate:@"foo"], @"Should have accepted foo.");
XCTAssertTrue(didCallCustomConstraint, @"Should have used custom method.");
XCTAssertFalse([constraint evaluate:@"bar"], @"Should not have accepted bar.");
}
- (BOOL)checkArg:(id)theArg withValue:(id)value
{
didCallCustomConstraint = YES;
return [theArg isEqual:value];
}
- (void)testUsesMethodWithValue
{
OCMConstraint *constraint = CONSTRAINTV(@selector(checkArg:withValue:), @"foo");
XCTAssertTrue([constraint evaluate:@"foo"], @"Should have accepted foo.");
XCTAssertTrue(didCallCustomConstraint, @"Should have used custom method.");
XCTAssertFalse([constraint evaluate:@"bar"], @"Should not have accepted bar.");
}
- (void)testRaisesExceptionWhenConstraintMethodDoesNotTakeArgument
{
XCTAssertThrows(CONSTRAINTV(@selector(checkArg:), @"bar"), @"Should have thrown for invalid constraint method.");
}
- (void)testRaisesExceptionOnUnknownSelector
{
// We use a selector that this test does not implement
XCTAssertThrows(CONSTRAINTV(@selector(arrayWithArray:), @"bar"), @"Should have thrown for unknown constraint method.");
}
-(void)testUsesBlock
{
BOOL (^checkForFooBlock)(id) = ^(id value)
{
return [value isEqualToString:@"foo"];
};
OCMBlockConstraint *constraint = [[OCMBlockConstraint alloc] initWithConstraintBlock:checkForFooBlock];
XCTAssertTrue([constraint evaluate:@"foo"], @"Should have accepted foo.");
XCTAssertFalse([constraint evaluate:@"bar"], @"Should not have accepted bar.");
}
-(void)testBlockConstraintCanCaptureArgument
{
__block NSString *captured;
BOOL (^captureArgBlock)(id) = ^(id value)
{
captured = value;
return YES;
};
OCMBlockConstraint *constraint = [[OCMBlockConstraint alloc] initWithConstraintBlock:captureArgBlock];
[constraint evaluate:@"foo"];
XCTAssertEqualObjects(@"foo", captured, @"Should have captured value from last invocation.");
[constraint evaluate:@"bar"];
XCTAssertEqualObjects(@"bar", captured, @"Should have captured value from last invocation.");
}
- (void)testEvaluateNilBlockReturnsNo
{
OCMBlockConstraint *constraint = [[OCMBlockConstraint alloc] initWithConstraintBlock:nil];
XCTAssertFalse([constraint evaluate:@"foo"]);
}
@end