| /* |
| * 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 |