| // Copyright 2023 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/chrome/test/fakes/fake_ui_navigation_controller.h" |
| |
| @implementation FakeUINavigationController { |
| // View controller presented using |
| // `presentViewController:animated:completion:` |
| UIViewController* _presentedViewController; |
| // View controllers pushed using `pushViewController:animated:completion:` or |
| // set using `setViewControllers:animated:` |
| NSMutableArray<UIViewController*>* _viewControllers; |
| } |
| |
| - (instancetype)init { |
| self = [super init]; |
| if (self) { |
| _viewControllers = [NSMutableArray array]; |
| } |
| return self; |
| } |
| |
| #pragma mark - UIViewController |
| |
| - (void)presentViewController:(UIViewController*)viewControllerToPresent |
| animated:(BOOL)flag |
| completion:(void (^)())completion { |
| _presentedViewController = viewControllerToPresent; |
| } |
| |
| - (void)dismissViewControllerAnimated:(BOOL)flag |
| completion:(void (^)())completion { |
| _presentedViewController = nil; |
| } |
| |
| - (UIViewController*)presentedViewController { |
| return _presentedViewController; |
| } |
| |
| #pragma mark - UINavigationController |
| |
| - (void)pushViewController:(UIViewController*)viewController |
| animated:(BOOL)animated { |
| [_viewControllers addObject:viewController]; |
| } |
| |
| - (UIViewController*)popViewControllerAnimated:(BOOL)animated { |
| UIViewController* lastObject = _viewControllers.lastObject; |
| if (lastObject) { |
| [_viewControllers removeLastObject]; |
| } |
| return lastObject; |
| } |
| |
| - (NSArray<UIViewController*>*)popToViewController: |
| (UIViewController*)viewController |
| animated:(BOOL)animated { |
| NSMutableArray<UIViewController*>* popped = [NSMutableArray array]; |
| while (self.topViewController && self.topViewController != viewController) { |
| [popped addObject:[self popViewControllerAnimated:animated]]; |
| } |
| return popped; |
| } |
| |
| - (NSArray<UIViewController*>*)popToRootViewControllerAnimated:(BOOL)animated { |
| return [self popToViewController:self.viewControllers.firstObject |
| animated:animated]; |
| } |
| |
| - (UIViewController*)topViewController { |
| return _viewControllers.lastObject; |
| } |
| |
| - (UIViewController*)visibleViewController { |
| if (self.presentedViewController) { |
| return self.presentedViewController; |
| } else { |
| return self.topViewController; |
| } |
| } |
| |
| - (NSArray<UIViewController*>*)viewControllers { |
| return _viewControllers; |
| } |
| |
| - (void)setViewControllers:(NSArray<UIViewController*>*)viewControllers |
| animated:(BOOL)animated { |
| _viewControllers = [NSMutableArray arrayWithArray:viewControllers]; |
| } |
| |
| @end |