   /// - returns: A matching handler factory or `nil` if not matched.
   func handler(for url: URLConvertible, context: Any?) -> URLOpenHandler?
 
+  /// Pushes a matching view controller to the navigation controller stack.
+  ///
+  /// - note: It is not a good idea to use this method directly because this method requires all
+  ///         parameters. This method eventually gets called when pushing a view controller with
+  ///         an URL, so it's recommended to implement this method only for mocking.
   @discardableResult
-  func push(_ url: URLConvertible, context: Any?, from: UINavigationControllerType?, animated: Bool) -> UIViewController?
+  func pushURL(_ url: URLConvertible, context: Any?, from: UINavigationControllerType?, animated: Bool) -> UIViewController?
 
+  /// Pushes the view controller to the navigation controller stack.
+  ///
+  /// - note: It is not a good idea to use this method directly because this method requires all
+  ///         parameters. This method eventually gets called when pushing a view controller, so
+  ///         it's recommended to implement this method only for mocking.
   @discardableResult
-  func push(_ viewController: UIViewController, from: UINavigationControllerType?, animated: Bool) -> UIViewController?
+  func pushViewController(_ viewController: UIViewController, from: UINavigationControllerType?, animated: Bool) -> UIViewController?
 
+  /// Presents a matching view controller.
+  ///
+  /// - note: It is not a good idea to use this method directly because this method requires all
+  ///         parameters. This method eventually gets called when presenting a view controller with
+  ///         an URL, so it's recommended to implement this method only for mocking.
   @discardableResult
-  func present(_ url: URLConvertible, context: Any?, wrap: UINavigationController.Type?, from: UIViewControllerType?, animated: Bool, completion: (() -> Void)?) -> UIViewController?
+  func presentURL(_ url: URLConvertible, context: Any?, wrap: UINavigationController.Type?, from: UIViewControllerType?, animated: Bool, completion: (() -> Void)?) -> UIViewController?
 
+  /// Presents the view controller.
+  ///
+  /// - note: It is not a good idea to use this method directly because this method requires all
+  ///         parameters. This method eventually gets called when presenting a view controller, so
+  ///         it's recommended to implement this method only for mocking.
   @discardableResult
-  func present(_ viewController: UIViewController, wrap: UINavigationController.Type?, from: UIViewControllerType?, animated: Bool, completion: (() -> Void)?) -> UIViewController?
+  func presentViewController(_ viewController: UIViewController, wrap: UINavigationController.Type?, from: UIViewControllerType?, animated: Bool, completion: (() -> Void)?) -> UIViewController?
 
   @discardableResult
   func open(_ url: URLConvertible, context: Any?) -> Bool
 }
+
+
+// MARK: - Protocol Requirements
 
 extension NavigatorType {
   public func viewController(for url: URLConvertible) -> UIViewController? {

    return handler()
  }
}
#endif

  }

  @discardableResult
  public func presentURL(_ url: URLConvertible, context: Any? = nil, wrap: UINavigationController.Type? = nil, from: UIViewControllerType? = nil, animated: Bool = true, completion: (() -> Void)? = nil) -> UIViewController? {
    guard let viewController = self.viewController(for: url, context: context) else { return nil }
    return self.presentViewController(viewController, wrap: wrap, from: from, animated: animated, completion: completion)
  }

  @discardableResult
  public func presentViewController(_ viewController: UIViewController, wrap: UINavigationController.Type?, from: UIViewControllerType?, animated: Bool, completion: (() -> Void)?) -> UIViewController? {
    guard let fromViewController = from ?? UIViewController.topMost else { return nil }

    let viewControllerToPresent: UIViewController
