Files
swiftui-math/Tests/SwiftUIMathTests/Internal/Font/FontMetricsTests.swift
2026-01-10 17:45:16 +01:00

80 lines
2.7 KiB
Swift

import CoreGraphics
import CoreText
import Foundation
import Testing
@testable import SwiftUIMath
@Suite
struct FontMetricsTests {
private let fontName: Math.Font.Name = .latinModern
private func makePlatformFont(size: CGFloat = 20) throws -> Math.PlatformFont {
try #require(Math.PlatformFont(font: Math.Font(name: fontName, size: size)))
}
@Test
func loadsGraphicsFont() throws {
let font = try #require(Math.FontRegistry.shared.graphicsFont(named: fontName))
#expect(font.fullName != nil)
}
@Test
func createsPlatformFontsAtDifferentSizes() throws {
let font12 = try makePlatformFont(size: 12)
let font24 = try makePlatformFont(size: 24)
#expect(CTFontGetSize(font12.ctFont) == 12)
#expect(CTFontGetSize(font24.ctFont) == 24)
}
@Test
func metricsHavePositiveMathUnit() throws {
let platformFont = try makePlatformFont()
#expect(platformFont.metrics.mathUnit > 0)
}
@Test
func verticalVariantsUseTableEntries() throws {
let platformFont = try makePlatformFont()
let table = try #require(Math.FontRegistry.shared.table(named: fontName))
let entry = try #require(table.vVariants.first { !$0.value.isEmpty })
let glyph = platformFont.cgFont.getGlyphWithGlyphName(name: entry.key as CFString)
#expect(glyph != 0)
let variants = platformFont.metrics.verticalVariants(forGlyph: glyph)
#expect(!variants.isEmpty)
}
@Test
func horizontalVariantsUseTableEntries() throws {
let platformFont = try makePlatformFont()
let table = try #require(Math.FontRegistry.shared.table(named: fontName))
let entry = try #require(table.hVariants.first { !$0.value.isEmpty })
let glyph = platformFont.cgFont.getGlyphWithGlyphName(name: entry.key as CFString)
#expect(glyph != 0)
let variants = platformFont.metrics.horizontalVariants(forGlyph: glyph)
#expect(!variants.isEmpty)
}
@Test
func verticalAssemblyIsAvailableForExtensibleGlyphs() throws {
let platformFont = try makePlatformFont()
let table = try #require(Math.FontRegistry.shared.table(named: fontName))
let entry = try #require(table.vAssembly.first)
let glyph = platformFont.cgFont.getGlyphWithGlyphName(name: entry.key as CFString)
#expect(glyph != 0)
let assembly = platformFont.metrics.verticalAssembly(forGlyph: glyph)
#expect(!assembly.isEmpty)
}
@Test
func metricValuesAreFinite() throws {
let platformFont = try makePlatformFont()
let glyph = platformFont.cgFont.getGlyphWithGlyphName(name: "f" as CFString)
#expect(glyph != 0)
let italicCorrection = platformFont.metrics.italicCorrection(forGlyph: glyph)
let topAccent = platformFont.metrics.topAccentAdjustment(forGlyph: glyph)
#expect(italicCorrection.isFinite)
#expect(topAccent.isFinite)
}
}