This PR contains the latest updates from the generic Website template, which have been added while working on #loud-amsterdam. Reviewed-on: #1 Co-authored-by: Javier Cicchelli <javier@rock-n-code.com>
171 lines
3.9 KiB
Swift
171 lines
3.9 KiB
Swift
import Foundation
|
|
import Testing
|
|
|
|
@testable import Localization
|
|
|
|
@Suite(
|
|
"Negotiate method",
|
|
.tags(.method)
|
|
)
|
|
struct NegotiateTests {
|
|
|
|
// MARK: Constants
|
|
|
|
private let negotiate = Negotiate(bundle: .module)
|
|
|
|
// MARK: Functional tests
|
|
|
|
@Test
|
|
func `matches an exact language tag`() {
|
|
let language = negotiate(acceptLanguage: "de")
|
|
|
|
#expect(language == "de")
|
|
}
|
|
|
|
@Test
|
|
func `matches a regional language tag`() {
|
|
let language = negotiate(acceptLanguage: "de-AT")
|
|
|
|
#expect(language == "de")
|
|
}
|
|
|
|
@Test
|
|
func `matches a regional catalog language exactly`() {
|
|
let language = negotiate(acceptLanguage: "pt-BR")
|
|
|
|
#expect(language == "pt-BR")
|
|
}
|
|
|
|
@Test
|
|
func `matches a regional catalog language by its primary subtag`() {
|
|
let language = negotiate(acceptLanguage: "pt")
|
|
|
|
#expect(language == "pt-BR")
|
|
}
|
|
|
|
@Test
|
|
func `respects the header order of preference`() {
|
|
let language = negotiate(acceptLanguage: "de, en")
|
|
|
|
#expect(language == "de")
|
|
}
|
|
|
|
@Test
|
|
func `orders the language tags by descending quality weight`() {
|
|
let language = negotiate(acceptLanguage: "en;q=0.5, de;q=0.9")
|
|
|
|
#expect(language == "de")
|
|
}
|
|
|
|
@Test
|
|
func `treats a tag without a weight as the highest preference`() {
|
|
let language = negotiate(acceptLanguage: "en;q=0.9, de")
|
|
|
|
#expect(language == "de")
|
|
}
|
|
|
|
@Test
|
|
func `treats a tag with a malformed weight as the highest preference`() {
|
|
let language = negotiate(acceptLanguage: "en;q=0.9, de;q=broken")
|
|
|
|
#expect(language == "de")
|
|
}
|
|
|
|
@Test
|
|
func `drops language tags weighted as not acceptable`() {
|
|
let language = negotiate(acceptLanguage: "de;q=0, en;q=0.8")
|
|
|
|
#expect(language == "en")
|
|
}
|
|
|
|
@Test
|
|
func `falls back to the default when every tag is weighted as not acceptable`() {
|
|
let language = negotiate(acceptLanguage: "de;q=0, fr;q=0")
|
|
|
|
#expect(language == "en")
|
|
}
|
|
|
|
@Test
|
|
func `serves the default language for a wildcard`() {
|
|
let language = negotiate(acceptLanguage: "fr;q=0.9, *;q=0.5")
|
|
|
|
#expect(language == "en")
|
|
}
|
|
|
|
@Test
|
|
func `trims whitespace around the language tags`() {
|
|
let language = negotiate(acceptLanguage: " de , en ")
|
|
|
|
#expect(language == "de")
|
|
}
|
|
|
|
@Test
|
|
func `falls back to the default for an unsupported language`() {
|
|
let language = negotiate(acceptLanguage: "fr")
|
|
|
|
#expect(language == "en")
|
|
}
|
|
|
|
@Test
|
|
func `falls back to the default for a missing header`() {
|
|
let language = negotiate(acceptLanguage: nil)
|
|
|
|
#expect(language == "en")
|
|
}
|
|
|
|
@Test
|
|
func `falls back to the default for an empty header`() {
|
|
let language = negotiate(acceptLanguage: "")
|
|
|
|
#expect(language == "en")
|
|
}
|
|
|
|
@Test
|
|
func `falls back to the default for a header without language tags`() {
|
|
let language = negotiate(acceptLanguage: " , ;q=0.5,")
|
|
|
|
#expect(language == "en")
|
|
}
|
|
|
|
@Test
|
|
func `honours a supported requested language over the header`() {
|
|
let language = negotiate(
|
|
requested: "de",
|
|
acceptLanguage: "en"
|
|
)
|
|
|
|
#expect(language == "de")
|
|
}
|
|
|
|
@Test
|
|
func `matches a regional requested language by its primary subtag`() {
|
|
let language = negotiate(
|
|
requested: "de-AT",
|
|
acceptLanguage: "en"
|
|
)
|
|
|
|
#expect(language == "de")
|
|
}
|
|
|
|
@Test
|
|
func `ignores an unsupported requested language`() {
|
|
let language = negotiate(
|
|
requested: "fr",
|
|
acceptLanguage: "de"
|
|
)
|
|
|
|
#expect(language == "de")
|
|
}
|
|
|
|
@Test
|
|
func `ignores an empty requested language`() {
|
|
let language = negotiate(
|
|
requested: "",
|
|
acceptLanguage: "de"
|
|
)
|
|
|
|
#expect(language == "de")
|
|
}
|
|
|
|
}
|