1 // Copyright 2021-present 650 Industries. All rights reserved. 2 3 import XCTest 4 5 @testable import EXDevLauncher 6 7 class EXDevLauncherURLHelperTests: XCTestCase { 8 9 let encodedUrlString = "http%3A%2F%2Flocalhost%3A8081" 10 testIsDevLauncherURLnull11 func testIsDevLauncherURL() { 12 let defaultUrl = "scheme://expo-development-client" 13 XCTAssertTrue(EXDevLauncherURLHelper.isDevLauncherURL(URL(string: defaultUrl))) 14 XCTAssertTrue(EXDevLauncherURLHelper.isDevLauncherURL(URL(string: defaultUrl + "?url=123"))) 15 XCTAssertTrue(EXDevLauncherURLHelper.isDevLauncherURL(URL(string: "scheme://expo-development-client/?url=http%3A%2F%2Flocalhost%3A8081"))) 16 XCTAssertFalse(EXDevLauncherURLHelper.isDevLauncherURL(URL(string: "scheme://not-expo-development-client"))) 17 } 18 testReplaceEXPSchemenull19 func testReplaceEXPScheme() { 20 let actual1 = EXDevLauncherURLHelper.replaceEXPScheme(URL(string: "exp://expo-development-client/?url=http%3A%2F%2Flocalhost%3A8081")!, to: "scheme") 21 XCTAssertEqual(URL(string: "scheme://expo-development-client/?url=http%3A%2F%2Flocalhost%3A8081"), actual1) 22 23 let actual2 = EXDevLauncherURLHelper.replaceEXPScheme(URL(string: "http://expo-development-client/?url=http%3A%2F%2Flocalhost%3A8081")!, to: "scheme") 24 XCTAssertEqual(URL(string: "http://expo-development-client/?url=http%3A%2F%2Flocalhost%3A8081"), actual2) 25 26 // should not crash if provided URL does not include scheme 27 let actual3 = EXDevLauncherURLHelper.replaceEXPScheme(URL(string: "192.168.0.12:8081")!, to: "scheme") 28 XCTAssertEqual(URL(string: "192.168.0.12:8081"), actual3) 29 } 30 testDevLauncherUrlsnull31 func testDevLauncherUrls() { 32 // dev-client scheme with valid url param -> loadApp with specified url param 33 expectDevLauncherUrlToEqual(input:"scheme://expo-development-client/?url=http%3A%2F%2Flocalhost%3A8081%2Findex.bundle%3Fplatform%3Dios%26dev%3Dtrue", 34 expected:"http://localhost:8081/index.bundle?platform=ios&dev=true") 35 36 // non-dev-client scheme with valid url param -> defer loading to loaded app 37 expectDevLauncherUrlToEqual(input: "scheme://not-dev-client/?url=\(encodedUrlString)", 38 expected: "scheme://not-dev-client/?url=\(encodedUrlString)") 39 40 } 41 testDevLauncherUrlQueryParamsnull42 func testDevLauncherUrlQueryParams() { 43 let url = "scheme://expo-development-client/?url=http%3A%2F%2Flocalhost%3A8081&updateMessage=123" 44 let devLauncherUrl = EXDevLauncherUrl(URL(string:url)!) 45 let queryParams = devLauncherUrl.queryParams 46 47 XCTAssertEqual(queryParams["updateMessage"], "123") 48 XCTAssertEqual(queryParams["url"], "http://localhost:8081") 49 } 50 51 // HELPER expectDevLauncherUrlToEqualnull52 func expectDevLauncherUrlToEqual(input: String, expected: String) { 53 let devLauncherUrl = EXDevLauncherUrl(URL(string:input)!) 54 XCTAssertEqual(devLauncherUrl.url.absoluteString, expected) 55 } 56 } 57