diff --git a/AppCenter/AppCenterTests/MSACDeviceLogTests.m b/AppCenter/AppCenterTests/MSACDeviceLogTests.m index 2ddd3e089d..424eb300df 100644 --- a/AppCenter/AppCenterTests/MSACDeviceLogTests.m +++ b/AppCenter/AppCenterTests/MSACDeviceLogTests.m @@ -224,6 +224,10 @@ - (void)testIsEqual { // Then XCTAssertFalse([self.sut isEqual:actualDevice]); + + // Check description method result. + NSMutableDictionary *serializeResult = [self.sut serializeToDictionary]; + assertThat(serializeResult.description, equalTo([self.sut description])); } - (void)testIsNotEqualToNil { diff --git a/AppCenterCrashes/AppCenterCrashesTests/MSACBinaryTests.m b/AppCenterCrashes/AppCenterCrashesTests/MSACBinaryTests.m index c061cd36a0..6c7453160e 100644 --- a/AppCenterCrashes/AppCenterCrashesTests/MSACBinaryTests.m +++ b/AppCenterCrashes/AppCenterCrashesTests/MSACBinaryTests.m @@ -30,6 +30,7 @@ - (void)testSerializingBinaryToDictionaryWorks { assertThat(actual[@"architecture"], equalTo(sut.architecture)); assertThat(actual[@"primaryArchitectureId"], equalTo(sut.primaryArchitectureId)); assertThat(actual[@"architectureVariantId"], equalTo(sut.architectureVariantId)); + assertThat(actual.description, equalTo([sut description])); } - (void)testNSCodingSerializationAndDeserializationWorks { diff --git a/AppCenterCrashes/AppCenterCrashesTests/MSACErrorLogFormatterTests.mm b/AppCenterCrashes/AppCenterCrashesTests/MSACErrorLogFormatterTests.mm index c1e95f0659..a0bba59371 100644 --- a/AppCenterCrashes/AppCenterCrashesTests/MSACErrorLogFormatterTests.mm +++ b/AppCenterCrashes/AppCenterCrashesTests/MSACErrorLogFormatterTests.mm @@ -736,4 +736,127 @@ - (void)testCrashReportsParametersFromMacOSReport { } #endif +- (void)checkIfCodeTypeConvertedCorrectly:(NSNumber *)codeType isKnownEncodingType:(BOOL)isKnownEncodingType expectedType:(NSString *)expectedType { + + // Init apple error log with codeType and acrhName. + MSACAppleErrorLog *errorLog = [MSACAppleErrorLog new]; + errorLog.primaryArchitectureId = codeType; + errorLog.isKnownEncodingType = isKnownEncodingType; + + // Convert apple error log to error report. + MSACErrorReport *errorReport = [MSACErrorLogFormatter errorReportFromLog:errorLog]; + + // Verify that codeType was converted as excpected. + XCTAssertEqual(errorReport.codeType, expectedType); +} + +- (void)checkIfArchNameConvertedCorrectly:(NSNumber *)codeType archName:(NSNumber *)archName isKnownEncodingType:(BOOL)isKnownEncodingType expectedName:(NSString *)expectedName { + + // Init apple error log with codeType and acrhName. + MSACAppleErrorLog *errorLog = [MSACAppleErrorLog new]; + errorLog.primaryArchitectureId = codeType; + errorLog.architectureVariantId = archName; + errorLog.isKnownEncodingType = isKnownEncodingType; + + // Convert apple error log to error report. + MSACErrorReport *errorReport = [MSACErrorLogFormatter errorReportFromLog:errorLog]; + + // Verify that archName was converted as excpected. + XCTAssertEqual(errorReport.archName, expectedName); +} + +- (void)testConvertCodeTypeToString { + [self checkIfCodeTypeConvertedCorrectly:@(CPU_TYPE_ARM) isKnownEncodingType:YES expectedType:@"ARM"]; + [self checkIfCodeTypeConvertedCorrectly:@(CPU_TYPE_ARM64) isKnownEncodingType:YES expectedType:@"ARM-64"]; + [self checkIfCodeTypeConvertedCorrectly:@(CPU_TYPE_X86) isKnownEncodingType:YES expectedType:@"X86"]; + [self checkIfCodeTypeConvertedCorrectly:@(CPU_TYPE_X86_64) isKnownEncodingType:YES expectedType:@"X86-64"]; + [self checkIfCodeTypeConvertedCorrectly:@(CPU_TYPE_POWERPC) isKnownEncodingType:YES expectedType:@"PPC"]; +} + +- (void)testConvertArchNameToString { + [self checkIfArchNameConvertedCorrectly:@(CPU_TYPE_ARM) + archName:@(CPU_SUBTYPE_ARM_V6) + isKnownEncodingType:YES + expectedName:@"armv6"]; + [self checkIfArchNameConvertedCorrectly:@(CPU_TYPE_ARM) + archName:@(CPU_SUBTYPE_ARM_V7) + isKnownEncodingType:YES + expectedName:@"armv7"]; + [self checkIfArchNameConvertedCorrectly:@(CPU_TYPE_ARM) + archName:@(CPU_SUBTYPE_ARM_V7S) + isKnownEncodingType:YES + expectedName:@"armv7s"]; + [self checkIfArchNameConvertedCorrectly:@(CPU_TYPE_ARM64) + archName:@(CPU_SUBTYPE_ARM64_ALL) + isKnownEncodingType:YES + expectedName:@"arm64"]; + [self checkIfArchNameConvertedCorrectly:@(CPU_TYPE_ARM64) + archName:@(CPU_SUBTYPE_ARM64_V8) + isKnownEncodingType:YES + expectedName:@"armv8"]; + [self checkIfArchNameConvertedCorrectly:@(CPU_TYPE_ARM64) + archName:@(CPU_SUBTYPE_ARM64E) + isKnownEncodingType:YES + expectedName:@"arm64e"]; + [self checkIfArchNameConvertedCorrectly:@(CPU_TYPE_X86) + archName:@(CPU_TYPE_X86) + isKnownEncodingType:YES + expectedName:@"i386"]; + [self checkIfArchNameConvertedCorrectly:@(CPU_TYPE_X86_64) + archName:@(CPU_TYPE_X86_64) + isKnownEncodingType:YES + expectedName:@"x86_64"]; + [self checkIfArchNameConvertedCorrectly:@(CPU_TYPE_POWERPC) + archName:@(CPU_TYPE_POWERPC) + isKnownEncodingType:YES + expectedName:@"powerpc"]; +} + +- (void)testConvertCodeTypeUnknownEncodingTypeToString { + [self checkIfCodeTypeConvertedCorrectly:@(CPU_TYPE_ARM) isKnownEncodingType:NO expectedType:@"???"]; + [self checkIfCodeTypeConvertedCorrectly:@(CPU_TYPE_ARM64) isKnownEncodingType:NO expectedType:@"???"]; + [self checkIfCodeTypeConvertedCorrectly:@(CPU_TYPE_X86) isKnownEncodingType:NO expectedType:@"???"]; + [self checkIfCodeTypeConvertedCorrectly:@(CPU_TYPE_X86_64) isKnownEncodingType:NO expectedType:@"???"]; + [self checkIfCodeTypeConvertedCorrectly:@(CPU_TYPE_POWERPC) isKnownEncodingType:NO expectedType:@"???"]; +} + +- (void)testConvertArchNameUnknownEncodingTypeToString { + [self checkIfArchNameConvertedCorrectly:@(CPU_TYPE_ARM) + archName:@(CPU_SUBTYPE_ARM_V6) + isKnownEncodingType:NO + expectedName:@"???"]; + [self checkIfArchNameConvertedCorrectly:@(CPU_TYPE_ARM) + archName:@(CPU_SUBTYPE_ARM_V7) + isKnownEncodingType:NO + expectedName:@"???"]; + [self checkIfArchNameConvertedCorrectly:@(CPU_TYPE_ARM) + archName:@(CPU_SUBTYPE_ARM_V7S) + isKnownEncodingType:NO + expectedName:@"???"]; + [self checkIfArchNameConvertedCorrectly:@(CPU_TYPE_ARM64) + archName:@(CPU_SUBTYPE_ARM64_ALL) + isKnownEncodingType:NO + expectedName:@"???"]; + [self checkIfArchNameConvertedCorrectly:@(CPU_TYPE_ARM64) + archName:@(CPU_SUBTYPE_ARM64_V8) + isKnownEncodingType:NO + expectedName:@"???"]; + [self checkIfArchNameConvertedCorrectly:@(CPU_TYPE_ARM64) + archName:@(CPU_SUBTYPE_ARM64E) + isKnownEncodingType:NO + expectedName:@"???"]; + [self checkIfArchNameConvertedCorrectly:@(CPU_TYPE_X86) + archName:@(CPU_TYPE_X86) + isKnownEncodingType:NO + expectedName:@"???"]; + [self checkIfArchNameConvertedCorrectly:@(CPU_TYPE_X86_64) + archName:@(CPU_TYPE_X86_64) + isKnownEncodingType:NO + expectedName:@"???"]; + [self checkIfArchNameConvertedCorrectly:@(CPU_TYPE_POWERPC) + archName:@(CPU_TYPE_POWERPC) + isKnownEncodingType:NO + expectedName:@"???"]; +} + @end diff --git a/AppCenterCrashes/AppCenterCrashesTests/MSACThreadTests.m b/AppCenterCrashes/AppCenterCrashesTests/MSACThreadTests.m index 443f882c90..d956481b60 100644 --- a/AppCenterCrashes/AppCenterCrashesTests/MSACThreadTests.m +++ b/AppCenterCrashes/AppCenterCrashesTests/MSACThreadTests.m @@ -60,6 +60,7 @@ - (void)testSerializingBinaryToDictionaryWorks { assertThat(actual[@"name"], equalTo(sut.name)); assertThat([actual[@"exception"] valueForKey:@"type"], equalTo(sut.exception.type)); assertThat([actual[@"exception"] valueForKey:@"message"], equalTo(sut.exception.message)); + assertThat(actual.description, equalTo([sut description])); NSArray *actualFrames = [actual[@"exception"] valueForKey:@"frames"]; XCTAssertEqual(actualFrames.count, sut.exception.frames.count); diff --git a/AppCenterCrashes/AppCenterCrashesTests/MSACWrapperCrashesHelperTests.mm b/AppCenterCrashes/AppCenterCrashesTests/MSACWrapperCrashesHelperTests.mm index 85bdc66713..0871ee79f1 100644 --- a/AppCenterCrashes/AppCenterCrashesTests/MSACWrapperCrashesHelperTests.mm +++ b/AppCenterCrashes/AppCenterCrashesTests/MSACWrapperCrashesHelperTests.mm @@ -301,4 +301,20 @@ - (void)testTrackExceptionWithAllParameters { XCTAssertEqualObjects(actualErrorId, errorId); } +- (void)testBuildHandledErrorReportWithErrorID { + MSACErrorReport *report = [MSACWrapperCrashesHelper buildHandledErrorReportWithErrorID:@"errorID"]; + XCTAssertNil(report.codeType); + XCTAssertNil(report.archName); + XCTAssertNil(report.applicationPath); + XCTAssertNil(report.threads); + XCTAssertNil(report.binaries); + XCTAssertNil(report.reporterKey); + XCTAssertNil(report.signal); + XCTAssertNil(report.exceptionName); + XCTAssertNil(report.exceptionReason); + XCTAssertEqualObjects(report.appStartTime, [MSACCrashes sharedInstance].appStartTime); + XCTAssertEqualObjects(report.device, [MSACDeviceTracker sharedInstance].device); + XCTAssertNotNil(report.appErrorTime); +} + @end