| Index: experimental/visual_studio_plugin/third_party/breakpad/common/mac/testing/GTMSenTestCase.m
|
| diff --git a/experimental/visual_studio_plugin/third_party/breakpad/common/mac/testing/GTMSenTestCase.m b/experimental/visual_studio_plugin/third_party/breakpad/common/mac/testing/GTMSenTestCase.m
|
| deleted file mode 100644
|
| index 99b9db0702048c1280e9d57bf36f2fc2bd6712c8..0000000000000000000000000000000000000000
|
| --- a/experimental/visual_studio_plugin/third_party/breakpad/common/mac/testing/GTMSenTestCase.m
|
| +++ /dev/null
|
| @@ -1,366 +0,0 @@
|
| -//
|
| -// GTMSenTestCase.m
|
| -//
|
| -// Copyright 2007-2008 Google Inc.
|
| -//
|
| -// Licensed under the Apache License, Version 2.0 (the "License"); you may not
|
| -// use this file 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 "GTMSenTestCase.h"
|
| -#import <unistd.h>
|
| -
|
| -#if !GTM_IPHONE_SDK
|
| -#import "GTMGarbageCollection.h"
|
| -#endif // !GTM_IPHONE_SDK
|
| -
|
| -#if GTM_IPHONE_SDK
|
| -#import <stdarg.h>
|
| -
|
| -@interface NSException (GTMSenTestPrivateAdditions)
|
| -+ (NSException *)failureInFile:(NSString *)filename
|
| - atLine:(int)lineNumber
|
| - reason:(NSString *)reason;
|
| -@end
|
| -
|
| -@implementation NSException (GTMSenTestPrivateAdditions)
|
| -+ (NSException *)failureInFile:(NSString *)filename
|
| - atLine:(int)lineNumber
|
| - reason:(NSString *)reason {
|
| - NSDictionary *userInfo =
|
| - [NSDictionary dictionaryWithObjectsAndKeys:
|
| - [NSNumber numberWithInteger:lineNumber], SenTestLineNumberKey,
|
| - filename, SenTestFilenameKey,
|
| - nil];
|
| -
|
| - return [self exceptionWithName:SenTestFailureException
|
| - reason:reason
|
| - userInfo:userInfo];
|
| -}
|
| -@end
|
| -
|
| -@implementation NSException (GTMSenTestAdditions)
|
| -
|
| -+ (NSException *)failureInFile:(NSString *)filename
|
| - atLine:(int)lineNumber
|
| - withDescription:(NSString *)formatString, ... {
|
| -
|
| - NSString *testDescription = @"";
|
| - if (formatString) {
|
| - va_list vl;
|
| - va_start(vl, formatString);
|
| - testDescription =
|
| - [[[NSString alloc] initWithFormat:formatString arguments:vl] autorelease];
|
| - va_end(vl);
|
| - }
|
| -
|
| - NSString *reason = testDescription;
|
| -
|
| - return [self failureInFile:filename atLine:lineNumber reason:reason];
|
| -}
|
| -
|
| -+ (NSException *)failureInCondition:(NSString *)condition
|
| - isTrue:(BOOL)isTrue
|
| - inFile:(NSString *)filename
|
| - atLine:(int)lineNumber
|
| - withDescription:(NSString *)formatString, ... {
|
| -
|
| - NSString *testDescription = @"";
|
| - if (formatString) {
|
| - va_list vl;
|
| - va_start(vl, formatString);
|
| - testDescription =
|
| - [[[NSString alloc] initWithFormat:formatString arguments:vl] autorelease];
|
| - va_end(vl);
|
| - }
|
| -
|
| - NSString *reason = [NSString stringWithFormat:@"'%@' should be %s. %@",
|
| - condition, isTrue ? "TRUE" : "FALSE", testDescription];
|
| -
|
| - return [self failureInFile:filename atLine:lineNumber reason:reason];
|
| -}
|
| -
|
| -+ (NSException *)failureInEqualityBetweenObject:(id)left
|
| - andObject:(id)right
|
| - inFile:(NSString *)filename
|
| - atLine:(int)lineNumber
|
| - withDescription:(NSString *)formatString, ... {
|
| -
|
| - NSString *testDescription = @"";
|
| - if (formatString) {
|
| - va_list vl;
|
| - va_start(vl, formatString);
|
| - testDescription =
|
| - [[[NSString alloc] initWithFormat:formatString arguments:vl] autorelease];
|
| - va_end(vl);
|
| - }
|
| -
|
| - NSString *reason =
|
| - [NSString stringWithFormat:@"'%@' should be equal to '%@'. %@",
|
| - [left description], [right description], testDescription];
|
| -
|
| - return [self failureInFile:filename atLine:lineNumber reason:reason];
|
| -}
|
| -
|
| -+ (NSException *)failureInEqualityBetweenValue:(NSValue *)left
|
| - andValue:(NSValue *)right
|
| - withAccuracy:(NSValue *)accuracy
|
| - inFile:(NSString *)filename
|
| - atLine:(int)lineNumber
|
| - withDescription:(NSString *)formatString, ... {
|
| -
|
| - NSString *testDescription = @"";
|
| - if (formatString) {
|
| - va_list vl;
|
| - va_start(vl, formatString);
|
| - testDescription =
|
| - [[[NSString alloc] initWithFormat:formatString arguments:vl] autorelease];
|
| - va_end(vl);
|
| - }
|
| -
|
| - NSString *reason;
|
| - if (accuracy) {
|
| - reason =
|
| - [NSString stringWithFormat:@"'%@' should be equal to '%@'. %@",
|
| - left, right, testDescription];
|
| - } else {
|
| - reason =
|
| - [NSString stringWithFormat:@"'%@' should be equal to '%@' +/-'%@'. %@",
|
| - left, right, accuracy, testDescription];
|
| - }
|
| -
|
| - return [self failureInFile:filename atLine:lineNumber reason:reason];
|
| -}
|
| -
|
| -+ (NSException *)failureInRaise:(NSString *)expression
|
| - inFile:(NSString *)filename
|
| - atLine:(int)lineNumber
|
| - withDescription:(NSString *)formatString, ... {
|
| -
|
| - NSString *testDescription = @"";
|
| - if (formatString) {
|
| - va_list vl;
|
| - va_start(vl, formatString);
|
| - testDescription =
|
| - [[[NSString alloc] initWithFormat:formatString arguments:vl] autorelease];
|
| - va_end(vl);
|
| - }
|
| -
|
| - NSString *reason = [NSString stringWithFormat:@"'%@' should raise. %@",
|
| - expression, testDescription];
|
| -
|
| - return [self failureInFile:filename atLine:lineNumber reason:reason];
|
| -}
|
| -
|
| -+ (NSException *)failureInRaise:(NSString *)expression
|
| - exception:(NSException *)exception
|
| - inFile:(NSString *)filename
|
| - atLine:(int)lineNumber
|
| - withDescription:(NSString *)formatString, ... {
|
| -
|
| - NSString *testDescription = @"";
|
| - if (formatString) {
|
| - va_list vl;
|
| - va_start(vl, formatString);
|
| - testDescription =
|
| - [[[NSString alloc] initWithFormat:formatString arguments:vl] autorelease];
|
| - va_end(vl);
|
| - }
|
| -
|
| - NSString *reason;
|
| - if ([[exception name] isEqualToString:SenTestFailureException]) {
|
| - // it's our exception, assume it has the right description on it.
|
| - reason = [exception reason];
|
| - } else {
|
| - // not one of our exception, use the exceptions reason and our description
|
| - reason = [NSString stringWithFormat:@"'%@' raised '%@'. %@",
|
| - expression, [exception reason], testDescription];
|
| - }
|
| -
|
| - return [self failureInFile:filename atLine:lineNumber reason:reason];
|
| -}
|
| -
|
| -@end
|
| -
|
| -NSString *STComposeString(NSString *formatString, ...) {
|
| - NSString *reason = @"";
|
| - if (formatString) {
|
| - va_list vl;
|
| - va_start(vl, formatString);
|
| - reason =
|
| - [[[NSString alloc] initWithFormat:formatString arguments:vl] autorelease];
|
| - va_end(vl);
|
| - }
|
| - return reason;
|
| -}
|
| -
|
| -NSString *const SenTestFailureException = @"SenTestFailureException";
|
| -NSString *const SenTestFilenameKey = @"SenTestFilenameKey";
|
| -NSString *const SenTestLineNumberKey = @"SenTestLineNumberKey";
|
| -
|
| -@interface SenTestCase (SenTestCasePrivate)
|
| -// our method of logging errors
|
| -+ (void)printException:(NSException *)exception fromTestName:(NSString *)name;
|
| -@end
|
| -
|
| -@implementation SenTestCase
|
| -- (void)failWithException:(NSException*)exception {
|
| - [exception raise];
|
| -}
|
| -
|
| -- (void)setUp {
|
| -}
|
| -
|
| -- (void)performTest:(SEL)sel {
|
| - currentSelector_ = sel;
|
| - @try {
|
| - [self invokeTest];
|
| - } @catch (NSException *exception) {
|
| - [[self class] printException:exception
|
| - fromTestName:NSStringFromSelector(sel)];
|
| - [exception raise];
|
| - }
|
| -}
|
| -
|
| -+ (void)printException:(NSException *)exception fromTestName:(NSString *)name {
|
| - NSDictionary *userInfo = [exception userInfo];
|
| - NSString *filename = [userInfo objectForKey:SenTestFilenameKey];
|
| - NSNumber *lineNumber = [userInfo objectForKey:SenTestLineNumberKey];
|
| - NSString *className = NSStringFromClass([self class]);
|
| - if ([filename length] == 0) {
|
| - filename = @"Unknown.m";
|
| - }
|
| - fprintf(stderr, "%s:%ld: error: -[%s %s] : %s\n",
|
| - [filename UTF8String],
|
| - (long)[lineNumber integerValue],
|
| - [className UTF8String],
|
| - [name UTF8String],
|
| - [[exception reason] UTF8String]);
|
| - fflush(stderr);
|
| -}
|
| -
|
| -- (void)invokeTest {
|
| - NSException *e = nil;
|
| - @try {
|
| - // Wrap things in autorelease pools because they may
|
| - // have an STMacro in their dealloc which may get called
|
| - // when the pool is cleaned up
|
| - NSAutoreleasePool *pool = [[NSAutoreleasePool alloc] init];
|
| - // We don't log exceptions here, instead we let the person that called
|
| - // this log the exception. This ensures they are only logged once but the
|
| - // outer layers get the exceptions to report counts, etc.
|
| - @try {
|
| - [self setUp];
|
| - @try {
|
| - [self performSelector:currentSelector_];
|
| - } @catch (NSException *exception) {
|
| - e = [exception retain];
|
| - }
|
| - [self tearDown];
|
| - } @catch (NSException *exception) {
|
| - e = [exception retain];
|
| - }
|
| - [pool release];
|
| - } @catch (NSException *exception) {
|
| - e = [exception retain];
|
| - }
|
| - if (e) {
|
| - [e autorelease];
|
| - [e raise];
|
| - }
|
| -}
|
| -
|
| -- (void)tearDown {
|
| -}
|
| -
|
| -- (NSString *)description {
|
| - // This matches the description OCUnit would return to you
|
| - return [NSString stringWithFormat:@"-[%@ %@]", [self class],
|
| - NSStringFromSelector(currentSelector_)];
|
| -}
|
| -@end
|
| -
|
| -#endif // GTM_IPHONE_SDK
|
| -
|
| -@implementation GTMTestCase : SenTestCase
|
| -- (void)invokeTest {
|
| - Class devLogClass = NSClassFromString(@"GTMUnitTestDevLog");
|
| - if (devLogClass) {
|
| - [devLogClass performSelector:@selector(enableTracking)];
|
| - [devLogClass performSelector:@selector(verifyNoMoreLogsExpected)];
|
| -
|
| - }
|
| - [super invokeTest];
|
| - if (devLogClass) {
|
| - [devLogClass performSelector:@selector(verifyNoMoreLogsExpected)];
|
| - [devLogClass performSelector:@selector(disableTracking)];
|
| - }
|
| -}
|
| -@end
|
| -
|
| -// Leak detection
|
| -#if !GTM_IPHONE_DEVICE
|
| -// Don't want to get leaks on the iPhone Device as the device doesn't
|
| -// have 'leaks'. The simulator does though.
|
| -
|
| -// COV_NF_START
|
| -// We don't have leak checking on by default, so this won't be hit.
|
| -static void _GTMRunLeaks(void) {
|
| - // This is an atexit handler. It runs leaks for us to check if we are
|
| - // leaking anything in our tests.
|
| - const char* cExclusionsEnv = getenv("GTM_LEAKS_SYMBOLS_TO_IGNORE");
|
| - NSMutableString *exclusions = [NSMutableString string];
|
| - if (cExclusionsEnv) {
|
| - NSString *exclusionsEnv = [NSString stringWithUTF8String:cExclusionsEnv];
|
| - NSArray *exclusionsArray = [exclusionsEnv componentsSeparatedByString:@","];
|
| - NSString *exclusion;
|
| - NSCharacterSet *wcSet = [NSCharacterSet whitespaceCharacterSet];
|
| - GTM_FOREACH_OBJECT(exclusion, exclusionsArray) {
|
| - exclusion = [exclusion stringByTrimmingCharactersInSet:wcSet];
|
| - [exclusions appendFormat:@"-exclude \"%@\" ", exclusion];
|
| - }
|
| - }
|
| - NSString *string
|
| - = [NSString stringWithFormat:@"/usr/bin/leaks %@%d"
|
| - @"| /usr/bin/sed -e 's/Leak: /Leaks:0: warning: Leak /'",
|
| - exclusions, getpid()];
|
| - int ret = system([string UTF8String]);
|
| - if (ret) {
|
| - fprintf(stderr, "%s:%d: Error: Unable to run leaks. 'system' returned: %d",
|
| - __FILE__, __LINE__, ret);
|
| - fflush(stderr);
|
| - }
|
| -}
|
| -// COV_NF_END
|
| -
|
| -static __attribute__((constructor)) void _GTMInstallLeaks(void) {
|
| - BOOL checkLeaks = YES;
|
| -#if !GTM_IPHONE_SDK
|
| - checkLeaks = GTMIsGarbageCollectionEnabled() ? NO : YES;
|
| -#endif // !GTM_IPHONE_SDK
|
| - if (checkLeaks) {
|
| - checkLeaks = getenv("GTM_ENABLE_LEAKS") ? YES : NO;
|
| - if (checkLeaks) {
|
| - // COV_NF_START
|
| - // We don't have leak checking on by default, so this won't be hit.
|
| - fprintf(stderr, "Leak Checking Enabled\n");
|
| - fflush(stderr);
|
| - int ret = atexit(&_GTMRunLeaks);
|
| - _GTMDevAssert(ret == 0,
|
| - @"Unable to install _GTMRunLeaks as an atexit handler (%d)",
|
| - errno);
|
| - // COV_NF_END
|
| - }
|
| - }
|
| -}
|
| -
|
| -#endif // !GTM_IPHONE_DEVICE
|
|
|