// Copyright 2019 The Chromium Authors
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
#import "ios/testing/earl_grey/base_eg_test_helper_impl.h"
#import "base/debug/stack_trace.h"
#import "base/logging.h"
#import "ios/testing/earl_grey/earl_grey_test.h"
@implementation BaseEGTestHelperImpl {
// Used to raise EarlGrey exception with specific file name and line number.
EarlGreyImpl* _impl;
}
+ (instancetype)invokedFromFile:(NSString*)fileName lineNumber:(int)lineNumber {
EarlGreyImpl* impl = [EarlGreyImpl invokedFromFile:fileName
lineNumber:lineNumber];
return [[[self class] alloc] initWithImpl:impl];
}
- (instancetype)initWithImpl:(EarlGreyImpl*)impl {
self = [super init];
if (self) {
_impl = impl;
}
return self;
}
- (void)failWithError:(NSError*)error expression:(NSString*)expression {
if (!error)
return;
NSString* name = [NSString stringWithFormat:@"%@ helper error", [self class]];
NSString* reason =
[NSString stringWithFormat:@"%@ expression returned error: '%@'",
expression, error.localizedDescription];
[self failWithExceptionName:name reason:reason];
}
#pragma mark - Private
- (void)fail:(BOOL)fail
expression:(NSString*)expression
description:(NSString*)description {
if (!fail)
return;
DLOG(WARNING) << "\n" << base::debug::StackTrace(/*count=*/15).ToString();
NSString* reason =
[NSString stringWithFormat:@"%@ is false: %@", expression, description];
[self failWithExceptionName:@"expression error" reason:reason];
}
- (EarlGreyImpl*)earlGrey {
return _impl;
}
#pragma mark - Private
- (void)failWithExceptionName:(NSString*)name reason:(NSString*)reason {
GREYFrameworkException* exception =
[GREYFrameworkException exceptionWithName:name reason:reason];
[_impl handleException:exception details:reason];
}
@end