Skip to content

Commit 3acdb1c

Browse files
authored
Move HTTPRequest.url to the main library (#79)
Resolves #76
1 parent 9c9d5ea commit 3acdb1c

File tree

4 files changed

+133
-91
lines changed

4 files changed

+133
-91
lines changed

Sources/HTTPTypesFoundation/HTTPRequest+URL.swift renamed to Sources/HTTPTypes/HTTPRequest+URL.swift

Lines changed: 6 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@
22
//
33
// This source file is part of the Swift open source project
44
//
5-
// Copyright (c) 2023 Apple Inc. and the Swift project authors
5+
// Copyright (c) 2023-2025 Apple Inc. and the Swift project authors
66
// Licensed under Apache License v2.0
77
//
88
// See LICENSE.txt for license information
@@ -12,10 +12,14 @@
1212
//
1313
//===----------------------------------------------------------------------===//
1414

15+
#if canImport(FoundationEssentials)
16+
import FoundationEssentials
17+
#else
1518
import Foundation
16-
import HTTPTypes
19+
#endif
1720

1821
#if canImport(CoreFoundation)
22+
import Foundation
1923
import CoreFoundation
2024
#endif // canImport(CoreFoundation)
2125

Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,15 @@
1+
//===----------------------------------------------------------------------===//
2+
//
3+
// This source file is part of the Swift open source project
4+
//
5+
// Copyright (c) 2025 Apple Inc. and the Swift project authors
6+
// Licensed under Apache License v2.0
7+
//
8+
// See LICENSE.txt for license information
9+
// See CONTRIBUTORS.txt for the list of Swift project authors
10+
//
11+
// SPDX-License-Identifier: Apache-2.0
12+
//
13+
//===----------------------------------------------------------------------===//
14+
15+
@_exported import HTTPTypes

Tests/HTTPTypesFoundationTests/HTTPTypesFoundationTests.swift

Lines changed: 1 addition & 89 deletions
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@
22
//
33
// This source file is part of the Swift open source project
44
//
5-
// Copyright (c) 2023 Apple Inc. and the Swift project authors
5+
// Copyright (c) 2023-2025 Apple Inc. and the Swift project authors
66
// Licensed under Apache License v2.0
77
//
88
// See LICENSE.txt for license information
@@ -12,7 +12,6 @@
1212
//
1313
//===----------------------------------------------------------------------===//
1414

15-
import HTTPTypes
1615
import HTTPTypesFoundation
1716
import XCTest
1817

@@ -21,93 +20,6 @@ import FoundationNetworking
2120
#endif
2221

2322
final class HTTPTypesFoundationTests: XCTestCase {
24-
func testRequestURLParsing() {
25-
let request1 = HTTPRequest(url: URL(string: "h://a")!)
26-
XCTAssertEqual(request1.scheme, "h")
27-
XCTAssertEqual(request1.authority, "a")
28-
XCTAssertEqual(request1.path, "/")
29-
XCTAssertEqual(request1.url?.absoluteString, "h://a/")
30-
31-
let request2 = HTTPRequest(url: URL(string: "h://a:4?")!)
32-
XCTAssertEqual(request2.scheme, "h")
33-
XCTAssertEqual(request2.authority, "a:4")
34-
XCTAssertEqual(request2.path, "/?")
35-
XCTAssertEqual(request2.url?.absoluteString, "h://a:4/?")
36-
37-
let request3 = HTTPRequest(url: URL(string: "h://a/")!)
38-
XCTAssertEqual(request3.scheme, "h")
39-
XCTAssertEqual(request3.authority, "a")
40-
XCTAssertEqual(request3.path, "/")
41-
XCTAssertEqual(request3.url?.absoluteString, "h://a/")
42-
43-
let request4 = HTTPRequest(url: URL(string: "h://a/p?q#1")!)
44-
XCTAssertEqual(request4.scheme, "h")
45-
XCTAssertEqual(request4.authority, "a")
46-
XCTAssertEqual(request4.path, "/p?q")
47-
XCTAssertEqual(request4.url?.absoluteString, "h://a/p?q")
48-
49-
let request5 = HTTPRequest(url: URL(string: "data:,Hello%2C%20World%21")!)
50-
XCTAssertEqual(request5.scheme, "data")
51-
XCTAssertNil(request5.authority)
52-
#if canImport(CoreFoundation)
53-
XCTAssertEqual(request5.path, "/")
54-
#else // canImport(CoreFoundation)
55-
XCTAssertEqual(request5.path, ",Hello%2C%20World%21")
56-
#endif // canImport(CoreFoundation)
57-
XCTAssertNil(request5.url)
58-
}
59-
60-
func testRequestURLAuthorityParsing() {
61-
let request1 = HTTPRequest(url: URL(string: "https://[::1]")!)
62-
XCTAssertEqual(request1.scheme, "https")
63-
XCTAssertEqual(request1.authority, "[::1]")
64-
XCTAssertEqual(request1.path, "/")
65-
XCTAssertEqual(request1.url?.absoluteString, "https://[::1]/")
66-
67-
let request2 = HTTPRequest(url: URL(string: "https://[::1]:443")!)
68-
XCTAssertEqual(request2.scheme, "https")
69-
XCTAssertEqual(request2.authority, "[::1]:443")
70-
XCTAssertEqual(request2.path, "/")
71-
XCTAssertEqual(request2.url?.absoluteString, "https://[::1]:443/")
72-
73-
let request3 = HTTPRequest(url: URL(string: "https://127.0.0.1")!)
74-
XCTAssertEqual(request3.scheme, "https")
75-
XCTAssertEqual(request3.authority, "127.0.0.1")
76-
XCTAssertEqual(request3.path, "/")
77-
XCTAssertEqual(request3.url?.absoluteString, "https://127.0.0.1/")
78-
79-
let request4 = HTTPRequest(url: URL(string: "https://127.0.0.1:443")!)
80-
XCTAssertEqual(request4.scheme, "https")
81-
XCTAssertEqual(request4.authority, "127.0.0.1:443")
82-
XCTAssertEqual(request4.path, "/")
83-
XCTAssertEqual(request4.url?.absoluteString, "https://127.0.0.1:443/")
84-
}
85-
86-
func testNilRequestURL() {
87-
let request1 = HTTPRequest(
88-
method: .connect,
89-
scheme: "https",
90-
authority: "www.example.com:443",
91-
path: "www.example.com:443"
92-
)
93-
XCTAssertNil(request1.url)
94-
95-
var request2 = HTTPRequest(
96-
method: .connect,
97-
scheme: "https",
98-
authority: "www.example.com",
99-
path: "/"
100-
)
101-
request2.extendedConnectProtocol = "websocket"
102-
XCTAssertEqual(request2.url?.absoluteString, "https://www.example.com/")
103-
104-
let request3 = HTTPRequest(method: .options, scheme: "https", authority: "www.example.com", path: "*")
105-
XCTAssertNil(request3.url)
106-
107-
let request4 = HTTPRequest(method: .options, scheme: "https", authority: "www.example.com", path: "/")
108-
XCTAssertEqual(request4.url?.absoluteString, "https://www.example.com/")
109-
}
110-
11123
func testRequestToFoundation() throws {
11224
let request = HTTPRequest(
11325
method: .get,
Lines changed: 111 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,111 @@
1+
//===----------------------------------------------------------------------===//
2+
//
3+
// This source file is part of the Swift open source project
4+
//
5+
// Copyright (c) 2025 Apple Inc. and the Swift project authors
6+
// Licensed under Apache License v2.0
7+
//
8+
// See LICENSE.txt for license information
9+
// See CONTRIBUTORS.txt for the list of Swift project authors
10+
//
11+
// SPDX-License-Identifier: Apache-2.0
12+
//
13+
//===----------------------------------------------------------------------===//
14+
15+
import HTTPTypes
16+
import XCTest
17+
18+
#if canImport(FoundationEssentials)
19+
import FoundationEssentials
20+
#else
21+
import Foundation
22+
#endif
23+
24+
final class HTTPTypesURLTests: XCTestCase {
25+
func testRequestURLParsing() {
26+
let request1 = HTTPRequest(url: URL(string: "h://a")!)
27+
XCTAssertEqual(request1.scheme, "h")
28+
XCTAssertEqual(request1.authority, "a")
29+
XCTAssertEqual(request1.path, "/")
30+
XCTAssertEqual(request1.url?.absoluteString, "h://a/")
31+
32+
let request2 = HTTPRequest(url: URL(string: "h://a:4?")!)
33+
XCTAssertEqual(request2.scheme, "h")
34+
XCTAssertEqual(request2.authority, "a:4")
35+
XCTAssertEqual(request2.path, "/?")
36+
XCTAssertEqual(request2.url?.absoluteString, "h://a:4/?")
37+
38+
let request3 = HTTPRequest(url: URL(string: "h://a/")!)
39+
XCTAssertEqual(request3.scheme, "h")
40+
XCTAssertEqual(request3.authority, "a")
41+
XCTAssertEqual(request3.path, "/")
42+
XCTAssertEqual(request3.url?.absoluteString, "h://a/")
43+
44+
let request4 = HTTPRequest(url: URL(string: "h://a/p?q#1")!)
45+
XCTAssertEqual(request4.scheme, "h")
46+
XCTAssertEqual(request4.authority, "a")
47+
XCTAssertEqual(request4.path, "/p?q")
48+
XCTAssertEqual(request4.url?.absoluteString, "h://a/p?q")
49+
50+
let request5 = HTTPRequest(url: URL(string: "data:,Hello%2C%20World%21")!)
51+
XCTAssertEqual(request5.scheme, "data")
52+
XCTAssertNil(request5.authority)
53+
#if canImport(CoreFoundation)
54+
XCTAssertEqual(request5.path, "/")
55+
#else // canImport(CoreFoundation)
56+
XCTAssertEqual(request5.path, ",Hello%2C%20World%21")
57+
#endif // canImport(CoreFoundation)
58+
XCTAssertNil(request5.url)
59+
}
60+
61+
func testRequestURLAuthorityParsing() {
62+
let request1 = HTTPRequest(url: URL(string: "https://[::1]")!)
63+
XCTAssertEqual(request1.scheme, "https")
64+
XCTAssertEqual(request1.authority, "[::1]")
65+
XCTAssertEqual(request1.path, "/")
66+
XCTAssertEqual(request1.url?.absoluteString, "https://[::1]/")
67+
68+
let request2 = HTTPRequest(url: URL(string: "https://[::1]:443")!)
69+
XCTAssertEqual(request2.scheme, "https")
70+
XCTAssertEqual(request2.authority, "[::1]:443")
71+
XCTAssertEqual(request2.path, "/")
72+
XCTAssertEqual(request2.url?.absoluteString, "https://[::1]:443/")
73+
74+
let request3 = HTTPRequest(url: URL(string: "https://127.0.0.1")!)
75+
XCTAssertEqual(request3.scheme, "https")
76+
XCTAssertEqual(request3.authority, "127.0.0.1")
77+
XCTAssertEqual(request3.path, "/")
78+
XCTAssertEqual(request3.url?.absoluteString, "https://127.0.0.1/")
79+
80+
let request4 = HTTPRequest(url: URL(string: "https://127.0.0.1:443")!)
81+
XCTAssertEqual(request4.scheme, "https")
82+
XCTAssertEqual(request4.authority, "127.0.0.1:443")
83+
XCTAssertEqual(request4.path, "/")
84+
XCTAssertEqual(request4.url?.absoluteString, "https://127.0.0.1:443/")
85+
}
86+
87+
func testNilRequestURL() {
88+
let request1 = HTTPRequest(
89+
method: .connect,
90+
scheme: "https",
91+
authority: "www.example.com:443",
92+
path: "www.example.com:443"
93+
)
94+
XCTAssertNil(request1.url)
95+
96+
var request2 = HTTPRequest(
97+
method: .connect,
98+
scheme: "https",
99+
authority: "www.example.com",
100+
path: "/"
101+
)
102+
request2.extendedConnectProtocol = "websocket"
103+
XCTAssertEqual(request2.url?.absoluteString, "https://www.example.com/")
104+
105+
let request3 = HTTPRequest(method: .options, scheme: "https", authority: "www.example.com", path: "*")
106+
XCTAssertNil(request3.url)
107+
108+
let request4 = HTTPRequest(method: .options, scheme: "https", authority: "www.example.com", path: "/")
109+
XCTAssertEqual(request4.url?.absoluteString, "https://www.example.com/")
110+
}
111+
}

0 commit comments

Comments
 (0)