Add FontMetricsTests
This commit is contained in:
79
Tests/SwiftUIMathTests/Internal/Font/FontMetricsTests.swift
Normal file
79
Tests/SwiftUIMathTests/Internal/Font/FontMetricsTests.swift
Normal file
@@ -0,0 +1,79 @@
|
|||||||
|
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)
|
||||||
|
}
|
||||||
|
}
|
||||||
Reference in New Issue
Block a user