anchor.diff:          | Some ctx -> Assert.Equal(expected, getBody ctx)
       }
   
  -[<Fact>]
  -let ``subRoute: Normal nested route after subRoute`` () =
  -    let ctx = mockHttpContext Version40
  -    let app =
  -        GET >=> choose [
  -            route "/"    >=> text "Hello World"
  -            route "/foo" >=> text "bar"
  -            subRoute "/api" (
  -                choose [
  -                    route ""       >=> text "api root"
  -                    route "/admin" >=> text "admin"
  -                    route "/users" >=> text "users" ] )
  -            route "/api/test" >=> text "test"
  -            setStatusCode 404 >=> text "Not found" ]
  -
  -    ctx.Items.Returns (new Dictionary<obj,obj>() :> IDictionary<obj,obj>) |> ignore
  -    ctx.Request.Method.ReturnsForAnyArgs "GET" |> ignore
  -    ctx.Request.Path.ReturnsForAnyArgs (PathString("/api/users")) |> ignore
  -    ctx.Response.Body <- new MemoryStream()
  -    let expected = "users"
  -
  -    task {
  -        let! result = app next ctx
  -
  -        match result with
  -        | None     -> assertFailf "Result was expected to be %s" expected
  -        | Some ctx -> Assert.Equal(expected, getBody ctx)
  -    }
  -
  -[<Fact>]
  -let ``subRoute: Route after subRoute has same beginning of path`` () =
  -
  -    task {
  -        let ctx = mockHttpContext Version40
  -
  -        let app =
  -            GET >=> choose [
  -                route "/"    >=> text "Hello World"
  -                route "/foo" >=> text "bar"
  -                subRoute "/api" (
  -                    choose [
  -                        route ""       >=> text "api root"
  -                        route "/admin" >=> text "admin"
  -                        route "/users" >=> text "users" ] )
  -                route "/api/test" >=> text "test"
  -                setStatusCode 404 >=> text "Not found" ]
  -
  -        ctx.Items.Returns (new Dictionary<obj,obj>() :> IDictionary<obj,obj>) |> ignore
  -        ctx.Request.Method.ReturnsForAnyArgs "GET" |> ignore
  -        ctx.Request.Path.ReturnsForAnyArgs (PathString("/api/test")) |> ignore
  -        ctx.Response.Body <- new MemoryStream()
  -        let expected = "test"
  -
  -        let! result = app next ctx
  -
  -        match result with
  -        | None     -> assertFailf "Result was expected to be %s" expected
  -        | Some ctx -> Assert.Equal(expected, getBody ctx)
  -    }
  -
  -[<Fact>]
  -let ``subRoute: Nested sub routes`` () =
  -    let ctx = mockHttpContext Version40
  +let nestedSubRouteTest compatMode requestPath expected =
  +    let ctx = mockHttpContext compatMode
       let app =
           GET >=> choose [
               route "/"    >=> text "Hello World"
  
positive.code: 
      ctx.Items.Returns (new Dictionary<obj,obj>() :> IDictionary<obj,obj>) |> ignore
      ctx.Request.Method.ReturnsForAnyArgs "GET" |> ignore
      ctx.Request.Path.ReturnsForAnyArgs (PathString("/api/foo/bar/yadayada")) |> ignore
      ctx.Response.Body <- new MemoryStream()
      let expected = "yadayada"
  
      task {
          let! result = app next ctx
  
          match result with
          | None     -> assertFailf "Result was expected to be %s" expected
          | Some ctx -> Assert.Equal(expected, getBody ctx)
      }
  
  // ---------------------------------
  // subRoutef Tests
  
negative.code: // subRoute Tests
  // ---------------------------------
  
  let subRouteTest compatMode requestPath expected =
      let ctx = mockHttpContext compatMode
      let app =
          GET >=> choose [
              route "/"    >=> text "Hello World"
  