chromium/ios/web/test/fakes/crw_fake_back_forward_list.h

// Copyright 2017 The Chromium Authors
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.

#ifndef IOS_WEB_TEST_FAKES_CRW_FAKE_BACK_FORWARD_LIST_H_
#define IOS_WEB_TEST_FAKES_CRW_FAKE_BACK_FORWARD_LIST_H_

#import <Foundation/Foundation.h>

NS_ASSUME_NONNULL_BEGIN

@class WKBackForwardListItem;

// A CRWFakeBackForwardList can be used to stub out WKBackForwardList in tests.
@interface CRWFakeBackForwardList : NSObject

// Returns an OCMock of WKBackForwardListItem with the given URL.
+ (WKBackForwardListItem*)itemWithURLString:(NSString*)URL;

// WKBackForwardList interface
@property(nullable, nonatomic, copy) NSArray<WKBackForwardListItem*>* backList;
@property(nullable, nonatomic, copy)
    NSArray<WKBackForwardListItem*>* forwardList;
@property(nullable, nonatomic, strong) WKBackForwardListItem* currentItem;
@property(nullable, nonatomic, readonly, strong)
    WKBackForwardListItem* backItem;
@property(nullable, nonatomic, readonly, strong)
    WKBackForwardListItem* forwardItem;
- (nullable WKBackForwardListItem*)itemAtIndex:(NSInteger)index;

// Resets this instance to simulate a session with no back/forward history, and
// a single entry for `currentItemURL` if it is not nil. If `currentItemURL` is
// nil, the session is reset to empty.
- (void)setCurrentURL:(nullable NSString*)currentItemURL;

// Resets this instance to simulate a session with the current entry at
// `currentItemURL`, and back and forward history entries as specified in
// `backListURLs` and `forwardListURLs`.
- (void)setCurrentURL:(NSString*)currentItemURL
         backListURLs:(nullable NSArray<NSString*>*)backListURLs
      forwardListURLs:(nullable NSArray<NSString*>*)forwardListURLs;

// Simulates go-to-index operation on this instance. Shuffles the items in this
// instance such that currentItem is at position `index` of the logical list
// formed by backList + currentItem + forwardList. backList[0] has index 0.
// `index` must be in the range [0, # of items in this instance).
- (void)moveCurrentToIndex:(NSUInteger)index;

@end

NS_ASSUME_NONNULL_END

#endif  // IOS_WEB_TEST_FAKES_CRW_FAKE_BACK_FORWARD_LIST_H_