 
   var url: URLConvertible?
 
-  convenience required init?(url: URLConvertible, values: [String: Any], userInfo: [AnyHashable: Any]?) {
+  convenience required init?(navigation: Navigation) {
     self.init()
-    self.url = url
+    self.url = navigation.url
   }
 
 }

private class UserViewController: UIViewController, URLNavigable {

  var userID: Int?
  var userInfo: [AnyHashable: Any]?

  convenience required init?(url: URLConvertible, values: [String: Any], userInfo: [AnyHashable: Any]?) {
    guard let id = values["id"] as? Int else {
      return nil
    }
    self.init()
    self.userID = id
    self.userInfo = userInfo
  }

}

    XCTAssertEqual(navigationController.viewControllers.count, 2)
  }

  func testPushURL_context() {
    self.navigator.map("myapp://user/<int:id>", UserViewController.self)
    let navigationController = UINavigationController(rootViewController: UIViewController())
    let passedValue = "abcde"
    let passedObject = NSObject()
    let context: [AnyHashable: Any] = ["info": passedValue, "object": passedObject]
    let viewController = self.navigator.push("myapp://user/1", context: context, from: navigationController, animated: false) as! UserViewController
    XCTAssertNotNil(viewController)
    XCTAssertEqual(navigationController.viewControllers.count, 2)
    XCTAssertNotNil(viewController.navigationContext)
    let getedValue = viewController.navigationContext as! [String: Any]
    XCTAssertEqual(getedValue["info"] as! String, passedValue)
    XCTAssertEqual(getedValue["object"] as! NSObject, passedObject)
  }
