         let postHelloWorld = try! Request(method: .POST, uri: "/hello/world")
         let heyAustralia = try! Request(method: .GET, uri: "/hey/australia")
 
-        XCTAssert(try router.respond(helloWorld).bodyString == "hello world - not!")
-        XCTAssert(try router.respond(helloAmerica).bodyString == "hello america")
-        XCTAssert(try router.respond(postHelloWorld).bodyString == "hello world")
-        XCTAssert(try router.respond(heyAustralia).bodyString == "hey australia")
+        XCTAssert(body(helloWorld) == "hello world - not!")
+        XCTAssert(body(helloAmerica) == "hello america")
+        XCTAssert(body(postHelloWorld) == "hello world")
+        XCTAssert(body(heyAustralia) == "hey australia")
     }
 }

        let getRequest2 = try! Request(method: .GET, uri: "/hello/world123")
        let postRequest2 = try! Request(method: .POST, uri: "/hello/world123")

        XCTAssert(try router.respond(getRequest1).bodyString == "get request")
        XCTAssert(try router.respond(postRequest1).bodyString == "post request")

        XCTAssert(try router.respond(getRequest2).status == .NotFound)
        XCTAssert(try router.respond(postRequest2).status != .NotFound)
    }

    func testTrieRouteMatcherParsesPathParameters() {
        let router = Router(matcher: TrieRouteMatcher.self) { route in
            route.get("/hello/world") {_ in return Response(body: "hello world - not!") }
            route.get("/hello/:location") { return Response(body: "hello \($0.pathParameters["location"]!)") }
            route.post("/hello/:location") { return Response(body: "hello \($0.pathParameters["location"]!)") }
            route.get("/:greeting/:location") { return Response(body: "\($0.pathParameters["greeting"]!) \($0.pathParameters["location"]!)") }
        }

        let helloWorld = try! Request(method: .GET, uri: "/hello/world")

        XCTAssert(route("/servers/json/logs", shouldMatch: true))
    }

    func testMatcherWithTrailingSlashes(matcher: RouteMatcherType.Type) {
        let responder = Responder { request in
            return Response(status: .OK)
        }

        let routes = [
            Route(methods: [.GET], path: "/hello/world", middleware: [], responder: responder)
        ]

        let matcher = matcher.init(routes: routes)

        let request1 = try! Request(method: .GET, uri: "/hello/world")
        let request2 = try! Request(method: .GET, uri: "/hello/world/")

        XCTAssert(matcher.match(request1) != nil)
        XCTAssert(matcher.match(request2) != nil)
    }

    func testMatcherMatchesMethods(matcher: RouteMatcherType.Type) {

        let routes = [
            Route(methods: [.GET], path: "/hello/world", middleware: [], responder: Responder { _ in return Response(body: "get request") }),
            Route(methods: [.POST], path: "/hello/world", middleware: [], responder: Responder { _ in return Response(body: "post request") }),
            Route(methods: [.POST], path: "/hello/world123", middleware: [], responder: Responder { _ in return Response(body: "post request 2") })
        ]

        let matcher = matcher.init(routes: routes)

        let getRequest1 = try! Request(method: .GET, uri: "/hello/world")
        let postRequest1 = try! Request(method: .POST, uri: "/hello/world")
