From 6033c1db31ec44f23114ad30360684b48d788068 Mon Sep 17 00:00:00 2001 From: Vadym Markov Date: Tue, 22 Dec 2015 14:05:18 +0100 Subject: [PATCH 1/6] Add one more route --- Tests/TestCompass.swift | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/Tests/TestCompass.swift b/Tests/TestCompass.swift index 3f63f22..c6b30ce 100644 --- a/Tests/TestCompass.swift +++ b/Tests/TestCompass.swift @@ -6,7 +6,7 @@ class TestCompass: XCTestCase { override func setUp() { Compass.scheme = "compassTests" - Compass.routes = ["profile:{user}", "login", "callback"] + Compass.routes = ["profile:{user}", "login", "callback", "user:list:{userId}:{kind}"] } func testScheme() { @@ -15,7 +15,7 @@ class TestCompass: XCTestCase { func testRoutes() { XCTAssert(!Compass.routes.isEmpty) - XCTAssert(Compass.routes.count == 3) + XCTAssert(Compass.routes.count == 4) XCTAssertEqual(Compass.routes[0], "profile:{user}") XCTAssertEqual(Compass.routes[1], "login") } From c08f125f804a517591cad8aec0776103de5d802a Mon Sep 17 00:00:00 2001 From: Vadym Markov Date: Tue, 22 Dec 2015 14:16:57 +0100 Subject: [PATCH 2/6] Add expectations --- Tests/TestCompass.swift | 45 ++++++++++++++++++++++++++++++++++++++++- 1 file changed, 44 insertions(+), 1 deletion(-) diff --git a/Tests/TestCompass.swift b/Tests/TestCompass.swift index c6b30ce..c91f6ea 100644 --- a/Tests/TestCompass.swift +++ b/Tests/TestCompass.swift @@ -21,48 +21,91 @@ class TestCompass: XCTestCase { } func testParseArguments() { + let expectation = self.expectationWithDescription("Parse arguments") let url = NSURL(string: "compassTests://profile:testUser")! + Compass.parse(url) { route, arguments in XCTAssertEqual("profile:{user}", route) - XCTAssertEqual(arguments["user"], "testUser") + XCTAssertEqual(arguments["user"], "testUdssser") + + expectation.fulfill() + } + + self.waitForExpectationsWithTimeout(4.0, handler:nil) + } + + func testParseMultipleArguments() { + let expectation = self.expectationWithDescription("Parse multiple arguments") + let url = NSURL(string: "compassTests://user:list:1:admin")! + + Compass.parse(url) { route, arguments in + XCTAssertEqual("user:list:{userId}:{kind}", route) + XCTAssertEqual(arguments["userId"], "1") + XCTAssertEqual(arguments["kind"], "admin") + + expectation.fulfill() } + + self.waitForExpectationsWithTimeout(4.0, handler:nil) } func testParseOptionalArguments() { + let expectation = self.expectationWithDescription("Parse optional arguments") let url = NSURL(string: "compassTests://profile")! + Compass.parse(url) { route, arguments in XCTAssertEqual("profile:{user}", route) XCTAssert(arguments.isEmpty) + + expectation.fulfill() } + + self.waitForExpectationsWithTimeout(4.0, handler:nil) } func testParseWithoutArguments() { + let expectation = self.expectationWithDescription("Parse without arguments") let url = NSURL(string: "compassTests://login")! + Compass.parse(url) { route, arguments in XCTAssertEqual("login", route) XCTAssert(arguments.isEmpty) + + expectation.fulfill() } + + self.waitForExpectationsWithTimeout(4.0, handler:nil) } func testParseRegularURLWithFragments() { + let expectation = self.expectationWithDescription("Parse URL with fragments") let url = NSURL(string: "compassTests://callback/#access_token=IjvcgrkQk1p7TyJxKa26rzM1wBMFZW6XoHK4t5Gkt1xQLTN8l7ppR0H3EZXpoP0uLAN49oCDqTHsvnEV&token_type=Bearer&expires_in=3600")! + Compass.parse(url) { route, arguments in XCTAssertEqual(route, "callback") XCTAssertEqual(arguments.count, 3) XCTAssertEqual(arguments["access_token"], "IjvcgrkQk1p7TyJxKa26rzM1wBMFZW6XoHK4t5Gkt1xQLTN8l7ppR0H3EZXpoP0uLAN49oCDqTHsvnEV") XCTAssertEqual(arguments["expires_in"], "3600") XCTAssertEqual(arguments["token_type"], "Bearer") + + expectation.fulfill() } + + self.waitForExpectationsWithTimeout(4.0, handler:nil) } func testParseRegularURLWithQuery() { + let expectation = self.expectationWithDescription("Parse URL with query") let url = NSURL(string: "compassTests://callback/?access_token=Yo0OMrVZbRWNmgA6BT99hyuTUTNRGvqEEAQyeN1eslclzhFD0M8AidB4Z7Vs2NU8WoSNW0vYb961O38l&token_type=Bearer&expires_in=3600")! + Compass.parse(url) { route, arguments in XCTAssertEqual(route, "callback") XCTAssertEqual(arguments.count, 3) XCTAssertEqual(arguments["access_token"], "Yo0OMrVZbRWNmgA6BT99hyuTUTNRGvqEEAQyeN1eslclzhFD0M8AidB4Z7Vs2NU8WoSNW0vYb961O38l") XCTAssertEqual(arguments["expires_in"], "3600") XCTAssertEqual(arguments["token_type"], "Bearer") + + expectation.fulfill() } } } From f961c9dd3405931b35951b152bab4f523fbd1809 Mon Sep 17 00:00:00 2001 From: Vadym Markov Date: Tue, 22 Dec 2015 14:17:56 +0100 Subject: [PATCH 3/6] Fix condition --- Source/Compass.swift | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Source/Compass.swift b/Source/Compass.swift index 716dc76..6632340 100644 --- a/Source/Compass.swift +++ b/Source/Compass.swift @@ -26,7 +26,7 @@ public struct Compass { .map(String.init)) .first else { continue } - if query.hasPrefix(prefix) && prefix.hasPrefix(query) { + if query.hasPrefix(prefix) || prefix.hasPrefix(query) { let queryString = query.stringByReplacingOccurrencesOfString(prefix, withString: "") let queryArguments = splitString(queryString, delimiter: ":") let routeArguments = splitString(route, delimiter: ":").filter { $0.containsString("{") } From 4f56c22a85d92580cec256f1bcbbf6c7e949c97d Mon Sep 17 00:00:00 2001 From: Vadym Markov Date: Tue, 22 Dec 2015 14:18:23 +0100 Subject: [PATCH 4/6] Fix assert --- Tests/TestCompass.swift | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/Tests/TestCompass.swift b/Tests/TestCompass.swift index c91f6ea..17bf0e3 100644 --- a/Tests/TestCompass.swift +++ b/Tests/TestCompass.swift @@ -26,8 +26,8 @@ class TestCompass: XCTestCase { Compass.parse(url) { route, arguments in XCTAssertEqual("profile:{user}", route) - XCTAssertEqual(arguments["user"], "testUdssser") - + XCTAssertEqual(arguments["user"], "testUser") + expectation.fulfill() } From d871db59ed632ed4a3e7075758d2a40f146f1a4e Mon Sep 17 00:00:00 2001 From: Vadym Markov Date: Tue, 22 Dec 2015 14:39:44 +0100 Subject: [PATCH 5/6] Add missing expectation --- Tests/TestCompass.swift | 2 ++ 1 file changed, 2 insertions(+) diff --git a/Tests/TestCompass.swift b/Tests/TestCompass.swift index 17bf0e3..3ae50a9 100644 --- a/Tests/TestCompass.swift +++ b/Tests/TestCompass.swift @@ -107,5 +107,7 @@ class TestCompass: XCTestCase { expectation.fulfill() } + + self.waitForExpectationsWithTimeout(4.0, handler:nil) } } From 8bc09b333892b859c1e42301a29b59c4b7f3ddac Mon Sep 17 00:00:00 2001 From: Vadym Markov Date: Tue, 22 Dec 2015 14:40:20 +0100 Subject: [PATCH 6/6] Fix URL condition --- Source/Compass.swift | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Source/Compass.swift b/Source/Compass.swift index 6632340..cc30fc5 100644 --- a/Source/Compass.swift +++ b/Source/Compass.swift @@ -17,7 +17,7 @@ public struct Compass { var result = false let query = url.absoluteString.substringFromIndex(scheme.endIndex) - guard !query.containsString("/?") || !query.containsString("/#") + guard !(query.containsString("/?") || query.containsString("/#")) else { return parseAsURL(url, completion: completion) } for route in routes.sort({ $0 < $1 }) {