blob: 7935ad197e0702a417cec53acdcce5e00b9fc4e9 [file] [log] [blame]
// Copyright 2017 The Chromium Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
#import "ios/web/test/fakes/crw_fake_back_forward_list.h"
#import <WebKit/WebKit.h>
#include "base/check.h"
#include "third_party/ocmock/OCMock/OCMock.h"
#if !defined(__has_feature) || !__has_feature(objc_arc)
#error "This file requires ARC support."
#endif
@interface CRWFakeBackForwardList (PrivateMethods)
- (NSArray*)mockSublistWithURLArray:(NSArray<NSString*>*)URLs;
@end
@implementation CRWFakeBackForwardList
@synthesize backList;
@synthesize forwardList;
@synthesize currentItem;
+ (WKBackForwardListItem*)itemWithURLString:(NSString*)URL {
id mock = OCMClassMock([WKBackForwardListItem class]);
OCMStub([mock URL]).andReturn([NSURL URLWithString:URL]);
return mock;
}
- (WKBackForwardListItem*)itemAtIndex:(NSInteger)index {
if (index == 0) {
return self.currentItem;
} else if (index > 0 && self.forwardList.count) {
return self.forwardList[index - 1];
} else if (self.backList.count) {
return self.backList[self.backList.count + index];
}
return nil;
}
- (void)setCurrentURL:(NSString*)currentItemURL {
[self setCurrentURL:currentItemURL backListURLs:nil forwardListURLs:nil];
}
- (void)setCurrentURL:(NSString*)currentItemURL
backListURLs:(nullable NSArray<NSString*>*)backListURLs
forwardListURLs:(nullable NSArray<NSString*>*)forwardListURLs {
self.currentItem = [CRWFakeBackForwardList itemWithURLString:currentItemURL];
self.backList = [self mockSublistWithURLArray:backListURLs];
self.forwardList = [self mockSublistWithURLArray:forwardListURLs];
}
- (void)moveCurrentToIndex:(NSUInteger)index {
NSMutableArray* logicalList = [[NSMutableArray alloc] init];
if (self.backList)
[logicalList addObjectsFromArray:self.backList];
if (self.currentItem)
[logicalList addObject:self.currentItem];
if (self.forwardList)
[logicalList addObjectsFromArray:self.forwardList];
NSUInteger count = logicalList.count;
CHECK(index < count);
self.currentItem = logicalList[index];
if (index == 0) {
self.backList = nil;
} else {
NSRange range = NSMakeRange(0, index);
self.backList = [logicalList subarrayWithRange:range];
}
if (index + 1 == count) {
self.forwardList = nil;
} else {
NSRange range = NSMakeRange(index + 1, count - index - 1);
self.forwardList = [logicalList subarrayWithRange:range];
}
}
- (NSArray*)mockSublistWithURLArray:(NSArray<NSString*>*)URLs {
NSMutableArray* array = [NSMutableArray arrayWithCapacity:URLs.count];
for (NSString* URL : URLs) {
[array addObject:[CRWFakeBackForwardList itemWithURLString:URL]];
}
return [NSArray arrayWithArray:array];
}
- (WKBackForwardListItem*)backItem {
return self.backList.lastObject;
}
- (WKBackForwardListItem*)forwardItem {
return self.forwardList.firstObject;
}
@end