80 lines
2.7 KiB
Swift
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)
|
|
}
|
|
}
|