97 lines
3.8 KiB
Objective-C
97 lines
3.8 KiB
Objective-C
// OCHamcrest by Jon Reid, https://qualitycoding.org/
|
|
// Copyright 2019 hamcrest.org. See LICENSE.txt
|
|
|
|
#import <Foundation/Foundation.h>
|
|
|
|
@protocol HCMatcher;
|
|
|
|
NS_ASSUME_NONNULL_BEGIN
|
|
|
|
/*!
|
|
* @header
|
|
* Assertion macros for using matchers in testing frameworks.
|
|
* Unmet assertions are reported to the HCTestFailureReporterChain.
|
|
*/
|
|
|
|
|
|
FOUNDATION_EXPORT void HC_assertThatWithLocation(id testCase, _Nullable id actual, id <HCMatcher> matcher,
|
|
const char *fileName, int lineNumber);
|
|
|
|
#define HC_assertThat(actual, matcher) \
|
|
HC_assertThatWithLocation(self, actual, matcher, __FILE__, __LINE__)
|
|
|
|
#ifndef HC_DISABLE_SHORT_SYNTAX
|
|
/*!
|
|
* @abstract assertThat(actual, matcher) -
|
|
* Asserts that actual value satisfies matcher.
|
|
* @param actual The object to evaluate as the actual value.
|
|
* @param matcher The matcher to satisfy as the expected condition.
|
|
* @discussion assertThat passes the actual value to the matcher for evaluation. If the matcher is
|
|
* not satisfied, it is reported to the HCTestFailureReporterChain.
|
|
*
|
|
* Use assertThat in test case methods. It's designed to integrate with XCTest and other testing
|
|
* frameworks where individual tests are executed as methods.
|
|
*
|
|
* <b>Name Clash</b><br />
|
|
* In the event of a name clash, <code>#define HC_DISABLE_SHORT_SYNTAX</code> and use the synonym
|
|
* HC_assertThat instead.
|
|
*/
|
|
#define assertThat(actual, matcher) HC_assertThat(actual, matcher)
|
|
#endif
|
|
|
|
|
|
typedef _Nonnull id (^HCFutureValue)(void);
|
|
|
|
FOUNDATION_EXPORT void HC_assertWithTimeoutAndLocation(id testCase, NSTimeInterval timeout,
|
|
HCFutureValue actualBlock, id <HCMatcher> matcher,
|
|
const char *fileName, int lineNumber);
|
|
|
|
#define HC_assertWithTimeout(timeout, actualBlock, matcher) \
|
|
HC_assertWithTimeoutAndLocation(self, timeout, actualBlock, matcher, __FILE__, __LINE__)
|
|
|
|
#define HC_thatEventually(actual) ^{ return actual; }
|
|
|
|
#ifndef HC_DISABLE_SHORT_SYNTAX
|
|
/*!
|
|
* @abstract assertWithTimeout(timeout, actualBlock, matcher) -
|
|
* Asserts that a value provided by a block will satisfy matcher within the specified time.
|
|
* @param timeout Maximum time to wait for passing behavior, specified in seconds.
|
|
* @param actualBlock A block providing the object to repeatedly evaluate as the actual value.
|
|
* @param matcher The matcher to satisfy as the expected condition.
|
|
* @discussion <em>assertWithTimeout</em> polls a value provided by a block to asynchronously
|
|
* satisfy the matcher. The block is evaluated repeatedly for an actual value, which is passed to
|
|
* the matcher for evaluation. If the matcher is not satisfied within the timeout, it is reported to
|
|
* the HCTestFailureReporterChain.
|
|
*
|
|
* An easy way of providing the <em>actualBlock</em> is to use the macro <code>thatEventually</code>.
|
|
*
|
|
* <b>Name Clash</b><br />
|
|
* In the event of a name clash, <code>#define HC_DISABLE_SHORT_SYNTAX</code> and use the synonym
|
|
* HC_assertWithTimeout instead.
|
|
*/
|
|
#define assertWithTimeout(timeout, actualBlock, matcher) HC_assertWithTimeout(timeout, actualBlock, matcher)
|
|
|
|
|
|
/*!
|
|
* @abstract thatEventually(actual) -
|
|
* Evaluates actual value at future time.
|
|
* @param actual The object to evaluate as the actual value.
|
|
* @discussion Wraps <em>actual</em> in a block so that it can be repeatedly evaluated by
|
|
* <code>assertWithTimeout</code>.
|
|
*
|
|
* <b>Name Clash</b><br />
|
|
* In the event of a name clash, <code>#define HC_DISABLE_SHORT_SYNTAX</code> and use the synonym
|
|
* HC_thatEventually instead.
|
|
*/
|
|
#define thatEventually(actual) HC_thatEventually(actual)
|
|
#endif
|
|
|
|
|
|
/*!
|
|
* @abstract "Expected <matcher description>, but <mismatch description>"
|
|
* @discussion Helper function to let you describe mismatches the way <tt>assertThat</tt> does.
|
|
*/
|
|
FOUNDATION_EXPORT NSString *HCDescribeMismatch(id <HCMatcher> matcher, id actual);
|
|
|
|
NS_ASSUME_NONNULL_END
|