fix: honor CJK-capable font-family before fallback injection (#2241)
This commit is contained in:
parent
27fa3873be
commit
97fee253b5
2 changed files with 173 additions and 10 deletions
|
|
@ -2138,6 +2138,54 @@ final class GhosttyMouseFocusTests: XCTestCase {
|
|||
XCTAssertFalse(hiraginoRanges.contains("U+AC00-U+D7AF"), "Hangul NOT in Hiragino")
|
||||
}
|
||||
|
||||
// MARK: autoInjectedCJKFontMappings
|
||||
|
||||
func testAutoInjectedCJKFontMappingsSkipsRangesCoveredByConfiguredPrimaryFont() throws {
|
||||
let coveredRanges: Set<String> = [
|
||||
"U+3000-U+303F",
|
||||
"U+4E00-U+9FFF",
|
||||
"U+F900-U+FAFF",
|
||||
"U+FF00-U+FFEF",
|
||||
"U+3400-U+4DBF",
|
||||
]
|
||||
|
||||
try withTempConfig("font-family = Sarasa Mono K\n") { path in
|
||||
XCTAssertNil(
|
||||
GhosttyApp.autoInjectedCJKFontMappings(
|
||||
preferredLanguages: ["zh-Hans-CN"],
|
||||
configPaths: [path],
|
||||
rangeCoverageProbe: { fontFamily, range in
|
||||
XCTAssertEqual(fontFamily, "Sarasa Mono K")
|
||||
return coveredRanges.contains(range)
|
||||
}
|
||||
)
|
||||
)
|
||||
}
|
||||
}
|
||||
|
||||
func testAutoInjectedCJKFontMappingsKeepsOnlyUncoveredRanges() throws {
|
||||
let coveredRanges: Set<String> = [
|
||||
"U+3000-U+303F",
|
||||
"U+4E00-U+9FFF",
|
||||
"U+F900-U+FAFF",
|
||||
"U+FF00-U+FFEF",
|
||||
"U+3400-U+4DBF",
|
||||
]
|
||||
|
||||
try withTempConfig("font-family = Example CJK Mono\n") { path in
|
||||
let mappings = GhosttyApp.autoInjectedCJKFontMappings(
|
||||
preferredLanguages: ["ja-JP"],
|
||||
configPaths: [path],
|
||||
rangeCoverageProbe: { _, range in
|
||||
coveredRanges.contains(range)
|
||||
}
|
||||
)!
|
||||
|
||||
XCTAssertEqual(Set(mappings.map(\.0)), Set(["U+3040-U+309F", "U+30A0-U+30FF"]))
|
||||
XCTAssertEqual(Set(mappings.map(\.1)), Set(["Hiragino Sans"]))
|
||||
}
|
||||
}
|
||||
|
||||
// MARK: userConfigContainsCJKCodepointMap
|
||||
|
||||
func testUserConfigContainsCJKCodepointMapDetectsPresence() throws {
|
||||
|
|
@ -2386,6 +2434,29 @@ final class GhosttyMouseFocusTests: XCTestCase {
|
|||
}
|
||||
}
|
||||
|
||||
func testShouldInjectCJKFontFallbackSkipsConfiguredFontThatAlreadyCoversMappedRanges() throws {
|
||||
let coveredRanges: Set<String> = [
|
||||
"U+3000-U+303F",
|
||||
"U+4E00-U+9FFF",
|
||||
"U+F900-U+FAFF",
|
||||
"U+FF00-U+FFEF",
|
||||
"U+3400-U+4DBF",
|
||||
]
|
||||
|
||||
try withTempConfig("font-family = Sarasa Mono K\n") { path in
|
||||
XCTAssertFalse(
|
||||
GhosttyApp.shouldInjectCJKFontFallback(
|
||||
preferredLanguages: ["zh-Hans-CN"],
|
||||
configPaths: [path],
|
||||
rangeCoverageProbe: { fontFamily, range in
|
||||
XCTAssertEqual(fontFamily, "Sarasa Mono K")
|
||||
return coveredRanges.contains(range)
|
||||
}
|
||||
)
|
||||
)
|
||||
}
|
||||
}
|
||||
|
||||
func testLoadedCJKScanPathsSkipsReleaseAppSupportWhenTaggedConfigExists() throws {
|
||||
let appSupport = FileManager.default.temporaryDirectory
|
||||
.appendingPathComponent("cmux-test-cjk-app-support-\(UUID().uuidString)")
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue