SwifterTestsHttpRouter.swift 3.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109
  1. //
  2. // SwifterTestsHttpRouter.swift
  3. // Swifter
  4. //
  5. // Copyright © 2016 Damian Kołakowski. All rights reserved.
  6. //
  7. import XCTest
  8. import Swifter
  9. class SwifterTestsHttpRouter: XCTestCase {
  10. func testHttpRouterSlashRoot() {
  11. let router = HttpRouter()
  12. router.register(nil, path: "/", handler: { r in
  13. return .ok(.html("OK"))
  14. })
  15. XCTAssert(router.route(nil, path: "/") != nil)
  16. }
  17. func testHttpRouterSimplePathSegments() {
  18. let router = HttpRouter()
  19. router.register(nil, path: "/a/b/c/d", handler: { r in
  20. return .ok(.html("OK"))
  21. })
  22. XCTAssert(router.route(nil, path: "/") == nil)
  23. XCTAssert(router.route(nil, path: "/a") == nil)
  24. XCTAssert(router.route(nil, path: "/a/b") == nil)
  25. XCTAssert(router.route(nil, path: "/a/b/c") == nil)
  26. XCTAssert(router.route(nil, path: "/a/b/c/d") != nil)
  27. }
  28. func testHttpRouterSinglePathSegmentWildcard() {
  29. let router = HttpRouter()
  30. router.register(nil, path: "/a/*/c/d", handler: { r in
  31. return .ok(.html("OK"))
  32. })
  33. XCTAssert(router.route(nil, path: "/") == nil)
  34. XCTAssert(router.route(nil, path: "/a") == nil)
  35. XCTAssert(router.route(nil, path: "/a/foo/c/d") != nil)
  36. XCTAssert(router.route(nil, path: "/a/b/c/d") != nil)
  37. XCTAssert(router.route(nil, path: "/a/b") == nil)
  38. XCTAssert(router.route(nil, path: "/a/b/foo/d") == nil)
  39. }
  40. func testHttpRouterVariables() {
  41. let router = HttpRouter()
  42. router.register(nil, path: "/a/:arg1/:arg2/b/c/d/:arg3", handler: { r in
  43. return .ok(.html("OK"))
  44. })
  45. XCTAssert(router.route(nil, path: "/") == nil)
  46. XCTAssert(router.route(nil, path: "/a") == nil)
  47. XCTAssert(router.route(nil, path: "/a/b/c/d") == nil)
  48. XCTAssert(router.route(nil, path: "/a/value1/value2/b/c/d/value3")?.0[":arg1"] == "value1")
  49. XCTAssert(router.route(nil, path: "/a/value1/value2/b/c/d/value3")?.0[":arg2"] == "value2")
  50. XCTAssert(router.route(nil, path: "/a/value1/value2/b/c/d/value3")?.0[":arg3"] == "value3")
  51. }
  52. func testHttpRouterMultiplePathSegmentWildcards() {
  53. let router = HttpRouter()
  54. router.register(nil, path: "/a/**/e/f/g", handler: { r in
  55. return .ok(.html("OK"))
  56. })
  57. XCTAssert(router.route(nil, path: "/") == nil)
  58. XCTAssert(router.route(nil, path: "/a") == nil)
  59. XCTAssert(router.route(nil, path: "/a/b/c/d/e/f/g") != nil)
  60. XCTAssert(router.route(nil, path: "/a/e/f/g") == nil)
  61. }
  62. func testHttpRouterEmptyTail() {
  63. let router = HttpRouter()
  64. router.register(nil, path: "/a/b/", handler: { r in
  65. return .ok(.html("OK"))
  66. })
  67. router.register(nil, path: "/a/b/:var", handler: { r in
  68. return .ok(.html("OK"))
  69. })
  70. XCTAssert(router.route(nil, path: "/") == nil)
  71. XCTAssert(router.route(nil, path: "/a") == nil)
  72. XCTAssert(router.route(nil, path: "/a/b/") != nil)
  73. XCTAssert(router.route(nil, path: "/a/e/f/g") == nil)
  74. XCTAssert(router.route(nil, path: "/a/b/value1")?.0[":var"] == "value1")
  75. XCTAssert(router.route(nil, path: "/a/b/")?.0[":var"] == "")
  76. }
  77. }