//
//  Copyright (c) 2017 Open Whisper Systems. All rights reserved.
//

#import "ExceptionsTest.h"
#import "TestUtil.h"

@implementation ExceptionsTest

- (void)testContracts {
    ows_require(1 + 1 == 2);
    @try {
        ows_require(1 + 1 == 3);
        XCTFail(@"");
    } @catch (BadArgument *ex) {
        test([[ex reason] hasPrefix:@"require 1 + 1 == 3"]);
    }

    requireState(1 + 1 == 2);
    @try {
        requireState(1 + 1 == 3);
        XCTFail(@"");
    } @catch (BadState *ex) {
        test([[ex reason] hasPrefix:@"required state: 1 + 1 == 3"]);
    }

    checkOperationDescribe(1 + 1 == 2, @"addition.");
    @try {
        checkOperationDescribe(1 + 1 == 3, @"addition.");
        XCTFail(@"");
    } @catch (OperationFailed *ex) {
        test([[ex reason] hasPrefix:@"Operation failed: addition. Expected: 1 + 1 == 3"]);
    }

    checkOperation(1 + 1 == 2);
    @try {
        checkOperation(1 + 1 == 3);
        XCTFail(@"");
    } @catch (OperationFailed *ex) {
        test([[ex reason] hasPrefix:@"Operation failed. Expected: 1 + 1 == 3"]);
    }
}

@end
