mirror of
https://github.com/apple/swift-nio-extras.git
synced 2025-05-16 18:16:04 +08:00
Rename startsWithSameUnicodeScalars -> startsWithExactly, switch to comparing UTF8 bytes. (#104)
This commit is contained in:
parent
71c5df21bd
commit
f700f5b355
@ -17,15 +17,15 @@ import NIO
|
|||||||
import NIOHTTP1
|
import NIOHTTP1
|
||||||
|
|
||||||
extension StringProtocol {
|
extension StringProtocol {
|
||||||
/// Test if this `Collection` starts with the unicode scalars of `needle`.
|
/// Test if this string starts with the same unicode scalars as the given string, `prefix`.
|
||||||
///
|
///
|
||||||
/// - note: This will be faster than `String.startsWith` as no unicode normalisations are performed.
|
/// - note: This will be faster than `String.startsWith` as no unicode normalisations are performed.
|
||||||
///
|
///
|
||||||
/// - parameters:
|
/// - parameters:
|
||||||
/// - needle: The `Collection` of `Unicode.Scalar`s to match at the beginning of `self`
|
/// - prefix: The string to match at the beginning of `self`
|
||||||
/// - returns: If `self` started with the elements contained in `needle`.
|
/// - returns: Whether or not `self` starts with the same unicode scalars as `prefix`.
|
||||||
func startsWithSameUnicodeScalars<S: StringProtocol>(string needle: S) -> Bool {
|
func startsWithExactly<S: StringProtocol>(_ prefix: S) -> Bool {
|
||||||
return self.unicodeScalars.starts(with: needle.unicodeScalars)
|
return self.utf8.starts(with: prefix.utf8)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -155,11 +155,11 @@ public final class HTTPResponseCompressor: ChannelDuplexHandler, RemovableChanne
|
|||||||
var anyQValue: Float = -1
|
var anyQValue: Float = -1
|
||||||
|
|
||||||
for acceptHeader in acceptHeaders {
|
for acceptHeader in acceptHeaders {
|
||||||
if acceptHeader.startsWithSameUnicodeScalars(string: "gzip") || acceptHeader.startsWithSameUnicodeScalars(string: "x-gzip") {
|
if acceptHeader.startsWithExactly("gzip") || acceptHeader.startsWithExactly("x-gzip") {
|
||||||
gzipQValue = qValueFromHeader(acceptHeader)
|
gzipQValue = qValueFromHeader(acceptHeader)
|
||||||
} else if acceptHeader.startsWithSameUnicodeScalars(string: "deflate") {
|
} else if acceptHeader.startsWithExactly("deflate") {
|
||||||
deflateQValue = qValueFromHeader(acceptHeader)
|
deflateQValue = qValueFromHeader(acceptHeader)
|
||||||
} else if acceptHeader.startsWithSameUnicodeScalars(string: "*") {
|
} else if acceptHeader.startsWithExactly("*") {
|
||||||
anyQValue = qValueFromHeader(acceptHeader)
|
anyQValue = qValueFromHeader(acceptHeader)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -578,19 +578,19 @@ class HTTPResponseCompressorTest: XCTestCase {
|
|||||||
}
|
}
|
||||||
|
|
||||||
func testStartsWithSameUnicodeScalarsWorksOnEmptyStrings() throws {
|
func testStartsWithSameUnicodeScalarsWorksOnEmptyStrings() throws {
|
||||||
XCTAssertTrue("".startsWithSameUnicodeScalars(string: ""))
|
XCTAssertTrue("".startsWithExactly(""))
|
||||||
}
|
}
|
||||||
|
|
||||||
func testStartsWithSameUnicodeScalarsWorksOnLongerNeedleFalse() throws {
|
func testStartsWithSameUnicodeScalarsWorksOnLongerNeedleFalse() throws {
|
||||||
XCTAssertFalse("_".startsWithSameUnicodeScalars(string: "__"))
|
XCTAssertFalse("_".startsWithExactly("__"))
|
||||||
}
|
}
|
||||||
|
|
||||||
func testStartsWithSameUnicodeScalarsWorksOnSameStrings() throws {
|
func testStartsWithSameUnicodeScalarsWorksOnSameStrings() throws {
|
||||||
XCTAssertTrue("beer".startsWithSameUnicodeScalars(string: "beer"))
|
XCTAssertTrue("beer".startsWithExactly("beer"))
|
||||||
}
|
}
|
||||||
|
|
||||||
func testStartsWithSameUnicodeScalarsWorksOnPrefix() throws {
|
func testStartsWithSameUnicodeScalarsWorksOnPrefix() throws {
|
||||||
XCTAssertTrue("beer is good".startsWithSameUnicodeScalars(string: "beer"))
|
XCTAssertTrue("beer is good".startsWithExactly("beer"))
|
||||||
}
|
}
|
||||||
|
|
||||||
func testStartsWithSameUnicodeScalarsSaysNoForTheSameStringInDifferentNormalisations() throws {
|
func testStartsWithSameUnicodeScalarsSaysNoForTheSameStringInDifferentNormalisations() throws {
|
||||||
@ -598,11 +598,11 @@ class HTTPResponseCompressorTest: XCTestCase {
|
|||||||
let nfdEncodedEAigu = "\u{65}\u{301}"
|
let nfdEncodedEAigu = "\u{65}\u{301}"
|
||||||
|
|
||||||
XCTAssertEqual(nfcEncodedEAigu, nfdEncodedEAigu)
|
XCTAssertEqual(nfcEncodedEAigu, nfdEncodedEAigu)
|
||||||
XCTAssertTrue(nfcEncodedEAigu.startsWithSameUnicodeScalars(string: nfcEncodedEAigu))
|
XCTAssertTrue(nfcEncodedEAigu.startsWithExactly(nfcEncodedEAigu))
|
||||||
XCTAssertTrue(nfdEncodedEAigu.startsWithSameUnicodeScalars(string: nfdEncodedEAigu))
|
XCTAssertTrue(nfdEncodedEAigu.startsWithExactly(nfdEncodedEAigu))
|
||||||
// the both do _not_ start like the other
|
// the both do _not_ start like the other
|
||||||
XCTAssertFalse(nfcEncodedEAigu.startsWithSameUnicodeScalars(string: nfdEncodedEAigu))
|
XCTAssertFalse(nfcEncodedEAigu.startsWithExactly(nfdEncodedEAigu))
|
||||||
XCTAssertFalse(nfdEncodedEAigu.startsWithSameUnicodeScalars(string: nfcEncodedEAigu))
|
XCTAssertFalse(nfdEncodedEAigu.startsWithExactly(nfcEncodedEAigu))
|
||||||
}
|
}
|
||||||
|
|
||||||
func testStartsWithSaysYesForTheSameStringInDifferentNormalisations() throws {
|
func testStartsWithSaysYesForTheSameStringInDifferentNormalisations() throws {
|
||||||
|
Loading…
x
Reference in New Issue
Block a user