/* * Copyright 2018 The WebRTC project authors. All Rights Reserved. * * Use of this source code is governed by a BSD-style license * that can be found in the LICENSE file in the root of the source * tree. An additional intellectual property rights grant can be found * in the file PATENTS. All contributing project authors may * be found in the AUTHORS file in the root of the source tree. */ #import "api/logging/RTCCallbackLogger.h" #import @interface RTCCallbackLoggerTests : XCTestCase @property(nonatomic, strong) RTC_OBJC_TYPE(RTCCallbackLogger) * logger; @end @implementation RTCCallbackLoggerTests @synthesize logger; - (void)setUp { self.logger = [[RTC_OBJC_TYPE(RTCCallbackLogger) alloc] init]; } - (void)tearDown { self.logger = nil; } - (void)testDefaultSeverityLevel { XCTAssertEqual(self.logger.severity, RTCLoggingSeverityInfo); } - (void)testCallbackGetsCalledForAppropriateLevel { self.logger.severity = RTCLoggingSeverityWarning; XCTestExpectation *callbackExpectation = [self expectationWithDescription:@"callbackWarning"]; [self.logger start:^(NSString *message) { XCTAssertTrue([message hasSuffix:@"Horrible error\n"]); [callbackExpectation fulfill]; }]; RTCLogError("Horrible error"); [self waitForExpectations:@[ callbackExpectation ] timeout:10.0]; } - (void)testCallbackWithSeverityGetsCalledForAppropriateLevel { self.logger.severity = RTCLoggingSeverityWarning; XCTestExpectation *callbackExpectation = [self expectationWithDescription:@"callbackWarning"]; [self.logger startWithMessageAndSeverityHandler:^(NSString *message, RTCLoggingSeverity severity) { XCTAssertTrue([message hasSuffix:@"Horrible error\n"]); XCTAssertEqual(severity, RTCLoggingSeverityError); [callbackExpectation fulfill]; }]; RTCLogError("Horrible error"); [self waitForExpectations:@[ callbackExpectation ] timeout:10.0]; } - (void)testCallbackDoesNotGetCalledForOtherLevels { self.logger.severity = RTCLoggingSeverityError; XCTestExpectation *callbackExpectation = [self expectationWithDescription:@"callbackError"]; [self.logger start:^(NSString *message) { XCTAssertTrue([message hasSuffix:@"Horrible error\n"]); [callbackExpectation fulfill]; }]; RTCLogInfo("Just some info"); RTCLogWarning("Warning warning"); RTCLogError("Horrible error"); [self waitForExpectations:@[ callbackExpectation ] timeout:10.0]; } - (void)testCallbackWithSeverityDoesNotGetCalledForOtherLevels { self.logger.severity = RTCLoggingSeverityError; XCTestExpectation *callbackExpectation = [self expectationWithDescription:@"callbackError"]; [self.logger startWithMessageAndSeverityHandler:^(NSString *message, RTCLoggingSeverity severity) { XCTAssertTrue([message hasSuffix:@"Horrible error\n"]); XCTAssertEqual(severity, RTCLoggingSeverityError); [callbackExpectation fulfill]; }]; RTCLogInfo("Just some info"); RTCLogWarning("Warning warning"); RTCLogError("Horrible error"); [self waitForExpectations:@[ callbackExpectation ] timeout:10.0]; } - (void)testCallbackDoesNotgetCalledForSeverityNone { self.logger.severity = RTCLoggingSeverityNone; XCTestExpectation *callbackExpectation = [self expectationWithDescription:@"unexpectedCallback"]; [self.logger start:^(NSString *message) { [callbackExpectation fulfill]; XCTAssertTrue(false); }]; RTCLogInfo("Just some info"); RTCLogWarning("Warning warning"); RTCLogError("Horrible error"); XCTWaiter *waiter = [[XCTWaiter alloc] init]; XCTWaiterResult result = [waiter waitForExpectations:@[ callbackExpectation ] timeout:1.0]; XCTAssertEqual(result, XCTWaiterResultTimedOut); } - (void)testCallbackWithSeverityDoesNotgetCalledForSeverityNone { self.logger.severity = RTCLoggingSeverityNone; XCTestExpectation *callbackExpectation = [self expectationWithDescription:@"unexpectedCallback"]; [self.logger startWithMessageAndSeverityHandler:^(NSString *message, RTCLoggingSeverity severity) { [callbackExpectation fulfill]; XCTAssertTrue(false); }]; RTCLogInfo("Just some info"); RTCLogWarning("Warning warning"); RTCLogError("Horrible error"); XCTWaiter *waiter = [[XCTWaiter alloc] init]; XCTWaiterResult result = [waiter waitForExpectations:@[ callbackExpectation ] timeout:1.0]; XCTAssertEqual(result, XCTWaiterResultTimedOut); } - (void)testStartingWithNilCallbackDoesNotCrash { [self.logger start:nil]; RTCLogError("Horrible error"); } - (void)testStartingWithNilCallbackWithSeverityDoesNotCrash { [self.logger startWithMessageAndSeverityHandler:nil]; RTCLogError("Horrible error"); } - (void)testStopCallbackLogger { XCTestExpectation *callbackExpectation = [self expectationWithDescription:@"stopped"]; [self.logger start:^(NSString *message) { [callbackExpectation fulfill]; }]; [self.logger stop]; RTCLogInfo("Just some info"); XCTWaiter *waiter = [[XCTWaiter alloc] init]; XCTWaiterResult result = [waiter waitForExpectations:@[ callbackExpectation ] timeout:1.0]; XCTAssertEqual(result, XCTWaiterResultTimedOut); } - (void)testStopCallbackWithSeverityLogger { XCTestExpectation *callbackExpectation = [self expectationWithDescription:@"stopped"]; [self.logger startWithMessageAndSeverityHandler:^(NSString *message, RTCLoggingSeverity loggingServerity) { [callbackExpectation fulfill]; }]; [self.logger stop]; RTCLogInfo("Just some info"); XCTWaiter *waiter = [[XCTWaiter alloc] init]; XCTWaiterResult result = [waiter waitForExpectations:@[ callbackExpectation ] timeout:1.0]; XCTAssertEqual(result, XCTWaiterResultTimedOut); } - (void)testDestroyingCallbackLogger { XCTestExpectation *callbackExpectation = [self expectationWithDescription:@"destroyed"]; [self.logger start:^(NSString *message) { [callbackExpectation fulfill]; }]; self.logger = nil; RTCLogInfo("Just some info"); XCTWaiter *waiter = [[XCTWaiter alloc] init]; XCTWaiterResult result = [waiter waitForExpectations:@[ callbackExpectation ] timeout:1.0]; XCTAssertEqual(result, XCTWaiterResultTimedOut); } - (void)testDestroyingCallbackWithSeverityLogger { XCTestExpectation *callbackExpectation = [self expectationWithDescription:@"destroyed"]; [self.logger startWithMessageAndSeverityHandler:^(NSString *message, RTCLoggingSeverity loggingServerity) { [callbackExpectation fulfill]; }]; self.logger = nil; RTCLogInfo("Just some info"); XCTWaiter *waiter = [[XCTWaiter alloc] init]; XCTWaiterResult result = [waiter waitForExpectations:@[ callbackExpectation ] timeout:1.0]; XCTAssertEqual(result, XCTWaiterResultTimedOut); } - (void)testCallbackWithSeverityLoggerCannotStartTwice { self.logger.severity = RTCLoggingSeverityWarning; XCTestExpectation *callbackExpectation = [self expectationWithDescription:@"callbackWarning"]; [self.logger startWithMessageAndSeverityHandler:^(NSString *message, RTCLoggingSeverity loggingServerity) { XCTAssertTrue([message hasSuffix:@"Horrible error\n"]); XCTAssertEqual(loggingServerity, RTCLoggingSeverityError); [callbackExpectation fulfill]; }]; [self.logger start:^(NSString *message) { [callbackExpectation fulfill]; XCTAssertTrue(false); }]; RTCLogError("Horrible error"); [self waitForExpectations:@[ callbackExpectation ] timeout:10.0]; } @end